v2.5.0
·
815 commits
to development
since this release
Release Notes — v2.5.0
This release adds two more AWS services, ships cloudemu's redesigned logo, makes the built-in Kubernetes cluster work smoothly inside Docker, and rewrites the docs so anyone — in any language, not just Go — can see what cloudemu really is: a local cloud you run and point your apps at.
🎨 New look
cloudemu has a brand-new logo — a cloud paired with a terminal prompt and the tagline "the cloud, in memory." It's transparent and theme-adaptive, so it looks crisp on both light and dark backgrounds across GitHub, the docs, and pkg.go.dev.
✨ Features
Two more AWS services
Point the real AWS SDK (or the aws CLI) at cloudemu and these respond just like the real thing — only in memory, with no account and no bill.
- GuardDuty (threat detection) — manage detectors, threat-intelligence sets, filters, and findings entirely in memory. Full coverage of all 87 operations, so
aws-sdk-go-v2/service/guarddutyand theaws guarddutyCLI work by only changing the endpoint. - MSK — Managed Streaming for Apache Kafka — create and manage Kafka clusters, configurations, and connectors. Full coverage of all 59 operations for
aws-sdk-go-v2/service/kafkaand theaws kafkaCLI.
🔧 Enhancements
Clearer documentation
- The README now speaks to everyone. It leads with what cloudemu actually is — a runnable local cloud (via Docker or a single binary) that you point any app, in any language, at — rather than a Go-testing-only tool. New copy-paste Docker quickstart, a "three ways to run it" overview, and a proper Contributing & community section for newcomers.
Cleaner internals
- OCI tidy-up. Oracle Cloud (OCI)-only capabilities moved out of the shared service packages, keeping each provider's code self-contained and easier to extend.
🐛 Fixes
Kubernetes
- Works inside Docker now. When you run the cloudemu container, its built-in Kubernetes cluster is reachable from your machine with
kubectland client libraries — previously it advertised an address that couldn't be dialed from outside the container. kubectl apply --server-sidefor core resources. Server-side apply, "create the object if it doesn't exist yet," and finalizer-aware deletes now work for ConfigMaps, Secrets, Services, and Deployments — so real tools and operators behave the way they would on a genuine cluster.
Technical Details
New AWS SDK-compat services (#388, #389)
- #388 GuardDuty — REST-JSON (
awsRestjson1), path + HTTP-method routing, no version prefix; four-layer architecture (services/guardduty/driver→providers/aws/guardduty→server/aws/guardduty→ registration). 87 operations: detectors + child resources (IP sets, threat-intel/entity/trusted-entity sets, filters), findings, and members, with atomic creates, typed exceptions, and deep-copied reads. Real-SDK roundtrip tests. - #389 MSK (Kafka) — REST-JSON under three version prefixes (
/v1/,/api/v2/,/replication/v1/); same four-layer architecture. 59 operations: clusters (v1 + v2, atomic name claim withConflictException), configurations, and connectors, with deterministicClock/idgenand real-SDK roundtrip tests.
Kubernetes data plane (#390, #400)
- #390 typed server-side apply for core kinds —
application/apply-patch+yamlnow runs through real field-ownership (managedFields) + conflict detection instead of a plain RFC-7396 merge; apply-to-missing now creates (no more 404 on a fresh cluster); typed deletes honormetadata.finalizers(Terminating instead of hard delete) for ConfigMap, Secret, Service, and Deployment. Verified against realkubectl. - #400 Docker-reachable Kubernetes endpoint — when
--hostbinds all interfaces (0.0.0.0, as the Docker image does), the data plane now advertises a routable host (default127.0.0.1) with matching cert SANs, so an EKS/AKS/GKE kubeconfig from the container works with hostkubectl/client-go. New--advertise-hostflag for reaching it from another machine; OCI port (4571) declared for opt-in use.
Brand, docs & internals (#396, #397, #401, #393)
- #396 / #397 redesigned, transparent, theme-adaptive logo (light/dark PNG exports with type baked in, served via a
<picture>block). - #401 README/metadata reframe — any-language, three-modes-first framing; Docker quickstart; fixed broken snippets; Contributing/community footer; aligned
llms.txt/AGENTS.md/doc.go/docs/README.mdopeners. - #393 moved OCI-only capabilities out of shared driver packages.