跨游戏的 Ansible 变量,无需组/主机变量

跨游戏的 Ansible 变量,无需组/主机变量

我有一个非常特定于剧本的变量,不一定与主机或主机组绑定。

我想在剧本本身中声明这个变量,并在剧本之间共享它,而不必重新声明。

下面的示例是剧本中的 2 个简单播放操作。变量“foo”实际上与主机或主机组无关,它特定于剧本内部,所以我希望该变量保持在剧本的本地。

- name: "Test1"
  hosts: localhost
  vars:
    foo: bar
  tasks:
    - name: "Debug1"
      ansible.builtin.debug:
        msg: " {{ foo }} "


- name: "Test2 - this will fail"
  hosts: localhost
  tasks:
    - name: "Debug2"
      ansible.builtin.debug:
        msg: "{{ foo }}"

我意识到这个例子在逻辑上不合理,无法为单个主机构建这样的跨剧集拆分。这是我面临的实际问题的极简化版本,用于演示我想要做的事情。

我的问题是:无需为“localhost”创建新的 group_vars/host_vars 文件,将任务合并到单个播放中,也无需为每个播放重新声明变量foo,有没有办法让这些播放共享变量foo

答案1

当然问了几分钟就明白了!

这是可行的,用于set_fact使变量持久化。只有当每个游戏都有匹配的hosts:值时,这才会起作用

- name: "Test1"
  hosts: localhost
  vars:
    foo: bar
    zoo: zar
  tasks:
    - name: "Make host play variables persistent"
      ansible.builtin.set_fact:
        foo: "{{ foo }}"
        zoo: "{{ zoo }}"

- name: "Test2 - variables now exist in this play"
  hosts: localhost
  tasks:
    - name: "DebugFoo"
      ansible.builtin.debug:
        msg: "{{ foo }}"
    - name: "DebugZoo"
      ansible.builtin.debug:
        msg: "{{ zoo }}"

相关内容