public:ansible

Ceci est une ancienne révision du document !


Ansible

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

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

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]

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

Note:

  1. Mise a jour de APT avec un “apt update”
  2. Installation d'un paquet
  3. 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]

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: deb_master) ] 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]

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

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:

  1. Mise a jour de APT avec un “apt update”
  2. Installation de Apache2
  3. 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

Création d'un Playbook (regroupe plusieurs actions avec un handlers)

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

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

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.


  • public/ansible.1729861778.txt.gz
  • Dernière modification : 2024/10/25 15:09
  • de vincent1890