aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTim Deegan <Tim.Deegan@xensource.com>2007-03-29 15:33:32 +0000
committerTim Deegan <Tim.Deegan@xensource.com>2007-03-29 15:33:32 +0000
commit56ada11259ad745d39fdab4ded0403ba13fc0688 (patch)
treebb0d3d5ce0752109934f3048ad422afd8584db17
parentf881b16efa2827b9a3c1e963126fb4f24850d2a9 (diff)
parent82669d3a5e8a6f1ad8985cd1fb4350208fdfd435 (diff)
downloadxen-56ada11259ad745d39fdab4ded0403ba13fc0688.tar.gz
xen-56ada11259ad745d39fdab4ded0403ba13fc0688.tar.bz2
xen-56ada11259ad745d39fdab4ded0403ba13fc0688.zip
Merge
-rw-r--r--tools/python/xen/xend/XendAPI.py6
-rw-r--r--tools/python/xen/xend/XendNode.py20
-rw-r--r--tools/python/xen/xm/create.dtd1
-rw-r--r--tools/python/xen/xm/xenapi_create.py45
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