addhost-除以os

问题描述 投票:1回答:1

我想创建用于整个清单文件的剧本,并将服务器分为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 }} "
  • 此代码假定创建linux组而我尝试了其他条件,但何时非成功。我想得到您的帮助。

PS:

我将代码更改为此:

tasks:

-名称:创建linux组add_host:名称:“ {{item}}”组:LinuxGroup时间:hostvars [item] .ansible_system =='Linux'with_items:“ {{ansible_play_hosts_all}}”ignore_errors:是

  • 名称:ping到Linuxping:with_items:LinuxGroup

并且当我运行代码时,Windows服务器在“创建Linux组”任务中被跳过,但是我使用模块调试打印到组的项目,并且有Windows服务器。

ansible jinja2 ansible-inventory ansible-facts
1个回答
1
投票

事实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 }}"
© www.soinside.com 2019 - 2024. All rights reserved.