[ovirt-users] Ovirt Python SDK adding a directlun

Gary Lloyd g.lloyd at keele.ac.uk
Thu May 8 21:37:34 UTC 2014


When I add direct Luns this way the size shows as <1 on the GUI and 0 when called from the rest api. All the other items mentioned are not present.

Thanks

> On 8 May 2014, at 18:05, Juan Hernandez <jhernand at redhat.com> wrote:
> 
>> On 05/08/2014 05:04 PM, Gary Lloyd wrote:
>> 
>> We are working on a script so that we can create an ISCSI LUN on our SAN
>> and then directly assign it to a vm.
>> 
>> We have been able to get it to work but with one small annoyance. I
>> can't figure out how to populate size,serial,vendor_id and product_id
>> via the api. Would anyone be able to point me in the right direction ?
>> code (see def add_disk):
>> 
>> def get_clusterid(cluster_name):
>>    cluster = ovirt_api.clusters.get(cluster_name)
>>    try:
>>        return cluster.id <http://cluster.id>
>>    except:
>>        logging.error('the cluster: %s does not appear to exist' %
>> cluster_name )
>>        sys.exit(1)
>> 
>> def nominate_host(cluster_id):
>>    for host in ovirt_api.hosts.list():
>>        if host.cluster.id <http://host.cluster.id> == cluster_id and
>> host.status.state == 'up':
>>            host.iscsidiscover
>>            return host
>>    logging.error('could not find a suitable host to nominate in cluster:')
>>    sys.exit(1)
>> 
>> 
>> def iscsi_discover_and_login(cluster,target,portal,chap_user,chap_pass):
>>    clusterid=get_clusterid(cluster)
>>    host=nominate_host(clusterid)
>> 
>>    iscsidet = params.IscsiDetails()
>>    iscsidet.address=portal
>>    iscsidet.username=chap_user
>>    iscsidet.password=chap_pass
>>    iscsidet.target=target
>> 
>>    host.iscsidiscover(params.Action(iscsi=iscsidet))
>>    result = host.iscsilogin(params.Action(iscsi=iscsidet))
>> 
>>    if result.status.state == 'complete':
>> 
>>        storecon = params.StorageConnection()
>>        storecon.address=portal
>>        storecon.type_='iscsi'
>>        storecon.port=3260
>>        storecon.target=target
>>        storecon.username=chap_user
>>        storecon.password=chap_pass
>> 
>>        ovirt_api.storageconnections.add(storecon)
>> 
>>    return result
>>    # error checking code needs to be added to this function
>> 
>> def add_disk(vm_name,wwid,target,size,portal):
>> 
>>    logunit = params.LogicalUnit()
>>    logunit.id <http://logunit.id>=wwid
>>    logunit.vendor_id='EQLOGIC'
>>    logunit.product_id='100E-00'
>>    logunit.port=3260
>>    logunit.lun_mapping=0
>>    logunit.address=portal
>>    logunit.target=target
>>    logunit.size=size * 1073741824
>> 
>>    stor = params.Storage(logical_unit=[logunit])
>>    stor.type_='iscsi'
>> 
>> 
>>    disk = params.Disk()
>>    disk.alias = 'vm-' + vm_name
>>    disk.name <http://disk.name> = disk.alias
>>    disk.interface = 'virtio'
>>    disk.bootable = True
>>    disk.type_ = 'iscsi'
>>    disk.format='raw'
>>    disk.set_size(size * 1073741824)
>>    #disk.size=size * 1073741824
>>    #disk.active=True
>> 
>>    disk.lun_storage=stor
>> 
>>    try:
>>        result = ovirt_api.disks.add(disk)
>>    except:
>>        logging.error('Could not add disk')
>>        sys.exit(1)
>> 
>>    attachdisk=ovirt_api.disks.get(disk.alias)
>>    attachdisk.active = True
>> 
>>    try:
>>        ovirt_api.vms.get(vm_name).disks.add(attachdisk)
>>    except:
>>        logging.error('Could attach disk to vm')
>>        sys.exit(1)
>> 
>>    return result
>> 
>> 
>> 
>> If we could just get the size to show correctly that would be enough,
>> the others don't really matter to me.
>> 
>> 
>> Thanks
>> 
>> /Gary Lloyd/
> 
> For a direct LUN disk all these values are ready only. Why do you need
> to change them?
> 
> -- 
> Dirección Comercial: C/Jose Bardasano Baos, 9, Edif. Gorbea 3, planta
> 3ºD, 28016 Madrid, Spain
> Inscrita en el Reg. Mercantil de Madrid – C.I.F. B82657941 - Red Hat S.L.



More information about the Users mailing list