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 8ae4dad..15afc98 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -1,27 +1,38 @@ --- -pdns_admin_service_name: powerdns -pdns_admin_git_repo_url: https://github.com/ngoduykhanh/PowerDNS-Admin.git -pdns_admin_pip_packages: - - mysql-python +# 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" +# 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: 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__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__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_python_venv_path: /opt/vens/powerdns -pdns_admin_python_path: "{{ pdns_admin_python_venv_path }}/bin/python" +pdns_admin__python_venv_path: /opt/vens/powerdns +pdns_admin__python_path: "{{ pdns_admin__python_venv_path }}/bin/python" -#TODO merge all configuration -#TODO union configuration -pdns_admin_global_config: +# 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 config +pdns_admin__listen_port: 9393 +pdns_admin__listen_ip: 127.0.0.1 +pdns_admin__workers: 4 + +pdns_admin__global_config: wtf_csrf_enabled: true secret_key: CHANGEME bind_address: 0.0.0.0 @@ -32,55 +43,23 @@ 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 - #sqlite - #sqlalchemy_database_uri: 'sqlite:////path/to/your/pdns.db' + 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 pdns_admin__database_config['sqlalchemy_database_uri'] is search('sqlite') }}" sqlalchemy_track_modifications: true -# 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__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: +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..0b9bb78 --- /dev/null +++ b/meta/.galaxy_install_info @@ -0,0 +1,2 @@ +install_date: Fri Apr 16 11:44: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..8b93ad5 --- /dev/null +++ b/tasks/common-postinstall.yml @@ -0,0 +1,50 @@ +--- + +- 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 undefined + +- 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: 0770 + with_items: "{{ pdns_admin__sqlite_db_file }}" + when: pdns_admin__sqlite_db_file is defined 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 0e396b5..3f8b775 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -1,3 +1,14 @@ --- -- 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..e4b97c9 --- /dev/null +++ b/tasks/native-install.yml @@ -0,0 +1,65 @@ +--- +- 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 ef6ea68..0000000 --- a/tasks/powerdns_install.yml +++ /dev/null @@ -1,48 +0,0 @@ ---- -- name: Add the OS specific variables - include_vars: "{{ ansible_os_family }}.yml" - -- name: Install required packages in Redhat derivatives - yum: - name: "{{ item }}" - state: installed - with_items: - - "{{ pdns_admin_packages }}" - when: ansible_os_family == 'RedHat' - -- name: Install required packages in Debian derivatives - apt: - name: "{{ item }}" - state: installed - 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: 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: Install virtualenv - pip: - name: virtualenv - -- name: PIP install requirements for PowerDNS Admin - pip: - requirements: "{{ pdns_admin_requirements_path }}" - virtualenv: "{{ pdns_admin_python_venv_path }}" - -- name: Install some more required packages - pip: - name: "{{ item }}" - virtualenv: "{{ pdns_admin_python_venv_path }}" - with_items: "{{ pdns_admin_pip_packages }}" diff --git a/tasks/powerdns_post.yml b/tasks/powerdns_post.yml deleted file mode 100644 index 65ab5c7..0000000 --- a/tasks/powerdns_post.yml +++ /dev/null @@ -1,27 +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 - -- name: Run Create DB - shell: "{{ pdns_admin_python_path }} /var/www/powerdns-admin/create_db.py" - -- 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 cb22133..ea7796a 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,9 +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 key | upper not in ["SQLALCHEMY_DATABASE_URI", "SQLALCHEMY_MIGRATE_REPO"] %} +{% if pdns_admin__database_config is defined %} +{% for key, value in pdns_admin__database_config.items() %} {% if value is not mapping %} {% if value is sequence and value is not string %} {% if value[0] is number %} @@ -45,18 +44,11 @@ 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() %} +{% 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 %} @@ -78,8 +70,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 %} @@ -102,4 +94,7 @@ SQLALCHEMY_MIGRATE_REPO = os.path.join(basedir, 'db_repository') # 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 ce705c1..8b8c64f 100644 --- a/templates/powerdns-admin.service.j2 +++ b/templates/powerdns-admin.service.j2 @@ -1,14 +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 }}" -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 index 84b5a76..c000080 100644 --- a/vars/Debian.yml +++ b/vars/Debian.yml @@ -1,14 +1,24 @@ --- -pdns_admin_packages: +pdns_admin__packages: - curl - git - python - - libpython2.7 - - python-dev + - python-configparser + - libpython3.7 + - python3-dev - libsasl2-dev - build-essential - - libmariadb2 - - libmariadb-client-lgpl-dev + - libmariadb3 - libssl-dev - libldap2-dev - - libmysqlclient-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 index 92c171b..d8654e1 100644 --- a/vars/RedHat.yml +++ b/vars/RedHat.yml @@ -1,5 +1,5 @@ --- -pdns_admin_packages: +pdns_admin__packages: - curl - git - python 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