Repository navigation
Releases: uchiha-vivek/cloudctl
Release list
Release: Azure Environment Snapshot Manager
cloudctl v0.1.0 — Initial Release: Azure Environment Snapshot Manager
Released: 2026-08-07
We're excited to ship the first release of cloudctl, an open-source Rust
CLI for cloud infrastructure discovery, environment snapshots, and
configuration drift detection. This release focuses on Azure as the
first supported provider, built on a provider-agnostic architecture
designed from day one to support AWS, GCP, Kubernetes, DigitalOcean, and
Hetzner without breaking changes.
Highlights
- Point-in-time environment snapshots of an Azure resource group,
written as deterministic, git-diffable YAML. - Semantic drift detection —
cloudctl difftells you what changed
(vm_size: Standard_D4s_v5 → Standard_D8s_v5), not a wall of raw JSON diff noise. - Resource inventory with filtering by kind, name, and tags.
- Dependency graphs exportable to Graphviz DOT or Mermaid.
- Zero hardcoded cloud logic outside a single
provider-azurecrate —
adding a new cloud provider never requires touching the CLI or any
business-logic crate.
Features
Commands
| Command | Description |
|---|---|
cloudctl snapshot <resource-group> |
Discover every supported resource in a resource group and write snapshot.yaml |
cloudctl diff <snapshot-file> |
Compare the current Azure environment against a saved snapshot |
cloudctl inventory |
List discovered resources, filterable by --kind, --name-contains, --tag |
cloudctl graph |
Build the resource dependency graph; export as --export dot / --export mermaid |
cloudctl version |
Print version information |
All commands support --output human\|json\|yaml (or the --json/--yaml shorthands), --subscription, --verbose, and --debug.
Azure resource discovery
Virtual Machines (including extensions), Managed Disks, Network
Interfaces, Public IPs, Network Security Groups (with rules), Virtual
Networks, Subnets, and user-assigned Managed Identities — including tags
on every resource.
Resilience
The Azure Resource Manager client handles pagination (nextLink),
retries 429/5xx responses with backoff (honoring Retry-After), and
fails fast — without retrying — on 401/403/404.
Architecture
A 14-crate Cargo workspace with a strict separation between cloud-agnostic
business logic (cli, snapshot, inventory, diff, graph, output,
core, models) and the one Azure-specific crate (provider-azure,
auth) that implements the Provider trait. See
docs/architecture.md.
Quality
- Unit tests across every crate's business logic.
wiremock-based tests covering ARM pagination, rate-limit retry, and
auth-failure handling — no test ever calls real Azure.- CLI integration tests against the compiled binary.
- CI:
cargo fmt,cargo clippy -D warnings,cargo nextest,cargo deny,cargo audit, Hurl, coverage.
Installation
From source:
git clone https://github.com/uchiha-vivek/cloudctl.git
cd cloudctl
cargo build --release
./target/release/cloudctl versionDocker Compose:
cp .env.example .env # fill in your Azure credentials
docker compose build
docker compose run --rm cloudctl versionSee README.md for full setup and usage.
Known Limitations
- Only Azure is implemented. AWS, GCP, Kubernetes, DigitalOcean, and
Hetzner providers are on the roadmap but not
yet available. - Hurl test coverage is a starter set (2 scenarios), not exhaustive across
every command × failure mode yet. - Only one example scenario (
simple-vm) is included underscenarios/.
Full Changelog
See CHANGELOG.md.