The script does the bare minimum required to set up the interface during instance creation. The rest of the process is carried out by the ifup-os script.
Signed-off-by: Petr Pudlak <[email protected]> --- .gitignore | 1 + Makefile.am | 7 +++++ lib/pathutils.py | 2 ++ tools/vif-ganeti-metad.in | 70 +++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 80 insertions(+) create mode 100644 tools/vif-ganeti-metad.in diff --git a/.gitignore b/.gitignore index bbc5402..a84642f 100644 --- a/.gitignore +++ b/.gitignore @@ -123,6 +123,7 @@ /tools/users-setup /tools/vcluster-setup /tools/vif-ganeti +/tools/vif-ganeti-metad /tools/net-common /tools/node-cleanup /tools/node-daemon-setup diff --git a/Makefile.am b/Makefile.am index b95f668..9b4367d 100644 --- a/Makefile.am +++ b/Makefile.am @@ -295,6 +295,7 @@ CLEANFILES = \ tools/kvm-ifup-os \ tools/xen-ifup-os \ tools/vif-ganeti \ + tools/vif-ganeti-metad \ tools/net-common \ tools/users-setup \ tools/vcluster-setup \ @@ -1310,6 +1311,7 @@ myexeclib_SCRIPTS = \ tools/kvm-ifup-os \ tools/xen-ifup-os \ tools/vif-ganeti \ + tools/vif-ganeti-metad \ tools/net-common \ $(HS_MYEXECLIB_PROGS) @@ -1349,6 +1351,7 @@ EXTRA_DIST = \ tools/kvm-ifup.in \ tools/ifup-os.in \ tools/vif-ganeti.in \ + tools/vif-ganeti-metad.in \ tools/net-common.in \ tools/vcluster-setup.in \ $(docinput) \ @@ -1863,6 +1866,10 @@ tools/vif-ganeti: tools/vif-ganeti.in $(REPLACE_VARS_SED) sed -f $(REPLACE_VARS_SED) < $< > $@ chmod +x $@ +tools/vif-ganeti-metad: tools/vif-ganeti-metad.in $(REPLACE_VARS_SED) + sed -f $(REPLACE_VARS_SED) < $< > $@ + chmod +x $@ + tools/net-common: tools/net-common.in $(REPLACE_VARS_SED) sed -f $(REPLACE_VARS_SED) < $< > $@ chmod +x $@ diff --git a/lib/pathutils.py b/lib/pathutils.py index a5a9a0b..0e02142 100644 --- a/lib/pathutils.py +++ b/lib/pathutils.py @@ -69,6 +69,8 @@ XEN_CONSOLE_WRAPPER = _constants.PKGLIBDIR + "/tools/xen-console-wrapper" CFGUPGRADE = _constants.PKGLIBDIR + "/tools/cfgupgrade" POST_UPGRADE = _constants.PKGLIBDIR + "/tools/post-upgrade" ENSURE_DIRS = _constants.PKGLIBDIR + "/ensure-dirs" +# Script to configure the metadata virtual network interface with Xen +XEN_VIF_METAD_SETUP = _constants.PKGLIBDIR + "/vif-ganeti-metad" ETC_HOSTS = vcluster.ETC_HOSTS # Top-level paths diff --git a/tools/vif-ganeti-metad.in b/tools/vif-ganeti-metad.in new file mode 100644 index 0000000..092b6a0 --- /dev/null +++ b/tools/vif-ganeti-metad.in @@ -0,0 +1,70 @@ +#!/bin/sh +# + +# Copyright (C) 2014 Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# 1. Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +# IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# This Xen vif setup script does the bare minimum required to set up the +# interface during instance creation. The rest of the process is carried out by +# the ifup-os script. + +set -e + +xenstore_read() { + if ! xenstore-read "$XENBUS_PATH/$1" 2>/dev/null ; then + echo "$2" + fi +} + +xenstore_write() { + xenstore-write "$XENBUS_PATH/$1" "$2" +} + +log() { + local level="$1" ; shift + logger -p daemon."${level}" -t "$0" -- "$@" +} + +: "${XENBUS_PATH:?}" "${vif:?}" + +vifname=$(xenstore_read "vifname" "") +if [ -n "$vifname" ] ; then + if [ "$1" = "online" ] && ! ip link show "$vifname" >/dev/null >&2 ; then + log debug "Renaming interface ${vif} to ${vifname}" + ip link set "$vif" name "$vifname" + fi + vif="$vifname" +fi + +case "$1" in + online) + # Tell Xen we're connected + xenstore_write "hotplug-status" "connected" + ;; + offline) + ifconfig "$vif" down || true + ;; +esac -- 2.1.0.rc2.206.gedb03e5
