first add files
This commit is contained in:
157
sbin/kgen
Executable file
157
sbin/kgen
Executable file
@@ -0,0 +1,157 @@
|
||||
#!/opt/sunpy3/bin/python3
|
||||
#coding:utf-8
|
||||
import os,sys
|
||||
import getopt
|
||||
import sunhpc.invoke
|
||||
from xml.sax._exceptions import SAXParseException
|
||||
class App(sunhpc.core.database.ApplicationSQL):
|
||||
|
||||
def __init__(self, argv=None):
|
||||
sunhpc.core.database.ApplicationSQL.__init__(self)
|
||||
|
||||
if not argv:
|
||||
argv = sys.argv
|
||||
|
||||
self.args = []
|
||||
self.caller_args = argv[1:]
|
||||
self.usage_name = 'Kickstart Generator'
|
||||
self.usage_version = '1.0'
|
||||
self.usage_command = os.path.basename(argv[0])
|
||||
self.sections = []
|
||||
|
||||
self.os = os.uname()[0].lower()
|
||||
self.arch = os.uname()[4]
|
||||
osGenerator = getattr(sunhpc.core.xmlgen, 'Generator_%s' % self.os)
|
||||
self.generator = osGenerator()
|
||||
self.generator.setArch(self.arch)
|
||||
self.generator.setOS(self.os)
|
||||
|
||||
self.getopt = sunhpc.core.utils.Struct()
|
||||
self.getopt.s = [('h', 'help infomation'), ('a', 'architecture')]
|
||||
self.getopt.l = [('arch=', 'architecture'),
|
||||
('section=', 'name'),
|
||||
('postonly', 'show post'),
|
||||
]
|
||||
def usage(self):
|
||||
argDict = {}
|
||||
for e in self.getopt.s:
|
||||
if type(e) == type(()):
|
||||
argDict['-%s' % e[0]] = e[1]
|
||||
else:
|
||||
argDict['-%s' % e] = ''
|
||||
|
||||
for l in self.getopt.l:
|
||||
if type(l) == type(()):
|
||||
argDict['--%s' % l[0]] = l[1]
|
||||
else:
|
||||
argDict['--%s' % l] = ''
|
||||
|
||||
if not argDict: return
|
||||
maxlen = max(map(len, argDict.keys()))
|
||||
print ('\nUsage: %s [options] command infomations' % self.usage_command)
|
||||
for k in argDict:
|
||||
keys = k.ljust(maxlen)
|
||||
vals = argDict[k]
|
||||
print (' %s\t%s' % (keys, vals))
|
||||
print ('If you have any questions, please contact info@sunhpc.com')
|
||||
|
||||
def parseArg(self, c):
|
||||
if c[0] in ('-h', '--help'):
|
||||
self.usage()
|
||||
sys.exit(-1)
|
||||
elif c[0] in ('-a', '--arch'):
|
||||
self.generator.setArch(c[1])
|
||||
elif c[0] == '--section':
|
||||
self.sections += c[1].split()
|
||||
elif c[0] == '--postonly':
|
||||
self.sections.append('post')
|
||||
else:
|
||||
return 0
|
||||
return 1
|
||||
|
||||
def parseArgs(self):
|
||||
self.parseCommandLine()
|
||||
|
||||
def parseCommandLine(self):
|
||||
# 解析短参数形式
|
||||
short = ''
|
||||
for e in self.getopt.s:
|
||||
if type(e) == type(()):
|
||||
# 取参数左值
|
||||
short = short + e[0]
|
||||
else:
|
||||
short = short + e
|
||||
|
||||
# 解析长参数形式
|
||||
long = []
|
||||
for e in self.getopt.l:
|
||||
if type(e) == type(()):
|
||||
# 取参数左值
|
||||
long.append(e[0])
|
||||
else:
|
||||
long.append(e)
|
||||
try:
|
||||
opts, args = getopt.getopt(self.caller_args, short, long)
|
||||
except getopt.GetoptError as msg:
|
||||
sys.stderr.write('error - %s\n' % msg)
|
||||
self.usage()
|
||||
sys.exit(1)
|
||||
|
||||
for c in opts:
|
||||
self.parseArg(c)
|
||||
|
||||
def run(self):
|
||||
|
||||
if self.args:
|
||||
fe = open(self.args[0], 'r')
|
||||
else:
|
||||
fe = sys.stdin
|
||||
|
||||
self.generator.parse(fe.read())
|
||||
print ('#')
|
||||
print ('# %s version %s' % (self.usage_name, self.usage_version))
|
||||
print ('#')
|
||||
|
||||
sections = self.sections
|
||||
if not sections:
|
||||
sections = ['order', 'debug', 'main', 'packages', 'pre', 'post']
|
||||
|
||||
plist = []
|
||||
for s in sections:
|
||||
plist += self.generator.generate(s)
|
||||
|
||||
for line in plist:
|
||||
print (line.rstrip())
|
||||
|
||||
if __name__ == "__main__":
|
||||
app = App(sys.argv)
|
||||
app.parseArgs()
|
||||
try:
|
||||
app.run()
|
||||
except sunhpc.core.exceptions.KickstartError as msg:
|
||||
sys.stderr.write("kgen error - %s\n" % msg)
|
||||
sys.exit(-1)
|
||||
|
||||
except SAXParseException as msg:
|
||||
sys.stderr.write("kgen XML parse exception: %s\n" % msg)
|
||||
sys.exit(-1)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user