forked from ISTI-ansible-roles/ansible-roles
Role that installs PowerDNS-Admin.
This commit is contained in:
parent
34be54b669
commit
e4a40a2ae1
|
@ -0,0 +1,27 @@
|
||||||
|
---
|
||||||
|
pdns_admin_install: True
|
||||||
|
pdns_admin_dir: 'pdns_admin-{{ pdns_admin_version }}.linux-amd64'
|
||||||
|
pdns_admin_git_repo_url: 'https://github.com/ngoduykhanh/PowerDNS-Admin.git'
|
||||||
|
pdns_admin_user: pdnsadmin
|
||||||
|
pdns_admin_home: /opt/pdnsadmin
|
||||||
|
pdns_admin_cmd: '{{ pdns_admin_dist_dir }}/{{ pdns_admin_dir }}/pdns_admin'
|
||||||
|
pdns_admin_http_port: 9393
|
||||||
|
pdns_admin_opts: ''
|
||||||
|
pdns_admin_loglevel: 'WARN'
|
||||||
|
pdns_admin_logdir: '/var/log/pdnsadmin'
|
||||||
|
pdns_admin_logfile: '{{ pdns_admin_logdir }}/pdnsadmin.log'
|
||||||
|
|
||||||
|
pdns_admin_prereqs:
|
||||||
|
- git
|
||||||
|
- python3
|
||||||
|
- python3-pip
|
||||||
|
- python3-virtualenv
|
||||||
|
- python3-dev
|
||||||
|
- libmysqlclient-dev
|
||||||
|
- libxmlsec1-dev
|
||||||
|
- pkg-config
|
||||||
|
- libpq-dev
|
||||||
|
- libsasl2-dev
|
||||||
|
- libldap2-dev
|
||||||
|
- libssl-dev
|
||||||
|
- python3-psycopg2
|
|
@ -0,0 +1,4 @@
|
||||||
|
---
|
||||||
|
- name: Restart pdns_admin
|
||||||
|
service: name=powerdns-admin state=restarted
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
---
|
||||||
|
dependencies:
|
||||||
|
- role: '../../library/roles/nginx'
|
|
@ -0,0 +1,74 @@
|
||||||
|
---
|
||||||
|
- block:
|
||||||
|
- name: Create the user under pdns_admin will run
|
||||||
|
user: name={{ pdns_admin_user }} home={{ pdns_admin_home }} createhome=no shell=/usr/sbin/nologin system=yes
|
||||||
|
|
||||||
|
- name: Create the pdns_admin server base directory
|
||||||
|
file: dest={{ item }} state=directory owner=root group=root
|
||||||
|
with_items:
|
||||||
|
- '{{ pdns_admin_home }}'
|
||||||
|
|
||||||
|
- name: Create the pdns_admin server log directory
|
||||||
|
file: dest={{ item }} state=directory owner={{ pdns_admin_user }} group={{ pdns_admin_user }}
|
||||||
|
with_items:
|
||||||
|
- '{{ pdns_admin_logdir }}'
|
||||||
|
|
||||||
|
- name: Install the pdns_admin prerequisite deb packages
|
||||||
|
apt: pkg={{ item }} state=present update_cache=yes cache_valid_time=1800
|
||||||
|
with_items: '{{ pdns_admin_prereqs }}'
|
||||||
|
|
||||||
|
- name: Clone pdns_admin
|
||||||
|
git: repo={{ pdns_admin_git_repo_url }} dest={{ pdns_admin_home }}
|
||||||
|
|
||||||
|
- name: Make the upload directory writeable by the pdnsadmin user
|
||||||
|
file: dest={{ pdns_admin_home }}/upload recurse=yes owner={{ pdns_admin_user }} group={{ pdns_admin_user }}
|
||||||
|
|
||||||
|
- name: Install the pdns_admin configuration
|
||||||
|
template: src=config.py dest={{ pdns_admin_home }}/config.py
|
||||||
|
notify: Restart pdns_admin
|
||||||
|
|
||||||
|
- name: Create a python3 virtualenv
|
||||||
|
shell: cd {{ pdns_admin_home }} ; virtualenv -p python3 flask
|
||||||
|
args:
|
||||||
|
creates: '{{ pdns_admin_home }}/flask'
|
||||||
|
notify: Restart pdns_admin
|
||||||
|
|
||||||
|
- name: Install the virtualenv requirements
|
||||||
|
pip: requirements={{ pdns_admin_home }}/requirements.txt virtualenv={{ pdns_admin_home }}/flask virtualenv_site_packages=True
|
||||||
|
notify: Restart pdns_admin
|
||||||
|
|
||||||
|
- name: Install psycopg2 as an additional requirement
|
||||||
|
pip: name=psycopg2-binary virtualenv={{ pdns_admin_home }}/flask
|
||||||
|
notify: Restart pdns_admin
|
||||||
|
|
||||||
|
- name: Initialise the database
|
||||||
|
shell: cd {{ pdns_admin_home }}; . {{ pdns_admin_home }}/flask/bin/activate ; ./create_db.py ; touch {{ pdns_admin_logdir }}/.db_initialised
|
||||||
|
args:
|
||||||
|
creates: '{{ pdns_admin_logdir }}/.db_initialised'
|
||||||
|
|
||||||
|
- name: Install the pdns_admin server systemd unit
|
||||||
|
template: src=powerdns-admin.service dest=/etc/systemd/system/powerdns-admin.service mode=0644 owner=root group=root
|
||||||
|
when: ansible_service_mgr == 'systemd'
|
||||||
|
notify: systemd reload
|
||||||
|
|
||||||
|
- name: Ensure that pdns_admin is started and enabled
|
||||||
|
service: name=powerdns-admin state=started enabled=yes
|
||||||
|
|
||||||
|
tags: pdns_admin
|
||||||
|
when: pdns_admin_install
|
||||||
|
|
||||||
|
- block:
|
||||||
|
- name: Ensure that pdns_admin is stopped and disabled
|
||||||
|
service: name=powerdns-admin state=stopped enabled=no
|
||||||
|
|
||||||
|
- name: Remove the pdns_admin init script
|
||||||
|
file: dest=/etc/systemd/system/powerdns-admin.service state=absent
|
||||||
|
|
||||||
|
- name: Remove all the pdns_admin files
|
||||||
|
file: dest={{ item }} state=absent
|
||||||
|
with_items:
|
||||||
|
- '{{ pdns_admin_home }}'
|
||||||
|
- '{{ pdns_admin_logdir }}'
|
||||||
|
|
||||||
|
tags: pdns_admin
|
||||||
|
when: not pdns_admin_install
|
|
@ -0,0 +1,116 @@
|
||||||
|
import os
|
||||||
|
basedir = os.path.abspath(os.path.dirname(__file__))
|
||||||
|
|
||||||
|
# BASIC APP CONFIG
|
||||||
|
WTF_CSRF_ENABLED = True
|
||||||
|
SECRET_KEY = '{{ pdns_admin_secret_key }}'
|
||||||
|
BIND_ADDRESS = '127.0.0.1'
|
||||||
|
PORT = {{ pdns_admin_http_port }}
|
||||||
|
LOGIN_TITLE = "PowerDNS Admin"
|
||||||
|
|
||||||
|
# TIMEOUT - for large zones
|
||||||
|
TIMEOUT = 60
|
||||||
|
|
||||||
|
# LOG CONFIG
|
||||||
|
LOG_LEVEL = '{{ pdns_admin_loglevel }}'
|
||||||
|
LOG_FILE = '{{ pdns_admin_logfile }}'
|
||||||
|
|
||||||
|
# Upload
|
||||||
|
UPLOAD_DIR = os.path.join(basedir, 'upload')
|
||||||
|
|
||||||
|
SQLALCHEMY_DATABASE_URI = 'postgresql://{{ pdns_admin_db_user }}:{{ pdns_admin_db_pwd }}@{{ pdns_admin_db_host }}/{{ pdns_admin_db_name }}'
|
||||||
|
SQLALCHEMY_MIGRATE_REPO = os.path.join(basedir, 'db_repository')
|
||||||
|
SQLALCHEMY_TRACK_MODIFICATIONS = True
|
||||||
|
|
||||||
|
# LDAP CONFIG
|
||||||
|
LDAP_ENABLED = False
|
||||||
|
LDAP_TYPE = 'ldap'
|
||||||
|
LDAP_URI = 'ldaps://your-ldap-server:636'
|
||||||
|
# with LDAP_BIND_TYPE you can specify 'direct' or 'search' to use user credentials
|
||||||
|
# for binding or a predefined LDAP_USERNAME and LDAP_PASSWORD, binding with non-DN only works with AD
|
||||||
|
LDAP_BIND_TYPE= 'direct' # direct or search
|
||||||
|
LDAP_USERNAME = 'cn=dnsuser,ou=users,ou=services,dc=duykhanh,dc=me'
|
||||||
|
LDAP_PASSWORD = 'dnsuser'
|
||||||
|
LDAP_SEARCH_BASE = 'ou=System Admins,ou=People,dc=duykhanh,dc=me'
|
||||||
|
LDAP_GROUP_SECURITY = False
|
||||||
|
LDAP_ADMIN_GROUP = 'CN=PowerDNS-Admin Admin,OU=Custom,DC=ivan,DC=local'
|
||||||
|
LDAP_USER_GROUP = 'CN=PowerDNS-Admin User,OU=Custom,DC=ivan,DC=local'
|
||||||
|
# Additional options only if LDAP_TYPE=ldap
|
||||||
|
LDAP_USERNAMEFIELD = 'uid'
|
||||||
|
LDAP_FILTER = '(objectClass=inetorgperson)'
|
||||||
|
# enable LDAP_GROUP_SECURITY to allow Admin and User roles based on LDAP groups
|
||||||
|
#LDAP_GROUP_SECURITY = True # True or False
|
||||||
|
#LDAP_ADMIN_GROUP = 'CN=DnsAdmins,CN=Users,DC=example,DC=me'
|
||||||
|
#LDAP_USER_GROUP = 'CN=Domain Admins,CN=Users,DC=example,DC=me'
|
||||||
|
|
||||||
|
## AD CONFIG
|
||||||
|
#LDAP_TYPE = 'ad'
|
||||||
|
#LDAP_URI = 'ldaps://your-ad-server:636'
|
||||||
|
#LDAP_USERNAME = 'cn=dnsuser,ou=Users,dc=domain,dc=local'
|
||||||
|
#LDAP_PASSWORD = 'dnsuser'
|
||||||
|
#LDAP_SEARCH_BASE = 'dc=domain,dc=local'
|
||||||
|
## You may prefer 'userPrincipalName' instead
|
||||||
|
#LDAP_USERNAMEFIELD = 'sAMAccountName'
|
||||||
|
## AD Group that you would like to have accesss to web app
|
||||||
|
#LDAP_FILTER = 'memberof=cn=DNS_users,ou=Groups,dc=domain,dc=local'
|
||||||
|
|
||||||
|
# Github Oauth
|
||||||
|
GITHUB_OAUTH_ENABLE = False
|
||||||
|
GITHUB_OAUTH_KEY = ''
|
||||||
|
GITHUB_OAUTH_SECRET = ''
|
||||||
|
GITHUB_OAUTH_SCOPE = 'email'
|
||||||
|
GITHUB_OAUTH_URL = 'http://127.0.0.1:9191/api/v3/'
|
||||||
|
GITHUB_OAUTH_TOKEN = 'http://127.0.0.1:9191/oauth/token'
|
||||||
|
GITHUB_OAUTH_AUTHORIZE = 'http://127.0.0.1:9191/oauth/authorize'
|
||||||
|
|
||||||
|
|
||||||
|
# Google OAuth
|
||||||
|
GOOGLE_OAUTH_ENABLE = False
|
||||||
|
GOOGLE_OAUTH_CLIENT_ID = ' '
|
||||||
|
GOOGLE_OAUTH_CLIENT_SECRET = ' '
|
||||||
|
GOOGLE_REDIRECT_URI = '/user/authorized'
|
||||||
|
GOOGLE_TOKEN_URL = 'https://accounts.google.com/o/oauth2/token'
|
||||||
|
GOOGLE_TOKEN_PARAMS = {
|
||||||
|
'scope': 'email profile'
|
||||||
|
}
|
||||||
|
GOOGLE_AUTHORIZE_URL='https://accounts.google.com/o/oauth2/auth'
|
||||||
|
GOOGLE_BASE_URL='https://www.googleapis.com/oauth2/v1/'
|
||||||
|
|
||||||
|
# SAML Authnetication
|
||||||
|
SAML_ENABLED = False
|
||||||
|
SAML_DEBUG = True
|
||||||
|
SAML_PATH = os.path.join(os.path.dirname(__file__), 'saml')
|
||||||
|
##Example for ADFS Metadata-URL
|
||||||
|
SAML_METADATA_URL = 'https://<hostname>/FederationMetadata/2007-06/FederationMetadata.xml'
|
||||||
|
#Cache Lifetime in Seconds
|
||||||
|
SAML_METADATA_CACHE_LIFETIME = 1
|
||||||
|
SAML_SP_ENTITY_ID = 'http://<SAML SP Entity ID>'
|
||||||
|
SAML_SP_CONTACT_NAME = '<contact name>'
|
||||||
|
SAML_SP_CONTACT_MAIL = '<contact mail>'
|
||||||
|
#Cofigures if SAML tokens should be encrypted.
|
||||||
|
#If enabled a new app certificate will be generated on restart
|
||||||
|
SAML_SIGN_REQUEST = False
|
||||||
|
#Use SAML standard logout mechanism retreived from idp metadata
|
||||||
|
#If configured false don't care about SAML session on logout.
|
||||||
|
#Logout from PowerDNS-Admin only and keep SAML session authenticated.
|
||||||
|
SAML_LOGOUT = False
|
||||||
|
#Configure to redirect to a different url then PowerDNS-Admin login after SAML logout
|
||||||
|
#for example redirect to google.com after successful saml logout
|
||||||
|
#SAML_LOGOUT_URL = 'https://google.com'
|
||||||
|
|
||||||
|
#Default Auth
|
||||||
|
BASIC_ENABLED = True
|
||||||
|
SIGNUP_ENABLED = True
|
||||||
|
|
||||||
|
# POWERDNS CONFIG
|
||||||
|
PDNS_STATS_URL = 'http://{{ pdns_master_host }}:8081/'
|
||||||
|
PDNS_API_KEY = '{{ pdns_auth_api_key }}'
|
||||||
|
PDNS_VERSION = '4.2.1'
|
||||||
|
|
||||||
|
# RECORDS ALLOWED TO EDIT
|
||||||
|
RECORDS_ALLOW_EDIT = ['SOA', 'A', 'AAAA', 'CAA', 'CNAME', 'MX', 'PTR', 'SPF', 'SRV', 'TXT', 'LOC', 'NS', 'PTR']
|
||||||
|
FORWARD_RECORDS_ALLOW_EDIT = ['A', 'AAAA', 'CAA', 'CNAME', 'MX', 'PTR', 'SPF', 'SRV', 'TXT', 'LOC' 'NS']
|
||||||
|
REVERSE_RECORDS_ALLOW_EDIT = ['SOA', 'TXT', 'LOC', 'NS', 'PTR']
|
||||||
|
|
||||||
|
# EXPERIMENTAL FEATURES
|
||||||
|
PRETTY_IPV6_PTR = False
|
|
@ -0,0 +1,14 @@
|
||||||
|
[Unit]
|
||||||
|
Description=PowerDNS-Admin
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
User={{ pdns_admin_user }}
|
||||||
|
Group={{ pdns_admin_user }}
|
||||||
|
ExecStart={{ pdns_admin_home }}/flask/bin/python ./run.py
|
||||||
|
WorkingDirectory={{ pdns_admin_home }}
|
||||||
|
Restart=always
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
|
@ -0,0 +1,22 @@
|
||||||
|
---
|
||||||
|
http_port: 80
|
||||||
|
https_port: 443
|
||||||
|
nginx_letsencrypt_managed: True
|
||||||
|
nginx_use_common_virthost: True
|
||||||
|
nginx_virthosts:
|
||||||
|
- virthost_name: '{{ ansible_fqdn }}'
|
||||||
|
listen: '{{ http_port }}'
|
||||||
|
server_name: '{{ ansible_fqdn }}'
|
||||||
|
server_aliases: ''
|
||||||
|
index: index.html
|
||||||
|
ssl_enabled: True
|
||||||
|
ssl_only: True
|
||||||
|
ssl_letsencrypt_certs: '{{ nginx_letsencrypt_managed }}'
|
||||||
|
root: '{{ nginx_webroot }}'
|
||||||
|
server_tokens: 'off'
|
||||||
|
proxy_standard_setup: True
|
||||||
|
locations:
|
||||||
|
- location: /
|
||||||
|
target: http://localhost:{{ pdns_admin_http_port }}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue