Ansible: Como acessar o hostvars na tarefa?

6

Estou tentando usar hostvars na minha tarefa. Mas parece que ansible está interpolando a variável e, em seguida, tentando procurá-la na variável principal dict object. Aqui está o meu código:

- name: Configure the instance
  hosts: rundeck-masters
  sudo: True
  gather_facts: True
  tasks:
  - name: Gather EC2 facts
    ec2_facts:

  # show all known facts for this host
  - debug: msg={{ hostvars[groups['rundeck-masters'][0]][ansible_ec2_instance_id] }}

  - name: Snapshot the instance
    local_action:
      module: ec2_ami
      description: "Rundeck master - {{ ansible_date_time.date }}"
      instance_id: "{{ hostvars[groups['rundeck-masters'][0]][ansible_ec2_instance_id] }}"
      wait: no

E o erro que recebo é:

TASK: [debug msg={{ hostvars[groups['rundeck-masters'][0]][ansible_ec2_instance_id] }}] ***
fatal: [ec2-xx-xx-xx-xx.eu-west-1.compute.amazonaws.com] => One or more undefined variables: 'dict object' has no attribute u'i-12341234'

Portanto, o ID da instância está obviamente no dict do hostvars, mas parece que não tenho como usá-lo como o parâmetro instance_id para o módulo ec2_ami.

O que estou fazendo de errado? Citando o debug msg não faz diferença, e remover as chaves apenas imprime a string literal hostvars.

    
por neil 28.10.2014 / 10:57

1 resposta

7

Parece que a resposta é citar o nome da variável: 'ansible_ec2_instance_id', por exemplo:

- debug: msg="{{ hostvars[groups['rundeck-masters'][0]]['ansible_ec2_instance_id'] }}"

Agora funciona corretamente.

    
por 28.10.2014 / 11:08

Tags