我有什么方法可以从剧本任务中传递/更新组变量?我需要根据来自一个主机的某些命令的结果定义变量,以将它们用于其他角色和任务。我知道set_fact但它将变量存储为局部变量,因此我需要地址特定主机才能获取它,但该主机的主机名/地址可能会有所不同。谷歌搜索和阅读 docs.ansible.com 仍然无济于事。
UPD:有 2 个不同的角色一个接一个地扮演任务,我需要在播放之间传递变量。
一个选项是使用 ansible 模块 lineinfile、blockinfile、template 和 ini_file 来更新组变量。
例如下面的播放
- hosts: test_jails
gather_facts: false
vars:
my_groupvar_file: "{{ inventory_dir }}/group_vars/test_jails.yml"
tasks:
- debug:
var: my_last_run
- block:
- command: date "+%F %T"
register: result
- lineinfile:
path: "{{ my_groupvar_file }}"
regexp: "^my_last_run: "
line: "my_last_run: {{ result.stdout }}"
backup: yes
delegate_to: localhost
run_once: true
使用组变量 group_vars/test_jails.yml
my_last_run: 2019-04-19 11:51:00
给出(删节(:
> ansible-playbook test1.yml
PLAY [test_jails]
TASK [debug]
ok: [test_01] => {
"my_last_run": "2019-04-19 11:51:00"
}
ok: [test_03] => {
"my_last_run": "2019-04-19 11:51:00"
}
ok: [test_02] => {
"my_last_run": "2019-04-19 11:51:00"
}
TASK [command]
changed: [test_01]
TASK [lineinfile]
changed: [test_01 -> localhost]
PLAY RECAP
test_01 : ok=3 changed=2 unreachable=0 failed=0
test_02 : ok=1 changed=0 unreachable=0 failed=0
test_03 : ok=1 changed=0 unreachable=0 failed=0
> cat group_vars/test_jails.yml
my_last_run: 2019-04-19 11:56:51