예제 #1
0
    def create_skeleton(self):
        """
        Create the role's directory and file structure.
        """
        utils.string_to_file(os.path.join(self.output_path, "VERSION"),
                             "master\n")

        for folder in c.ANSIBLE_FOLDERS:
            create_folder_path = os.path.join(self.output_path, folder)
            utils.mkdir_p(create_folder_path)

            mainyml_template = default_mainyml_template.replace(
                "%role_name", self.role_name)
            mainyml_template = mainyml_template.replace(
                "%values", folder)

            out_path = os.path.join(create_folder_path, "main.yml")

            if folder not in ("templates", "meta", "tests", "files"):
                utils.string_to_file(out_path, mainyml_template)

            if folder == "meta":
                utils.create_meta_main(out_path,
                                       self.config, self.role_name,
                                       self.options.galaxy_categories)
예제 #2
0
파일: init.py 프로젝트: dr1s/ansigenome
    def create_test_case(self):
        """
        Create a test case.
        """
        testyml_template = default_testyml_template.replace(
            "%role", self.normalized_role)
        testyml_template = testyml_template.replace("%year",
                                                    str(date.today().year))
        testyml_template = testyml_template.replace("%author",
                                                    self.config["author_name"])
        testyml_template = testyml_template.replace(
            "%email", self.config["author_email"])

        utils.mkdir_p(
            os.path.join(self.output_path, "tests", "inventory", "group_vars"))

        utils.mkdir_p(
            os.path.join(self.output_path, "tests", "inventory", "host_vars"))

        hosts = "placeholder_fqdn\n"
        utils.string_to_file(
            os.path.join(self.output_path, "tests", "inventory", "hosts"),
            hosts)

        test_file = os.path.join(self.output_path, "tests", "test")
        utils.string_to_file(test_file, testyml_template)

        os.chmod(test_file, 0755)
예제 #3
0
    def create_test_case(self):
        """
        Create a test case.
        """
        testyml_template = default_testyml_template.replace(
            "%role", self.normalized_role)
        testyml_template = testyml_template.replace(
            "%year", str(date.today().year))
        testyml_template = testyml_template.replace(
            "%author", self.config["author_name"])
        testyml_template = testyml_template.replace(
            "%email", self.config["author_email"])

        utils.mkdir_p(os.path.join(self.output_path,
                                   "tests", "inventory", "group_vars"))

        utils.mkdir_p(os.path.join(self.output_path,
                                   "tests", "inventory", "host_vars"))

        hosts = "placeholder_fqdn\n"
        utils.string_to_file(os.path.join(self.output_path,
                                          "tests", "inventory", "hosts"),
                             hosts)

        test_file = os.path.join(self.output_path, "tests", "test")
        utils.string_to_file(test_file, testyml_template)

        os.chmod(test_file, 0755)
예제 #4
0
 def dump(self):
     """
     Dump the output to json.
     """
     report_as_json_string = utils.dict_to_json(self.report)
     if self.out_file:
         utils.string_to_file(self.out_file, report_as_json_string)
     else:
         print report_as_json_string
예제 #5
0
 def dump(self):
     """
     Dump the output to json.
     """
     report_as_json_string = utils.dict_to_json(self.report)
     if self.out_file:
         utils.string_to_file(self.out_file, report_as_json_string)
     else:
         print report_as_json_string
예제 #6
0
    def reqs_yml(self):
        """
        Export a requirements file in yml format.
        """
        default_yml_item = """
- src:     '%src'
  name:    '%name'
  scm:     '%scm'
  version: '%version'
"""

        role_lines = "---\n"
        for role in sorted(self.report["roles"]):
            name = utils.normalize_role(role, self.config)
            galaxy_name = "{0}.{1}".format(self.config["scm_user"], name)
            yml_item = default_yml_item

            if self.config["scm_host"]:
                yml_item = yml_item.replace("%name",
                                            "{0}".format(galaxy_name))
                if self.config["scm_repo_prefix"]:
                    role = self.config["scm_repo_prefix"] + name

                src = os.path.join(self.config["scm_host"],
                                   self.config["scm_user"], role)
            else:
                src = galaxy_name
                yml_item = yml_item.replace("  name: '%name'\n", "")
                yml_item = yml_item.replace("  scm: '%scm'\n", "")

            yml_item = yml_item.replace("%src", src)

            if self.config["scm_type"]:
                yml_item = yml_item.replace("%scm", self.config["scm_type"])
            else:
                yml_item = yml_item.replace("  scm: '%scm'\n", "")

            version_path = os.path.join(self.roles_path, role, "VERSION")
            version = utils.get_version(version_path)
            yml_item = yml_item.replace("%version", version)

            role_lines += "{0}".format(yml_item)

        if self.out_file:
            utils.string_to_file(self.out_file, role_lines)
        else:
            print role_lines
