Merci Michel, c'est comme ça qu'il faut faire en effet, je suis partis sur le mauvais chemin !

Pour l'utf8, c'est que dans le fichier vars je voulais mettre le nom complet :
- accounts:
 - Jérémy Dupont
 - Joël Martin
...

et transformer ces variables dans le playbook. Un filtre jinja ou un module me semble obligatoire ...

Greg



Le 6 janvier 2014 15:06, Michel Blanc <mblanc.networks@gmail.com> a écrit :
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
--
Michel Blanc
{ :github => "@leucos", :twitter => "@b9m", :gpg => "0X24B35C22" }
_______________________________________________
Liste de diffusion du FRsAG
http://www.frsag.org/