Add support for creating networks to xm create XML file

signed-off-by: Tom Wilkie <tom.wilkie@gmail.com>
This commit is contained in:
Tom Wilkie committed 2007-04-26 17:30:56 +01:00
1 parent 56d126ace6
commit 6fb84d0fce
2 files changed
+56 -20

No files matched your search

+8 -1
View File
@@ -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)>
+48 -19
View File
@@ -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):
log(DEBUG, "create_vms")
return map(lambda vm: self.create_vm(vm, vdis), vms)
def create_networks(self, networks):
log(DEBUG, "create_networks")
return dict(map(self.create_network, networks))
def create_vm(self, vm, vdis):
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, 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)
return map(lambda vif: self.create_vif(vm_ref, vif, networks), vifs)
def create_vif(self, vm_ref, vif):
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":
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.