Comment obtenir le nom d'hôte de la machine actuelle tel que défini dans le fichier d'hôtes Ansible?

166

Je mets en place un playbook Ansible pour configurer quelques serveurs. Il y a quelques tâches que je souhaite exécuter uniquement si l'hôte actuel est mon hôte de développement local, nommé «local» dans mon fichier hosts. Comment puis-je faire ceci? Je ne le trouve nulle part dans la documentation.

J'ai essayé cette instruction when, mais elle échoue car ansible_hostnameelle correspond au nom d'hôte généré lors de la création de la machine, et non à celui que vous définissez dans votre fichier d'hôtes.

- name: Install this only for local dev machine
  pip: name=pyramid
  when: ansible_hostname == "local"
Tanner Semerad
la source

Réponses:

271

La variable nécessaire est inventory_hostname.

- name: Install this only for local dev machine
  pip: name=pyramid
  when: inventory_hostname == "local"

Il est quelque peu caché dans la documentation au bas de cette section .

Tanner Semerad
la source
2

Vous pouvez limiter la portée d'un playbook en changeant l'en-tête d'hôtes dans ses jeux sans compter sur votre étiquette d'hôte spéciale «local» dans votre inventaire. Localhost n'a pas besoin d'une ligne spéciale dans les inventaires.

- name: run on all except local
  hosts: all:!local
bbaassssiiee
la source
hosts: !localhostfonctionne probablement aussi comme par exemple --limit '!dev'fonctionne
timdiels
0

Ceci est une alternative:

- name: Install this only for local dev machine
  pip: name=pyramid
  delegate_to: localhost
bbaassssiiee
la source