3 votes

Utilisez une variable dans le modèle Ansible

J'ai besoin de créer un fichier via un modèle jinja mais je rencontre quelques problèmes.

Ma variable

my:
  acl:
        - name: test
          allow:
            - 0.0.0.0
          deny:
            - 1.1.1.1
        - name: china
          allow:
            - 1.2.3.4
          deny:
            - 10.10.10.10

Ma tâche:

- name: Créer le fichier ACL
  template:
    force: yes
    src: acl.conf.j2
    dest: "/etc/nginx/conf.d/{{ item.name }}.conf"
  become: yes
  with_items:
    - "{{ my.acl }}"

Mon modèle

{% for allow in my.acl %}
allow {{allow.allow}};
{% endfor %}
{% for deny in my.acl %}
deny {{deny.deny}};
{% endfor %}

Résultat china.conf

allow ['0.0.0.0'];
allow ['1.2.3.4'];
deny ['1.1.1.1'];
deny ['10.10.10.10'];

Résultat test.conf

allow ['0.0.0.0'];
allow ['1.2.3.4'];
deny ['1.1.1.1'];
deny ['10.10.10.10'];

Dans le fichier china, je ne veux que les adresses IP définies dans l'objet china sans les [' ']

Comment puis-je faire cela?

3voto

Vladimir Botka Points 10170

Réparez le modèle

{% for allow in item.allow %}
autoriser {{ allow }};
{% endfor %}
{% for deny in item.deny %}
refuser {{ deny }};
{% endfor %}

-1voto

gary lopez Points 1039

Ajoutez un if et imprimez le premier objet dans la liste allow et deny:

{% for allow in my.acl %}
  {% if allow.name == 'china' %}
    allow {{ allow.allow[0] }};
  {% endif %}
{% endfor %}
{% for deny in my.acl %}
  {% if allow.name == 'china' %}
    deny {{ deny.deny[0] }};
  {% endif %}
{% endfor %}

Si les listes allow et deny auront plus d'un élément, utilisez ceci:

{% for allow in my.acl %}
  {% if allow.name == 'china' %}
    {% for ip in allow.allow %}
      allow {{ ip }};
    {% endfor %}
  {% endif %}
{% endfor %}
{% for deny in my.acl %}
  {% if deny.name == 'china' %}
    {% for ip in deny.deny %}
      deny {{ ip }};
    {% endfor %}
  {% endif %}
{% endfor %}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X