X-Git-Url: https://gerrit.akraino.org/r/gitweb?a=blobdiff_plain;f=scripts%2Fjcopy.py;fp=scripts%2Fjcopy.py;h=d041c26bbfb0edf146caf97861c7827f3ad103c0;hb=f3884a45cd16542418f580a433c47f0a09843323;hp=ac8950877c57a87bc3cb8bd2ab9814e598ab2215;hpb=32afa4968f2c93a8c647ff8a29714540db3f1823;p=yaml_builds.git diff --git a/scripts/jcopy.py b/scripts/jcopy.py index ac89508..d041c26 100755 --- a/scripts/jcopy.py +++ b/scripts/jcopy.py @@ -15,78 +15,57 @@ # limitations under the License. # ############################################################################## -# # jcopy.py - Copy a file or files to a target directory, making # substitutions as needed from the values contained in a YAML file. +# compatibile with python and python3 # -# usage: jcopy.py -# -# Note: jcopy.sh is for Python2, jcopy3.sh is for Python3 -# +# usage: jcopy.py import os.path import jinja2 import sys import yaml -def expand_files(target_dir, dir_name, files): - global total - xlen = len(sys.argv[2]) - targdir = target_dir + dir_name[xlen:] - if not os.path.exists(targdir): - os.makedirs(targdir) - env = jinja2.Environment() - env.trim_blocks = True - env.lstrip_blocks = True +def usage(msg=None): + if not msg is None: + print(msg) + print( 'usage: jcopy.py ' ) + sys.exit(1) - for f in files: - if f.endswith(".j2"): - t = f.replace(".j2", ".yaml") - source_path = dir_name + '/' + f - target_path = targdir + '/' + t - if os.path.isfile(source_path): - with open(source_path) as fd: - template = env.from_string(fd.read()) - data = template.render(yaml=yaml) - fd2 = open(target_path,'w') - fd2.write(data) - fd2.write("\n") - fd2.close() - print '{0} -> {1}'.format(source_path, target_path) - total += 1 +if len(sys.argv) != 4: + usage('incorrect number of arguments') -def expand_file(target_file, file): - global total - if not os.path.exists(os.path.dirname(target_file)): - os.makedirs(os.path.dirname(target_file)) - env = jinja2.Environment() - env.trim_blocks = True - env.lstrip_blocks = True - with open(file) as fd: - template = env.from_string(fd.read()) - data = template.render(yaml=yaml) - fd2 = open(target_file,'w') - fd2.write(data) - fd2.write("\n") - fd2.close() - print '{0} -> {1}'.format(file, target_file) - total += 1 +yaml_input=sys.argv[1] +j2in_name=sys.argv[2] +yaml_outdir=os.path.dirname(sys.argv[3]+'/') -if len(sys.argv) != 4: - print 'usage: jcopy.py ' - sys.exit(1) +if not os.path.isfile(yaml_input): + usage('input yaml file {} does not exist'.format(yaml_input)) -with open(sys.argv[1]) as f: - yaml = yaml.safe_load(f) +with open(yaml_input) as f: + siteyaml = yaml.safe_load(f) -total = 0 -if os.path.isfile(sys.argv[2]): - expand_file(sys.argv[3], sys.argv[2]) +if os.path.isfile(j2in_name): + j2_env = jinja2.Environment(loader=jinja2.FileSystemLoader(os.path.dirname(j2in_name)), trim_blocks=True, lstrip_blocks=True, undefined=jinja2.make_logging_undefined() ) + templates=[ os.path.basename(j2in_name) ] else: - os.path.walk(sys.argv[2], expand_files, sys.argv[3]) -print '%d files processed.' % total + j2_env = jinja2.Environment(loader=jinja2.FileSystemLoader(j2in_name), trim_blocks=True, lstrip_blocks=True, undefined=jinja2.make_logging_undefined() ) + templates=j2_env.list_templates(extensions=('j2')) + +# find length of longest template name to pad output +fill=len(max(templates,key=len)) + +for f in templates: + t=j2_env.get_template(name=f) + fname=yaml_outdir+'/'+f.replace('.j2','.yaml') + print( '### {0: <{fill}} ==> {1}'.format(f, fname, fill=fill) ) + if not os.path.exists(os.path.dirname(fname)): + os.makedirs(os.path.dirname(fname)) + t.stream(yaml=siteyaml).dump(fname) + +print('%d files processed.' % len(templates)) sys.exit(0) -# sudo python -m ensurepip --default-pip -# sudo python -m pip install --upgrade pip setuptools wheel -# pip install --user jinja2 PyYAML +# sudo apt-get install python-jinja2 python-yaml +# sudo apt-get install python3-jinja2 python3-yaml +