Ansible 添加主机-除以操作系统

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

我想创建一个包含整个清单文件的playbook,并将服务器分为两组:Windows和Linux(添加主机,仅在inv的第一台服务器上运行)

我尝试了以下代码:

   - 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设置进行了检查,并且该变量应该存在。您可以提供完整的错误消息和您尝试过的剧本吗?