|
@@ -3,42 +3,64 @@
|
|
|
Generate the openshift-ansible/roles/lib_openshift_cli/library/ modules.
|
|
|
'''
|
|
|
|
|
|
+import argparse
|
|
|
import os
|
|
|
+import six
|
|
|
import yaml
|
|
|
|
|
|
-# pylint: disable=anomalous-backslash-in-string
|
|
|
-GEN_STR = "#!/usr/bin/env python\n" + \
|
|
|
- "# pylint: disable=missing-docstring\n" + \
|
|
|
- "# ___ ___ _ _ ___ ___ _ _____ ___ ___\n" + \
|
|
|
- "# / __| __| \| | __| _ \ /_\_ _| __| \\\n" + \
|
|
|
- "# | (_ | _|| .` | _|| / / _ \| | | _|| |) |\n" + \
|
|
|
- "# \___|___|_|\_|___|_|_\/_/_\_\_|_|___|___/_ _____\n" + \
|
|
|
- "# | \ / _ \ | \| |/ _ \_ _| | __| \_ _|_ _|\n" + \
|
|
|
- "# | |) | (_) | | .` | (_) || | | _|| |) | | | |\n" + \
|
|
|
- "# |___/ \___/ |_|\_|\___/ |_| |___|___/___| |_|\n"
|
|
|
-
|
|
|
OPENSHIFT_ANSIBLE_PATH = os.path.dirname(os.path.realpath(__file__))
|
|
|
-OPENSHIFT_ANSIBLE_SOURCES_PATH = os.path.join(OPENSHIFT_ANSIBLE_PATH, 'generate_sources.yml') # noqa: E501
|
|
|
+OPENSHIFT_ANSIBLE_SOURCES_PATH = os.path.join(OPENSHIFT_ANSIBLE_PATH, 'sources.yml') # noqa: E501
|
|
|
+
|
|
|
+
|
|
|
+class GenerateAnsibleException(Exception):
|
|
|
+ '''General Exception for generate function'''
|
|
|
+ pass
|
|
|
+
|
|
|
+
|
|
|
+def parse_args():
|
|
|
+ '''parse arguments to generate'''
|
|
|
+ parser = argparse.ArgumentParser(description="Generate ansible modules.")
|
|
|
+ parser.add_argument('--verify', action='store_true', default=False,
|
|
|
+ help='Verify library code matches the generated code.')
|
|
|
+
|
|
|
+ return parser.parse_args()
|
|
|
+
|
|
|
+
|
|
|
+def generate(parts):
|
|
|
+ '''generate the source code for the ansible modules'''
|
|
|
+
|
|
|
+ data = six.StringIO()
|
|
|
+ for fpart in parts:
|
|
|
+ # first line is pylint disable so skip it
|
|
|
+ with open(os.path.join(OPENSHIFT_ANSIBLE_PATH, fpart)) as pfd:
|
|
|
+ for idx, line in enumerate(pfd):
|
|
|
+ if idx in [0, 1] and 'flake8: noqa' in line or 'pylint: skip-file' in line: # noqa: E501
|
|
|
+ continue
|
|
|
+
|
|
|
+ data.write(line)
|
|
|
+
|
|
|
+ return data
|
|
|
|
|
|
|
|
|
def main():
|
|
|
''' combine the necessary files to create the ansible module '''
|
|
|
+ args = parse_args()
|
|
|
|
|
|
library = os.path.join(OPENSHIFT_ANSIBLE_PATH, '..', 'library/')
|
|
|
sources = yaml.load(open(OPENSHIFT_ANSIBLE_SOURCES_PATH).read())
|
|
|
+
|
|
|
for fname, parts in sources.items():
|
|
|
- with open(os.path.join(library, fname), 'w') as afd:
|
|
|
+ data = generate(parts)
|
|
|
+ fname = os.path.join(library, fname)
|
|
|
+ if args.verify:
|
|
|
+ if not open(fname).read() == data.getvalue():
|
|
|
+ raise GenerateAnsibleException('Generated content does not match for %s' % fname)
|
|
|
+
|
|
|
+ continue
|
|
|
+
|
|
|
+ with open(fname, 'w') as afd:
|
|
|
afd.seek(0)
|
|
|
- afd.write(GEN_STR)
|
|
|
- for fpart in parts:
|
|
|
- with open(os.path.join(OPENSHIFT_ANSIBLE_PATH, fpart)) as pfd:
|
|
|
- # first line is pylint disable so skip it
|
|
|
- for idx, line in enumerate(pfd):
|
|
|
- if idx in [0, 1] and 'flake8: noqa' in line \
|
|
|
- or 'pylint: skip-file' in line:
|
|
|
- continue
|
|
|
-
|
|
|
- afd.write(line)
|
|
|
+ afd.write(data.getvalue())
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|