Puis-je utiliser Jinja2 `map` filtre dans une Ansible jouer pour obtenir les valeurs à partir d'un tableau d'objets?

J'ai un plan pour la création de certaines instances EC2 et ensuite de faire certaines choses avec eux. Les textes pertinents sont à peu près comme:

- name: create ec2 instances
  ec2:
    id: '{{ item.name }}'
    instance_type: '{{ item.type }}'
  register: ec2
  with_items: '{{ my_instance_defs }}'
- name: wait for SSH
  wait_for:
    host: '{{ item.instances[0].private_ip }}'
    port: 22
  with_items: '{{ ec2.results }}'

Cela fonctionne comme prévu, mais je ne suis pas particulièrement heureux avec la item.instances[0].private_ip expression, en partie parce qu'il montre vraiment de gros objets dans le jeu résumé. J'aimerais avoir la with_items partie juste être un tableau d'adresses IP, plutôt qu'un tableau d'objets avec les tableaux d'objets à l'intérieur d'eux. En Python, je voudrais juste faire quelque chose comme:

ips = [r['instances'][0]['private_ip'] for r in ec2['results']]

Et puis je voudrais utiliser with_items: '{{ ips }}' dans la deuxième tâche.

Est-il une manière que je peux faire la même chose à l'aide d'un J2 filtre dans le fichier YAML de la pièce? Semble comme http://docs.ansible.com/ansible/playbooks_filters.html#extracting-values-from-containers pourrait être utile, mais je pense que cela suppose, j'ai un tableau de clés/indices/whatever.

OriginalL'auteur amacleod | 2016-12-22