I have a playbook that runs different roles on different hosts. Is it possible to pass a variable from one role running on one host to another role on another host running within the same playbook run? Or any workaround ?
playbook
host1
role1
here I get some variables: var1 var2 ...etc
host2
role2
here I need to use var1 var2 ... etc from the above host/role
The task in role1 that sets teh variable db
looks like this:
- shell: cd /ACE/conf && grep ^db.url local1.properties | awk -F/ '{print $4}' | awk -F? '{print $1}'
register: db
UPDATE: On the first host the values are dynamic, it's like a configuration file that is always updated. After I store the values in variables on host1 with the role1 I then move to the host2, run the role2 and do stuff with those values from variables stored by host1.
I tried with hostvars:
{{ hostvars.LBL.db.stdout }}
{{ hostvars['LBL']['db'] }}
{{ hostvars['LBL']['db']['stdout'] }}
and I get error:
in get_variables raise Exception("host not found: %s" % hostname) Exception: host not found: LBL
LBL exists in hosts as on it I run the first role
I set a variable on one host and I want that variable to be available to the other host. All this within a single playbook. Can it be done ?
hostvars is not working using it like this:
---
- name: test hostvars host1
hosts: LBL
tasks:
- command: "ls /bin"
register: ls_out
- name: test hostvars host2
hosts: LM
tasks:
- debug:
var: "{{ hostvars['LBL']['ls_out']['stdout'] }}"
error:
fatal: [10.104.148.138] => host not found: LBL
/etc/ansible/hosts
[root@NS1 ansible]# cat /etc/ansible/hosts
[LBL]
10.104.148.136
[LM]
10.104.148.138
hostvars.LBL.*
should've worked. If the var1/2 are defined in inventory file then post that too. – Kashyap- name: bla bla shell: cd /ACE/conf && grep ^db.url local1.properties | awk -F/ '{print $4}' | awk -F? '{print $1}' register: db
If I do and echo {{ do.stdout }} in the same role it works great. I don't use an inventory. In the second role if I doshell: echo "{{ hostvars['LBL']['db']['stdout'] }}"
it gives the error – ady8531ls_out
as expected. Posted wrong code or something...? Please elborate on "not working" – Kashyap