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

Fields

No fields configured for issues without a type.

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions