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