我编写了一个可视任务来创建ec2实例并将主机添加为动态主机。任务正常工作并且创建了实例,但是我无法检索实例信息。
我的Ansible版本:2.2.0.0/Ubuntu 14.04
我的代码
- name: launch ec2 instance for QA
local_action:
module: ec2
key_name: "{{ ec2_keypair }}"
group: "{{ ec2_security_group }}"
instance_type: "{{ ec2_instance_type }}"
image: "{{ ec2_image }}"
vpc_subnet_id: "{{ ec2_subnet_ids }}"
region: "{{ ec2_region }}"
instance_tags: '{"Name":"{{ec2_tag_Name}}","Type":"{{ec2_tag_Type}}","Environment":"{{ec2_tag_Environment}}"}'
assign_public_ip: yes
wait: true
count: 1
register: ec2
- debug: var=item
with_items: ec2.instances
- add_host: name={{ item.public_ip }} >
groups=dynamically_created_hosts
with_items: ec2.instances
- name: Wait for the instances to boot by checking the ssh port
wait_for: host={{item.public_ip}} port=22 delay=60 timeout=320 state=started
with_items: ec2.instances
我得到的输出是:
任务(QA发射ec2实例 ] **********************************************
更改:[localhost -> localhost]任务(调试 ] *******************************************************************
[add_host
Ok: [localhost] => (item=ec2.instances) => {"项":"ec2.instances"}任务 ] ****************************************************************
fatal: [localhost]: FAILED!=> {"failed": true, "msg": "字段'args'具有无效值,其中似乎包含未定义的变量。这个错误是:'unicode object'没有属性'public_ip'nn这个错误似乎已经在'/var/lib/jenkins/jobs/QA/workspace/dynamic-ec2。Yml ':第37行,第7列,但可能在文件的其他地方,这取决于确切的语法问题。有问题的行似乎是:nnn - add_host: name={{item。public_ip}}>n ^ heren我们可能错了,但这个看起来可能是nmissing引号的问题。当模板表达式开始一个值时,总是引用括号。例如:nn with_items:n - {{foo}}nn应该写成:nn with_items:n - "{{foo}}"n"}
还有其他方法吗?
在2.2中不能使用裸变量。自2.0版以来,该语法已被弃用,并向用户发出警告。
您应该阅读粘贴的错误消息,尽管它暗示了不同的原因,但您应该遵循给出的示例:
Should be written as: with_items: - "{{ foo }}"
在你的情况下,它足以取代所有的with_items: ec2.instances
:
with_items: "{{ ec2.instances }}"