I want to create a cluster of servers, using ansible.
In one main-playbook, I include some sub-playbooks.
- include: playbook_commandserver.yml
- include: playbook_agent.yml
In the playbook_commandserver.yml, I create the command-server (on aws).
Then, I trigger a role, that uses the set_fact
module to remember the commandserver's dns name:
- name: Get hostname of command server
shell: /usr/bin/host $(/usr/bin/curl -s http://ipecho.net/plain) | /usr/bin/awk '{print $5}' | /usr/bin/awk -F 'aws.com' '{print $1"aws.com"}'
register: cs
- name: Set hostname of command server as fact
set_fact: commandserver="{{ cs.stdout }}"
The commandserver
fact is available in the same play, but not in the same playbook .. let alone in the playbook_agent.yml
, that gets included, afterwards. And it's exactly there, where I would need to access that commandserver-fact.
So how does one set/store variables, that are valid for the complete ansible-run?
I've found this: https://stackoverflow.com/questions/26732241/ansible-save-registered-variable-to-file However to me this looks like an ugly hack.
Is ther no better solution to this problem? Is there no way to set a variable, that is valid for the whole ansible-run?