Skip to content

Releases: uchiha-vivek/cloudctl

Release: Azure Environment Snapshot Manager

Choose a tag to compare

@uchiha-vivek uchiha-vivek released this 07 Aug 10:26

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 diff tells 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-azure crate —
    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 version

Docker Compose:

cp .env.example .env   # fill in your Azure credentials
docker compose build
docker compose run --rm cloudctl version

See 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 under scenarios/.

Full Changelog

See CHANGELOG.md.

Contributors