Nous avons mentionné les variables dans cette série Ansible et juste pour vous détendre un peu. Une variable, comme dans de nombreux langages de programmation, est essentiellement une clé qui représente une valeur.
Qu’est-ce qui constitue un nom de variable valide ?
Un nom de variable comprend des lettres, des chiffres, des traits de soulignement ou un mélange de 2 ou de tous. Cependant, gardez à l’esprit qu’un nom de variable doit toujours commencer par une lettre et ne doit pas contenir d’espaces.
Jetons un coup d’œil à quelques exemples de noms de variables valides et inacceptables :
Exemples de noms de variables valides:
football foot_ballfootball20 foot_ball20
Exemples de Noms de variables Non valides:
foot ball20 foot-ball
Discutons des types de variables:
Variables de Playbook
Les variables de Playbook sont assez faciles et directes. Pour définir une variable dans un playbook, utilisez simplement le mot-clé vars avant d’écrire vos variables avec indentation.
Pour accéder à la valeur de la variable, placez-la entre les doubles accolades entourées de guillemets.
Voici un exemple de livre de jeu simple:
- hosts: all vars: greeting: Hello world! tasks: - name: Ansible Basic Variable Example debug: msg: "{{ greeting }}"
Dans le playbook ci-dessus, la variable de salutation est remplacée par la valeur Hello world! lorsque le playbook est exécuté. Le playbook imprime simplement le message Hello world! lors de l’exécution.
De plus, vous pouvez avoir une liste ou un tableau de variables comme indiqué:
Le playbook ci-dessous montre une variable appelée continents. La variable contient 5 valeurs différentes – noms de continent. Chacune de ces valeurs est facilement accessible en utilisant l’indice 0 comme première variable.
L’exemple du playbook ci-dessous récupère et affiche Asia (Index 1).
La liste de variables peut également être structurée comme indiqué:
vars: Continents:
Pour lister tous les éléments de la liste, utilisez le module with_items. Cela parcourra toutes les valeurs du tableau.
Un autre type de variable Ansible est la variable dictionnaire.Les variables de dictionnaire
sont en outre prises en charge dans le playbook. Pour définir la variable du dictionnaire, identifiez simplement la paire clé-valeur juste en dessous du nom de la variable du dictionnaire.
hosts: switch_f01vars: http_port: 8080 default_gateway: 10.200.50.1 vlans: id: 10 port: 2
Dans l’exemple ci-dessus, vlans est la variable du dictionnaire tandis que id et port sont les paires clé-valeur.
Pour port_id, puisque nous commençons la valeur par du texte et non la variable, les guillemets ne sont pas nécessaires pour entourer les accolades.
Variables spéciales
Ansible fournit une liste de variables prédéfinies qui peuvent être référencées dans les modèles et les playbooks Jinja2 mais ne peuvent pas être modifiées ou définies par l’utilisateur.
Collectivement, la liste des variables prédéfinies Ansible est appelée Faits Ansible et celles-ci sont rassemblées lors de l’exécution d’un playbook.
Pour obtenir une liste de toutes les variables Ansible, utilisez le module de configuration dans la commande ad hoc Ansible comme indiqué ci-dessous:
# ansible -m setup hostname
Cela affiche la sortie au format JSON comme indiqué:
# ansible -m setup localhost
À partir de la sortie, nous pouvons voir que certains des exemples de variables spéciales Ansible incluent:
Il existe de nombreuses autres variables spéciales Ansible ce ne sont que quelques exemples.
Ces variables peuvent être utilisées dans un modèle Jinja2 comme indiqué:
Variables d’inventaire
Enfin, sur la liste, nous avons des variables d’inventaire Ansible. Un inventaire est un fichier au format INI qui contient tous les hôtes à gérer par Ansible.
Dans les inventaires, vous pouvez affecter une variable à un système hôte et l’utiliser ultérieurement dans un playbook.
web_server_1 ansible_user=centos http_port=80web_server_2 ansible_user=ubuntu http_port=8080
Ce qui précède peut être représenté dans un fichier YAML playbook comme indiqué:
--- web_servers: web_server_1: ansible_user=centos http_port=80web_server_2: ansible_user=ubuntu http_port=8080
Si les systèmes hôtes partagent les mêmes variables, vous pouvez définir un autre groupe dans le fichier d’inventaire pour le rendre moins lourd et éviter les répétitions inutiles.
Par exemple:
web_server_1 ansible_user=centos http_port=80web_server_2 ansible_user=centos http_port=80
Ce qui précède peut être structuré comme suit:
web_server_1web_server_2ansible_user=centoshttp_port=80
Et dans le fichier YAML du playbook, cela sera défini comme indiqué:
--- web_servers: hosts: web_server_1: web_server_2: vars: ansible_user=centos http_port=80
Faits Ansible
Lors de l’exécution de playbooks, la première tâche effectuée par Ansible est l’exécution de la tâche de configuration. Je suis presque sûr que vous avez dû tomber sur la sortie:
TASK: *********
Les faits Ansible ne sont rien d’autre que des propriétés système ou des informations sur les nœuds distants auxquels vous vous êtes connecté. Ces informations incluent l’architecture du système, la version du système d’exploitation, les informations du BIOS, l’heure et la date du système, la disponibilité du système, l’adresse IP et les informations matérielles pour n’en citer que quelques-unes.
Pour obtenir les faits sur n’importe quel système, utilisez simplement le module de configuration comme indiqué dans la commande ci-dessous:
# ansible -m setup hostname
Par exemple:
# ansible -m setup database_server
Cela imprime un grand ensemble de données au format JSON comme indiqué:
Les faits Ansible sont utiles pour aider les administrateurs système à effectuer les opérations, par exemple, selon le système d’exploitation, ils sont capables de savoir quels paquets logiciels doivent être installés, et comment ils doivent être configurés, etc.
Faits personnalisés
Saviez-vous également que vous pouvez créer vos propres faits personnalisés qui peuvent être rassemblés par Ansible? Oui, tu peux. Alors, comment vous y prenez-vous? Changeons de vitesse et voyons comment.
La première étape consiste à créer un /etc/ansible/facts.d répertoire sur le nœud géré ou distant.
Dans ce répertoire, créez un fichier(s) avec une extension .fact
. Ce ou ces fichiers renverront des données JSON lorsque le playbook est exécuté sur le nœud de contrôle Ansible, ce qui inclut les autres faits qu’Ansible récupère après l’exécution d’un playbook.
Voici un exemple de fichier de faits personnalisé appelé date_time.fait qui récupère la date et l’heure.
# mkdir -p /etc/ansible/facts.d# vim /etc/ansible/facts.d/date_time.fact
Ajoutez-y les lignes suivantes.
#!/bin/bashDATE=`date`echo "{\"date\" : \"${DATE}\"}"
Enregistrez et quittez le fichier.
Attribuez maintenant les autorisations d’exécution:
# chmod +x /etc/ansible/facts.d/date_time.fact
Maintenant, j’ai créé un playbook sur le nœud de contrôle Ansible appelé check_date.lml.
---- hosts: webservers tasks: - name: Get custom facts debug: msg: The custom fact is {{ansible_local.date_time}}
Ajoute le fichier de faits à la variable ansible_local. L’ansible_local stocke tous les faits personnalisés.
Maintenant, exécutez le playbook et observez une récupération possible des informations enregistrées dans le fichier fact:
# ansible_playbook check_date.yml
Conclusion
Cela nous amène à la fin de ce tutoriel sur le travail avec les variables et les faits Ansible.