如何使用Ansible为EC2实例添加和装入卷

时间:2015-10-16 19:25:47

标签: amazon-web-services amazon-ec2 ansible ansible-playbook

我正在尝试用我所有的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

请问有人伸出援助之手吗?

1 个答案:

答案 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 }}行中的每个实例。但是后来可能会抛出一个错误,因为我不认为他们都被允许拥有相同的名字。

出去学习,你可以弄清楚这种细节。