我正在尝试用我所有的AWS东西来学习Ansible。因此,我想要做的第一项任务是创建具有已安装卷的基本EC2实例。 我根据Ansible文档编写了Playbook,但它并没有真正起作用。 我的手册:
# The play operates on the local (Ansible control) machine.
- name: Create a basic EC2 instance v.1.1.0 2015-10-14
hosts: localhost
connection: local
gather_facts: false
# Vars.
vars:
hostname: Test_By_Ansible
keypair: MyKey
instance_type: t2.micro
security_group: my security group
image: ami-d05e75b8 # Ubuntu Server 14.04 LTS (HVM)
region: us-east-1 # US East (N. Virginia)
vpc_subnet_id: subnet-b387e763
sudo: True
locale: ru_RU.UTF-8
# Launch instance. Register the output.
tasks:
- name: Launch instance
ec2:
key_name: "{{ keypair }}"
group: "{{ security_group }}"
instance_type: "{{ instance_type }}"
image: "{{ image }}"
region: "{{ region }}"
vpc_subnet_id: "{{ vpc_subnet_id }}"
assign_public_ip: yes
wait: true
wait_timeout: 500
count: 1 # number of instances to launch
instance_tags:
Name: "{{ hostname }}"
os: Ubuntu
type: WebService
register: ec2
# Create and attach a volumes.
- name: Create and attach a volumes
ec2_vol:
instance: "{{ item.id }}"
name: my_existing_volume_Name_tag
volume_size: 1 # in GB
volume_type: gp2
device_name: /dev/sdf
with_items: ec2.instances
register: ec2_vol
# Configure mount points.
- name: Configure mount points - mount device by name
mount: name=/system src=/dev/sda1 fstype=ext4 opts='defaults nofail 0 2' state=present
mount: name=/data src=/dev/xvdf fstype=ext4 opts='defaults nofail 0 2' state=present
但是这本Playbook会因为错误而崩溃:
fatal: [localhost] => One or more undefined variables: 'item' is undefined
请问有人伸出援助之手吗?
答案 0 :(得分:1)
您似乎一次性复制/粘贴了很多东西,而不是需要一些SO可以帮助您的信息,您需要学习Ansible的基础知识,这样您才能通过思考所有在本剧本中都不匹配的个别比特。
让我们来看看您遇到的具体错误 - item is undefined
。它在这里触发:
# Create and attach a volumes.
- name: Create and attach a volumes
ec2_vol:
instance: "{{ item.id }}"
name: my_existing_volume_Name_tag
volume_size: 1 # in GB
volume_type: gp2
device_name: /dev/sdf
with_items: ec2.instances
register: ec2_vol
此任务旨在循环遍历列表中的每个项目,在这种情况下,列表为ec2.instances
。它不是,因为with_items
应该是缩进的,所以它与寄存器保持一致。
如果您有一个实例列表(据我所知,您没有这样做),它会使用id
代表{{ item.id }}
行中的每个实例。但是后来可能会抛出一个错误,因为我不认为他们都被允许拥有相同的名字。
出去学习,你可以弄清楚这种细节。