--- /dev/null
+#!/usr/bin/env python
+
+
+
+
+##################################################
+## DEPENDENCIES
+import sys
+import os
+import os.path
+import __builtin__
+from os.path import getmtime, exists
+import time
+import types
+from Cheetah.Version import MinCompatibleVersion as RequiredCheetahVersion
+from Cheetah.Version import MinCompatibleVersionTuple as RequiredCheetahVersionTuple
+from Cheetah.Template import Template
+from Cheetah.DummyTransaction import *
+from Cheetah.NameMapper import NotFound, valueForName, valueFromSearchList, valueFromFrameOrSearchList
+from Cheetah.CacheRegion import CacheRegion
+import Cheetah.Filters as Filters
+import Cheetah.ErrorCatchers as ErrorCatchers
+
+##################################################
+## MODULE CONSTANTS
+VFFSL=valueFromFrameOrSearchList
+VFSL=valueFromSearchList
+VFN=valueForName
+currentTime=time.time
+__CHEETAH_version__ = '2.2.2'
+__CHEETAH_versionTuple__ = (2, 2, 2, 'final', 0)
+__CHEETAH_genTime__ = 1273202421.2641661
+__CHEETAH_genTimestamp__ = 'Thu May 6 23:20:21 2010'
+__CHEETAH_src__ = 'kickstart.tmpl'
+__CHEETAH_srcLastModified__ = 'Thu May 6 22:51:32 2010'
+__CHEETAH_docstring__ = 'Autogenerated by Cheetah: The Python-Powered Template Engine'
+
+if __CHEETAH_versionTuple__ < RequiredCheetahVersionTuple:
+ raise AssertionError(
+ 'This template was compiled with Cheetah version'
+ ' %s. Templates compiled before version %s must be recompiled.'%(
+ __CHEETAH_version__, RequiredCheetahVersion))
+
+##################################################
+## CLASSES
+
+class kickstart(Template):
+
+ ##################################################
+ ## CHEETAH GENERATED METHODS
+
+
+ def __init__(self, *args, **KWs):
+
+ super(kickstart, self).__init__(*args, **KWs)
+ if not self._CHEETAH__instanceInitialized:
+ cheetahKWArgs = {}
+ allowedKWs = 'searchList namespaces filter filtersLib errorCatcher'.split()
+ for k,v in KWs.items():
+ if k in allowedKWs: cheetahKWArgs[k] = v
+ self._initCheetahInstance(**cheetahKWArgs)
+
+
+ def respond(self, trans=None):
+
+
+
+ ## CHEETAH: main method generated for this template
+ if (not trans and not self._CHEETAH__isBuffering and not callable(self.transaction)):
+ trans = self.transaction # is None unless self.awake() was called
+ if not trans:
+ trans = DummyTransaction()
+ _dummyTrans = True
+ else: _dummyTrans = False
+ write = trans.response().write
+ SL = self._CHEETAH__searchList
+ _filter = self._CHEETAH__currentFilter
+
+ ########################################
+ ## START - generated method body
+
+ write(u'''#
+# Do not Edit! Generated by:
+# kickstarter.py
+#
+
+lang ''')
+ _v = VFSL([locals()]+SL+[globals(), __builtin__],"metadata.Language",True) # u'${metadata.Language}' on line 6, col 6
+ if _v is not None: write(_filter(_v, rawExpr=u'${metadata.Language}')) # from line 6, col 6.
+ write(u'''
+keyboard ''')
+ _v = VFSL([locals()]+SL+[globals(), __builtin__],"metadata.Keyboard",True) # u'${metadata.Keyboard}' on line 7, col 10
+ if _v is not None: write(_filter(_v, rawExpr=u'${metadata.Keyboard}')) # from line 7, col 10.
+ write(u'''
+timezone --utc ''')
+ _v = VFSL([locals()]+SL+[globals(), __builtin__],"metadata.Timezone",True) # u'${metadata.Timezone}' on line 8, col 16
+ if _v is not None: write(_filter(_v, rawExpr=u'${metadata.Timezone}')) # from line 8, col 16.
+ write(u'''
+auth --useshadow --enablemd5
+''')
+ if VFSL([locals()]+SL+[globals(), __builtin__],"metadata.Part",True) == "": # generated from line 10, col 1
+ write(u'''part / --size ''')
+ _v = VFSL([locals()]+SL+[globals(), __builtin__],"metadata.PartSize",True) # u'${metadata.PartSize}' on line 11, col 15
+ if _v is not None: write(_filter(_v, rawExpr=u'${metadata.PartSize}')) # from line 11, col 15.
+ write(u''' --ondisk sda --fstype=ext3
+''')
+ else: # generated from line 12, col 1
+ _v = VFSL([locals()]+SL+[globals(), __builtin__],"metadata.Part",True) # u'${metadata.Part}' on line 13, col 1
+ if _v is not None: write(_filter(_v, rawExpr=u'${metadata.Part}')) # from line 13, col 1.
+ write(u'''
+''')
+ write(u'''rootpw ''')
+ _v = VFSL([locals()]+SL+[globals(), __builtin__],"metadata.RootPass",True) # u'${metadata.RootPass}' on line 15, col 8
+ if _v is not None: write(_filter(_v, rawExpr=u'${metadata.RootPass}')) # from line 15, col 8.
+ write(u'''
+xconfig --startxonboot
+bootloader --timeout=''')
+ _v = VFSL([locals()]+SL+[globals(), __builtin__],"metadata.BootloaderTimeout",True) # u'${metadata.BootloaderTimeout}' on line 17, col 22
+ if _v is not None: write(_filter(_v, rawExpr=u'${metadata.BootloaderTimeout}')) # from line 17, col 22.
+ write(u''' --append="''')
+ _v = VFSL([locals()]+SL+[globals(), __builtin__],"metadata.BootloaderAppend",True) # u'${metadata.BootloaderAppend}' on line 17, col 62
+ if _v is not None: write(_filter(_v, rawExpr=u'${metadata.BootloaderAppend}')) # from line 17, col 62.
+ write(u'''"
+desktop --autologinuser=''')
+ _v = VFSL([locals()]+SL+[globals(), __builtin__],"metadata.DefaultUser",True) # u'${metadata.DefaultUser}' on line 18, col 25
+ if _v is not None: write(_filter(_v, rawExpr=u'${metadata.DefaultUser}')) # from line 18, col 25.
+ write(u''' --defaultdesktop=''')
+ _v = VFSL([locals()]+SL+[globals(), __builtin__],"metadata.Desktop",True) # u'${metadata.Desktop}' on line 18, col 67
+ if _v is not None: write(_filter(_v, rawExpr=u'${metadata.Desktop}')) # from line 18, col 67.
+ write(u'''
+user --name ''')
+ _v = VFSL([locals()]+SL+[globals(), __builtin__],"metadata.DefaultUser",True) # u'${metadata.DefaultUser}' on line 19, col 13
+ if _v is not None: write(_filter(_v, rawExpr=u'${metadata.DefaultUser}')) # from line 19, col 13.
+ write(u''' --groups audio,video --password ''')
+ _v = VFSL([locals()]+SL+[globals(), __builtin__],"metadata.DefaultUserPass",True) # u'${metadata.DefaultUserPass}' on line 19, col 70
+ if _v is not None: write(_filter(_v, rawExpr=u'${metadata.DefaultUserPass}')) # from line 19, col 70.
+ write(u'''
+
+''')
+ save = ""
+ if VFSL([locals()]+SL+[globals(), __builtin__],"metadata.SaveRepos",True): # generated from line 22, col 1
+ save = "--save"
+ for r in VFSL([locals()]+SL+[globals(), __builtin__],"metadata.Repos",True): # generated from line 25, col 1
+ for rr in VFSL([locals()]+SL+[globals(), __builtin__],"repos",True): # generated from line 26, col 1
+ if VFSL([locals()]+SL+[globals(), __builtin__],"rr.Name",True) == VFSL([locals()]+SL+[globals(), __builtin__],"r",True): # generated from line 27, col 1
+ write(u'''repo --name=''')
+ _v = VFSL([locals()]+SL+[globals(), __builtin__],"r",True) # u'${r}' on line 28, col 15
+ if _v is not None: write(_filter(_v, rawExpr=u'${r}')) # from line 28, col 15.
+ write(u''' --baseurl=''')
+ _v = VFSL([locals()]+SL+[globals(), __builtin__],"rr.Url",True) # u'${rr.Url}' on line 28, col 30
+ if _v is not None: write(_filter(_v, rawExpr=u'${rr.Url}')) # from line 28, col 30.
+ write(u''' ''')
+ _v = VFSL([locals()]+SL+[globals(), __builtin__],"save",True) # u'${save}' on line 28, col 40
+ if _v is not None: write(_filter(_v, rawExpr=u'${save}')) # from line 28, col 40.
+ write(u'''
+''')
+ write(u'''
+
+''')
+ if VFSL([locals()]+SL+[globals(), __builtin__],"metadata.PackageArgs",True) != "": # generated from line 34, col 1
+ write(u'''%packages ''')
+ _v = VFSL([locals()]+SL+[globals(), __builtin__],"metadata.PackageArgs",True) # u'${metadata.PackageArgs}' on line 35, col 11
+ if _v is not None: write(_filter(_v, rawExpr=u'${metadata.PackageArgs}')) # from line 35, col 11.
+ write(u'''
+''')
+ else: # generated from line 36, col 1
+ write(u'''%packages
+''')
+ write(u'''
+''')
+ for g in VFSL([locals()]+SL+[globals(), __builtin__],"metadata.Groups",True): # generated from line 40, col 1
+ write(u'''@''')
+ _v = VFSL([locals()]+SL+[globals(), __builtin__],"g",True) # u'${g}' on line 41, col 2
+ if _v is not None: write(_filter(_v, rawExpr=u'${g}')) # from line 41, col 2.
+ write(u'''
+''')
+ write(u'''
+
+''')
+ _v = VFSL([locals()]+SL+[globals(), __builtin__],"metadata.Kernel",True) # u'$metadata.Kernel' on line 45, col 1
+ if _v is not None: write(_filter(_v, rawExpr=u'$metadata.Kernel')) # from line 45, col 1.
+ write(u'''
+
+''')
+ for e in VFSL([locals()]+SL+[globals(), __builtin__],"metadata.ExtraPackages",True): # generated from line 47, col 1
+ _v = VFSL([locals()]+SL+[globals(), __builtin__],"e",True) # u'${e}' on line 48, col 1
+ if _v is not None: write(_filter(_v, rawExpr=u'${e}')) # from line 48, col 1.
+ write(u'''
+''')
+ for e in VFSL([locals()]+SL+[globals(), __builtin__],"metadata.RemovePackages",True): # generated from line 50, col 1
+ write(u'''-''')
+ _v = VFSL([locals()]+SL+[globals(), __builtin__],"e",True) # u'${e}' on line 51, col 2
+ if _v is not None: write(_filter(_v, rawExpr=u'${e}')) # from line 51, col 2.
+ write(u'''
+''')
+ write(u'''%end
+
+%post
+''')
+ _v = VFSL([locals()]+SL+[globals(), __builtin__],"metadata.Post",True) # u'${metadata.Post}' on line 56, col 1
+ if _v is not None: write(_filter(_v, rawExpr=u'${metadata.Post}')) # from line 56, col 1.
+ write(u'''
+%end
+
+%post --nochroot
+''')
+ _v = VFSL([locals()]+SL+[globals(), __builtin__],"metadata.NoChroot",True) # u'${metadata.NoChroot}' on line 60, col 1
+ if _v is not None: write(_filter(_v, rawExpr=u'${metadata.NoChroot}')) # from line 60, col 1.
+ write(u'''
+%end
+''')
+
+ ########################################
+ ## END - generated method body
+
+ return _dummyTrans and trans.response().getvalue() or ""
+
+ ##################################################
+ ## CHEETAH GENERATED ATTRIBUTES
+
+
+ _CHEETAH__instanceInitialized = False
+
+ _CHEETAH_version = __CHEETAH_version__
+
+ _CHEETAH_versionTuple = __CHEETAH_versionTuple__
+
+ _CHEETAH_genTime = __CHEETAH_genTime__
+
+ _CHEETAH_genTimestamp = __CHEETAH_genTimestamp__
+
+ _CHEETAH_src = __CHEETAH_src__
+
+ _CHEETAH_srcLastModified = __CHEETAH_srcLastModified__
+
+ _mainCheetahMethod_for_kickstart= 'respond'
+
+## END CLASS DEFINITION
+
+if not hasattr(kickstart, '_initCheetahAttributes'):
+ templateAPIClass = getattr(kickstart, '_CHEETAH_templateClass', Template)
+ templateAPIClass._addCheetahPlumbingCodeToClass(kickstart)
+
+
+# CHEETAH was developed by Tavis Rudd and Mike Orr
+# with code, advice and input from many other volunteers.
+# For more information visit http://www.CheetahTemplate.org/
+
+##################################################
+## if run from command line:
+if __name__ == '__main__':
+ from Cheetah.TemplateCmdLineIface import CmdLineIface
+ CmdLineIface(templateObj=kickstart()).run()
+
+
--- /dev/null
+#!/usr/bin/python
+# Anas Nashif <anas.nashif@intel.com>
+import yaml, sys
+
+import re, os
+from kickstart import kickstart
+
+import copy
+import time
+import optparse
+from time import gmtime, strftime
+
+class KSWriter():
+ def __init__(self, im, rep, out):
+ self.image_filename = im
+ self.repo_filename = rep
+ self.outdir = out
+ self.image_stream = file(self.image_filename, 'r')
+ self.repo_stream = file(self.repo_filename, 'r')
+ self.extra = {}
+ pass
+ def merge(*input):
+ return list(reduce(set.union, input, set()))
+
+ def dump(self):
+ print yaml.dump(yaml.load(self.stream))
+
+
+ def parse(self, img):
+ print "Creating %s (%s.ks)" %(img['Name'], img['FileName'] )
+ conf = copy.copy(image_meta['Default'])
+ plat = copy.copy(image_meta[img['Platform']])
+ conf.update(plat)
+ conf.update(img)
+ lval = ['Repos', 'Groups', 'PostScripts', 'NoChrootScripts', 'RemovePackages', 'ExtraPackages']
+ lvald = {}
+ for l in lval:
+ full = []
+ if image_meta['Default'].has_key(l) and image_meta['Default'][l]:
+ full = full + image_meta['Default'][l]
+ if plat.has_key(l) and plat[l]:
+ full = full + plat[l]
+ if img.has_key(l) and img[l]:
+ full = full + img[l]
+ lvald[l] = set(full)
+ #print full
+ conf.update(lvald)
+ #print conf
+ postscript = ""
+ for scr in conf['PostScripts']:
+ f = open('./custom/scripts/%s.post' %scr, 'r')
+ postscript += f.read()
+ postscript += "\n\n"
+ f.close()
+
+ nochrootscript = ""
+ for scr in conf['NoChrootScripts']:
+ f = open('./custom/scripts/%s.nochroot' %scr, 'r')
+ nochrootscript += f.read()
+ nochrootscript += "\n\n"
+ f.close()
+
+ ptab = ""
+ if img.has_key("Part"):
+ f = open("./custom/part/%s" %img['Part'] )
+ ptab = f.read()
+ f.close()
+
+ conf['Part'] = ptab
+ conf['Post'] = postscript
+ conf['NoChroot'] = nochrootscript
+ return conf
+
+ def process_files(self, meta, r):
+ nameSpace = {'metadata': meta, 'repos': r}
+ t = kickstart(searchList=[nameSpace])
+ a = str(t)
+ if meta.has_key('FileName') and meta['FileName']:
+ f = open("%s/%s.ks" %( self.outdir, meta['FileName'] ), 'w')
+ f.write(a)
+ f.close()
+
+if __name__ == '__main__':
+ parser = optparse.OptionParser()
+
+ parser.add_option("-c", "--configs", type="string", dest="configsfile",
+ help="configuration meta file")
+ parser.add_option("-o", "--outdir", type="string", dest="outdir",
+ help="outdir")
+ parser.add_option("-r", "--repos", type="string", dest="repofile",
+ help="repo meta file")
+
+ (options, args) = parser.parse_args()
+
+ if options.configsfile is None or options.repofile is None:
+ print "you need to provide meta files with --configs and --repos"
+ sys.exit(1)
+
+ outdir = ""
+ if options.outdir is None:
+ outdir = "."
+ else:
+ outdir = options.outdir
+
+ ks = KSWriter(options.configsfile, options.repofile, outdir)
+ repo_meta = yaml.load(ks.repo_stream)
+ image_meta = yaml.load(ks.image_stream)
+ r = repo_meta['Repositories']
+ for img in image_meta['Configurations']:
+ conf = ks.parse(img)
+ ks.process_files(conf, r)