예제 #7
0
    def reqs_yml(self):
        """
        Export a requirements file in yml format.
        """
        default_yml_item = """
- src:     '%src'
  name:    '%name'
  scm:     '%scm'
  version: '%version'
"""

        role_lines = "---\n"
        for role in sorted(self.report["roles"]):
            name = utils.normalize_role(role, self.config)
            galaxy_name = "{0}.{1}".format(self.config["scm_user"], name)
            yml_item = default_yml_item

            if self.config["scm_host"]:
                yml_item = yml_item.replace("%name",
                                            "{0}".format(galaxy_name))
                if self.config["scm_repo_prefix"]:
                    role = self.config["scm_repo_prefix"] + name

                src = os.path.join(self.config["scm_host"],
                                   self.config["scm_user"], role)
            else:
                src = galaxy_name
                yml_item = yml_item.replace("  name: '%name'\n", "")
                yml_item = yml_item.replace("  scm: '%scm'\n", "")

            yml_item = yml_item.replace("%src", src)

            if self.config["scm_type"]:
                yml_item = yml_item.replace("%scm", self.config["scm_type"])
            else:
                yml_item = yml_item.replace("  scm: '%scm'\n", "")

            version_path = os.path.join(self.roles_path, role, "VERSION")
            version = utils.get_version(version_path)
            yml_item = yml_item.replace("%version", version)

            role_lines += "{0}".format(yml_item)

        if self.out_file:
            utils.string_to_file(self.out_file, role_lines)
        else:
            print role_lines
예제 #8
0
 def dump(self):
     """
     Dump the output to json.
     """
     if self.options.role is not None:
         role = "roles/" + self.options.role
         if role not in self.report["roles"]:
             print("Role does not exist: %s" % self.options.role)
             sys.exit(2)
         data = self.report["roles"][role]
     else:
         data = self.report
     report_as_json_string = utils.dict_to_json(data, pretty_print=True)
     if self.out_file:
         utils.string_to_file(self.out_file, report_as_json_string)
     else:
         print report_as_json_string
예제 #9
0
    def reqs_txt(self):
        """
        Export a requirements file in txt format.
        """
        role_lines = ""

        for role in sorted(self.report["roles"]):
            name = utils.normalize_role(role, self.config)
            galaxy_name = "{0}.{1}".format(self.config["scm_user"], name)

            version_path = os.path.join(self.roles_path, role, "VERSION")
            version = utils.get_version(version_path)
            role_lines += "{0},{1}\n".format(galaxy_name, version)

        if self.out_file:
            utils.string_to_file(self.out_file, role_lines)
        else:
            print role_lines
예제 #10
0
    def reqs_txt(self):
        """
        Export a requirements file in txt format.
        """
        role_lines = ""

        for role in sorted(self.report["roles"]):
            name = utils.normalize_role(role, self.config)
            galaxy_name = "{0}.{1}".format(self.config["scm_user"], name)

            version_path = os.path.join(self.roles_path, role, "VERSION")
            version = utils.get_version(version_path)
            role_lines += "{0},{1}\n".format(galaxy_name, version)

        if self.out_file:
            utils.string_to_file(self.out_file, role_lines)
        else:
            print role_lines
예제 #11
0
파일: scan.py 프로젝트: dr1s/ansigenome
    def make_or_augment_meta(self, role):
        """
        Create or augment a meta file.
        """
        if not os.path.exists(self.paths["meta"]):
            utils.create_meta_main(self.paths["meta"], self.config, role, "")
            self.report["state"]["ok_role"] += 1
            self.report["roles"][role]["state"] = "ok"

        if not os.path.exists(self.paths["ansigenome"]):
            ag_meta_file = c.DEFAULT_AG_FILE
            ag_meta_file = meta_file.replace("%role_name", role)
            utils.string_to_file(self.paths['ansigenome'], ag_meta_file)

        # swap values in place to use the config values
        swaps = [
            ("author", self.config["author_name"]),
            ("company", self.config["author_company"]),
            ("license", self.config["license_type"]),
        ]

        (new_meta, _) = utils.swap_yaml_string(self.paths["meta"], swaps)

        # normalize the --- at the top of the file by removing it first
        new_meta = new_meta.replace("---", "")
        new_meta = new_meta.lstrip()

        # augment missing main keys
        augments = [
            ("ansigenome_info", "{}"),
            ("galaxy_info", "{}"),
            ("dependencies", "[]"),
        ]

        new_meta = self.augment_main_keys(augments, new_meta)

        # re-attach the ---
        new_meta = "---\n\n" + new_meta

        travis_path = os.path.join(self.paths["role"], ".travis.yml")
        if os.path.exists(travis_path):
            new_meta = new_meta.replace("travis: False", "travis: True")

        utils.string_to_file(self.paths["meta"], new_meta)
