#!/usr/bin/python ANSIBLE_METADATA = { 'metadata_version': '1.1', 'status': ['preview'], 'supported_by': 'community' } DOCUMENTATION = ''' --- module: eole_config short_description: EOLE configuration values management version_added: "2.4" description: - This module provides facilities to read/update EOLE configuration values. options: name: description: - The name of the configuration variable, as seen in "CreoleGet --list" required: true value: description: - If set, update the configuration variable with this value required: false extends_documentation_fragment: - azure author: - William Petit ''' EXAMPLES = ''' # Pass in a message - name: Test with a message my_new_test_module: name: hello world # pass in a message and have changed true - name: Test with a message and changed output my_new_test_module: name: hello world new: true # fail the module - name: Test failure of the module my_new_test_module: name: fail me ''' RETURN = ''' name: description: The output message that the sample module generates ''' from ansible.module_utils.basic import AnsibleModule from creole.loader import creole_loader, config_save_values import json def run_module(): # define available arguments/parameters a user can pass to the module module_args = dict( name=dict(type='str', required=True), value=dict(type='json', required=False), load_extra=dict(type='bool', required=False, default=True), check_mandatory=dict(type='bool', required=False, default=False), reload_config=dict(type='bool', required=False, default=True) ) result = dict( changed=False, path='', name='' ) module = AnsibleModule( argument_spec=module_args, supports_check_mode=True ) update_value = not module.params['value'] is None try: c = creole_loader(rw=update_value, load_extra=module.params['load_extra']) path = c.creole.find_first(byname=module.params['name'], type_='path') value = getattr(c, path) except Exception as ex: module.fail_json(msg=ex.message, **result) result['name'] = module.params['name'] try: result['value'] = json.loads(json.dumps(value)) except TypeError: result['value'] = value result['path'] = path try: if update_value: new_value = module.params['value'] if isinstance(new_value, str): new_value = unicode(new_value) new_value = json.loads(new_value) if value != new_value: setattr(c, path, new_value) value = getattr(c, path) if not module.check_mode: config_save_values( c, 'creole', check_mandatory=module.params['check_mandatory'], reload_config=module.params['reload_config'] ) result['changed'] = True except Exception as ex: module.fail_json(msg=ex.message, **result) module.exit_json(**result) def main(): run_module() if __name__ == '__main__': main()