-
Notifications
You must be signed in to change notification settings - Fork 34
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #170 from amousset/ust_7844/integrate_ncf_generic_…
…methods_reference_into_the_doc Fixes #7844: Integrate ncf generic methods reference into the doc
- Loading branch information
Showing
5 changed files
with
134 additions
and
11 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
=== Generic methods | ||
|
||
include::../generic_methods.asciidoc[] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,104 @@ | ||
#!/usr/bin/env python | ||
# -*- coding: utf-8 -*- | ||
# | ||
# Usage: ./ncf_doc_rudder.py | ||
# | ||
# This is a Python module to generate documentation from generic methods in ncf to be embedded in Rudder manual | ||
|
||
import ncf | ||
import requests | ||
import sys | ||
import re | ||
from distutils.version import StrictVersion | ||
from pprint import pprint | ||
|
||
# URL of the rudder_info api | ||
release_info_url = "http://www.rudder-project.org/release-info/rudder/" | ||
|
||
def get_min_versions(): | ||
"Build the dictionnary of minimal Rudder version including compatibility with a given CFEngine version" | ||
min_version = {} | ||
|
||
try: | ||
versions = requests.get(release_info_url + "versions").content.decode('ascii').splitlines() | ||
except requests.exceptions.RequestException as e: | ||
print(e) | ||
sys.exit(1) | ||
|
||
for rudder_version in versions: | ||
try: | ||
cfengine_version = requests.get(release_info_url + "versions/" + rudder_version + "/components/cfengine").content.decode('ascii') | ||
except requests.exceptions.RequestException as e: | ||
print(e) | ||
sys.exit(1) | ||
|
||
if cfengine_version in min_version: | ||
if StrictVersion(rudder_version) >= StrictVersion(min_version[cfengine_version]): | ||
continue | ||
min_version[cfengine_version] = rudder_version | ||
|
||
return min_version | ||
|
||
def rudder_version(min_version, version): | ||
"""Extract minimal Rudder version""" | ||
canonified_version = re.findall(r'>=? ?(\d+\.\d+)', version)[0] | ||
|
||
cfengine_versions = list(min_version.keys()) | ||
cfengine_versions.sort(key=StrictVersion) | ||
|
||
for cfengine_version in cfengine_versions: | ||
if StrictVersion(canonified_version) <= StrictVersion(cfengine_version): | ||
return min_version[cfengine_version] | ||
return False | ||
|
||
|
||
if __name__ == '__main__': | ||
# Get CFEngine <=> Rudder versions | ||
versions = get_min_versions() | ||
|
||
# Get all generic methods | ||
generic_methods = ncf.get_all_generic_methods_metadata()["data"] | ||
|
||
categories = {} | ||
for method_name in sorted(generic_methods.keys()): | ||
category_name = method_name.split('_',1)[0] | ||
generic_method = generic_methods[method_name] | ||
if (category_name in categories): | ||
categories[category_name].append(generic_method) | ||
else: | ||
categories[category_name] = [generic_method] | ||
|
||
content = [] | ||
|
||
for category in sorted(categories.keys()): | ||
content.append("\n*****\n") | ||
content.append('\n### '+category.title()) | ||
|
||
# Generate markdown for each generic method | ||
for generic_method in categories[category]: | ||
# do not display generic methods not compatible with a released Rudder version | ||
rudder_version_needed = rudder_version(versions, generic_method["agent_version"]) | ||
if not rudder_version_needed: | ||
continue | ||
content.append("\n*****\n") | ||
bundle_name = generic_method["bundle_name"] | ||
content.append('\n#### '+ bundle_name) | ||
content.append(generic_method["description"]) | ||
content.append('\nCompatible with nodes running Rudder '+rudder_version_needed+' or higher.') | ||
|
||
if "documentation" in generic_method: | ||
content.append('\n##### Usage') | ||
content.append(generic_method["documentation"]) | ||
content.append('\n##### Parameters') | ||
for parameter in generic_method["parameter"]: | ||
content.append("* **" + parameter['name'] + "**: " + parameter['description']) | ||
content.append('\n##### Classes defined') | ||
content.append('\n```\n') | ||
content.append(generic_method["class_prefix"]+"_${"+generic_method["class_parameter"] + "}_{kept, repaired, not_ok, reached}") | ||
content.append('\n```\n') | ||
|
||
# Write generic_methods.md | ||
result = '\n'.join(content)+"\n" | ||
outfile = open("generic_methods.md","w") | ||
outfile.write(result) | ||
outfile.close() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters