I am creating a script that spins up VMs, including the creation of VDIs and 
VBDs, respectively. But I have came across an issue with it and have been 
following along the documentation, found here: 

When I go to create a disk image, it constantly fails:

Collecting info on the VM Specs.....
Connection Successful!
Checking for template: CentOS 7
Server has 75 VM objects (this includes templates):
Found: OpaqueRef:858d7cdb-6882-7055-74d1-2e6162533d59 CentOS 7
('Selected template: ', 'CentOS 7')
Installing new VM from the template
Adding non-interactive to the kernel commandline
Choosing an SR to instantiate the VM's disks
Choosing SR: NFS VM disks (uuid 95a58c17-6a0d-1d61-33e2-e445a5e147b3)
Rewriting the disk provisioning XML
Creating Disk for VM..... Test
Connection Successful!
Caught ['UUID_INVALID', 'VDI', '95a58c17-6a0d-1d61-33e2-e445a5e147b3']:
Traceback (most recent call last):
  File "/Users/ryankahil/Xen-Builder/bsdxenbuilder.py", line 148, in create_vdi
    src_vdi = session.xenapi.VDI.get_by_uuid(vdi_uuid)
  File "/Library/Python/2.7/site-packages/XenAPI.py", line 229, in __call__
    return self.__send(self.__name, args)
  File "/Library/Python/2.7/site-packages/XenAPI.py", line 133, in 
    result = _parse_result(getattr(self, methodname)(*full_params))
  File "/Library/Python/2.7/site-packages/XenAPI.py", line 203, in _parse_result
    raise Failure(result['ErrorDescription'])
Failure: ['UUID_INVALID', 'VDI', '95a58c17-6a0d-1d61-33e2-e445a5e147b3’]

I am following the documentation as best as possible and can’t seem to find out 
why the UUID is invalid. The SR I am using is NFS if that helps. And have taken 
some code snippets for VDI and VBD creations in your GitHub repo to see if 
there is something I am doing wrong but again, the same issue. Here is a 
snippet of my code:

def create_vdi(ctx,name,sr,readonly,hdspace,diskimage,vdi_uuid):
    click.echo("Creating Disk for VM..... " + name)
    session = xen_session()
    vdi = None
        src_vdi = session.xenapi.VDI.get_by_uuid(vdi_uuid)
       # sr = session.xenapi.VDI.get_SR(src_vdi)
        vdi_args = session.xenapi.VDI.get_record(src_vdi)
        vdi = session.xenapi.VDI.create(vdi_args)
    except Exception, e:
        print("Caught %s: " % str(e))

The vdi_uuid is provided in another method:

        sr_pool = session.xenapi.pool.get_all()[0]
        default_sr = session.xenapi.pool.get_default_SR(sr_pool)
        default_sr = session.xenapi.SR.get_record(default_sr)
        print("Choosing SR: %s (uuid %s)" % (default_sr['name_label'], 
        print("Rewriting the disk provisioning XML")
        spec = provision.getProvisionSpec(session, vm)
        provision.setProvisionSpec(session, vm, spec)

        create = session.xenapi.VM.provision(vm)
        session.xenapi.VM.start(vm,False, True)
        vdi_uuid = default_sr['uuid’]

I have noticed that once the VM is created (in a stopped state due to having no 
boot disk), simply attaching a DVD drive allows me to install CentOS. But is 
there a way to programmatically do this with XenAPI (I thought creating the 
VDI/VBD does this for me)?

Xen-api mailing list

Reply via email to