Table of Contents

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 :

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

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.

1)
Ce ne sera pas une installation système. Les autres utilisateurs du système n'auront pas à disposition les commandes Ansible
2)
Cela suppose que vous avez au préalable correctement initialisé un dossier ~/.ssh avec la commande ssh-keygen ou autre