Mise en place d'un outil de gestion de configuration (Ansible)
(Page créée avec « == Présentation == 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 ci… ») |
|||
| (2 révisions intermédiaires par le même utilisateur non affichées) | |||
| 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 | + | ==Créer le dépôt== |
| − | Se connecter sur | + | 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: | + | SHA256:gsl5L6M5FV/O94GETrtrCFiyN31+6sM0LQvx9VK5lhk root@140ed833282e |
The key's randomart image is: | The key's randomart image is: | ||
| − | +---[RSA | + | +---[RSA 3072]----+ |
| − | | | + | | | |
| − | |. | + | | | |
| − | | | + | | . . | |
| − | + | | ..+o . + o E | | |
| − | |+ | + | | ==o+SO = + = | |
| − | | | + | | o.=o+ @ = B | |
| − | | | + | | ooo.B * + . | |
| − | | | + | | .o o. B . . | |
| − | | . | + | | 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> | ||
| − | + | root@140ed833282e:~# ls -l /root/.ssh | |
total 8 | 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 | |
| − | -rw------- | + | root@140ed833282e:~# |
| − | |||
| − | -rw-r--r-- | ||
</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]] | ||
| + | |||
| + | Cliquer sur "New repository secret" : | ||
| + | :[[Fichier:ClipCapIt-230216-222142.PNG|none|thumb|500px|GitHub - New secret]] | ||
| + | |||
| + | Renseigner le nom de la variable sous lequel le secret sera renseigné et accessible (par exemple <code>ROOT_SSH_PRI_HOST</code>) dans le champ "Name". Récupérer le contenu du fichier <code>id_rsa</code> 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 : | ||
| + | :[[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
Sommaire
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" :
Cliquer sur "New repository 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 :
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 }}"