Sign inSign up

contentwaysorg/poweradmin-cli

By contentwaysorg

•Updated 1 day ago

A command-line interface for poweradmin https://github.com/Contentways/poweradmin-cli

Image
Integration & delivery
API management
Developer tools
0

856

contentwaysorg/poweradmin-cli repository overview

⁠poweradmin-cli

A command-line interface for managing DNS zones, records, users and groups via the Poweradmin⁠ REST API.

Built with poweradmin-go⁠ — the Go SDK for Poweradmin.

⁠Requirements

  • Poweradmin 4.3.0+ running in API-mode (PA_DNS_BACKEND=api)
  • A valid Poweradmin API key

⁠Installation

⁠From release

Download the latest binary for your platform from the releases page⁠:

# Linux (amd64)
curl -L https://github.com/Contentways/poweradmin-cli/releases/latest/download/poweradmin-cli_Linux_x86_64.tar.gz | tar xz
sudo mv poweradmin /usr/local/bin/
⁠Via go install
go install github.com/Contentways/poweradmin-cli@latest
⁠Docker
docker pull contentwaysorg/poweradmin-cli:latest

docker run --rm \
  -e POWERADMIN_URL=https://dns.example.com \
  -e POWERADMIN_API_KEY=pwa_... \
  contentwaysorg/poweradmin-cli:latest zones list
⁠From source
git clone [email protected]:contentways/poweradmin-cli.git
cd poweradmin-cli
make build

The binary is placed at build/poweradmin.

⁠Configuration

Credentials are resolved in the following order of precedence:

SourceExample
CLI flags-u, -k
Environment variablesPOWERADMIN_URL, POWERADMIN_API_KEY
Config file~/.config/poweradmin/config.yaml
⁠Config file
url: https://dns.example.com
api_key: pwa_your_api_key_here

Create the config directory and file:

mkdir -p ~/.config/poweradmin
cat > ~/.config/poweradmin/config.yaml << 'EOF'
url: https://dns.example.com
api_key: pwa_your_api_key_here
EOF
⁠Environment variables
export POWERADMIN_URL=https://dns.example.com
export POWERADMIN_API_KEY=pwa_your_api_key_here
⁠CLI flags
poweradmin zones list -u https://dns.example.com -k pwa_...

⁠Shell Completion

Shell completion supports Tab completion for command names, flags and values including zone names, usernames and group names fetched live from the API.

⁠zsh (Oh My Zsh)
poweradmin completion zsh > ~/.oh-my-zsh/completions/_poweradmin
source ~/.zshrc
⁠bash
poweradmin completion bash > ~/.bash_completion.d/poweradmin
source ~/.bash_completion.d/poweradmin

⁠Usage

⁠Global Flags
FlagShortDescription
--url-uPoweradmin URL
--api-key-kPoweradmin API key
--output-oOutput format: table, full, json
--no-headerSuppress table header row
--quiet-qOnly print ID (create) or suppress output (delete)
--yes-ySkip delete confirmation prompt
⁠Zones
# List all zones
poweradmin zones list
poweradmin zones list -o json

# Filter and sort zones
poweradmin zones list --type NATIVE
poweradmin zones list --name-filter contentways
poweradmin zones list --sort name

# Get a zone by name or ID
poweradmin zones get --name example.com
poweradmin zones get --id 42 -o json

# Create a zone with nameservers
poweradmin zones create example.com
poweradmin zones create example.com \
  --nameserver ns1.example.com,ns2.example.com,ns3.example.com

# Create and capture the ID
ZONE_ID=$(poweradmin zones create example.com -q)

# Delete a zone
poweradmin zones delete --name example.com
poweradmin zones delete --name example.com --yes

# Export a zone as BIND zone file
poweradmin zones export --name example.com
poweradmin zones export --name example.com > example.com.zone

# Import a zone from a BIND zone file
poweradmin zones import --file example.com.zone
poweradmin zones import --file example.com.zone --zone-name example.com
poweradmin zones import --file example.com.zone --create-zone
poweradmin zones import --file example.com.zone --dry-run
⁠Records
# List all records in a zone
poweradmin records list --zone-name example.com
poweradmin records list --zone-name example.com --type A
poweradmin records list --zone-name example.com --sort type
poweradmin records list --zone-name example.com -o json

# Get a record by ID
poweradmin records get --zone-name example.com --id <record-id>

# Create a record
poweradmin records create \
  --zone-name example.com \
  --name www.example.com \
  --type A \
  --content 1.2.3.4 \
  --ttl 3600

# Create and capture the ID
RECORD_ID=$(poweradmin records create \
  --zone-name example.com \
  --name www.example.com \
  --type A \
  --content 1.2.3.4 -q)

