diff --git a/ansible/inventory/00_static_hosts.yml.example b/ansible/inventory/00_static_hosts.yml.example new file mode 100644 index 0000000..ef62209 --- /dev/null +++ b/ansible/inventory/00_static_hosts.yml.example @@ -0,0 +1,43 @@ +# ================================================================ +# Static inventory for the core Homelab infrastructure +# These machines are configured manually and are not +# destroyed/recreated by Terraform. +# ================================================================ + +all: + children: + # ------------------------------------------- + # Group for our DNS servers + # ------------------------------------------- + dns_servers: + hosts: + dns.example.com: + ansible_host: 192.168.1.10 + ansible_user: admin + + # ------------------------------------------- + # Group for our Proxmox hypervisors + # ------------------------------------------- + proxmox_hosts: + hosts: + pve01.example.com: + ansible_host: 192.168.1.20 + ansible_user: root + + # ------------------------------------------- + # Group for Lab machines (for lab DNS) + # ------------------------------------------- + lab: + hosts: + pve01.example.com: {} + + # ================================================================ + # Best practice: add a variable for the Python interpreter + # to avoid ambiguities between python2 and python3. + # ================================================================ + homelab_core: + children: + dns_servers: + proxmox_hosts: + vars: + ansible_python_interpreter: /usr/bin/python3 diff --git a/ansible/inventory/group_vars/all/static_records.yml.example b/ansible/inventory/group_vars/all/static_records.yml.example new file mode 100644 index 0000000..91c5083 --- /dev/null +++ b/ansible/inventory/group_vars/all/static_records.yml.example @@ -0,0 +1,130 @@ +--- +# ================================================================= +# Fichier d'exemple pour les enregistrements DNS statiques +# +# Copiez ce fichier vers `ansible/inventory/group_vars/all/static_records.yml` +# ou un fichier similaire (ex: `ansible/inventory/group_vars/VOTRE_GROUPE/dns_records.yml`) +# et adaptez les valeurs à votre environnement. +# +# Ce fichier est destiné à définir les enregistrements DNS pour les machines +# ou services ayant des adresses IP fixes, en particulier ceux qui ne +# sont pas gérés par des systèmes de provisioning dynamiques comme Terraform. +# +# La structure ci-dessous est un exemple. Vous devrez l'adapter +# à la manière dont vos playbooks Ansible attendent ces données +# (par exemple, pour configurer Dnsmasq, BIND, ou un service DNS cloud). +# ================================================================= + +# Exemple de structure pour les enregistrements DNS d'un domaine spécifique (ex: yourdomain.local) +# Remplacez "yourdomain_local_records" par une clé plus descriptive si nécessaire, +# par exemple "dns_records_lan" ou "dns_records_dmz". +# La structure de chaque enregistrement (ip, names) est un exemple. +# Vos playbooks peuvent attendre une structure différente. + +# dns_records_yourdomain_local: +# # --- Infrastructure et serveurs critiques --- +# - ip: "192.168.1.1" +# names: +# - "router.yourdomain.local" +# - "gateway.yourdomain.local" +# - "firewall.yourdomain.local" +# # Vous pourriez ajouter d'autres attributs, ex: type: "A", ttl: 3600 +# +# - ip: "192.168.1.10" +# names: +# - "dns-primary.yourdomain.local" # Nom FQDN du serveur DNS lui-même +# - "dns1.yourdomain.local" +# - "ns1.yourdomain.local" +# +# - ip: "192.168.1.11" # Un serveur DNS secondaire, par exemple +# names: +# - "dns-secondary.yourdomain.local" +# - "dns2.yourdomain.local" +# - "ns2.yourdomain.local" +# +# - ip: "192.168.1.20" +# names: +# - "hypervisor01.yourdomain.local" +# - "pve01.yourdomain.local" # Si c'est un Proxmox +# +# - ip: "192.168.1.50" +# names: +# - "nas.yourdomain.local" +# - "storage.yourdomain.local" +# +# # --- Périphériques réseau (imprimantes, caméras, etc.) --- +# - ip: "192.168.1.100" +# names: +# - "printer-color.yourdomain.local" +# - "printer01.yourdomain.local" +# +# - ip: "192.168.1.101" +# names: +# - "camera-garage.yourdomain.local" +# +# # --- Services hébergés --- +# - ip: "192.168.1.150" # Peut-être une VM ou un conteneur +# names: +# - "webserver.yourdomain.local" +# - "wiki.yourdomain.local" # Si le même serveur héberge plusieurs services +# +# # --- Enregistrements CNAME (Alias) --- +# # La structure pour les CNAMEs peut varier. Voici un exemple : +# # - name: "www.yourdomain.local" +# # cname_target: "webserver.yourdomain.local" +# # type: "CNAME" +# +# # --- Enregistrements MX (Mail Exchange) --- +# # Si vous hébergez votre propre serveur de messagerie : +# # - name: "yourdomain.local" # Le domaine pour lequel le MX est défini +# # mail_server: "mail.yourdomain.local" # FQDN du serveur de messagerie +# # priority: 10 # Priorité MX (valeur plus basse = plus prioritaire) +# # type: "MX" +# # +# # - ip: "192.168.1.60" # IP du serveur de messagerie +# # names: +# # - "mail.yourdomain.local" + +# Vous pouvez avoir des listes séparées pour différents domaines ou zones +# si votre configuration DNS le requiert. +# Par exemple, pour un domaine "lab.yourdomain.local": +# dns_records_lab_yourdomain_local: +# - ip: "10.0.0.10" +# names: +# - "kube-master.lab.yourdomain.local" +# - ip: "10.0.0.100" +# names: +# - "gitlab.lab.yourdomain.local" + +# IMPORTANT: +# La variable `dns_records_home` et `dns_records_lab` utilisée dans votre fichier original +# `static_records.yml` est une façon valide de structurer ces données. +# L'exemple ci-dessus est plus générique. Si vos playbooks sont déjà +# conçus pour utiliser `dns_records_home` et `dns_records_lab`, +# vous devriez structurer votre fichier `.example` pour correspondre à cela. +# +# Exemple reprenant votre structure originale : + +dns_records_home: # Pour le domaine "home.votredomaine.fr" + - ip: "192.168.1.1" # Exemple: Votre routeur/passerelle + names: + - "router.home.votredomaine.fr" + - "gateway" + - ip: "192.168.1.10" # Exemple: Votre serveur DNS principal pour ce domaine + names: + - "dns.home.votredomaine.fr" + - "dns" + - ip: "192.168.1.20" # Exemple: Un NAS + names: + - "nas.home.votredomaine.fr" + - "nas" + +dns_records_lab: # Pour un autre domaine, par exemple "lab.votredomaine.fr" + - ip: "192.168.100.10" # Exemple: Un hyperviseur dans le lab + names: + - "pve.lab.votredomaine.fr" + - "pve" + - ip: "192.168.100.20" # Exemple: Un serveur de build + names: + - "jenkins.lab.votredomaine.fr" + - "jenkins" \ No newline at end of file diff --git a/ansible/inventory/host_vars/dns-server.example.yml.example b/ansible/inventory/host_vars/dns-server.example.yml.example new file mode 100644 index 0000000..babc2a5 --- /dev/null +++ b/ansible/inventory/host_vars/dns-server.example.yml.example @@ -0,0 +1,79 @@ +--- +# =============================================================== +# Fichier d'exemple pour les variables d'hôte d'un serveur DNS +# +# Copiez ce fichier vers `ansible/inventory/host_vars/VOTRE_SERVEUR_DNS.yml` +# (par exemple, `dns-primary.yourdomain.local.yml`) et adaptez les valeurs. +# +# Ces variables sont typiquement utilisées pour configurer un service +# comme Dnsmasq ou BIND sur un hôte spécifique. +# =============================================================== + +# Le nom de domaine principal que ce serveur DNS va gérer localement. +# Remplacez "yourdomain.local" par votre propre nom de domaine. +dnsmasq_domain_name: "yourdomain.local" + +# Taille du cache DNS pour dnsmasq. +# Une valeur plus élevée (ex: 1000) peut améliorer les performances sur +# les réseaux avec de nombreux appareils ou des requêtes répétées. +dnsmasq_cache_size: 500 + +# Liste des serveurs DNS en amont (upstream). +# Ce sont les serveurs auxquels votre DNS local transmettra les requêtes +# pour les domaines qu'il ne gère pas lui-même (par exemple, google.com). +# Remplacez ces adresses par celles de vos fournisseurs DNS préférés (ex: Cloudflare, Google, Quad9, ou votre FAI). +# Il est recommandé d'en utiliser au moins deux pour la redondance. +dnsmasq_upstream_servers: + - "1.1.1.1" # Exemple: Cloudflare + - "8.8.8.8" # Exemple: Google + # - "9.9.9.9" # Exemple: Quad9 + +# Adresses IP sur lesquelles le service Dnsmasq doit écouter. +# "127.0.0.1" est pour les requêtes locales sur le serveur lui-même. +# "{{ ansible_default_ipv4.address }}" est une variable "fact" d'Ansible qui +# est automatiquement remplacée par l'adresse IPv4 principale de l'hôte. +# Cela rend la configuration portable si l'IP de votre serveur DNS change. +dnsmasq_listen_addresses: + - "127.0.0.1" + - "{{ ansible_default_ipv4.address }}" # Assurez-vous que l'hôte a bien une adresse IPv4 par défaut. + # Si vous avez plusieurs interfaces réseau et souhaitez écouter sur une IP spécifique, + # vous pouvez la mettre en dur ici, par exemple : + # - "192.168.1.10" + +# ---------------------------------------------------------------- +# Section DHCP - Optionnelle +# +# Décommentez et configurez cette section si vous souhaitez que +# ce serveur DNS agisse également comme serveur DHCP pour votre réseau. +# Assurez-vous qu'aucun autre serveur DHCP (comme celui de votre routeur) +# n'est actif sur le même segment réseau pour éviter les conflits. +# ---------------------------------------------------------------- +dnsmasq_dhcp_enabled: false + +# Exemple de configuration DHCP (si dnsmasq_dhcp_enabled est true): +# +# # Plage d'adresses IP à distribuer par le DHCP, et durée du bail. +# # Format: "IP_DEBUT,IP_FIN,DUREE_BAIL" (ex: "192.168.1.100,192.168.1.199,12h") +# dnsmasq_dhcp_range: "192.168.1.150,192.168.1.250,24h" +# +# # Adresse IP de la passerelle (routeur) à fournir aux clients DHCP. +# dnsmasq_dhcp_router: "192.168.1.1" +# +# # Options DHCP supplémentaires (exemple : serveur NTP) +# # dnsmasq_dhcp_options: +# # - "option:ntp-server,192.168.1.10" # Si votre serveur DNS est aussi serveur NTP + +# Autres variables spécifiques à votre configuration DNS pourraient être ajoutées ici. +# Par exemple, pour activer ou désactiver des fonctionnalités de dnsmasq: +# dnsmasq_no_hosts: false # Si true, dnsmasq n'utilisera pas /etc/hosts +# dnsmasq_expand_hosts: true # Si true, ajoute le domaine aux noms simples dans /etc/hosts + +# Si vous utilisez des listes de blocage (blocklists) pour le filtrage DNS: +# dnsmasq_blocklist_urls: +# - "https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts" +# - "https://mirror1.malwaredomains.com/files/justdomains" + +# Active la journalisation des requêtes DNS (utile pour le débogage) +# dnsmasq_log_queries: false +# dnsmasq_log_dhcp: false # Active la journalisation des événements DHCP +#