esac
}
+call_hook_script() {
+ local domid=$1
+ local action=$2
+ # Call the VIF hotplug hook if present
+ if [ -x /etc/xapi.d/vif-hotplug ]; then
+ local vm=$(xenstore-read "/local/domain/$domid/vm" 2>/dev/null)
+ if [ $? -eq 0 -a -n "${vm}" ] ; then
+ local vm_uuid=$(xenstore-read "$vm/uuid" 2>/dev/null)
+ fi
+ if [ -n "${vm_uuid}" ] ; then
+ logger -t scripts-vif "VM UUID ${vm_uuid}"
+ fi
+
+ local vif_uuid=$(xenstore-read "${PRIVATE}/vif-uuid" 2>/dev/null)
+ if [ -n "${vif_uuid}" ] ; then
+ logger -t scripts-vif "VIF UUID ${vif_uuid}"
+ fi
+ if [ -n "${vif_uuid}" -a -n "${vm_uuid}" ] ; then
+ logger -t scripts-vif "Calling VIF hotplug hook for VM ${vm_uuid}, VIF ${vif_uuid}"
+ /etc/xapi.d/vif-hotplug -action "${action}" -vifuuid "${vif_uuid}" -vmuuid "${vm_uuid}"
+ fi
+ fi
+}
+
NETWORK_MODE=$(cat /etc/xensource/network.conf)
ACTION=$1
case ${TYPE} in
vif)
- DOMID=`echo ${XENBUS_PATH} | cut -f 3 -d '/'`
- DEVID=`echo ${XENBUS_PATH} | cut -f 4 -d '/'`
+ if [ -z ${XENBUS_PATH} ]; then
+ DOMID=$3
+ DEVID=$4
+ else
+ DOMID=`echo ${XENBUS_PATH} | cut -f 3 -d '/'`
+ DEVID=`echo ${XENBUS_PATH} | cut -f 4 -d '/'`
+ fi
dev=vif${DOMID}.${DEVID}
;;
tap)
# xs-xen.pq.hq:91e986b8e49f netback-wait-for-hotplug
xenstore-write "/local/domain/0/backend/vif/${DOMID}/${DEVID}/hotplug-status" "connected"
+ call_hook_script $DOMID "${ACTION}"
fi
;;
remove)
if [ "${TYPE}" = "vif" ] ;then
xenstore-rm "${HOTPLUG}/hotplug"
+ call_hook_script $DOMID "${ACTION}"
fi
logger -t scripts-vif "${dev} has been removed"
remove_from_bridge
;;
+
+move)
+ if [ "${TYPE}" = "vif" ] ;then
+ add_to_bridge
+ fi
esac
host = session.xenapi.host.get_by_uuid(inventory['INSTALLATION_UUID'])
self.__get_pif_records_from_xapi(session, host)
-
- self.__get_tunnel_records_from_xapi(session)
self.__get_pool_records_from_xapi(session)
+ self.__get_tunnel_records_from_xapi(session)
self.__get_vlan_records_from_xapi(session)
self.__get_bond_records_from_xapi(session)
self.__get_network_records_from_xapi(session)
for (ref,rec) in self.__pools.items():
self.__to_xml(xml, xml.documentElement, _POOL_XML_TAG, ref, rec, _POOL_ATTRS)
- f = open(cache_file, 'w')
+ temp_file = cache_file + ".%d" % os.getpid()
+ f = open(temp_file, 'w')
f.write(xml.toprettyxml())
f.close()
+ os.rename(temp_file, cache_file)
def get_pif_by_uuid(self, uuid):
pifs = map(lambda (ref,rec): ref,
import traceback
import re
import random
+import syslog
management_pif = None
return None
def rename_netdev(old_name, new_name):
- log("Changing the name of %s to %s" % (old_name, new_name))
- run_command(['/sbin/ifconfig', old_name, 'down'])
- if not run_command(['/sbin/ip', 'link', 'set', old_name, 'name', new_name]):
- raise Error("Could not rename %s to %s" % (old_name, new_name))
+ raise Error("Trying to rename %s to %s - This functionality has been removed" % (old_name, new_name))
+ # log("Changing the name of %s to %s" % (old_name, new_name))
+ # run_command(['/sbin/ifconfig', old_name, 'down'])
+ # if not run_command(['/sbin/ip', 'link', 'set', old_name, 'name', new_name]):
+ # raise Error("Could not rename %s to %s" % (old_name, new_name))
pifrec = db().get_pif_record(pif)
device = pifrec['device']
"""Bring up a network interface"""
if not os.path.exists(root_prefix() + "/etc/sysconfig/network-scripts/ifcfg-%s" % netdev):
raise Error("ifup: device %s exists but ifcfg-%s does not" % (netdev,netdev))
+ d = os.getenv("DHCLIENTARGS","")
+ if os.path.exists("/etc/firstboot.d/data/firstboot_in_progress"):
+ os.putenv("DHCLIENTARGS", d + " -T 240 " )
run_command(["/sbin/ifup", netdev])
+ os.putenv("DHCLIENTARGS", d )
#
#
f.write("XEMANAGED=yes\n")
f.write("DEVICE=%s\n" % ipdev)
f.write("ONBOOT=no\n")
+ f.write("NOZEROCONF=yes\n")
return f
pifs_on_host = [p for p in db().get_all_pifs() if not p in pif_get_bond_masters(pif)]
+ # now prune out bond slaves as they are not connected to the IP
+ # stack and so cannot be used as gateway or DNS devices.
+ pifs_on_host = [ p for p in pifs_on_host if len(pif_get_bond_masters(p)) == 0]
+
# loop through all the pifs on this host looking for one with
# other-config:peerdns = true, and one with
# other-config:default-route=true