Mise en place d'un outil de gestion de configuration (Ansible)

De Wiki de Jordan LE NUFF
< Projets‎ | Construire un cluster Kubernetes sur un Rocky Linux
Révision datée du 16 février 2023 à 23:52 par Jordan (discussion | contributions)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Sauter à la navigation Sauter à la recherche

Présentation

Cette page a pour objet de décrire comment mettre en place l'outil de gestion de configuration Ansible.

Créer le dépôt

Avec le client GitHub (commande gh, installable depuis le dépôt officiel, disponible par défaut dans le Cloud Shell Editor de Google Cloud Platform), créer un nouveau dépôt avec la commande suivante :

gh repo create --private myrepo

Cela aura pour effet de créer un nouveau dépôt privé GitHub nommé myrepo :

✓ Created repository MyGitHubAccount/myrepo on GitHub

Créer un dossier myrepo et se rendre à l'intérieur :

mkdir myrepo
cd myrepo

Créer un premier fichier et réaliser le premier commit :

echo "# myrepo" >> README.md
git init
git add README.md
git commit -m "first commit"
git branch -M main
git remote add origin https://github.com/MyGitHubAccount/myrepo.git
git push -u origin main

Création d'une clé SSH

Se connecter sur n'importe quel conteneur Linux temporaire et lancer la commande suivante :

ssh-keygen

Exemple de retour de création de clé SSH :

Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa
Your public key has been saved in /root/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:gsl5L6M5FV/O94GETrtrCFiyN31+6sM0LQvx9VK5lhk root@140ed833282e
The key's randomart image is:
+---[RSA 3072]----+
|                 |
|                 |
|           .   . |
|   ..+o . + o E  |
|    ==o+SO = + = |
|    o.=o+ @ = B  |
|     ooo.B * + . |
|    .o o. B . .  |
|    o.   o+=     |
+----[SHA256]-----+

Cela aura pour effet de créer deux fichiers nommés id_rsa (clé privée) et id_rsa.pub (clé publique) :

root@140ed833282e:~# ls -l /root/.ssh
total 8
-rw------- 1 root root 2602 Feb 16 22:24 id_rsa
-rw-r--r-- 1 root root  571 Feb 16 22:24 id_rsa.pub
root@140ed833282e:~#

Ajout de la clé privée SSH dans le dépôt

Après avoir créer un dépôt dans l'outil de gestion de version GitHub, se rendre dans l'onglet "Settings", section "Secrets and variables/Actions" :

GitHub - Secrets and variables

Cliquer sur "New repository secret" :

GitHub - New secret

Renseigner le nom de la variable sous lequel le secret sera renseigné et accessible (par exemple ROOT_SSH_PRI_HOST) dans le champ "Name". Récupérer le contenu du fichier id_rsa précédemment créé et l'insérer dans le champ "Secret". Cliquer sur "Add secret" pour enregistrer la clé SSH privée.

Le secret apparaît alors :

GitHub - Secret ajouté

Ajout de la clé publique SSH sur la machine cible

Se connecter à un utilisateur ayant les droits sudo sur la machine cible, éditer le fichier ~/.ssh/authorized_keys et y insérer le contenu du fichier id_rsa.pub précédemment créé.

Créer la GitHub Action de déploiement d'Ansible

Dans le dépôt nouvellement créé, créer les dossiers .github/workflows :

mkdir .github/workflows

Dans le dossier .github/workflows, créer le fichier ansible-test-action.yml avec le contenu suivant :

name: Ansible test action
on:
  push:
#    branches-ignore:    
#      - 'main'
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
    - name: Set up Python 3.11
      uses: actions/setup-python@v1
      with:
        python-version: 3.11
    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        pip install ansible
    - name: set ansible config secrets
      env:
        SSH_PRI: ${{ secrets.ROOT_SSH_PRI_HOST }}
      run: |
        mkdir .ssh
        echo "$SSH_PRI" > .ssh/id_rsa
        chmod 600 .ssh/id_rsa
    - name: run ansible test on target
      env:
        ANSIBLE_HOST_KEY_CHECKING: False
      run: |
        ansible-playbook -i ansible/hosts.yml ansible/playbook-test.yml

Créer le dossier ansible et créer le fichier ansible/hosts.yml avec le contenu suivant :

all:
  hosts:
    myserver.mydomain.com

Enfin, créer le fichier ansible/playbook-test.yml avec le contenu suivant :

- name: Test
  hosts: all
  become: true
  remote_user: rocky
  vars:
    ansible_ssh_private_key_file: ".ssh/id_rsa"
  tasks:
    - name: Display crypttab file
      shell: |
        cat /etc/crypttab
      register: file_content
    - name: "Print the file content to a console"
      debug:
        msg: "{{ file_content.stdout }}"