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
    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 == 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=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 = 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
----------------------------------
IT Services
Keele University
-----------------------------------