{{tag>Ansible}}
====== Configuration des serveurs avec Ansible ======
[[https://www.ansible.com/|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. ((Ce ne sera pas une installation système. Les autres utilisateurs du système n'auront pas à disposition les commandes Ansible))
$ 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 ((Cela suppose que vous avez au préalable correctement initialisé un dossier ''~/.ssh'' avec la commande ''ssh-keygen'' ou autre))
$ 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 [[services: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.