Ansible variables

ansible variables
les variables ansible
yaml define var

Les ansible variables

Je vais te montrer comment sauvegarder des variables dans un fichier et chargé ce fichier lorsque l’on souhaite accéder à ces variables.

Pour l’exemple je vais sauvegarder les vars de gather_facts, ces variables sont les informations de la machine cible, comme le hostname, l’ip, la distribution et un grand nombre de variables que je ne citerai pas, tu trouveras la liste sur la documentation du module gather_facts.

Définir ses variables

Je vais activer les variables gather_facts puis les stocker dans des variables définies :

- name: "get data information on host"
  hosts: ma-machine
  gather_facts: yes
  vars:
    hostname: "{{ ansible_hostname }}"
    os: "{{ ansible_distribution }}"
    ip: "{{ ansible_eth1.ipv4.address }}"

Vars: permet d’indiquer les variables à définir.

Ici j’ai donc défini les variables :

  • hostname
  • os
  • ip

Sauvegarder ses variables dans un fichier yaml

On va maintenant créer une tâche qui va écrire dans un fichier yaml sur notre localhost nos variables :

tasks:
    - name: save vars in playbook/vars/data_hosts.yml on localhost
      lineinfile:
        path: /etc/ansible/playbook/vars/data_hosts.yml
        line: |
          hostname: "{{  hostname }}"
          os: "{{ os }}"
          ip: "{{ ip }}"
        create: yes
      delegate_to: localhost

Le paramètre create: yes créée le fichier si il n’existe pas et delegate_to: localhost indique que l’action sera réalisé uniquement sur le localhost

Une fois la tâche lancé le fichier contenant nos variables sera comme tel :

hostname: "ma-machine"
os: "Debian"
ip: "172.16.16.30"

Charger nos variables

Pour charger les variables d’un fichier il suffit d’utiliser le module include_vars :

tasks:
  - name: load vars in playbook/vars/data_hosts.yml
    include_vars:
      file: /etc/ansible/playbook/vars/data_hosts.yml

On peut alors utiliser nos variables stocké dans un fichier dans n’importe quel playbook.

Exemple d’utilisation :

Voici un playbook où je souhaitais récupérer les variables d’une machine pour ensuite les injecter dans une base de données mysql.

---

- name: "get data information on host"
  hosts: '{{ host }}'
  gather_facts: yes
  vars:
    hostname: "{{ ansible_hostname }}"
    os: "{{ ansible_distribution }}"
    ip: "{{ ansible_eth1.ipv4.address }}"
  tasks:
    - name: save vars in playbook/vars/data_hosts.yml on localhost
      lineinfile:
        path: /etc/ansible/playbook/vars/data_hosts.yml
        line: |
          hostname: "{{  hostname }}"
          os: "{{ os }}"
          ip: "{{ ip }}"
        create: yes
      delegate_to: localhost
        
- name: "insert value in main DB"
  hosts: main-bdd
  become: yes
  tasks:
    - name: load vars in playbook/vars/data_hosts.yml
      include_vars:
        file: /etc/ansible/playbook/vars/data_hosts.yml

    - name: Check if hostname is in DB
      community.mysql.mysql_query:
        login_db: main
        login_user: '{{ mysql_main_user }}'
        login_password: '{{ mysql_main_password }}'
        query: SELECT * FROM serveurs where hostname='{{ hostname }}'
      register: check_hostname_db

    - name: remove entry if hostname exist in table serveurs
      community.mysql.mysql_query:
        login_db: main
        login_user: '{{ mysql_main_user }}'
        login_password: '{{ mysql_main_password }}'
        query: DELETE FROM serveurs where hostname='{{ hostname }}'
      when: check_hostname_db.query_result != ""

    - name: insert value hostname,os, ip in serveurs table
      community.mysql.mysql_query:
        login_db: main
        login_user: '{{ mysql_main_user }}'
        login_password: '{{ mysql_main_password }}'
        query:
        - INSERT INTO serveurs(hostname,os,adresse_ip) VALUES ('{{ hostname }}','{{ os }}','{{ ip }}')
    
    - name: remove playbook/vars/data_hosts.yml
      file:
        path: /etc/ansible/playbook/vars/data_hosts.yml
        state: absent
      delegate_to: localhost

(Si vous souhaitais utiliser ce playbook il vous faudra d’abord initialiser les variables (autre que hostname, os et ip) 😉)

Tuto installation d’Ansible

Laisser un commentaire