如何在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"
}