Amazon web services 如何告诉community.aws.elb_应用程序_lb保持特定侦听器的默认操作不变

Amazon web services 如何告诉community.aws.elb_应用程序_lb保持特定侦听器的默认操作不变,amazon-web-services,ansible,amazon-elb,aws-application-load-balancer,Amazon Web Services,Ansible,Amazon Elb,Aws Application Load Balancer,Ansible版本:2.9.16 我在AWS帐户中有几个应用程序负载平衡器,我正在尝试从这些负载平衡器向某些侦听器添加新规则。我正在使用community.aws.elb_应用程序\u lb_info插件来收集负载平衡器的信息,并找到要添加新规则的目标侦听器 在community.aws.elb_application_lb_info返回的json中,某些侦听器的默认操作如下所示: “默认操作”:[ { “目标群体”:“某些群体”, “类型”:“转发”, "命令":一,, “转发配置”:{ “目

Ansible版本:2.9.16

我在AWS帐户中有几个应用程序负载平衡器,我正在尝试从这些负载平衡器向某些侦听器添加新规则。我正在使用
community.aws.elb_应用程序\u lb_info
插件来收集负载平衡器的信息,并找到要添加新规则的目标侦听器

community.aws.elb_application_lb_info
返回的json中,某些侦听器的默认操作如下所示:

“默认操作”:[
{
“目标群体”:“某些群体”,
“类型”:“转发”,
"命令":一,,
“转发配置”:{
“目标组粘性配置”:{
“已启用”:false
},
“目标群体”:[
{
“目标群体”:“某些群体”,
“重量”:1
}
]
}
}
]
而其他人则是这样:

“默认操作”:[
{
“重定向_配置”:{
“主机”:“某主机”,
“协议”:“HTTPS”,
“路径”:“/”,
“状态代码”:“HTTP\U 302”,
“查询”:“,
“端口”:“443”
},
“类型”:“重定向”,
“订单”:1
}
]
然后我使用
community.aws.elb\u application\u lb
插件将规则添加到侦听器中

现在问题来了:参数
listeners:-DefaultActions
community.aws.elb\u application\u lb
中是必需的。我试图通过从
community.aws.elb_application\u lb_info
生成的json中提取它来指定它,因此我的代码如下所示:

#负载平衡器(name var在其他地方定义
-名称:“收集有关以下ALB的信息:{{load\u balancer\u name}”
community.aws.elb_应用程序_lb_信息:
...
名称:“{{load_balancer_name}}”
寄存器:elb_应用程序\u lb_信息\u ret
...
-名称:从ALB获取HTTPS:443侦听器
变量:
侦听器端口:443
侦听器协议:“HTTPS”
设定事实:
侦听器:{elb_应用程序{lb_信息}ret.load_平衡器[0]。侦听器{124; selectattr('protocol','equalto',listener_protocol)}selectattr('port','equalto',listener_port)| list | first}
...
-名称:在负载平衡器中创建侦听器规则
community.aws.elb_应用程序_lb:
名称:“{{load_balancer_name}}”
.....
听众:
-协议:“{{listener.Protocol}}”
端口:“{{listener.Port}”
....
DefaultActions:“{{listener.default_actions[0]}”
规则:
-条件:
....
但我得到了以下错误:

TASK[xxx:在负载平衡器中创建侦听器规则]*******************************************************************************************************************************************
致命:[xxx]:失败!=>{
“更改”:错误
}
味精:
参数DefaultActions的类型在“侦听器”中找到。我们无法转换为列表:无法转换为列表
如果在上面的剧本中,我将
DefaultActions:“{{listener.default\u actions[0]}}”更改为
DefaultActions:“{{listener.default\u actions}”
我得到以下错误:

TASK[xxx:在负载平衡器中创建侦听器规则]*******************************************************************************************************************************************
任务执行期间发生异常。要查看完整的回溯,请使用-vvv。错误是:KeyError:“Type”
致命:[xxx]:失败!=>{
“更改”:错误,
“rc”:1
}
味精:
模块故障
有关确切的错误,请参阅标准输出/标准输出
模块_STDERR:
回溯(最近一次呼叫最后一次):
...
KeyError:“类型”
看来我的方法不太好。
有没有可能只告诉community.aws.elb_application_lb
对我要添加规则的侦听器使用已定义的DefaultActions?我的所有负载平衡器都已存在,并定义了默认操作。因此,我只希望我的脚本添加一个规则,并保持默认操作与定义的完全一致


我想可以从json中提取每个默认操作的数据并每次重新创建默认操作,但代码会变得相当复杂。

因此,我最终重新创建了DefaultActions。这不是一个很好的解决方案,但到目前为止,我还没有想出更好的办法。但至少它起作用了

#通过community.aws.elb_应用程序_lb_信息插件获取目标“侦听器”的代码
... 
#有两种类型的默认操作:重定向或转发
-名称:检查侦听器的默认操作是否为“重定向”
变量:
默认_操作:“{{listener.default_操作[0]}”
时间:默认_action.type=='redirect'
设定事实:
默认操作:
-类型:“重定向”
重定向配置:
协议:“{default_action.redirect_config.Protocol}”
端口:“{default_action.redirect_config.Port}”
主机:“{default_action.redirect_config.Host}”
路径:“{default_action.redirect_config.Path}”
查询:“{default_action.redirect_config.Query}”
状态代码:“{{default_action.redirect_config.status_code}”
-名称:检查侦听器的默认操作是否为“转发”
变量:
默认_操作:“{{listener.default_操作[0]}”
时间:默认_action.type=='forward'
设定事实:
默认操作:
-类型:“前进”
TargetGroupArn:“{{default_a