2015-09-26 9 views

risposta

7

Ci sono limitazioni nei documenti Ansible quando si tratta di questo genere di cose - se esiste una best practice ufficiale, non l'ho mai trovata.

Un buon modo per mantenere i tuoi libri di gioco belli e leggibili è eseguire diversi giochi diversi contro l'host e chiamare il ruolo con diversi parametri in ciascuno.

La sintassi role: foo, var: blah mostrata in modo univoco in this description è un buon modo per passare i parametri e consente di avere una visione chiara di cosa sta succedendo. Per esempio:

- name: Run the docker role with docker_container_state=foo 
    hosts: docker-host 
    roles: 
    - { role: docker_container, docker_container_state: foo } 

- name: Run the docker role with docker_container_state=bar 
    hosts: docker-host 
    roles: 
    - { role: docker_container, docker_container_state: bar } 
5

io di solito uso includes per eseguire parte del ruolo più volte, se ho un layout decente di variabili (o un ruolo intera!). Vedere il seguente playbook di esempio, con il ruolo apply_state che contiene la cartella print_state.yml all'interno della cartella . Il trucco è passare l'oggetto all'interno, dopo di che è un pezzo di torta.

playbook.yml

- hosts: localhost 
    roles: 
    - { role: apply_state, states: [ state_one, state_two, state_three ] } 

ruoli/apply_state/attività/main.yml

- name: print all states! 
    include: print_state.yml state="{{ item }}" 
    with_items: "{{ states }}" 

ruoli/apply_state/attività/print_state.yml

- name: echo state 
    debug: msg="{{ state }}" 

Vedere l'output di ansible-playbook -i localhost, playbook.yml di seguito:

PLAY [localhost] *************************************************************** 

TASK [setup] ******************************************************************* 
ok: [localhost] 

TASK [apply_state : print all states!] ***************************************** 
included: /home/user/roles/apply_state/tasks/print_state.yml for localhost 
included: /home/user/roles/apply_state/tasks/print_state.yml for localhost 
included: /home/user/roles/apply_state/tasks/print_state.yml for localhost 

TASK [apply_state : echo state] ************************************************ 
ok: [localhost] => { 
    "msg": "state_one"                             
}                                  

TASK [apply_state : echo state] ************************************************ 
ok: [localhost] => { 
    "msg": "state_two"                             
}                                  

TASK [apply_state : echo state] ************************************************ 
ok: [localhost] => { 
    "msg": "state_three"                            
}                                  

PLAY RECAP ********************************************************************* 
localhost     : ok=7 changed=0 unreachable=0 failed=0