diff --git a/.gitignore b/.gitignore index bbc54024f7dacc3bb4d14e13735657d849671c35..a84642fc11343609ade094aef94f787b0c77def6 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 da61b5d1397fe7d9d9936de4e68f1637ff36f3d4..d763c32dd07654d074c5f1f680e281a113f3d947 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 \ @@ -1324,6 +1325,7 @@ myexeclib_SCRIPTS = \ tools/kvm-ifup-os \ tools/xen-ifup-os \ tools/vif-ganeti \ + tools/vif-ganeti-metad \ tools/net-common \ $(HS_MYEXECLIB_PROGS) @@ -1363,6 +1365,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) \ @@ -1877,6 +1880,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 a5a9a0b45a5933364bcfdb47862f1e0834821d0a..0e02142f9afdb9fe1f3b06869591032c9a48ec59 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 0000000000000000000000000000000000000000..092b6a0601410259642f9e5bfba7b4edfcf4349e --- /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