web-dev-qa-db-fra.com

Ansible: Comment déclarer une variable globale dans playbook?

Comment puis-je déclarer une variable globale dans playbook Ansible. J'ai cherché dans google et trouvé la solution ci-dessous, mais cela ne fonctionne pas comme prévu.

- hosts: all
  vars:
    prod-servers:
     - x.x.x.x
     - x.x.x.x


- hosts: "{{prod-servers}}"
  tasks:
  - name: ping
    action: ping

Lorsque j'essaie le code ci-dessus, il est indiqué que la variable prod-servers n'est pas définie.

5
Shibankar

Vous ne pouvez pas définissez une variable accessible au niveau du livre de lecture (variable globale) depuis le jeu.

Portées variables

Ansible a 3 champs d'application principaux:

  • Global: défini par config, les variables d'environnement et la ligne de commande 

  • Jeu: chaque jeu et structures contenues, entrées vars (vars; vars_files; vars_Prompt), rôles par défaut et vars.

  • Hôte: variables directement associées à un hôte, telles que inventaire, include_vars, faits ou résultats de tâches enregistrées

Tout ce que vous déclarez dans un jeu ne peut donc être qu'une variable de jeu ou un fait (hôte).


Pour définir une variable que vous pouvez utiliser dans la déclaration hosts:

  • lancez ansible-playbook avec l'option --extra-vars et transmettez la valeur dans l'argument;

ou pour obtenir la même fonctionnalité (décider sur quels hôtes lancer une lecture, à partir d'une lecture précédente):

5
techraf

ce que vous semblez vouloir, c’est un inventaire ( http://docs.ansible.com/ansible/latest/intro_inventory.html ), on dirait que vous avez une liste statique d’adresses IP pouvant être des serveurs de prod (ou dev , ou peu importe), vous pouvez donc créer un inventaire statique.

Lors de votre deuxième partie, vous souhaitez utiliser la liste des adresses IP en tant qu'hôtes pour exécuter les tâches, ce n'est pas ce à quoi Ansible s'attend. Après le mot-clé "hosts" dans une déclaration de lecture, Ansible attend un nom de groupe de l'inventaire.

Si, sur l'opossite, vos serveurs de production changent de temps en temps, vous devrez peut-être créer un inventaire dynamique. Vous pouvez consulter des exemples dans https://github.com/ansible/ansible/tree/devel/contrib/inventory (par exemple, il existe des exemples d'inventaire dynamique basé sur EC2 d'Amazon ou de vsphere)

cordialement

0
Jordi Molina