【问题标题】:Passing common set_facts vars to multiple playbooks将常见的 set_facts 变量传递给多个剧本
【发布时间】:2020-10-19 17:18:25
【问题描述】:

我有多个 Ansible roles,每个都有自己的 playbook,如下面的结构所示​​:

roles/
    |-- abc/
     -- def/
     -- hij/
     -- someother/
common.yml
abc.yml
def.yml
hij.yml

但是,所有 playbook 都有 set_facts 模块,该模块在每个 playbook 中设置相同的变量。即:因此,如果 abc.yml 剧本具有以下内容,则所有其他剧本共享完全相同。

- hosts: all
  tasks:
        - set_fact:
                hostname: "user"
                randomvar: "random"

问题是,如果set_facts 中的一个变量需要更新,这意味着它需要在每个剧本中完成。有没有办法创建单个剧本并将set_facts 变量动态传递给其他人?

【问题讨论】:

    标签: ansible


    【解决方案1】:

    使用 set_fact 您可以在 playbook 运行时设置一个变量。因此,您可以使用文件group_vars\all.yml 来设置清单中所有主机的变量,而不是使用 set_fact。 all 是所有主机的默认组。

    这个文件的内容可能是:

    hostname: user
    randomvar: random
    

    从现在开始,您的所有剧本都可以使用这些变量。而且你只有一个地方可以改变它们。

    【讨论】:

    • 那是通过在roles 文件夹的同一级别创建一个名为group_vars/all.yml 的附加文件夹?然后我是否必须在每个剧本中拨打all.yml 或者他们会自动接听?感谢您的回复顺便说一句
    • group_vars 目录在 ansible 的 base_directory 中。见ansible-tips-and-tricks.readthedocs.io/en/latest/ansible/…。您不需要调用此文件。另一种方法是库存文件[all:vars] 中的一个部分。在该部分下,您也可以为此默认组定义变量。
    猜你喜欢
    • 1970-01-01
    • 2018-10-08
    • 2018-09-21
    • 2022-06-15
    • 1970-01-01
    • 2020-10-03
    • 2012-07-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多