Skip to content

ExtensionHost: Add WithProvisioningProvider fluent API #7472

Description

@wbreza

Summary

Add provisioning provider support to ExtensionHost in pkg/azdext/extension_host.go. Implement the WithProvisioningProvider(name, factory) fluent API and integrate the provisioning manager into the Run() lifecycle (init, receive, ready, register phases).

Parent Epic

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

Context

ExtensionHost is the main orchestration point for extensions. It manages the lifecycle of all capability managers (service targets, framework services, events). Adding provisioning provider support requires:

  1. A new fluent registration method: WithProvisioningProvider()
  2. A ProvisioningManager initialized in initManagers()
  3. Integration into the Run() lifecycle: receivers, readiness, and parallel registration

Existing Pattern

func (er *ExtensionHost) WithServiceTarget(host string, factory ServiceTargetFactory) *ExtensionHost {
    er.serviceTargets = append(er.serviceTargets, ServiceTargetRegistration{Host: host, Factory: factory})
    return er
}

Detailed Requirements

New Types

type ProvisioningProviderRegistration struct {
    Name    string
    Factory ProvisioningProviderFactory
}

New Fields on ExtensionHost

  • provisioningProviders []ProvisioningProviderRegistration
  • provisioningManager *ProvisioningManager

WithProvisioningProvider Method

func (er *ExtensionHost) WithProvisioningProvider(
    name string, factory ProvisioningProviderFactory,
) *ExtensionHost {
    er.provisioningProviders = append(er.provisioningProviders, ProvisioningProviderRegistration{
        Name: name, Factory: factory,
    })
    return er
}

Run() Integration

  1. initManagers(): if len(provisioningProviders) > 0, create ProvisioningManager
  2. Add provisioning manager to receivers list (for Receive() and Ready() goroutines)
  3. Register provisioning providers in the parallel registration phase (alongside service targets and framework services)
  4. hasProvisioningProviders flag for conditional logic

Acceptance Criteria

  • ProvisioningProviderRegistration struct defined
  • provisioningProviders and provisioningManager fields on ExtensionHost
  • WithProvisioningProvider() fluent method implemented
  • initManagers() creates ProvisioningManager when providers registered
  • Run() adds manager to receivers for Receive() and Ready()
  • Run() registers providers in parallel registration phase
  • Works alongside existing service target and framework service registrations
  • Provisioning manager lifecycle matches service target manager lifecycle

Dependencies

Files

  • Modify: pkg/azdext/extension_host.go

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