Documentation
¶
Overview ¶
Package provider provides credential detection and provider discovery
Package provider provides factory functions for creating providers ¶
Package provider provides cloud provider abstractions and factory functions.
Package provider defines the core abstractions for multi-cloud support ¶
Package provider provides a registry for cloud providers
Index ¶
- func RegisterProvider(name string, factory ProviderFactory) error
- type BaseCredentials
- type CredentialDetector
- type CredentialSource
- type Credentials
- type DefaultFactory
- type FactoryInterface
- type Provider
- func CreateAndValidateProvider(ctx context.Context, name string, config *ProviderConfig) (Provider, error)
- func CreateProvider(name string, config *ProviderConfig) (Provider, error)
- func CreateProviders(names []string) ([]Provider, error)
- func DetectAvailableProviders(ctx context.Context) ([]Provider, error)
- func DetectProvider(ctx context.Context, name string) (Provider, error)
- func GetOrDetectProviders(ctx context.Context, names []string) ([]Provider, error)
- func GetProvidersByNames(ctx context.Context, names []string) ([]Provider, error)
- type ProviderConfig
- type ProviderFactory
- type RecommendationsClient
- type Registry
- func (r *Registry) GetAllProviders() []Provider
- func (r *Registry) GetProvider(name string) (Provider, error)
- func (r *Registry) GetProviderNames() []string
- func (r *Registry) GetProviderWithConfig(name string, config *ProviderConfig) (Provider, error)
- func (r *Registry) IsRegistered(name string) bool
- func (r *Registry) Register(name string, factory ProviderFactory) error
- func (r *Registry) Unregister(name string)
- type ServiceClient
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func RegisterProvider ¶
func RegisterProvider(name string, factory ProviderFactory) error
RegisterProvider is a convenience function to register with the global registry
Types ¶
type BaseCredentials ¶
type BaseCredentials struct {
Source CredentialSource
Valid bool
}
BaseCredentials provides a base implementation of Credentials interface
func (BaseCredentials) GetType ¶
func (c BaseCredentials) GetType() string
func (BaseCredentials) IsValid ¶
func (c BaseCredentials) IsValid() bool
type CredentialDetector ¶
type CredentialDetector struct {
// contains filtered or unexported fields
}
CredentialDetector detects available cloud credentials
func NewCredentialDetector ¶
func NewCredentialDetector() *CredentialDetector
NewCredentialDetector creates a new credential detector
type CredentialSource ¶
type CredentialSource string
CredentialSource represents the source of credentials
const ( CredentialSourceEnvironment CredentialSource = "environment" CredentialSourceFile CredentialSource = "file" CredentialSourceIAMRole CredentialSource = "iam-role" CredentialSourceMSI CredentialSource = "managed-identity" CredentialSourceADC CredentialSource = "application-default" CredentialSourceCLI CredentialSource = "cli" )
type Credentials ¶
type Credentials interface {
IsValid() bool
GetType() string // "environment", "file", "iam-role", "msi", "adc", etc.
}
Credentials represents cloud provider credentials
type DefaultFactory ¶
type DefaultFactory struct{}
DefaultFactory uses the real provider factory
func (*DefaultFactory) CreateAndValidateProvider ¶
func (f *DefaultFactory) CreateAndValidateProvider(ctx context.Context, name string, cfg *ProviderConfig) (Provider, error)
CreateAndValidateProvider creates and validates a provider using the real factory
type FactoryInterface ¶
type FactoryInterface interface {
CreateAndValidateProvider(ctx context.Context, name string, cfg *ProviderConfig) (Provider, error)
}
FactoryInterface allows creating cloud providers (enables testing)
type Provider ¶
type Provider interface {
// Identity
Name() string // "aws", "azure", "gcp"
DisplayName() string // "Amazon Web Services", "Microsoft Azure", "Google Cloud Platform"
// Authentication
IsConfigured() bool // Check if credentials are available
GetCredentials() (Credentials, error) // Get current credentials
ValidateCredentials(ctx context.Context) error // Validate credentials are working
// Accounts/Projects/Subscriptions
GetAccounts(ctx context.Context) ([]common.Account, error) // List all accessible accounts
// Regions
GetRegions(ctx context.Context) ([]common.Region, error) // List all available regions
GetDefaultRegion() string // Get default region for this provider
// Services
GetSupportedServices() []common.ServiceType // List services supported by this provider
GetServiceClient(ctx context.Context, service common.ServiceType, region string) (ServiceClient, error)
// Recommendations
GetRecommendationsClient(ctx context.Context) (RecommendationsClient, error)
}
Provider represents a cloud provider (AWS, Azure, GCP)
func CreateAndValidateProvider ¶
func CreateAndValidateProvider(ctx context.Context, name string, config *ProviderConfig) (Provider, error)
CreateAndValidateProvider creates and validates a provider
func CreateProvider ¶
func CreateProvider(name string, config *ProviderConfig) (Provider, error)
CreateProvider creates a provider instance by name. If config.ProviderOverride is set, it is returned directly without consulting the registry — this allows callers to inject a pre-built, pre-authenticated provider.
func CreateProviders ¶
CreateProviders creates multiple provider instances
func DetectAvailableProviders ¶
DetectAvailableProviders scans for configured cloud credentials It checks all registered providers and returns those with valid credentials
func DetectProvider ¶
DetectProvider detects a specific provider by name
func GetOrDetectProviders ¶
GetOrDetectProviders gets specified providers or auto-detects available ones
type ProviderConfig ¶
type ProviderConfig struct {
Name string
// Deprecated: Profile is overloaded with provider-specific semantics
// (AWS: named profile, Azure: subscription ID, GCP: project ID). Prefer
// the typed AWSProfile/AzureSubscriptionID/GCPProjectID fields below;
// when both are set, the typed field wins.
Profile string
// Typed per-provider identity fields. When set, these take precedence
// over Profile. Each provider only reads its own field and ignores the
// others, so a single ProviderConfig can be reused across providers.
AWSProfile string // AWS named profile from ~/.aws/credentials or ~/.aws/config
AzureSubscriptionID string // Azure subscription ID (UUID)
GCPProjectID string // GCP project ID (e.g. "my-project")
Region string
CredentialPath string
Endpoint string // For custom endpoints
// Optional pre-resolved credentials. Each field is typed as `any` to
// keep this module free of Azure/GCP SDK dependencies; providers
// type-assert to their expected concrete type and ignore mismatches:
// - AzureTokenCredential: github.com/Azure/azure-sdk-for-go/sdk/azcore.TokenCredential
// - GCPTokenSource: golang.org/x/oauth2.TokenSource
// When unset (nil), providers fall back to ambient credentials
// (DefaultAzureCredential / Application Default Credentials).
AWSCredentialsProvider aws.CredentialsProvider // optional: override ambient AWS credentials
AzureTokenCredential any
GCPTokenSource any
// ProviderOverride, if non-nil, is returned directly by CreateProvider without
// going through the registry. Use this to inject a pre-built, pre-authenticated
// provider when the typed credential slots above aren't expressive enough.
ProviderOverride Provider
}
ProviderConfig represents configuration for a provider
type ProviderFactory ¶
type ProviderFactory func(config *ProviderConfig) (Provider, error)
ProviderFactory is a function that creates a new provider instance
type RecommendationsClient ¶
type RecommendationsClient interface {
// Get recommendations with filtering
GetRecommendations(ctx context.Context, params *common.RecommendationParams) ([]common.Recommendation, error)
// Get recommendations for a specific service
GetRecommendationsForService(ctx context.Context, service common.ServiceType) ([]common.Recommendation, error)
// Get recommendations for all supported services
GetAllRecommendations(ctx context.Context) ([]common.Recommendation, error)
}
RecommendationsClient provides centralized recommendations across all services
type Registry ¶
type Registry struct {
// contains filtered or unexported fields
}
Registry manages registered cloud providers
func (*Registry) GetAllProviders ¶
GetAllProviders returns instances of all registered providers
func (*Registry) GetProvider ¶
GetProvider creates a provider instance by name with default config.
Returns:
- "provider %s not registered" when no factory has been registered for that name
- "provider %s factory failed: %w" when the factory itself returned an error
Callers can distinguish the two cases via the returned error message; previously both cases returned nil and callers had no way to surface the factory failure.
func (*Registry) GetProviderNames ¶
GetProviderNames returns the names of all registered providers
func (*Registry) GetProviderWithConfig ¶
func (r *Registry) GetProviderWithConfig(name string, config *ProviderConfig) (Provider, error)
GetProviderWithConfig creates a provider instance with custom config
func (*Registry) IsRegistered ¶
IsRegistered checks if a provider is registered
func (*Registry) Register ¶
func (r *Registry) Register(name string, factory ProviderFactory) error
Register registers a provider factory with the registry
func (*Registry) Unregister ¶
Unregister removes a provider from the registry
type ServiceClient ¶
type ServiceClient interface {
// Service identity
GetServiceType() common.ServiceType
GetRegion() string
// Recommendations
GetRecommendations(ctx context.Context, params *common.RecommendationParams) ([]common.Recommendation, error)
// Commitments (RI/SP/CUD/etc)
GetExistingCommitments(ctx context.Context) ([]common.Commitment, error)
PurchaseCommitment(ctx context.Context, rec common.Recommendation, opts common.PurchaseOptions) (common.PurchaseResult, error)
ValidateOffering(ctx context.Context, rec common.Recommendation) error
GetOfferingDetails(ctx context.Context, rec common.Recommendation) (*common.OfferingDetails, error)
// Resource validation
GetValidResourceTypes(ctx context.Context) ([]string, error)
}
ServiceClient handles operations for a specific service in a specific region