Question:
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 ?
1 2 3 4 5 6 7 8 |
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:
1 2 3 |
- 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:
1 2 3 4 |
{{ hostvars.LBL.db.stdout }} {{ hostvars['LBL']['db'] }} {{ hostvars['LBL']['db']['stdout'] }} |
and I get error:
1 2 |
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
--- - 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:
1 2 |
fatal: [10.104.148.138] => host not found: LBL |
/etc/ansible/hosts
1 2 3 4 5 6 |
[root@NS1 ansible]# cat /etc/ansible/hosts [LBL] 10.104.148.136 [LM] 10.104.148.138 |
Answer:
The problem is in your inventory.
This message:
1 2 |
fatal: [10.104.148.138] => host not found: LBL |
is because LBL
is a group and not a host. Group LBL
has one host in it: 10.104.148.136
Do one of the following:
1. Change your inventory (/etc/ansible/hosts
) to:
1 2 3 |
LBL ansible_ssh_host=10.104.148.136 LM ansible_ssh_host=10.104.148.138 |
2. or if you really know what you’re doing and LBL
is a group and you wanna keep it that way then access the variable with:
1 2 |
{{ hostvars['10.104.148.136']['db']['stdout'] }} |
Again LBL is a group not a host. More info.