我有一个非常特定于剧本的变量,不一定与主机或主机组绑定。
我想在剧本本身中声明这个变量,并在剧本之间共享它,而不必重新声明。
下面的示例是剧本中的 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 }}"