Reimplement record add to extend existing records and introduce record replace
#16
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 |