Mise en place d'un outil de gestion de configuration (Ansible)
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 }}"