Skip to content

Demo: Create demo extension with custom provisioning provider #7479

Description

@wbreza

Summary

Create a demo extension that implements a custom provisioning provider to validate the end-to-end flow. This serves as both a smoke test and a reference implementation for extension authors.

Parent Epic

Part of #7465 — Provisioning Providers in the AZD Extension Framework

Context

The codebase already has demo/test extensions. The provisioning provider demo should:

  1. Register a custom provider via WithProvisioningProvider()
  2. Implement all ProvisioningProvider interface methods
  3. Demonstrate progress reporting during Deploy/Preview/Destroy
  4. Work end-to-end with azd provision command

Detailed Requirements

Extension Configuration (extension.yaml)

name: microsoft.azd.demo  # or microsoft.azd.scripts
version: 0.1.0
capabilities:
  - provisioning-provider

Provider Implementation

A simple echo/script-based provider that:

  • Initialize() — logs project path and options, validates config
  • State() — returns mock outputs and resources
  • Deploy() — performs mock deployment with 3-5 progress messages, returns mock outputs
  • Preview() — returns mock preview with sample change entries
  • Destroy() — performs mock cleanup with progress, returns invalidated keys
  • EnsureEnv() — no-op or validates environment
  • Parameters() — returns sample parameters

ExtensionHost Setup

host.WithProvisioningProvider("demo", func() azdext.ProvisioningProvider {
    return NewDemoProvider(client)
}).Run(ctx)

Sample azure.yaml

name: demo-project
infra:
  provider: demo
  config:
    message: "Hello from demo provider"

Acceptance Criteria

  • Extension directory with extension.yaml declaring provisioning-provider
  • Go implementation of ProvisioningProvider interface
  • Initialize() accepts and logs project path and options
  • Deploy() sends progress messages and returns mock result
  • State() returns mock deployment state
  • Destroy() sends progress and returns invalidated keys
  • Parameters() returns sample parameters
  • Preview() returns mock preview changes
  • EnsureEnv() works without error
  • ExtensionHost configured with WithProvisioningProvider("demo", factory)
  • Sample azure.yaml with infra: { provider: demo }
  • End-to-end: azd provision → starts extension → calls provider → returns results

Dependencies

Files

  • Create: Demo extension directory with extension.yaml, main.go, provider implementation

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions