2017-10-04 4 views
0

J'ai fichier d'inventaire ansible comme suit:Comment trier mon inventaire en fonction de la variable?

[dc1] 
dc1-node0 ansible_host=10.1.0.1 seed=no 
dc1-node1 ansible_host=10.1.0.2 seed=yes 
dc1-node2 ansible_host=10.1.0.2 seed=yes 
[dc2] 
dc2-node ansible_host=10.2.0.1 seed=yes 
dc2-node1 ansible_host=10.2.0.2 seed=no 
dc2-node2 ansible_host=10.2.0.2 seed=yes 

je dois écrire un livre de jeu qui commencera le nœud de semences dans un premier temps puis d'autres nœuds. Encore une fois, l'utilisateur peut également fournir un seul nœud. Donc, mon playbook devrait être en mesure de vérifier s'il s'agit de graine ou de non-graine et de le faire en conséquence.

Jusqu'à présent, je suis capable d'écrire PlayBook comme suit:

- hosts: "{{ dbhosts }}" 
    serial: 1 
    vars: 
    vars_prompt: 
    - name: "dbhosts" 
    prompt: "Which hosts would you like to run?" 
    private: no 
    gather_facts: no 
    tasks: 
    - name: is dse already running? 
    shell: service dse status | grep dead | wc -l 
    register: svc_dse_dead 
    ignore_errors: true 
    - debug: 
     msg: "Is DSE service dead (0 = No; 1 = Yes)? Current status = {{svc_dse_dead.stdout}}" 
    - name: Start dse service 
    service: 
     name: dse 
     state: started 
    become: true 
    become_method: sudo 
    when: 
     - svc_dse_dead.stdout == "1"   
    - name: Pausing execution to stablize gossipping between nodes 
    pause: 
     minutes: 2 
    when: 
     svc_dse_dead.stdout == 1 

Mais ce Playbook n'est pas hôtes tri en fonction de nœuds de semences. Est-ce que je peux y arriver? S'il vous plaît conseiller quelques idées.

Merci

+0

Vous ne pouvez retrier la liste d'inventaire. Votre description en anglais n'est pas claire et votre code ne facilite pas la compréhension. Vous devriez probablement repenser vos objectifs. – techraf

Répondre

0

Par exemple, vous pouvez générer des groupes dynamiques:

--- 
- hosts: all 
    gather_facts: no 
    tasks: 
    - group_by: 
     key: "seed_{{ 'yes' if seed | default(false,boolean=true) | bool else 'no' }}" 

- hosts: seed_yes:seed_no 
    gather_facts: no 
    serial: 1 
    tasks: 
    - debug: msg="{{ seed | default('unknown') }}" 

serial: 1 est cruciale ici, comme seed_yes:seed_no modèle assurera yes -hosts sont à la première place, nous devons donc les itérer un par un.

Si la vitesse vous pouvez éviter est nécessaire serial, mais devra créer deux pièces identiques - un pour yes et un pour no:

--- 
- hosts: all 
    gather_facts: no 
    tasks: 
    - group_by: 
     key: "seed_{{ 'yes' if seed | default(false,boolean=true) | bool else 'no' }}" 

- hosts: seed_yes 
    gather_facts: no 
    tasks: 
    - debug: msg="{{ seed | default('unknown') }}" 

- hosts: seed_no 
    gather_facts: no 
    tasks: 
    - debug: msg="{{ seed | default('unknown') }}" 
+0

Wow! C'est génial. Merci. Où puis-je obtenir plus de documentation sur cette instruction si if dans groupby? Je ne l'ai pas encore trouvé. Merci. – AIR

+0

Dans la documentation de Jinja: http://jinja.pocoo.org/docs/2.9/templates/#if-expression –