Ansible¶
Prérequis:
Sur le poste admin:
- ansible
- ssh (échange avec une paire de clés)
- python
Sur les serveurs et postes à administrer:
- ssh (échange avec une paire de clés)
- python
Fichier hosts.ini¶
Sur le poste admin, afin de ne pas utiliser l'utilisateur root, on va créer un fichier hosts.ini, par exemple: Le fichier doit être complété comme ci-dessous:
[groupe]
srv1 ansible_host=192.168.1... ansible_port=22 ansible_user=root
srv2 ansible_host=192.168.1... ansible_port=22 ansible_user=root
Fichier ansible.cfg¶
On peut préciser dans le fichier /etc/ansible/ansible.cfg quelques paramètres bien pratiques
inventory = /home/jo/Seafile/ansible/playbooks-srv/hosts.ini
interpreter_python = /usr/bin/python3
- inventory: permettra d'indiquer ou se trouve le fichier hosts.ini
- interpreter_python: permettra de préciser notre version de python.
Ansible commande ad-hoc¶
On peut lancer une commande à un groupe ou tous les hôtes via ansible avec la commande:
ansible groupe -a "command"
ex:
ansible web-srv -a "uptime"
Il y a possibilité d'aller bien plus loin en lançant, par exemple, les commandes petit à petit sur les hôtes du groupe, etc...
Voir le lien de la doc officiel: https://docs.ansible.com/ansible/latest/user_guide/intro_adhoc.html
Playbooks.yml¶
Le playbook est un fichier en yaml, ou yml. Ce fichier est une sorte de recette qu'ansible devra lire et exécuter ligne par ligne.
Les fichiers yml ont une syntaxe particulière qu'il faudra respecter. L'indentation est aussi importante !
Il y a différent module qu'ansible peut utiliser, dont apt, shell, mysql...
Un exemple de playbook:
---
- hosts: ct
tasks:
- ping: ~
- name: apt update
apt:
update_cache: yes
- name: apt upgrade
apt:
upgrade: dist
- name: apt autoclean
apt:
autoclean: yes
- name: apt autoremove
apt:
autoremove: yes
- name: Redémarrage des services automatiquement (needrestart)
shell: needrestart -ra -l
- hosts: dl-ct
tasks:
- name: Mise à jour de youtube-dl (pip install)
shell: pip install --upgrade youtube_dl
- hosts: pi-hole-ct
tasks:
- name: Mise à jour pihole
shell: pihole -up
- hosts: web-ct
tasks:
- name: Lancement script db-tar-gz.sh
shell: sh /home/jo/db-tar-gz.sh
Le site officiel pour les modules ansible: https://docs.ansible.com/ansible/latest/modules/modules_by_category.html
Ansible-playbooks¶
Afin de lancer un playbook en utilisant un fichier hosts.ini en particulier; on utilisera la commande ansible-playbook:
ansible-playbook -i hosts.ini srv-playbook.yml
- -i hosts.ini facultatif si précisé dans /etc/ansible/ansible.cfg
Pour en savoir plus, voici le site officiel de la doc ansible: https://docs.ansible.com/ansible/latest/index.html
Module apt¶
Ce module var permettre d'utiliser les commandes apt d'un système basé sur Debian.
Dans l'ordre, ansible exécutera un apt update && apt upgrade && apt autoclean && apt autoremove
Pour installer des paquets avec apt sous ansible, on utilisera:
apt:
name: ['htop', 'nmon', 'curl', 'wget', 'apt-transport-https', 'tmux', 'lnav', 'gpg', 'bash-completion']
state: present
apt:
name: ['htop', 'nmon', 'curl', 'wget', 'apt-transport-https', 'tmux', 'lnav', 'gpg', 'bash-completion']
state: absent
Module apt_repository¶
- name: Ajout dépôt dans sources.list.d/
apt_repository:
repo: deb http://http.debian.net/debian unstable main
state: present
Module file (créer des fichiers ou des dossiers)¶
Pour créer un fichier:
- name: Change file ownership, group and permissions
file:
path: /etc/foo.conf
owner: root
group: root
mode: 0644
state: touch
- name: Recursively change ownership of a directory
file:
path: /etc/foo
state: directory
recurse: yes
owner: foo
group: foo
Module service¶
Pour la gestion des services système, ça se passe comme ça:
l'option state peut avoir ces options:stopped
started
reloaded
restarted
Module blockinfile (remplir fichier)¶
- name: Insérer du texte à l'intérieur d'un fichier
blockinfile:
path: /etc/config-jo
block: |
Le contenu de mon fichier
sur plusieurs lignes
dernière ligne
Module copy¶
- name: Copy file with owner and permissions
copy:
src: /srv/myfiles/foo.conf
dest: /etc/foo.conf
owner: foo
group: foo
mode: 0644
Module synchronize¶
- name: Synchronisation de la source vers la destination
synchronize:
src: some/relative/path
dest: /some/absolute/path
Module flatpak¶
- name: Installation des paquets flatpak
flatpak:
name: org.libreoffice.LibreOffice
tv.kodi.Kodi
state: present
Module unarchive (Désarchivage, dezippage)¶
Pour télécharger et dézipper une archive, il faudra utiliser l'option src- name: Dézipper une archive en la téléchargeant d'abord (ajouté dans la version 2.0 de ansible)
unarchive:
src: https://example.com/example.zip
dest: /usr/local/bin
remote_src: yes