Supposons que j'ai un rôle appelé "Apache"
Maintenant, je veux exécuter ce rôle sur l'hôte 192.168.0.10 à partir de la ligne de commande de Ansible Host.
ansible-playbook -i "192.168.0.10" --role "path to role"
Y-a-t-il un moyen de faire ça?
Je ne suis pas au courant de cette fonctionnalité, mais vous pouvez utiliser des balises pour exécuter un seul rôle à partir de votre Playbook.
roles:
- {role: 'mysql', tags: 'mysql'}
- {role: 'Apache', tags: 'Apache'}
ansible-playbook webserver.yml --tags "Apache"
Avec Ansible 2.7, vous pouvez le faire:
$ cd /path/to/ansible/
$ ansible localhost -m include_role -a name=<role_name>
localhost | SUCCESS => {
"changed": false,
"include_variables": {
"name": "<role_name>"
}
}
localhost | SUCCESS => {
"msg": "<role_name>"
}
Cela exécutera le rôle de/chemin/vers/ansible/rôles ou le chemin du rôle configuré.
Lisez plus ici: https://github.com/ansible/ansible/pull/43131
Ansible n’existe pas, mais s’il s’agit souvent d’un cas d’utilisation, essayez ce script.
Mettez-le quelque part dans votre chemin interrogeable sous le nom 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 "$@" /dev/stdin <<END
---
- hosts: $Host_PATTERN
roles:
- $ROLE
END
Vous pouvez également vérifier ansible-toolbox repository. Cela vous permettra d'utiliser quelque chose comme
ansible-role --Host 192.168.0.10 --gather --user centos --become my-role
J'ai écrit un petit plugin Ansible, appelé auto_tags
, qui génère dynamiquement pour chaque rôle de votre livre de jeu une balise du même nom. Vous pouvez le trouver ici .
Après l'avoir installé (les instructions sont dans le Gist ci-dessus), vous pouvez ensuite exécuter un rôle spécifique avec:
ansible-playbook -i "192.168.0.10" --tags "name_of_role"
dans ansible 2.8 cela fonctionne légèrement différent
wohlgemuth@leela:~/workspace/rtmtb-ansible/kvm-cluster$ ansible localhost -m import_role -a name=rtmtb
[WARNING]: No inventory was parsed, only implicit localhost is available
localhost | CHANGED => {
"changed": true,
"checksum": "d31b41e68997e1c7f182bb56286edf993146dba1",
"dest": "/root/.ssh/id_rsa.github",
"gid": 0,
"group": "root",
"md5sum": "b7831c4c72f3f62207b2b96d3d7ed9b3",
"mode": "0600",
"owner": "root",
"size": 3389,
"src": "/home/wohlgemuth/.ansible/tmp/ansible-tmp-1561491049.46-139127672211209/source",
"state": "file",
"uid": 0
}
localhost | CHANGED => {
"changed": true,
"checksum": "1972ebcd25363f8e45adc91d38405dfc0386b5f0",
"dest": "/root/.ssh/config",
"gid": 0,
"group": "root",
"md5sum": "f82552a9494e40403da4a80e4c528781",
"mode": "0644",
"owner": "root",
"size": 147,
"src": "/home/wohlgemuth/.ansible/tmp/ansible-tmp-1561491049.99-214274671218454/source",
"state": "file",
"uid": 0
}
Avez-vous essayé ça? c'est super cool. J'utilise 'update-os' au lieu de 'Apache' pour donner un exemple plus significatif. J'ai un rôle appelé, disons ./roles/update-os/
dans mon ./
j'ajoute un fichier appelé ./role-update-os.yml
qui ressemble à ceci:
#!/usr/bin/ansible-playbook
---
- hosts: all
gather_facts: yes
become: yes
roles:
- update-os
Rendre ce fichier exécutable (chmod +x role-update-os.yml
). Maintenant, vous pouvez exécuter et limiter à ce que vous avez dans votre inventaire ./update-os.yml -i inventory-dev --limit 192.168.0.10
la limite à laquelle vous pouvez également transmettre les noms de groupe.--limit web,db
> web and db est le groupe défini dans votre inventaire.--limit 192.168.0.10,192.168.0.201
;./inventory-dev
[web]
192.168.0.10
[db]
192.168.0.201
Notez que vous pouvez configurer les stratégies ssh-keys et sudoers pour qu'elles puissent s'exécuter sans avoir à taper le mot de passe - idéal pour l'automatisation, cela entraîne des problèmes de sécurité. par conséquent, vous devez analyser votre environnement pour voir s'il convient.