mirror of
https://github.com/xcat2/xcat-core.git
synced 2025-05-31 01:56:39 +00:00
Merge pull request #4987 from immarvin/onissue
add testcase for osimage and site validation
This commit is contained in:
commit
943377d28f
@ -0,0 +1,52 @@
|
||||
start: xcat_inventory_import_validation_osimage
|
||||
description: verify the validation mechanisom while importing osimage object
|
||||
|
||||
cmd: rm -rf /tmp/xcat_inventory_import_validation_osimage
|
||||
cmd: mkdir -p /tmp/xcat_inventory_import_validation_osimage
|
||||
cmd: mkdir -p /tmp/xcat_inventory_import_validation_osimage/trash/
|
||||
cmd: mkdir -p /tmp/xcat_inventory_import_validation_osimage/backup/
|
||||
cmd: lsdef -t osimage -o testosimage1 -z 2>/dev/null >/tmp/xcat_inventory_import_validation_osimage/backup/testosimage1.stanza
|
||||
|
||||
cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "osimage" "testosimage1" "role" "compute" "/tmp/tmp/xcat_inventory_import_validation_osimage/trash/"
|
||||
check: rc==0
|
||||
cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "osimage" "testosimage1" "role" "service" "/tmp/xcat_inventory_import_validation_osimage/trash/"
|
||||
check: rc==0
|
||||
cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "osimage" "testosimage1" "role" "invalid" "/tmp/xcat_inventory_import_validation_osimage/trash/"
|
||||
check: rc!=0
|
||||
cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "osimage" "testosimage1" "role" "" "/tmp/xcat_inventory_import_validation_osimage/trash/"
|
||||
check: rc!=0
|
||||
|
||||
cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "osimage" "testosimage1" "imagetype" "windows" "/tmp/xcat_inventory_import_validation_osimage/trash/"
|
||||
check: rc==0
|
||||
cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "osimage" "testosimage1" "imagetype" "linux" "/tmp/xcat_inventory_import_validation_osimage/trash/"
|
||||
check: rc==0
|
||||
cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "osimage" "testosimage1" "imagetype" "invalid" "/tmp/xcat_inventory_import_validation_osimage/trash/"
|
||||
check: rc!=0
|
||||
cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "osimage" "testosimage1" "imagetype" "" "/tmp/xcat_inventory_import_validation_osimage/trash/"
|
||||
check: rc!=0
|
||||
|
||||
|
||||
cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "osimage" "testosimage1" "provision_mode" "statelite" "/tmp/xcat_inventory_import_validation_osimage/trash/"
|
||||
check: rc==0
|
||||
cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "osimage" "testosimage1" "provision_mode" "install" "/tmp/xcat_inventory_import_validation_osimage/trash/"
|
||||
check: rc==0
|
||||
cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "osimage" "testosimage1" "provision_mode" "netboot" "/tmp/xcat_inventory_import_validation_osimage/trash/"
|
||||
check: rc==0
|
||||
cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "osimage" "testosimage1" "provision_mode" "invalid" "/tmp/xcat_inventory_import_validation_osimage/trash/"
|
||||
check: rc!=0
|
||||
cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "osimage" "testosimage1" "provision_mode" "" "/tmp/xcat_inventory_import_validation_osimage/trash/"
|
||||
check: rc!=0
|
||||
|
||||
|
||||
cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "osimage" "testosimage1" "genimgoptions.rootfstype" "nfs" "/tmp/xcat_inventory_import_validation_osimage/trash/"
|
||||
check: rc==0
|
||||
cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "osimage" "testosimage1" "genimgoptions.rootfstype" "ramdisk" "/tmp/xcat_inventory_import_validation_osimage/trash/"
|
||||
check: rc==0
|
||||
cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "osimage" "testosimage1" "genimgoptions.rootfstype" "invalid" "/tmp/xcat_inventory_import_validation_osimage/trash/"
|
||||
check: rc!=0
|
||||
cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "osimage" "testosimage1" "genimgoptions.rootfstype" "" "/tmp/xcat_inventory_import_validation_osimage/trash/"
|
||||
check: rc==0
|
||||
|
||||
cmd: cat /tmp/xcat_inventory_import_validation_osimage/backup/testosimage1.stanza 2>/dev/null |mkdef -z -f
|
||||
cmd: rm -rf /tmp/xcat_inventory_import_validation_osimage
|
||||
end
|
126
xCAT-test/autotest/testcase/xcat-inventory/cases.site.validation
Normal file
126
xCAT-test/autotest/testcase/xcat-inventory/cases.site.validation
Normal file
@ -0,0 +1,126 @@
|
||||
start: xcat_inventory_import_validation_site
|
||||
description: verify the validation mechanisom while importing site object
|
||||
|
||||
cmd: rm -rf /tmp/xcat_inventory_import_validation_site
|
||||
cmd: mkdir -p /tmp/xcat_inventory_import_validation_site
|
||||
cmd: mkdir -p /tmp/xcat_inventory_import_validation_site/trash/
|
||||
cmd: mkdir -p /tmp/xcat_inventory_import_validation_site/backup/
|
||||
cmd: lsdef -t site -o clustersite -z 2>/dev/null >/tmp/xcat_inventory_import_validation_site/backup/clustersite.stanza
|
||||
|
||||
cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "site" "clustersite" "dbtracelevel" "0" "/tmp/tmp/xcat_inventory_import_validation_site/trash/"
|
||||
check: rc==0
|
||||
cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "site" "clustersite" "dbtracelevel" "1" "/tmp/xcat_inventory_import_validation_site/trash/"
|
||||
check: rc==0
|
||||
cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "site" "clustersite" "dbtracelevel" "2" "/tmp/xcat_inventory_import_validation_site/trash/"
|
||||
check: rc==0
|
||||
cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "site" "clustersite" "dbtracelevel" "3" "/tmp/xcat_inventory_import_validation_site/trash/"
|
||||
check: rc==0
|
||||
cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "site" "clustersite" "dbtracelevel" "4" "/tmp/xcat_inventory_import_validation_site/trash/"
|
||||
check: rc==0
|
||||
cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "site" "clustersite" "dbtracelevel" "invalid" "/tmp/xcat_inventory_import_validation_site/trash/"
|
||||
check: rc!=0
|
||||
cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "site" "clustersite" "dbtracelevel" "" "/tmp/xcat_inventory_import_validation_site/trash/"
|
||||
check: rc==0
|
||||
|
||||
cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "site" "clustersite" "dhcplease" "" "/tmp/xcat_inventory_import_validation_site/trash/"
|
||||
check: rc==0
|
||||
cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "site" "clustersite" "dhcplease" "10240" "/tmp/xcat_inventory_import_validation_site/trash/"
|
||||
check: rc==0
|
||||
cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "site" "clustersite" "dhcplease" "invalid" "/tmp/xcat_inventory_import_validation_site/trash/"
|
||||
check: rc!=0
|
||||
|
||||
|
||||
cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "site" "clustersite" "disjointdhcps" "0" "/tmp/xcat_inventory_import_validation_site/trash/"
|
||||
check: rc==0
|
||||
cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "site" "clustersite" "disjointdhcps" "1" "/tmp/xcat_inventory_import_validation_site/trash/"
|
||||
check: rc==0
|
||||
cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "site" "clustersite" "disjointdhcps" "" "/tmp/xcat_inventory_import_validation_site/trash/"
|
||||
check: rc==0
|
||||
cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "site" "clustersite" "disjointdhcps" "invalid" "/tmp/xcat_inventory_import_validation_site/trash/"
|
||||
check: rc!=0
|
||||
|
||||
|
||||
cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "site" "clustersite" "httpport" "" "/tmp/xcat_inventory_import_validation_site/trash/"
|
||||
check: rc==0
|
||||
cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "site" "clustersite" "httpport" "80" "/tmp/xcat_inventory_import_validation_site/trash/"
|
||||
check: rc==0
|
||||
cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "site" "clustersite" "httpport" "invalid" "/tmp/xcat_inventory_import_validation_site/trash/"
|
||||
check: rc!=0
|
||||
|
||||
|
||||
cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "site" "clustersite" "managedaddressmode" "" "/tmp/xcat_inventory_import_validation_site/trash/"
|
||||
check: rc==0
|
||||
cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "site" "clustersite" "managedaddressmode" "static" "/tmp/xcat_inventory_import_validation_site/trash/"
|
||||
check: rc==0
|
||||
cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "site" "clustersite" "managedaddressmode" "dhcp" "/tmp/xcat_inventory_import_validation_site/trash/"
|
||||
check: rc==0
|
||||
cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "site" "clustersite" "managedaddressmode" "invalid" "/tmp/xcat_inventory_import_validation_site/trash/"
|
||||
check: rc!=0
|
||||
|
||||
|
||||
|
||||
cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "site" "clustersite" "sharedinstall" "" "/tmp/xcat_inventory_import_validation_site/trash/"
|
||||
check: rc==0
|
||||
cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "site" "clustersite" "sharedinstall" "no" "/tmp/xcat_inventory_import_validation_site/trash/"
|
||||
check: rc==0
|
||||
cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "site" "clustersite" "sharedinstall" "sns" "/tmp/xcat_inventory_import_validation_site/trash/"
|
||||
check: rc==0
|
||||
cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "site" "clustersite" "sharedinstall" "all" "/tmp/xcat_inventory_import_validation_site/trash/"
|
||||
check: rc==0
|
||||
cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "site" "clustersite" "sharedinstall" "invalid" "/tmp/xcat_inventory_import_validation_site/trash/"
|
||||
check: rc!=0
|
||||
|
||||
|
||||
cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "site" "clustersite" "sshbetweennodes" "" "/tmp/xcat_inventory_import_validation_site/trash/"
|
||||
check: rc==0
|
||||
cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "site" "clustersite" "sshbetweennodes" "ALLGROUPS" "/tmp/xcat_inventory_import_validation_site/trash/"
|
||||
check: rc==0
|
||||
cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "site" "clustersite" "sshbetweennodes" "NOGROUPS" "/tmp/xcat_inventory_import_validation_site/trash/"
|
||||
check: rc==0
|
||||
cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "site" "clustersite" "sshbetweennodes" "invalid" "/tmp/xcat_inventory_import_validation_site/trash/"
|
||||
check: rc!=0
|
||||
|
||||
cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "site" "clustersite" "xcatdebugmode" "" "/tmp/xcat_inventory_import_validation_site/trash/"
|
||||
check: rc==0
|
||||
cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "site" "clustersite" "xcatdebugmode" "0" "/tmp/xcat_inventory_import_validation_site/trash/"
|
||||
check: rc==0
|
||||
cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "site" "clustersite" "xcatdebugmode" "1" "/tmp/xcat_inventory_import_validation_site/trash/"
|
||||
check: rc==0
|
||||
cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "site" "clustersite" "xcatdebugmode" "2" "/tmp/xcat_inventory_import_validation_site/trash/"
|
||||
check: rc==0
|
||||
cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "site" "clustersite" "xcatdebugmode" "invalid" "/tmp/xcat_inventory_import_validation_site/trash/"
|
||||
check: rc!=0
|
||||
|
||||
|
||||
cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "site" "clustersite" "xcatdport" "" "/tmp/xcat_inventory_import_validation_site/trash/"
|
||||
check: rc==0
|
||||
cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "site" "clustersite" "xcatdport" "3001" "/tmp/xcat_inventory_import_validation_site/trash/"
|
||||
check: rc==0
|
||||
cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "site" "clustersite" "xcatdport" "invalid" "/tmp/xcat_inventory_import_validation_site/trash/"
|
||||
check: rc!=0
|
||||
cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "site" "clustersite" "xcatdport" "3002" "/tmp/xcat_inventory_import_validation_site/trash/"
|
||||
check: rc!=0
|
||||
|
||||
|
||||
cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "site" "clustersite" "xcatiport" "" "/tmp/xcat_inventory_import_validation_site/trash/"
|
||||
check: rc==0
|
||||
cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "site" "clustersite" "xcatiport" "3001" "/tmp/xcat_inventory_import_validation_site/trash/"
|
||||
check: rc!=0
|
||||
cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "site" "clustersite" "xcatiport" "invalid" "/tmp/xcat_inventory_import_validation_site/trash/"
|
||||
check: rc!=0
|
||||
cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "site" "clustersite" "xcatiport" "3002" "/tmp/xcat_inventory_import_validation_site/trash/"
|
||||
check: rc==0
|
||||
|
||||
|
||||
cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "site" "clustersite" "xcatlport" "" "/tmp/xcat_inventory_import_validation_site/trash/"
|
||||
check: rc==0
|
||||
cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "site" "clustersite" "xcatlport" "3001" "/tmp/xcat_inventory_import_validation_site/trash/"
|
||||
check: rc!=0
|
||||
cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "site" "clustersite" "xcatlport" "invalid" "/tmp/xcat_inventory_import_validation_site/trash/"
|
||||
check: rc!=0
|
||||
cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "site" "clustersite" "xcatlport" "3003" "/tmp/xcat_inventory_import_validation_site/trash/"
|
||||
check: rc==0
|
||||
|
||||
cmd: cat /tmp/xcat_inventory_import_validation_site/backup/clustersite.stanza 2>/dev/null |mkdef -z -f
|
||||
cmd: rm -rf /tmp/xcat_inventory_import_validation_site
|
||||
end
|
@ -0,0 +1,27 @@
|
||||
{
|
||||
"osimage": {
|
||||
"testosimage1": {
|
||||
"basic_attributes": {
|
||||
"arch": "ppc64le",
|
||||
"distribution": "sles12.2",
|
||||
"osdistro": "sles12.2-ppc64le"
|
||||
},
|
||||
"filestosync": "/install/custom/netboot/sles/compute.synclist",
|
||||
"genimgoptions": {
|
||||
"exlist": "/opt/xcat/share/xcat/netboot/sles/compute.sles12.ppc64le.exlist",
|
||||
"postinstall": "/opt/xcat/share/xcat/netboot/sles/compute.sles12.ppc64le.postinstall",
|
||||
"rootimgdir": "/install/netboot/sles12.2/ppc64le/compute",
|
||||
"rootfstype": "nfs"
|
||||
},
|
||||
"imagetype": "linux",
|
||||
"package_selection": {
|
||||
"otherpkgdir": "/install/post/otherpkgs/sles12.2/ppc64le",
|
||||
"pkgdir": "/install/sles12.2/ppc64le",
|
||||
"pkglist": "/opt/xcat/share/xcat/netboot/sles/compute.sles12.ppc64le.pkglist"
|
||||
},
|
||||
"provision_mode": "statelite",
|
||||
"role": "compute"
|
||||
}
|
||||
},
|
||||
"schema_version": "1.0"
|
||||
}
|
@ -0,0 +1,21 @@
|
||||
osimage:
|
||||
testosimage1:
|
||||
basic_attributes:
|
||||
arch: ppc64le
|
||||
distribution: sles12.2
|
||||
osdistro: sles12.2-ppc64le
|
||||
filestosync: /install/custom/netboot/sles/compute.synclist
|
||||
genimgoptions:
|
||||
exlist: /opt/xcat/share/xcat/netboot/sles/compute.sles12.ppc64le.exlist
|
||||
postinstall: /opt/xcat/share/xcat/netboot/sles/compute.sles12.ppc64le.postinstall
|
||||
rootimgdir: /install/netboot/sles12.2/ppc64le/compute
|
||||
rootfstype: nfs
|
||||
imagetype: linux
|
||||
package_selection:
|
||||
otherpkgdir: /install/post/otherpkgs/sles12.2/ppc64le
|
||||
pkgdir: /install/sles12.2/ppc64le
|
||||
pkglist: /opt/xcat/share/xcat/netboot/sles/compute.sles12.ppc64le.pkglist
|
||||
provision_mode: statelite
|
||||
role: compute
|
||||
schema_version: '1.0'
|
||||
|
@ -0,0 +1,18 @@
|
||||
{
|
||||
"schema_version": "1.0",
|
||||
"site": {
|
||||
"clustersite": {
|
||||
"dbtracelevel": "1",
|
||||
"dhcplease": "10240",
|
||||
"disjointdhcps": "0",
|
||||
"httpport": "80",
|
||||
"sharedinstall": "no",
|
||||
"managedaddressmode": "dhcp",
|
||||
"sshbetweennodes": "ALLGROUPS",
|
||||
"xcatdebugmode": "0",
|
||||
"xcatdport": "3001",
|
||||
"xcatiport": "3002",
|
||||
"xcatlport": "3003"
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,15 @@
|
||||
schema_version: '1.0'
|
||||
site:
|
||||
clustersite:
|
||||
dbtracelevel: '1'
|
||||
dhcplease: '10240'
|
||||
disjointdhcps: '0'
|
||||
httpport: '80'
|
||||
sharedinstall: 'no'
|
||||
managedaddressmode: 'dhcp'
|
||||
sshbetweennodes: 'ALLGROUPS'
|
||||
xcatdebugmode: '0'
|
||||
xcatdport: '3001'
|
||||
xcatiport: '3002'
|
||||
xcatlport: '3003'
|
||||
|
267
xCAT-test/autotest/testcase/xcat-inventory/validatehelper
Executable file
267
xCAT-test/autotest/testcase/xcat-inventory/validatehelper
Executable file
@ -0,0 +1,267 @@
|
||||
#!/usr/bin/python
|
||||
from __future__ import print_function
|
||||
|
||||
import yaml
|
||||
import json
|
||||
import os
|
||||
import re
|
||||
import sys
|
||||
import shutil
|
||||
import subprocess
|
||||
|
||||
|
||||
#remove the dict entries whose value is null or ''
|
||||
def Util_rmnullindict(mydict):
|
||||
for key in mydict.keys():
|
||||
if isinstance(mydict[key],dict):
|
||||
Util_rmnullindict(mydict[key])
|
||||
if not mydict[key].keys():
|
||||
del mydict[key]
|
||||
else:
|
||||
if not mydict[key]:
|
||||
del mydict[key]
|
||||
|
||||
|
||||
# get the dict value mydict[a][b][c] with key path a.b.c
|
||||
def Util_getdictval(mydict,keystr):
|
||||
if not isinstance(mydict,dict):
|
||||
return None
|
||||
dictkeyregex=re.compile("([^\.]+)\.?(\S+)*")
|
||||
result=re.findall(dictkeyregex,keystr)
|
||||
if result:
|
||||
(key,remdkey)=result[0]
|
||||
if key not in mydict.keys():
|
||||
return None
|
||||
if remdkey:
|
||||
return Util_getdictval(mydict[key],remdkey)
|
||||
else:
|
||||
return mydict[key]
|
||||
|
||||
# get the dict value mydict[a][b][c] with key path a.b.c
|
||||
def Util_setdictval(mydict,keystr,value):
|
||||
dictkeyregex=re.compile("([^\.]+)\.?(\S+)*")
|
||||
result=re.findall(dictkeyregex,keystr)
|
||||
if result:
|
||||
(key,remdkey)=result[0]
|
||||
if remdkey:
|
||||
if key not in mydict.keys():
|
||||
mydict[key]={}
|
||||
Util_setdictval(mydict[key],remdkey,value)
|
||||
else:
|
||||
mydict[key]=value
|
||||
|
||||
|
||||
def GetAttrInFile(fpath,objtype,objname,attrpath):
|
||||
f=open(fpath,'r')
|
||||
try:
|
||||
objdict=json.loads(f)
|
||||
except TypeError,ValueError:
|
||||
try:
|
||||
objdict=yaml.load(f)
|
||||
except Exception,e:
|
||||
raise Exception("Error: cannot open file "+fpath+"! "+str(e))
|
||||
|
||||
f.close()
|
||||
myattrpath=objtype+"."+objname+"."+attrpath
|
||||
myvalue=Util_getdictval(objdict,myattrpath)
|
||||
return myvalue
|
||||
|
||||
def compattr(exptattr,rawattr):
|
||||
if isinstance(exptattr,list) and re.match(r'^\[.*\]$',rawattr):
|
||||
rawattr=eval(rawattr)
|
||||
if isinstance(rawattr,str):
|
||||
if rawattr in exptattr:
|
||||
return 0
|
||||
else:
|
||||
return 1
|
||||
else:
|
||||
return cmp(exptattr,rawattr)
|
||||
|
||||
|
||||
|
||||
def runCommand(cmd, env=None):
|
||||
""" Run one command only, when you don't want to bother setting up
|
||||
the Popen stuff.
|
||||
"""
|
||||
print('Running command: %s' %cmd)
|
||||
try:
|
||||
p = subprocess.Popen(cmd,
|
||||
env=env,
|
||||
shell=True,
|
||||
stdout=subprocess.PIPE,
|
||||
stderr=subprocess.PIPE
|
||||
)
|
||||
out, err = p.communicate()
|
||||
except OSError,e:
|
||||
print('RunCommand failed due to OSError %s' % e)
|
||||
if p.returncode:
|
||||
print('Command %s failed with return code %d : %s' % (cmd , p.returncode, err))
|
||||
print(out)
|
||||
print(err)
|
||||
return p.returncode
|
||||
|
||||
|
||||
def UpdateAttrInFile(fpath,fformat,objtype,objname,attrpath,value):
|
||||
f=open(fpath,'r')
|
||||
try:
|
||||
objdict=json.loads(f)
|
||||
except TypeError,ValueError:
|
||||
try:
|
||||
objdict=yaml.load(f)
|
||||
except Exception,e:
|
||||
raise Exception("Error: cannot open file "+fpath+"! "+str(e))
|
||||
|
||||
f.close()
|
||||
myattrpath=objtype+"."+objname+"."+attrpath
|
||||
if value == "":
|
||||
Util_setdictval(objdict,myattrpath,"")
|
||||
Util_rmnullindict(objdict)
|
||||
else:
|
||||
origobjdict=Util_getdictval(objdict,myattrpath)
|
||||
origattrtype=type(origobjdict)
|
||||
newvalue=value
|
||||
if origattrtype == list and re.match(r'^\[.*\]$',value):
|
||||
#import pdb
|
||||
#pdb.set_trace()
|
||||
newvalue=eval(value)
|
||||
if isinstance(origobjdict,list) and isinstance(newvalue,str):
|
||||
newvalue=[newvalue]
|
||||
Util_setdictval(objdict,myattrpath,newvalue)
|
||||
f=open(fpath,'w')
|
||||
if fformat == "yaml":
|
||||
print(yaml.dump(objdict,default_flow_style=False),file=f)
|
||||
elif fformat == "json":
|
||||
print(json.dumps(objdict, sort_keys=True, indent=4, separators=(',', ': ')),file=f)
|
||||
f.close()
|
||||
|
||||
def removeobj(objtype,objname):
|
||||
print("removing existing \""+objtype+"\" type object \""+objname+"\" from xCAT\n")
|
||||
if str(objtype) in ('node','osimage','network','site','route','zone','policy'):
|
||||
runCommand("rmdef -t "+objtype+" -o "+objname)
|
||||
elif str(objtype) in ('passwd'):
|
||||
runCommand("tabch -d key="+objname+" passwd")
|
||||
|
||||
def Usage():
|
||||
print("Usage:\n")
|
||||
print(sys.argv[0]+" [OBJTYPE OBJNAME ATTRIBUTE ATTRVALUE TMPDIR]")
|
||||
|
||||
if len(sys.argv) < 6:
|
||||
Usage()
|
||||
exit(1)
|
||||
|
||||
|
||||
objtype=str(sys.argv[1])
|
||||
objname=str(sys.argv[2])
|
||||
attribute=str(sys.argv[3])
|
||||
attrvalue=str(sys.argv[4])
|
||||
tmpdir=str(sys.argv[5])
|
||||
print("objtype=%s\nobjname=%s\nattribute=%s\nattrvalue=%s\ntmpdir=%s\n"%(objtype,objname,attribute,attrvalue,tmpdir))
|
||||
|
||||
if os.path.exists(tmpdir):
|
||||
runCommand("rm -rf "+tmpdir)
|
||||
|
||||
os.mkdir(tmpdir)
|
||||
|
||||
print("Temporary directory to hold intermediate files: "+tmpdir+"\n")
|
||||
|
||||
curdir=os.path.split(os.path.realpath(sys.argv[0]))[0]
|
||||
yamldeftmpl=curdir+"/templates/"+objtype+'.yaml'
|
||||
jsondeftmpl=curdir+"/templates/"+objtype+'.json'
|
||||
yamldef=tmpdir+"/"+objtype+'.yaml'
|
||||
jsondef=tmpdir+"/"+objtype+'.json'
|
||||
yamldefout=tmpdir+"/"+objtype+'.out.yaml'
|
||||
jsondefout=tmpdir+"/"+objtype+'.out.json'
|
||||
|
||||
shutil.copyfile(yamldeftmpl,yamldef)
|
||||
shutil.copyfile(jsondeftmpl,jsondef)
|
||||
|
||||
rcfinal=0
|
||||
rcyaml=0
|
||||
rcjson=0
|
||||
rc=0
|
||||
|
||||
UpdateAttrInFile(yamldef,'yaml',objtype,objname,attribute,attrvalue)
|
||||
print("=================the inventory file to import: "+yamldef+"=====================\n")
|
||||
runCommand("cat "+yamldef)
|
||||
print("===============================================================================\n")
|
||||
|
||||
|
||||
print("import the inventory file "+yamldef+"\n")
|
||||
rc=runCommand("xcat-inventory import -t "+objtype+" -o "+objname+" -f "+yamldef)
|
||||
if rc !=0:
|
||||
print("failed to import the inventory file "+yamldef)
|
||||
rcyaml=1
|
||||
else:
|
||||
print("the inventory file "+yamldef+" imported successfully\n")
|
||||
print("export the \""+objtype+"\" type object \""+objname+"\" just imported\n")
|
||||
rc=runCommand("xcat-inventory export -t "+objtype+" -o "+objname+" --format=yaml 1>"+yamldefout)
|
||||
if rc!=0:
|
||||
print("failed to export the \""+objtype+"\" type object \""+objname+"\"\n")
|
||||
rcyaml=1
|
||||
else:
|
||||
print("==============the exported inventory file "+yamldefout+"======================\n")
|
||||
runCommand("cat "+yamldefout)
|
||||
print("===========================================================================\n")
|
||||
myattrvalue=GetAttrInFile(yamldefout,objtype,objname,attribute)
|
||||
if attrvalue == '':
|
||||
if myattrvalue is not None:
|
||||
rcyaml=1
|
||||
else:
|
||||
if compattr(myattrvalue,attrvalue) != 0 :
|
||||
rcyaml=1
|
||||
|
||||
if rcyaml == 0:
|
||||
print("yaml validation passed\n")
|
||||
else:
|
||||
print("yaml validation failed\n")
|
||||
|
||||
removeobj(objtype,objname)
|
||||
|
||||
UpdateAttrInFile(jsondef,'json',objtype,objname,attribute,attrvalue)
|
||||
print("=================the inventory file to import: "+jsondef+"=====================\n")
|
||||
runCommand("cat "+jsondef)
|
||||
print("===============================================================================\n")
|
||||
|
||||
|
||||
print("import the inventory file "+jsondef+"\n")
|
||||
rc=runCommand("xcat-inventory import -t "+objtype+" -o "+objname+" -f "+jsondef)
|
||||
print("rc="+str(rc))
|
||||
if rc !=0:
|
||||
print("failed to import the inventory file "+jsondef)
|
||||
rcjson=1
|
||||
else:
|
||||
print("the inventory file "+jsondef+" imported successfully\n")
|
||||
print("export the \""+objtype+"\" type object \""+objname+"\" just imported\n")
|
||||
rc=runCommand("xcat-inventory export -t "+objtype+" -o "+objname+" --format=json 1>"+jsondefout)
|
||||
if rc!=0:
|
||||
print("failed to export the \""+objtype+"\" type object \""+objname+"\"\n")
|
||||
rcjson=1
|
||||
else:
|
||||
print("==============the exported inventory file "+jsondefout+"======================\n")
|
||||
runCommand("cat "+jsondefout)
|
||||
print("===========================================================================\n")
|
||||
myattrvalue=GetAttrInFile(jsondefout,objtype,objname,attribute)
|
||||
if attrvalue == '':
|
||||
if myattrvalue is not None:
|
||||
rcjson=1
|
||||
else:
|
||||
if compattr(myattrvalue,attrvalue) != 0 :
|
||||
rcjson=1
|
||||
|
||||
if rcjson ==0:
|
||||
print("json validation passed\n")
|
||||
else:
|
||||
print("json validation failed\n")
|
||||
|
||||
removeobj(objtype,objname)
|
||||
|
||||
if rcjson !=0 or rcyaml!=0:
|
||||
rcfinal=1
|
||||
|
||||
print("remove intermediate directory "+tmpdir)
|
||||
if os.path.exists(tmpdir):
|
||||
runCommand("rm -rf "+tmpdir)
|
||||
|
||||
exit(rcfinal)
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user