diff options
Diffstat (limited to 'tools')
-rw-r--r-- | tools/python/xen/xend/XendAPI.py | 6 | ||||
-rw-r--r-- | tools/python/xen/xend/XendNode.py | 20 | ||||
-rw-r--r-- | tools/python/xen/xm/create.dtd | 1 | ||||
-rw-r--r-- | tools/python/xen/xm/xenapi_create.py | 45 |
4 files changed, 41 insertions, 31 deletions
diff --git a/tools/python/xen/xend/XendAPI.py b/tools/python/xen/xend/XendAPI.py index 856a53f10a..ff59cae102 100644 --- a/tools/python/xen/xend/XendAPI.py +++ b/tools/python/xen/xend/XendAPI.py @@ -1823,9 +1823,6 @@ class XendAPI(object): VM_metrics_attr_rw = [] VM_metrics_methods = [] - def VIF_metrics_get_all(self, session): - return self.VIF_get_all(session) - def _VM_metrics_get(self, _, ref): return XendVMMetrics.get_by_uuid(ref) @@ -2135,6 +2132,9 @@ class XendAPI(object): VIF_metrics_attr_rw = [] VIF_metrics_methods = [] + def VIF_metrics_get_all(self, session): + return self.VIF_get_all(session) + def VIF_metrics_get_record(self, _, ref): vm = XendDomain.instance().get_vm_with_dev_uuid('vif', ref) if not vm: diff --git a/tools/python/xen/xend/XendNode.py b/tools/python/xen/xend/XendNode.py index 887b1f1b80..aad2ac7530 100644 --- a/tools/python/xen/xend/XendNode.py +++ b/tools/python/xen/xend/XendNode.py @@ -143,8 +143,14 @@ class XendNode: for net_uuid, network in saved_networks.items(): self.network_create(network, False, net_uuid) else: - self.network_create({'name_label' : 'net0' }, False) - + bridges = Brctl.get_state().keys() + for bridge in bridges: + self.network_create({'name_label' : bridge }, False) + + # Get a mapping from interface to bridge + + if_to_br = dict(reduce(lambda ls,(b,ifs):[(i,b) for i in ifs] + ls, + Brctl.get_state().items(), [])) # initialise PIFs saved_pifs = self.state_store.load_state('pif') if saved_pifs: @@ -174,8 +180,14 @@ class XendNode: pif_uuid, pif['network'], exn.pif_uuid) else: for name, mtu, mac in linux_get_phy_ifaces(): - network = self.networks.values()[0] - self._PIF_create(name, mtu, -1, mac, network, False) + bridge_name = if_to_br.get(name, None) + if bridge_name is not None: + networks = [network for + network in self.networks.values() + if network.get_name_label() == bridge_name] + if len(networks) > 0: + network = networks[0] + self._PIF_create(name, mtu, -1, mac, network, False) # initialise storage saved_srs = self.state_store.load_state('sr') diff --git a/tools/python/xen/xm/create.dtd b/tools/python/xen/xm/create.dtd index 9be5cefbfb..1c57a59d06 100644 --- a/tools/python/xen/xm/create.dtd +++ b/tools/python/xen/xm/create.dtd @@ -74,7 +74,6 @@ mtu CDATA #REQUIRED device CDATA #REQUIRED qos_algorithm_type CDATA #REQUIRED - bridge CDATA #IMPLIED network CDATA #IMPLIED> <!ELEMENT pv EMPTY> diff --git a/tools/python/xen/xm/xenapi_create.py b/tools/python/xen/xm/xenapi_create.py index 0d2ab7dffb..31e59d831a 100644 --- a/tools/python/xen/xm/xenapi_create.py +++ b/tools/python/xen/xm/xenapi_create.py @@ -25,7 +25,7 @@ from xml.parsers.xmlproc import xmlproc, xmlval, xmldtd from xen.xend import sxp from xen.xend.XendAPIConstants import XEN_API_ON_NORMAL_EXIT, \ XEN_API_ON_CRASH_BEHAVIOUR - +from xen.xm.opts import OptionError import sys import os @@ -184,15 +184,7 @@ class xenapi_create: map(self.check_vif, vifs) def check_vif(self, vif): - """ - Check that the vif has - either a bridge or network - name but not both - """ - if "bridge" in vif.attributes.keys() \ - and "network" in vif.attributes.keys(): - raise "You cannot specify both a bridge and\ - a network name." + pass # Cleanup methods here def cleanup_vdis(self, vdi_refs_dict): @@ -313,19 +305,23 @@ class xenapi_create: traceback.print_exc() sys.exit(-1) - # Now create vbds + try: + # Now create vbds - vbds = vm.getElementsByTagName("vbd") + vbds = vm.getElementsByTagName("vbd") - self.create_vbds(vm_ref, vbds, vdis) + self.create_vbds(vm_ref, vbds, vdis) - # Now create vifs + # Now create vifs - vifs = vm.getElementsByTagName("vif") + vifs = vm.getElementsByTagName("vif") - self.create_vifs(vm_ref, vifs) + self.create_vifs(vm_ref, vifs) - return vm_ref + return vm_ref + except: + server.xenapi.VM.destroy(vm_ref) + raise def create_vbds(self, vm_ref, vbds, vdis): log(DEBUG, "create_vbds") @@ -363,13 +359,16 @@ class xenapi_create: def create_vif(self, vm_ref, vif): log(DEBUG, "create_vif") - if "bridge" in vif.attributes.keys(): - raise "Not allowed to add by bridge just yet" - elif "network" in vif.attributes.keys(): - network = [network_ref + if "network" in vif.attributes.keys(): + networks = [network_ref for network_ref in server.xenapi.network.get_all() if server.xenapi.network.get_name_label(network_ref) - == vif.attributes["network"].value][0] + == vif.attributes["network"].value] + if len(networks) > 0: + network = networks[0] + else: + raise OptionError("Network %s doesn't exist" + % vif.attributes["network"].value) else: network = self._get_network_ref() @@ -631,7 +630,7 @@ class sxp2xml: vif.attributes["qos_algorithm_type"] = "" if get_child_by_name(vif_sxp, "bridge") is not None: - vif.attributes["bridge"] \ + vif.attributes["network"] \ = get_child_by_name(vif_sxp, "bridge") return vif |