jinja2 как расширить список - PullRequest
0 голосов
/ 12 марта 2020

Я пытаюсь создать один список, используя ansible set_fact Jinja2, но создается два разных списка

Переменная: lb_listeners имеет значение [80, 443]

код:

- 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'}]}]

Как получить это в одном списке?

1 Ответ

1 голос
/ 12 марта 2020

Вы встраиваете строковые шаблоны {{ в середине назначения факта; все, что вы хотите, это сделать все вещи python в jinja2 и выдать структуру только в конце:

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 }}
...