Compare commits

...

17 Commits

Author SHA1 Message Date
d7275597a0 Merge pull request 'inventoryFromAnsible' (#4) from inventoryFromAnsible into master
Reviewed-on: #4
2024-05-06 18:48:18 +00:00
c787b5c904 feat: Change configuration file name 2024-05-06 20:40:10 +02:00
f94aebef41 feat: Allow only local request 2024-05-06 20:33:38 +02:00
8458675875 fix: Deduplicate variable 2024-05-06 20:32:32 +02:00
9481a70c39 fix: Add rev-server option 2024-05-06 20:19:12 +02:00
c60537f419 feat: Simplify conf variables 2024-05-06 20:18:05 +02:00
347114c51b feat: Add rev-server option 2024-05-06 20:10:23 +02:00
1090043f34 Revert "feat: Generate file for all ansible hosts"
This reverts commit 3b2c621dca.
2023-12-13 17:24:08 +01:00
3b2c621dca feat: Generate file for all ansible hosts 2023-12-13 15:59:13 +01:00
6258dd6d57 [EVO] Gérer des fichiers spécifiques 2023-09-26 11:59:57 +02:00
201ae6d94a [EVO] Utiliser l'inventaire d'ansible 2023-09-25 17:30:04 +02:00
b9baf12530 Merge pull request '[EVO] Grouper les IPv4 et IPv6' (#3) from groupIPs into master
Reviewed-on: #3
2023-06-15 12:54:45 +00:00
215b965d8b [EVO] Grouper les IPv4 et IPv6 2023-06-15 11:12:20 +02:00
712b394e8d Merge pull request '[FIX] Ignorer les serveurs DNS pour le déploiement des clients' (#2) from fixDNSitself into master
Reviewed-on: #2
2023-05-26 09:12:09 +00:00
39043a28e6 [FIX] Ignorer les serveurs DNS pour le déploiement des clients 2023-05-26 10:32:58 +02:00
db48a99f30 Merge pull request '[INFO] Création du rôle' (#1) from alpha into master
Reviewed-on: #1
2023-05-24 14:33:14 +00:00
bce7811cb7 [INFO] Création du rôle 2023-05-24 16:32:31 +02:00
11 changed files with 332 additions and 6 deletions

129
README.md
View File

@@ -1,3 +1,128 @@
# role_modele
# role_dnsmasq
Modèle
Ce rôle permet d'installer et configurer dnsmasq.
## Variables
### dnsmasq_domain
Nom de domain utilisé pour qualifier les noms courts.
*<span style="text-decoration: underline">Valeur par défaut:</span> aucune*
### dnsmasq_servers
Liste d'adresses IP auxquelles les requêtes DNS sont transmises si dnsmasq ne porte pas le domaine.
*<span style="text-decoration: underline">Valeur par défaut:</span> aucune*
### dnsmasq_hosts
Liste d'IP ou de noms d'hôtes servant de serveur DNS.
*<span style="text-decoration: underline">Valeur par défaut:</span> aucune*
### dnsmasq_host_ips
Liste des IP de l'hôte.
*<span style="text-decoration: underline">Valeur par défaut:</span> aucune*
### dnsmasq_host_aliases
Liste d'alias pour un hôte (*host_groups*).
*<span style="text-decoration: underline">Valeur par défaut:</span> aucune*
### dnsmasq_client_filename
Nom du fichier pour le client.
*<span style="text-decoration: underline">Valeur par défaut:</span> `{{ inventory_hostname }}`*
### dnsmasq_client_hostname
Nom d'hôte du client.
*<span style="text-decoration: underline">Valeur par défaut:</span> `{{ inventory_hostname }} {{ inventory_hostname_short }}`*
### dnsmasq_specifics
Liste de dictionnaires contenant le nom d'hôte, les alias et la liste d'IP associées.
*<span style="text-decoration: underline">Valeur par défaut:</span> aucune*
## Exemple d'utilisation
### inventory.yml
```yaml
---
all:
hosts:
host1.ykn.local:
host2.ykn.local:
children:
dnsservers:
hosts:
dnsmasq1.ykn.local:
dnsmasq2.ykn.local:
```
### group_vars/all.yml
```yaml
---
dnsmasq_hosts: "{{ groups['dnsservers'] }}"
```
### group_vars/dnsservers.yml
```yaml
---
dnsmasq_domain: ykn.local
dnsmasq_servers:
- 127.0.0.1#53000
- ::1#53000
```
### host_vars/host1.ykn.local.yml
```yaml
---
dnsmasq_host_ipv4: [192.168.50.6]
dnsmasq_host_ipv6: [fd00:ff50::d006]
dnsmasq_host_alias:
- monsuperhost1.ykn.local
- monsuperhost1
- toto.ykn.local
- toto
```
### playbook.yml
```yaml
---
- name: Déployer les serveurs DNS
hosts: dnsservers
roles:
- name: stubby
- name: dnsmasq
- name: nftables
- name: Gérer l'enregistrement DNS
hosts: 'all:!dnsservers'
gather_facts: false
tasks:
- name: Inclure le rôle
ansible.builtin.include_role:
name: dnsmasq
tasks_from: client
```

17
defaults/main.yml Normal file
View File

@@ -0,0 +1,17 @@
---
# defaults file for dnsmasq
dnsmasq_domain: ""
dnsmasq_servers: []
dnsmasq_rev_servers: []
dnsmasq_bogus_priv_enabled: true
dnsmasq_hosts: []
dnsmasq_host_ips: []
dnsmasq_host_aliases: []
dnsmasq_client_filename: "{{ inventory_hostname }}"
dnsmasq_client_hostname: "{{ inventory_hostname }} {{ inventory_hostname_short }}"
dnsmasq_specifics: []

18
handlers/main.yml Normal file
View File

@@ -0,0 +1,18 @@
---
# handlers file for dnsmasq
- name: Recharger dnsmasq.service
become: true
ansible.builtin.systemd:
state: reloaded
name: dnsmasq.service
- name: Recharger dnsmasq.service sur les serveurs
become: true
ansible.builtin.systemd:
state: reloaded
name: dnsmasq.service
loop: "{{ dnsmasq_hosts }}"
loop_control:
loop_var: dnsserver
delegate_to: "{{ dnsserver }}"

View File

@@ -1,14 +1,15 @@
galaxy_info:
namespace: ykn
author: pulsar89.5
description: Rôle modèle
description: Rôle de déploiement de dnsmasq
license: GPL-3.0-or-later
min_ansible_version: 2.1
min_ansible_version: '2.1'
platforms:
- name: Debian (LXD)
- name: Debian
versions:
- 11
- all
dependencies: []

34
tasks/client.yml Normal file
View File

@@ -0,0 +1,34 @@
---
# tasks file for security
- name: Déployer le fichier lié à l'hôte
ansible.builtin.template:
owner: dnsmasq
group: root
mode: u=rw,g=r,o=r
src: "{{ role_path }}/templates/host.conf.j2"
dest: /srv/dnsmasq/{{ dnsmasq_client_filename }}.conf
when:
- dnsmasq_hosts | length > 0
- dnsmasq_host_ipv4 not in dnsmasq_hosts
loop: "{{ dnsmasq_hosts }}"
loop_control:
loop_var: dnsserver
delegate_to: "{{ dnsserver }}"
become: true
notify: Recharger dnsmasq.service sur les serveurs
- name: Supprimer le fichier lié à l'hôte
ansible.builtin.file:
path: /srv/dnsmasq/{{ dnsmasq_client_filename }}.conf
state: absent
when:
- dnsmasq_hosts | length > 0
- dnsmasq_host_ipv4 not in dnsmasq_hosts
tags: [destruction, never]
loop: "{{ dnsmasq_hosts }}"
loop_control:
loop_var: dnsserver
delegate_to: "{{ dnsserver }}"
become: true
notify: Recharger dnsmasq.service sur les serveurs

44
tasks/configuration.yml Normal file
View File

@@ -0,0 +1,44 @@
---
# tasks file for security
- name: Supprimer l'ancien fichier de configuration
ansible.builtin.file:
path: /etc/dnsmasq.d/cache.conf
state: absent
become: true
- name: Configurer dnsmasq
ansible.builtin.template:
src: dnsmasq.conf.j2
dest: /etc/dnsmasq.d/dns.conf
owner: root
group: root
mode: u=rw,g=r,o=r
become: true
notify: Recharger dnsmasq.service
- name: Déployer la configuration de l'instance
ansible.builtin.template:
src: host.conf.j2
dest: /srv/dnsmasq/{{ inventory_hostname }}.conf
owner: dnsmasq
group: root
mode: u=rw,g=r,o=r
become: true
notify: Recharger dnsmasq.service
- name: Déployer les configurations specifiques
ansible.builtin.template:
src: specific.conf.j2
dest: "{{ filename }}"
owner: dnsmasq
group: root
mode: u=rw,g=r,o=r
when: dnsmasq_specifics | length > 0
become: true
notify: Recharger dnsmasq.service
loop: "{{ dnsmasq_specifics }}"
loop_control:
label: "{{ filename }}"
vars:
filename: /srv/dnsmasq/{{ item.hostname }}.conf

16
tasks/installation.yml Normal file
View File

@@ -0,0 +1,16 @@
---
# tasks file for dnsmasq
- name: Installer dnsmasq
become: true
ansible.builtin.package:
name: dnsmasq
- name: Créer le dossier dédié à dnsmasq
ansible.builtin.file:
path: /srv/dnsmasq
state: directory
owner: dnsmasq
group: root
mode: u=rwX,g=rX,o=rX
become: true

10
tasks/main.yml Normal file
View File

@@ -0,0 +1,10 @@
---
# tasks file for dnsmasq
- name: Importer les tâches d'installation
tags: installation
ansible.builtin.import_tasks: installation.yml
- name: Importer les tâches de configuration
tags: configuration
ansible.builtin.import_tasks: configuration.yml

50
templates/dnsmasq.conf.j2 Normal file
View File

@@ -0,0 +1,50 @@
# {{ ansible_managed }}
# Répondre aux demandes locales uniquement
local-service
# Ne pas transmettre les requêtes avec un nom court (pas FQDN)
domain-needed
{% if dnsmasq_bogus_priv_enabled %}
# Ne pas envoyer les requête sur les IP privées
bogus-priv
{% endif %}
# Spécifié le domaine pour qualifié les noms courts
domain={{ dnsmasq_domain }}
local=/{{ dnsmasq_domain }}/
# Ajoute le nom de domaine au noms simples
expand-hosts
# Ne pas mettre en cache les requêtes n'aboutissant pas
no-negcache
# Ne pas utiliser /etc/resolv.conf
no-resolv
# Ne pas utiliser /etc/hosts
no-hosts
# Définir les serveurs DNS à suivre
{% for server in dnsmasq_servers %}
server={{ server }}
{% endfor %}
# Définir les serveurs DNS à suivre (PTR)
{% for server in dnsmasq_rev_servers %}
rev-server={{ server }}
{% endfor %}
# Bloquer le rebond DNS
stop-dns-rebind
# Autoriser le rebond sur localhost
rebind-localhost-ok
# Taille du cache DNS
cache-size=1024
# Définir le fichier des entrées personnalisées
addn-hosts=/srv/dnsmasq

5
templates/host.conf.j2 Normal file
View File

@@ -0,0 +1,5 @@
# {{ ansible_managed }}
{% for ip in dnsmasq_host_ips %}
{{ ip }} {{ dnsmasq_client_hostname }} {{ dnsmasq_host_aliases | join(' ') }}
{% endfor %}

View File

@@ -0,0 +1,6 @@
# {{ ansible_managed }}
{% for ip in item.ips %}
{% set aliases = item.get('aliases', []) %}
{{ ip }} {{ ([item.hostname] + aliases) | join(' ') }}
{% endfor %}