使用寄存器变量存储多主机播放的值

Nam*_*ora 6 ansible

我有一个包含两个剧本的 ansible 剧本,第一个剧本的输出将由第二个剧本使用。所以我使用寄存器变量来存储输出。问题是我的游戏打算在多台主机上运行,​​而不是在单台主机上运行,​​并且寄存器的输出每次都被覆盖,而且我没有最后 (n-1) 次执行的值。

我的剧本是这样的:

- name: Perform task 
  hosts:  db_server
  connection: local
  gather_facts: no
  vars:
    - method: "{{ method }}"

  roles:
    - {role: run_custom_module, tags: ["maintenance"]}


- name: Second task based on output of first
  hosts:  db_server
  connection: local
  gather_facts: no
  vars:
    - method: "{{ method }}"

  roles:
    - {role: run_custom_module, when: result=="some_string"}
Run Code Online (Sandbox Code Playgroud)

角色 run_custom_module 如下所示:

- name: Executing the custom module
  run_custom_module:
      task: "Run custom py module"
      var: "{{ method }}"
  register: result
Run Code Online (Sandbox Code Playgroud)

库存文件如下所示:

[db_server]
1.1.1.1
2.2.2.2
3.3.3.3
Run Code Online (Sandbox Code Playgroud)

在 with_items 的情况下,寄存器变量将输出存储在一个名为results的列表中,请参阅此处。基于类似的理由,如何将多主机播放的输出存储在寄存器变量中,以便它可以用于同一剧本的第二次播放?

Eri*_*ire 6

注册变量是事实。您可以使用 访问其他主机上的事实hostvars

举例来说,你可以访问的result主机注册变量1.1.1.1hostvars['1.1.1.1'].result

您可以使用 列出组中的所有主机groups

例如,您可以列出db_server组中的所有主机groups['db_server']

总结一下,你可以尝试这样的事情:

---
- hosts: db_server
  tasks:
    - ping:
      register: result

    - debug: var=hostvars[item].result
      with_items: "{{ groups['db_server'] }}"
Run Code Online (Sandbox Code Playgroud)