现在我以这种方式使用自己的模块:
- 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
答案 0 :(得分:3)
我可以在没有显式操作的情况下在此模块内获得hostvars吗?
不。您需要显式传递您希望模块访问的所有变量。
如何通过注册将其导出?
通过exit_json
方法返回的所有内容都将在您的注册变量中可用。也就是说,如果您有...
result = {'changed': False, 'my_data': 'test'}
module.exit_json(**result)
...您将在注册变量中找到一个my_data
键。
Jinja {{变量}}不会在hostvars字典中替换。如何修复它以将实际的var赋予模块?
我认为您将无法在您的模块中做到这一点。在您的问题中有一个更完整的示例,确切地显示了您要执行的操作,我们也许可以提出其他解决问题的方法。