Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 使用Ansible创建AWS应用程序负载平衡器规则_Amazon Web Services_Ansible - Fatal编程技术网

Amazon web services 使用Ansible创建AWS应用程序负载平衡器规则

Amazon web services 使用Ansible创建AWS应用程序负载平衡器规则,amazon-web-services,ansible,Amazon Web Services,Ansible,我正在尝试使用Ansible为现有ALB上未配置的HTTP侦听器创建规则。我首先为alb检索事实,然后使用这些事实定义一个Ansible alb资源,添加我想要的规则,但我遇到了一个问题 我希望Ansible通过我的group_vars文件(它已经成功地完成了其他任务)来创建这些多个规则。但是,当循环时,它不是将规则附加到侦听器,而是销毁/创建规则。因此,当playbook完成时,只剩下一条规则引用vars文件末尾定义的项目(在我的例子中是Surrey) 我的代码如下(为了简洁起见,我排除了获取

我正在尝试使用Ansible为现有ALB上未配置的HTTP侦听器创建规则。我首先为alb检索事实,然后使用这些事实定义一个Ansible alb资源,添加我想要的规则,但我遇到了一个问题

我希望Ansible通过我的group_vars文件(它已经成功地完成了其他任务)来创建这些多个规则。但是,当循环时,它不是将规则附加到侦听器,而是销毁/创建规则。因此,当playbook完成时,只剩下一条规则引用vars文件末尾定义的项目(在我的例子中是Surrey)

我的代码如下(为了简洁起见,我排除了获取和设置事实的部分):

我的“区域”vars文件如下所示:

regions:
  - name: manchester
    priority: 1
    url:
      - manchester.example.com

  - name: surrey
    priority: 2
    url:
      - surrey.example.com
- name: Add HTTP listener rules
  elb_application_lb:
    state: present
    name: "{{ albinfo.load_balancer_name }}"
    subnets:
      - "{{ albinfo.availability_zones[0].subnet_id }}"
      - "{{ albinfo.availability_zones[1].subnet_id }}"
      - "{{ albinfo.availability_zones[2].subnet_id }}"
    security_groups:
      - "{{ albinfo.security_groups[0] }}"
    listeners:
      - Protocol: HTTP
        Port: 80
        DefaultActions:
          - Type: forward
            TargetGroupName: default
        Rules:
          - "{{ region_rules }}"
    purge_listeners: no
    region_rules:
      - Conditions:
          - Field: host-header
            Values: manchester.example.com
        Priority: 1
        Actions:
          - TargetGroupName: manchester
            Type: forward

      - Conditions:
          - Field: host-header
            Values: surrey.example.com
        Priority: 2
        Actions:
          - TargetGroupName: surrey
            Type: forward

您正在使用的与_项一起迭代elb_应用程序_lb模块的方式不会像您所发现的那样起作用。执行多个命令将产生最后一个命令将“获胜”的效果,因为它将覆盖现有的elb规则集

您需要做的是在对elb_application_lb的单个调用中定义每个规则。相反,您不能使用对该模块的多个调用来分层规则。您可以创建一个定义所有规则的dict,如下所示:

regions:
  - name: manchester
    priority: 1
    url:
      - manchester.example.com

  - name: surrey
    priority: 2
    url:
      - surrey.example.com
- name: Add HTTP listener rules
  elb_application_lb:
    state: present
    name: "{{ albinfo.load_balancer_name }}"
    subnets:
      - "{{ albinfo.availability_zones[0].subnet_id }}"
      - "{{ albinfo.availability_zones[1].subnet_id }}"
      - "{{ albinfo.availability_zones[2].subnet_id }}"
    security_groups:
      - "{{ albinfo.security_groups[0] }}"
    listeners:
      - Protocol: HTTP
        Port: 80
        DefaultActions:
          - Type: forward
            TargetGroupName: default
        Rules:
          - "{{ region_rules }}"
    purge_listeners: no
    region_rules:
      - Conditions:
          - Field: host-header
            Values: manchester.example.com
        Priority: 1
        Actions:
          - TargetGroupName: manchester
            Type: forward

      - Conditions:
          - Field: host-header
            Values: surrey.example.com
        Priority: 2
        Actions:
          - TargetGroupName: surrey
            Type: forward
其中区域规则变量如下所示:

regions:
  - name: manchester
    priority: 1
    url:
      - manchester.example.com

  - name: surrey
    priority: 2
    url:
      - surrey.example.com
- name: Add HTTP listener rules
  elb_application_lb:
    state: present
    name: "{{ albinfo.load_balancer_name }}"
    subnets:
      - "{{ albinfo.availability_zones[0].subnet_id }}"
      - "{{ albinfo.availability_zones[1].subnet_id }}"
      - "{{ albinfo.availability_zones[2].subnet_id }}"
    security_groups:
      - "{{ albinfo.security_groups[0] }}"
    listeners:
      - Protocol: HTTP
        Port: 80
        DefaultActions:
          - Type: forward
            TargetGroupName: default
        Rules:
          - "{{ region_rules }}"
    purge_listeners: no
    region_rules:
      - Conditions:
          - Field: host-header
            Values: manchester.example.com
        Priority: 1
        Actions:
          - TargetGroupName: manchester
            Type: forward

      - Conditions:
          - Field: host-header
            Values: surrey.example.com
        Priority: 2
        Actions:
          - TargetGroupName: surrey
            Type: forward

问题是什么?如何让它按预期工作,所以当剧本完成时,我对听众有两条规则,一条是曼彻斯特规则,一条是萨里规则。谢谢,太棒了,我的问题解决了。n、 我不得不做一个小的格式更改,它才能工作:“{{region_rules}}”应该在任务中定义为字符串而不是列表。非常感谢!