Contenu

installation d'Ansible sur CentOS 8

Ansible outil open source d’automatisation, d’orchestration et de configuration automatique

Why Ansible ?

En utilisant Ansible pour votre DevOps , vous pouvez provisionner des machines virtuelles, réseau et infrastructure cloud.

Plein de modules sont mise à votre disposition afin d’automatiser vos taches.

Ces taches peuvent être exécuter à distance à travers :

installation Ansible

Afin d’installer Ansible sur CentOS 8 depuis le repository EPEL

Nous mettons à votre disposition un script shell sur github (install-ansible.sh)

1
wget https://raw.githubusercontent.com/bkalem/ansible-kubernetes/master/install-ansible.sh

Ouvrez le compartiment ci-dessous décrivant step by step l’installation d’Ansible

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
#!/bin/bash
# maintainer : "Bilal Kalem"
# maintainer email : "bkalem@ios.dz"
# Licence " CC BY-NC-SA "
echo "###############################"
echo "[Task 1] Installation Extra Packages for Enterprise Linux"
echo "###############################"
sudo dnf install epel-release -y 

echo "###############################"
echo "[Task 2] Update du cache des repository"
echo "###############################"
sudo dnf makecache

echo "###############################"
echo "[Task 2] installation Ansible"
echo "###############################"
sudo dnf install ansible -y

Préparation de l’environnement

Nous allons utiliser dans cet articles 03 VMs :

  • 1x Ansible : Déploiment automatique Ansible
  • 1x web : Serveur WEB
  • 1x db : Serveur de base de donnée
VM hostname adresse IP vCPU vRAM
mgmt ansible.formini.local 172.15.20.20 2 2048 MB
web web.formini.local 172.15.20.201 1 1024 MB
db db.formini.local 172.15.20.202 1 1024 MB

Ansible utilise SSH pour se connecter aux machines cibles.
Afin de permettre à Ansible de ce connecter aux machines cibles sans mot de passe , nous utiliserons l’authentification basée sur les clés SSH

génération de la paire de clé SSH

dans cet example nous sommes connecter avec l’utilisateur vagrant. Par défaut , la paire de clé ssh seront enregistrer dans le répertoire de travail de cet utilisateur , à savoir /home/vagrant/.ssh/

  • clé public : /home/vagrant/.ssh/id_rsa.pub
  • clé private: /home/vagrant/.ssh/id_rsa

la commande suivante va générer votre paire de clé :

1
ssh-keygen -q -t rsa -f ~/.ssh/id_rsa -N ''

/images/blog/installation-ansible-centos-8/generate_ssh_key.png
Génération d'une paire de clé SSH

accepter les clés ssh public cible

afin d’eviter de taper yes lorsque vous vous connecter , la première fois , à vos machines cibles , vous pouvez en une seule commande , accepter et enregistrer les clés ssh public cibles dans le fichier /home/vagrant/.ssh/known_hosts
la commande suivante permettera d’accepter la clé public des (02) deux VMs web et db

1
ssh-keyscan web db >> ~/.ssh/known_hosts

/images/blog/installation-ansible-centos-8/ssh-keyscan.png
Acceptation des clés ssh public cible

envoie de la clé ssh public source

Afin de permettre à Ansible de se connecter sans mot de passe aux machines cible , vous devez envoyer la clé ssh public source vers l’ensemble des VMs.
si on a un petit nombre de machine cible , on peut utiliser la commande ssh-copy-id qui s’occupe de l’envoie de la clé SSH public source vers la cible .
Cependant, notre but est d’automatiser ce process.
Par conséquent nous allons utiliser ansible

gestion par projet : ansible.cfg

par défaut , ansible utilise le fichier /etc/ansible/ansible.cfg.

/images/blog/installation-ansible-centos-8/ansible-cfg-all.png
global ansible.cfg
pour un meilleur controle par projet , nous allons créer un dossier 01-send-ssh-key et à l’interrieur de ce dernier nous allons créer un fichier ansible.cfg

1
2
3
mkdir 01-send-ssh-key
cd 01-send-ssh-key/
vim ansible.cfg

/images/blog/installation-ansible-centos-8/ansible-cfg-folder.png
in folder ansible.cfg
pour le moment, le contenu de ce nouveau fichier ansible.cfg va contenir une seule ligne :

1
2
[defaults]
inventory = inventory.ini

gestion par projet : inventory.ini

dans le même dossier créer ci-dessus 01-send-ssh-key nous aurons besoin de déclarer les adresses IP / FQDN de chaque machines cibles. Pour cela nous allons créer dans ce même dossier , le fichier inventory.ini

1
2
3
4
5
[webs]
web

[dbs]
db

si vous avez préparer votre résolution DNS local sur le fichier /etc/hosts

/images/blog/installation-ansible-centos-8/local-dns-resolution.png
local DNS resolution /etc/hosts


Autrement , vous pouvez utiliser les adresses IP des machines cibles :
1
2
3
4
5
[webs]
172.15.20.201

[dbs]
172.15.20.202

Playbook : infrastructure as a Code

Désormais vous êtes prêt à créer votre 1er playbook contenant les tasks à exécuter sur toutes les machines cibles que vous avez déclarer dans le fichier inventory.ini
Ouvrez le compartiment ci-dessous pour voir le ssh-addkey.yml

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
---
- hosts: all
  become: yes
  become_method: "sudo"
  gather_facts: no
  remote_user: vagrant

  tasks:

  - name: install ssh key
    authorized_key: user=vagrant 
                    key="{{ lookup('file', '/home/vagrant/.ssh/id_rsa.pub') }}" 
                    state=present

exécution du playbook

afin d’éxcuter le playbook , vous devez utiliser la commande suivante :

1
ansible-playbook ssh-addkey.yml --ask-pass

puis introduire le mot de passe du remote_user : vagrant et hop 😄 la clé ssh public source vient d’être envoyé ❤️ à toutes les machines cibles décrites dans le fichier inventory.ini

à votre service ❤️
Si cet article vous a plu, je vous invite à contacter notre entreprise integrateur open source pour vous aider à mettre en place cette solution et la faire évoluer selon vos besoins.

Aussi, je vous invites à vous abonner à nos réseaux sociaux:

démo d’automatisation en vidéo

Et voici la vidéo résumant l'automatisation de l'envoie de la clé SSH source 😉