PowerDNS.pdns
Ansible角色:PowerDNS权威服务器
这是一个由PowerDNS团队创建的Ansible角色,用于设置PowerDNS权威服务器。
要求
需要安装Ansible版本2.12或更高。
依赖
无。
角色变量
可用的变量如下所示,以及它们的默认值(请参见defaults/main.yml
):
pdns_install_repo: ""
默认情况下,从目标主机上配置的软件仓库中安装PowerDNS权威服务器。
# 从' master '官方仓库安装PowerDNS权威服务器
- hosts: all
roles:
- { role: PowerDNS.pdns,
pdns_install_repo: "{{ pdns_auth_powerdns_repo_master }}"
# 从' 4.7.x '官方仓库安装PowerDNS权威服务器
- hosts: all
roles:
- { role: PowerDNS.pdns,
pdns_install_repo: "{{ pdns_auth_powerdns_repo_47 }}"
# 从' 4.8.x '官方仓库安装PowerDNS权威服务器
- hosts: all
roles:
- { role: PowerDNS.pdns,
pdns_install_repo: "{{ pdns_auth_powerdns_repo_48 }}"
# 从' 4.9.x '官方仓库安装PowerDNS权威服务器
- 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_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权威服务器软件包的名称,在类似RedHat的系统中为pdns
,在类似Debian的系统中为pdns-server
。
pdns_package_version: ""
可选地,允许设置要安装的PowerDNS权威服务器软件包的特定版本。
pdns_install_debug_symbols_package: False
安装PowerDNS权威服务器调试符号。
pdns_debug_symbols_package_name: "{{ default_pdns_debug_symbols_package_name }}"
在pdns_install_debug_symbols_package
为True
时要安装的PowerDNS权威服务器调试包的名称,
在类似RedHat的系统中为pdns-debuginfo
,在类似Debian的系统中为pdns-server-dbg
。
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权威服务器在端口5300上监听DNS请求。
pdns_service_overrides:
User: {{ pdns_user }}
Group: {{ pdns_group }}
服务的覆盖字典(仅适用于systemd)。
可用于更改[Service]
类别中的任何systemd设置。
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: {}
用于创建PowerDNS权威服务器数据库和用户的MySQL后端的管理凭据。
例如:
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"
请注意,这仅需包含在pdns_backends
中提供的gmysql
后端的凭据。
pdns_sqlite_databases_locations: []
如果使用gsqlite3后端,则需要创建的SQLite3数据库的位置。
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权威服务器为'主'模式,从两个不同的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