将 set_fact 替换为 ansible 角色中的 vars

将 set_fact 替换为 ansible 角色中的 vars

有这个 ansible 剧本。需要在没有事实的情况下改变它的角色。如何为 role/default/main.yml 中使用的变量重写此代码

谢谢

---

- name: test my group
  hosts: my-group


  tasks:
  - name: test1 fact set
    set_fact:
         var1: 2
         var2: 3
    when: hostname is test1 

  - name: test2 fact set
    set_fact:
         var1: 3
         var2: 3
    when: hostname is test2

  - debug: var="var1 + var2"


       

       

答案1

如果您想设置特定于主机的变量,您可以将它们设置在host_vars与您的剧本或清单相邻的目录中以主机命名的文件中。例如,给定这个布局:

.
├── host_vars
│   ├── test1.yaml
│   └── test2.yaml
└── roles
    └── myrole
        ├── defaults
        │   └── main.yaml
        └── tasks
            └── main.yaml

然后定义的变量host_vars/test1.yaml将会被设置为 hosttest1等。

否则,设置特定于主机的变量的唯一方法是使用类似set_factinclude_vars任务之类的东西以及when您在问题中所示的条件。


如果您确实需要在角色defaults/main.yaml文件中执行此操作,您可以执行以下操作:

var1: '{% if inventory_hostname == "test1" %}2{% else %}3{% endif %}'

但如果变量数量或主机数量很大,这将很难阅读。

相关内容