From 13be4e4093f1a58eb907a9bf024bbb9336674291 Mon Sep 17 00:00:00 2001 From: Alexandru Avadanii Date: Fri, 22 Sep 2017 00:44:56 +0200 Subject: PDF: Run YAML Linter on pod descriptors / output We have 2 rounds of YAML files: - PDF (input file(s) for the installer adapter templates); - parsed PDF (output file(s) after installer adapter template parse); Run yamllint on all these files, and summarize the output in a tuple form: (valid YAML output, successful parse, installer templates cnt). This helps catching various issues: - formatting issues in installer adapter templates; - missing values in PDFs (e.g. lf-pod4 IPMI credentials); etc. For now, yamllint failures for output files are non-fatal. Sample output: | PDF Verify Matrix | YAML Lint | ... | fuel | joid | | pharos/config/pod1.yaml | OK | ... | 1/1/1 | 1/1/1 | | intel/pod18.yaml | OK | ... | 1/1/1 | 1/1/1 | | arm/pod5.yaml | OK | ... | 1/1/1 | 0/1/1 | | lf/pod4.yaml | OK | ... | 0/1/1 | 0/1/1 | Change-Id: Id598da89fab0e7e41641649833471194e8d248a9 Signed-off-by: Alexandru Avadanii (cherry picked from commit 791cb3f2d864c1f8b9473f9ba4348c4435aa813b) --- check-jinja2.sh | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/check-jinja2.sh b/check-jinja2.sh index 7d74197..9bc57c7 100755 --- a/check-jinja2.sh +++ b/check-jinja2.sh @@ -5,37 +5,45 @@ set +o errexit git submodule update --init --remote 2>/dev/null GEN_CFG='./pharos/config/utils/generate_config.py' INSTALLER_ADAPTERS='./pharos/config/installers/*' +TMPF='/tmp/out.yml' # should be outside Jenkins WS to prevent data leakage RC=0 # Build a table header, using ';' as column sep -SUMMARY='PDF/Installer;' +SUMMARY='PDF Verify Matrix;YAML Lint;' for adapter in ${INSTALLER_ADAPTERS}; do SUMMARY+="$(basename "${adapter}");" done # Iterate all PDFs, check with each installer adapter, log results while IFS= read -r lab_config; do - SUMMARY+="\n${lab_config#labs/};" + valid_yaml='OK' + echo -e "\n\nyamllint -s ${lab_config}" + if ! yamllint -s "${lab_config}"; then valid_yaml='FAIL'; fi + SUMMARY+="\n${lab_config#labs/};${valid_yaml};" for adapter in ${INSTALLER_ADAPTERS}; do pdf_inst=0 pdf_inst_pass=0 + pdf_yaml_pass=0 while IFS= read -r jinja_template; do echo -e "\n${GEN_CFG} -y ${lab_config} -j ${jinja_template}" if "${GEN_CFG}" -y "${lab_config}" \ - -j "${jinja_template}" > /dev/null; then + -j "${jinja_template}" > "${TMPF}"; then echo 'Result: PASS' ((pdf_inst_pass+=1)) + echo -e "\nyamllint -s ${jinja_template%.j2}" + if yamllint -s "${TMPF}"; then ((pdf_yaml_pass+=1)); fi else echo 'Result: FAIL' RC=1 fi ((pdf_inst+=1)) done < <(find "${adapter}" -name '*.j2') - SUMMARY+="${pdf_inst_pass}/${pdf_inst};" + SUMMARY+="${pdf_yaml_pass}/${pdf_inst_pass}/${pdf_inst};" done done < <(find 'pharos/config' 'labs' -name 'pod*.yaml') -echo -e '\n' +rm -f "${TMPF}" +echo -e '\n\nNOTE: tuple fmt: (valid YAML output/sucessful parse/templates).\n' echo -e "${SUMMARY}" | sed -e 's/^/;/g' -e 's/;/;| /g' | column -t -s ';' cat <