【问题标题】:Launch multiple volumes with ec2 instance using ansible使用 ansible 使用 ec2 实例启动多个卷
【发布时间】:2017-01-31 02:26:57
【问题描述】:

我正在配置一个附加了多个卷的 ec2 实例。以下是我的做法。

---
- hosts: localhost
  connection: local
  gather_facts: false
  vars:
    instance_type: 't2.micro'
    region: 'my-region'
    aws_zone: 'myzone'
    security_group: my-sg
    image: ami-sample
    keypair: my-keypair
    vpc_subnet_id: my-subnet
  tasks:
  - name: Launch instance
    ec2:
      image: "{{ image }}"
      instance_type: "{{ instance_type }}"
      keypair: "{{ keypair}}"
      instance_tags: '{"Environment":"test","Name":"test-provisioning"}'
      region: "{{region}}"
      aws_zone: "{{ region }}{{ aws_zone }}"
      group: "{{ security_group }}"
      vpc_subnet_id: "{{vpc_subnet_id}}"
      wait: true
      volumes:
        - device_name: "{{ item }}"
          with_items:
             - /dev/sdb
             - /dev/sdc
          volume_type: gp2
          volume_size: 100
          delete_on_termination: true
          encrypted: true
    register: ec2_info

但出现以下错误

致命:[本地主机]:失败! => {"failed": true, "msg": "'args' 字段的值无效,似乎包含未定义的变量。错误是:'item' 未定义

如果我将{{item}} 替换为/dev/sdb,则实例很容易以特定卷启动。但我想用指定的项目列表创建多个卷 - /dev/sdb、/dev/sdc 等 有什么可能的方法来实现这一点?

【问题讨论】:

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


    【解决方案1】:

    您不能将 with_items 与变量和参数一起使用 - 它仅用于任务。
    您需要提前构建卷列表:

    - name: Populate volumes list
      set_fact:
        vol:
          device_name: "{{ item }}"
          volume_type: gp2
          volume_size: 100
          delete_on_termination: true
          encrypted: true
      with_items:
         - /dev/sdb
         - /dev/sdc
      register: volumes
    

    然后执行 ec2 模块:

    volumes: "{{ volumes.results | map(attribute='ansible_facts.vol') | list }}"
    

    更新:没有set_fact的另一种方法:

    定义一个变量——一种卷的模板字典(不带device_name):

    vol_default:
      volume_type: gp2
      volume_size: 100
      delete_on_termination: true
      encrypted: true
    

    然后在您的ec2 模块中您可以使用:

    volumes: "{{ [{'device_name': '/dev/sdb'},{'device_name': '/dev/sdc'}] | map('combine',vol_default) | list }}"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-30
      • 1970-01-01
      • 2021-01-24
      相关资源
      最近更新 更多