import config
import lib
+import libvirt_xml
def cmdline (subparsers):
p = subparsers.add_parser (
)
p.set_defaults (run=run)
-def run (c, args, nodes):
+def run (c, args):
# Did the user request a particular node? If not, we'll run it
# on any node which is up.
m = re.match (r'^(.*):(.*)$', args.name)
if m:
node_name = m.group (1)
vm_name = m.group (2)
- if node_name in nodes:
- node = nodes[node_name]
- if not node.ping ():
- sys.exit ("error: requested node (%s) is not up, use mclu wake %s" %
- (node_name, node_name))
- else:
- sys.exit ("error: requested node (%s) does not exist" % node_name)
else:
- node = lib.pick_any_node_which_is_up (nodes)
+ node = lib.pick_any_node_which_is_up (c)
vm_name = args.name
# Get all the guests, so we can tell if the name is a duplicate.
- running, inactive = lib.get_all_guests (c, nodes.values ())
+ running, inactive = lib.get_all_guests (c)
if vm_name in running or vm_name in inactive:
sys.exit ("error: node name (%s) already exists" % vm_name)
# Generate the XML. Would be nice to use virt-install here, but
# it doesn't work: RHBZ#1095789
- network_model = "virtio"
- if not args.virtio:
- network_model = "e1000"
-
- # XXX Quoting, and we should use a real XML generator.
- xml = """
-<domain type='kvm'>
- <name>%s</name>
- <memory unit='MiB'>%d</memory>
- <currentMemory unit='MiB'>%d</currentMemory>
- <vcpu>%d</vcpu>
- <os>
- <type>hvm</type>
- <boot dev='hd'/>
- </os>
- <features>
- <acpi/>
- <apic/>
- <pae/>
- </features>
- <cpu mode='host-model' fallback='allow' />
- <clock offset='utc'>
- <timer name='rtc' tickpolicy='catchup'/>
- <timer name='pit' tickpolicy='delay'/>
- <timer name='hpet' present='no'/>
- </clock>
- <on_poweroff>destroy</on_poweroff>
- <on_reboot>restart</on_reboot>
- <on_crash>restart</on_crash>
- <devices>
- <interface type='bridge'>
- <source bridge='br0'/>
- <model type='%s'/>
- </interface>
- <console type='pty'>
- <target type='virtio' port='0'/>
- </console>
- <input type='tablet' bus='usb'/>
- <input type='mouse' bus='ps2'/>
- <!-- <input type='keyboard' bus='ps2'/> -->
- <graphics type='vnc' autoport='yes'/>
- <video>
- <model type='cirrus' vram='9216' heads='1'/>
- </video>
-""" % (vm_name, args.memory, args.memory, args.vcpus, network_model)
-
- # virtio-scsi or IDE disk:
- if args.virtio:
- xml += """
- <controller type="scsi" index="0" model="virtio-scsi"/>
- <disk type='file' device='disk'>
- <driver name='qemu' type='qcow2' cache='none' io='native'/>
- <source file='%s'/>
- <target dev='sda' bus='scsi'/>
- </disk>
-""" % output
- else:
- xml += """
- <disk type='file' device='disk'>
- <driver name='qemu' type='qcow2' cache='none' io='native'/>
- <source file='%s'/>
- <target dev='sda' bus='ide'/>
- </disk>
-""" % output
-
- xml += """
- </devices>
-</domain>
-"""
+ xml = libvirt_xml.generate_libvirt_xml (vm_name,
+ args.memory,
+ args.vcpus,
+ args.virtio,
+ output)
# Write the XML to the xmls_dir.
fp = open ("%s/%s.xml" % (c['xmls_dir'], vm_name), "w")
fp.close ()
# Start the guest.
- lib.start_guest (c, node, vm_name)
+ lib.start_guest (c, node_name, vm_name)
+ print "guest built and started on node %s" % node_name