根据组中的计算机名运行ansible任务

时间:2018-06-04 20:35:16

标签: ansible

我想只在拥有某个机器主机名时才使用ansible为文件创建符号链接。 我知道inventory_hostname会给我一个主机名,但是我可以这样做: when: inventory_hostname in group['machines']所以我可以在该组中的所有计算机上运行它吗? 然后,我想根据机器的名称进行符号链接。所以:

file:
    src: {{ ansible_hostname }}.png
    dest: anything.png

2 个答案:

答案 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