Ansible 添加主机-除以操作系统
我想创建一个包含整个清单文件的playbook,并将服务器分为两组:Windows和Linux(添加主机,仅在inv的第一台服务器上运行) 我尝试了以下代码:Ansible 添加主机-除以操作系统,ansible,jinja2,ansible-inventory,ansible-facts,Ansible,Jinja2,Ansible Inventory,Ansible Facts,我想创建一个包含整个清单文件的playbook,并将服务器分为两组:Windows和Linux(添加主机,仅在inv的第一台服务器上运行) 我尝试了以下代码: - name: Linux Group add_host: name: "{{ item }}" group: LinuxGroup when: hostvars[" {{ item }} "]['ansible_system'] == 'Linux' with_item
- name: Linux Group
add_host:
name: "{{ item }}"
group: LinuxGroup
when: hostvars[" {{ item }} "]['ansible_system'] == 'Linux'
with_items: "{{ ansible_play_hosts_all }} "
- 此代码假设创建linux组 我尝试了其他条件,但没有成功。我想请你帮忙
tasks:
- name: Create linux group
add_host:
name: "{{ item }}"
group: LinuxGroup
when: hostvars[item].ansible_system == 'Linux'
with_items: "{{ ansible_play_hosts_all }} "
ignore_errors: yes
- name: ping to Linux
ping:
with_items: LinuxGroup
当我运行代码时,windows服务器在“创建linux组”任务中被跳过,但我使用模块调试打印到组的项目,其中有windows服务器。事实
ansible\u系统
是主机下的一个键,而不是键列表。此外,条件语句不应包含jinja2模板分隔符,例如{{}
或{%}
,请使用hostvars[item]
而不是hostvars[{{{item}}]
确保collect\u 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 }}"
我使用了您之前建议的方式,但我收到了以下消息:“条件检查'hostvars[item].ansible_system=='Linux eventhoght我使用moudle设置进行了检查,并且该变量应该存在。您可以提供完整的错误消息和您尝试过的剧本吗?