使用Ansible创建AWS目标组

时间:2018-11-29 04:12:47

标签: amazon-web-services loops ansible

Im试图完成的工作是从动态生成的实例列表创建网络负载均衡器目标组。

brokerInstancesList是实例ID的列表。我需要遍历此列表,并将它们作为目标添加到该目标组。

- name: "Create 9092 target group"
  elb_target_group:
    name: "tg-{{ ClusterName }}"
    protocol: tcp
    port: 9092
    vpc_id: "{{ VPCID }}"
    targets:
      - Id: "{{ item }}"
        Port: 9092
    state: present
  loop: "{{ brokerInstancesList }}"

我上面尝试的问题是仅保留brokerInstancesList中的最后一个条目。我需要的是以下内容。

- name: "Create 9092 target group"
  elb_target_group:
    name: "tg-{{ ClusterName }}"
    protocol: tcp
    port: 9092
    vpc_id: "{{ VPCID }}"
    targets:
      {% for item in {{ brokerInstancesList }} -%}
      - Id: "{{ apple }}"
        Port: 9092
      {%- endfor %}
    state: present

2 个答案:

答案 0 :(得分:0)

您需要在上一步中创建目标列表:

  - name: Create the custom fact for targets                                       
    set_fact:                                                                      
      target_data: "{{ target_data|default([]) + [{'Id': item, 'Port': 9092 }]}}"
    with_items: "{{ brokerInstancesList }}"

然后在target_data任务的targets属性中使用elb_target_group列表。

来源:https://github.com/ansible/ansible/issues/32218#issuecomment-339792059

答案 1 :(得分:0)

使用elb_target模块来实现它:

  • 名称:收集所有新代理实例的事实
    ec2_instance_facts:
    过滤器:
      “ tag:Name”:“ {{ec2_tag_proxy}}”
    注册:ec2_proxy

  • elb_target_group:
    名称:uat-target-proxy
    通讯协定:http
    端口:80
    vpc_id:vpc-4e6e8112
    deregistration_delay_timeout:60
    stickiness_enabled:True
    stickiness_lb_cookie_duration:86400
    health_check_path:/
    success_response_codes:“ 200”
    health_check_interval:“ 20”
    状态:存在

  • elb_target:
    target_group_name:uat-target-proxy
    target_id:“ {{item.instance_id}}”
    target_port:80
    状态:存在
    with_items:“ {{ec2_proxy.instances}}”
    时间:ec2_proxy.instances | length> 0