我想创建用于整个清单文件的剧本,并将服务器分为2组:Windows和Linux(添加主机仅在inv的第一台服务器上运行)
我尝试过此代码:
- name: Linux Group
add_host:
name: "{{ item }}"
group: LinuxGroup
when: hostvars[" {{ item }} "]['ansible_system'] == 'Linux'
with_items: "{{ ansible_play_hosts_all }} "
PS:
我将代码更改为此:
tasks:
-名称:创建linux组add_host:名称:“ {{item}}”组:LinuxGroup时间:hostvars [item] .ansible_system =='Linux'with_items:“ {{ansible_play_hosts_all}}”ignore_errors:是
并且当我运行代码时,Windows服务器在“创建Linux组”任务中被跳过,但是我使用模块调试打印到组的项目,并且有Windows服务器。
事实ansible_system
是主机下的密钥,而不是密钥列表。另外,条件语句不应包含jinja2模板分隔符,例如{{ }}
或{% %}
,请使用hostvars[item]
而不是hostvars[ "{{ item }}" ]
。
确保gather_facts
设置为true
。
请注意,add_host
模块不会更新清单文件,而是更新内存中清单。我包含了一个debug
任务,用于从ansible的内存清单中打印组。
gather_facts: true
tasks:
- name: Linux Group
add_host:
name: "{{ item }}"
group: LinuxGroup
when: hostvars[item].ansible_system == 'Linux'
with_items: "{{ ansible_play_hosts_all }}"
- debug: msg="{{ groups }}"