use ansible_facts in module code

后端 未结 1 1906
梦毁少年i
梦毁少年i 2020-12-21 17:03

I am trying to create my own ansible module (which will update cmdb) and i am looking how to use ansible_facts in module code ?

example of my module script is :

相关标签:
1条回答
  • 2020-12-21 17:14

    I doubt this is possible from inside module itself, because they are executed in the context of remote machine with predefined parameters.

    But you can wrap your module with action plugin (that is executed in local context), collect required data from available variables and pass them as parameters to your module.

    Like this (./action_plugins/a_test.py):

    from ansible.plugins.action import ActionBase
    
    class ActionModule(ActionBase):
    
        def run(self, tmp=None, task_vars=None):
    
            result = super(ActionModule, self).run(tmp, task_vars)
    
            module_args = self._task.args.copy()
            module_args['mem_size'] = self._templar._available_variables.get('ansible_memtotal_mb')
    
            return self._execute_module(module_args=module_args, task_vars=task_vars, tmp=tmp)
    

    In this case if your module expect mem_size parameter it will be set to ansible_memtotal_mb's value with action plugin.

    Module example (./library/a_test.py):

    #!/usr/bin/python
    
    def main():
        module = AnsibleModule(
            argument_spec = dict(
                mem_size=dict(required=False, default=None),
            ),
            supports_check_mode = False
        )
    
        module.exit_json(changed=False, mem_size=module.params['mem_size'])
    
    from ansible.module_utils.basic import *
    from ansible.module_utils.urls import *
    
    main()
    

    Test playbook:

    ---
    - hosts: all
      tasks:
        - a_test:
    
    0 讨论(0)
提交回复
热议问题