Example #1
0
 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
Example #2
0
    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')
Example #3
0
    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'}
Example #4
0
    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')
Example #5
0
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")
Example #6
0
 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'}
Example #7
0
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())
Example #8
0
 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
Example #9
0
 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