From 03f884f54715fb443960f382681b1dccdfdd7f3c Mon Sep 17 00:00:00 2001 From: planet-winter Date: Mon, 11 Nov 2019 15:12:02 +0100 Subject: [PATCH 1/8] initial version for Debian 10 with nodejs and flask installation --- defaults/main.yml | 13 ++++++++++--- tasks/powerdns_install.yml | 23 +++++++++++------------ tasks/powerdns_post.yml | 35 +++++++++++++++++++++++++++++++++-- templates/config.py.j2 | 10 +++++----- vars/Debian.yml | 15 +++++++++++---- vars/RedHat.yml | 2 ++ 6 files changed, 72 insertions(+), 26 deletions(-) diff --git a/defaults/main.yml b/defaults/main.yml index 8ae4dad..84e532d 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -1,12 +1,14 @@ --- pdns_admin_service_name: powerdns pdns_admin_git_repo_url: https://github.com/ngoduykhanh/PowerDNS-Admin.git -pdns_admin_pip_packages: - - mysql-python +pdns_admin_pip_packages: [] pdns_admin_root_path: /var/www pdns_admin_path: "{{ pdns_admin_root_path }}/powerdns-admin" pdns_admin_requirements_path: "{{ pdns_admin_path }}/requirements.txt" +pdns_admin_sqlite_path: "{{ pdns_admin_path }}/pdns-admin.sqlite" + + pdns_admin_conf_filename: config.py pdns_admin_conf_template_filename: "{{ pdns_admin_conf_filename }}.j2" @@ -17,7 +19,8 @@ pdns_admin_systemd_template_filename: "{{ pdns_admin_systemd_filename }}.j2" pdns_admin_systemd_filepath: "/etc/systemd/system/{{ pdns_admin_systemd_filename }}" pdns_admin_python_venv_path: /opt/vens/powerdns -pdns_admin_python_path: "{{ pdns_admin_python_venv_path }}/bin/python" +pdns_admin_python_path: "{{ pdns_admin_python_venv_path }}/bin/python3" + #TODO merge all configuration #TODO union configuration @@ -44,10 +47,14 @@ pdns_admin_database_config: sqla_db_password: CHANGEME sqla_db_host: your-db-server sqla_db_name: pdns-admin + sqlalchemy_database_uri: mysql://'+SQLA_DB_USER+':'+SQLA_DB_PASSWORD+'@'+SQLA_DB_HOST+'/'+SQLA_DB_NAME #sqlite #sqlalchemy_database_uri: 'sqlite:////path/to/your/pdns.db' sqlalchemy_track_modifications: true +pdns_admin_external_auth_config: + saml: + saml_enabled: False # pdns_admin_external_auth_config: # ldap: # # ldap config diff --git a/tasks/powerdns_install.yml b/tasks/powerdns_install.yml index ef6ea68..51fdb65 100644 --- a/tasks/powerdns_install.yml +++ b/tasks/powerdns_install.yml @@ -4,23 +4,20 @@ - name: Install required packages in Redhat derivatives yum: - name: "{{ item }}" - state: installed - with_items: - - "{{ pdns_admin_packages }}" + name: "{{ pdns_admin_packages }}" + state: present when: ansible_os_family == 'RedHat' - name: Install required packages in Debian derivatives apt: - name: "{{ item }}" - state: installed + name: "{{ pdns_admin_packages }}" + state: present update_cache: yes - with_items: - - "{{ pdns_admin_packages }}" when: ansible_os_family == 'Debian' -- name: Install Python PIP - shell: pip --version || curl https://bootstrap.pypa.io/get-pip.py | python +#- name: Install Python PIP +# shell: pip --version || curl https://bootstrap.pypa.io/get-pip.py | python +# install with OS method - name: Create "{{ pdns_admin_root_path }}" directory file: @@ -35,14 +32,16 @@ - name: Install virtualenv pip: name: virtualenv + executable: pip3 - name: PIP install requirements for PowerDNS Admin pip: requirements: "{{ pdns_admin_requirements_path }}" virtualenv: "{{ pdns_admin_python_venv_path }}" + virtualenv_python: python3 - name: Install some more required packages pip: - name: "{{ item }}" + name: "{{ pdns_admin_pip_packages }}" virtualenv: "{{ pdns_admin_python_venv_path }}" - with_items: "{{ pdns_admin_pip_packages }}" + virtualenv_python: python3 diff --git a/tasks/powerdns_post.yml b/tasks/powerdns_post.yml index 65ab5c7..034f765 100644 --- a/tasks/powerdns_post.yml +++ b/tasks/powerdns_post.yml @@ -9,8 +9,39 @@ tags: - pdns-admin-config -- name: Run Create DB - shell: "{{ pdns_admin_python_path }} /var/www/powerdns-admin/create_db.py" +# ain't no more +# - name: Run Create DB +# shell: "{{ pdns_admin_python_path }} /var/www/powerdns-admin/create_db.py" + +- name: Create sqlite DB with Flask. Initdb only once + shell: "export FLASK_APP=app/__init__.py; {{ pdns_admin_python_venv_path }}/bin/{{ item }}" + args: + chdir: "{{ pdns_admin_path }}" + creates: "{{ pdns_admin_sqlite_path }}" + with_items: + - flask db upgrade + - flask db migrate -m "Init DB" + when: '"sqlite" in pdns_admin_database_config.sqlalchemy_database_uri' + +- name: Create DB with Flask. Initdb only once + shell: "export FLASK_APP=app/__init__.py; {{ pdns_admin_python_venv_path }}/bin/{{ item }}" + args: + chdir: "{{ pdns_admin_path }}" + creates: "{{ pdns_admin_path }}/db_is_initialized_flag" + with_items: + - flask db upgrade + - flask db migrate -m "Init DB" + when: '"sqlite" not in pdns_admin_database_config.sqlalchemy_database_uri' + +- name: Yarn install node dependencies + shell: "{{ yarn_executable }} install --pure-lockfile" + args: + chdir: "{{ pdns_admin_path }}" + +- name: Build Flask assets + shell: "export FLASK_APP=app/__init__.py; {{ pdns_admin_python_venv_path }}/bin/flask assets build" + args: + chdir: "{{ pdns_admin_path }}" - name: Drop PowerDNS Admin systemd file template: diff --git a/templates/config.py.j2 b/templates/config.py.j2 index cb22133..e20dfed 100644 --- a/templates/config.py.j2 +++ b/templates/config.py.j2 @@ -47,12 +47,13 @@ UPLOAD_DIR = os.path.join(basedir, 'upload') {% endif %} {% endif %} {% endfor %} -#MySQL -SQLALCHEMY_DATABASE_URI = 'mysql://'+SQLA_DB_USER+':'\ - +SQLA_DB_PASSWORD+'@'+SQLA_DB_HOST+'/'+SQLA_DB_NAME +SQLALCHEMY_DATABASE_URI = {{ pdns_admin_database_config.sqlalchemy_database_uri }} +{% endif %} + + #SQLite SQLALCHEMY_MIGRATE_REPO = os.path.join(basedir, 'db_repository') -{% endif %} + {% if pdns_admin_external_auth_config is defined %} @@ -100,6 +101,5 @@ SQLALCHEMY_MIGRATE_REPO = os.path.join(basedir, 'db_repository') {% endfor %} {% endif %} - # RECORDS ALLOWED TO EDIT RECORDS_ALLOW_EDIT = [ "{{ pdns_admin_main_config.records_allow_edit | join('", "') }}" ] diff --git a/vars/Debian.yml b/vars/Debian.yml index 84b5a76..d4bedea 100644 --- a/vars/Debian.yml +++ b/vars/Debian.yml @@ -2,13 +2,20 @@ pdns_admin_packages: - curl - git - - python + - python3 + - python3-pip - libpython2.7 - python-dev - libsasl2-dev - build-essential - - libmariadb2 - - libmariadb-client-lgpl-dev + - libmariadb3 + - libmariadbclient-dev - libssl-dev - libldap2-dev - - libmysqlclient-dev + - default-libmysqlclient-dev + - libxmlsec1-dev + - pkg-config + - nodejs + - yarnpkg + +yarn_executable: yarnpkg diff --git a/vars/RedHat.yml b/vars/RedHat.yml index 92c171b..29cb202 100644 --- a/vars/RedHat.yml +++ b/vars/RedHat.yml @@ -14,3 +14,5 @@ pdns_admin_packages: - mariadb-devel - openssl-devel - openldap-devel + +yarn_executable: yarn From 6c377296d2e18f519a67d0aca4898d8e0306afa2 Mon Sep 17 00:00:00 2001 From: planet-winter Date: Mon, 11 Nov 2019 18:24:06 +0100 Subject: [PATCH 2/8] introduced choosing variable file depending on OS and version --- tasks/main.yml | 13 +++++++++++++ vars/{Debian.yml => debian-10.yml} | 0 vars/debian-9.yml | 19 +++++++++++++++++++ vars/{RedHat.yml => redhat.yml} | 0 4 files changed, 32 insertions(+) rename vars/{Debian.yml => debian-10.yml} (100%) create mode 100644 vars/debian-9.yml rename vars/{RedHat.yml => redhat.yml} (100%) diff --git a/tasks/main.yml b/tasks/main.yml index 0e396b5..9dfbf53 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -1,3 +1,16 @@ --- + +- name: gather os specific variables + include_vars: "{{ item }}" + with_first_found: + - files: + - "{{ ansible_distribution|lower }}-{{ ansible_distribution_version }}.yml" + - "{{ ansible_distribution|lower }}-{{ ansible_distribution_release }}.yml" + - "{{ ansible_distribution|lower }}-{{ ansible_distribution_major_version }}.yml" + - "{{ ansible_distribution|lower }}.yml" + - "{{ ansible_os_family|lower }}.yml" + +- include_vars: main.yml + - include: powerdns_install.yml - include: powerdns_post.yml diff --git a/vars/Debian.yml b/vars/debian-10.yml similarity index 100% rename from vars/Debian.yml rename to vars/debian-10.yml diff --git a/vars/debian-9.yml b/vars/debian-9.yml new file mode 100644 index 0000000..4ffa08e --- /dev/null +++ b/vars/debian-9.yml @@ -0,0 +1,19 @@ +--- + +pdns_admin_packages: + - curl + - git + - python3 + - python3-dev + - python3-urllib3 + - libsasl2-dev + - build-essential + - libmariadb2 + - libmariadb-client-lgpl-dev + - libssl-dev + - libldap2-dev + - libmysqlclient-dev + #- nodejs + #- yarnpkg + +yarn_executable: yarnpkg diff --git a/vars/RedHat.yml b/vars/redhat.yml similarity index 100% rename from vars/RedHat.yml rename to vars/redhat.yml From 69e8ae5c2de5800040b1c8da794e4e5d718f65a3 Mon Sep 17 00:00:00 2001 From: planet-winter Date: Tue, 12 Nov 2019 15:12:11 +0100 Subject: [PATCH 3/8] fixed file naming scheme to match include --- tasks/powerdns_install.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/tasks/powerdns_install.yml b/tasks/powerdns_install.yml index 51fdb65..39d09af 100644 --- a/tasks/powerdns_install.yml +++ b/tasks/powerdns_install.yml @@ -1,6 +1,4 @@ --- -- name: Add the OS specific variables - include_vars: "{{ ansible_os_family }}.yml" - name: Install required packages in Redhat derivatives yum: From 5217974d9e63d3010f78604acdf0157bb9284630 Mon Sep 17 00:00:00 2001 From: planet-winter Date: Fri, 27 Mar 2020 11:16:09 +0100 Subject: [PATCH 4/8] added proper environemnt where needed --- tasks/powerdns_install.yml | 5 ----- tasks/powerdns_post.yml | 6 +++--- templates/powerdns-admin.service.j2 | 2 ++ vars/debian-10.yml | 1 + 4 files changed, 6 insertions(+), 8 deletions(-) diff --git a/tasks/powerdns_install.yml b/tasks/powerdns_install.yml index 39d09af..5f15939 100644 --- a/tasks/powerdns_install.yml +++ b/tasks/powerdns_install.yml @@ -27,11 +27,6 @@ repo: "{{ pdns_admin_git_repo_url }}" dest: "{{ pdns_admin_path }}" -- name: Install virtualenv - pip: - name: virtualenv - executable: pip3 - - name: PIP install requirements for PowerDNS Admin pip: requirements: "{{ pdns_admin_requirements_path }}" diff --git a/tasks/powerdns_post.yml b/tasks/powerdns_post.yml index 034f765..306abd1 100644 --- a/tasks/powerdns_post.yml +++ b/tasks/powerdns_post.yml @@ -14,7 +14,7 @@ # shell: "{{ pdns_admin_python_path }} /var/www/powerdns-admin/create_db.py" - name: Create sqlite DB with Flask. Initdb only once - shell: "export FLASK_APP=app/__init__.py; {{ pdns_admin_python_venv_path }}/bin/{{ item }}" + shell: "export FLASK_APP=powerdnsadmin/__init__.py; export FLASK_CONF=../{{ pdns_admin_conf_filename }}; {{ pdns_admin_python_venv_path }}/bin/{{ item }}" args: chdir: "{{ pdns_admin_path }}" creates: "{{ pdns_admin_sqlite_path }}" @@ -24,7 +24,7 @@ when: '"sqlite" in pdns_admin_database_config.sqlalchemy_database_uri' - name: Create DB with Flask. Initdb only once - shell: "export FLASK_APP=app/__init__.py; {{ pdns_admin_python_venv_path }}/bin/{{ item }}" + shell: "export FLASK_APP=powerdnsadmin/__init__.py; export FLASK_CONF=../{{ pdns_admin_conf_filename }}; {{ pdns_admin_python_venv_path }}/bin/{{ item }}" args: chdir: "{{ pdns_admin_path }}" creates: "{{ pdns_admin_path }}/db_is_initialized_flag" @@ -39,7 +39,7 @@ chdir: "{{ pdns_admin_path }}" - name: Build Flask assets - shell: "export FLASK_APP=app/__init__.py; {{ pdns_admin_python_venv_path }}/bin/flask assets build" + shell: "export FLASK_APP=powerdnsadmin/__init__.py; export FLASK_CONF=../{{ pdns_admin_conf_filename }}; {{ pdns_admin_python_venv_path }}/bin/flask assets build" args: chdir: "{{ pdns_admin_path }}" diff --git a/templates/powerdns-admin.service.j2 b/templates/powerdns-admin.service.j2 index ce705c1..f0936b7 100644 --- a/templates/powerdns-admin.service.j2 +++ b/templates/powerdns-admin.service.j2 @@ -8,6 +8,8 @@ Group=root ExecStart={{ pdns_admin_python_path }} {{pdns_admin_path}}/run.py WorkingDirectory={{ pdns_admin_path }} Environment="PATH={{ pdns_admin_path }}" +Environment="FLASK_APP=powerdnsadmin/__init__.py" +Environment="FLASK_CONF=../config.py" Restart=always [Install] diff --git a/vars/debian-10.yml b/vars/debian-10.yml index d4bedea..c3835c9 100644 --- a/vars/debian-10.yml +++ b/vars/debian-10.yml @@ -4,6 +4,7 @@ pdns_admin_packages: - git - python3 - python3-pip + - virtualenv - libpython2.7 - python-dev - libsasl2-dev From 6c412f61ba7aac9f7e23f68f23ce1d7eb85b9941 Mon Sep 17 00:00:00 2001 From: planet-winter Date: Wed, 17 Feb 2021 18:02:57 +0100 Subject: [PATCH 5/8] took over changes from https://github.com/itbane/ansible-pdns_admin and fixed python version for Debian 10 Buster --- README.md | 92 ++++++++++++++++++++++++- defaults/main.yml | 95 +++++++++----------------- handlers/main.yml | 7 +- meta/.galaxy_install_info | 2 + meta/main.yml | 13 ++-- tasks/common-postinstall.yml | 22 ++++++ tasks/docker-install.yml | 18 +++++ tasks/main.yml | 28 ++++---- tasks/native-install.yml | 64 +++++++++++++++++ tasks/powerdns_install.yml | 40 ----------- tasks/powerdns_post.yml | 58 ---------------- templates/config.py.j2 | 31 +++++---- templates/docker/docker-compose.yml.j2 | 22 ++++++ templates/powerdns-admin.service.j2 | 14 ++-- vars/Debian.yml | 24 +++++++ vars/{redhat.yml => RedHat.yml} | 4 +- vars/debian-10.yml | 22 ------ vars/debian-9.yml | 19 ------ vars/main.yml | 5 +- 19 files changed, 326 insertions(+), 254 deletions(-) create mode 100644 meta/.galaxy_install_info create mode 100644 tasks/common-postinstall.yml create mode 100644 tasks/docker-install.yml create mode 100644 tasks/native-install.yml delete mode 100644 tasks/powerdns_install.yml delete mode 100644 tasks/powerdns_post.yml create mode 100644 templates/docker/docker-compose.yml.j2 create mode 100644 vars/Debian.yml rename vars/{redhat.yml => RedHat.yml} (81%) delete mode 100644 vars/debian-10.yml delete mode 100644 vars/debian-9.yml diff --git a/README.md b/README.md index 9fb9ae0..95222e7 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,90 @@ -Ansible role to install PowerDNS-Admin -https://github.com/ngoduykhanh/PowerDNS-Admin +ansible-role-pdns_admin +======================= + +Ansible role to install PowerDNS-Admin, a python-based webfrontend for PowerDNS. + +Tested on Debian 10, 11 only! + +Requirements +------------ + +None at the moment. + +Description +----------- + +There are two ways to install pdns-Admin - either natively (using git, yarn, etc.) or using docker. + +The necessary variables differ - choose the table that fits your requirements + +Role Variables +-------------- + +### Common variables + +| Variable | Default | Comments (type) | +| --- | --- | --- | +| pdns_admin__install_mode | 'docker' | Either 'docker' or 'native'. Describes the install mode. | +| pdns_admin__listen_port | 9393 | The port pdns-admin should listen on. On docker, this is the port on the host that is forwarded to the container | +| pdns_admin__listen_ip | 127.0.0.1 | The port pdns-admin should listen on. On docker, this is the IP of the host that will forwarded to the container | +| pdns_admin__database_config | empty | The database config for pdns-admin (details below) **mandatory** | +| pdns_admin__database_credentials | empty | The credentials used to log in to the mysql host (for user & DB creation; details below) **mandatory** | + +### Docker variables + +| Variable | Default | Comments (type) | +| --- | --- | --- | +| pdns_admin__docker_packages | distro specific | A list of packages needed for docker | +| pdns_admin__docker_compose_dir | '/opt/docker-compose/pdns-admin' | The docker-compose dir where the config is stored | +| pdns_admin__image_name | 'ngoduykhanh/powerdns-admin' | The image location to use | +| pdns_admin__container_name | pdns-admin | The name for the docker container | + +### schema of pdns_admin__database_config + +| Key | Comments (type) | +| --- | --- | +| sqla_db_user | The database user for pdns-admin | +| sqla_user_loginhost | The host / network from which the db accepts connection | +| sqla_db_password | The password for the pdns-admin db user | +| sqla_db_name | The name of the database for pdns-admin | + +### schema of pdns_admin__database_credentials + +| Key | Comments (type) | +| --- | --- | +| priv_user | The database user that has permission to create the pdns-admin database and user | +| priv_password | The password to log the `priv_user` into the database server | +| priv_host | The IP-address / hostname of the database server | + + +Dependencies +------------ + +None. + +Example Playbook +---------------- + + - hosts: pdnsadmin_servers + roles: + - role: pdns_admin + vars: + pdns_admin__install_mode: docker + pdns_admin__database_config: + sqla_db_user: pdnsa + sqla_db_password: SupaSicretPasswurt + sqla_db_name: pdnsa + pdns_admin__database_credentials: + priv_user: root + priv_host: mydb-server.lan + priv_password: AnotherSecretPassword + +License +------- + +GPL v3 + +Author Information +------------------ + +Original implementation by Jascha Sticher (-1855) diff --git a/defaults/main.yml b/defaults/main.yml index 84e532d..53c0033 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -1,30 +1,38 @@ --- -pdns_admin_service_name: powerdns -pdns_admin_git_repo_url: https://github.com/ngoduykhanh/PowerDNS-Admin.git -pdns_admin_pip_packages: [] +# install mode +pdns_admin__install_mode: docker -pdns_admin_root_path: /var/www -pdns_admin_path: "{{ pdns_admin_root_path }}/powerdns-admin" -pdns_admin_requirements_path: "{{ pdns_admin_path }}/requirements.txt" -pdns_admin_sqlite_path: "{{ pdns_admin_path }}/pdns-admin.sqlite" +# for native installations +pdns_admin__service_name: powerdns-admin +pdns_admin__git_repo_url: https://github.com/ngoduykhanh/PowerDNS-Admin.git +pdns_admin__pip_packages: ~ +pdns_admin__root_path: /var/www +pdns_admin__path: "{{ pdns_admin__root_path }}/powerdns-admin" +pdns_admin__requirements_path: "{{ pdns_admin__path }}/requirements.txt" +pdns_admin__conf_filename: default_config.py +pdns_admin__conf_template_filename: config.py.j2 +pdns_admin__conf_filepath: "{{ pdns_admin__path }}/powerdnsadmin/{{ pdns_admin__conf_filename }}" +pdns_admin__systemd_filename: powerdns-admin.service +pdns_admin__systemd_template_filename: "{{ pdns_admin__systemd_filename }}.j2" +pdns_admin__systemd_filepath: "/etc/systemd/system/{{ pdns_admin__systemd_filename }}" -pdns_admin_conf_filename: config.py -pdns_admin_conf_template_filename: "{{ pdns_admin_conf_filename }}.j2" -pdns_admin_conf_filepath: "{{ pdns_admin_path }}/{{ pdns_admin_conf_filename }}" +pdns_admin__python_venv_path: /opt/vens/powerdns +pdns_admin__python_path: "{{ pdns_admin__python_venv_path }}/bin/python" -pdns_admin_systemd_filename: powerdns-admin.service -pdns_admin_systemd_template_filename: "{{ pdns_admin_systemd_filename }}.j2" -pdns_admin_systemd_filepath: "/etc/systemd/system/{{ pdns_admin_systemd_filename }}" +# for docker installations +pdns_admin__docker_packages: "{{ pdns_admin__default_docker_packages }}" +pdns_admin__docker_compose_dir: '/opt/docker-compose/pdns-admin' +pdns_admin__image_name: "ngoduykhanh/powerdns-admin" +pdns_admin__container_name: pdns-admin -pdns_admin_python_venv_path: /opt/vens/powerdns -pdns_admin_python_path: "{{ pdns_admin_python_venv_path }}/bin/python3" +# PDNS-admin config +pdns_admin__listen_port: 9393 +pdns_admin__listen_ip: 127.0.0.1 +pdns_admin__workers: 4 - -#TODO merge all configuration -#TODO union configuration -pdns_admin_global_config: +pdns_admin__global_config: wtf_csrf_enabled: true secret_key: CHANGEME bind_address: 0.0.0.0 @@ -35,59 +43,18 @@ pdns_admin_global_config: log_level: DEBUG log_file: pdns-admin.log # For Docker, leave empty string - #log_file: '' - #default auth + # log_file: '' + # default auth basic_enabled: true signup_enabled: true -pdns_admin_database_config: - # DATABASE CONFIG - #You'll need MySQL-python +pdns_admin__database_config: sqla_db_user: pdns-admin sqla_db_password: CHANGEME - sqla_db_host: your-db-server sqla_db_name: pdns-admin - sqlalchemy_database_uri: mysql://'+SQLA_DB_USER+':'+SQLA_DB_PASSWORD+'@'+SQLA_DB_HOST+'/'+SQLA_DB_NAME - #sqlite - #sqlalchemy_database_uri: 'sqlite:////path/to/your/pdns.db' sqlalchemy_track_modifications: true -pdns_admin_external_auth_config: - saml: - saml_enabled: False -# pdns_admin_external_auth_config: -# ldap: -# # ldap config -# ldap_type: ldap -# ldap_uri: ldaps://your-ldap-server:636 -# 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 -# # additional options only if ldap_type=ldap -# ldap_usernamefield: uid -# ldap_filter: (objectclass=inetorgperson) -# # ad: -# # # 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: -# # github oauth -# github_oauth_enable: false -# github_oauth_key: CHANGEME -# github_oauth_secret: CHANGEME -# github_oauth_scope: email -# github_oauth_url: http://127.0.0.1:5000/api/v3/ -# github_oauth_token: http://127.0.0.1:5000/oauth/token -# github_oauth_authorize: http://127.0.0.1:5000/oauth/authorize - -pdns_admin_main_config: +pdns_admin__main_config: # powerdns config pdns_stats_url: http://pdns-stat-ip:8081 pdns_api_key: CHANGEME diff --git a/handlers/main.yml b/handlers/main.yml index d293bad..65a309d 100644 --- a/handlers/main.yml +++ b/handlers/main.yml @@ -1,5 +1,10 @@ --- - name: Restart Powerdns Admin Service systemd: - name: "{{ pdns_admin_systemd_filename }}" + name: "{{ pdns_admin__systemd_filename }}" state: restarted +- name: pdns_admin__docker_restart + docker_compose: + project_src: "{{ pdns_admin__docker_compose_dir }}" + state: present + restarted: true diff --git a/meta/.galaxy_install_info b/meta/.galaxy_install_info new file mode 100644 index 0000000..b68532e --- /dev/null +++ b/meta/.galaxy_install_info @@ -0,0 +1,2 @@ +install_date: Tue Feb 16 16:23:13 2021 +version: '' diff --git a/meta/main.yml b/meta/main.yml index 3806b83..9027915 100644 --- a/meta/main.yml +++ b/meta/main.yml @@ -1,17 +1,14 @@ +--- galaxy_info: author: Natthaphon Phoonsookserm description: Ansible role to install PowerDNS Admin license: MIT min_ansible_version: 2.2 platforms: - - name: EL - versions: - - 7 - - name: Ubuntu - versions: - - trusty - - xenial + - name: Debian + versions: + - 11 + - 10 galaxy_tags: - powerdns - powerdns-admin -dependencies: [] diff --git a/tasks/common-postinstall.yml b/tasks/common-postinstall.yml new file mode 100644 index 0000000..ff690a0 --- /dev/null +++ b/tasks/common-postinstall.yml @@ -0,0 +1,22 @@ +--- +- name: Create the pdns-admin MySQL databases + mysql_db: + login_user: "{{ pdns_admin__database_credentials['priv_user'] }}" + login_password: "{{ pdns_admin__database_credentials['priv_password'] }}" + login_host: "{{ pdns_admin__database_credentials['priv_host'] }}" + login_port: "{{ pdns_admin__database_config['sqla_db_port'] | default('3306') }}" + name: "{{ pdns_admin__database_config['sqla_db_name'] }}" + state: present + +- name: Grant pdns-admin access to the MySQL databases + mysql_user: + login_user: "{{ pdns_admin__database_credentials['priv_user'] }}" + login_password: "{{ pdns_admin__database_credentials['priv_password'] }}" + login_host: "{{ pdns_admin__database_credentials['priv_host'] }}" + login_port: "{{ pdns_admin__database_config['sqla_db_port'] | default('3306') }}" + name: "{{ pdns_admin__database_config['sqla_db_user'] }}" + password: "{{ pdns_admin__database_config['sqla_db_password'] }}" + host: "{{ pdns_admin__database_config['sqla_user_loginhost'] }}" + priv: "{{ pdns_admin__database_config['sqla_db_name'] }}.*:ALL" + append_privs: true + state: present diff --git a/tasks/docker-install.yml b/tasks/docker-install.yml new file mode 100644 index 0000000..f7c93b2 --- /dev/null +++ b/tasks/docker-install.yml @@ -0,0 +1,18 @@ +--- +- name: install docker + package: + name: "{{ item }}" + state: present + with_items: "{{ pdns_admin__docker_packages }}" +- name: create docker directory + file: + path: "{{ pdns_admin__docker_compose_dir }}" + mode: '0644' + state: directory + recurse: true +- name: create docker compose file + template: + dest: "{{ pdns_admin__docker_compose_dir }}/docker-compose.yml" + mode: 0644 + src: docker/docker-compose.yml.j2 + notify: pdns_admin__docker_restart diff --git a/tasks/main.yml b/tasks/main.yml index 9dfbf53..3f8b775 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -1,16 +1,14 @@ --- - -- name: gather os specific variables - include_vars: "{{ item }}" - with_first_found: - - files: - - "{{ ansible_distribution|lower }}-{{ ansible_distribution_version }}.yml" - - "{{ ansible_distribution|lower }}-{{ ansible_distribution_release }}.yml" - - "{{ ansible_distribution|lower }}-{{ ansible_distribution_major_version }}.yml" - - "{{ ansible_distribution|lower }}.yml" - - "{{ ansible_os_family|lower }}.yml" - -- include_vars: main.yml - -- include: powerdns_install.yml -- include: powerdns_post.yml +- name: Add the OS specific variables + include_vars: "{{ ansible_os_family }}.yml" +- name: Make sure installation mode is set + assert: + that: + - pdns_admin__install_mode is defined + - pdns_admin__install_mode is in pdns_admin__supported_install_modes +- name: "Include installation tasks for {{ pdns_admin__install_mode }}" + include: "{{ pdns_admin__install_mode }}-install.yml" +- name: "Include common tasks after installation (e.g. database connection)" + include: common-postinstall.yml +- name: flush handlers + meta: flush_handlers diff --git a/tasks/native-install.yml b/tasks/native-install.yml new file mode 100644 index 0000000..2bc9b34 --- /dev/null +++ b/tasks/native-install.yml @@ -0,0 +1,64 @@ +--- +- name: Install required packages in Debian derivatives + apt: + name: "{{ pdns_admin__packages }}" + state: present + update_cache: true + +- name: Create "{{ pdns_admin__root_path }}" directory + file: + path: "{{ pdns_admin__root_path }}" + state: directory + +- name: Git clone PowerDNS Admin + git: + repo: "{{ pdns_admin__git_repo_url }}" + dest: "{{ pdns_admin__path }}" + force: true + +- name: Install virtualenv + apt: + name: python3-virtualenv + +- name: PIP install requirements for PowerDNS Admin + pip: + requirements: "{{ pdns_admin__requirements_path }}" + virtualenv: "{{ pdns_admin__python_venv_path }}" + virtualenv_python: python3.7 +- name: Copy {{ pdns_admin__conf_filename }} + template: + src: "{{ pdns_admin__conf_template_filename }}" + dest: "{{ pdns_admin__conf_filepath }}" + owner: root + group: root + notify: Restart Powerdns Admin Service + tags: + - pdns-admin-config + +- name: Set up the flask installation + shell: > + cd {{ pdns_admin__path }}; + source {{ pdns_admin__python_venv_path }}/bin/activate; + export FLASK_APP={{ pdns_admin__path }}/powerdnsadmin/__init__.py; + export FLASK_CONF={{ pdns_admin__conf_filepath }}; + {{ pdns_admin__python_venv_path }}/bin/flask db upgrade; + yarnpkg install --pure-lockfile; + {{ pdns_admin__python_venv_path }}/bin/flask assets build; + register: tmpout + +- debug: + msg: "{{ tmpout }}" + +- name: Drop PowerDNS Admin systemd file + template: + src: "{{ pdns_admin__systemd_template_filename }}" + dest: "{{ pdns_admin__systemd_filepath }}" + owner: root + group: root + +- name: Make PowerDNS Admin as service + systemd: + name: "{{ pdns_admin__systemd_filename }}" + state: restarted + enabled: true + daemon_reload: true diff --git a/tasks/powerdns_install.yml b/tasks/powerdns_install.yml deleted file mode 100644 index 5f15939..0000000 --- a/tasks/powerdns_install.yml +++ /dev/null @@ -1,40 +0,0 @@ ---- - -- name: Install required packages in Redhat derivatives - yum: - name: "{{ pdns_admin_packages }}" - state: present - when: ansible_os_family == 'RedHat' - -- name: Install required packages in Debian derivatives - apt: - name: "{{ pdns_admin_packages }}" - state: present - update_cache: yes - when: ansible_os_family == 'Debian' - -#- name: Install Python PIP -# shell: pip --version || curl https://bootstrap.pypa.io/get-pip.py | python -# install with OS method - -- name: Create "{{ pdns_admin_root_path }}" directory - file: - path: "{{ pdns_admin_root_path }}" - state: directory - -- name: Git clone PowerDNS Admin - git: - repo: "{{ pdns_admin_git_repo_url }}" - dest: "{{ pdns_admin_path }}" - -- name: PIP install requirements for PowerDNS Admin - pip: - requirements: "{{ pdns_admin_requirements_path }}" - virtualenv: "{{ pdns_admin_python_venv_path }}" - virtualenv_python: python3 - -- name: Install some more required packages - pip: - name: "{{ pdns_admin_pip_packages }}" - virtualenv: "{{ pdns_admin_python_venv_path }}" - virtualenv_python: python3 diff --git a/tasks/powerdns_post.yml b/tasks/powerdns_post.yml deleted file mode 100644 index 306abd1..0000000 --- a/tasks/powerdns_post.yml +++ /dev/null @@ -1,58 +0,0 @@ ---- -- name: Copy {{ pdns_admin_conf_filename }} - template: - src: "{{ pdns_admin_conf_template_filename }}" - dest: "{{ pdns_admin_conf_filepath }}" - owner: root - group: root - notify: Restart Powerdns Admin Service - tags: - - pdns-admin-config - -# ain't no more -# - name: Run Create DB -# shell: "{{ pdns_admin_python_path }} /var/www/powerdns-admin/create_db.py" - -- name: Create sqlite DB with Flask. Initdb only once - shell: "export FLASK_APP=powerdnsadmin/__init__.py; export FLASK_CONF=../{{ pdns_admin_conf_filename }}; {{ pdns_admin_python_venv_path }}/bin/{{ item }}" - args: - chdir: "{{ pdns_admin_path }}" - creates: "{{ pdns_admin_sqlite_path }}" - with_items: - - flask db upgrade - - flask db migrate -m "Init DB" - when: '"sqlite" in pdns_admin_database_config.sqlalchemy_database_uri' - -- name: Create DB with Flask. Initdb only once - shell: "export FLASK_APP=powerdnsadmin/__init__.py; export FLASK_CONF=../{{ pdns_admin_conf_filename }}; {{ pdns_admin_python_venv_path }}/bin/{{ item }}" - args: - chdir: "{{ pdns_admin_path }}" - creates: "{{ pdns_admin_path }}/db_is_initialized_flag" - with_items: - - flask db upgrade - - flask db migrate -m "Init DB" - when: '"sqlite" not in pdns_admin_database_config.sqlalchemy_database_uri' - -- name: Yarn install node dependencies - shell: "{{ yarn_executable }} install --pure-lockfile" - args: - chdir: "{{ pdns_admin_path }}" - -- name: Build Flask assets - shell: "export FLASK_APP=powerdnsadmin/__init__.py; export FLASK_CONF=../{{ pdns_admin_conf_filename }}; {{ pdns_admin_python_venv_path }}/bin/flask assets build" - args: - chdir: "{{ pdns_admin_path }}" - -- name: Drop PowerDNS Admin systemd file - template: - src: "{{ pdns_admin_systemd_template_filename }}" - dest: "{{ pdns_admin_systemd_filepath }}" - owner: root - group: root - -- name: Make PowerDNS Admin as service - systemd: - name: "{{ pdns_admin_systemd_filename }}" - state: restarted - enabled: yes - daemon_reload: yes diff --git a/templates/config.py.j2 b/templates/config.py.j2 index e20dfed..5e6a2e7 100644 --- a/templates/config.py.j2 +++ b/templates/config.py.j2 @@ -2,8 +2,8 @@ import os basedir = os.path.abspath(os.path.dirname(__file__)) -{% if pdns_admin_global_config is defined %} -{% for key, value in pdns_admin_global_config.iteritems() %} +{% if pdns_admin__global_config is defined %} +{% for key, value in pdns_admin__global_config.items() %} {% if key | upper not in ["UPLOAD_DIR"] %} {% if value is not mapping %} {% if value is sequence and value is not string %} @@ -27,8 +27,8 @@ UPLOAD_DIR = os.path.join(basedir, 'upload') {% endif %} -{% if pdns_admin_database_config is defined %} -{% for key, value in pdns_admin_database_config.iteritems() %} +{% if pdns_admin__database_config is defined %} +{% for key, value in pdns_admin__database_config.items() %} {% if key | upper not in ["SQLALCHEMY_DATABASE_URI", "SQLALCHEMY_MIGRATE_REPO"] %} {% if value is not mapping %} {% if value is sequence and value is not string %} @@ -47,17 +47,16 @@ UPLOAD_DIR = os.path.join(basedir, 'upload') {% endif %} {% endif %} {% endfor %} -SQLALCHEMY_DATABASE_URI = {{ pdns_admin_database_config.sqlalchemy_database_uri }} -{% endif %} - - +#MySQL +SQLALCHEMY_DATABASE_URI = 'mysql://'+SQLA_DB_USER+':'\ + +SQLA_DB_PASSWORD+'@'+SQLA_DB_HOST+'/'+SQLA_DB_NAME #SQLite SQLALCHEMY_MIGRATE_REPO = os.path.join(basedir, 'db_repository') +{% endif %} - -{% if pdns_admin_external_auth_config is defined %} -{% for auth in pdns_admin_external_auth_config.values() %} +{% if pdns_admin__external_auth_config is defined %} +{% for auth in pdns_admin__external_auth_config.values() %} {% for key, value in auth.items() %} {% if value is not mapping %} {% if value is sequence and value is not string %} @@ -79,8 +78,8 @@ SQLALCHEMY_MIGRATE_REPO = os.path.join(basedir, 'db_repository') {% endif %} -{% if pdns_admin_main_config is defined %} -{% for key, value in pdns_admin_main_config.iteritems() %} +{% if pdns_admin__main_config is defined %} +{% for key, value in pdns_admin__main_config.items() %} {% if key | upper not in ["RECORDS_ALLOW_EDIT"] %} {% if value is not mapping %} {% if value is sequence and value is not string %} @@ -101,5 +100,9 @@ SQLALCHEMY_MIGRATE_REPO = os.path.join(basedir, 'db_repository') {% endfor %} {% endif %} + # RECORDS ALLOWED TO EDIT -RECORDS_ALLOW_EDIT = [ "{{ pdns_admin_main_config.records_allow_edit | join('", "') }}" ] +RECORDS_ALLOW_EDIT = [ "{{ pdns_admin__main_config.records_allow_edit | join('", "') }}" ] +# SAML Authnetication +SAML_ENABLED = False +SAML_ASSERTION_ENCRYPTED = True diff --git a/templates/docker/docker-compose.yml.j2 b/templates/docker/docker-compose.yml.j2 new file mode 100644 index 0000000..4b32740 --- /dev/null +++ b/templates/docker/docker-compose.yml.j2 @@ -0,0 +1,22 @@ +# {{ ansible_managed }} +--- +version: '2' +services: + pdns-admin: + image: {{ pdns_admin__image_name }} + container_name: {{ pdns_admin__container_name }} + ports: + - {{ pdns_admin__listen_ip }}:{{ pdns_admin__listen_port }}:80/tcp + hostname: pdns-admin + environment: + SQLALCHEMY_DATABASE_URI: "mysql://{{ pdns_admin__database_config['sqla_db_user'] }}:{{ pdns_admin__database_config['sqla_db_password'] }}@172.16.0.1/{{ pdns_admin__database_config['sqla_db_name'] }}" + networks: + pdnsa_net: + ipv4_address: 172.16.0.2 +networks: + pdnsa_net: + ipam: + config: + - subnet: 172.16.0.0/24 + gateway: 172.16.0.1 + diff --git a/templates/powerdns-admin.service.j2 b/templates/powerdns-admin.service.j2 index f0936b7..8b8c64f 100644 --- a/templates/powerdns-admin.service.j2 +++ b/templates/powerdns-admin.service.j2 @@ -1,16 +1,16 @@ [Unit] Description=PowerDNS-Admin After=network-online.target + [Service] -Type=simple User=root Group=root -ExecStart={{ pdns_admin_python_path }} {{pdns_admin_path}}/run.py -WorkingDirectory={{ pdns_admin_path }} -Environment="PATH={{ pdns_admin_path }}" -Environment="FLASK_APP=powerdnsadmin/__init__.py" -Environment="FLASK_CONF=../config.py" -Restart=always +PIDFile=/run/powerdns-admin.pid +ExecStart={{ pdns_admin__python_venv_path }}/bin/gunicorn --pid /run/powerdnsadmin.pid --bind {{pdns_admin__listen_ip}}:{{pdns_admin__listen_port}} -w {{ pdns_admin__workers }} 'powerdnsadmin:create_app()' +ExecReload=/bin/kill -s HUP $MAINPID +ExecStop=/bin/kill -s TERM $MAINPID +WorkingDirectory={{ pdns_admin__path }} +Restart=unless-stopped [Install] WantedBy=multi-user.target diff --git a/vars/Debian.yml b/vars/Debian.yml new file mode 100644 index 0000000..c000080 --- /dev/null +++ b/vars/Debian.yml @@ -0,0 +1,24 @@ +--- +pdns_admin__packages: + - curl + - git + - python + - python-configparser + - libpython3.7 + - python3-dev + - libsasl2-dev + - build-essential + - libmariadb3 + - libssl-dev + - libldap2-dev + - libmariadbclient-dev-compat + - libxmlsec1-dev + - pkg-config + - yarnpkg + - python3-pip + - virtualenv + +pdns_admin__default_docker_packages: + - python3-docker + - docker-compose + - docker diff --git a/vars/redhat.yml b/vars/RedHat.yml similarity index 81% rename from vars/redhat.yml rename to vars/RedHat.yml index 29cb202..d8654e1 100644 --- a/vars/redhat.yml +++ b/vars/RedHat.yml @@ -1,5 +1,5 @@ --- -pdns_admin_packages: +pdns_admin__packages: - curl - git - python @@ -14,5 +14,3 @@ pdns_admin_packages: - mariadb-devel - openssl-devel - openldap-devel - -yarn_executable: yarn diff --git a/vars/debian-10.yml b/vars/debian-10.yml deleted file mode 100644 index c3835c9..0000000 --- a/vars/debian-10.yml +++ /dev/null @@ -1,22 +0,0 @@ ---- -pdns_admin_packages: - - curl - - git - - python3 - - python3-pip - - virtualenv - - libpython2.7 - - python-dev - - libsasl2-dev - - build-essential - - libmariadb3 - - libmariadbclient-dev - - libssl-dev - - libldap2-dev - - default-libmysqlclient-dev - - libxmlsec1-dev - - pkg-config - - nodejs - - yarnpkg - -yarn_executable: yarnpkg diff --git a/vars/debian-9.yml b/vars/debian-9.yml deleted file mode 100644 index 4ffa08e..0000000 --- a/vars/debian-9.yml +++ /dev/null @@ -1,19 +0,0 @@ ---- - -pdns_admin_packages: - - curl - - git - - python3 - - python3-dev - - python3-urllib3 - - libsasl2-dev - - build-essential - - libmariadb2 - - libmariadb-client-lgpl-dev - - libssl-dev - - libldap2-dev - - libmysqlclient-dev - #- nodejs - #- yarnpkg - -yarn_executable: yarnpkg diff --git a/vars/main.yml b/vars/main.yml index ab027c5..569c8fa 100644 --- a/vars/main.yml +++ b/vars/main.yml @@ -1,3 +1,6 @@ --- +pdns_admin__supported_install_modes: + - docker + - native env: - RUNLEVEL: 1 + RUNLEVEL: 1 From 848ef91afb3a726c259d063f52d5075117bef7bd Mon Sep 17 00:00:00 2001 From: planet-winter Date: Fri, 19 Feb 2021 14:04:08 +0100 Subject: [PATCH 6/8] re-added sqlite capability --- defaults/main.yml | 5 +++ tasks/common-postinstall.yml | 68 +++++++++++++++++++++++++----------- tasks/native-install.yml | 1 + templates/config.py.j2 | 8 ----- 4 files changed, 54 insertions(+), 28 deletions(-) diff --git a/defaults/main.yml b/defaults/main.yml index 53c0033..3241e72 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -52,8 +52,13 @@ pdns_admin__database_config: sqla_db_user: pdns-admin sqla_db_password: CHANGEME sqla_db_name: pdns-admin + sqlalchemy_database_uri: "{{ sqlalchemy_database_uri|default('mysql://'+sqla_db_user+':'+sqla_db_password+'@'+sqla_db_host+'/'+sqla_db_name) }}" + # only used if using sqlite database in sqlalchemy_database_uri + sqlalchemy_migrate_repo: "'os.path.join(basedir, 'db_repository')' if sqlalchemy_database_uri|search('sqlite')" sqlalchemy_track_modifications: true +pdns_admin__sqlite_db_file: "'/var/lib/pdns-admin/pdns-admin.sql' if sqlalchemy_database_uri|search('sqlite')" + pdns_admin__main_config: # powerdns config pdns_stats_url: http://pdns-stat-ip:8081 diff --git a/tasks/common-postinstall.yml b/tasks/common-postinstall.yml index ff690a0..7d6d5e9 100644 --- a/tasks/common-postinstall.yml +++ b/tasks/common-postinstall.yml @@ -1,22 +1,50 @@ --- -- name: Create the pdns-admin MySQL databases - mysql_db: - login_user: "{{ pdns_admin__database_credentials['priv_user'] }}" - login_password: "{{ pdns_admin__database_credentials['priv_password'] }}" - login_host: "{{ pdns_admin__database_credentials['priv_host'] }}" - login_port: "{{ pdns_admin__database_config['sqla_db_port'] | default('3306') }}" - name: "{{ pdns_admin__database_config['sqla_db_name'] }}" - state: present -- name: Grant pdns-admin access to the MySQL databases - mysql_user: - login_user: "{{ pdns_admin__database_credentials['priv_user'] }}" - login_password: "{{ pdns_admin__database_credentials['priv_password'] }}" - login_host: "{{ pdns_admin__database_credentials['priv_host'] }}" - login_port: "{{ pdns_admin__database_config['sqla_db_port'] | default('3306') }}" - name: "{{ pdns_admin__database_config['sqla_db_user'] }}" - password: "{{ pdns_admin__database_config['sqla_db_password'] }}" - host: "{{ pdns_admin__database_config['sqla_user_loginhost'] }}" - priv: "{{ pdns_admin__database_config['sqla_db_name'] }}.*:ALL" - append_privs: true - state: present +- name: MySQL database handling + block: + - name: Create the pdns-admin MySQL databases + mysql_db: + login_user: "{{ pdns_admin__database_credentials['priv_user'] }}" + login_password: "{{ pdns_admin__database_credentials['priv_password'] }}" + login_host: "{{ pdns_admin__database_credentials['priv_host'] }}" + login_port: "{{ pdns_admin__database_config['sqla_db_port'] | default('3306') }}" + name: "{{ pdns_admin__database_config['sqla_db_name'] }}" + state: present + + - name: Grant pdns-admin access to the MySQL databases + mysql_user: + login_user: "{{ pdns_admin__database_credentials['priv_user'] }}" + login_password: "{{ pdns_admin__database_credentials['priv_password'] }}" + login_host: "{{ pdns_admin__database_credentials['priv_host'] }}" + login_port: "{{ pdns_admin__database_config['sqla_db_port'] | default('3306') }}" + name: "{{ pdns_admin__database_config['sqla_db_user'] }}" + password: "{{ pdns_admin__database_config['sqla_db_password'] }}" + host: "{{ pdns_admin__database_config['sqla_user_loginhost'] }}" + priv: "{{ pdns_admin__database_config['sqla_db_name'] }}.*:ALL" + append_privs: true + state: present + when: pdns_admin__sqlite_db_file is not defined + +- name: sqlite installation and db file creation + block: + - name: Install the SQLite dependencies on RedHat + package: + name: sqlite + state: present + when: ansible_os_family == 'RedHat' + + - name: Install the SQLite dependencies on Debian + package: + name: sqlite3 + state: present + when: ansible_os_family == 'Debian' + + - name: Ensure that the directories containing the PowerDNS Admin SQLite databases exist + file: + name: "{{ item | dirname }}" + owner: "root" + group: "root" + state: directory + mode: 0750 + with_items: "{{ pdns_admin__sqlite_db_file }}" + when: pdns_admin__sqlite_db_file is defined diff --git a/tasks/native-install.yml b/tasks/native-install.yml index 2bc9b34..e4b97c9 100644 --- a/tasks/native-install.yml +++ b/tasks/native-install.yml @@ -25,6 +25,7 @@ requirements: "{{ pdns_admin__requirements_path }}" virtualenv: "{{ pdns_admin__python_venv_path }}" virtualenv_python: python3.7 + - name: Copy {{ pdns_admin__conf_filename }} template: src: "{{ pdns_admin__conf_template_filename }}" diff --git a/templates/config.py.j2 b/templates/config.py.j2 index 5e6a2e7..ea7796a 100644 --- a/templates/config.py.j2 +++ b/templates/config.py.j2 @@ -29,7 +29,6 @@ UPLOAD_DIR = os.path.join(basedir, 'upload') {% if pdns_admin__database_config is defined %} {% for key, value in pdns_admin__database_config.items() %} -{% if key | upper not in ["SQLALCHEMY_DATABASE_URI", "SQLALCHEMY_MIGRATE_REPO"] %} {% if value is not mapping %} {% if value is sequence and value is not string %} {% if value[0] is number %} @@ -45,16 +44,9 @@ UPLOAD_DIR = os.path.join(basedir, 'upload') {% endif %} {% endif %} {% endif %} -{% endif %} {% endfor %} -#MySQL -SQLALCHEMY_DATABASE_URI = 'mysql://'+SQLA_DB_USER+':'\ - +SQLA_DB_PASSWORD+'@'+SQLA_DB_HOST+'/'+SQLA_DB_NAME -#SQLite -SQLALCHEMY_MIGRATE_REPO = os.path.join(basedir, 'db_repository') {% endif %} - {% if pdns_admin__external_auth_config is defined %} {% for auth in pdns_admin__external_auth_config.values() %} {% for key, value in auth.items() %} From bb6170b69189566aa2ca713f49e2e9433a70a983 Mon Sep 17 00:00:00 2001 From: planet-winter Date: Fri, 26 Feb 2021 17:24:38 +0100 Subject: [PATCH 7/8] fixed variable default setting if using an sqlite database --- defaults/main.yml | 6 +++--- tasks/common-postinstall.yml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/defaults/main.yml b/defaults/main.yml index 3241e72..9e56072 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -52,12 +52,12 @@ pdns_admin__database_config: sqla_db_user: pdns-admin sqla_db_password: CHANGEME sqla_db_name: pdns-admin - sqlalchemy_database_uri: "{{ sqlalchemy_database_uri|default('mysql://'+sqla_db_user+':'+sqla_db_password+'@'+sqla_db_host+'/'+sqla_db_name) }}" + sqlalchemy_database_uri: "{{ 'mysql://'+sqla_db_user+':'+sqla_db_password+'@'+sqla_db_host+'/'+sqla_db_name }}" # only used if using sqlite database in sqlalchemy_database_uri - sqlalchemy_migrate_repo: "'os.path.join(basedir, 'db_repository')' if sqlalchemy_database_uri|search('sqlite')" + sqlalchemy_migrate_repo: "{{ 'os.path.join(basedir, 'db_repository')' if pdns_admin__database_config['sqlalchemy_database_uri'] is search('sqlite') }}" sqlalchemy_track_modifications: true -pdns_admin__sqlite_db_file: "'/var/lib/pdns-admin/pdns-admin.sql' if sqlalchemy_database_uri|search('sqlite')" +pdns_admin__sqlite_db_file: "{{ '/var/lib/pdns-admin/pdns-admin.sql' if pdns_admin__database_config['sqlalchemy_database_uri'] is search('sqlite') }}" pdns_admin__main_config: # powerdns config diff --git a/tasks/common-postinstall.yml b/tasks/common-postinstall.yml index 7d6d5e9..220c70f 100644 --- a/tasks/common-postinstall.yml +++ b/tasks/common-postinstall.yml @@ -23,7 +23,7 @@ priv: "{{ pdns_admin__database_config['sqla_db_name'] }}.*:ALL" append_privs: true state: present - when: pdns_admin__sqlite_db_file is not defined + when: pdns_admin__sqlite_db_file is undefined - name: sqlite installation and db file creation block: From 62defd0a8f37f150e6d725fe63d806692642209d Mon Sep 17 00:00:00 2001 From: planet-winter Date: Fri, 16 Apr 2021 16:50:33 +0200 Subject: [PATCH 8/8] fixed sqlite db filepath and file creation --- defaults/main.yml | 2 +- meta/.galaxy_install_info | 2 +- tasks/common-postinstall.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/defaults/main.yml b/defaults/main.yml index 9e56072..15afc98 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -57,7 +57,7 @@ pdns_admin__database_config: sqlalchemy_migrate_repo: "{{ 'os.path.join(basedir, 'db_repository')' if pdns_admin__database_config['sqlalchemy_database_uri'] is search('sqlite') }}" sqlalchemy_track_modifications: true -pdns_admin__sqlite_db_file: "{{ '/var/lib/pdns-admin/pdns-admin.sql' if pdns_admin__database_config['sqlalchemy_database_uri'] is search('sqlite') }}" +pdns_admin__sqlite_db_file: "'{{ pdns_admin__path }}/powerdnsadmin/pdns-admin.sql' if pdns_admin__database_config['sqlalchemy_database_uri'] is search('sqlite') }}" pdns_admin__main_config: # powerdns config diff --git a/meta/.galaxy_install_info b/meta/.galaxy_install_info index b68532e..0b9bb78 100644 --- a/meta/.galaxy_install_info +++ b/meta/.galaxy_install_info @@ -1,2 +1,2 @@ -install_date: Tue Feb 16 16:23:13 2021 +install_date: Fri Apr 16 11:44:13 2021 version: '' diff --git a/tasks/common-postinstall.yml b/tasks/common-postinstall.yml index 220c70f..8b93ad5 100644 --- a/tasks/common-postinstall.yml +++ b/tasks/common-postinstall.yml @@ -45,6 +45,6 @@ owner: "root" group: "root" state: directory - mode: 0750 + mode: 0770 with_items: "{{ pdns_admin__sqlite_db_file }}" when: pdns_admin__sqlite_db_file is defined