web-dev-qa-db-fra.com

Le modèle Ansible ajoute un «u» au tableau dans le modèle

J'ai le vars suivant dans mon livre de jeu ansible j'ai la structure suivante

domains:
  - { main: 'local1.com', sans: ['test.local1.com', 'test2.local.com'] }
  - { main: 'local3.com' }
  - { main: 'local4.com' }

Et avoir ce qui suit à l'intérieur de mon conf.j2

{% for domain in domains %}
  [[acme.domains]]

    {% for key, value in domain.iteritems() %}
      {% if value is string %}
        {{ key }} = "{{ value }}"
      {% else %}
        {{ key }} = {{ value }}
      {% endif %}
    {% endfor %}
{% endfor %}

Maintenant, quand je vais dans le VM et que je vois le fichier, j'obtiens ce qui suit:

Sortie

[[acme.domains]]
  main = "local1.com
  sans = [u'test.local1.com', u'test2.local.com']
[[acme.domains]]
  main = "local3.com"
[[acme.domains]]
  main = "local4.com"

Notez le à l'intérieur du tableau sans.

sortie Excpeted

[[acme.domains]]
  main = "local1.com"
  sans = ["test.local1.com", "test2.local.com"]
[[acme.domains]]
  main = "local3.com"
[[acme.domains]]
  main = "local4.com"

Pourquoi cela se produit-il et comment puis-je y remédier?

10
Steve

Vous obtenez u' ' car vous imprimez l'objet contenant les chaînes Unicode et voici comment Python le rend par défaut.

Vous pouvez le filtrer avec list | join filtres:

{% for domain in domains %}
[[acme.domains]]
{% for key, value in domain.iteritems() %}
{% if value is string %}
  {{ key }} = "{{ value }}"
{% else %}
  {{ key }} = ["{{ value | list | join ('\',\'') }}"]
{% endif %}
{% endfor %}
{% endfor %}

Ou vous pouvez compter sur le fait que la sortie de chaîne après sans = est un JSON et le rendre avec to_json filtre:

{{ key }} = {{ value | to_json }}

Soit vous obtiendrez:

[[acme.domains]]
  main = "local1.com"
  sans = ["test.local1.com", "test2.local.com"]
[[acme.domains]]
  main = "local3.com"
[[acme.domains]]
  main = "local4.com"

Mais le premier est plus polyvalent.

15
techraf