4 231
modifications
(Page créée avec « Category:serveur Category:debian ») |
|||
(7 versions intermédiaires par le même utilisateur non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
[[Category:serveur]] | [[Category:serveur]] | ||
[[Category:debian]] | [[Category:debian]] | ||
Déjà eu besoin d’exécuter la même action sur plusieurs serveur ? Vous venez de voir qu'une grosse faille de sécurité a été corrigé dans apache et vous réalisez que vous devez mettre à jour votre parc de 200 machines ? Et en plus de ça vous êtes flemmard et vous n'avez pas envie de monter une infrastructure client-serveur pour maintenir les machies à jour ? Ansible est fait pour vous. | |||
Ansible utilise ssh pour communiquer avec les serveurs et ne nécessite l'installation d'aucun autre paquet pour fonctionner. | |||
Sur votre machine locale : | |||
<pre>aptitude install ansible</pre> | |||
Sur les serveurs ? Vous n'avez besoin de rien de plus que les paquets minimaux de python 2.x. | |||
<pre>aptitude install python</pre> | |||
=configuration= | |||
Le fichier principal d'ansible est le fichier d'inventaire dans lequel vous listez les différentes machines à gérer avec ansible. Par défaut, ce fichier est <code>/etc/ansible/hosts</code>. Vous pouvez cependant utiliser n'importe quel fichier et le préciser lors de l'invocation de ansible. | |||
Exemple de fichier dans ~/hosts : | |||
<pre> | |||
[node1] | |||
vm1.domain.tld | |||
vm2.domain.tld | |||
[node2] | |||
vm3.domain.tld | |||
vm4.domain.tld | |||
</pre> | |||
=invocation= | |||
<pre>ansible -i ~/hosts -m file -a "path=/tmp/test state=touch" all</pre> | |||
Avec cette commande, on applique une directive ansible à toutes les machines (<code>all</code>) contenues dans le fichier <code>~/hosts</code>. La directive appel le module ansible <code>file</code> afin de créer (<code>state=touch</code>) le fichier <code>/tmp/test</code> | |||
Pour appliquer la directive uniquement aux VMs de node1 : | |||
<pre>ansible -i ~/hosts -m file -a "path=/tmp/test state=touch" node1</pre> | |||
Pour appliquer la directive uniquement a VM1 : | |||
<pre>ansible -i ~/hosts -m file -a "path=/tmp/test state=touch" vm1.domain.tld</pre> | |||
Si nous voulons supprimer ce fichier : | |||
<pre>ansible -i ~/hosts -m file -a "path=/tmp/test state=absent" all</pre> | |||
=Vérifier si tous les outils nécessaire à ansible sont bien installés (ansible_facts checking)= | |||
<pre>ansible -i ~/hosts --user=root -m setup vm1.domain.tld</pre> | |||
=playbook= | |||
==Playbook de mise à jour de serveur avec aptitude== | |||
Ce playbook nécessite la présence des paquets suivant sur les serveurs cibles : | |||
<pre>debian-goodies lsb-release</pre> | |||
Il vous permet de mettre à jour très facilement vos serveurs. | |||
Le fichier d'origine, quelque peu modifié, est accessible ici : https://gist.github.com/maethor/380676f6b1cec8cc7439#file-debian_upgrade-yml | |||
debian_upgrade.yml : | |||
<pre> | |||
--- | |||
- hosts: all | |||
remote_user: root | |||
tasks: | |||
- name: Update packages list | |||
apt: update_cache=yes | |||
when: ansible_os_family == 'Debian' | |||
- name: List packages to upgrade (1/2) | |||
shell: aptitude -q -F%p --disable-columns search "~U" | |||
register: updates | |||
changed_when: False | |||
when: ansible_os_family == 'Debian' | |||
- name: List packages to upgrade (2/2) | |||
debug: msg="{{ updates.stdout_lines | count }} packages to upgrade ({{ updates.stdout_lines | join(', ') }})" | |||
when: (ansible_os_family == 'Debian' and updates.stdout_lines) | |||
- name: Upgrade packages | |||
apt: upgrade=safe | |||
when: (ansible_os_family == 'Debian' and updates.stdout_lines) | |||
- name: Check what the new version is | |||
shell: lsb_release -r | awk '{print $2}' | |||
changed_when: False | |||
register: new_release | |||
- name: Notify distribution version upgrade | |||
debug: msg="Debian has been upgraded from {{ ansible_lsb.release }} to {{ new_release.stdout }}" | |||
when: ansible_lsb.release != new_release.stdout | |||
- name: List services to restart (1/2) | |||
shell: checkrestart | grep ^service | awk '{print $2}' | |||
register: services | |||
changed_when: False | |||
when: ansible_os_family == 'Debian' | |||
- name: List services to restart (2/2) | |||
debug: msg="{{ services.stdout_lines | count }} services to restart ({{ services.stdout_lines | join (', ') }})" | |||
when: (ansible_os_family == 'Debian' and services.stdout_lines) | |||
</pre> | |||
Invocation : | |||
<pre>ansible-playbook -i ~/hosts debian_upgrade.yml --limit=node1</pre> |