[ovirt-users] Create VM from template on a different storage

Claudio Yacarini cyacarini at rcp.pe
Mon Jan 30 17:14:40 UTC 2017


Hi, this is my first question, so:

I’m playing with python sdk and i can manage the CRUD and some other options, but im stuck in this one, when I create a VM from template this new machine is created in the same storage than template is. If i want to move the machine I create it, wait to reach down status and then, move their disks to a new storage. What I want is create a new machine from scratch on a new storage.



############################ CURRENT SCRIPT
def create_virtual_machine(cnn, vm_name, cluster_name, create_from='Blank'):
    MB = 1024*1024
    GB = 1024*MB
    try:
        vm_created = cnn.vms.add(params.VM(
            name=vm_name,
            memory=1*GB,
            cluster=cnn.clusters.get(cluster_name),
            template=cnn.templates.get(create_from),
            disks=params.Disks(clone=True))
        )
        print 'Waiting for VM to reach Down status'
        while cnn.vms.get(id=vm_created.id).status.state != 'down':
            sys.stdout.write( dot )
            sys.stdout.flush()
            time.sleep(1)
        print ""
        response = (True, vm_created.id)
    except Exception as e:
        print 'Failed to create VM\n%s' % str(e)
        response = (False, str(e))
    return response


def migrate_disks(cnn, vm_name, sd_name, vm_guid=None):
    storage = cnn.storagedomains.get(name=sd_name)
    for index, disco in enumerate(get_vm(cnn, vm_name, vm_guid=vm_guid).disks.list()):
        disco.set_alias("{0}_Disk{1}".format(vm_name, (index+1)))
        disco = disco.update()
        if storage.disks.get(disco.alias) is None:
            disco.move(params.Action(storage_domain=storage))
            print 'Waiting for migrate Disk {0}'.format(disco.alias)
            time.sleep(2)
            while get_vm(cnn, vm_name, vm_guid=vm_guid).disks.get(name=disco.name).status.state != 'ok':
                sys.stdout.write( dot )
                sys.stdout.flush()
                time.sleep(1)
            time.sleep(4)
            print ""
            print "Disk '{0}' From '{1}' was moved to {2}".format(disco.alias,
                vm_name, sd_name)
        else:
            print "Disk '{0}' From '{1}' is already in {2}".format(disco.alias,
                vm_name, sd_name)



############################ WHAT I WANT IS SOMETHING LIKE THIS
discos = params.Disks()
for index, tmp_disk in enumerate(template.disks.list()):
  disk = params.Disk(
    name = "{0}_{1}".format(vm_name, (index+1)),
    storage_domains=params.StorageDomains(
        storage_domain = [api.storagedomains.get(sd.name)]
    ),
  )
  discos.add_disk(disk)

vm_created_dos = cnn.vms.add(params.VM(
    name=vm_name,
    memory=1*GB,
    cluster=cnn.clusters.get(cluster_name),
    template=cnn.templates.get(create_from),
    disks=discos
    )
)



Thank you all from Perú!!




-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.ovirt.org/pipermail/users/attachments/20170130/cc8bc832/attachment-0001.html>


More information about the Users mailing list