【问题标题】:Ansible: get all variables in own module?Ansible:获取自己模块中的所有变量?
【发布时间】:2018-10-26 21:52:27
【问题描述】:

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

- 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 字典中替换。如何修复它以将实际变量提供给模块?

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

Ansible 2.7.1

【问题讨论】:

    标签: python ansible


    【解决方案1】:

    我可以在没有显式操作的情况下在此模块中获取主机变量吗?

    没有。您需要显式传入您希望模块可以访问的任何变量。

    如何通过注册导出它们?

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

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

    ...你会在你的注册变量中找到一个my_data 键。

    Jinja {{ variables }} 不会在 hostvars 字典中被替换。如何修复它以将实际变量提供给模块?

    我认为您无法在自己的模块中做到这一点。在您的问题中提供更完整的示例,准确显示您正在尝试做的事情,我们或许可以提出解决问题的替代方法。

    【讨论】:

    • 谢谢!实际上我必须使用ansible_facts 子字典来输出变量。我也更新了我的问题,你能帮忙吗?
    • 谢谢。 hostvars: '{{ hostvars | to_json }}' 帮我评估了所有变量
    猜你喜欢
    • 2022-11-07
    • 1970-01-01
    • 2015-05-15
    • 1970-01-01
    • 2014-12-01
    • 1970-01-01
    • 2018-01-18
    • 2018-04-23
    • 2020-01-06
    相关资源
    最近更新 更多