Как проверить, истинно ли значение dict в Jinja2, используя циклы for и операторы if - PullRequest
0 голосов
/ 03 августа 2020

Я пытаюсь автоматизировать добавление и удаление перенаправлений в Nginx, используя Ansible.

Добавил это в /group_vars/all.yml:

general_redirects:
  enabled: true
  option:
    - { tournaments: true }
    - { leader: false }

Это задача, отвечающая за добавление всех перенаправления:

    - name: Add general redirects
      template:
        src: "general.redirects.j2"
        dest: /etc/nginx/conf.d/general.redirects
      when: general_redirects and general_redirects.enabled == true
      notify: restart nginx
      tags: general

Но у меня проблема, как добавить правильные if и for в шаблон Jinja2: general.redirects.j2.

В настоящее время у меня есть это, но при развертывании статус CHANGED а файл с редиректами пуст. Идея состоит в том, чтобы прокомментировать редиректы при true и раскомментировать false:

{% if general_redirects.enabled == true %}
  {% if redirect.option is defined -%}
  {% for item in redirect.option-%}
  {% if option.tournaments == false -%}
location = /no/promotions/tournaments { return 302 https://www.{{ domain }}/no/promotions; }
location = /fi/promotions/tournaments{ return 302 https://www.{{ domain }}/fi/promotions; }
location = /en/promotions/tournaments { return 302 https://www.{{ domain }}/en/promotions; }
{% else %}
#location = /no/promotions/tournaments{ return 302 https://www.{{ domain }}/no/promotions; }
#location = /fi/promotions/tournaments { return 302 https://www.{{ domain }}/fi/promotions; }
#location = /en/promotions/tournaments { return 302 https://www.{{ domain }}/en/promotions; }
   {% endif -%}
   {% endfor -%}
   {% endif -%}

  {% if redirect.option is defined -%}
  {% for item in redirect.option -%}
  {% if option.leaderboardrace == false -%}
location = /no/promotions/leader { return 302 https://www.{{ domain }}/no/promotions; }
location = /fi/promotions/leader { return 302 https://www.{{ domain }}/fi/promotions; }
location = /en/promotions/leader { return 302 https://www.{{ domain }}/en/promotions; }
{% else %}
#location = /no/promotions/leader { return 302 https://www.{{ domain }}/no/promotions; }
#location = /fi/promotions/leader { return 302 https://www.{{ domain }}/fi/promotions; }
#location = /en/promotions/leader { return 302 https://www.{{ domain }}/en/promotions; }
   {% endif -%}
   {% endfor -%}
   {% endif -%}
{% endif -%}

Мне интересно, что не так с шаблоном. Может, есть какое-нибудь лучшее решение для автоматизации этого?

...