有这个 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_fact
或include_vars
任务之类的东西以及when
您在问题中所示的条件。
如果您确实需要在角色defaults/main.yaml
文件中执行此操作,您可以执行以下操作:
var1: '{% if inventory_hostname == "test1" %}2{% else %}3{% endif %}'
但如果变量数量或主机数量很大,这将很难阅读。