def process_inputfile(self, plan, inputfile, overrides={}, onfly=None, full=False, ignore=False, download_mode=False): basedir = os.path.dirname(inputfile) if os.path.dirname(inputfile) != '' else '.' basefile = None undefined = strictundefined if not ignore else defaultundefined env = Environment(loader=FileSystemLoader(basedir), undefined=undefined) try: templ = env.get_template(os.path.basename(inputfile)) except TemplateSyntaxError as e: common.pprint("Error rendering line %s of file %s. Got: %s" % (e.lineno, e.filename, e.message), color='red') os._exit(1) except TemplateError as e: common.pprint("Error rendering file %s. Got: %s" % (inputfile, e.message), color='red') os._exit(1) parameters = common.get_parameters(inputfile) if parameters is not None: parameters = yaml.safe_load(parameters)['parameters'] if not isinstance(parameters, dict): common.pprint("Error rendering parameters section of file %s" % inputfile, color='red') os._exit(1) for parameter in parameters: if parameter == 'baseplan': basefile = parameters['baseplan'] if onfly is not None: common.fetch("%s/%s" % (onfly, basefile), '.') baseparameters = common.get_parameters(basefile) if baseparameters is not None: baseparameters = yaml.safe_load(baseparameters)['parameters'] for baseparameter in baseparameters: if baseparameter not in overrides and baseparameter not in parameters: overrides[baseparameter] = baseparameters[baseparameter] elif parameter not in overrides: currentparameter = parameters[parameter] if isinstance(currentparameter, bool) and download_mode: currentparameter = True overrides[parameter] = currentparameter with open(inputfile, 'r') as entries: overrides.update(self.overrides) overrides.update({'plan': plan}) try: entries = templ.render(overrides) except TemplateError as e: common.pprint("Error rendering inputfile %s. Got: %s" % (inputfile, e.message), color='red') os._exit(1) if not full: entrieslist = entries.split('\n') if entrieslist[0].startswith('parameters:'): for index, line in enumerate(entrieslist[1:]): if re.match(r'\S', line): entries = '\n'.join(entrieslist[index + 1:]) break return entries entries = yaml.safe_load(entries) return entries, overrides, basefile, basedir
def info_plan(self, inputfile, quiet=False, web=False, onfly=None): """ :param inputfile: :param quiet: :return: """ inputfile = os.path.expanduser(inputfile) if inputfile is not None else 'kcli_plan.yml' if not quiet: common.pprint("Providing information on parameters of plan %s..." % inputfile) if not os.path.exists(inputfile): common.pprint("No input file found nor default kcli_plan.yml. Leaving....", color='red') os._exit(1) parameters = common.get_parameters(inputfile) if parameters is not None: parameters = yaml.safe_load(parameters)['parameters'] if web: return parameters for parameter in parameters: print("%s: %s" % (parameter, parameters[parameter])) if parameter == 'baseplan': if onfly is not None: common.fetch("%s/%s" % (onfly, parameters[parameter]), '.') baseplan = parameters[parameter] basedir = os.path.dirname(inputfile) if os.path.basename(inputfile) != inputfile else '.' baseplan = "%s/%s" % (basedir, baseplan) self.info_plan(baseplan, quiet=True) print() else: common.pprint("No parameters found. Leaving...", color='blue')
def info_plan(self, inputfile, quiet=False): """ :param inputfile: :param quiet: :return: """ inputfile = os.path.expanduser( inputfile) if inputfile is not None else 'kcli_plan.yml' if not quiet: common.pprint("Providing information on parameters of plan %s..." % inputfile, color='green') if not os.path.exists(inputfile): common.pprint( "No input file found nor default kcli_plan.yml. Leaving....", color='red') os._exit(1) parameters = common.get_parameters(inputfile) if parameters is not None: parameters = yaml.load(parameters)['parameters'] for parameter in parameters: print("%s: %s" % (parameter, parameters[parameter])) if parameter == 'baseplan': self.info_plan(parameters[parameter], quiet=True) print() else: common.pprint("No parameters found. Leaving...", color='blue') return {'result': 'success'}
def info_plan(self, inputfile, quiet=False, web=False, onfly=None, doc=False): """ :param inputfile: :param quiet: :return: """ inputfile = os.path.expanduser(inputfile) if inputfile is not None else 'kcli_plan.yml' basedir = os.path.dirname(inputfile) if basedir == "": basedir = '.' plan = os.path.basename(inputfile).replace('.yml', '').replace('.yaml', '') if not quiet: common.pprint("Providing information on parameters of plan %s..." % inputfile) if not os.path.exists(inputfile): common.pprint("No input file found nor default kcli_plan.yml. Leaving....", color='red') os._exit(1) if os.path.exists("%s/%s_default.yml" % (basedir, plan)): parameterfile = "%s/%s_default.yml" % (basedir, plan) if not quiet: common.pprint("Using %s_default.yml for default parameters" % plan) elif os.path.exists("%s/kcli_default.yml" % basedir): parameterfile = "%s/kcli_default.yml" % basedir if not quiet: common.pprint("Using kcli_default.yml for default parameters") else: parameterfile = inputfile raw = True if parameterfile != inputfile else False parameters = common.get_parameters(parameterfile, raw=raw) if parameters is not None: parameters = yaml.safe_load(parameters)['parameters'] if not raw else parameters if web: return parameters if doc: maxkey = max([len(x) for x in parameters]) maxvalue = max([len(str(parameters[x])) for x in parameters if parameters[x] is not None]) print("|Parameter%s|Default Value%s|" % (" " * (maxkey - len("Parameter")), " " * (maxvalue - len("Default Value")))) print("|%s|%s|" % ("-" * maxkey, "-" * maxvalue)) for parameter in parameters: if doc: print("|%s%s|%s%s|" % (parameter, " " * (maxkey - len(parameter)), parameters[parameter], " " * (maxvalue - len(str(parameters[parameter]))))) else: print("%s: %s" % (parameter, parameters[parameter])) if parameter == 'baseplan': if onfly is not None: common.fetch("%s/%s" % (onfly, parameters[parameter]), '.') baseplan = parameters[parameter] basedir = os.path.dirname(inputfile) if os.path.basename(inputfile) != inputfile else '.' baseplan = "%s/%s" % (basedir, baseplan) self.info_plan(baseplan, quiet=True) print() else: common.pprint("No parameters found. Leaving...", color='blue')
def template(args): paramfile = args.paramfile if not os.path.exists('/i_am_a_container') else '/workdir/%s' % args.paramfile pprint("Generating parameter file %s" % real_path(paramfile), color='green') params = get_parameters('masters.yml') parameters = '\n'.join([parameter.lstrip() for parameter in params.split('\n')[1:]]) path = paramfile with open(path, 'w') as f: f.write("version: stable\n") f.write("pull_secret: openshift_pull.json\n") f.write(parameters) f.write("macosx: False\n")
def info_plan(self, inputfile): common.pprint("Providing information on parameters of plan %s..." % inputfile, color='green') inputfile = os.path.expanduser(inputfile) if not os.path.exists(inputfile): common.pprint( "No input file found nor default kcli_plan.yml.Leaving....", color='red') os._exit(1) parameters = common.get_parameters(inputfile) if parameters is not None: parameters = yaml.load(parameters)['parameters'] for parameter in parameters: print("%s: %s" % (parameter, parameters[parameter])) else: common.pprint("No parameters found. Leaving...", color='blue') return {'result': 'success'}
def render(args): """ :param args: """ info = args.info inputfile = args.inputfile inputfile = os.path.expanduser(inputfile) if not os.path.exists(inputfile): pprint("No input file found.Leaving....", color='red') os._exit(1) overrides = get_overrides(paramfile=args.paramfile, param=args.param) parameters = get_parameters(inputfile) if parameters is not None: parameters = yaml.load(parameters)['parameters'] numparameters = len(parameters) for parameter in parameters: if parameter not in overrides: overrides[parameter] = parameters[parameter] if info: for parameter in overrides: print("Using parameter %s: %s" % (parameter, overrides[parameter])) os._exit(0) basedir = os.path.dirname( inputfile) if os.path.dirname(inputfile) != '' else '.' env = Environment(block_start_string='[%', block_end_string='%]', variable_start_string='[[', variable_end_string='' ']]', loader=FileSystemLoader(basedir)) templ = env.get_template(os.path.basename(inputfile)) fileentries = templ.render(overrides) parametersfound = -1 for line in fileentries.split('\n'): if line.strip() == '': continue elif line.startswith('parameters:'): parametersfound = 0 elif -1 < parametersfound < numparameters: parametersfound += 1 else: print(line.strip())
def create_pipeline(self, inputfile, overrides={}, kube=False): _type = 'plan' if kube: _type = 'generic' plandir = os.path.dirname(kubeadm.create.__code__.co_filename) if 'type' in overrides: _type = overrides['type'] del overrides['type'] if _type == 'openshift': plandir = os.path.dirname(openshift.create.__code__.co_filename) elif _type != 'generic': common.pprint("Incorrect kubernetes type %s. Choose betwen generic or openshift" % _type, color='red') os._exit(1) inputfile = "%s/masters.yml" % plandir if 'jenkinsmode' in overrides: jenkinsmode = overrides['jenkinsmode'] del overrides['jenkinsmode'] else: jenkinsmode = self.jenkinsmode if jenkinsmode not in ['docker', 'podman', 'kubernetes']: common.pprint("Incorrect jenkins mode %s. Choose betwen docker, podman or kubernetes" % self.jenkinsmode, color='red') os._exit(1) inputfile = os.path.expanduser(inputfile) if inputfile is not None else 'kcli_plan.yml' basedir = os.path.dirname(inputfile) if basedir == "": basedir = '.' plan = os.path.basename(inputfile).replace('.yml', '').replace('.yaml', '') if not os.path.exists(inputfile): common.pprint("No input file found nor default kcli_plan.yml. Leaving....", color='red') os._exit(1) if os.path.exists("%s/%s_default.yml" % (basedir, plan)): parameterfile = "%s/%s_default.yml" % (basedir, plan) elif os.path.exists("%s/kcli_default.yml" % basedir): parameterfile = "%s/kcli_default.yml" % basedir else: parameterfile = inputfile raw = True if parameterfile != inputfile else False parameters = common.get_parameters(parameterfile, raw=raw) if parameters is not None: parameters = yaml.safe_load(parameters)['parameters'] if not raw else parameters else: parameters = {} parameters.update(overrides) jenkinsdir = os.path.dirname(common.__file__) env = Environment(loader=FileSystemLoader(jenkinsdir)) for jinjafilter in jinjafilters.jinjafilters: env.filters[jinjafilter] = jinjafilters.jinjafilters[jinjafilter] try: templ = env.get_template(os.path.basename("Jenkinsfile.j2")) except TemplateSyntaxError as e: common.pprint("Error rendering line %s of file %s. Got: %s" % (e.lineno, e.filename, e.message), color='red') os._exit(1) except TemplateError as e: common.pprint("Error rendering file %s. Got: %s" % (inputfile, e.message), color='red') os._exit(1) parameterline = " ".join(["-P %s=${params.%s}" % (parameter, parameter) for parameter in parameters]) jenkinsfile = templ.render(parameters=parameters, parameterline=parameterline, jenkinsmode=jenkinsmode, _type=_type) return jenkinsfile
def process_inputfile(self, plan, inputfile, overrides={}, onfly=None, full=False, ignore=False, download_mode=False): basedir = os.path.dirname(inputfile) if os.path.dirname(inputfile) != '' else '.' basefile = None undefined = strictundefined if not ignore else defaultundefined env = Environment(loader=FileSystemLoader(basedir), undefined=undefined) for jinjafilter in jinjafilters.jinjafilters: env.filters[jinjafilter] = jinjafilters.jinjafilters[jinjafilter] try: templ = env.get_template(os.path.basename(inputfile)) except TemplateSyntaxError as e: common.pprint("Error rendering line %s of file %s. Got: %s" % (e.lineno, e.filename, e.message), color='red') os._exit(1) except TemplateError as e: common.pprint("Error rendering file %s. Got: %s" % (inputfile, e.message), color='red') os._exit(1) if os.path.exists("%s/%s_default.yml" % (basedir, plan)): parameterfile = "%s/%s_default.yml" % (basedir, plan) elif os.path.exists("%s/kcli_default.yml" % basedir): parameterfile = "%s/kcli_default.yml" % basedir else: parameterfile = inputfile raw = True if parameterfile != inputfile else False parameters = common.get_parameters(parameterfile, raw=raw) if parameters is not None: parameters = yaml.safe_load(parameters)['parameters'] if not raw else parameters if not isinstance(parameters, dict): common.pprint("Error rendering parameters section of file %s" % inputfile, color='red') os._exit(1) for parameter in parameters: if parameter == 'baseplan': basefile = parameters['baseplan'] if onfly is not None: common.fetch("%s/%s" % (onfly, basefile), '.') baseparameters = common.get_parameters(basefile) if baseparameters is not None: baseparameters = yaml.safe_load(baseparameters)['parameters'] for baseparameter in baseparameters: if baseparameter not in overrides and baseparameter not in parameters: overrides[baseparameter] = baseparameters[baseparameter] elif parameter not in overrides: currentparameter = parameters[parameter] if isinstance(currentparameter, bool) and download_mode: currentparameter = True overrides[parameter] = currentparameter with open(inputfile, 'r') as entries: overrides.update(self.overrides) overrides.update({'plan': plan}) try: entries = templ.render(overrides) except TemplateError as e: common.pprint("Error rendering inputfile %s. Got: %s" % (inputfile, e.message), color='red') os._exit(1) if not full: entrieslist = entries.split('\n') if entrieslist[0].startswith('parameters:'): for index, line in enumerate(entrieslist[1:]): if re.match(r'\S', line): entries = '\n'.join(entrieslist[index + 1:]) break return entries entries = yaml.safe_load(entries) # wrong_entries = [entries[x for x in entries if '-' in x] wrong_overrides = [y for y in overrides if '-' in y] if wrong_overrides: for wrong_override in wrong_overrides: common.pprint("Incorrect parameter %s. Hyphens are not allowed" % wrong_override, color='red') os._exit(1) # elif wrong_entries: # for wrong_entry in wrong_entries: # common.pprint("Incorrect parameter %s. Hyphens are not allowed" % wrong_entry, color='red') # os._exit(1) return entries, overrides, basefile, basedir