Azure Storage Workflow
Why This Workflow Exists
The Azure Storage account workflow is the clearest example of the portal's current product direction: developers should be able to request a governed platform capability without having to author Kubernetes manifests or understand raw Crossplane resource schemas.
This workflow turns an Azure storage request into a guided product flow:
- discover the offering in the catalog,
- submit a request with approved defaults and guardrails,
- review the provisioned result in the resources inventory,
- inspect lifecycle state in a resource details page,
- start deletion from the same portal experience.
Who Should Read This
- Product and platform engineers extending the IDP UX.
- Application developers learning how to request storage through the portal.
- Contributors validating the current Crossplane-backed workflow end to end.
Current User Journey
The implemented flow spans these routes:
/catalog/catalog/azure-storage/resources/resources/[name]
In practical terms, the journey looks like this:
- Open the
Catalogpage. - Choose
Azure Storage. - Complete the guided form.
- Submit the request.
- Move to
Resourcesto inspect what exists. - Open a specific storage account for details or deletion.
What The Form Does
The Azure Storage workflow is intentionally more than a thin wrapper around a YAML template.
It currently does all of the following:
- Loads approved resource groups from Crossplane-managed
resourcegroups. - Filters to resource groups whose
Readycondition isTrue. - Applies a default location of
westus3. - Supports multiple storage account kinds, tiers, replication modes, and advanced settings.
- Enforces Azure-specific rules such as premium-only account kinds.
- Hides or resets fields when a selected account kind does not support them.
- Submits a Crossplane managed resource through the shared resource API.
The managed resource being created is:
apiVersion: storage.azure.upbound.io/v1beta1
kind: Account
What Developers See Versus What The Platform Sees
From the developer point of view, the experience is:
- choose an offering,
- fill in a guided request,
- review lifecycle state.
From the platform point of view, the workflow ultimately creates and manages a Crossplane resource backed by the Azure provider.
That split is important. The portal should educate developers about platform behavior without forcing them to think in raw provider CRDs during ordinary use.
Local Development Modes
Offline UI Mode
Use this for most day-to-day product work:
npm install
cp .env.example .env.local
npm run dev:local
This mode enables the offline Crossplane mock path.
That means you can still:
- open the catalog,
- render the Azure Storage workflow,
- submit the form,
- navigate to resources,
- open a resource details view,
- exercise delete flows.
What you are not validating in this mode:
- real cluster reads,
- approved resource group reconciliation,
- provider configuration,
- actual Azure storage creation.
Live Cluster Mode
Use this when you need to verify the full platform path:
npm run dev
In this mode, the portal expects a working Kubernetes context and a Crossplane-enabled environment.
Live-cluster validation is the right choice when you need to confirm:
- approved resource groups are discovered correctly,
- create and delete requests reach the cluster,
- Crossplane reconciliation behaves as expected,
- Azure provider permissions and configuration are correct.
Recommended End-To-End Validation Path
When you want to educate a developer or verify the intended workflow, use this path.
1. Confirm platform prerequisites
Make sure the environment has:
- a reachable Kubernetes cluster,
- Crossplane installed,
- Azure provider configuration applied,
- at least one ready resource group that the storage workflow can target.
2. Open the portal
Either run locally or use the deployed AKS-hosted portal.
3. Create a storage account from the catalog
On /catalog/azure-storage:
- choose an approved resource group,
- keep the default safe settings if you are smoke testing,
- optionally expand advanced settings to validate form guardrails,
- submit the request.
4. Inspect the resources inventory
Open /resources and confirm the new storage account appears with a lifecycle label such as Ready or Pending.
5. Inspect resource details
Open /resources/<name> and verify:
- resource group,
- location,
- account tier,
- replication mode,
- access tier,
- public network setting,
- Azure resource ID when available.
6. Exercise deletion carefully
Use the resource details view to start deletion.
This validates that the portal can move from request creation into lifecycle operations instead of stopping at a one-way form submission.
Cluster-Side Smoke Test
If you need to compare the portal behavior with direct cluster input, you can apply the example manifest from the repository root:
sed \
-e "s/STORAGE_ACCOUNT_NAME_PLACEHOLDER/devstorealpha01/" \
-e "s/RESOURCE_GROUP_PLACEHOLDER/idp-crossplane-smoke/" \
-e "s/LOCATION_PLACEHOLDER/westus3/" \
platform/crossplane/examples/storage-account-dev.yaml | kubectl apply -f -
Then inspect the resulting resource:
kubectl get accounts.storage.azure.upbound.io
kubectl describe account.storage.azure.upbound.io/devstorealpha01
This is useful for understanding the platform behavior, but it is not the preferred everyday consumer path. The portal workflow is the product surface we want developers to adopt.
Files Contributors Should Know
If you are extending this workflow, these files are the main touchpoints:
src/app/catalog/azure-storage/page.tsxsrc/components/features/catalog/AzureStorageAccountWorkflow.tsxsrc/app/resources/page.tsxsrc/components/features/resources/StorageAccountResourceList.tsxsrc/components/features/resources/StorageAccountResourceDetails.tsxsrc/app/api/crossplane/resources/route.tsplatform/crossplane/examples/storage-account-dev.yaml
Common Development Guidance
- Use offline mode first for UI and workflow iteration.
- Switch to a live cluster only when you need real reconciliation evidence.
- Keep the portal language product-oriented even when the implementation relies on Crossplane.
- Add or update tests before changing workflow behavior.
- Treat the storage workflow as the reference pattern for future catalog-backed capabilities.
What This Workflow Teaches The Team
This feature is not just about Azure Storage.
It demonstrates the broader IDP pattern:
- product-oriented catalog entry,
- guided request form,
- platform API mediation,
- resources inventory,
- operational detail view,
- lifecycle controls.
Future workflows for databases, networking, or compute should feel consistent with this shape even when the underlying resource model differs.