예제 #12
0
    def update_gen_report(self, role, file, original):
        """
        Update the role state and adjust the gen totals.
        """
        state = self.report["state"]

        if not os.path.exists(self.paths[file]):
            state["ok_role"] += 1
            self.report["roles"][role]["state"] = "ok"
        elif (self.report["roles"][role][file] != original and
                self.report["roles"][role]["state"] != "ok"):
            state["changed_role"] += 1
            self.report["roles"][role]["state"] = "changed"
        elif self.report["roles"][role][file] == original:
            state["skipped_role"] += 1
            self.report["roles"][role]["state"] = "skipped"
            return

        utils.string_to_file(self.paths[file], original)
예제 #13
0
파일: scan.py 프로젝트: dr1s/ansigenome
    def update_gen_report(self, role, file, original):
        """
        Update the role state and adjust the gen totals.
        """
        state = self.report["state"]

        if not os.path.exists(self.paths[file]):
            state["ok_role"] += 1
            self.report["roles"][role]["state"] = "ok"
        elif (self.report["roles"][role][file] != original
              and self.report["roles"][role]["state"] != "ok"):
            state["changed_role"] += 1
            self.report["roles"][role]["state"] = "changed"
        elif self.report["roles"][role][file] == original:
            state["skipped_role"] += 1
            self.report["roles"][role]["state"] = "skipped"
            return

        utils.string_to_file(self.paths[file], original)
예제 #14
0
파일: init.py 프로젝트: dr1s/ansigenome
    def create_travis_config(self):
        """
        Create a travis test setup.
        """
        test_runner = self.config["options_test_runner"]

        role_url = "{0}".format(
            os.path.join(self.config["scm_host"], self.config["scm_user"],
                         self.config["scm_repo_prefix"] +
                         self.normalized_role))

        travisyml_template = default_travisyml_template.replace(
            "%test_runner", test_runner)
        travisyml_template = travisyml_template.replace(
            "%basename",
            test_runner.split("/")[-1])
        travisyml_template = travisyml_template.replace("%role_url", role_url)

        utils.string_to_file(os.path.join(self.output_path, ".travis.yml"),
                             travisyml_template)
예제 #15
0
    def create_travis_config(self):
        """
        Create a travis test setup.
        """
        test_runner = self.config["options_test_runner"]

        role_url = "{0}".format(os.path.join(self.config["scm_host"],
                                             self.config["scm_user"],
                                             self.config["scm_repo_prefix"] +
                                             self.normalized_role))

        travisyml_template = default_travisyml_template.replace(
            "%test_runner", test_runner)
        travisyml_template = travisyml_template.replace(
            "%basename", test_runner.split("/")[-1])
        travisyml_template = travisyml_template.replace(
            "%role_url", role_url)

        utils.string_to_file(os.path.join(self.output_path, ".travis.yml"),
                             travisyml_template)
예제 #16
0
파일: init.py 프로젝트: dr1s/ansigenome
    def create_skeleton(self):
        """
        Create the role's directory and file structure.
        """
        utils.string_to_file(os.path.join(self.output_path, "VERSION"),
                             "master\n")

        for folder in c.ANSIBLE_FOLDERS:
            create_folder_path = os.path.join(self.output_path, folder)
            utils.mkdir_p(create_folder_path)

            mainyml_template = default_mainyml_template.replace(
                "%role_name", self.role_name)
            mainyml_template = mainyml_template.replace("%values", folder)

            out_path = os.path.join(create_folder_path, "main.yml")

            if folder not in ("templates", "meta", "tests", "files"):
                utils.string_to_file(out_path, mainyml_template)

            if folder == "meta":
                utils.create_meta_main(out_path, self.config, self.role_name,
                                       self.options.galaxy_categories)

            ag_path = os.path.join(create_folder_path, "ansigenome.yml")
            if not os.path.exists(ag_path):
                ag_meta_file = c.DEFAULT_AG_FILE
                ag_meta_file = meta_file.replace("%role_name", self.role_name)
                utils.string_to_file(self.paths['ansigenome'], ag_meta_file)
예제 #17
0
    def make_or_augment_meta(self, role):
        """
        Create or augment a meta file.
        """
        if not os.path.exists(self.paths["meta"]):
            utils.create_meta_main(self.paths["meta"], self.config, role, "")
            self.report["state"]["ok_role"] += 1
            self.report["roles"][role]["state"] = "ok"

        # swap values in place to use the config values
        swaps = [
            ("author", self.config["author_name"]),
            ("company", self.config["author_company"]),
            ("license", self.config["license_type"]),
        ]

        (new_meta, _) = utils.swap_yaml_string(self.paths["meta"], swaps)

        # normalize the --- at the top of the file by removing it first
        new_meta = new_meta.replace("---", "")
        new_meta = new_meta.lstrip()

        # augment missing main keys
        augments = [
            ("ansigenome_info", "{}"),
            ("galaxy_info", "{}"),
            ("dependencies", "[]"),
        ]

        new_meta = self.augment_main_keys(augments, new_meta)

        # re-attach the ---
        new_meta = "---\n\n" + new_meta

        travis_path = os.path.join(self.paths["role"], ".travis.yml")
        if os.path.exists(travis_path):
            new_meta = new_meta.replace("travis: False", "travis: True")

        utils.string_to_file(self.paths["meta"], new_meta)
