我想只在拥有某个机器主机名时才使用ansible为文件创建符号链接。
我知道inventory_hostname
会给我一个主机名,但是我可以这样做:
when: inventory_hostname in group['machines']
所以我可以在该组中的所有计算机上运行它吗?
然后,我想根据机器的名称进行符号链接。所以:
file:
src: {{ ansible_hostname }}.png
dest: anything.png
答案 0 :(得分:4)
你根本不需要when: inventory_hostname in group['machines']
条件。
您只需在hosts: machines
的游戏中运行此任务,您就会为machines
群组的所有主机创建符号链接。
<强>更新强>
如果你仍然想要它,并将游戏手册朝big_group
运行,但只有当主持人是small_group
的一部分时才采取行动,这是一个可以做到的游戏:
主持文件:
[big_group]
greenhat
localhost
[small_group]
localhost
剧本:
---
- hosts: big_group
# connection: local
gather_facts: false
vars:
tasks:
- name: print if machine is eligible for symbolic
debug:
msg: "machine: {{ inventory_hostname }} is eligible for symbolic link!"
when: inventory_hostname in groups['small_group']
结果:
PLAY [big_group] ****************************************************************************************************************************************************************************************************
TASK [print if machine is eligible for symbolic] ********************************************************************************************************************************************************************
skipping: [greenhat]
ok: [localhost] => {
"msg": "machine: localhost is eligible for symbolic link!"
}
PLAY RECAP **********************************************************************************************************************************************************************************************************
greenhat : ok=0 changed=0 unreachable=0 failed=0
localhost : ok=1 changed=0 unreachable=0 failed=0
希望有所帮助
答案 1 :(得分:0)
有时候,您必须使用其他小组来收集他们的事实。但是,您的任务将仅针对一组。
到时候,您可以简单地使用"mygroup" in group_names
group_names
是一个魔术变量,它将由当前主机的组自动填充。
例如:
- hosts: mygroup,othergroup
tasks:
- name: x
when: 'mygroup' in group_names