Configuration des serveurs avec Ansible
Ansible permet de réaliser des déploiements logiciels et de configurations sur un ou plusieurs serveurs simultanément.
Le dépôt https://git.elosys.net/sys/playbook.git contient quelques recettes (playbooks) utiles que nous allons détailler ci-dessous.
playbook$ tree -L 1 -F --dirsfirst . ├── files/ ├── waiting_validation/ ├── ansible.cfg ├── AuthorizedKeysCommand.yml ├── inventory ├── InventoryToSshConfig.yml ├── README ├── UpdateBin.yml └── UpdateDotfiles.yml 2 directories, 7 files
Le fichier d'inventaire
Le fichier inventory
est central car il répertorie tous les serveurs de la flotte.
Extrait :
########## # PROD # ########## [prodgroup] prod ansible_user=admin ansible_host=sd-135347.dedibox.fr ansible_port=22 url=sd-135347.dedibox.fr:8006 # WAN 195.154.29.195 igpro ansible_user=odoo ansible_host=erp.elosys.net ansible_port=9100 url=erp.elosys.net # LAN 100/24 prod:9100 officina ansible_user=sysadm ansible_host=erp.officina-international.com ansible_port=9102 url=erp.officina-international.com # LAN 102/24 prod:9102 elosys.net ansible_user=sysadm ansible_host=elosys.net ansible_port=9103 url=elosys.net # LAN 103/24 prod:9103 bastion ansible_user=sysadm ansible_host=sd-135347.dedibox.fr ansible_port=9120 url=sd-135347.dedibox.fr # LAN 120/24 prod:9120 ############# # NEW SDDEV # ############# [sddevgroup] sddev ansible_user=sysadm ansible_host=sd-117772.dedibox.fr ansible_port=22 url=sd-117772.dedibox.fr:8006 dockerservice ansible_user=dockerservice ansible_host=sd-117772.dedibox.fr ansible_port=9022 backup ansible_user=sysadm ansible_host=sd-117772.dedibox.fr ansible_port=9023
Le fichier inventory
contient :
- les détails de connexion qu'utilisera Ansible pour se connecter aux serveurs
- peut contenir quelques variables qui seront utilisées dans les playbooks (les fichiers de recettes)
Le nom du fichier d'inventaire est fixée dans le fichier de configuration ansible.cfg
.
Installer Ansible
La suite de commandes suivantes installera Ansible dans votre espace personnel. 1)
$ python3 -m pip install --user ansible $ python3 -m pip install --user argcomplete $ activate-global-python-argcomplete --user
Premier playbook InventoryToSshConfig.yml
En exécutant dans un terminal 2)
$ ansible-playbook InventoryToSshConfig.yml
- un fichier
~/.ssh/config
sera créé avec un contenu qui optimisera le travail avec ssh et Ansible - si le fichier
~/.ssh/config
existait déjà il sera backupé sous~/.ssh/config_ansible_backup_YYYY-MM-DD_HH_mm_SS
- un dossier
~/.ssh/config.d
et un fichier~/.ssh/config.d/elosys_config
seront créés
En jouant cet Ansible playbook, pour chaque ligne de définition d'un serveur dans le fichier inventory
une configuration de host sera créée dans le fichier ~/.ssh/config.d/elosys_config
.
Exemple :
Pour la ligne suivante dans le fichier inventory
:
prod ansible_user=admin ansible_host=sd-135347.dedibox.fr ansible_port=22 url=sd-135347.dedibox.fr:8006 # WAN 195.154.29.195
La configuration suivante sera créée dans le fichier ~/.ssh/config.d/elosys_config
:
# https://sd-135347.dedibox.fr:8006 host prod hostname sd-135347.dedibox.fr user admin port 22
Vous disposerez ainsi de l'autocompletion sur les hosts de la flotte et il suffira donc de taper ssh prod
pour se connecter à la machine prod.
Déployer le script de vérification d'accès SSH
Comme expliqué sur SSH Configuration for Proxmox VM il est nécessaire de configurer les nouvelles machines pour qu'elles interrogent le serveur de clés publiques autorisées.
Le playbook AuthorizedKeysCommand.yml
permet d'automatiser les opérations décrites.
Après avoir ajouté les informations de connection de la nouvelle machine dans le fichier inventory
, il suffit d'exécuter la commande suivante pour la configurer :
$ ansible-playbook AuthorizedKeysCommand.yml --limit newmachine
–limit newmachine
limite l'exécution du playbook à la machine newmachine
. Rien n'interdit d'exécuter le playbook sur l'ensemble des machines précisées dans la clé host
du playbook. Si le playbook a déjà été exécuté sur une machine, réexécuter le playbook n'affectera pas la machine.