GNU/Linux >> Tutoriels Linux >  >> Linux

Fichiers d'inventaire et de configuration Ansible

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'environnement
  • ansible.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

Linux
  1. Comment trouver les fichiers de configuration MySQL, PHP et Apache

  2. Un moyen facile de masquer des fichiers et des répertoires sous Linux

  3. Comment gérer l'inventaire des hôtes statiques et dynamiques Ansible

  4. Guide Ansible :Gérer les fichiers à l'aide d'Ansible

  5. différence entre le fichier de périphérique et le pilote de périphérique

Comment créer et exécuter un fichier Playbook Ansible

Comment renommer des fichiers et des répertoires sous Linux

Comment copier des fichiers et des répertoires dans un terminal Linux

Commande Stat :Afficher les attributs des fichiers et des répertoires

Commande Linux tar pour compresser et extraire des fichiers

Renommer des fichiers et des dossiers dans cPanel