我正在尝试在任务中使用 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'
因此实例 ID 显然在 hostvars 字典中,但我似乎没有任何办法实际将其用作 ec2_ami 模块的 instance_id 参数。
我做错了什么?引用调试消息没有任何区别,删除括号只会打印文字 hostvars 字符串。
答案1
答案似乎是引用变量名:“ansible_ec2_instance_id”,即:
- debug: msg="{{ hostvars[groups['rundeck-masters'][0]]['ansible_ec2_instance_id'] }}"
现在它可以正常工作。