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

De Wiki de Jordan LE NUFF
Sauter à la navigation Sauter à la recherche
 
(Une révision intermédiaire par le même utilisateur non affichée)
Ligne 2 : Ligne 2 :
 
Cette page a pour objet de décrire comment mettre en place l'outil de gestion de configuration Ansible.
 
Cette page a pour objet de décrire comment mettre en place l'outil de gestion de configuration Ansible.
  
== Création d'une clé SSH sur le serveur cible ==
+
==Créer le dépôt==
Se connecter sur le serveur sur lequel devra être déployées des configurations et lancer la commande suivante en tant que <code>root</code> :
+
Avec le client GitHub (commande <code>gh</code>, installable depuis [https://github.com/cli/cli#installation le dépôt officiel], disponible par défaut dans le [https://cloud.google.com/shell Cloud Shell Editor] de [https://cloud.google.com/ 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é <code>myrepo</code> :
 +
✓ Created repository MyGitHubAccount/myrepo on GitHub
 +
 
 +
Créer un dossier <code>myrepo</code> et se rendre à l'intérieur :
 +
mkdir myrepo
 +
cd myrepo
 +
 
 +
Créer un premier fichier et réaliser le premier commit :
 +
<pre>
 +
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
 +
</pre>
 +
 
 +
== Création d'une clé SSH ==
 +
Se connecter sur n'importe quel conteneur Linux temporaire et lancer la commande suivante :
 
  ssh-keygen
 
  ssh-keygen
  
Ligne 13 : Ligne 35 :
 
Enter passphrase (empty for no passphrase):
 
Enter passphrase (empty for no passphrase):
 
Enter same passphrase again:
 
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
+
Your identification has been saved in /root/.ssh/id_rsa
Your public key has been saved in /root/.ssh/id_rsa.pub.
+
Your public key has been saved in /root/.ssh/id_rsa.pub
 
The key fingerprint is:
 
The key fingerprint is:
SHA256:VcmCKsJzjgdmkxq9y/Y8VnuSJY9SjSSyWDyhOrAsEsE root@myserver
+
SHA256:gsl5L6M5FV/O94GETrtrCFiyN31+6sM0LQvx9VK5lhk root@140ed833282e
 
The key's randomart image is:
 
The key's randomart image is:
+---[RSA 2048]----+
+
+---[RSA 3072]----+
|.        . ...  |
+
|                 |
|.E.     . ..o    |
+
|                |
| * o   . ..     |
+
|           .   . |
|= / + o  .      |
+
|  ..+o . + o E |
|+X & + oS        |
+
|   ==o+SO = + = |
|O.+ o = o        |
+
|   o.=o+ @ = |
|oo o o B         |
+
|     ooo.B * + . |
| +.+ = o       |
+
|   .o o. B . .  |
| . ooo o         |
+
|   o.   o+=    |
 
+----[SHA256]-----+
 
+----[SHA256]-----+
 
</pre>
 
</pre>
Ligne 33 : Ligne 55 :
 
Cela aura pour effet de créer deux fichiers nommés <code>id_rsa</code> (clé privée) et <code>id_rsa.pub</code> (clé publique) :
 
Cela aura pour effet de créer deux fichiers nommés <code>id_rsa</code> (clé privée) et <code>id_rsa.pub</code> (clé publique) :
 
<pre>
 
<pre>
[rocky@myserver ~]$ sudo ls -la /root/.ssh
+
root@140ed833282e:~# ls -l /root/.ssh
 
total 8
 
total 8
drwx------. 2 root root  61 Feb 16 21:00 .
+
-rw------- 1 root root 2602 Feb 16 22:24 id_rsa
dr-xr-x---. 3 root root  140 Feb  7 20:14 ..
+
-rw-r--r-- 1 root root  571 Feb 16 22:24 id_rsa.pub
-rw------- 1 root root   0 Feb  7 20:19 authorized_keys
+
root@140ed833282e:~#
-rw-------  1 root root 2622 Feb 16 21:00 id_rsa
 
-rw-r--r-- 1 root root  583 Feb 16 21:00 id_rsa.pub
 
 
</pre>
 
</pre>
  
==Ajout de la clé SSH dans le dépôt==
+
==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" :
 
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" :
 
:[[Fichier:ClipCapIt-230216-221858.PNG|none|thumb|500px|GitHub - Secrets and variables]]
 
:[[Fichier:ClipCapIt-230216-221858.PNG|none|thumb|500px|GitHub - Secrets and variables]]
Ligne 53 : Ligne 73 :
 
Le secret apparaît alors :
 
Le secret apparaît alors :
 
:[[Fichier:ClipCapIt-230216-222732.PNG|none|thumb|500px|GitHub - Secret ajouté]]
 
:[[Fichier:ClipCapIt-230216-222732.PNG|none|thumb|500px|GitHub - Secret ajouté]]
 +
 +
==Ajout de la clé publique SSH sur la machine cible==
 +
Se connecter à un utilisateur ayant les droits <code>sudo</code> sur la machine cible, éditer le fichier <code>~/.ssh/authorized_keys</code> et y insérer le contenu du fichier <code>id_rsa.pub</code> 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 <code>.github/workflows</code> :
 +
mkdir .github/workflows
 +
 +
Dans le dossier <code>.github/workflows</code>, créer le fichier <code>ansible-test-action.yml</code> avec le contenu suivant :
 +
<syntaxhighlight lang="yaml">
 +
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
 +
</syntaxhighlight>
 +
 +
Créer le dossier <code>ansible</code> et créer le fichier <code>ansible/hosts.yml</code> avec le contenu suivant :
 +
<syntaxhighlight lang="yaml">
 +
all:
 +
  hosts:
 +
    myserver.mydomain.com
 +
</syntaxhighlight>
 +
 +
Enfin, créer le fichier <code>ansible/playbook-test.yml</code> avec le contenu suivant :
 +
<syntaxhighlight lang="yaml">
 +
- 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 }}"
 +
</syntaxhighlight>

Version actuelle datée du 16 février 2023 à 23:52

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 }}"