Il y a quelques jours, nous avons expliqué comment configurer un laboratoire Ansible à trois nœuds à l'aide de Vagrant sous Linux. Dans cet article, nous allons apprendre en détail les concepts fondamentaux d'Ansible tels que l'inventaire Ansible et les fichiers de configuration.
Structure de base d'Ansible
Lorsque vous commencez à travailler avec ansible, vous devez comprendre deux fichiers importants. L'un est l'inventaire Ansible fichier et le second est la configuration Ansible fichier.
La configuration Le fichier contient toutes les configurations qu'ansible utilisera pendant l'exécution. Lorsque vous installez ansible à l'aide du gestionnaire de packages du système d'exploitation, vous pouvez voir qu'il existe un fichier de configuration par défaut nommé "ansible.cfg
" créé dans /etc/ansible
répertoire.
Le fichier d'inventaire contient l'adresse IP ou les informations DNS sur la liste des hôtes gérés avec lesquels nous voulons travailler. Ansible lira les noms d'hôtes à partir du fichier d'inventaire et les tâches/lectures seront exécutées sur ces nœuds. Les fichiers d'inventaire peuvent être créés dans ini
, yaml
, et json
formats.
Ci-dessous la structure de mon projet. J'ai un ansible.cfg
fichier de configuration, un fichier hosts et un playbook écrit en yaml
formater.
Lorsque je déclenche le playbook, ansible lira la configuration de ansible.cfg
fichier et les détails de l'hôte du fichier hosts pour exécuter les lectures.
[email protected]:~/ansible_project$ tree . . ├── ansible.cfg ├── hosts └── playbook.yml 0 directories, 3 files
Parlons en détail de ces deux fichiers et nous allons enfin exécuter quelques commandes ad hoc.
Fichier de configuration Ansible
Ansible utilise le fichier de configuration pour charger les paramètres requis pour exécuter la tâche ansible. Si vous avez installé ansible à l'aide du gestionnaire de packages , vous aurez un ansible.cfg
fichier dans /etc/ansible
répertoire.
Ci-dessous l'exemple du ansible.cfg
fichier.
Ansible recherchera le fichier de configuration dans l'ordre suivant.
ANSIBLE_CONFIG
- variable d'environnementansible.cfg
- Répertoire actuel à partir duquel vous exécutez la commande.ansible.cfg
- Répertoire d'accueil des utilisateurs/etc/ansible/ansible.cfg
- Dans/etc/ansible
répertoire
Exécutez ansible --version
commande pour voir quel fichier de configuration est choisi par ansible.
$ ansible --version ansible [core 2.12.3] config file = /home/vagrant/ansible_project/ansible.cfg configured module search path = ['/home/vagrant/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules'] ansible python module location = /usr/local/lib/python3.8/dist-packages/ansible ansible collection location = /home/vagrant/.ansible/collections:/usr/share/ansible/collections executable location = /usr/local/bin/ansible python version = 3.8.10 (default, Nov 26 2021, 20:14:08) [GCC 9.3.0] jinja version = 2.10.1 libyaml = True
J'ai créé un répertoire de projet personnalisé et créé un ansible.cfg
dossier. Mon fichier de configuration ne contient que deux propriétés, l'emplacement de l'inventaire et la vérification de la clé de l'hôte désactivée.
[defaults] inventory = /home/karthick/ansible_project/hosts host_key_checking = False
Il existe des tonnes d'autres propriétés, mais pour le moment, vous pouvez commencer à les utiliser en ajoutant uniquement la propriété "inventaire".
Fichier d'inventaire Ansible
Dans le fichier d'inventaire, nous donnerons l'adresse IP ou le DNS des noms de serveur, des périphériques réseau, des services cloud ou de tout ce avec quoi ansible peut fonctionner.
Les inventaires peuvent être écrits en ini
, json
, et yaml
format et vous avez également des scripts pour convertir un format d'inventaire en d'autres formats.
Par défaut, vous pouvez trouver un fichier d'inventaire (hosts) dans /etc/ansible
répertoire si vous avez installé ansible à l'aide du gestionnaire de packages du système d'exploitation. Il est toujours recommandé de créer un répertoire de projet séparé et de créer un fichier d'inventaire et de configuration.
Le tableau ci-dessous représente la configuration de mon laboratoire ansible. Je vais créer le fichier d'inventaire pour cette configuration de laboratoire et exécuterai le module ping pour montrer comment les choses fonctionnent dans le fichier d'inventaire.
TYPE DE NŒUD | NOM DU NŒUD | ADRESSE IP | SAVEUR DU SE |
Nœud de contrôle | controller.anslab.com | 192.168.10.3 | ubuntu/focal64 |
Nœud géré | managed1.anslab.com | 192.168.10.4 | ubuntu/focal64 |
Nœud géré | managed2.anslab.com | 192.168.10.5 | ubuntu/focal64 |
Fichier d'inventaire sans regroupement explicite
Le fichier d'inventaire a un concept appelé regroupement dans lequel vous regrouperez vos ressources et exécuterez des tâches sur ce groupe. Il sera dans la structure suivante.
[group-name] Resource1 Resource2 .... Resource N
Vous pouvez créer le fichier d'inventaire sans utiliser de groupes. Dans ce cas, Ansible utilisera deux groupes par défaut "all" et "dissocié" .
- TOUS LES GROUPES - Toutes les ressources disponibles dans le fichier d'inventaire par défaut seront attribuées à tous les groupes .
- SANS GROUPE - Les ressources qui ne font partie d'aucun groupe défini par l'utilisateur seront automatiquement affectées au groupe non groupé .
J'ai créé un fichier d'inventaire sans aucun groupe. Maintenant, ces deux nœuds relèveront de tous les groupes ainsi que du groupe non groupé.
$ cat hosts
managed1.anslab.com
managed2.anslab.com
Vous pouvez exécuter la commande ansible suivante pour vérifier la liste des hôtes sous tous les groupes et non groupés.
$ ansible all --list-hosts hosts (2): managed1.anslab.com managed2.anslab.com
$ ansible ungrouped --list-hosts hosts (2): managed1.anslab.com managed2.anslab.com
Fichier d'inventaire avec regroupement
Comme prévu, le regroupement est un excellent moyen d'organiser vos ressources afin qu'il vous soit facile d'exécuter la tâche sur le groupe spécifique. J'ai deux nœuds gérés et ils exécutent Ubuntu 20.04LTS.
Supposons que je souhaite regrouper mon fichier d'inventaire en fonction du type de système d'exploitation, le fichier d'inventaire ressemblera à celui ci-dessous. Ici ubuntu est le nom du groupe.
[ubuntu]
managed1.anslab.com
managed2.anslab.com
Les tâches peuvent être exécutées sur ce groupe.
$ ansible ubuntu -m ping -o managed1.anslab.com | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python3"},"changed": false,"ping": "pong"} managed2.anslab.com | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python3"},"changed": false,"ping": "pong"}
Si je vérifie le groupe "non groupé" maintenant, aucun hôte ne sera là.
$ ansible ungrouped --list-hosts
[WARNING]: No hosts matched, nothing to do
hosts (0):
Vous pouvez créer autant de groupes que vous le souhaitez dans le fichier d'inventaire et utiliser les mêmes noms de ressources.
[ubuntu] managed1.anslab.com managed2.anslab.com [dev] managed1.anslab.com [test] managed2.anslab.com
$ ansible ubuntu -m ping -o $ ansible dev -m ping -o $ ansible test -m ping -o
Fichier d'inventaire avec plages
Lorsque vous avez un modèle de dénomination commun pour vos ressources, vous pouvez utiliser des plages. Jetez un œil à l'exemple ci-dessous où, au lieu de répéter le DNS, j'ai utilisé la plage pour le raccourcir.
[ubuntu]
managed[1:2].anslab.com
Fichier d'inventaire avec groupes enfants
Vous pouvez créer un groupe et utiliser d'autres noms de groupe sous celui-ci. Jetez un oeil à l'exemple ci-dessous, j'ai le groupe ubuntu qui a mes noms de serveur. J'ai créé un autre groupe nommé server qui contient le groupe ubuntu.
Il est important d'ajouter :enfants au nom du groupe sinon le groupe de serveurs traitera "ubuntu " comme nom de serveur au lieu du nom de groupe.
[ubuntu] managed[1:2].anslab.com [server:children] ubuntu
Fichier d'inventaire avec variables hôtes et variables de groupe
Le fichier d'inventaire prend en charge les variables d'hôte et de groupe. Les variables hôtes ne sont rien d'autre que des variables et leurs valeurs sont transmises à l'hôte dans le fichier d'inventaire. Dans la configuration ci-dessous, je dis à ansible d'utiliser ostechnix en tant que mon utilisateur et au lieu d'utiliser le port ssh standard, utilisez le port 2222 .
[ubuntu]
managed1.anslab.com ansible_user=ostechnix ansible_port=2222
managed2.anslab.com ansible_user=ostechnix ansible_port=2222
Les variables de groupe sont identiques aux variables d'hôte, mais les variables seront appliquées à l'ensemble du groupe au lieu d'un seul hôte. Vous pouvez voir à partir de la configuration ci-dessus, ansible_user et ansible_port sont les mêmes pour les deux nœuds. Vous pouvez donc créer un groupe var où les variables seront héritées par tous les nœuds du groupe. Vous devez ajouter :vars pour faire du groupe des variables de groupe.
[ubuntu] managed1.anslab.com managed2.anslab.com [ubuntu:vars] ansible_user=ostechnix ansible_port=2222
Attention : Lorsque vous avez à la fois une variable de groupe et une variable d'hôte pour le même nœud, la variable d'hôte a la priorité.
Il existe de nombreux paramètres d'inventaire que vous pouvez utiliser et vous pouvez obtenir la liste à partir de la documentation officielle .
Fichier d'inventaire avec alias
Vous pouvez créer un alias pour la ressource comme ci-dessous. Ici m1 et m2 sont des alias.
[ubuntu] m1 ansible_host=managed1.anslab.com m2 ansible_host=managed2.anslab.com
Maintenant, cet alias peut être utilisé pour exécuter certaines tâches.
$ ansible m1 -m ping -o m1 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python3"},"changed": false,"ping": "pong"} $ ansible m2 -m ping -o m2 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python3"},"changed": false,"ping": "pong"}
Fichier d'inventaire au format YAML
Les fichiers d'inventaire peuvent également être écrits au format YAML. Tout ce dont nous avons discuté dans les sections précédentes est écrit au format YAML.
L'image ci-dessous représente deux nœuds avec quelques variables hôtes.
L'image ci-dessous représente deux nœuds avec des variables de groupe.
Commande d'inventaire Ansible
Ansible a une commande d'inventaire qui sera très utile pour afficher les informations des fichiers d'inventaire.
Pour obtenir la liste des options prises en charge, exécutez la commande help.
$ ansible-inventory --help
Pour obtenir les détails de l'inventaire sous forme de graphique, utilisez --graph
drapeau. Si vous avez différents fichiers d'inventaire, vous pouvez utiliser -i
flag pour pointer explicitement vers le fichier d'inventaire.
$ ansible-inventory --graph
Vous pouvez imprimer les informations de variable d'hôte et de groupe en transmettant --vars
drapeau avec --graph
drapeau.
$ ansible-inventory --graph --vars
Lorsque vous utilisez la --list
flag, la sortie sera au format JSON.
$ ansible-inventory -list
Vous pouvez obtenir des informations sur un nœud particulier en utilisant le --host
drapeau.
$ ansible-inventory --host managed1.anslab.com
Conclusion
Dans cet article, nous avons vu un concept important qui forme le cœur de l'architecture ansible. Si vous êtes débutant, concentrez-vous sur la création de l'inventaire au format ini et, plus tard, vous en saurez plus sur les meilleures pratiques lorsque vous commencerez à travailler sur des projets de production.
Lire la suite :
- Authentification SSH Ansible et élévation des privilèges
- Premiers pas avec les commandes ad hoc Ansible