Ansible: Passa uma variável gerada em um papel de um host1 para outro papel de um host2

1

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 ...

    
por diegus 27.09.2018 / 11:27

1 resposta

1

Você pode tentar usar inventário na memória .

- name: Add nfs_server_ip to in-memory inventory.
  add_host:
    hostname: nfs-server
    public_ip: {{ ansible_default_ipv4.address }}

E depois use algo como o seguinte

- name: Deploy app
  tags:
    - app
  hosts: app
  roles:
    - role: role-app
      nfs: True
      nfs_ip: "{{ hostvars['nfs-server']['public_ip'] }}"
    
por 27.09.2018 / 14:07

Tags