Sign inSign up

duplocloud/duploctl

By duplocloud

Updated 2 months ago

Image
0

100K+

duplocloud/duploctl repository overview

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

FlagEnv VariableDefaultDescription
--host, -HDUPLO_HOST--DuploCloud portal URL (required)
--token, -tDUPLO_TOKEN--Authentication token (required unless using -I)
--tenant, -TDUPLO_TENANT--Tenant name
--output, -oDUPLO_OUTPUTjsonOutput format (json, yaml, csv, env, string)
--query, -q----JMESPath query to filter output
--wait, -w--falseWait for async operations to complete
--file, -f----YAML/JSON file for resource body input
--interactive, -I--falseUse interactive browser-based login
--admin, --isadmin--falseRequest admin JIT credentials (use with -I)
--log-level, -LDUPLO_LOG_LEVELINFOLog level
--config-fileDUPLO_CONFIG--Path to duploctl config file
--ctxDUPLO_CONTEXT--Named context from config file
--validateDUPLO_VALIDATEfalseValidate inputs against SDK model schemas
--dry-run--falsePrint 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.

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

Tag summary

Content type

Image

Digest

sha256:0152f5fdf

Size

46.9 MB

Last updated

2 months ago

docker pull duplocloud/duploctl