Table des matières
Ceci est une ancienne révision du document !
Initialisation
Structure de répertoires
Créer un répertoire de travail
mkdir ansible
Dans ce répertoire, vous aurez tous vos fichiers pour travailler à savoir
drwxrwxr-x 3 user user 4,0K janv. 31 14:38 files drwxrwxr-x 4 user user 4,0K janv. 31 14:46 inventory drwxrwxr-x 45 user user 4,0K janv. 31 13:38 roles
Création des répertoires de fonctionnement
mkdir files; mkdir inventory; mkdir roles ;
Nous reviendrons dessus un peu plus tard.
Fichiers de configuration
ansible.cfg
Tout d'abord le fichier le plus important
ansible.cfg
vi ansible.cfg
On indique que l'inventaire se situe dans le répertoire “inventory” qui sera dans notre répertoire de travail.
[defaults] inventory = inventory
requirements.yml
Fichier optionnel faisant appel à des fonctions ou codes externes.
requirements.yml
vi requirements.yml - name: lae.proxmox
L'inventaire
Il faut créer le fichier d'inventaire pour indiquer à ansible quel est la cible des actions. Cela est tout à fait arbitraire: cela par OS, par type de service, par lieux, par client, etc.
vi inventory/serveursdebian.yml
[debianhome] alabourre ansible_host=192.168.1.1 ontime ansible_host=192.168.1.2 [debianfma] alabourre1 ansible_host=392.568.321.1 ontime2 ansible_host=392.568.321.2
host_vars
Variables spécifiques par équipement
vi inventory/host_vars/alabourre.yml
common_admins: - john - doe - erzat
group_vars
Variables spécifiques par groupe d'équipements (le fameux fichier YML dans inventory)
vi inventory/group_vars/proxmox.yml
common_admins: - john - doe pve_cluster_enabled: false
Premier playbook
Créer un fichier de type :
vi playbook-mes-serveurs.yml
- hosts: proxmox become: true roles: - lae.proxmox - hosts: all become: true name: Base commune pour tous les serveurs roles: - common
Premier rôle
Et oui, le playbook appelle des rôles. Et un rôle appelle des taches (tasks).
Dans le répertoire 'roles', on doit créer le rôle commun que l'on appelle dans le playbook!
mkdir -p roles/common/tasks/ mkdir -p roles/common/defaults/
Automatiser les connexions avec les droits qui vont avec
Le rôle, les tâches, les tags
Il faut tout d'abord :
- installer le package SUDO
- configurer un groupe SUDOERS en passwordless (sans mot de passe)
- créer un utilisateur et lui mettre sa clés SSH
Attention, il faut configurer la 1er connexion au serveur avant que tout cela fonctionne automatique !
Installation du package SUDO
- name: Prérequis Package sudo apt: name: sudo state: present update_cache: true cache_valid_time: 3600 tags: sudo
Création du groupe admin SUDO
- name: Groupe Admin group: name: sysadmin tags: admin
Mise en place du fichier pour la configuration du passwordless
- name: sudo passwordless copy: content: "%sysadmin ALL=(ALL:ALL) NOPASSWD: ALL" dest: /etc/sudoers.d/ansible owner: root group: root mode: 0600 tags: sanspwd
Création des utilisateurs avec le shell bash
- name: Utilisateurs "admin" à créer user: name: "{{ item }}" state: present group: "sysadmin" shell: /bin/bash loop: "{{ common_admins }}" tags: users
Les utilisateur ayant le pouvoir du sudo sont à positionner dans le fichier HOSTAME.yml (lié au nom décrit dans le fichier inventory/seveursdebian.yml) dans le répertoire inventory/host_vars/
Exemple: host_vars/alabourre.yml
Mise en place des clés SSH
- name: Clés SSH des utilisateurs authorized_key: user: "{{ item | basename | splitext | first }}" key: "{{ lookup('file', item) }}" when: "item | basename | splitext | first in common_admins" loop: "{{ lookup('fileglob', 'sshkeys/*.pub', wantlist=True) }}" tags: sshkeys
Les clés sont à positionner dans le répertoire : file/sshkeys/
- name: Prérequis Package sudo apt: name: sudo state: present update_cache: true cache_valid_time: 3600 tags: sudo - name: Groupe Admin group: name: "{{ common_admin_group }}" tags: admin - name: sudo passwordless copy: content: "%{{ common_admin_group }} ALL=(ALL:ALL) NOPASSWD: ALL" dest: /etc/sudoers.d/ansible owner: root group: root mode: 0600 tags: sanspwd - name: Utilisateurs "admin" à créer user: name: "{{ item }}" state: present group: "{{ common_admin_group }}" shell: /bin/bash loop: "{{ common_admins }}" tags: users - name: Clés SSH des utilisateurs authorized_key: user: "{{ item | basename | splitext | first }}" key: "{{ lookup('file', item) }}" when: "item | basename | splitext | first in common_admins" loop: "{{ lookup('fileglob', 'sshkeys/*.pub', wantlist=True) }}" tags: keys