如何在add_host

时间:2018-08-31 11:40:23

标签: ansible

我想动态创建一个内存中的清单,它是对标准清单的过滤器,该清单仅包括安装了特定服务的主机。过滤后的广告资源将在后续播放中使用。

因此,我确定了安装服务的主机的IP地址。

- name: find where the service is installed
  win_service:
    name: "{{ service }}"
  register: service_info

这将返回一个布尔值“ exists”。以此值为条件,尝试添加运行服务的主机。

- name: create filtered in memory inventory
  add_host:
    name: "{{ ansible_host }}"
  when: service_info.exists

add_host模块绕过播放主机循环,并且仅对播放中的所有主机运行一次,因此,只有当add_host所针对的主机是已安装服务的主机时,此方法才起作用。

以下是试图强制add_host在清单中的主机之间进行迭代的尝试,但是看来hostvars和service_info.exists没有传递到add_host,因此条件“ when”检查始终返回false。 >

- name: create filtered in memory inventory
  add_host:
    name: "{{ ansible_host }}"
  when: service_info.exists
  with_items: "{{ ansible_play_batch }}"

有没有一种方法可以将带有hostvars的主机作为迭代器传递给add_host?

1 个答案:

答案 0 :(得分:0)

我建议在add_host之前创建一个任务,以便在executor上创建一个临时文件,其中包含符合条件的服务器列表,然后在该文件中循环进入模块add_host

我之前问过的来自Improving use of add_host in ansible的例子

---
- hosts: servers
  tasks:

   - name: find where the service is installed
     win_service:
       name: "{{ service }}"
     register: service_info

   - name: write server name in file on control node
     lineinfile:
       path: /tmp/servers_foo.txt
       state: present
       line: "{{ inventory_hostname }}"
     delegate_to: 127.0.0.1
     when: service_info.exists

   - name: assign target to group
     add_host:
       name: "{{ item }}"
       groups:
         - foo
     with_lines: cat /tmp/servers_foo.txt
     delegate_to: 127.0.0.1