2016-07-13 32 views

risposta

25

Non sono a conoscenza di questa funzione, ma è possibile utilizzare i tag per eseguire solo un ruolo dal proprio playbook.

roles: 
    - {role: 'mysql', tags: 'mysql'} 
    - {role: 'apache', tags: 'apache'} 

ansible-playbook webserver.yml --tags "apache" 
12

Non esiste una cosa del genere in Ansible, ma se si tratta di un uso spesso caso per voi, provate questo script.
metterlo da qualche parte nel PATH consultabile sotto il nome ansible-role:

#!/bin/bash 

if [[ $# < 2 ]]; then 
    cat <<HELP 
Wrapper script for ansible-playbook to apply single role. 

Usage: $0 <host-pattern> <role-name> [ansible-playbook options] 

Examples: 
    $0 dest_host my_role 
    $0 custom_host my_role -i 'custom_host,' -vv --check 
HELP 
    exit 
fi 

HOST_PATTERN=$1 
shift 
ROLE=$1 
shift 

echo "Trying to apply role \"$ROLE\" to host/group \"$HOST_PATTERN\"..." 

export ANSIBLE_ROLES_PATH="$(pwd)/roles" 
export ANSIBLE_RETRY_FILES_ENABLED="False" 
ansible-playbook "[email protected]" /dev/stdin <<END 
--- 
- hosts: $HOST_PATTERN 
    roles: 
    - $ROLE 
END 
5

Si potrebbe anche verificare ansible-toolbox repository. Essa vi permetterà di utilizzare qualcosa come

ansible-role --host 192.168.0.10 --gather --user centos --become my-role 
2

ho scritto un piccolo plug-in Ansible, chiamato auto_tags, che genera dinamicamente per ogni ruolo nel playbook un tag con lo stesso nome. Lo puoi trovare here.

Dopo averlo installato (le istruzioni sono in sostanza di cui sopra) si può quindi eseguire un ruolo specifico con:

ansible-playbook -i "192.168.0.10" --tags "name_of_role"

Problemi correlati