summaryrefslogtreecommitdiffstats
path: root/sbin/kgen
diff options
context:
space:
mode:
Diffstat (limited to 'sbin/kgen')
-rwxr-xr-xsbin/kgen157
1 files changed, 157 insertions, 0 deletions
diff --git a/sbin/kgen b/sbin/kgen
new file mode 100755
index 0000000..fa01d54
--- /dev/null
+++ b/sbin/kgen
@@ -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)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+