我有一个包含两个剧本的 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的列表中,请参阅此处。基于类似的理由,如何将多主机播放的输出存储在寄存器变量中,以便它可以用于同一剧本的第二次播放?
注册变量是事实。您可以使用 访问其他主机上的事实hostvars。
举例来说,你可以访问的result主机注册变量1.1.1.1用hostvars['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)
| 归档时间: |
|
| 查看次数: |
6883 次 |
| 最近记录: |