Ansible注册实例和创建ELB

时间:2016-08-11 13:12:15

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

我尝试创建一个ansible playbook来动态查找与AWS标记匹配的任何实例,创建一个ELB,然后将实例添加到它。到目前为止,我已经成功地为一组标签和一个ELB创建了这些标签。

我试图找出为任意数量的代码运行此操作的最佳方法,而不预先指定我的变量functionrelease

例如,functionrelease变量将在vars文件中定义。

function:
  - api
  - webapp
  - mysql
release:
  - prod
  - stage
  - dev

我的剧本看起来像这样。我正在努力寻找一种通过变量列表循环整个剧本的方法。如果我在第一个任务中添加with_items,它会循环整个任务,然后转移到下一个任务,而这个任务无法完成我想要的任务。

- ec2_remote_facts:
    filters:
      instance-state-name: running
      "tag:Function": "{{ function }}"
      "tag:Release": "{{ release }}"
    region: us-east-1
  register: ec2instance

- local_action:
    module: ec2_elb_lb
    name: "{{ function }}-{{ release }}"
    state: present
    instance_ids: "{{ item.id }}"
    purge_instance_ids: true
    region: us-east-1
    subnets:
      - subnet-1
      - subnet-2
    listeners:
      - protocol: https
        load_balancer_port: 443
        instance_port: 80
        ssl_certificate_id: "{{ ssl_certificate_id }}"
    health_check:
        ping_protocol: http
        ping_port: 80
        ping_path: "/status"
        response_timeout: 3
        interval: 5
        unhealthy_threshold: 2
        healthy_threshold: 2
    access_logs:
        interval: 5
        s3_location: "{{ function }}-{{ release }}-elb"
        s3_prefix: "logs"
  with_items: ec2instance.instances

1 个答案:

答案 0 :(得分:1)

我能想到的最简单的事情是参数化包括。
制作单次拍摄的任务列表,例如elb_from_tagged_instances.yml
然后在循环中使用main.yml制作include

- include: elb_from_tagged_instances.yml function={{item[0]}} release={{item[1]}}
  with_together:
      - "{{function}}"
      - "{{release}}"

如果你不需要以某种方式交叉交叉函数/发布,我会用一个dict列表替换两个list function / release并迭代它。

UPDATE:嵌套循环示例获得9对:

---
- hosts: localhost
  connection: local
  vars:
    functions:
      - api
      - webapp
      - mysql
    releases:
      - prod
      - stage
      - dev
  tasks:
    - include: include_z1.yml function="{{item[0]}}" release="{{item[1]}}"
      with_nested:
        - "{{functions}}"
        - "{{releases}}"

另请注意,您应该为列表和参数(我的示例中使用functionfunctions(复数)使用不同的名称,以避免递归模板。