I have a variable that is very specific to a playbook, not necessarily tied to a host or host group.
I would like to declare this variable in the playbook itself, and have it shared between plays without having to redeclare.
Example below is a simple 2 play actions in a playbook. The variable "foo" isn't really related to the host or the host group, it's specific to the playbook internally, so I would like that var to stay local to the playbook.
- 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 }}"
I realize this example doesn't make logical sense to build like this split across plays for a single host. It's an ultra-simplified version of the actual problem I'm facing to demonstrate what I would like to do.
My question is this: Without creating new group_vars/host_vars files for "localhost", combining tasks to the single play, and without re-declaring the foo
variable for each play, is there a way to make these plays share the foo
variable?
Best Answer
Figured this out a few minutes after asking of course!
This works, using
set_fact
to make the variables persistent. This will only work if each play has a matchinghosts:
value