web-dev-qa-db-fra.com

Comment exécuter une seule tâche dans Ansible Playbook?

Existe-t-il un moyen d'exécuter une seule tâche dans Ansible Playbook?

Par exemple, dans roles/hadoop_primary/tasks/hadoop_master.yml. J'ai "start hadoop job tracker services" tâche. Puis-je exécuter cette tâche?

fichier hadoop_master.yml:

---
# Playbook for  Hadoop master servers

- name: Install the namenode and jobtracker packages
  apt: name={{item}} force=yes state=latest
  with_items: 
   - hadoop-0.20-mapreduce-jobtracker
   - hadoop-hdfs-namenode
   - hadoop-doc
   - hue-plugins

- name: start hadoop jobtracker services
  service: name=hadoop-0.20-mapreduce-jobtracker state=started
  tags:
   debug
144
Billz

Vous devez utiliser tags: comme indiqué dans http://docs.ansible.com/playbooks_tags.html


Si vous avez un livre de lecture volumineux, il peut s'avérer utile de pouvoir exécuter une partie spécifique de la configuration sans exécuter le jeu en entier.

Les jeux et les tâches prennent en charge un attribut "tags:" pour cette raison.

Exemple:

tasks:

    - yum: name={{ item }} state=installed
      with_items:
         - httpd
         - memcached
      tags:
         - packages

    - template: src=templates/src.j2 dest=/etc/foo.conf
      tags:
         - configuration

Si vous souhaitez simplement exécuter les parties "configuration" et "packages" d'un très long playbook, vous pouvez le faire:

ansible-playbook example.yml --tags "configuration,packages"

Par ailleurs, si vous souhaitez exécuter un livre de lecture sans certaines tâches, vous pouvez procéder comme suit:

ansible-playbook example.yml --skip-tags "notification"

Vous pouvez également appliquer des balises aux rôles:

roles:
  - { role: webserver, port: 5000, tags: [ 'web', 'foo' ] }

Et vous pouvez également baliser les instructions include de base:

- include: foo.yml tags=web,foo

Ces deux fonctions ont pour fonction de marquer chaque tâche dans l’instruction include.

211
Mxx

Il y a un moyen, même s'il n'est pas très élégant:

  1. ansible-playbook roles/hadoop_primary/tasks/hadoop_master.yml --step --start-at-task='start hadoop jobtracker services'
  2. Vous obtiendrez une invite: Perform task: start hadoop jobtracker services (y/n/c)
  3. Réponse y
  4. Vous obtiendrez une invite suivante, appuyez sur Ctrl-C
75
Victor Ashik

J'aimerais pouvoir utiliser un rôle en tant qu'ensemble de tâches de sorte que, dans mon livre de jeu, je puisse choisir le sous-ensemble de tâches à exécuter. Malheureusement, le livre de lecture ne peut que les charger tous. Vous devez ensuite utiliser l'option --tags sur la ligne de commande pour choisir les tâches à exécuter. Le problème avec ceci est que toutes des tâches seront exécutées à moins que vous ne vous souveniez de définir --tags ou --skip-tags.

J'ai toutefois configuré certaines tâches avec une clause when: qui ne se déclenchera que si un var est défini.

par exemple.

# role/stuff/tasks/main.yml
- name: do stuff
  when: stuff|default(false)

Maintenant, cette tâche ne se déclenchera pas par défaut, mais uniquement si je configure le stuff=true

$ ansible-playbook -e '{"stuff":true}'

ou dans un livre de jeu:

roles:
- {"role":"stuff", "stuff":true}
6
ChePazzo

FWIW avec Ansible 2.2, on peut utiliser include_role :

playbook test.yml:

- name: test
  hosts:
    - 127.0.0.1
  connection: local
  tasks:
    - include_role:
        name: test
        tasks_from: other

puis dans roles/test/tasks/other.yml:

- name: say something else
  Shell: echo "I'm the other guy"

Et invoquer le playbook avec: ansible-playbook test.yml pour obtenir:

TASK [test : say something else] *************
changed: [127.0.0.1]
6
ddragosd

connaissez-vous gestionnaires ? Je pense que c'est ce que vous recherchez. Déplacez le redémarrage de hadoop_master.yml vers roles/hadoop_primary/handlers/main.yml:

- name: start hadoop jobtracker services
  service: name=hadoop-0.20-mapreduce-jobtracker state=started

et maintenant, appelez use notify dans hadoop_master.yml:

- name: Install the namenode and jobtracker packages
  apt: name={{item}} force=yes state=latest
  with_items: 
   - hadoop-0.20-mapreduce-jobtracker
   - hadoop-hdfs-namenode
   - hadoop-doc
   - hue-plugins
  notify: start hadoop jobtracker services
4
tedder42

Cela peut être facilement fait en utilisant les tags

L'exemple de balises est défini ci-dessous:

---
hosts: localhost
tasks:
 - name: Creating s3Bucket
   s3_bucket:
        name: ansiblebucket1234567890
   tags: 
       - createbucket

 - name: Simple PUT operation
   aws_s3:
       bucket: ansiblebucket1234567890
       object: /my/desired/key.txt
       src: /etc/ansible/myfile.txt
       mode: put
   tags:
      - putfile

 - name: Create an empty bucket
   aws_s3:
       bucket: ansiblebucket12345678901234
       mode: create
       permission: private
   tags:
       - emptybucket

pour exécuter les tags nous utilisons la commande

ansible-playbook creates3bucket.yml --tags "createbucket,putfile"
2
Nitesh Jain