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

Reply via email to