Я пытаюсь использовать переменную, созданную в роли для host1, и использовать ее в другой роли для host2.
Это общий макет:
| # 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.
Переменная создается для host1: nfs
в 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
Затем захватил host2: app
в role-app.yml
учебник:
- name: Deploy app
tags:
- app
hosts: app
roles:
- role: role-app
nfs: True
nfs_ip: "{{hostvars['nfs_server_ip']}}"
И перешел в role-app/task/main.yml
. Но отладочная информация говорит мне, что я получаю пустую строку:
- debug:
msg: "This is nfs_ip: {{nfs_ip}} "
вне:
TASK [app : debug] *********************************************************************************
task path: /home/ubuntu/playbooks/roles/role-app/tasks/main.yml:26
ok: [app001] => {
"msg": "This is nfs_ip: "
}
Я не совсем уверен, что делаю не так. Любая помощь?
Так что мне удалось получить то, что мне нужно, т.е. nfs_ip
таким образом:
group_name_nfs: "{{hostvars[inventory_hostname]['groups']['nfs-server'][0]}}"
nfs_ip: "{{hostvars[inventory_hostname]['cluster']['nodes'][group_name_nfs]['ips'][0]}}"
Может быть лучший способ сделать это ..
Вы можете попробовать использовать инвентаризация в памяти.
- name: Add nfs_server_ip to in-memory inventory.
add_host:
hostname: nfs-server
public_ip: {{ ansible_default_ipv4.address }}
А позже используйте что-то вроде следующего
- name: Deploy app
tags:
- app
hosts: app
roles:
- role: role-app
nfs: True
nfs_ip: "{{ hostvars['nfs-server']['public_ip'] }}"