Amazon web services 使用Ansible创建AWS应用程序负载平衡器规则
我正在尝试使用Ansible为现有ALB上未配置的HTTP侦听器创建规则。我首先为alb检索事实,然后使用这些事实定义一个Ansible alb资源,添加我想要的规则,但我遇到了一个问题 我希望Ansible通过我的group_vars文件(它已经成功地完成了其他任务)来创建这些多个规则。但是,当循环时,它不是将规则附加到侦听器,而是销毁/创建规则。因此,当playbook完成时,只剩下一条规则引用vars文件末尾定义的项目(在我的例子中是Surrey) 我的代码如下(为了简洁起见,我排除了获取和设置事实的部分): 我的“区域”vars文件如下所示: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) 我的代码如下(为了简洁起见,我排除了获取
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}}”应该在任务中定义为字符串而不是列表。非常感谢!