Infrastructure management
You run the platform team. A new developer team is being onboarded and needs its own landing zone in the cloud — VPC, subnet, security group, the usual primitives. You want one XR per team. Reviewable in git, composable, and identical across every cloud you support.
What you're building
An XLandingZone XR (X prefix per the naming convention) that takes a team name and a region. The Composition reconciles the network primitives (VPC, subnet, security group) for that team in your cloud of choice, with sensible defaults baked in. Adding a new team is one YAML file; deleting one rolls everything back.
Suggested steps
- Read the Provider setup pattern first. Every provider in this journey follows the same three-step shape — install, ProviderConfig, MR — and you'll be wiring at least one.
ClusterProviderConfigvs per-teamProviderConfigis the decision point that matters. - Pick a cloud and walk one bucket MR end to end: provider-aws, provider-gcp, or provider-azure. The bucket is throwaway — the credentials and
ClusterProviderConfigyou set up are what you'll reuse. - On Aruba, the same shape applies once
provider-arubalands in 3XX — Aruba VPC / subnet / security-group CRDs, wired through the same install +ClusterProviderConfigflow. - Replace the bucket with the landing-zone primitives. Browse the provider's CRDs on the Crossplane Marketplace — every published version lists the kinds it ships and the fields they accept. VPC, subnet, security group, route table, IAM role — pick what your landing zone needs.
- Wrap the primitives in an XRD + Composition. Reuse the pattern from Define an Application: one XR input (team name + region), several composed MRs underneath.
- Package the landing zone as a Configuration so other clusters — staging, prod — install the same shape with one command.
Stretch goals
- Per-team
ProviderConfigreferencing per-team Secrets, so blast radius stays inside one team's cloud account. - Multi-cloud Composition: a single
LandingZoneXR that picks AWS, GCP, Azure, or Aruba based on acloudinput.function-go-templatingis the usual lever. - Surface drift on
.statuswithfunction-auto-readyso a deleted subnet shows up as a non-Ready landing zone inkubectl get.