mirror of https://dev.ccchb.de/ccchb/ansible.git
				
				
				
			
		
			
	
	
		
			130 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
		
		
			
		
	
	
			130 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| 
								 | 
							
								#!/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()
							 |