Назад | Перейти на главную страницу

Ansible: как получить доступ к хостварам в задаче?

Я пытаюсь использовать в своей задаче hostvars. Но кажется, что ansible интерполирует переменную, а затем пытается найти ее в объекте dict основной переменной. Вот мой код:

- 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

И ошибка, которую я получаю:

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'

Таким образом, идентификатор экземпляра, очевидно, находится в dict hostvars, но у меня нет никакого способа фактически использовать его в качестве параметра instance_id для модуля ec2_ami.

Что я делаю не так? Цитирование сообщения отладки не имеет значения, а удаление фигурных скобок просто выводит на печать буквальную строку hostvars.

Кажется, ответ заключается в цитировании имени переменной: 'ansible_ec2_instance_id', то есть:

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

Теперь все работает правильно.