tripleo-validations/validations/library/neutron_sanity_check.py

101 lines
2.8 KiB
Python

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 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 subprocess
from ansible.module_utils.basic import AnsibleModule
from os import path
DOCUMENTATION = '''
---
module: neutron_sanity_check
short_description: Run neutron-sanity-check on a number of config files
description:
- Run neutron-sanity-check on a number of config files
options:
configs:
required: true
description:
- The config file paths
type: list
author: "Tomas Sedovic"
'''
EXAMPLES = '''
- hosts: webservers
vars:
configs:
- /etc/neutron/neutron.conf
- /usr/share/neutron/neutron-dist.conf
- /etc/neutron/metadata_agent.ini
- /etc/neutron/metering_agent.ini
- /etc/neutron/dhcp_agent.ini
tasks:
- name: Run neutron-sanity-check
become: true
neutron_sanity_check: configs={{ configs }}
'''
def main():
module = AnsibleModule(argument_spec=dict(
configs=dict(required=True, type='list'),
))
# Input configurations as a list
i_config = module.params.get('configs')
# Arguments as a list contianing only existing files/dirs
o_config = []
# Create arguments
o_config.append('neutron-sanity-check')
o_config.append("--nodnsmasq_version")
for c in i_config:
if path.isfile(c):
o_config.append('--config-file')
o_config.append(c)
elif path.isdir(c):
o_config.append('--config-dir')
o_config.append(c)
# Execute neutron-sanity-check, fetch stdout, stderr
# neutron-sanity-check --nodnsmasq_version $ARGS
process = subprocess.Popen(o_config, stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
stdout, stderr = process.communicate()
# Filter warnings and errors - neutron-sanity-checks puts it all to stderr
output = stderr.split('\n')
o_warnings = []
o_errors = ""
for line in output:
if 'WARNING' in line:
o_warnings.append(line.split('WARNING')[1])
elif 'ERROR' in line:
o_errors += line.split('ERROR')[1] + "\n"
# Based on stdout and stderr, exit module
if o_errors:
module.fail_json(msg=o_errors, warnings=o_warnings, changed=True)
else:
module.exit_json(warnings=o_warnings, changed=True)
if __name__ == '__main__':
main()