Ceci est une ancienne révision du document !
Ansible
Installation
Client et Serveur (A faire sur tous)
Attention: Cette partie est a reproduire sur tous les client et le serveur ansible
Vérifier la connexion réseau
ip -c a
Sous Debian
Editer la config réseau (si besoin)
nano /etc/network/interfaces
Redémarrer le réseau et activer la carte si DOWN
systemctl restart networking.service ; sudo ifup ens33
Commenter la ligne cd-rom suite a l'installation
nano /etc/apt/sources.list
Sous Oracle Linux
Si carte DOWN
nmcli device connect ens160
Configurer le réseau
nmtui
Sous (Debian et Oracle Linux)
Changer le nom de la machine (si besoin)
nano /etc/hosts hostnamectl set-hostname srv-ansible
Création des utilisateurs sur le system
adduser ansible
Changer le password des utilisateurs sur le system
passwd ansible
Client (Uniquement)
Attention: Cette partie est a réaliser uniquement sur les clients (ICI une Debian il faudra donc adapter pour un autre OS)
Configuration des droits
Mettre a jour le cache et installer sudo
apt update apt install sudo
Editer le fichier /etc/sudoers
visudo
Ajout de la ligne :
ansible ALL=(ALL:ALL) NOPASSWD: ALL
Limiter les connexion SSH de l'utilisateur ansible
Editer le fichier ssh_config
sudo nano /etc/ssh/ssh_config
Ajouter cela ici 10.102.200.111 est IP du serveur ANSIBLE
Match User ansible AllowUsers [email protected] PasswordAuthentication no
Redémarrer le serveur SSH
sudo systemctl restart ssh
Serveur (Uniquement)
Attention: Cette partie est a réaliser uniquement sur le serveur ansible
Cas spécial transforme https en http
sed -i 's/https/http/g' /etc/yum.repos.d/*
Installation
dnf install epel-release-el8 -y dnf install ansible -y
Cas spécial re-transformer https en http
sed -i 's/https/http/g' /etc/yum.repos.d/*
ssh-keygen -o -a 100 -t ed25519 -C "ansible@srv-ansible" ssh-copy-id [email protected] ssh-copy-id [email protected] ssh-copy-id [email protected]
Utilisation
Création d'un espace dépôt des fichier de config
cd /srv/ansible/projet1
Création du fichier d'inventaire
touch inventaire.yml
Modification du fichier d'inventaire
nano inventaire.yml
- inventaire.yml
all: vars: ansible_python_interpreter: /bin/python3 children: deb_master: hosts: 10.102.200.153: deb_slave: hosts: 10.102.200.80:
ansible-inventory all -i inventaire.yml --graph
Test d'un envoi de PING sur tous les inventaire du fichier “inventaire.yml”
ansible all -i inventaire.yml -m ping
Création d'un Playbook (regroupant plusieurs actions)
Note:
- Mise a jour de APT avec un “apt update”
- Installation d'un paquet
- Démarré et activé le service
Création d'un Playbook
nano Playbook_[Action]_[Paquet].yml
- Playbook_Install_.yml
--- - hosts: all become: yes # Permet de s'assurer que les tâches sont exécutées avec les privilèges sudo tasks: - name: Update the APT package list apt: update_cache: yes - name: [Nom de la tache 2] apt: name: [Nom du paquet a installer] state: present - name: [Nom de la tache 3] systemd: name: [Nom du paquet a démarrer et activer au démarrage] state: started enabled: yes
ansible [Nom-Groupe] -i [Nom-Fichier-Inventaire].yml -m [Commande (Ex : ping)]
ansible all -i [Fichier-Inventaire].yml -m apt -a "name=[Paquet] state=[Indique_Status_dans_lequel_le-paquet_doit_etre]" -b
ansible-playbook -i [Nom-Fichier-Inventaire].yml [Nom-Fichier-Playbook].yml -l [Nom-Groupe]
Exemple
Simple
Ping du Groupe deb_master ce trouvant dans le fichier inventaire inventaire.yml
ansible deb_master -i inventaire.yml -m ping
Suppression du paquet nano sur toute les machines du fichier inventaire inventaire.yml
ansible all -i inventaire.yml -m apt -a "name=nano state=absent" -b
Installation du paquet vim sur toute les machines du fichier inventaire inventaire.yml
ansible all -i inventaire.yml -m apt -a "name=vim state=present" -b
Plus complexe (Multi-Actions)
Création d'un Playbook (regroupe plusieurs actions en une ligne de commande simple et dynamique)
Création d'un Playbook
nano Playbook_Install_Apache2.yml
Note:
- Mise a jour de APT avec un “apt update”
- Installation de Apache2
- Apache est demarré et activé
- Playbook_Install_Apache2.yml
--- - hosts: all become: yes # Permet de s'assurer que les tâches sont exécutées avec les privilèges sudo tasks: - name: Update the APT package list apt: update_cache: yes - name: Install Apache apt: name: apache2 state: present - name: Ensure Apache is started and enabled systemd: name: apache2 state: started enabled: yes
Exécution des actions du Playbook Playbook_Install_Apache2.yml qui va effectuer l'installation et l'activation du paquet Apache2 sur le groupe deb_master uniquement du fichier inventaire inventaire.yml
ansible-playbook -i inventaire.yml Playbook_Install_Apache2.yml -l deb_master
Exécution de plusieurs taches en plusieurs lignes de commande (Sans Playbook)
ansible deb_master -m apt -a "update_cache=yes" -b ansible deb_master -m apt -a "name=apache2 state=present" -b ansible deb_master -m service -a "name=apache2 state=started enabled=yes" -b
- Playbook_Multi_SSH-Config.yml
--- - name: Playbook pour sécuriser SSH et installer BIND hosts: all become: yes tasks: - name: Assurer que le service SSH est installé apt: name: openssh-server state: present update_cache: yes - name: Ajouter un bloc de configuration SSH dans /etc/ssh/sshd_config ansible.builtin.blockinfile: path: /etc/ssh/sshd_config backup: true insertafter: EOF block: | # Configuration personnalisée SSH Match User ansible AllowUsers ansible@10.102.200.111 PasswordAuthentication no marker: "# {mark} Configuration SSH" #owner: root #group: root #mode: '0600' notify: - Restart SSH - name: Installer le service BIND apt: name: bind9 state: present update_cache: yes - name: Neutraliser la connexion via un accès console de l’utilisateur ansible user: name: ansible password: "!" handlers: - name: Restart SSH service: name: ssh state: restarted
Lexique
Question:
- NODE MANAGER = Le serveur ansible
- PLAYBOOK = fichier YAML des séquences de tâches ou rôles
- INVENTORY =
- Inventaire statique : constitué d’un fichier décrivant la hiérarchie des serveurs.
- Inventaire dynamique : cette inventaire est fourni a ansible par un système centralisé recensant tous les nodes de l’infrastructure (exemple : NoCMDB ).
- MODULE = Les tâches et les rôles font appel à des modules accessible ici : https://docs.ansible.com/ansible/latest/collections/index_module.html
- TEMPLATE =
- NOTIFIER = Le notifier indique que si une tâche change d’état (et uniquement si la tâche a engendré un changement), notify fait appel au handler associé et exécute une autre tâche. (exemple apache2 est restart)
- HANDLER = Tâche qui n’est appelée que si un notifier est invoqué.
- TAG = Nom défini sur une ou plusieurs tâches qui peut être utilisé plus tard pour exécuter uniquement ce ou ces tâches Ansible
- ROLE = Les rôles permettent d’éviter de réécrire les mêmes playbooks. Les rôles apportent la possibilité de regrouper des fonctionnalités spécifiques. Ils seront intégrés aux playbooks.