PowerDNS.pdns
Ansible Роль: Авторитетный Сервер PowerDNS
Роль Ansible, созданная командой PowerDNS для настройки Авторитетного Сервера PowerDNS.
Требования
Установка Ansible версии 2.12 или выше.
Зависимости
Нет.
Переменные роли
Доступные переменные перечислены ниже с их значениями по умолчанию (см. defaults/main.yml):
pdns_install_repo: ""
По умолчанию, Авторитетный Сервер PowerDNS устанавливается из программных репозиториев, настроенных на целевых хостах.
# Установка Авторитетного Сервера PowerDNS из официального репозитория 'master'
- hosts: all
  roles:
    - { role: PowerDNS.pdns,
        pdns_install_repo: "{{ pdns_auth_powerdns_repo_master }}" }
# Установка Авторитетного Сервера PowerDNS из официального репозитория '4.7.x'
- hosts: all
  roles:
    - { role: PowerDNS.pdns,
        pdns_install_repo: "{{ pdns_auth_powerdns_repo_47 }}" }
        
# Установка Авторитетного Сервера PowerDNS из официального репозитория '4.8.x'
- hosts: all
  roles:
    - { role: PowerDNS.pdns,
        pdns_install_repo: "{{ pdns_auth_powerdns_repo_48 }}" }
        
# Установка Авторитетного Сервера PowerDNS из официального репозитория '4.9.x'
- hosts: all
  roles:
    - { role: PowerDNS.pdns,
        pdns_install_repo: "{{ pdns_auth_powerdns_repo_49 }}" }
Примеры выше показывают, как установить Авторитетный Сервер PowerDNS из официальных репозиториев PowerDNS (см. полный список предопределенных репозиториев в vars/main.yml).
- hosts: all
  vars:
    pdns_install_repo:
      name: "powerdns" # имя репозитория
      apt_repo_origin: "example.com"  # используется для закрепления пакетов PowerDNS за указанным репозиторием
      apt_repo: "deb http://example.com/{{ ansible_distribution | lower }} {{ ansible_distribution_release | lower }}/pdns main"
      gpg_key: "http://example.com/MYREPOGPGPUBKEY.asc" # публичный GPG ключ репозитория
      gpg_key_id: "MYREPOGPGPUBKEYID" # чтобы избежать повторной импорта ключа каждый раз при выполнении роли
      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 }
Также возможно установить Авторитетный Сервер PowerDNS из пользовательских репозиториев, как показано в примере выше. Примечание: Эти репозитории игнорируются на Arch Linux.
 pdns_install_epel: True
По умолчанию, устанавливается EPEL для удовлетворения некоторых зависимостей Авторитетного Сервера PowerDNS, таких как protobuf.
Чтобы пропустить установку EPEL, установите pdns_install_epel в False.
pdns_package_name: "{{ default_pdns_package_name }}"
Имя пакета Авторитетного Сервера PowerDNS, pdns в системах на базе RedHat и pdns-server в системах на базе Debian.
pdns_package_version: ""
По желанию, можно установить конкретную версию пакета Авторитетного Сервера PowerDNS для установки.
pdns_install_debug_symbols_package: False
Установка отладочных символов для Авторитетного Сервера PowerDNS.
pdns_debug_symbols_package_name: "{{ default_pdns_debug_symbols_package_name }}"
Имя отладочного пакета Авторитетного Сервера PowerDNS, который будет установлен, когда pdns_install_debug_symbols_package равно True, pdns-debuginfo в системах на базе RedHat и pdns-server-dbg в системах на базе Debian.
pdns_user: pdns
pdns_group: pdns
Пользователь и группа, от имени которых будет работать процесс Авторитетного Сервера PowerDNS. 
ПРИМЕЧАНИЕ: Эта роль не создает пользователя или группу, так как предполагается, что они были созданы
пакетом или другими ролями.
pdns_service_name: "pdns"
Имя сервиса PowerDNS.
pdns_service_state: "started"
pdns_service_enabled: "yes"
Позволяет указать желаемое состояние сервиса Авторитетного Сервера PowerDNS.
pdns_disable_handlers: False
Отключить автоматический перезапуск сервиса при изменении конфигурации.
pdns_config_dir: "{{ default_pdns_config_dir }}"
pdns_config_file: "pdns.conf"
Файл конфигурации и каталог для Авторитетного Сервера PowerDNS.
pdns_config: {}
Словарь, содержащий конфигурацию Авторитетного Сервера PowerDNS. 
ПРИМЕЧАНИЕ: Конфигурация бэкендов PowerDNS и директивы config-dir, setuid и setgid должны быть настроены через переменные роли pdns_user, pdns_group и pdns_backends (см. templates/pdns.conf.j2).
Например:
pdns_config:
  master: yes
  slave: no
  local-address: '192.0.2.53'
  local-ipv6: '2001:DB8:1::53'
  local-port: '5300'
