Command line Client for interacting with Duplocloud portals.
Project description
duploctl
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
- Documentation -- full CLI reference, resource guides, and API docs
- Changelog -- version history
- GitHub Releases -- install artifacts and release notes
- PyPI -- Python package
- Docker Hub -- container images
- DuploCloud -- platform documentation
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file duplocloud_client-0.4.3.tar.gz.
File metadata
- Download URL: duplocloud_client-0.4.3.tar.gz
- Upload date:
- Size: 197.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c6d2685e173e7e12c548bc851cfc94a9d9c640111ae6899527d11ec4a4708842
|
|
| MD5 |
b08eceadf90e0e7aae0ef903e479030b
|
|
| BLAKE2b-256 |
75e4a19b861e8fa57cdb57f3e1c49edeb2001b3e77c904ae2338bb8b5e12e1af
|
File details
Details for the file duplocloud_client-0.4.3-py3-none-any.whl.
File metadata
- Download URL: duplocloud_client-0.4.3-py3-none-any.whl
- Upload date:
- Size: 106.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
db07df2824a1963d080805510967cfab1f8781310bb594cc849f18e02df82c08
|
|
| MD5 |
2c6ad3b9f8591926cd09dfde1e047982
|
|
| BLAKE2b-256 |
4d7b4a95f97b2aad8dad798fc52ba63453129f7fed85a4e383edf48bfa9eacc1
|