first commit

This commit is contained in:
darnodo
2025-06-09 11:58:11 +02:00
commit 6a00eb2708
20 changed files with 532 additions and 0 deletions

38
ansible/ansible.cfg Normal file
View File

@@ -0,0 +1,38 @@
# ================================================================
# Fichier de configuration principal pour Ansible
#
# Ces paramètres s'appliqueront par défaut lorsque vous lancerez
# des commandes Ansible depuis le dossier 'ansible/' ou sa racine.
# ================================================================
[defaults]
# Chemin vers le dossier contenant vos fichiers d'inventaire.
# C'est la directive la plus importante ! Ansible lira automatiquement
# tous les fichiers valides dans ce dossier (statiques et dynamiques).
inventory = ./inventory/
# Chemin vers le dossier contenant vos rôles.
roles_path = ./roles/
# Désactive la vérification des clés d'hôte SSH.
# Très UTILE en lab où les VMs sont souvent recréées avec de nouvelles clés SSH.
# ATTENTION : C'est moins sécurisé. À ne pas utiliser dans un environnement
# de production non contrôlé. Pour notre lab, c'est acceptable.
host_key_checking = False
# N'affiche pas les tâches qui sont sautées (skipped) dans la console.
# Cela rend la sortie de la commande un peu plus propre et lisible.
display_skipped_hosts = False
# Force l'utilisation de couleurs dans la sortie de la console pour une meilleure lisibilité.
force_color = 1
[privilege_escalation]
# Ne jamais demander le mot de passe pour l'escalade de privilèges (sudo).
# Cela suppose que vous avez configuré un accès sudo sans mot de passe
# pour votre utilisateur Ansible (une pratique courante pour l'automatisation).
# Si ce n'est pas le cas, Ansible resterait bloqué à attendre un mot de passe.
become_ask_pass = False

View File

@@ -0,0 +1,14 @@
---
# ================================================================
# Playbook d'Installation Initiale du Serveur DNS
#
# À lancer une seule fois pour provisionner un nouveau serveur.
# Il installe Dnsmasq et déploie la configuration complète.
# USAGE : ansible-playbook -i inventory/ playbooks/setup_dns_server.yml
# ================================================================
- name: "Provisionner et configurer le serveur DNS"
hosts: dns_servers
become: true
roles:
- role: dns_server

View File

@@ -0,0 +1,15 @@
---
# ================================================================
# Playbook de Mise à Jour des Enregistrements DNS
#
# C'est le playbook à lancer après un `terraform apply` ou
# une modification des variables DNS.
# Il garantit que la configuration est à jour.
# USAGE : ansible-playbook -i inventory/ playbooks/update_dns_records.yml
# ================================================================
- name: "Synchroniser les enregistrements DNS"
hosts: dns_servers
become: true
roles:
- role: dns_server

View File

@@ -0,0 +1,12 @@
---
# ================================================================
# Handlers pour le rôle dns_server
#
# Ces tâches ne sont exécutées que si elles sont "notifiées"
# par une autre tâche qui a effectué un changement.
# ================================================================
- name: Restart dnsmasq
ansible.builtin.service:
name: dnsmasq
state: restarted

View File

@@ -0,0 +1,55 @@
---
# Tâches principales pour le rôle dns_server
- name: "[DNS] Installation du paquet Dnsmasq"
tags: install
ansible.builtin.apt:
name: dnsmasq
state: present
update_cache: true
- name: "[DNS] Création du dossier pour les fichiers d'hôtes"
tags: configure
ansible.builtin.file:
path: /etc/dnsmasq.hosts.d
state: directory
owner: root
group: root
mode: '0755'
- name: "[DNS] Création du fichier de configuration principal (dnsmasq.conf)"
tags: configure
ansible.builtin.template:
src: dnsmasq.conf.j2
dest: /etc/dnsmasq.conf
owner: root
group: root
mode: '0644'
notify: Restart dnsmasq
- name: "[DNS] Déploiement des enregistrements DNS statiques (home)"
tags: configure
ansible.builtin.template:
src: records.home.j2
dest: /etc/dnsmasq.hosts.d/records.home.arnodo.fr
owner: root
group: root
mode: '0644'
notify: Restart dnsmasq
- name: "[DNS] Déploiement des enregistrements DNS dynamiques (lab)"
tags: configure
ansible.builtin.template:
src: records.lab.j2
dest: /etc/dnsmasq.hosts.d/records.lab.arnodo.fr
owner: root
group: root
mode: '0644'
notify: Restart dnsmasq
- name: "[DNS] Vérification que le service Dnsmasq est actif et activé au démarrage"
tags: service
ansible.builtin.service:
name: dnsmasq
state: started
enabled: true

View File

@@ -0,0 +1,33 @@
# ================================================================
# Fichier de configuration principal de Dnsmasq
# CE FICHIER EST GÉRÉ PAR ANSIBLE - NE PAS MODIFIER MANUELLEMENT
# ================================================================
# Ne jamais transmettre les requêtes pour le domaine local vers l'extérieur
local=/{{ dnsmasq_domain_name }}/
# Définit le domaine de base pour les noms courts
domain={{ dnsmasq_domain_name }}
# Active la fonctionnalité 'domain' ci-dessus pour les noms dans les fichiers d'hôtes
expand-hosts
# Ne pas lire le fichier /etc/resolv.conf du système
no-resolv
# Interfaces d'écoute
{% for addr in dnsmasq_listen_addresses %}
listen-address={{ addr }}
{% endfor %}
# Serveurs DNS en amont (upstream)
{% for server in dnsmasq_upstream_servers %}
server={{ server }}
{% endfor %}
# Taille du cache
cache-size={{ dnsmasq_cache_size }}
# On indique explicitement où trouver nos listes d'hôtes additionnelles
addn-hosts=/etc/dnsmasq.hosts.d/records.home.arnodo.fr
addn-hosts=/etc/dnsmasq.hosts.d/records.lab.arnodo.fr

View File

@@ -0,0 +1,8 @@
# ===================================================
# Fichier des enregistrements DNS statiques (home)
# GÉRÉ PAR ANSIBLE
# Source: group_vars/all/static_records.yml
# ===================================================
{% for record in dns_records_home %}
{{ record.ip }} {{ record.names | join(' ') }}
{% endfor %}

View File

@@ -0,0 +1,11 @@
# ===================================================
# Fichier des enregistrements DNS dynamiques (lab)
# GÉRÉ PAR ANSIBLE
# Source: Inventaire généré par Terraform
# ===================================================
#
# IP Address FQDN Short Name
#
{% for host in groups['lab'] | default([]) %}
{{ hostvars[host].ansible_host }} {{ hostvars[host].inventory_hostname }} {{ hostvars[host].inventory_hostname_short }}
{% endfor %}