예제 #18
0
    def graph_dot(self):
        """
        Export a graph of the data in dot format.
        """
        default_graphviz_template = """
digraph role_dependencies {
        size="%size"
        dpi=%dpi
        ratio="fill"
        landscape=false
        rankdir="BT";

        node [shape = "box",
              style = "rounded,filled",
              fillcolor = "lightgrey",
              fontsize = 20];

        edge [style = "dashed",
              dir = "forward",
              penwidth = 1.5];

%roles_list

%dependencies
}
"""

        roles_list = ""
        edges = ""

        # remove the darkest and brightest colors, still have 100+ colors
        adjusted_colors = c.X11_COLORS[125:-325]
        random.shuffle(adjusted_colors)
        backup_colors = adjusted_colors[:]

        for role, fields in sorted(self.report["roles"].iteritems()):
            name = utils.normalize_role(role, self.config)
            color_length = len(adjusted_colors) - 1

            # reset the colors if we run out
            if color_length == 0:
                adjusted_colors = backup_colors[:]
                color_length = len(adjusted_colors) - 1

            random_index = random.randint(1, color_length)
            roles_list += "        role_{0}              [label = \"{0}\"]\n" \
                          .format(re.sub(r'[.-]', '_', name))

            edge = '\n        edge [color = "{0}"];\n' \
                   .format(adjusted_colors[random_index])
            del adjusted_colors[random_index]

            if fields["dependencies"]:
                dependencies = ""

                for dependency in sorted(fields["dependencies"]):
                    dependency_name = utils.role_name(dependency)
                    dependencies += "        role_{0} -> role_{1}\n".format(
                        re.sub(r'[.-]', '_', name),
                        utils.normalize_role(dependency_name, self.config))

                edges += "{0}{1}\n".format(edge, dependencies)

        graphviz_template = default_graphviz_template.replace(
            "%roles_list", roles_list)
        graphviz_template = graphviz_template.replace("%dependencies", edges)
        graphviz_template = graphviz_template.replace("%size", self.size)
        graphviz_template = graphviz_template.replace("%dpi", str(self.dpi))

        if self.out_file:
            utils.string_to_file(self.out_file, graphviz_template)
        else:
            print graphviz_template
예제 #19
0
    def graph_dot(self):
        """
        Export a graph of the data in dot format.
        """
        default_graphviz_template = """
digraph role_dependencies {
        size="%size"
        dpi=%dpi
        ratio="fill"
        landscape=false
        rankdir="BT";

        node [shape = "box",
              style = "rounded,filled",
              fillcolor = "lightgrey",
              fontsize = 20];

        edge [style = "dashed",
              dir = "forward",
              penwidth = 1.5];

%roles_list

%dependencies
}
"""

        roles_list = ""
        edges = ""

        # remove the darkest and brightest colors, still have 100+ colors
        adjusted_colors = c.X11_COLORS[125:-325]
        random.shuffle(adjusted_colors)
        backup_colors = adjusted_colors[:]

        for role, fields in sorted(self.report["roles"].iteritems()):
            name = utils.normalize_role(role, self.config)
            color_length = len(adjusted_colors) - 1

            # reset the colors if we run out
            if color_length == 0:
                adjusted_colors = backup_colors[:]
                color_length = len(adjusted_colors) - 1

            random_index = random.randint(1, color_length)
            roles_list += '        "{0}"              [label = "{1}"]\n'.format(name, name)

            edge = '\n        edge [color = "{0}"];\n' \
                   .format(adjusted_colors[random_index])
            del adjusted_colors[random_index]

            if fields["dependencies"]:
                dependencies = ""

                for dependency in sorted(fields["dependencies"]):
                    dependency_name = utils.role_name(dependency)
                    dependencies += '        "{0}" -> "{1}"\n'.format(name, dependency_name)

                edges += "{0}{1}\n".format(edge, dependencies)

        graphviz_template = default_graphviz_template.replace("%roles_list",
                                                              roles_list)
        graphviz_template = graphviz_template.replace("%dependencies",
                                                      edges)
        graphviz_template = graphviz_template.replace("%size",
                                                      self.size)
        graphviz_template = graphviz_template.replace("%dpi",
                                                      str(self.dpi))

        if self.out_file:
            utils.string_to_file(self.out_file, graphviz_template)
        else:
            print graphviz_template