On 06/01/2014 13:29, Greg wrote:
et je suis confronté à vouloir faire une utilisation détournée. Je cherche une bonne pratique ou un retour d'XP si vous avez. Je suis en train de créer un playbook de création de compte d'employé qui se résume à :
- sur serveurA, créer un compte mail via postfixadmin (donc du SQL)
- sur serveurA, créer un compte jabber
- sur serveurB, créer un compte Redmine
- sur serveurB, créer un compte gitolite
- sur serveurC, abonner l'adresse mail à 4 mailing-list mailman
- sur serveurD, attribuer un numéro de téléphone sur le serveur VoIP
Chacune de ces étapes serait un role au sens Ansible, pour qu'un user puisse par exemple avoir tous les roles sauf un numéro de téléphone.
Sauf que Ansible a été créé pour configurer une grappe de serveur, ce qui me fait me poser des questions c'est d'avoir une tâche par serveur...
Greg,
Un moyen serait d'avoir une liste de users (disons "accounts") dans group_vars/all (ou dans un endroit plus approprié) et d'exécuter tes roles :
- name: Jabber & Postifx hosts: serveurA roles: - postfixaccounts - jabberaccounts
- name: Redmine & Gitolite provisionning hosts: serveurB roles: - postfix - jabber ...
puis de looper dans tes rôles sur la liste de comptes (roles/postfix/tasks/accounts.yml) :
- name: Account provisionning shell : postfixadmin ... {{ item.nom }}{{ item.prenom }} with_items: accounts
C'est robuste, idempotent (tu peux provisionner tous tes serveurs et leurs comptes d'un coup de baguette magique), mais potentiellement super long si tu as beaucoup d'utilisateurs.
Pour palier à ce dernier problème, tu peux écraser accounts quand tu invoques ton playbook :
--extra-vars '{ "accounts": { "nom": "gargamel", "prenom":"lucien" }}'
et acccounts ne contiendra (pour l'invocation) que ce user.
et comment calculer les variables à partir du prénom et du nom (en utf-8).
Je ne comprends pas bien le besoin derrière cette question mais je tente quand même. Si on repart sur le playbook dédié pour créer {un,tous les} utilisateur, tu peux ensuite les concatener dans une tâche comme ça :
{{item.nom}}{{item.prenom}} {{item.nom}}.{{item.prenom}} {{item.nom}}_oulala_{{item.prenom}} ...
voire les tripoter avec un filtre jinja, extraire un range à grand coup de python (pas sûr de moi la dessus) ou faire mouliner un script en local_action avec un register à la clef (ok, c'est un hack), ou mieux, écrire ton propre filtre Jinja (http://docs.ansible.com/developing_plugins.html#filter-plugins).
J'espère avoir compris ton besoin et donné quelques pistes.
A+
M