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:
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():
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.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.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.