[PATCH] [TEST]#2 Added scsi pool support

# HG changeset patch # User Deepti B.Kalakeri <deeptik@linux.vnet.ibm.com> # Date 1248850965 25200 # Node ID f7cbecb195e3800513372d4466393538809923e3 # Parent ad67e5d20ee2a268c8f2016004c35bbb890ae94c [TEST]#2 Added scsi pool support Patch 2: -------- Indented few lines to be follow 80 column length Interchanged the if-elif order in verify_inputs() Tested with current sources on F10 and KVM. Signed-off-by: Deepti B. Kalakeri <deeptik@linux.vnet.ibm.com> diff -r ad67e5d20ee2 -r f7cbecb195e3 suites/libvirt-cim/misc_cimtests/create_verify_storagepool.py --- a/suites/libvirt-cim/misc_cimtests/create_verify_storagepool.py Thu Jul 23 06:29:14 2009 -0700 +++ b/suites/libvirt-cim/misc_cimtests/create_verify_storagepool.py Wed Jul 29 00:02:45 2009 -0700 @@ -36,9 +36,15 @@ # python create_verify_storagepool.py -t logical -d /dev/VolGroup01 # -n VolGroup01 -v Xen -u <username> -p <passwd> # +# For scsi pool type with HBA's: +# ------------------------------ +# python create_verify_storagepool.py -t scsi -v KVM -u <username> -p <passwd> +# -n myscsi_pool -a host2 +# # Where t can be : # 2 - FileSystem -# 4 - Logical etc +# 6 - Logical +# 7 - scsi # # # Date : 27.06.2009 @@ -63,16 +69,15 @@ TEST_LOG="cimtest.log" libvirt_cim_fs_changes = 857 libvirt_cim_logical_changes = 906 +libvirt_cim_scsi_changes = 921 supp_types = [ 'Xen', 'KVM' , 'LXC' ] -pool_types = { 'DISK_POOL_FS' : 2 , 'DISK_POOL_LOGICAL' : 6 } +pool_types = { 'DISK_POOL_FS' : 2 , 'DISK_POOL_LOGICAL' : 6 , + 'DISK_POOL_SCSI' : 7 } def verify_cmd_options(options, parser): try: - if options.part_dev == None: - raise Exception("Free Partition to be mounted not specified") - if options.pool_name == None: raise Exception("Must specify the Pool Name to be created") @@ -82,9 +87,15 @@ if options.pool_type == None: raise Exception("Must specify pool type to be tested") - if options.mnt_pt == None and options.pool_type != 'logical': + if options.part_dev == None and options.pool_type != 'scsi': + raise Exception("Free Partition to be mounted not specified") + + if options.mnt_pt == None and options.pool_type == 'fs': raise Exception("Mount points to be used not specified") + if options.adap_name == None and options.pool_type == 'scsi': + raise Exception("Adapter name used not specified") + except Exception, details: print "\nFATAL: ", details , "\n" print parser.print_help() @@ -110,19 +121,68 @@ return PASS def get_pooltype(pooltype, virt): + if pooltype == "fs": pool_type = pool_types['DISK_POOL_FS'] elif pooltype == "logical": pool_type = pool_types['DISK_POOL_LOGICAL'] + elif pooltype == "scsi": + pool_type = pool_types['DISK_POOL_SCSI'] else: logger.error("Invalid pool type ....") return None, None + return PASS, pool_type -def verify_inputs(part_dev, mount_pt, pool_type, pool_name): +def verify_inputs(part_dev, mount_pt, pool_type, pool_name, adap_name): + del_dir = False - if pool_type == pool_types['DISK_POOL_LOGICAL']: + if pool_type == pool_types['DISK_POOL_FS']: + cmd = "mount" + status, mount_info = getstatusoutput(cmd) + if status != PASS: + logger.error("Failed to get mount info.. ") + return FAIL, del_dir + + for line in mount_info.split('\n'): + try: + # Check if the specified partition is mounted before using it + part_name = line.split()[0] + if part_dev == part_name: + logger.error("[%s] already mounted", part_dev) + raise Exception("Please specify free partition other than "\ + "[%s]" % part_dev) + + # Check if mount point is already used for mounting + mount_name = line.split()[2] + if mount_pt == mount_name: + logger.error("[%s] already mounted", mount_pt) + raise Exception("Please specify dir other than [%s]" \ + % mount_pt) + + except Exception, details: + logger.error("%s", details) + return FAIL, del_dir + + # Check if the mount point specified already exist, if not create it.. + if not os.path.exists(mount_pt): + os.mkdir(mount_pt) + + # set del_dir=True so that we remove it before exiting from the tc. + del_dir = True + else: + # Check if the mount point specified is a dir + if not os.path.isdir(mount_pt): + logger.error("The mount point [%s] should be a dir", mount_pt) + return FAIL, del_dir + + files = os.listdir(mount_pt) + if len(files) != 0: + logger.info("The mount point [%s] given is not empty", + mount_pt) + + elif pool_type == pool_types['DISK_POOL_LOGICAL']: if not os.path.exists("/sbin/lvm"): logger.error("LVM support does not exist on the machine") return FAIL, del_dir @@ -143,46 +203,13 @@ return PASS, del_dir - cmd = "mount" - status, mount_info = getstatusoutput(cmd) - if status != PASS: - logger.error("Failed to get mount info.. ") - return FAIL, del_dir - - for line in mount_info.split('\n'): - try: - # Check if the specified partition is mounted before using it - part_name = line.split()[0] - if part_dev == part_name: - logger.error("[%s] already mounted", part_dev) - raise Exception("Please specify free partition other than " \ - "[%s]" % part_dev) - - # Check if mount point is already used for mounting - mount_name = line.split()[2] - if mount_pt == mount_name: - logger.error("[%s] already mounted", mount_pt) - raise Exception("Please specify dir other than [%s]" %mount_pt) - - except Exception, details: - logger.error("%s", details) - return FAIL, del_dir - - # Check if the mount point specified already exist, if not then create it.. - if not os.path.exists(mount_pt): - os.mkdir(mount_pt) - - # set del_dir to True so that we remove it before exiting from the tc. - del_dir = True - else: - # Check if the mount point specified is a dir - if not os.path.isdir(mount_pt): - logger.error("The mount point [%s] should be a dir", mount_pt) - return FAIL, del_dir - - files = os.listdir(mount_pt) - if len(files) != 0: - logger.info("The mount point [%s] given is not empty", mount_pt) + elif pool_type == pool_types['DISK_POOL_SCSI']: + hba_path = "/sys/class/scsi_host/" + adap_path = "%s%s" % (hba_path, adap_name) + if not os.path.exists(adap_path): + logger.error("HBA '%s' does not exist on the machine, specify "\ + "one present in '%s' path", adap_path, hba_path) + return FAIL, del_dir return PASS, del_dir @@ -195,18 +222,28 @@ vuri = 'lxc:///system' return vuri -def get_pool_settings(dp_rasds, pooltype, part_dev, mount_pt, pool_name): +def get_pool_settings(dp_rasds, pooltype, part_dev, mount_pt, + pool_name, adap_name): pool_settings = None + for dpool_rasd in dp_rasds: + if dpool_rasd['Type'] == pooltype and \ dpool_rasd['InstanceID'] == 'Default': + dp_pid = "%s/%s" % ("DiskPool", pool_name) dpool_rasd['PoolID'] = dpool_rasd['InstanceID'] = dp_pid + if pooltype == pool_types['DISK_POOL_FS']: dpool_rasd['Path'] = mount_pt dpool_rasd['DevicePaths'] = [part_dev] + elif pooltype == pool_types['DISK_POOL_LOGICAL']: dpool_rasd['Path'] = part_dev + + elif pooltype == pool_types['DISK_POOL_SCSI']: + dpool_rasd['AdapterName'] = adap_name + dpool_rasd['Path'] = "/dev/disk/by-id" break if not pool_name in dpool_rasd['InstanceID']: @@ -270,7 +307,7 @@ parser.add_option("-v", "--virt-type", dest="virt", default=None, help="Virtualization type [ Xen | KVM ]") parser.add_option("-t", "--pool-type", dest="pool_type", default=None, - help="Pool type:[ fs | logical ]") + help="Pool type:[ fs | logical | scsi ]") parser.add_option("-d", "--part-dev", dest="part_dev", default=None, help="specify the free partition to be used for " \ "fs pool type or the predefined Vol Group" \ @@ -279,6 +316,9 @@ help="Mount point to be used") parser.add_option("-n", "--pool-name", dest="pool_name", default=None, help="Pool to be created") + parser.add_option("-a", "--adap_name", dest="adap_name", default=None, + help="Adap name to be used Ex: specify one of the host" \ + "in /sys/class/scsi_host/ like host0") parser.add_option("-c", "--clean-log", action="store_true", dest="clean", help="Will remove existing log files before test run") parser.add_option("-l", "--debug-output", action="store_true", dest="debug", @@ -294,6 +334,7 @@ part_dev = options.part_dev mount_pt = options.mnt_pt pool_name = options.pool_name + adap_name = options.adap_name virt = options.virt if ":" in options.h_url: @@ -301,7 +342,7 @@ else: sysname = options.h_url - # Verify if the CIMOM is running, clean cimtest.log if requested + # Verify if the CIMOM is running, if requested clean cimtest.log. # Set Debug option if requested status = env_setup(sysname, virt, options.clean, options.debug) if status != PASS: @@ -322,20 +363,29 @@ curr_cim_rev, changeset = get_provider_version(virt, sysname) if curr_cim_rev < libvirt_cim_fs_changes and \ pooltype == pool_types['DISK_POOL_FS']: - logger.info("Test Skipped for %s pool type, Support for File System "\ - "Pool is available in revision %s", options.pool_type, + logger.info("Test Skipped for '%s' pool type, Support for File System " + "Pool is available in revision '%s'", options.pool_type, libvirt_cim_fs_changes) return SKIP + elif curr_cim_rev < libvirt_cim_logical_changes and \ pooltype == pool_types['DISK_POOL_LOGICAL']: - logger.info("Test Skipped for %s pool type, Support for Logical Pool" \ - " is available in revision %s", options.pool_type, \ + logger.info("Test Skipped for '%s' pool type, Support for Logical Pool" + " is available in revision '%s'", options.pool_type, libvirt_cim_logical_changes) return SKIP + + elif curr_cim_rev < libvirt_cim_scsi_changes and \ + pooltype == pool_types['DISK_POOL_SCSI']: + logger.info("Test Skipped for '%s' pool type, Support for scsi Pool" + " is available in revision '%s'", options.pool_type, + libvirt_cim_scsi_changes) + return SKIP pooltype = cim_types.Uint16(pooltype) - status, del_dir = verify_inputs(part_dev, mount_pt, pooltype, pool_name) + status, del_dir = verify_inputs(part_dev, mount_pt, pooltype, pool_name, + adap_name) if status != PASS: if del_dir == True: cmd ="rm -rf %s" % mount_pt @@ -370,7 +420,7 @@ # Get the DiskPoolRASD mof with appropriate values of diskpool # to be created.... pool_settings = get_pool_settings(dp_rasds, pooltype, part_dev, - mount_pt, pool_name) + mount_pt, pool_name, adap_name) if pool_settings == None: raise Exception("Did not get the required pool settings ...")
participants (1)
-
Deepti B. Kalakeri