Skip to content

Reimplement record add to extend existing records and introduce record replace #16

Reimplement record add to extend existing records and introduce record replace

Reimplement record add to extend existing records and introduce record replace #16

Workflow file for this run

name: tests
on:
pull_request:
push:
tags-ignore: # tags are tested in release.yml
- "**"
branches:
- main
workflow_call:
jobs:
unit-tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- uses: actions/setup-python@v6
with:
cache: 'pip'
python-version: |
3.10
3.11
3.12
3.13
3.14
- run: pip install .[dev]
- run: tox run
common-integration-test:
needs: advanced-integration-test
services:
powerdns:
image: ${{ matrix.powerdns_container }}
env:
PDNS_AUTH_API_KEY: 1FooBarBaz2!
ports:
- "1053:53"
- "1053:53/udp"
- "8081:8081"
runs-on: ubuntu-latest
strategy:
matrix:
powerdns_container:
- "docker.io/powerdns/pdns-auth-50:5.0.0"
- "docker.io/powerdns/pdns-auth-49:4.9.11"
- "docker.io/powerdns/pdns-auth-48:4.8.5"
- "docker.io/powerdns/pdns-auth-47:4.7.5"
env:
POWERDNS_CLI_APIKEY: 1FooBarBaz2!
POWERDNS_CLI_URL: http://localhost:8081
steps:
- name: Clone repository
uses: actions/checkout@v5
- uses: actions/setup-python@v6
with:
python-version: 3.14
cache: pip
- name: Build cli
run: pip install .
- name: Show version
run: powerdns-cli version
# Zone Management Tests
- name: Add primary zone
run: powerdns-cli zone add example.org PRIMARY
- name: Add native zone
run: powerdns-cli zone add example.com. NATIVE
- name: Change config for native zone
run: powerdns-cli zone config example.com --kind Primary
- name: Idempotent config change
run: powerdns-cli zone config example.com --kind Primary | grep already
- name: Add secondary zone
run: powerdns-cli zone add example.org. secondary
- name: List zones
run: powerdns-cli zone list
- name: Add duplicate native zone
run: powerdns-cli zone add example.org NATIVE
- name: Add duplicate primary zone
run: powerdns-cli zone add example.org PRIMARY | grep "already"
- name: Delete zone
run: powerdns-cli zone delete -f example.com.
- name: Delete absent zone
run: powerdns-cli zone delete -f example.com
- name: Rectify Zone
run: powerdns-cli zone rectify example.org
- name: Notify Zone
run: powerdns-cli zone notify example.org
- name: Import zone
run: powerdns-cli zone import --force ./integration/import-zone.json
- name: Search zone
run: powerdns-cli zone search --max 5 "test.example.org"
- name: Flush zone cache
run: powerdns-cli zone flush-cache example.org.
# Record Management Tests
- name: Add Record
run: powerdns-cli record add add example.org A 10.0.0.1
- name: Add extra record
run: powerdns-cli record add add example.org A 10.0.0.2
- name: Add duplicate record
run: powerdns-cli record add add example.org A 10.0.0.2 | grep "already"
- name: Add CNAME record with different ttl
run: powerdns-cli record add --ttl 60 cname example.org CNAME "example.org."
- name: Run replace on not preexisting record
run: powerdns-cli record replace replaceme example.org A 10.0.0.1
- name: Replace existing record
run: powerdns-cli record replace replaceme example.org A 10.0.0.2
- name: Create a record to delete
run: powerdns-cli record add delete example.org A 10.0.0.1
- name: Delete part of a record
run: powerdns-cli record delete add example.org A 10.0.0.2
- name: Delete full record
run: powerdns-cli record delete --all replaceme example.org A 192.168.0.1
- name: Create a record to disable
run: powerdns-cli record add disable example.org A 10.0.0.1
- name: Disable record
run: powerdns-cli record disable disable example.org A 10.0.0.1
- name: Export records
run: powerdns-cli record export example.org
- name: Export with filters
run: powerdns-cli record export --name "@" --type soa example.org
- name: Export zone as json
run: powerdns-cli zone export example.org
- name: Export zone as bind / axfr
run: powerdns-cli record export -b example.org
- name: Import rrsets
run: powerdns-cli record import ./integration/import-record.json
# Config Tests
- name: Show stats
run: powerdns-cli config stats
- name: List servers
run: powerdns-cli config list
- name: Export server
run: powerdns-cli config export
# TSIGKey Tests
- name: Add TSIGKey with defaults
run: powerdns-cli tsigkey add test1 hmac-md5
- name: Add TSIGKey with secrets
run: powerdns-cli tsigkey add test2 hmac-sha1 -s "kp4/24gyYsEzbuTVJRUMoqGFmN3LYgVDzJ/3oRSP7ys="
- name: List TSIGKeys
run: powerdns-cli tsigkey list
- name: Delete TSIGKeys
run: powerdns-cli tsigkey delete test2
- name: Update TSIGKey secret
run: powerdns-cli tsigkey update test1 -s "kp4/24gyYsEzbuTVJRUMoqGFmN3LYgVDzJ/3oRSP7ys="
- name: Update TSIGKey name
run: powerdns-cli tsigkey update test1 -n "newname"
- name: Update TSIGKey algorithm
run: powerdns-cli tsigkey update newname --algorithm "hmac-sha512"
- name: Export TSIGKey key
run: powerdns-cli tsigkey export newname
- name: Import TSIGKeys
run: powerdns-cli tsigkey import ./integration/import-tsigkey.json
# Zonemetadata Tests
- name: Exports metadata
run: powerdns-cli metadata export example.org
- name: Add metadata
run: powerdns-cli metadata add example.org ALSO-NOTIFY 192.0.2.1:5305
- name: Add duplicate metadata
run: powerdns-cli metadata add example.org ALSO-NOTIFY 192.0.2.1:5305
- name: Extend metadata
run: powerdns-cli metadata extend example.org ALSO-NOTIFY 192.0.2.2:5305
- name: List single metadata value
run: powerdns-cli metadata export example.org
- name: Replace metadata
run: powerdns-cli metadata update example.org ALSO-NOTIFY 192.0.2.2:5305
- name: Delete metadata
run: powerdns-cli metadata delete example.org ALSO-NOTIFY
- name: Import Metadata
run: powerdns-cli metadata import example.com ./integration/import-metadata.json
# Autoprimary Tests
- name: Add autoprimary
run: powerdns-cli autoprimary add 127.0.0.1 example.org
- name: Add autoprimary with name
run: powerdns-cli autoprimary add --account test123 127.0.0.1 example.com
- name: List autoprimaries
run: powerdns-cli autoprimary list
- name: Delete autoprimary
run: powerdns-cli autoprimary delete 127.0.0.1 example.org
- name: Import autoprimary
run: powerdns-cli autoprimary import integration/import-autoprimary.json
# Cryptokey Tests
- name: Add ZSK cryptokey
run: powerdns-cli cryptokey add --bits 256 zsk ecdsap256sha256 example.org
- name: Add ksk cryptokey
run: powerdns-cli cryptokey add ksk ed25519 example.org
- name: Import a cryptokey secret
run: >
powerdns-cli
cryptokey
import
ksk
example.org
./integration/import-cryptokey.json
- name: List cryptokeys
run: powerdns-cli cryptokey list example.org
- name: Delete a cryptokey
run: powerdns-cli cryptokey delete example.org 1
- name: Export a cryptokey
run: powerdns-cli cryptokey export example.org 2
- name: Enable cryptokey
run: powerdns-cli cryptokey enable example.org 2
- name: Disable cryptokey
run: powerdns-cli cryptokey disable example.org 2
- name: Publish cryptokey
run: powerdns-cli cryptokey publish example.org 2
- name: Unpublish cryptokey
run: powerdns-cli cryptokey unpublish example.org 2
advanced-integration-test:
needs: unit-tests
runs-on: ubuntu-latest
strategy:
matrix:
powerdns_container:
- "docker.io/powerdns/pdns-auth-50:5.0.0"
steps:
- name: Clone repository
uses: actions/checkout@v5
- name: Start powerdns service container
run: >
docker run -d --name powerdns
-p 1053:53 -p 1053:53/udp -p 8082:8081
-e PDNS_AUTH_API_KEY=1FooBarBaz2
-v ${{ github.workspace }}/integration/pdns.conf:/etc/powerdns/pdns.conf
"${{ matrix.powerdns_container }}"
# --network "${{ job.container.network }}"
# This does only work if job.container.network is defined
- uses: actions/setup-python@v6
with:
python-version: 3.14.0
cache: pip
- name: Build cli
run: pip install .
- name: Write config file
run: echo -e 'APIKEY = "1FooBarBaz2"\nURL = "http://localhost:8082"' > $HOME/.powerdns-cli.conf
# Zone Management Tests
- name: Add primary zone
run: powerdns-cli zone add example.org PRIMARY
- name: Add native zone
run: powerdns-cli zone add example.com. NATIVE
- name: Add variant zone
run: powerdns-cli zone add example.com..variant1 SECONDARY
- name: Add view for 10.0.0.0/8
run: powerdns-cli network add 10.0.0.0/8 test
- name: Add view for 0.0.0.0/0
run: powerdns-cli network add 0.0.0.0/0 unrestricted
- name: List view for 10.0.0.0/8
run: powerdns-cli network export 10.0.0.0/8
- name: Import network to views
run: powerdns-cli network import ./integration/import-network.json
- name: List views for all networks
run: powerdns-cli network list
- name: Add example.com to view test
run: powerdns-cli view add test example.com.
- name: Add example.com..variant1 to view unrestricted
run: powerdns-cli view add unrestricted example.com..variant1
- name: List all views
run: powerdns-cli view list
- name: Show the zones of unrestricted view
run: powerdns-cli view export unrestricted
- name: Test view import
run: powerdns-cli view import ./integration/import-view.json
- name: Stop and remove manual service container
if: always()
run: |
docker stop powerdns || true
docker rm powerdns || true