jinja2如何扩展列表

2024-10-01 02:36:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用ansible set_fact Jinja2创建一个列表, 但是它创建了两个不同的列表

变量:lb_侦听器设置为[80443]

代码:

- name: "Build listeners map"
  set_fact:
    lb_lstnr_map: >-
      {%- set lb_lstnr_map = [] -%}
      {%- for port in lb_listeners -%}
        {%- if port|int == 443 and cert_arn.startswith('arn:') -%}
          {{  lb_lstnr_map + [{
            'Protocol': 'HTTPS',
            'Port': 443,
            'DefaultActions': [ { 'Type': 'forward', 'TargetGroupName': tg_name } ],
            'SslPolicy': ssl_policy,
            'Certificates': [ { 'CertificateArn': cert_arn } ]
            }]
         }}
        {%- elif port|int != 443 -%}
          {{ lb_lstnr_map + [{
            'Protocol': 'TCP' if lb_type == 'network' else 'HTTP',
            'Port': port,
            'DefaultActions': [ { 'Type': 'forward', 'TargetGroupName': tg_name } ]
            }]
          }}
        {%- endif -%}
      {%- endfor -%}

实际产量

[{'Protocol': 'HTTP', 'Port': 8080, 'DefaultActions': [{'Type': 'forward', 'TargetGroupName': 'dev-sample-app-tga'}]}] 
[{'Protocol': 'HTTPS', 'Port': 443, 'DefaultActions': [{'Type': 'forward', 'TargetGroupName': 'dev-sample-app-tga'}], 'SslPolicy': 'ELBSecurityPolicy-2016-08', 'Certificates': [{'CertificateArn': 'arn:aws:x:x'}]}]

怎样才能在一张单子里找到呢


Tags: namemap列表porttypeprotocolarnforward
1条回答
网友
1楼 · 发布于 2024-10-01 02:36:38

您在一个事实赋值的中间嵌入字符串模板^ {CD1>};您想要的是在jinja2中完成所有python的工作,并且只在最后发出结构:

set_fact:
    lb_lstnr_map: >-
      {%- set lb_lstnr_map = [] -%}
      {%- for port in lb_listeners -%}
      {%-   if port|int == 443 and cert_arn.startswith('arn:') -%}
      {%-     set _ = lb_lstnr_map.append({'Protocol': 'HTTPS'}) -%}
      {%-   elif port|int != 443 -%}
      {%-    set _ = lb_lstnr_map.append({
                'Protocol': 'TCP' if lb_type == 'network' else 'HTTP',
             }) -%}
      {%-   endif -%}
      {%- endfor -%}
      {{ lb_lstnr_map }}

相关问题 更多 >