如何在ansible中为主机组动态生成一次变量
How to dynamically generate variables for host group in ansible only once
我有静态主机,在我的 all.yml group_vars 中,我有一些我想从 REST API 的响应中生成的变量。我可以在任务中使用 uri 模块并为游戏注册变量,但我认为它会为每个主机调用 api。
但我想通过在播放开始时仅调用一次 api 来创建变量,以便所有主机都可以使用它。我该怎么做?
Q: I want to create the variables by calling the api only once at the start of the play, so it can be used by all hosts. How can I do that?
A:在run_once: true
任务中注册的变量对所有主机可用。下面的剧本
- hosts: all
tasks:
- command: date
register: result
run_once: true
- set_fact:
started_at: "{{ result.stdout }}"
- debug:
var: started_at
给予
TASK [command] **************
changed: [test_01]
TASK [set_fact] ***************
ok: [test_01]
ok: [test_02]
ok: [test_03]
TASK [debug] ************
ok: [test_01] => {
"started_at": "Mon Sep 2 15:23:08 CEST 2019"
}
ok: [test_02] => {
"started_at": "Mon Sep 2 15:23:08 CEST 2019"
}
ok: [test_03] => {
"started_at": "Mon Sep 2 15:23:08 CEST 2019"
}
我有静态主机,在我的 all.yml group_vars 中,我有一些我想从 REST API 的响应中生成的变量。我可以在任务中使用 uri 模块并为游戏注册变量,但我认为它会为每个主机调用 api。
但我想通过在播放开始时仅调用一次 api 来创建变量,以便所有主机都可以使用它。我该怎么做?
Q: I want to create the variables by calling the api only once at the start of the play, so it can be used by all hosts. How can I do that?
A:在run_once: true
任务中注册的变量对所有主机可用。下面的剧本
- hosts: all
tasks:
- command: date
register: result
run_once: true
- set_fact:
started_at: "{{ result.stdout }}"
- debug:
var: started_at
给予
TASK [command] **************
changed: [test_01]
TASK [set_fact] ***************
ok: [test_01]
ok: [test_02]
ok: [test_03]
TASK [debug] ************
ok: [test_01] => {
"started_at": "Mon Sep 2 15:23:08 CEST 2019"
}
ok: [test_02] => {
"started_at": "Mon Sep 2 15:23:08 CEST 2019"
}
ok: [test_03] => {
"started_at": "Mon Sep 2 15:23:08 CEST 2019"
}