[ovirt-users] Ovirt Python SDK adding a directlun

Gary Lloyd g.lloyd at keele.ac.uk
Thu May 8 15:04:29 UTC 2014


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
-----------------------------------
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.ovirt.org/pipermail/users/attachments/20140508/5f500d6b/attachment-0001.html>


More information about the Users mailing list