# HG changeset patch
# User Deepti B.Kalakeri <deeptik(a)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(a)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 ...")