настраивает Авторитетный Сервер PowerDNS на прослушивание входящих DNS-запросов на порту 5300.
pdns_service_overrides:
  User: {{ pdns_user }}
  Group: {{ pdns_group }}
Словарь с переопределениями для сервиса (только systemd).
Это можно использовать для изменения любых настроек systemd в категории [Service].
pdns_backends:
  bind:
    config: '/dev/null'
Словарь, объявляющий все бэкенды, которые вы хотите включить. Вы можете использовать
несколько бэкендов одного типа, используя синтаксис {backend}:{instance_name}.
Например:
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'
По умолчанию эта роль запускает только бэкенд bind с пустым файлом конфигурации.
pdns_mysql_databases_credentials: {}
Административные учетные данные для бэкенда MySQL, используемые для создания баз данных и пользователей Авторитетного Сервера PowerDNS. Пример:
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"
Обратите внимание, что эти учетные данные должны содержать
только учетные данные для бэкендов gmysql, указанные в pdns_backends.
pdns_sqlite_databases_locations: []
Расположения баз данных SQLite3, которые необходимо создать, если используется
бэкенд gsqlite3.
pdns_lmdb_databases_locations: []
Расположения баз данных LMDB, которые необходимо создать, если используется
бэкенд lmdb.
Расположения схем баз данных mysql и sqlite3. Когда это значение установлено, оно используется и автоматически не определяется.
pdns_mysql_schema_file: ''
pdns_sqlite3_schema_file: ''
Примеры проигрывателей
Запуск в качестве мастера, используя бэкенд bind (когда у вас уже есть файл 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'
Установить последнюю сборку '41' Авторитетного Сервера PowerDNS, включая бэкенд MySQL. Также предоставляет административные учетные данные MySQL для автоматического создания и инициализации пользователя и базы данных Авторитетного Сервера 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 }}"
ПРИМЕЧАНИЕ: В этом случае роль будет использовать учетные данные, предоставленные в pdns_mysql_databases_credentials, для автоматического создания и инициализации пользователя (user, password) и базы данных (dbname), подключаясь к серверу MySQL (host, port).
Настроить Авторитетный Сервис PowerDNS в режиме 'master', считывая зоны из двух разных баз данных PostgreSQL:
- 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
Настроить Авторитетный Сервер PowerDNS для работы с бэкендом gsqlite3.
База данных SQLite будет создана и инициализирована ролью
в расположении, указанном переменной 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 }}"
Изменения
Подробный список изменений, внесенных в роль, доступен здесь.
Тестирование
Тестирование выполняется с помощью Molecule.
$ pip install tox
Чтобы протестировать все сценарии, выполните
$ tox
Чтобы выполнить пользовательскую команду molecule
$ tox -e ansible214 -- molecule test -s pdns-49
Лицензия
MIT
Install and configure the PowerDNS Authoritative DNS Server
ansible-galaxy install PowerDNS.pdns