# Update a record
poweradmin records update \
  --zone-name example.com \
  --id <record-id> \
  --content 5.6.7.8

# Delete a record
poweradmin records delete \
  --zone-name example.com \
  --id <record-id> --yes
⁠Users
# List all users
poweradmin users list
poweradmin users list --active
poweradmin users list --active=false
poweradmin users list --sort username

# Get a user by name or ID
poweradmin users get --name patrick
poweradmin users get --id 1

# Create a user (password will be prompted)
poweradmin users create \
  --username patrick \
  --email [email protected] \
  --fullname "Patrick Omland"

# Create a user with password via flag (not recommended)
poweradmin users create \
  --username patrick \
  --password secret123 \
  --email [email protected]

# Update a user
poweradmin users update --name patrick --email [email protected]
poweradmin users update --id 1 --active=false

# Delete a user
poweradmin users delete --name patrick --yes

# Assign a permission template
poweradmin users set-permission-template --name patrick --template-id 2
⁠Groups
# List all groups
poweradmin groups list
poweradmin groups list -o json

# Get a group by name or ID
poweradmin groups get --name Administrators
poweradmin groups get --id 1

# Create a group
poweradmin groups create --name "Zone Editors" --description "Can edit zone records"
GROUP_ID=$(poweradmin groups create --name "Zone Editors" -q)

# Update a group
poweradmin groups update --name "Zone Editors" --new-name "DNS Editors"

# Delete a group
poweradmin groups delete --name "DNS Editors" --yes

# Manage members
poweradmin groups members --name Administrators
poweradmin groups member-add --group-id 1 --user-id 2
poweradmin groups member-remove --group-id 1 --user-id 2

# Manage zones
poweradmin groups zones --name Administrators
poweradmin groups zone-add --group-id 1 --zone-id 78
poweradmin groups zone-remove --group-id 1 --zone-id 78
⁠Permission Templates
# List all permission templates
poweradmin permission-templates list
poweradmin permission-templates list -o json

# Get a template by name or ID (shows full permission list)
poweradmin permission-templates get --name Administrator
poweradmin permission-templates get --id 1 -o json

# Create a template
poweradmin permission-templates create --name "Zone Editors" --description "Can edit zone records"
poweradmin permission-templates create --name "Zone Editors" --type group --permissions 1,2,3

# Create and capture the ID
PT_ID=$(poweradmin permission-templates create --name "Zone Editors" -q)

# Update a template
poweradmin permission-templates update --name "Zone Editors" --new-name "DNS Editors"
poweradmin permission-templates update --name "Zone Editors" --permissions 1,2,3,4

# Delete a template
poweradmin permission-templates delete --name "Zone Editors" --yes
⁠Version
poweradmin version

⁠Output Formats

FlagDescription
-o tableHuman-readable aligned table, long content truncated (default)
-o fullHuman-readable aligned table, full content
-o jsonJSON output, suitable for scripting and piping into jq

Color output is automatically enabled when stdout is a terminal and suppressed when piping or redirecting output.

⁠Scripting

# Get all zone IDs
poweradmin zones list -o json | jq '.zones[].id'

# Create a zone and immediately add a record
ZONE_ID=$(poweradmin zones create example.com -q)
poweradmin records create \
  --zone-id $ZONE_ID \
  --name www.example.com \
  --type A \
  --content 1.2.3.4

# Delete all records of a specific type
poweradmin records list --zone-name example.com --type TXT -o json \
  | jq -r '.records[].id' \
  | xargs -I{} poweradmin records delete --zone-name example.com --id {} --yes

# Backup all zones as BIND zone files
poweradmin zones list -o json | jq -r '.zones[].name' | \
  xargs -I{} sh -c 'poweradmin zones export --name {} > {}.zone'

# Migrate a zone to a new Poweradmin instance
poweradmin zones export --name example.com > example.com.zone
POWERADMIN_URL=https://new-dns.example.com \
  poweradmin zones import --file example.com.zone --create-zone

⁠Security

Docker images are signed with cosign⁠ using keyless signing via GitHub OIDC. Verify an image with:

cosign verify \
  --certificate-identity-regexp="https://github.com/Contentways/poweradmin-cli" \
  --certificate-oidc-issuer="https://token.actions.githubusercontent.com" \
  contentwaysorg/poweradmin-cli:latest

Each release also includes a Software Bill of Materials (SBOM) generated by Syft⁠.

⁠Documentation

Full reference documentation is available in docs/reference⁠.

⁠License

MIT — Copyright (c) 2026 Contentways

Tag summary

Content type

Image

Digest

sha256:5665550a3…

Size

4.4 MB

Last updated

1 day ago

docker pull contentwaysorg/poweradmin-cli