Description
Extend the existing auto-install extension feature (cmd/auto_install.go) to support provisioning providers, matching the pattern already established for service targets.
Parent Epic: #7465
Background
The auto-install feature currently handles UnsupportedServiceHostError for service targets:
- Detects unknown
host values in azure.yaml services
- Queries the extension registry (
extensionManager.FindExtensions()) with ServiceTargetProviderCapability + provider name
- Prompts the user to install the matching extension
- Retries the command after installation
This same flow should be implemented for provisioning providers when infra.provider specifies an unknown provider name.
Implementation Plan
1. Add ProvisioningProviderType constant
File: pkg/extensions/registry.go
Add to the ProviderType constants:
ProvisioningProviderType ProviderType = "provisioning-provider"
2. Create UnsupportedProvisioningProviderError type
File: pkg/infra/provisioning/manager.go or new file
Similar to project.UnsupportedServiceHostError:
type UnsupportedProvisioningProviderError struct {
Provider string
ErrorMessage string
}
3. Update provisioning.Manager.newProvider() to return typed error
File: pkg/infra/provisioning/manager.go
When serviceLocator.ResolveNamed() fails with ioc.ErrResolveInstance, return UnsupportedProvisioningProviderError instead of a generic error.
4. Add provisioning provider handler in ExecuteWithAutoInstall()
File: cmd/auto_install.go
Add a new error handler block (parallel to the UnsupportedServiceHostError handler) that:
- Catches
UnsupportedProvisioningProviderError
- Calls
extensionManager.FindExtensions() with ProvisioningProviderCapability + provider name
- Prompts user to install
- Retries the command
5. Update demo extension registry metadata
Ensure the demo extension's registry entry includes provider metadata:
{
"providers": [{
"name": "demo",
"type": "provisioning-provider",
"description": "Demo provisioning provider"
}]
}
Acceptance Criteria
References
- Existing auto-install implementation:
cmd/auto_install.go (ExecuteWithAutoInstall())
- Service target error type:
pkg/project/service_manager.go (UnsupportedServiceHostError)
- Extension filtering:
pkg/extensions/manager.go (FindExtensions(), createExtensionFilter())
- Provider metadata:
pkg/extensions/registry.go (Provider, ProviderType)
- Provisioning provider resolution:
pkg/infra/provisioning/manager.go (newProvider())
Description
Extend the existing auto-install extension feature (
cmd/auto_install.go) to support provisioning providers, matching the pattern already established for service targets.Parent Epic: #7465
Background
The auto-install feature currently handles
UnsupportedServiceHostErrorfor service targets:hostvalues in azure.yaml servicesextensionManager.FindExtensions()) withServiceTargetProviderCapability+ provider nameThis same flow should be implemented for provisioning providers when
infra.providerspecifies an unknown provider name.Implementation Plan
1. Add
ProvisioningProviderTypeconstantFile:
pkg/extensions/registry.goAdd to the
ProviderTypeconstants:2. Create
UnsupportedProvisioningProviderErrortypeFile:
pkg/infra/provisioning/manager.goor new fileSimilar to
project.UnsupportedServiceHostError:3. Update
provisioning.Manager.newProvider()to return typed errorFile:
pkg/infra/provisioning/manager.goWhen
serviceLocator.ResolveNamed()fails withioc.ErrResolveInstance, returnUnsupportedProvisioningProviderErrorinstead of a generic error.4. Add provisioning provider handler in
ExecuteWithAutoInstall()File:
cmd/auto_install.goAdd a new error handler block (parallel to the
UnsupportedServiceHostErrorhandler) that:UnsupportedProvisioningProviderErrorextensionManager.FindExtensions()withProvisioningProviderCapability+ provider name5. Update demo extension registry metadata
Ensure the demo extension's registry entry includes provider metadata:
{ "providers": [{ "name": "demo", "type": "provisioning-provider", "description": "Demo provisioning provider" }] }Acceptance Criteria
ProvisioningProviderTypeconstant added to registryUnsupportedProvisioningProviderErrortype created withProviderfieldprovisioning.Manager.newProvider()returns typed error when provider not foundExecuteWithAutoInstall()handlesUnsupportedProvisioningProviderErrorProvisioningProviderCapability+ provider nameReferences
cmd/auto_install.go(ExecuteWithAutoInstall())pkg/project/service_manager.go(UnsupportedServiceHostError)pkg/extensions/manager.go(FindExtensions(),createExtensionFilter())pkg/extensions/registry.go(Provider,ProviderType)pkg/infra/provisioning/manager.go(newProvider())