894d1e125e
This patch also removes all the python shebangs for Ansible components. Change-Id: I6883f718aa3bbc1297a59bdece28ab57993fa459 Signed-off-by: Gael Chamoulaud (Strider) <gchamoul@redhat.com>
88 lines
2.7 KiB
Python
88 lines
2.7 KiB
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 re
|
|
|
|
from ansible.module_utils.basic import AnsibleModule
|
|
from yaml import safe_load as yaml_safe_load
|
|
|
|
DOCUMENTATION = '''
|
|
---
|
|
module: haproxy_conf
|
|
short_description: Gather the HAProxy config
|
|
description:
|
|
- Gather the HAProxy config
|
|
options:
|
|
path:
|
|
required: true
|
|
description:
|
|
- file path to the config file
|
|
type: str
|
|
author: "Tomas Sedovic"
|
|
'''
|
|
|
|
EXAMPLES = '''
|
|
- hosts: webservers
|
|
tasks:
|
|
- name: Gather the HAProxy config
|
|
haproxy_conf: path=/etc/haproxy/haproxy.cfg
|
|
'''
|
|
|
|
|
|
# ConfigParser chokes on both mariadb and haproxy files. Luckily They have
|
|
# a syntax approaching ini config file so they are relatively easy to parse.
|
|
# This generic ini style config parser is not perfect -- it can ignore some
|
|
# valid options -- but good enough for our use case.
|
|
def generic_ini_style_conf_parser(file_path, section_regex, option_regex):
|
|
config = {}
|
|
current_section = None
|
|
with open(file_path) as config_file:
|
|
for line in config_file:
|
|
match_section = re.match(section_regex, line)
|
|
if match_section:
|
|
current_section = match_section.group(1)
|
|
config[current_section] = {}
|
|
match_option = re.match(option_regex, line)
|
|
if match_option and current_section:
|
|
option = re.sub(r'\s+', ' ', match_option.group(1))
|
|
config[current_section][option] = match_option.group(2)
|
|
return config
|
|
|
|
|
|
def parse_haproxy_conf(file_path):
|
|
section_regex = r'^(\w+)'
|
|
option_regex = r'^(?:\s+)(\w+(?:\s+\w+)*?)\s+([\w/]*)$'
|
|
return generic_ini_style_conf_parser(file_path, section_regex,
|
|
option_regex)
|
|
|
|
|
|
def main():
|
|
module = AnsibleModule(
|
|
argument_spec=yaml_safe_load(DOCUMENTATION)['options']
|
|
)
|
|
|
|
haproxy_conf_path = module.params.get('path')
|
|
|
|
try:
|
|
config = parse_haproxy_conf(haproxy_conf_path)
|
|
except IOError:
|
|
module.fail_json(msg="Could not open the haproxy conf file at: '%s'" %
|
|
haproxy_conf_path)
|
|
|
|
module.exit_json(changed=False, ansible_facts={u'haproxy_conf': config})
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|