On 06/01/2014 13:29, Greg wrote:Greg,
> 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...
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.
Je ne comprends pas bien le besoin derrière cette question mais je tente
> et comment calculer les variables à partir du prénom et du
> nom (en utf-8).
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
--
Michel Blanc
{ :github => "@leucos", :twitter => "@b9m", :gpg => "0X24B35C22" }
_______________________________________________
Liste de diffusion du FRsAG
http://www.frsag.org/