From 19ed6637b65165089383ff756155cc8031ba59a3 Mon Sep 17 00:00:00 2001 From: Ian Wienand Date: Fri, 15 Jun 2018 13:58:57 +1000 Subject: [PATCH] Add a clouds.yaml checker Load our various cloud configuration files into openstacksdk for a basic sanity check of the configuration. Change-Id: Ieedb3439533f3162d2b5cecca4b7fc07b631019e --- test-requirements.txt | 1 + tools/check_clouds_yaml.py | 58 ++++++++++++++++++++++++++++++++++++++ tox.ini | 6 ++-- 3 files changed, 63 insertions(+), 2 deletions(-) create mode 100644 tools/check_clouds_yaml.py diff --git a/test-requirements.txt b/test-requirements.txt index ea93dc6f83..b63077cebd 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -7,3 +7,4 @@ oslosphinx>=4.7.0 # Apache-2.0 bashate>=0.2 # Apache-2.0 PyYAML>=3.10.0 # MIT ansible-lint +openstacksdk diff --git a/tools/check_clouds_yaml.py b/tools/check_clouds_yaml.py new file mode 100644 index 0000000000..772dbac0a8 --- /dev/null +++ b/tools/check_clouds_yaml.py @@ -0,0 +1,58 @@ +#! /usr/bin/env python + +# Copyright 2018 Red Hat +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import os +import openstack +import re +import sys +import tempfile + +FILES_TO_CHECK = ( + 'modules/openstack_project/templates/nodepool/clouds.yaml.erb', + 'modules/openstack_project/templates/puppetmaster/all-clouds.yaml.erb', + 'modules/openstack_project/templates/puppetmaster/ansible-clouds.yaml.erb' +) + + +def check_files(): + + with tempfile.TemporaryDirectory() as tempdir: + for file in FILES_TO_CHECK: + # These are actually erb files that have templating in + # them, we just rewrite them with a string in there for + # the parser to read, as the <>'s can confuse yaml + # depending on how they're quoted in the file + temp = open(os.path.join(tempdir, + os.path.basename(file)), 'w') + in_file = open(file, 'r') + for line in in_file: + line = re.sub(r'<%.*%>', 'loremipsum', line) + temp.write(line) + temp.close() + + try: + print("Checking parsing of %s" % file) + c = openstack.config.OpenStackConfig(config_files=[temp.name]) + except Exception as e: + print("Error parsing : %s" % file) + print(e) + sys.exit(1) + +def main(): + check_files() + +if __name__ == "__main__": + sys.exit(main()) diff --git a/tox.ini b/tox.ini index 127bee665f..afe01340b9 100644 --- a/tox.ini +++ b/tox.ini @@ -9,12 +9,14 @@ install_command = pip install {opts} {packages} deps = -r{toxinidir}/test-requirements.txt [testenv:linters] +basepython = python3 whitelist_externals = bash commands = flake8 {toxinidir}/tools/run-bashate.sh - python {toxinidir}/tools/sorted_modules_env.py {toxinidir}/modules.env - python {toxinidir}/tools/irc_checks.py + python3 {toxinidir}/tools/sorted_modules_env.py {toxinidir}/modules.env + python3 {toxinidir}/tools/irc_checks.py + python3 {toxinidir}/tools/check_clouds_yaml.py # Ansible Lint Check bash -c "find playbooks -type f -regex '.*.y[a]?ml' -print0 | xargs -t -n1 -0 \ ansible-lint -x ANSIBLE0004 -x ANSIBLE0006 -x ANSIBLE0007 -x ANSIBLE0011 \