Skip to main content

duploctl

Unit Tests PyPI - Version Docker Image Version GitHub Release Static Badge

CLI and Python SDK for managing DuploCloud infrastructure. Works as a standalone command-line tool or as a Python module in your own scripts and CI/CD pipelines.

  • 30+ resource types -- tenants, services, infrastructure, hosts, RDS, S3, Lambda, ECS, Batch, Argo Workflows, and more
  • Plugin architecture -- resources discovered via Python entry points, easy to extend
  • Multiple output formats -- JSON (default), YAML, CSV, env vars, string
  • JMESPath queries -- filter and reshape output with -q
  • Interactive login -- browser-based OAuth flow with token caching
  • Model validation -- optional Pydantic validation against DuploCloud SDK schemas

Installation

pip install duplocloud-client
brew install duplocloud/tap/duploctl

For pinned version installs and alternative methods (GitHub release, git tag, Docker, standalone binary), see the release notes.

Quick Start

Set your DuploCloud credentials:

export DUPLO_HOST=https://example.duplocloud.net
export DUPLO_TOKEN=AQAAA...
export DUPLO_TENANT=dev01

Run commands:

# List services in the current tenant
duploctl service list

# Find a specific tenant
duploctl tenant find mytenant

# Create a service from a YAML file
duploctl service create -f service.yaml

# Get output as YAML
duploctl service list -o yaml

# Filter output with JMESPath
duploctl service list -q '[].Name'

Configuration

Flag Env Variable Default Description
--host, -H DUPLO_HOST -- DuploCloud portal URL (required)
--token, -t DUPLO_TOKEN -- Authentication token (required unless using -I)
--tenant, -T DUPLO_TENANT -- Tenant name
--output, -o DUPLO_OUTPUT json Output format (json, yaml, csv, env, string)
--query, -q -- -- JMESPath query to filter output
--wait, -w -- false Wait for async operations to complete
--file, -f -- -- YAML/JSON file for resource body input
--interactive, -I -- false Use interactive browser-based login
--admin, --isadmin -- false Request admin JIT credentials (use with -I)
--log-level, -L DUPLO_LOG_LEVEL INFO Log level
--config-file DUPLO_CONFIG -- Path to duploctl config file
--ctx DUPLO_CONTEXT -- Named context from config file
--validate DUPLO_VALIDATE false Validate inputs against SDK model schemas
--dry-run -- false Print changes without submitting

Full argument reference: cli.duplocloud.com/Args

CLI Usage

duploctl <resource> <command> [args...]

Cloud Access (JIT)

# Configure AWS credentials
duploctl jit update_aws_config myportal

# Open AWS web console
duploctl jit web

# Get Kubernetes config
duploctl jit update_kubeconfig myinfra

Resource Management

# Infrastructure and tenants
duploctl infrastructure list
duploctl tenant find mytenant

# Services
duploctl service list
duploctl service create -f service.yaml -w
duploctl service update_image myservice nginx:latest

# Kubernetes resources
duploctl configmap list
duploctl secret find mysecret
duploctl cronjob list
duploctl pod list

# AWS resources
duploctl rds list
duploctl s3 list
duploctl lambda list
duploctl hosts list

Python Module

Use duploctl programmatically in your own scripts.

From Environment Variables

from duplocloud.controller import DuploCtl

# Reads DUPLO_HOST, DUPLO_TOKEN, DUPLO_TENANT from env
duplo, args = DuploCtl.from_env()

# Callable interface (like CLI syntax)
services = duplo("service", "list")
tenant = duplo("tenant", "find", "mytenant")

From Explicit Credentials

from duplocloud.controller import DuploCtl

duplo = DuploCtl.from_creds(
    host="https://example.duplocloud.net",
    token="AQAAA...",
    tenant="dev01",
)

# Load a resource and call methods directly
svc = duplo.load("service")
services = svc.list()
my_service = svc.find("myservice")

# JMESPath filtering
names = duplo("service", "list", query="[].Name")

Create Resources

duplo = DuploCtl.from_creds(host="...", token="...", tenant="dev01")

# Create from a dict
duplo("service", "create", body={
    "Name": "myservice",
    "Image": "nginx:latest",
    "Replicas": 2,
})

