gpt4 book ai didi

ansible - 如何在ansible中创建动态变量

转载 作者:行者123 更新时间:2023-12-01 09:54:01 25 4
gpt4 key购买 nike

真实场景,想在AWS中获取一个sqs的resource id,在playbook执行后会返回。因此,在文件中使用此变量来配置应用程序。

将变量从一个剧本持久化到另一个剧本

查看文档,set_fact 和 register 等模块仅适用于该特定主机。使用从一台主机到另一台主机的变量有很多用途。

我能想到的替代方案:

  • 使用命令模块并将变量回显到文件中。后来,使用变量文件使用 vars section 或 include。
  • 设置环境变量然后访问它,但这会很困难。

  • 那么解决方案是什么?

    最佳答案

    如果您正在收集事实,您可以通过正常的 jinja2 + 变量查找访问主机变量:

    例如

    - hosts: serverA.example.org
    gather_facts: True
    ...
    tasks:

    - set_fact:
    taco_tuesday: False

    然后,如果它已经运行,在另一台主机上:
    - hosts: serverB.example.org
    ...
    tasks:

    - debug: var="{{ hostvars['serverA.example.org']['ansible_memtotal_mb'] }}"

    - debug: var="{{ hostvars['serverA.example.org']['taco_tuesday'] }}"

    请记住,如果您有多个 Ansible 控制机器(您从其中调用 ansibleansible-playbook),您应该利用 Ansible 可以存储其 facts/variables in a cache 的事实。 (目前是 Redis 和 json),这样控制机器不太可能有不同的主机变量。有了这个,您可以将您的控制机器设置为使用共享文件夹中的文件(这有其风险——如果两台控制机器同时在同一主机上运行怎么办?),或者从 Redis 设置/获取事实服务器。

    对于我对 Amazon 数据的使用,我更喜欢每次使用标签/元数据查找来获取资源。我写了一个 Ansible plugin这使我可以更轻松地执行此操作,因为我更喜欢考虑主机变量和运行排序(但您的里程可能会有所不同)。

    关于ansible - 如何在ansible中创建动态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32374349/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com