PowerDNS.pdns
Rôle Ansible : Serveur Autoritatif PowerDNS
Un rôle Ansible créé par l'équipe de PowerDNS pour configurer le Serveur Autoritatif PowerDNS.
Exigences
Une installation d'Ansible 2.12 ou supérieure.
Dépendances
Aucune.
Variables de Rôle
Les variables disponibles sont listées ci-dessous, avec leurs valeurs par défaut (voir defaults/main.yml
):
pdns_install_repo: ""
Par défaut, le Serveur Autoritatif PowerDNS est installé à partir des dépôts de logiciels configurés sur les hôtes cibles.
# Installer le Serveur Autoritatif PowerDNS à partir du dépôt officiel 'master'
- hosts: all
roles:
- { role: PowerDNS.pdns,
pdns_install_repo: "{{ pdns_auth_powerdns_repo_master }}"
# Installer le Serveur Autoritatif PowerDNS à partir du dépôt officiel '4.7.x'
- hosts: all
roles:
- { role: PowerDNS.pdns,
pdns_install_repo: "{{ pdns_auth_powerdns_repo_47 }}"
# Installer le Serveur Autoritatif PowerDNS à partir du dépôt officiel '4.8.x'
- hosts: all
roles:
- { role: PowerDNS.pdns,
pdns_install_repo: "{{ pdns_auth_powerdns_repo_48 }}"
# Installer le Serveur Autoritatif PowerDNS à partir du dépôt officiel '4.9.x'
- hosts: all
roles:
- { role: PowerDNS.pdns,
pdns_install_repo: "{{ pdns_auth_powerdns_repo_49 }}"
Les exemples ci-dessus montrent comment installer le Serveur Autoritatif PowerDNS à partir des dépôts officiels de PowerDNS (voir la liste complète des dépôts prédéfinis dans vars/main.yml
).
- hosts: all
vars:
pdns_install_repo:
name: "powerdns" # le nom du dépôt
apt_repo_origin: "example.com" # utilisé pour verrouiller les paquets PowerDNS au dépôt fourni
apt_repo: "deb http://example.com/{{ ansible_distribution | lower }} {{ ansible_distribution_release | lower }}/pdns main"
gpg_key: "http://example.com/MYREPOGPGPUBKEY.asc" # clé publique GPG du dépôt
gpg_key_id: "MYREPOGPGPUBKEYID" # pour éviter de réimporter la clé chaque fois que le rôle est exécuté
yum_repo_baseurl: "http://example.com/centos/$basearch/$releasever/pdns"
yum_debug_symbols_repo_baseurl: "http://example.com/centos/$basearch/$releasever/pdns/debug"
roles:
- { role: PowerDNS.pdns }
Il est également possible d'installer le Serveur Autoritatif PowerDNS à partir de dépôts personnalisés comme démontré dans l'exemple ci-dessus.
Remarque : Ces dépôts sont ignorés sur Arch Linux.
pdns_install_epel: True
Par défaut, installez EPEL pour satisfaire certaines dépendances du Serveur Autoritatif PowerDNS comme protobuf
.
Pour sauter l'installation d'EPEL, réglez pdns_install_epel
sur False
.
pdns_package_name: "{{ default_pdns_package_name }}"
Le nom du paquet du Serveur Autoritatif PowerDNS, pdns
sur les systèmes de type RedHat et pdns-server
sur les systèmes de type Debian.
pdns_package_version: ""
Optionnellement, permet de définir une version spécifique du paquet du Serveur Autoritatif PowerDNS à installer.
pdns_install_debug_symbols_package: False
Installer les symboles de débogage du Serveur Autoritatif PowerDNS.
pdns_debug_symbols_package_name: "{{ default_pdns_debug_symbols_package_name }}"
Le nom du paquet de débogage du Serveur Autoritatif PowerDNS à installer lorsque pdns_install_debug_symbols_package
est True
, pdns-debuginfo
sur les systèmes de type RedHat et pdns-server-dbg
sur les systèmes de type Debian.
pdns_user: pdns
pdns_group: pdns
L'utilisateur et le groupe sous lesquels le processus du Serveur Autoritatif PowerDNS s'exécutera.
REMARQUE : Ce rôle ne crée pas l'utilisateur ou le groupe, car nous supposons qu'ils ont été créés par le paquet ou d'autres rôles.
pdns_service_name: "pdns"
Nom du service PowerDNS.
pdns_service_state: "started"
pdns_service_enabled: "yes"
Permet de spécifier l'état souhaité du service du Serveur Autoritatif PowerDNS.
pdns_disable_handlers: False
Désactiver le redémarrage automatique du service lors de changements de configuration.
pdns_config_dir: "{{ default_pdns_config_dir }}"
pdns_config_file: "pdns.conf"
Fichier et répertoire de configuration du Serveur Autoritatif PowerDNS.
pdns_config: {}
Dictionnaire contenant la configuration du Serveur Autoritatif PowerDNS.
REMARQUE : La configuration des backends PowerDNS et les directives config-dir
, setuid
et setgid
doivent être configurées via les variables de rôle pdns_user
, pdns_group
et pdns_backends
(voir templates/pdns.conf.j2
).
Par exemple :
pdns_config:
master: yes
slave: no
local-address: '192.0.2.53'
local-ipv6: '2001:DB8:1::53'
local-port: '5300'
configure le Serveur Autoritatif PowerDNS pour écouter les requêtes DNS entrantes sur le port 5300.
pdns_service_overrides:
User: {{ pdns_user }}
Group: {{ pdns_group }}
Dictionnaire avec des substitutions pour le service (seulement pour systemd).
Cela peut être utilisé pour modifier n'importe quel paramètre systemd dans la catégorie [Service]
.
pdns_backends:
bind:
config: '/dev/null'
Dictionnaire déclarant tous les backends que vous souhaitez activer. Vous pouvez utiliser plusieurs backends du même type en utilisant la syntaxe {backend}:{instance_name}
.
Par exemple :
pdns_backends:
'gmysql:one':
'user': root
'host': 127.0.0.1
'password': root
'dbname': pdns
'gmysql:two':
'user': pdns_user
'host': 192.0.2.15
'password': my_password
'dbname': dns
'bind':
'config': '/etc/named/named.conf'
'hybrid': yes
'dnssec-db': '{{ pdns_config_dir }}/dnssec.db'
Par défaut, ce rôle démarre uniquement le backend bind avec un fichier de configuration vide.
pdns_mysql_databases_credentials: {}
Informations d'identification administratives pour le backend MySQL utilisé pour créer les bases de données et utilisateurs du Serveur Autoritatif PowerDNS.
Par exemple :
pdns_mysql_databases_credentials:
'gmysql:one':
'priv_user': root
'priv_password': my_first_password
'priv_host':
- "localhost"
- "%"
'gmysql:two':
'priv_user': someprivuser
'priv_password': my_second_password
'priv_host':
- "localhost"
Remarquez que cela ne doit contenir que les informations d'identification pour les backends gmysql
fournis dans pdns_backends
.
pdns_sqlite_databases_locations: []
Emplacements des bases de données SQLite3 qui doivent être créées si vous utilisez le backend gsqlite3
.
pdns_lmdb_databases_locations: []
Emplacements des bases de données LMDB qui doivent être créées si vous utilisez le backend lmdb
.
Emplacements des fichiers de schéma de base de données mysql et sqlite3.
Lorsqu'ils sont définis, cette valeur est utilisée et ils ne sont pas automatiquement détectés.
pdns_mysql_schema_file: ''
pdns_sqlite3_schema_file: ''
Exemples de Playbooks
Exécutez en tant que maître en utilisant le backend bind (si vous avez déjà un fichier named.conf
) :
- hosts: ns1.example.net
roles:
- { role: PowerDNS.pdns }
vars:
pdns_config:
master: true
local-address: '192.0.2.53'
pdns_backends:
bind:
config: '/etc/named/named.conf'
Installez la dernière version '41' du Serveur Autoritatif PowerDNS en activant le backend MySQL.
Fournit également les informations d'identification administratives MySQL pour créer et initialiser automatiquement l'utilisateur et la base de données du Serveur Autoritatif PowerDNS :
- hosts: ns2.example.net
roles:
- { role: PowerDNS.pdns }
vars:
pdns_config:
master: true
slave: false
local-address: '192.0.2.77'
pdns_backends:
gmysql:
host: 192.0.2.120
port: 3306
user: powerdns
password: P0w3rDn5
dbname: pdns
pdns_mysql_databases_credentials:
gmysql:
priv_user: root
priv_password: myrootpass
priv_host:
- "%"
pdns_install_repo: "{{ pdns_auth_powerdns_repo_41 }}"
REMARQUE : Dans ce cas, le rôle utilisera les informations d'identification fournies dans pdns_mysql_databases_credentials
pour créer et initialiser automatiquement l'utilisateur (user
, password
) et la base de données (dbname
) en se connectant au serveur MySQL (host
, port
).
Configurez le Serveur Autoritatif PowerDNS en mode 'maître' lisant les zones à partir de deux bases de données PostgreSQL différentes :
- hosts: ns2.example.net
roles:
- { role: PowerDNS.pdns }
vars:
pdns_config:
master: true
local-port: 5300
local-address: '192.0.2.111'
pdns_backends:
'gpgsql:serverone':
host: 192.0.2.124
user: powerdns
password: P0w3rDn5
dbname: pdns2
'gpgsql:otherserver':
host: 192.0.2.125
user: root
password: root
dbname: dns
Configurez le Serveur Autoritatif PowerDNS pour fonctionner avec le backend gsqlite3
.
La base de données SQLite sera créée et initialisée par le rôle à l'emplacement spécifié par la variable database_name
.
- hosts: ns4.example.net
roles:
- { role: PowerDNS.pdns }
vars:
database_name: '/var/lib/powerdns/db.sqlite'
pdns_config:
master: true
slave: false
local-address: '192.0.2.73'
pdns_backends:
gsqlite3:
database: "{{ database_name }}"
dnssec: yes
pdns_sqlite_databases_locations:
- "{{ database_name }}"
Journal des modifications
Un journal détaillé de tous les changements appliqués au rôle est disponible ici.
Tests
Les tests sont effectués par Molecule.
$ pip install tox
Pour tester tous les scénarios, exécutez
$ tox
Pour exécuter une commande Molecule personnalisée
$ tox -e ansible214 -- molecule test -s pdns-49
Licence
MIT
Install and configure the PowerDNS Authoritative DNS Server
ansible-galaxy install PowerDNS.pdns