diff --git a/ansibledoctor/Config.py b/ansibledoctor/Config.py index af9fc97..8522b81 100644 --- a/ansibledoctor/Config.py +++ b/ansibledoctor/Config.py @@ -45,6 +45,7 @@ class Config(): self.dry_run = self._set_dry_run() or False self.config = self._get_config() self._annotations = self._set_annotations() + self._post_processing() def _set_args(self, args): defaults = self._get_defaults() @@ -81,6 +82,7 @@ class Config(): "template_dir": default_template, "template": "readme", "force_overwrite": False, + "appent_to_file": "", "exclude_files": [], } @@ -90,7 +92,6 @@ class Config(): def _get_config(self): defaults = self._get_defaults() source_files = [] - source_files.append(self.config_file) source_files.append(os.path.join(self.base_dir, ".ansibledoctor")) source_files.append(os.path.join(self.base_dir, ".ansibledoctor.yml")) @@ -156,6 +157,15 @@ class Config(): if self.args.get("dry_run"): return True + def _post_processing(self): + # Override append file path + append_file = self.config.get("append_to_file") + if append_file: + if not os.path.isabs(os.path.expanduser(os.path.expandvars(append_file))): + append_file = os.path.join(self.base_dir, append_file) + + self.config["append_to_file"] = os.path.abspath(os.path.expanduser(os.path.expandvars(append_file))) + def _validate(self, config): try: anyconfig.validate(config, self.schema, ac_schema_safe=False) diff --git a/ansibledoctor/DocumentationGenerator.py b/ansibledoctor/DocumentationGenerator.py index 70f5428..ebddcb4 100644 --- a/ansibledoctor/DocumentationGenerator.py +++ b/ansibledoctor/DocumentationGenerator.py @@ -79,6 +79,14 @@ class Generator: for file in self.template_files: doc_file = os.path.join(self.config.config.get("output_dir"), os.path.splitext(file)[0]) source_file = self.config.get_template() + "/" + file + append_file = self.config.config.get("append_to_file") + role_data = self._parser.get_data() + custom_header = "" + + if append_file: + role_data["internal"]["append"] = True + with open(append_file, "r") as a: + custom_header = a.read() self.logger.debug("Writing doc output to: " + doc_file + " from: " + source_file) @@ -90,13 +98,14 @@ class Generator: data = template.read() if data is not None: try: - # print(json.dumps(self._parser.get_data(), indent=4, sort_keys=True)) + # print(json.dumps(role_data, indent=4, sort_keys=True)) jenv = Environment(loader=FileSystemLoader(self.config.get_template()), lstrip_blocks=True, trim_blocks=True) jenv.filters["to_nice_yaml"] = self._to_nice_yaml jenv.filters["deep_get"] = self._deep_get - data = jenv.from_string(data).render(self._parser.get_data(), role=self._parser.get_data()) + data = jenv.from_string(data).render(role_data, role=role_data) if not self.config.dry_run: with open(doc_file, "wb") as outfile: + outfile.write(custom_header.encode("utf-8")) outfile.write(data.encode("utf-8")) self.logger.info("Writing to: " + doc_file) else: diff --git a/ansibledoctor/templates/readme/README.md.j2 b/ansibledoctor/templates/readme/README.md.j2 index 1f11e1a..566945b 100644 --- a/ansibledoctor/templates/readme/README.md.j2 +++ b/ansibledoctor/templates/readme/README.md.j2 @@ -1,5 +1,7 @@ +{% if not append | deep_get(role, "internal.append") %} {% set meta = role.meta | default({}) %} # {{ name | deep_get(meta, "name.value") | default("_undefined_") }} +{% endif %} {% if description | deep_get(meta, "description.value") %} {{ description | deep_get(meta, "description.value") }} diff --git a/ansibledoctor/templates/readme/_vars.j2 b/ansibledoctor/templates/readme/_vars.j2 index 9a32766..2e4d4cc 100644 --- a/ansibledoctor/templates/readme/_vars.j2 +++ b/ansibledoctor/templates/readme/_vars.j2 @@ -6,9 +6,7 @@ ### {{ key }} {% if item.description is defined and item.description %} -{% for desc_line in item.description %} -{{ desc_line }} -{% endfor %} +{{ item.description | join(" ") | striptags }} {% endif %} {% if item.value is defined and item.value %} diff --git a/example/README.md b/example/README.md index 27fd1f2..310a1c1 100644 --- a/example/README.md +++ b/example/README.md @@ -1,4 +1,7 @@ -# demo-role +# demo-role-custom-header + +[![Build Status](https://cloud.drone.io/api/badges/xoxys/ansible-later/status.svg)](https://cloud.drone.io/xoxys/ansible-later) +![License](https://img.shields.io/pypi/l/ansible-later) Role to demonstrate ansible-doctor @@ -97,8 +100,7 @@ demo_role_dict: ### demo_role_other_tags -The role requires epel repository and pip to work. -You can use dockerengine_packages_extra to install these dependencys. +If a variable need some more explanation, this is a good place to do so. #### Default value diff --git a/example/demo-role/.ansibledoctor.yml b/example/demo-role/.ansibledoctor.yml new file mode 100644 index 0000000..e7cd62c --- /dev/null +++ b/example/demo-role/.ansibledoctor.yml @@ -0,0 +1,2 @@ +--- +append_to_file: HEADER.md diff --git a/example/demo-role/HEADER.md b/example/demo-role/HEADER.md new file mode 100644 index 0000000..dce973d --- /dev/null +++ b/example/demo-role/HEADER.md @@ -0,0 +1,4 @@ +# demo-role-custom-header + +[![Build Status](https://cloud.drone.io/api/badges/xoxys/ansible-later/status.svg)](https://cloud.drone.io/xoxys/ansible-later) +![License](https://img.shields.io/pypi/l/ansible-later) diff --git a/example/demo-role/defaults/main.yml b/example/demo-role/defaults/main.yml index 5e72134..34a2ed7 100644 --- a/example/demo-role/defaults/main.yml +++ b/example/demo-role/defaults/main.yml @@ -20,8 +20,8 @@ demo_role_dict: sub: some value # @var demo_role_other_tags:description: > -# The role requires epel repository and pip to work. -# You can use dockerengine_packages_extra to install these dependencys. +# If a variable need some more explanation, +# this is a good place to do so. # @end # @var dockerengine_packages_extra:example: ["package1", "package2"]