system_administration:automation:using_ansible

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
system_administration:automation:using_ansible [2023/08/12 11:33] – created azizsystem_administration:automation:using_ansible [2023/08/13 13:48] (current) – [Déployer le script de vérification d'accès SSH] aziz
Line 1: Line 1:
 +{{tag>Ansible}}
 ====== Configuration des serveurs avec 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.
 +
 +<code>
 +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
 +</code>
 +
 +
 +===== Le fichier d'inventaire =====
 +Le fichier ''inventory'' est central car il répertorie tous les serveurs de la flotte.
 +
 +Extrait :
 +
 +<file>
 +##########
 +#  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
 +</file>
 +
 +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))
 +
 +<cli>
 +$ python3 -m pip install --user ansible
 +$ python3 -m pip install --user argcomplete
 +$ activate-global-python-argcomplete --user
 +</cli>
 +
 +===== 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))
 +
 +<cli>
 +$ ansible-playbook InventoryToSshConfig.yml
 +</cli>
 +
 +  * 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'' :
 +
 +<file>
 +prod               ansible_user=admin    ansible_host=sd-135347.dedibox.fr            ansible_port=22    url=sd-135347.dedibox.fr:8006      # WAN 195.154.29.195
 +</file>
 +
 +La configuration suivante sera créée dans le fichier  ''~/.ssh/config.d/elosys_config'' :
 +
 +<code ini>
 +# https://sd-135347.dedibox.fr:8006
 +host prod
 + hostname sd-135347.dedibox.fr
 + user admin
 + port 22
 +</code>
 +
 +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 :
 +
 +<cli>
 +$ ansible-playbook AuthorizedKeysCommand.yml --limit newmachine
 +</cli>
 +
 +''--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.
  
  • system_administration/automation/using_ansible.1691836427.txt.gz
  • Last modified: 2023/08/12 11:33
  • by aziz