2 votes

Utiliser la valeur d'une variable CLI comme nom d'une variable host_vars ?

Existe-t-il un moyen d'utiliser la valeur d'une variable Ansible comme nom d'une autre variable afin de pouvoir extraire une valeur de sa liste ?

host_vars :

this:
  does: walk
  says: hi

that:
  does: run
  says: hello

Dans l'interface de programmation, lorsque j'exécute le playbook, j'ajoute -e="thing=this" .

Dans le cahier de jeu, j'ai essayé toutes sortes de choses pour étendre la variable thing à sa valeur this puis utiliser this pour extraire la valeur de does dans le host_vars archivo.

L'utilisation directe du nom de la variable fonctionne évidemment :

- name: Check what the thing does
  debug:
    msg: "{{ this['does'] }}"

Mais ce n'est pas le cas des suivants :

{{ thing['does'] }}
{{ {{ thing }}['does'] }}

Celles-ci, ainsi que plusieurs autres itérations que j'ai essayées, provoquent toutes une erreur ou affichent la chaîne littérale.

2voto

Vladimir Botka Points 10170

Vous avez besoin du vars pour s'adresser indirectement aux variables. Voir aussi

shell> ansible-doc -t lookup vars

Par exemple,

    - debug:
        msg: "{{ lookup('vars', thing).does }}"

devrait donner (abrégé)

shell> ansible-playbook pb.yml -e "thing=this"
  ...
  msg: walk

Exemple d'un playbook complet pour les tests

- hosts: localhost

  vars:

    this:
      does: walk
      says: hi
    that:
      does: run
      says: hello

  tasks:

    - debug:
        msg: "{{ lookup('vars', thing).does }}"

Vous pouvez encore simplifier le code en plaçant toutes les déclarations dans le fichier vars . Par exemple, dans le group_vars/all

shell> cat group_vars/all/thing.yml
this:
  does: walk
  says: hi

that:
  does: run
  says: hello

_thing: "{{ lookup('vars', thing) }}"

Ensuite, le cahier de jeu simplifié ci-dessous donne les mêmes résultats

- hosts: localhost
  tasks:
    - debug:
        var: _thing.does

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