ansible/library/postconf_master

130 lines
3.4 KiB
Python

#!/usr/bin/python
ANSIBLE_METADATA = {
'metadata_version': '1.1',
'status': ['preview'],
'supported_by': 'community'
}
DOCUMENTATION = '''
---
module: postconf
short_description: Module for Postfix postconf
version_added: "2.4"
description:
- "This is module for setup Postfix variables in main.cf with postconf command"
options:
name:
description:
- Variable name.
required: true
value:
description:
- Value of the variable. Required if C(state=present).
required: false
default: null
state:
description:
- Whether to ensure that the variable is present or absent.
required: false
default: present
choices: [ "present", "absent" ]
extends_documentation_fragment:
- system
author:
- Alexander Galato (@alet)
'''
EXAMPLES = '''
# Assign value
- name: Make myhostname be equial "gateway.home"
postconf:
name: myhostname
value: gateway.home
# Remove variable from config file
- name: Remove milter_protocol
postconf:
name: milter_protocol
state: absent
'''
from ansible.module_utils.basic import AnsibleModule
def test_var(module, postconf_path, postconf_arg):
postconf_arg += " -H"
rc, out, err = module.run_command("%s %s %s" % (postconf_path, postconf_arg, module.params["name"]))
if rc != 0:
return False
return True
def query_var(module, postconf_path, postconf_arg):
postconf_arg += " -h"
rc, out, err = module.run_command("%s %s %s" % (postconf_path, postconf_arg, module.params["name"]))
if rc != 0:
return False
if out.rstrip() != module.params["value"]:
return False
return True
def set_value(module, postconf_path, postconf_arg):
if query_var(module, postconf_path, postconf_arg):
return (False, "The variable already set in value %s" % module.params["value"])
rc, out, err = module.run_command("%s %s %s=\"%s\"" % (postconf_path, postconf_arg, module.params["name"], module.params["value"]))
if rc != 0:
module.fail_json(msg="Could not set variable")
return (True, "Variable was set")
def remove_value(module, postconf_path, postconf_arg):
if test_var(module, postconf_path, postconf_arg):
postconf_arg += " -X"
rc, out, err = module.run_command("%s %s %s" % (postconf_path, postconf_arg, module.params["name"]))
if rc == 0:
return (True, "Variable was removed")
return (False, "Variable was not removed")
def main():
module_args = dict(
name=dict(type='str', required=True),
value=dict(type='str', required=False, default=''),
state=dict(type='str', required=False, default='present', choises=["present", "absent"]),
)
module = AnsibleModule(
argument_spec = module_args,
supports_check_mode = True,
)
postconf_path = module.get_bin_path('postconf', True)
p = module.params
changed = False
message = ''
postconf_arg = "-P"
if p["value"] is None and p["state"] == "present" :
module.fail_json(msg="You must specify 'value' to setup variable")
if p["state"] == "present":
changed, msg = set_value(module, postconf_path, postconf_arg)
elif p["state"] == "absent":
changed, msg = remove_value(module, postconf_path, postconf_arg)
module.exit_json(changed=changed, msg=', '.join(message))
if __name__ == '__main__':
main()