On 29/10/2014 19:59, Jonathan Leroy wrote:
> Bonsoir,
> 
> Un exemple concret : mise à jour de tous les serveurs disposants de
> PHP 5.5 vers sa dernière version (5.5.18).
> Dans l'outil en question, je recherche tous les serveurs sur lesquels
> PHP 5.5 est installé, et envoi aux clients concernés un email les
> informants de la mise à jour.
> 
> En fait, il me faudrait une sorte de intercom.io mais orienté admin sys :)


Hello Jonathan,

Je dirai que ça dépend un peu de ton inventaire actuel.
Mais si tu as moyen d'avoir un export sauce YAML de tes associations
client/serveur (ou encore plus simple, un fichier par host avec une
variable pointant sur l'email du client), avec Ansible c'est plié
rapidement.

Exemple, imaginons que pour chaque host, tu aies une variable
'email_client', et que les serveurs utilisent Apt, tu peux faire quelque
chose dans ce genre là :

- name: Recupère la version du package voulu
  shell: "dpkg -s {{ package }}  2> /dev/null  | grep 'Version' | cut
-f2 -d' '"
  register: version

- name: Prévient les clients si une mise à jour est nécessaire
  local_action: mail
                host='smtp.server'
                port=25
                subject="Mise à jour imminente"
                body="Version {{ version }} obsolete - màj en vue"
                from="jonat...@unsigned.inikup.com"
                to="{{ email_client }}"
  when: version_cible not in version.stdout and not do_it

- name: Effectue la mise à jour si demandé
  apt:
    name={{ package }}
    state=latest
    update_cache=yes
  when: do_it


Avec, coté ligne de commande :

# pour prévenir
ansible-playbook upgrade.yml -e 'package=php5 version_cible=5.5.18
do_it=false'

# pour mettre à jour
ansible-playbook upgrade.yml -e 'package=php5 version_cible=5.5.18
do_it=true'

Après, si tu veux juste prévenir le client après la mise à jour vers la
dernière version, c'est encore plus simple :

- name: Effectue la mise à jour
  apt:
    name=php5
    state=latest
    update_cache=yes
  notify: Prévenir client

(le handler de notification 'Prévenir client' étant globalement
équivalent à l'envoi du mail ci-dessus).

et :

ansible-playbook upgrade.yml -e 'package=php5'


Bon, c'est fait à l'arrache sur un coin de nappe, et il y a plein de
manière que ça foire, donc YMMV, mais tu vois l'idée.


A+

M
-- 
Michel Blanc
{ :github => "@leucos", :twitter => "@b9m", :gpg => "0X24B35C22" }
_______________________________________________
Liste de diffusion du FRsAG
http://www.frsag.org/

Répondre à