Estou tentando usar uma variável gerada em uma função para um host1 e usá-la em outra função para um host2.
Este é o layout geral usado:
| # Group variables
+-- group_vars
| +-- all # variables set on all hosts
| # Collection of playbooks divided by *role*
+-- roles
- role-nfs.yml # playbook for role 'role-nfs'
| - role-app.yml # playbook for role 'role-app'
| - role-app # directory containing stuff used by 'role-app'
| - role-nfs # directory containing stuff used by 'role-nfs'
|
+-- site.yml
| # This is the main playbook.
A variável é gerada para o host1: nfs
in role-nfs/task/main.yml
- name: Export nfs_server_ip to a host-fact type variable
set_fact:
nfs_server_ip: "{{ ansible_default_ipv4.address }}"
cacheable: True
Em seguida, pegado pelo playbook host2: app
in role-app.yml
:
- name: Deploy app
tags:
- app
hosts: app
roles:
- role: role-app
nfs: True
nfs_ip: "{{hostvars['nfs_server_ip']}}"
E passado para o role-app/task/main.yml
. Mas a informação de depuração diz-me que recebo uma string vazia:
- debug:
msg: "This is nfs_ip: {{nfs_ip}} "
fora:
TASK [app : debug] *********************************************************************************
task path: /home/ubuntu/playbooks/roles/role-app/tasks/main.yml:26
ok: [app001] => {
"msg": "This is nfs_ip: "
}
Eu não tenho certeza do que estou fazendo de errado. Alguma ajuda?
EDITAR
Então, consegui o que preciso, ou seja, nfs_ip
de tal maneira:
group_name_nfs: "{{hostvars[inventory_hostname]['groups']['nfs-server'][0]}}"
nfs_ip: "{{hostvars[inventory_hostname]['cluster']['nodes'][group_name_nfs]['ips'][0]}}"
Pode haver uma maneira melhor de fazer isso ...