# Or load the resource directly
svc = duplo.load("service")
svc.create(body={"Name": "myservice", "Image": "nginx:latest"})

Docker

# Run any duploctl command
docker run -e DUPLO_HOST=... -e DUPLO_TOKEN=... -e DUPLO_TENANT=... \
  duplocloud/duploctl service list

# Output as YAML
docker run -e DUPLO_HOST=... -e DUPLO_TOKEN=... -e DUPLO_TENANT=... \
  duplocloud/duploctl service list -o yaml

CI/CD

duploctl integrates with all major CI/CD platforms. See the DuploCloud CI/CD docs for detailed guides.

Platform Project Marketplace
GitHub Actions duplocloud/actions Marketplace
Bitbucket Pipelines duplocloud/duploctl-pipe
CircleCI duplocloud/orbs Orb Registry
GitLab CI duplocloud/ci CI/CD Catalog

Development

git clone --recurse-submodules https://github.com/duplocloud/duploctl.git
cd duploctl
pip install -e '.[build,test,aws,docs]'
pytest src -m unit

See CONTRIBUTING.md for full development guidelines.

Resources

Metadata

Release files for duplocloud-client 0.4.5

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for duplocloud-client 0.4.5
File Size Uploaded
duplocloud_client-0.4.5.tar.gz 234.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for duplocloud-client 0.4.5
File Interpreter ABI Platform
duplocloud_client-0.4.5-py3-none-any.whl Python 3 none any Details

Total release size: 363.1 kB

Release files / duplocloud_client-0.4.5.tar.gz

Download URL duplocloud_client-0.4.5.tar.gz
Size 234.9 kB
Tags Source
SHA-256 checksum
How to use checksums
535536fb610e6c6c187a3ef6f84b84215d8c464c3a1370744ecc08fc5c39e4ef
BLAKE2b-256 checksum
How to use checksums
1108b407133e19726a063829c8eea3d3f3d270e7533fb3f835caa794177be4df
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.14

Release files / duplocloud_client-0.4.5-py3-none-any.whl

Download URL duplocloud_client-0.4.5-py3-none-any.whl
Size 128.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
a0a6a8dde6fc87247a29328c460988d7bf281b8a18bf9a10d2808a65f316af3e
BLAKE2b-256 checksum
How to use checksums
2b5bb87909e0a75a36b626708f08915cb74c35e3308daefdf47f80e6f1888072
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.14

Release history Release notifications | RSS feed

This release

0.4.5 This release

2 release files

0.4.3

2 release files

0.4.2

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.8

2 release files

0.3.7

2 release files

0.3.6

2 release files

0.3.5

2 release files

0.3.4

2 release files

0.3.3

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.51

2 release files

0.2.49

2 release files

0.2.48

2 release files

0.2.45

2 release files

0.2.44

2 release files

0.2.43

2 release files

0.2.42

2 release files

0.2.40

2 release files

0.2.39

2 release files

0.2.38

2 release files

0.2.37

2 release files

0.2.36

2 release files

0.2.35

2 release files

0.2.33

2 release files

0.2.31

2 release files

0.2.30

2 release files

0.2.27

2 release files

0.2.26

2 release files

0.2.25

2 release files

0.2.24

2 release files

0.2.23

2 release files

0.2.22

2 release files

0.2.21

2 release files

0.2.20

2 release files

0.2.19

2 release files

0.2.18

2 release files

0.2.17

2 release files

0.2.16

2 release files

0.2.15

2 release files

0.2.14

2 release files

0.2.13

2 release files

0.2.12

2 release files

0.2.11

2 release files

0.2.10

2 release files

0.2.9

2 release files

0.2.8

2 release files

0.2.7

2 release files

0.2.6

2 release files

0.2.5

2 release files

0.2.4

2 release files

0.2.3

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.16

2 release files

0.1.13

2 release files

0.1.12

2 release files

0.1.11

2 release files

0.1.10

2 release files

0.1.9

2 release files

0.1.8

2 release files

0.1.7

2 release files

0.1.6

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

0.0.13

2 release files

0.0.12

2 release files

0.0.11

2 release files

0.0.10

2 release files

0.0.9

2 release files

0.0.8

2 release files

0.0.7

2 release files

0.0.6

2 release files

0.0.5

2 release files

0.0.4

2 release files

0.0.3

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page