Skip to main content

Command line Client for interacting with Duplocloud portals.

Project description

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

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

duplocloud_client-0.4.3.tar.gz (197.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

duplocloud_client-0.4.3-py3-none-any.whl (106.7 kB view details)

Uploaded Python 3

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

Hashes for duplocloud_client-0.4.3.tar.gz
Algorithm Hash digest
SHA256 c6d2685e173e7e12c548bc851cfc94a9d9c640111ae6899527d11ec4a4708842
MD5 b08eceadf90e0e7aae0ef903e479030b
BLAKE2b-256 75e4a19b861e8fa57cdb57f3e1c49edeb2001b3e77c904ae2338bb8b5e12e1af

See more details on using hashes here.

File details

Details for the file duplocloud_client-0.4.3-py3-none-any.whl.

File metadata

File hashes

Hashes for duplocloud_client-0.4.3-py3-none-any.whl
Algorithm Hash digest
SHA256 db07df2824a1963d080805510967cfab1f8781310bb594cc849f18e02df82c08
MD5 2c6ad3b9f8591926cd09dfde1e047982
BLAKE2b-256 4d7b4a95f97b2aad8dad798fc52ba63453129f7fed85a4e383edf48bfa9eacc1

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page