Afficher la pageAnciennes révisionsLiens de retourAjouter au livre.Haut de page Cette page est en lecture seule. Vous pouvez afficher le texte source, mais ne pourrez pas le modifier. Contactez votre administrateur si vous pensez qu'il s'agit d'une erreur. ====== Ansible ====== ===== Installation ===== ==== Client et Serveur (A faire sur tous) ==== <bootnote warning>Cette partie est a reproduire sur tous les client et le serveur ansible</bootnote> 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) ==== <bootnote warning>Cette partie est a réaliser uniquement sur les clients (ICI une Debian il faudra donc adapter pour un autre OS)</bootnote> === 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 ansible@10.102.200.111 PasswordAuthentication no Redémarrer le serveur SSH sudo systemctl restart ssh ---- ==== Serveur (Uniquement) ==== <bootnote warning>Cette partie est a réaliser uniquement sur le serveur ansible</bootnote> 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 ansible@10.102.200.153 ssh-copy-id ansible@10.102.200.80 ssh-copy-id ansible@10.102.200.153 ---- ===== 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 <file Bash inventaire.yml> all: vars: ansible_python_interpreter: /bin/python3 children: deb_master: hosts: 10.102.200.153: deb_slave: hosts: 10.102.200.80: </file> 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) ==== <bootnote> - Mise a jour de APT avec un "apt update" - Installation d'un paquet - Démarré et activé le service </bootnote> === Création d'un Playbook === nano Playbook_[Action]_[Paquet].yml <file Bash Playbook_Install_[Paquet].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 </file> 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] ---- ==== Vérification SYNTAX et Test du Playbook ==== Vérifier la syntax du Playbook ansible-playbook -i [Nom-Fichier-Inventaire].yml [Nom-Fichier-Playbook].yml --syntax-check Vérifier ce que la commande donnerait pour **TOUS** ou le **groupe [Nom-Groupe** (Ex: <color #ed1c24>deb_master</color>) **] seulement** ansible-playbook -i [Nom-Fichier-Inventaire].yml [Nom-Fichier-Playbook].yml -C -l all ou ansible-playbook -i [Nom-Fichier-Inventaire].yml [Nom-Fichier-Playbook].yml -C -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 <bootnote> - Mise a jour de APT avec un "apt update" - Installation de Apache2 - Apache est demarré et activé </bootnote> <file Bash 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 </file> 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 ---- === Création d'un Playbook (regroupe plusieurs actions avec un handlers) === <file Bash 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 </file> ou alors la meme chose avec un playbook plus simpliste \\ <file Bash Playbook_Multi_SSH-Config_2.yml> --- - name: Playbook pour sécuriser SSH et installer BIND v2 hosts: all become: true tasks: # Secure SSH : - name: sec ssh blockinfile: path: /etc/ssh/sshd_config state: present backup: yes insertafter: "EOF" block: | Match User ansible AllowUsers ansible@10.102.200.111 PasswordAuthentication no - name: restart ssh service: name: sshd state: restarted # Disable login with password : - name: disable login password user: name: ansible password: "!" # Install Bind sur les deux serveur : - name: Install Bind apt: update_cache: yes name: bind9 state: present </file> Vérifier la syntax du Playbook ansible-playbook -i inventaire.yml Playbook_Multi_SSH-Config.yml --syntax-check Vérifier ce que la commande donnerait pour **TOUS** ou le **groupe deb_master seulement** ansible-playbook -i inventaire.yml Playbook_Multi_SSH-Config.yml -C -l all ou ansible-playbook -i inventaire.yml Playbook_Multi_SSH-Config.yml -C -l deb_master Lance l'exécution de la commande ansible-playbook -i inventaire.yml Playbook_Multi_SSH-Config.yml -l all ===== Lexique ===== <bootnote 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. </bootnote> ---- ===== Sources : ===== [[https://docs.ansible.com/]] \\ [[https://blog.stephane-robert.info/post/ansible-gendoc-role-collection/]] \\ public/ansible.txt Dernière modification : 2024/10/25 15:13de 127.0.0.1