Ansible:在自己的模块中获取所有变量吗?

时间:2018-10-26 11:50:39

标签: python ansible

现在我以这种方式使用自己的模块:

- get_my_data:
    hostvars: '{{ hostvars }}'

它对所有主机使用配置并收集一些数据。
我可以在没有显式操作的情况下进入hostvars这个模块吗?

module = AnsibleModule(
    argument_spec=dict(
        hostvars=dict(type='dict', required=True),
    ),
    supports_check_mode=True
)
hostvars = module.params['hostvars']
# some exports
result = {'changed': False, 'ansible_facts': {'my_data': 'test'}}
module.exit_json(**result)

我也使用ansible_facts字典导出新变量。如何通过register导出它们?

更新: Jinja {{ variables }}不会在hostvars字典中替换。如何修复它以将实际的var赋予模块?

更新2:
hostvars: '{{ hostvars | to_json }}'帮助我评估了所有变量

Ansible 2.7.1

1 个答案:

答案 0 :(得分:3)

  

我可以在没有显式操作的情况下在此模块内获得hostvars吗?

不。您需要显式传递您希望模块访问的所有变量。

  

如何通过注册将其导出?

通过exit_json方法返回的所有内容都将在您的注册变量中可用。也就是说,如果您有...

result = {'changed': False, 'my_data': 'test'}
module.exit_json(**result)

...您将在注册变量中找到一个my_data键。

  

Jinja {{变量}}不会在hostvars字典中替换。如何修复它以将实际的var赋予模块?

我认为您将无法在您的模块中做到这一点。在您的问题中有一个更完整的示例,确切地显示了您要执行的操作,我们也许可以提出其他解决问题的方法。