
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.