# HG changeset patch
# User Tom Wilkie <tom.wilkie@xxxxxxxxx>
# Date 1177605056 -3600
# Node ID 39383ac1aec82d0a421e0fbbb7bc9adc09e2703a
# Parent 5754173c3d81d1e40ce393e2e81d3ee46968e2d6
Add support for creating networks to xm create XML file
signed-off-by: Tom Wilkie <tom.wilkie@xxxxxxxxx>
---
tools/python/xen/xm/create.dtd | 9 ++++
tools/python/xen/xm/xenapi_create.py | 69 ++++++++++++++++++++++++-----------
2 files changed, 57 insertions(+), 21 deletions(-)
diff -r 5754173c3d81 -r 39383ac1aec8 tools/python/xen/xm/create.dtd
--- a/tools/python/xen/xm/create.dtd Thu Apr 26 16:45:06 2007 +0100
+++ b/tools/python/xen/xm/create.dtd Thu Apr 26 17:30:56 2007 +0100
@@ -27,7 +27,8 @@
| crashdump )">
<!ELEMENT xm (vm*,
- vdi*)>
+ vdi*,
+ network*)>
<!ELEMENT version (#PCDATA)>
@@ -98,6 +99,12 @@
sharable CDATA #REQUIRED
read_only CDATA #REQUIRED>
+<!ELEMENT network (name,
+ other_config*)>
+<!ATTLIST network %NAMEID;
+ default_gateway CDATA #REQUIRED
+ default_netmask CDATA #REQUIRED>
+
<!ELEMENT name (label,
description)>
diff -r 5754173c3d81 -r 39383ac1aec8 tools/python/xen/xm/xenapi_create.py
--- a/tools/python/xen/xm/xenapi_create.py Thu Apr 26 16:45:06 2007 +0100
+++ b/tools/python/xen/xm/xenapi_create.py Thu Apr 26 17:30:56 2007 +0100
@@ -93,10 +93,13 @@ class xenapi_create:
vdis = document.getElementsByTagName("vdi")
vdi_refs_dict = self.create_vdis(vdis)
+
+ networks = document.getElementsByTagName("network")
+ network_refs_dict = self.create_networks(networks)
try:
vms = document.getElementsByTagName("vm")
- return self.create_vms(vms, vdi_refs_dict)
+ return self.create_vms(vms, vdi_refs_dict, network_refs_dict)
except Exception, exn:
try_quietly(self.cleanup_vdis(vdi_refs_dict))
raise exn
@@ -223,11 +226,33 @@ class xenapi_create:
return (key, value)
- def create_vms(self, vms, vdis):
+ def create_networks(self, networks):
+ log(DEBUG, "create_networks")
+ return dict(map(self.create_network, networks))
+
+ def create_network(self, network):
+ log(DEBUG, "create_network")
+
+ network_record = {
+ "name_label": get_name_label(network),
+ "name_description": get_name_description(network),
+ "other_config":
+ get_child_nodes_as_dict(network, "other_config",
+ "key", "value"),
+ "default_netmask": network.attributes["default_netmask"].value,
+ "default_gateway": network.attributes["default_gateway"].value
+ }
+
+ key = network.attributes["name"].value
+ value = server.xenapi.network.create(network_record)
+
+ return (key, value)
+
+ def create_vms(self, vms, vdis, networks):
log(DEBUG, "create_vms")
- return map(lambda vm: self.create_vm(vm, vdis), vms)
-
- def create_vm(self, vm, vdis):
+ return map(lambda vm: self.create_vm(vm, vdis, networks), vms)
+
+ def create_vm(self, vm, vdis, networks):
log(DEBUG, "create_vm")
vm_record = {
@@ -321,7 +346,7 @@ class xenapi_create:
vifs = vm.getElementsByTagName("vif")
- self.create_vifs(vm_ref, vifs)
+ self.create_vifs(vm_ref, vifs, networks)
# Now create consoles
@@ -363,31 +388,35 @@ class xenapi_create:
return server.xenapi.VBD.create(vbd_record)
- def create_vifs(self, vm_ref, vifs):
+ def create_vifs(self, vm_ref, vifs, networks):
log(DEBUG, "create_vifs")
- return map(lambda vif: self.create_vif(vm_ref, vif), vifs)
-
- def create_vif(self, vm_ref, vif):
+ return map(lambda vif: self.create_vif(vm_ref, vif, networks), vifs)
+
+ def create_vif(self, vm_ref, vif, networks):
log(DEBUG, "create_vif")
- 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]
- if len(networks) > 0:
- network = networks[0]
+ if 'network' in vif.attributes.keys():
+ network_name = vif.attributes['network'].value
+
+ if network_name in networks.keys():
+ network_uuid = networks[network_name]
else:
- raise OptionError("Network %s doesn't exist"
+ networks = dict([(record['name_label'], record['uuid'])
+ for record in
+ server.xenapi.network.get_all_record()])
+ if network_name in networks.keys():
+ network_uuid = networks[network_name]
+ else:
+ raise OptionError("Network %s doesn't exist"
% vif.attributes["network"].value)
else:
- network = self._get_network_ref()
+ network_uuid = self._get_network_ref()
vif_record = {
"device":
vif.attributes["device"].value,
"network":
- network,
+ network_uuid,
"VM":
vm_ref,
"MAC":
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|