130 lines
3.4 KiB
Text
130 lines
3.4 KiB
Text
|
#!/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 = ""
|
||
|
|
||
|
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()
|