Exemplo n.º 1
0
def start_install(name=None,
                  ram=None,
                  disks=None,
                  uuid=None,
                  extra=None,
                  vcpus=None,
                  profile_data=None,
                  arch=None,
                  no_gfx=False,
                  fullvirt=False,
                  bridge=None,
                  virt_type=None,
                  virt_auto_boot=None):

    #FIXME how to do a non-default connection
    #Can we drive off of virt-type?
    connection = None

    if (virt_type is None) or (virt_type == "auto"):
        connection = virtinst.util.default_connection()
    elif virt_type.lower()[0:3] == "xen":
        connection = "xen"
    else:
        connection = "qemu:///system"

    connection = libvirt.open(connection)
    capabilities = virtinst.CapabilitiesParser.parse(
        connection.getCapabilities())
    image_arch = transform_arch(arch)

    image = ImageParser.Image()
    #dev api
    #image = ImageParser.Image(filename="") #FIXME, ImageParser should take in None
    image.name = name

    domain = ImageParser.Domain()
    domain.vcpu = vcpus
    domain.memory = ram
    image.domain = domain

    boot = ImageParser.Boot()
    boot.type = "hvm"  #FIXME HARDCODED
    boot.loader = "hd"  #FIXME HARDCODED
    boot.arch = image_arch
    domain.boots.append(boot)

    #FIXME Several issues. Single Disk, type is hardcoded
    #And there is no way to provision with access to "file"
    process_disk(image, boot, profile_data["file"], disks[0][0], "hda")

    #FIXME boot_index??
    installer = virtinst.ImageInstaller(boot_index=0,
                                        image=image,
                                        capabilities=capabilities)
    guest = virtinst.FullVirtGuest(connection=connection,
                                   installer=installer,
                                   arch=image_arch)

    extra = extra.replace("&", "&")

    guest.extraargs = extra
    guest.set_name(name)
    guest.set_memory(ram)
    guest.set_vcpus(vcpus)

    if not no_gfx:
        guest.set_graphics("vnc")
    else:
        guest.set_graphics(False)

    if uuid is not None:
        guest.set_uuid(uuid)

    process_networks(domain, guest, profile_data, bridge)

    guest.start_install()

    return "use virt-manager or reconnect with virsh console %s" % name