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