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.
Vous ne pouvez pas définissez une variable accessible au niveau du livre de lecture (variable globale) depuis le jeu.
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
:
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):
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