web-dev-qa-db-fra.com

comment exécuter une tâche particulière sur un hôte spécifique dans ansible

le contenu de mon fichier d'inventaire -

[webservers]
x.x.x.x ansible_ssh_user=ubuntu

[dbservers]
x.x.x.x ansible_ssh_user=ubuntu

dans mon fichier de tâches qui a un rôle commun, c'est-à-dire qu'il s'exécutera sur les deux hôtes, mais je souhaite exécuter une tâche suivante sur les serveurs Web de l'hôte, pas dans les serveurs de base de données définis dans le fichier d'inventaire.

- name: Install required packages
  apt: name={{ item }} state=present
  with_items:
    - '{{ programs }}'
  become: yes
  tags: programs

le module est-il utile ou existe-t-il d'une autre manière? Comment pourrais-je faire ça? 

15
Prem Sompura

Si vous souhaitez exécuter votre rôle sur tous les hôtes mais seulement une tâche limitée au groupe webservers, alors - comme vous l'avez déjà suggéré - when est votre ami.

Vous pouvez définir une condition comme:

when: inventory_hostname in groups['webservers']
31
udondan

Merci, cela m'aide aussi.

fichier hôtes:

[production]
Host1.dns.name

[internal]
Host2.dns.name

fichier requirements.yml:

- name: install the sphinx-search rpm from a remote repo on x86_64 - internal Host
  when: inventory_hostname in groups['internal']
  yum:
    name: http://sphinxsearch.com/files/sphinx-2.2.11-1.rhel7.x86_64.rpm
    state: present

- name: install the sphinx-search rpm from a remote repo on i386 - Production
  when: inventory_hostname in groups['production']
  yum:
    name: http://sphinxsearch.com/files/sphinx-2.2.11-2.rhel6.i386.rpm
    state: present
2
Albert