Configurer Ansible rôles ayant à charge des rôles
Le problème qui est décrit, avec un exemple:
Il y a deux rôles:
mailserver
: une base configuration du serveur de messageriemailinglist
: liste de diffusion de l'application
Le logiciel de liste de diffusion besoins le serveur de courrier pour le transport des e-mails entrants à la liste de diffusion du logiciel "virtual boîte de réception". Cela nécessite un peu de configuration du serveur de messagerie. Mais le serveur ne sait pas sur la liste de diffusion rôle, ni les autres rôles avec les mêmes exigences de configuration.
Ce que j'aimerais faire, c'est ceci:
mailinglist
(et d'autres postes similaires) stocke la configuration de transport dans une variabletransport_config
. Ce pourrait être une "carte de transport" comme $email => $bobine.mailinglist
dépend de lamailserver
rôle.mailserver
configure c'est "transport" à l'aide de la variabletransport_config
.
Est-il un moyen de faire quelque chose comme cela dans Ansible? Ou une autre solution pour ce problème? C'est pas possible d'utiliser rôle des variables comme {role: mailserver, transport_config: ...}
, comme il peut y avoir plus d'un rôle en fonction sur le serveur de courrier.
Ce que je peux penser est une solution de contournement: Le serveur de courrier lit/analyse d'un répertoire de configuration où les cartes de transport sont définis. mailinglist
et d'autres rôles ajouter des fichiers dans ce répertoire. Le problème ici est que cela nécessite souvent une "configuration builder" qui lit ce type de configuration des répertoires et génère le fichier de configuration principal.
- vous avez déclaré que vous ne pouvez pas utiliser
dotdee
ouassemble
parce qu'ils ne peuvent assembler des lignes. Pouvez-vous nous donner un exemple de la syntaxe de configuration dont vous avez besoin pour votremailserver
? - C'est quelque chose comme
transport_config = file:/etc/mailserver/transport_foo, file:/etc/mailserver/transport_bar
. - Sont ligne continuations permis dans la syntaxe? Comme finition une ligne avec " \ " pour continuer le contenu de la ligne suivante? Peut-être, comme ce que vous pourriez utiliser
assemble
de mise en place des transports dans une ligne par lui-même avec une continuation.
Vous devez vous connecter pour publier un commentaire.
En réponse à votre commentaire sur "configuration builder", voir la assembler ansible module. La partie la plus délicate peut-être tous les fichiers en un seul lieu, avant d'exécuter le montage du module.
Sinon, tima proposition de la hôte_ et group_vars de sens.
transport_config = foo:bar, foo2:bar2, ...
.Vous pouvez accomplir cela en utilisant rôle des dépendances.
Dans le
mailinglist
rôle en vertu de l'roles/mailinglist/meta/main.yml
, ajouter quelque chose comme ceci:Faire de même pour tous les autres rôles similaires.
mailserver
peuvent avoir leurs propres dépendances dans leur propremeta/main.yml
et latransport_config
variable varient en conséquence. Veuillez reconsidérer la réponse.Examiner la gestion de la
mailserver
fichier de configuration avec quelque chose commedotdee
:dotdee
référentielAvec
dotdee
, de l'assemblage final de votre fichier de configuration à partir d'une série de fichiers placés dans un.d
répertoire.Dans votre cas, le
mailinglist
rôle et d'autres en fonction demailserver
baisserait de configuration des extraits dans un.d
répertoire (créé par lamailserver
rôle) et exécuter une commande pour mettre à jour lemailserver
fichier de configuration commedotdee --update /path/to/mailserver/conf
.assemble
module de Ansible, mais souffre de la même faiblesse, c'est à dire qu'il ne peut pas assembler les lignes, seuls les fichiers.Je sais que c'est long répondu, mais je viens seulement de trouver une solution viable, et c'est un peu sournois.
- Je utiliser un troisième
settings
rôle, qui n'a pas de tâches, seules les variables dans undefaults/main.yml
. Les docs sont un peu vague, mais les valeurs ici se sont répandus à tous les dépendante rôles, de sorte que si les deux rôles dépendent desettings
par le biais de leurmeta/main.yml
fichiers, à la fois d'obtenir un ensemble commun de valeurs. Ce sont substituables dans les voies habituelles, par le biais d'ungroup_vars
fichier.La surprise a été que, depuis que, oui, le
settings
rôle est utilisé plus d'une fois, il n'a pas d'importance car il n'y a pas de tâches, et que les données de flux à partir de là jusqu'à la chaîne de dépendances.C'est une nouvelle forme de flux de données en Ansible que je ne connaissais pas était possible.
Je ne suis pas assez familier avec vos applications ici pour être sûr, mais je pense que vous pouvez être mieux servi à l'aide d'hôte ou un groupe de variables à passer votre configuration dans votre rôles. Les rôles peuvent tenir vos paramètres par défaut et al et s'attendent à récupérer accueil/groupe de valeurs de variables que vous définissez sur une base individuelle. Cela peut signifier le traitement de chaque instance de l'application en tant que hôte, plutôt que psychique de l'hôte. Comment le modèle de ça dépend de beaucoup de subtilités dans votre flux de travail, la configuration et l'application.
Cette récente fil évoque certains aspects de ce genre de chose: https://groups.google.com/forum/#!topic/ansible-projet/yrnsx2Mw6rc