Selon la documentation Ansible, un Playbook est:
... la base d'un système de gestion de configuration et de déploiement multi-machines vraiment simple, contrairement à tout ce qui existe déjà, et qui est très bien adapté au déploiement d'applications complexes.
Et, encore une fois, selon ces mêmes documents, les rôles sont:
... moyens de charger automatiquement certains fichiers vars_files, tâches et gestionnaires basés sur une structure de fichiers connue. Le regroupement du contenu par rôles permet également de partager facilement les rôles avec d'autres utilisateurs.
Cependant, la distinction entre ceux-ci et leurs différents cas d'utilisation n'est pas immédiatement évidente pour moi. Par exemple, si je configure mon /etc/ansible/hosts
fichier pour qu'il ressemble à:
[databases]
mydb01.example.org
mydb02.example.org
[mail_servers]
mymail01.example.org
mymail_dr.example.org
... alors qu'est-ce que cette " [databases]
" entrée ... un rôle ? Ou le nom d'un fichier YAML de playbook quelque part? Ou autre chose?!?
Si quelqu'un pouvait m'expliquer les différences à ce sujet, ma compréhension d'Ansible serait grandement améliorée!
- Playbook vs Role vs
[databases]
et entrées similaires dans/etc/ansible/hosts
- Si les Playbooks sont définis à l'intérieur des fichiers YAML, où sont définis les rôles?
- En plus de la
ansible.cfg
vie sur le serveur Ansible, comment ajouter / configurer Ansible avec les playbooks / rôles disponibles? Par exemple, lorsque je coursansible-playbook someplaybook.yaml
, comment Ansible sait-il où trouver ce playbook?
la source
tasks
faire des trucs.playbooks
organiser et lancer des tâches.roles
organiser des groupes de tâches, de gestionnaires, etc. qui exécutent une fonction particulière. Certainsplaybook
sont nécessaires pour lancer lerole
(s). Comment appelleriez-vous une collection deroles
etplaybooks
? Disons par exemple celui qui gère la configuration de tous les hébergeurs de votre site?Réponses:
[databases]
est un nom unique pour un groupe d'hôtes. Il vous permet de référencer plusieurs hôtes par un seul nom.Le rôle est un ensemble de tâches et de fichiers supplémentaires pour configurer l'hôte pour qu'il serve un certain rôle .
Playbook est un mappage entre les hôtes et les rôles.
L'exemple de la documentation décrit un exemple de projet. Il contient deux choses:
site.yml
,webservers.yml
,fooservers.yml
Sont Playbooks.roles/common/
etroles/webservers/
contiennent des définitionscommon
et deswebservers
rôles en conséquence.Dans playbook (
webservers.yml
), vous avez quelque chose comme:Ils sont définis dans des
roles/*
répertoires. Les rôles sont définis principalement à l'aide de fichiers YAML, mais peuvent également contenir des ressources de tous types (files/
,templates/
). Selon la documentation, la définition du rôle est structurée de cette façon:Le fichier le plus important est
roles/x/tasks/main.yml
ici, vous définissez les tâches qui seront exécutées lorsque le rôle est exécuté.Cherchera un playbook dans le répertoire actuel.
Cherchera un playbook dans le
somedir/somedir/
répertoire.Il est de votre responsabilité de mettre votre projet avec tous les playbooks et rôles sur le serveur. Ansible n'a rien à voir avec ça.
la source
webservers.yml
livre de jeu associe les[webservers]
hôtes au rôlecommon
etwebservers
. Mais qu'est-ce qui est exactement inclus avec lecommon
rôle? Il n'y a aucun moyen de définir cela dans les répertoires, y a-t-il donc généralement des fichiers YAML dans ces "répertoires de rôle"? Merci encore!Les rôles sont un moyen de regrouper des tâches dans un seul conteneur. Vous pourriez avoir un rôle pour configurer MySQL, un autre pour configurer Postfix, etc.
Un playbook définit ce qui se passe et où . C'est l'endroit où vous définissez les hôtes (groupes d'hôtes, voir ci-dessous) et les rôles qui seront appliqués à ces hôtes.
[databases]
et les autres entrées de votre inventaire sont des groupes d'hôtes. Les groupes d'hôtes définissent un ensemble d'hôtes sur lesquels la lecture sera exécutée.Une pièce de théâtre est un ensemble de tâches ou de rôles (ou les deux) dans un livre de jeu. Dans la plupart des cas (et exemples), un playbook ne contiendra qu'une seule lecture. Mais vous pouvez en avoir autant que vous le souhaitez. Cela signifie que vous pourriez avoir un playbook qui exécutera le rôle
postfix
sur le groupe d'hôtesmail_servers
et le rôlemysql
sur le groupe d'hôtesdatabases
:Dans Ansible, à peu près tout est défini dans YAML, cela compte pour les rôles et les playbooks.
AFAIK vous devez fournir le chemin d'accès au playbook lors de l'appel
ansible-playbook
. Attendrais-ansible-playbook someplaybook.yaml
je doncsomeplaybook.yaml
à être dans votre répertoire actuel. Mais vous pouvez fournir le chemin complet:ansible-playbook /path/to/someplaybook.yaml
la source
C'est une question de terminologie / sémantique. Cela peut être subjectif, même s'il existe une définition de base.
Mon point de vue est le suivant:
Tout système de gestion / déploiement de configuration a:
source data
- données utilisées pour créer la configuration de l'hôte cibletarget data
- données utilisées pour identifier les hôtes ciblesconfig changes
- liste / ensemble de règles / actions que nous appliquons avecsource data
l'hôte cible en fonction detarget data
En termes Ansible:
source data
- est les différents endroits où nous pouvons mettre des données -group_vars
,playbook
vars,role
vars, etc. variable pendantansible
/ansible-playbook
exécutiontarget data
- est l'inventaire (Et, il est également possible de définir des variables d'inventaire / de groupe d'hôtes dans l'inventaire!)config changes
- ansible a 4 niveaux d'abstraction pour cela:role
s /task
s / listes de tâches (et des tâches spéciales telles quehandlers
)Du point de vue «logiciel», le rôle doit être suffisamment générique pour être réutilisé .
De plus, dans certaines organisations (plutôt grandes), les `` rôles '' sont fournis par le groupe A, alors qu'ils sont utilisés dans les playbooks gérés par le groupe B.
résumé
Tout ce qui précède permet de regrouper des configurations similaires - dans un fichier
role
. regrouper les sous-systèmes / composants associés en un seulplaybook
. En outre, la valeur mentionnant, 1 article YAML dans un livre de jeux (y comprishosts:
et soit outasks
,pre_tasks
,post_tasks
,roles
) est appeléplay
Maintenant pour votre question:
Oui, c'est déroutant au début.
Vous connectez généralement votre
source data
à la sémantique de votre rôle, donc quand vous voyez que ce rôlesetup_db
est appliqué dans un jeu sur un groupe d'hôtes associé (par exempledb_hosts
), mais aplay
peut être exécuté sur une union de plusieurs groupes d'hôtes. C'est juste une question de convention vs flexibilité.PS
Veuillez m'écrire si cela a ajouté à la confusion ou clarifié. Merci.
la source
Gardez également à l'esprit qu'un playbook peut appeler plus d'un rôle si un méta-fichier est utilisé qui est destiné à affecter les différents rôles.
Exemple de Playbook: dual_role-playbook.yml
Le dossier de rôle et le schéma de fichiers ressembleront à ceci:
la source
Tout simplement:
Un playbook est comme le programme principal, il contient des instructions complètes pour terminer le travail. Cependant, pour les grands projets, il n'est pas souhaitable d'y mettre réellement tous les détails. Vous avez donc besoin d'un rôle.
Un rôle est un sous-programme et atteint généralement un objectif, par exemple configurer un serveur de base de données. Vous pouvez le mettre dans un
roles/
répertoire ou télécharger des rôles tiers en fournissant des URIrolesfile.yml
et en demandant à ansible-galaxy de les télécharger pour vous.Le
[database]
est un groupe d'hôtes défini dans le fichier d'inventaire qui répertorie les hôtes appartenant audatabase
groupe. Vous pouvez également spécifier un groupe de serveurs Web en spécifiant quelque chose commeGrouper
web
oudatabase
peut ensuite être utilisé dans des playbooks ou des rôles pour spécifier les hôtes à appliquer.Les groupes peuvent également être utilisés dans la commande
ansible
pour exécuter des commandes ad hoc.la source