Documentation
¶
Index ¶
- Constants
- Variables
- func IsServiceBindingWellKnownName(name string) bool
- func Prepare(ctx context.Context, application string, requests []Request) (*Execution, Result, error)
- func RequireIntegrationContract(descriptor IntegrationDescriptor) error
- func ValidateProviderPlacement(descriptor IntegrationDescriptor, placement ProviderPlacement) error
- func ValidateServiceBindingName(name string) error
- type AuthorizationMetadata
- type Binding
- type CapabilitySpecification
- type ConformanceCheck
- type ConformanceReport
- type ConformanceStatus
- type CredentialReference
- type Diagnostic
- type Driver
- type DriverAdapter
- func (a *DriverAdapter) Bind(ctx context.Context, resource Resource, binding Binding) error
- func (a *DriverAdapter) Descriptor() Provider
- func (a *DriverAdapter) IntegrationDescriptor() IntegrationDescriptor
- func (a *DriverAdapter) Preflight(ctx context.Context, resource Resource, binding Binding) error
- func (a *DriverAdapter) Provision(ctx context.Context, resource Resource, binding Binding) error
- func (a *DriverAdapter) Verify(ctx context.Context, resource Resource, binding Binding) error
- type Execution
- type HTTPExposureBinding
- type IdentityBinding
- type IntegrationDescriptor
- type IntegrationDriver
- type Kind
- type LifecycleAction
- type LifecycleOperation
- type LogsBinding
- type MetricsBinding
- type OTLPTelemetryBinding
- type ObjectStorageS3Binding
- type ObservabilityRealizationMode
- type ObservabilitySignalKind
- type ObservabilitySupportStatus
- type ObservabilityVerificationMode
- type OptionalLifecycleSupport
- type Phase
- type Plan
- type PlanItem
- type Provider
- type ProviderBinding
- type ProviderInstance
- type ProviderInterface
- type ProviderInterfaceClass
- type ProviderKind
- type ProviderObservability
- type ProviderObservabilitySignal
- type ProviderOperation
- type ProviderOperationObservation
- type ProviderOperationObserver
- type ProviderOwnership
- type ProviderPlacement
- type ProviderScope
- type ReconciliationDriver
- type ReconciliationResult
- type Registry
- func (r Registry) ApplicationLifecycle(application string, operation LifecycleOperation) ([]LifecycleAction, error)
- func (r *Registry) Bind(resource Resource, providerInstanceID string) error
- func (r *Registry) BindDeployment(resource Resource, environment, providerInstanceID string) error
- func (r *Registry) Register(instance ProviderInstance) error
- func (r *Registry) ReleaseApplication(application string)
- func (r *Registry) ReleaseApplicationDeployment(application, environment string)
- func (r *Registry) ReleaseManagedApplication(application string)
- func (r *Registry) ReleaseManagedDeployment(application, environment string)
- func (r Registry) Resolve(provider ProviderKind, scope ProviderScope, application, externalID string) (ProviderInstance, error)
- func (r Registry) ResolvePlacement(provider ProviderKind, placement ProviderPlacement, application string) (ProviderInstance, error)
- func (r Registry) Validate() error
- type RegistryStore
- type Request
- type Requirement
- type Resource
- type Result
- type SecretReference
- type SecureBinding
- type SecurityLifecycleSupport
- type ServiceKind
- type Severity
- type SpecificationID
- type SpecificationVersion
- type Status
- type StepResult
- type TrustMaterialReference
- type WorkloadIdentityBinding
Constants ¶
const ( ObservabilityMetrics ObservabilitySignalKind = "metrics" ObservabilityLogs ObservabilitySignalKind = "logs" ObservabilityTraces ObservabilitySignalKind = "traces" ObservabilitySupported ObservabilitySupportStatus = "supported" ObservabilityUnsupported ObservabilitySupportStatus = "unsupported" ObservabilityNotApplicable ObservabilitySupportStatus = "not-applicable" ObservabilityRequiresAdapter ObservabilitySupportStatus = "requires-adapter" ObservabilityNative ObservabilityRealizationMode = "native" ObservabilityRuntime ObservabilityRealizationMode = "runtime" ObservabilityAdapter ObservabilityRealizationMode = "adapter" ObservabilityInteraction ObservabilityRealizationMode = "interaction" ObservabilityCombined ObservabilityRealizationMode = "combined" ObservabilityVerifyEndpoint ObservabilityVerificationMode = "endpoint" ObservabilityVerifyBackend ObservabilityVerificationMode = "backend-query" ObservabilityVerifySpan ObservabilityVerificationMode = "span-query" ObservabilityVerifyNone ObservabilityVerificationMode = "none" )
const ( ServiceBindingType = "type" ServiceBindingProvider = "provider" ServiceBindingHost = "host" ServiceBindingPort = "port" ServiceBindingURI = "uri" ServiceBindingUsername = "username" ServiceBindingPassword = "password" ServiceBindingCertificates = "certificates" ServiceBindingPrivateKey = "private-key" )
Service Binding Specification 1.1 well-known entry names. Use these names whenever the standard semantics match.
const ProviderProtocolV1 = "baseharbor.provider/v1"
const RegistryVersion = 1
Variables ¶
var ( PostgreSQL = Provider{Kind: ProviderPostgreSQL, Capabilities: []Kind{SQL}} Valkey = Provider{Kind: ProviderValkey, Capabilities: []Kind{KeyValue}} OpenBao = Provider{Kind: ProviderOpenBao, Capabilities: []Kind{Secrets}} Caddy = Provider{Kind: ProviderCaddy, Capabilities: []Kind{ExposureHTTP}} SeaweedFS = Provider{Kind: ProviderSeaweedFS, Capabilities: []Kind{ObjectStorageS3}} OTelCollector = Provider{Kind: ProviderOTelCollector, Capabilities: []Kind{TelemetryOTLP}} ExternalOTLP = Provider{Kind: ProviderExternalOTLP, Capabilities: []Kind{TelemetryOTLP}} Prometheus = Provider{Kind: ProviderPrometheus, Capabilities: []Kind{Metrics}} Loki = Provider{Kind: ProviderLoki, Capabilities: []Kind{Logs}} Tempo = Provider{Kind: ProviderTempo, Capabilities: []Kind{Traces}} Keycloak = Provider{Kind: ProviderKeycloak, Capabilities: []Kind{Identity}} ExternalOIDC = Provider{Kind: ProviderExternalOIDC, Capabilities: []Kind{Identity}} )
Reference providers describe the capability products already used by the current Compose implementation. They are descriptors only: existing provisioning remains authoritative while the shared capability and provider registry layers describe portable intent, placement and ownership.
var ( PostgreSQLIntegration = IntegrationDescriptor{ ID: "baseharbor/postgresql", Version: "0.1.0", Protocol: ProviderProtocolV1, Provider: PostgreSQL, Services: []ServiceKind{ServiceSQL}, Capabilities: []SpecificationID{SQLV1.ID}, SupportedScopes: []ProviderScope{ScopeShared, ScopeApplication}, Interfaces: []ProviderInterface{{Name: "sql", Class: InterfaceApplication, Protocol: "postgresql", Intrinsic: true}, {Name: "management-ui", Class: InterfaceAdministration, Protocol: "https", Optional: true}}, Observability: ProviderObservability{Signals: []ProviderObservabilitySignal{ {Name: "metrics", Kind: ObservabilityMetrics, Status: ObservabilityRequiresAdapter, Mode: ObservabilityAdapter, Protocol: "openmetrics", Verification: ObservabilityVerifyNone}, {Name: "logs", Kind: ObservabilityLogs, Status: ObservabilitySupported, Mode: ObservabilityRuntime, Protocol: "stdout-stderr", SemanticConvention: "baseharbor.runtime.logs", Verification: ObservabilityVerifyBackend}, {Name: "traces", Kind: ObservabilityTraces, Status: ObservabilitySupported, Mode: ObservabilityInteraction, Protocol: "interaction", SemanticConvention: "database", Verification: ObservabilityVerifySpan}, }}, } ValkeyIntegration = IntegrationDescriptor{ ID: "baseharbor/valkey", Version: "0.1.0", Protocol: ProviderProtocolV1, Provider: Valkey, Services: []ServiceKind{ServiceCache}, Capabilities: []SpecificationID{KeyValueV1.ID}, SupportedScopes: []ProviderScope{ScopeShared, ScopeApplication}, Interfaces: []ProviderInterface{{Name: "cache", Class: InterfaceApplication, Protocol: "resp", Intrinsic: true}, {Name: "management-ui", Class: InterfaceAdministration, Protocol: "https", Optional: true}}, Observability: ProviderObservability{Signals: []ProviderObservabilitySignal{ {Name: "metrics", Kind: ObservabilityMetrics, Status: ObservabilityRequiresAdapter, Mode: ObservabilityAdapter, Protocol: "openmetrics", Verification: ObservabilityVerifyNone}, {Name: "logs", Kind: ObservabilityLogs, Status: ObservabilitySupported, Mode: ObservabilityRuntime, Protocol: "stdout-stderr", SemanticConvention: "baseharbor.runtime.logs", Verification: ObservabilityVerifyBackend}, {Name: "traces", Kind: ObservabilityTraces, Status: ObservabilitySupported, Mode: ObservabilityInteraction, Protocol: "interaction", SemanticConvention: "database", Verification: ObservabilityVerifySpan}, }}, } OpenBaoIntegration = IntegrationDescriptor{ ID: "baseharbor/openbao", Version: "0.1.0", Protocol: ProviderProtocolV1, Provider: OpenBao, Services: []ServiceKind{ServiceSecrets}, Capabilities: []SpecificationID{SecretsV1.ID}, SupportedScopes: []ProviderScope{ScopeShared}, Interfaces: []ProviderInterface{{Name: "api", Class: InterfaceManagement, Protocol: "https", Intrinsic: true}, {Name: "management-ui", Class: InterfaceAdministration, Protocol: "https", Optional: true}}, Optional: OptionalLifecycleSupport{Status: true, Update: true, Backup: true, Restore: true, Destroy: true}, Observability: ProviderObservability{Signals: []ProviderObservabilitySignal{ {Name: "metrics", Kind: ObservabilityMetrics, Status: ObservabilityUnsupported, Verification: ObservabilityVerifyNone}, {Name: "logs", Kind: ObservabilityLogs, Status: ObservabilityUnsupported, Verification: ObservabilityVerifyNone}, {Name: "traces", Kind: ObservabilityTraces, Status: ObservabilityUnsupported, Verification: ObservabilityVerifyNone}, }}, } CaddyIntegration = IntegrationDescriptor{ ID: "baseharbor/caddy", Version: "0.1.0", Protocol: ProviderProtocolV1, Provider: Caddy, Services: []ServiceKind{ServiceExposure}, Capabilities: []SpecificationID{ExposureHTTPV1.ID}, SupportedScopes: []ProviderScope{ScopeApplication}, Interfaces: []ProviderInterface{{Name: "ingress", Class: InterfaceApplication, Protocol: "http", Intrinsic: true}}, Optional: OptionalLifecycleSupport{Status: true, Update: true, Destroy: true}, Observability: ProviderObservability{Signals: []ProviderObservabilitySignal{ {Name: "metrics", Kind: ObservabilityMetrics, Status: ObservabilityUnsupported, Verification: ObservabilityVerifyNone}, {Name: "logs", Kind: ObservabilityLogs, Status: ObservabilityUnsupported, Verification: ObservabilityVerifyNone}, {Name: "traces", Kind: ObservabilityTraces, Status: ObservabilityUnsupported, Verification: ObservabilityVerifyNone}, }}, } SeaweedFSIntegration = IntegrationDescriptor{ ID: "baseharbor/seaweedfs", Version: "0.1.0", Protocol: ProviderProtocolV1, Provider: SeaweedFS, Services: []ServiceKind{ServiceObjectStorage}, Capabilities: []SpecificationID{ObjectStorageS3V1.ID}, SupportedScopes: []ProviderScope{ScopeShared}, Interfaces: []ProviderInterface{{Name: "s3", Class: InterfaceApplication, Protocol: "s3", Intrinsic: true}, {Name: "management-ui", Class: InterfaceAdministration, Protocol: "https", Optional: true}}, Optional: OptionalLifecycleSupport{Status: true, Update: true, Destroy: true}, Observability: ProviderObservability{Signals: []ProviderObservabilitySignal{ {Name: "metrics", Kind: ObservabilityMetrics, Status: ObservabilityUnsupported, Verification: ObservabilityVerifyNone}, {Name: "logs", Kind: ObservabilityLogs, Status: ObservabilityUnsupported, Verification: ObservabilityVerifyNone}, {Name: "traces", Kind: ObservabilityTraces, Status: ObservabilityUnsupported, Verification: ObservabilityVerifyNone}, }}, } OTelCollectorIntegration = IntegrationDescriptor{ ID: "baseharbor/opentelemetry-collector", Version: "0.1.0", Protocol: ProviderProtocolV1, Provider: OTelCollector, Services: []ServiceKind{ServiceObservability}, Capabilities: []SpecificationID{TelemetryOTLPV1.ID}, SupportedScopes: []ProviderScope{ScopeShared}, Interfaces: []ProviderInterface{{Name: "otlp", Class: InterfaceApplication, Protocol: "otlp", Intrinsic: true}, {Name: "health", Class: InterfaceHealth, Protocol: "http", Intrinsic: true}}, Optional: OptionalLifecycleSupport{Status: true, Update: true, Destroy: true}, Observability: ProviderObservability{Signals: []ProviderObservabilitySignal{ {Name: "collector-metrics", Kind: ObservabilityMetrics, Status: ObservabilitySupported, Mode: ObservabilityNative, Protocol: "openmetrics", Verification: ObservabilityVerifyBackend, Port: 8888, Path: "/metrics"}, {Name: "collector-logs", Kind: ObservabilityLogs, Status: ObservabilityUnsupported, Verification: ObservabilityVerifyNone}, {Name: "collector-traces", Kind: ObservabilityTraces, Status: ObservabilityUnsupported, Verification: ObservabilityVerifyNone}, }}, } PrometheusIntegration = IntegrationDescriptor{ ID: "baseharbor/prometheus", Version: "0.1.0", Protocol: ProviderProtocolV1, Provider: Prometheus, Services: []ServiceKind{ServiceObservability}, Capabilities: []SpecificationID{MetricsV1.ID}, SupportedScopes: []ProviderScope{ScopeShared, ScopeApplication}, Interfaces: []ProviderInterface{{Name: "query-api", Class: InterfaceObservability, Protocol: "https", Intrinsic: true}, {Name: "management-ui", Class: InterfaceObservability, Protocol: "https", Optional: true}}, Optional: OptionalLifecycleSupport{Status: true, Update: true, Destroy: true}, Observability: ProviderObservability{Signals: []ProviderObservabilitySignal{ {Name: "prometheus-metrics", Kind: ObservabilityMetrics, Status: ObservabilityUnsupported, Verification: ObservabilityVerifyNone}, {Name: "prometheus-logs", Kind: ObservabilityLogs, Status: ObservabilityUnsupported, Verification: ObservabilityVerifyNone}, {Name: "prometheus-traces", Kind: ObservabilityTraces, Status: ObservabilityNotApplicable, Verification: ObservabilityVerifyNone}, }}, } LokiIntegration = IntegrationDescriptor{ ID: "baseharbor/loki", Version: "0.1.0", Protocol: ProviderProtocolV1, Provider: Loki, Services: []ServiceKind{ServiceObservability}, Capabilities: []SpecificationID{LogsV1.ID}, SupportedScopes: []ProviderScope{ScopeShared, ScopeApplication}, Interfaces: []ProviderInterface{{Name: "query-api", Class: InterfaceObservability, Protocol: "https", Intrinsic: true}}, Optional: OptionalLifecycleSupport{Status: true, Update: true, Destroy: true}, Observability: ProviderObservability{Signals: []ProviderObservabilitySignal{ {Name: "loki-metrics", Kind: ObservabilityMetrics, Status: ObservabilitySupported, Mode: ObservabilityNative, Protocol: "openmetrics", Verification: ObservabilityVerifyBackend, Port: 3100, Path: "/metrics"}, {Name: "loki-logs", Kind: ObservabilityLogs, Status: ObservabilityUnsupported, Verification: ObservabilityVerifyNone}, {Name: "loki-traces", Kind: ObservabilityTraces, Status: ObservabilityNotApplicable, Verification: ObservabilityVerifyNone}, }}, } TempoIntegration = IntegrationDescriptor{ ID: "baseharbor/tempo", Version: "0.1.0", Protocol: ProviderProtocolV1, Provider: Tempo, Services: []ServiceKind{ServiceObservability}, Capabilities: []SpecificationID{TracesV1.ID}, SupportedScopes: []ProviderScope{ScopeShared}, Interfaces: []ProviderInterface{{Name: "query-api", Class: InterfaceObservability, Protocol: "https", Intrinsic: true}}, Optional: OptionalLifecycleSupport{Status: true, Update: true, Destroy: true}, Observability: ProviderObservability{Signals: []ProviderObservabilitySignal{ {Name: "tempo-metrics", Kind: ObservabilityMetrics, Status: ObservabilitySupported, Mode: ObservabilityNative, Protocol: "openmetrics", Verification: ObservabilityVerifyBackend, Port: 3200, Path: "/metrics"}, {Name: "tempo-logs", Kind: ObservabilityLogs, Status: ObservabilityUnsupported, Verification: ObservabilityVerifyNone}, {Name: "tempo-traces", Kind: ObservabilityTraces, Status: ObservabilityNotApplicable, Verification: ObservabilityVerifyNone}, }}, } KeycloakIntegration = IntegrationDescriptor{ ID: "baseharbor/keycloak", Version: "0.1.0", Protocol: ProviderProtocolV1, Provider: Keycloak, Services: []ServiceKind{ServiceIdentity}, Capabilities: []SpecificationID{IdentityOIDCV1.ID}, SupportedScopes: []ProviderScope{ScopeShared, ScopeApplication}, Interfaces: []ProviderInterface{{Name: "oidc", Class: InterfaceApplication, Protocol: "oidc", Intrinsic: true}, {Name: "login-account", Class: InterfaceUserFacing, Protocol: "https", Intrinsic: true}, {Name: "admin-api", Class: InterfaceManagement, Protocol: "https", Intrinsic: true}, {Name: "management-ui", Class: InterfaceAdministration, Protocol: "https", Optional: true}}, Optional: OptionalLifecycleSupport{Status: true, Update: true, Destroy: true}, Observability: ProviderObservability{Signals: []ProviderObservabilitySignal{ {Name: "keycloak-metrics", Kind: ObservabilityMetrics, Status: ObservabilitySupported, Mode: ObservabilityNative, Protocol: "openmetrics", Verification: ObservabilityVerifyBackend, Port: 9000, Path: "/metrics"}, {Name: "keycloak-logs", Kind: ObservabilityLogs, Status: ObservabilitySupported, Mode: ObservabilityRuntime, Protocol: "stdout-stderr", SemanticConvention: "baseharbor.runtime.logs", Verification: ObservabilityVerifyBackend}, {Name: "keycloak-traces", Kind: ObservabilityTraces, Status: ObservabilityUnsupported, Verification: ObservabilityVerifyNone}, }}, } ExternalOIDCIntegration = IntegrationDescriptor{ ID: "baseharbor/external-oidc", Version: "0.1.0", Protocol: ProviderProtocolV1, Provider: ExternalOIDC, Services: []ServiceKind{ServiceIdentity}, Capabilities: []SpecificationID{IdentityOIDCV1.ID}, SupportedScopes: []ProviderScope{ScopeExternal}, Interfaces: []ProviderInterface{{Name: "oidc", Class: InterfaceApplication, Protocol: "oidc", Intrinsic: true}, {Name: "login-account", Class: InterfaceUserFacing, Protocol: "https", Intrinsic: true}}, } ExternalOTLPIntegration = IntegrationDescriptor{ ID: "baseharbor/external-otlp", Version: "0.1.0", Protocol: ProviderProtocolV1, Provider: ExternalOTLP, Services: []ServiceKind{ServiceObservability}, Capabilities: []SpecificationID{TelemetryOTLPV1.ID}, SupportedScopes: []ProviderScope{ScopeExternal}, } )
var ( SQLV1 = CapabilitySpecification{ID: "database.sql/v1", Kind: SQL, Version: SpecificationV1} KeyValueV1 = CapabilitySpecification{ID: "cache.key-value/v1", Kind: KeyValue, Version: SpecificationV1} SecretsV1 = CapabilitySpecification{ID: "secrets/v1", Kind: Secrets, Version: SpecificationV1} ExposureHTTPV1 = CapabilitySpecification{ID: "exposure.http/v1", Kind: ExposureHTTP, Version: SpecificationV1} ObjectStorageS3V1 = CapabilitySpecification{ID: "object-storage.s3/v1", Kind: ObjectStorageS3, Version: SpecificationV1} TelemetryOTLPV1 = CapabilitySpecification{ID: "telemetry.otlp/v1", Kind: TelemetryOTLP, Version: SpecificationV1} MetricsV1 = CapabilitySpecification{ID: "metrics/v1", Kind: Metrics, Version: SpecificationV1} LogsV1 = CapabilitySpecification{ID: "logs/v1", Kind: Logs, Version: SpecificationV1} TracesV1 = CapabilitySpecification{ID: "traces/v1", Kind: Traces, Version: SpecificationV1} IdentityOIDCV1 = CapabilitySpecification{ID: "identity.oidc/v1", Kind: Identity, Version: SpecificationV1} )
Functions ¶
func IsServiceBindingWellKnownName ¶ added in v0.4.15
func RequireIntegrationContract ¶ added in v0.4.3
func RequireIntegrationContract(descriptor IntegrationDescriptor) error
func ValidateProviderPlacement ¶ added in v0.4.8
func ValidateProviderPlacement(descriptor IntegrationDescriptor, placement ProviderPlacement) error
func ValidateServiceBindingName ¶ added in v0.4.15
ValidateServiceBindingName prevents BaseHarbor from creating aliases for Service Binding 1.1 well-known fields. Provider-specific or capability-specific extensions remain allowed when they use a namespaced name.
Types ¶
type AuthorizationMetadata ¶ added in v0.4.5
type Binding ¶
type Binding struct {
Resource Resource `json:"resource"`
Workload string `json:"workload"`
HTTPExposure *HTTPExposureBinding `json:"http_exposure,omitempty"`
ObjectStorageS3 *ObjectStorageS3Binding `json:"object_storage_s3,omitempty"`
TelemetryOTLP *OTLPTelemetryBinding `json:"telemetry_otlp,omitempty"`
Metrics *MetricsBinding `json:"metrics,omitempty"`
Logs *LogsBinding `json:"logs,omitempty"`
Identity *IdentityBinding `json:"identity,omitempty"`
Security *SecureBinding `json:"security,omitempty"`
}
type CapabilitySpecification ¶ added in v0.4.3
type CapabilitySpecification struct {
ID SpecificationID `json:"id"`
Kind Kind `json:"kind"`
Version SpecificationVersion `json:"version"`
}
func ParseSpecificationID ¶ added in v0.4.3
func ParseSpecificationID(id SpecificationID) (CapabilitySpecification, error)
func SpecificationForKind ¶ added in v0.4.3
func SpecificationForKind(kind Kind) (CapabilitySpecification, error)
type ConformanceCheck ¶ added in v0.4.3
type ConformanceCheck struct {
Name string `json:"name"`
Status ConformanceStatus `json:"status"`
Message string `json:"message,omitempty"`
}
type ConformanceReport ¶ added in v0.4.3
type ConformanceReport struct {
ProviderID string `json:"provider_id"`
ProviderVersion string `json:"provider_version"`
Protocol string `json:"protocol"`
Provider ProviderKind `json:"provider"`
Services []ServiceKind `json:"services,omitempty"`
Status ConformanceStatus `json:"status"`
Checks []ConformanceCheck `json:"checks"`
}
func CheckIntegrationContract ¶ added in v0.4.3
func CheckIntegrationContract(descriptor IntegrationDescriptor) ConformanceReport
CheckIntegrationContract performs transport-independent static conformance. Runtime capability conformance remains provider/capability specific and will build on this report as reference providers are added.
type ConformanceStatus ¶ added in v0.4.3
type ConformanceStatus string
const ( ConformancePass ConformanceStatus = "pass" ConformanceFail ConformanceStatus = "fail" )
type CredentialReference ¶ added in v0.4.5
type Diagnostic ¶
type DriverAdapter ¶ added in v0.4.3
type DriverAdapter struct {
// contains filtered or unexported fields
}
DriverAdapter lets current built-in drivers participate in the integration contract without changing their implementation or introducing a second lifecycle engine.
func NewDriverAdapter ¶ added in v0.4.3
func NewDriverAdapter(driver Driver, descriptor IntegrationDescriptor) (*DriverAdapter, error)
func (*DriverAdapter) Descriptor ¶ added in v0.4.3
func (a *DriverAdapter) Descriptor() Provider
func (*DriverAdapter) IntegrationDescriptor ¶ added in v0.4.3
func (a *DriverAdapter) IntegrationDescriptor() IntegrationDescriptor
type Execution ¶ added in v0.4.4
type Execution struct {
// contains filtered or unexported fields
}
Execution is one prepared provider lifecycle. Prepare performs all resolution/preflight work without mutation. ProvisionAndBind and Verify can then be coordinated around runtime/workload convergence without duplicating provider lifecycle semantics.
func (*Execution) ProvisionAndBind ¶ added in v0.4.4
type HTTPExposureBinding ¶ added in v0.4.4
type IdentityBinding ¶ added in v0.4.17
type IdentityBinding struct {
CallbackPaths []string `json:"callback_paths,omitempty"`
LogoutPaths []string `json:"logout_paths,omitempty"`
Scopes []string `json:"scopes,omitempty"`
Claims []string `json:"claims,omitempty"`
MFA string `json:"mfa,omitempty"`
Methods []string `json:"methods,omitempty"`
Passwordless bool `json:"passwordless,omitempty"`
}
type IntegrationDescriptor ¶ added in v0.4.3
type IntegrationDescriptor struct {
ID string `json:"id"`
Version string `json:"version"`
Protocol string `json:"protocol"`
Provider Provider `json:"provider"`
Services []ServiceKind `json:"services,omitempty"`
Capabilities []SpecificationID `json:"capabilities"`
SupportedScopes []ProviderScope `json:"supported_scopes"`
Optional OptionalLifecycleSupport `json:"optional_lifecycle"`
Observability ProviderObservability `json:"observability,omitempty"`
Interfaces []ProviderInterface `json:"interfaces,omitempty"`
}
func ReferenceIntegration ¶ added in v0.4.3
func ReferenceIntegration(provider ProviderKind) (IntegrationDescriptor, error)
func (IntegrationDescriptor) EffectiveServices ¶ added in v0.4.15
func (d IntegrationDescriptor) EffectiveServices() ([]ServiceKind, error)
func (IntegrationDescriptor) SupportsScope ¶ added in v0.4.8
func (d IntegrationDescriptor) SupportsScope(scope ProviderScope) bool
func (IntegrationDescriptor) Validate ¶ added in v0.4.3
func (d IntegrationDescriptor) Validate() error
type IntegrationDriver ¶ added in v0.4.3
type IntegrationDriver interface {
Driver
IntegrationDescriptor() IntegrationDescriptor
}
IntegrationDriver is the semantic boundary shared by built-in providers and future external provider adapters. The existing Driver lifecycle remains the required mutation path; this interface adds a versioned integration contract.
type Kind ¶
type Kind string
Kind identifies portable application behavior. It describes what an application needs, never which product or runtime satisfies that need.
const ( SQL Kind = "database.sql" KeyValue Kind = "cache.key-value" Secrets Kind = "secrets" ExposureHTTP Kind = "exposure.http" ObjectStorageS3 Kind = "object-storage.s3" TelemetryOTLP Kind = "telemetry.otlp" Metrics Kind = "metrics" Logs Kind = "logs" Traces Kind = "traces" Identity Kind = "identity.oidc" )
type LifecycleAction ¶ added in v0.4.2
type LifecycleAction struct {
ProviderInstanceID string `json:"provider_instance_id"`
Scope ProviderScope `json:"scope"`
Ownership ProviderOwnership `json:"ownership"`
Operation LifecycleOperation `json:"operation"`
MutateProvider bool `json:"mutate_provider"`
RemoveBinding bool `json:"remove_binding"`
}
type LifecycleOperation ¶ added in v0.4.2
type LifecycleOperation string
const ( LifecycleUpdate LifecycleOperation = "update" LifecycleBackup LifecycleOperation = "backup" LifecycleDestroy LifecycleOperation = "destroy" )
type LogsBinding ¶ added in v0.4.9
type MetricsBinding ¶ added in v0.4.8
type OTLPTelemetryBinding ¶ added in v0.4.7
type ObjectStorageS3Binding ¶ added in v0.4.6
type ObjectStorageS3Binding struct {
Bucket string `json:"bucket"`
}
type ObservabilityRealizationMode ¶ added in v0.4.15
type ObservabilityRealizationMode string
type ObservabilitySignalKind ¶ added in v0.4.10
type ObservabilitySignalKind string
type ObservabilitySupportStatus ¶ added in v0.4.15
type ObservabilitySupportStatus string
type ObservabilityVerificationMode ¶ added in v0.4.15
type ObservabilityVerificationMode string
type OptionalLifecycleSupport ¶ added in v0.4.3
type Provider ¶
type Provider struct {
Kind ProviderKind `json:"kind"`
Capabilities []Kind `json:"capabilities"`
}
Provider describes the capability surface of one provider implementation. Placement and ownership stay outside portable capability intent and are represented separately by the provider registry.
type ProviderBinding ¶ added in v0.4.2
type ProviderInstance ¶ added in v0.4.2
type ProviderInstance struct {
ID string `json:"id"`
ProviderID string `json:"provider_id,omitempty"`
ProviderVersion string `json:"provider_version,omitempty"`
ProviderProtocol string `json:"provider_protocol,omitempty"`
Provider Provider `json:"provider"`
Scope ProviderScope `json:"scope"`
SharingBoundary string `json:"sharing_boundary,omitempty"`
Ownership ProviderOwnership `json:"ownership"`
OwnerApplication string `json:"owner_application,omitempty"`
OwnerEnvironment string `json:"owner_environment,omitempty"`
Reference string `json:"reference,omitempty"`
}
type ProviderInterface ¶ added in v0.4.17
type ProviderInterface struct {
Name string `json:"name"`
Class ProviderInterfaceClass `json:"class"`
Protocol string `json:"protocol,omitempty"`
Optional bool `json:"optional,omitempty"`
Intrinsic bool `json:"intrinsic,omitempty"`
Path string `json:"path,omitempty"`
}
func (ProviderInterface) Validate ¶ added in v0.4.17
func (i ProviderInterface) Validate() error
type ProviderInterfaceClass ¶ added in v0.4.17
type ProviderInterfaceClass string
const ( InterfaceApplication ProviderInterfaceClass = "application" InterfaceUserFacing ProviderInterfaceClass = "user-facing" InterfaceAdministration ProviderInterfaceClass = "administration" InterfaceManagement ProviderInterfaceClass = "management" InterfaceObservability ProviderInterfaceClass = "observability" InterfaceHealth ProviderInterfaceClass = "health" )
type ProviderKind ¶
type ProviderKind string
ProviderKind identifies a capability implementation. Capability providers are independent from runtime providers such as Compose.
const ( ProviderPostgreSQL ProviderKind = "postgresql" ProviderValkey ProviderKind = "valkey" ProviderOpenBao ProviderKind = "openbao" ProviderCaddy ProviderKind = "caddy" ProviderSeaweedFS ProviderKind = "seaweedfs" ProviderOTelCollector ProviderKind = "opentelemetry-collector" ProviderExternalOTLP ProviderKind = "external-otlp" ProviderPrometheus ProviderKind = "prometheus" ProviderLoki ProviderKind = "loki" ProviderTempo ProviderKind = "tempo" ProviderRuntimeBroker ProviderKind = "runtime-broker" ProviderRuntimeExecutor ProviderKind = "runtime-executor" ProviderKeycloak ProviderKind = "keycloak" ProviderExternalOIDC ProviderKind = "external-oidc" )
type ProviderObservability ¶ added in v0.4.10
type ProviderObservability struct {
Signals []ProviderObservabilitySignal `json:"signals,omitempty"`
}
type ProviderObservabilitySignal ¶ added in v0.4.10
type ProviderObservabilitySignal struct {
Name string `json:"name"`
Kind ObservabilitySignalKind `json:"kind"`
Status ObservabilitySupportStatus `json:"status"`
Mode ObservabilityRealizationMode `json:"mode,omitempty"`
Protocol string `json:"protocol,omitempty"`
SemanticConvention string `json:"semantic_convention,omitempty"`
Verification ObservabilityVerificationMode `json:"verification"`
Port int `json:"port,omitempty"`
Path string `json:"path,omitempty"`
}
func (ProviderObservabilitySignal) Collectable ¶ added in v0.4.15
func (s ProviderObservabilitySignal) Collectable() bool
type ProviderOperation ¶ added in v0.4.3
type ProviderOperation string
const ( OperationDescribe ProviderOperation = "describe" OperationPreflight ProviderOperation = "preflight" OperationProvision ProviderOperation = "provision" OperationBind ProviderOperation = "bind" OperationVerify ProviderOperation = "verify" OperationStatus ProviderOperation = "status" OperationUpdate ProviderOperation = "update" OperationBackup ProviderOperation = "backup" OperationRestore ProviderOperation = "restore" OperationDestroy ProviderOperation = "destroy" )
type ProviderOperationObservation ¶ added in v0.4.7
type ProviderOperationObservation struct {
Phase Phase `json:"phase"`
Status Status `json:"status"`
Application string `json:"application"`
Capability Kind `json:"capability"`
Resource string `json:"resource"`
Provider ProviderKind `json:"provider"`
Duration time.Duration `json:"duration"`
}
ProviderOperationObservation is deliberately metadata-only. It gives observability adapters a stable hook without exposing workload bindings, credentials, endpoints or provider-specific configuration.
type ProviderOperationObserver ¶ added in v0.4.7
type ProviderOperationObserver interface {
ObserveProviderOperation(ProviderOperationObservation)
}
type ProviderOwnership ¶ added in v0.4.2
type ProviderOwnership string
const ( OwnershipBaseHarbor ProviderOwnership = "baseharbor" OwnershipExternal ProviderOwnership = "external" )
type ProviderPlacement ¶ added in v0.4.8
type ProviderPlacement struct {
Scope ProviderScope `json:"scope"`
SharingBoundary string `json:"sharing_boundary,omitempty"`
Ownership ProviderOwnership `json:"ownership"`
ExternalReference string `json:"external_reference,omitempty"`
}
ProviderPlacement describes deployment/operator intent for how a provider instance is placed. It is deliberately separate from portable application intent and from runtime-specific isolation/topology.
func (ProviderPlacement) Validate ¶ added in v0.4.8
func (p ProviderPlacement) Validate() error
type ProviderScope ¶ added in v0.4.2
type ProviderScope string
const ( ScopeApplication ProviderScope = "application" ScopeExternal ProviderScope = "external" )
type ReconciliationDriver ¶ added in v0.4.14
type ReconciliationResult ¶ added in v0.4.14
type ReconciliationResult struct {
Resource Resource `json:"resource"`
Result reconciliation.Result `json:"result"`
}
type Registry ¶ added in v0.4.2
type Registry struct {
Version int `json:"version"`
Instances []ProviderInstance `json:"instances,omitempty"`
Bindings []ProviderBinding `json:"bindings,omitempty"`
}
func NewRegistry ¶ added in v0.4.2
func NewRegistry() Registry
func (Registry) ApplicationLifecycle ¶ added in v0.4.2
func (r Registry) ApplicationLifecycle(application string, operation LifecycleOperation) ([]LifecycleAction, error)
func (*Registry) BindDeployment ¶ added in v0.4.17
func (*Registry) Register ¶ added in v0.4.2
func (r *Registry) Register(instance ProviderInstance) error
func (*Registry) ReleaseApplication ¶ added in v0.4.2
func (*Registry) ReleaseApplicationDeployment ¶ added in v0.4.17
func (*Registry) ReleaseManagedApplication ¶ added in v0.4.2
func (*Registry) ReleaseManagedDeployment ¶ added in v0.4.17
func (Registry) Resolve ¶ added in v0.4.2
func (r Registry) Resolve(provider ProviderKind, scope ProviderScope, application, externalID string) (ProviderInstance, error)
func (Registry) ResolvePlacement ¶ added in v0.4.8
func (r Registry) ResolvePlacement(provider ProviderKind, placement ProviderPlacement, application string) (ProviderInstance, error)
type RegistryStore ¶ added in v0.4.2
type RegistryStore struct{ Path string }
func (RegistryStore) Load ¶ added in v0.4.2
func (s RegistryStore) Load() (Registry, error)
func (RegistryStore) Save ¶ added in v0.4.2
func (s RegistryStore) Save(registry Registry) error
type Request ¶
type Request struct {
Requirement Requirement
Workload string
HTTPExposure *HTTPExposureBinding
ObjectStorageS3 *ObjectStorageS3Binding
TelemetryOTLP *OTLPTelemetryBinding
Metrics *MetricsBinding
Logs *LogsBinding
Identity *IdentityBinding
Security *SecureBinding
Driver Driver
Observer ProviderOperationObserver
}
type Requirement ¶
Requirement is one application-owned logical capability request.
type Resource ¶
type Resource struct {
Application string `json:"application"`
Kind Kind `json:"kind"`
Name string `json:"name"`
Provider ProviderKind `json:"provider"`
}
Resource is the provider-backed representation of one stable logical application resource. Provider-specific object names, ports and credentials are intentionally absent.
type Result ¶
type Result struct {
Application string `json:"application"`
Status Status `json:"status"`
Plan Plan `json:"plan"`
Steps []StepResult `json:"steps"`
Reconciliation []ReconciliationResult `json:"reconciliation,omitempty"`
}
type SecretReference ¶ added in v0.4.5
type SecureBinding ¶ added in v0.4.5
type SecureBinding struct {
Identity *WorkloadIdentityBinding `json:"identity,omitempty"`
Credentials []CredentialReference `json:"credentials,omitempty"`
Trust []TrustMaterialReference `json:"trust,omitempty"`
Authorization []AuthorizationMetadata `json:"authorization,omitempty"`
Secrets []SecretReference `json:"secrets,omitempty"`
Lifecycle SecurityLifecycleSupport `json:"lifecycle"`
Diagnostics []Diagnostic `json:"diagnostics,omitempty"`
}
SecureBinding carries provider-neutral security metadata required to bind one logical capability resource to one workload. Secret material itself is never represented here; only stable references may cross this boundary.
func (SecureBinding) Validate ¶ added in v0.4.5
func (b SecureBinding) Validate() error
Validate rejects ambiguous or unsafe secure-binding metadata before provider mutation. It validates references and metadata shape, not referenced secret values, which are resolved only at the trusted provider/runtime boundary.
type SecurityLifecycleSupport ¶ added in v0.4.5
type ServiceKind ¶ added in v0.4.15
type ServiceKind string
ServiceKind is the provider-neutral application service family. It is intentionally broader than a capability/protocol specification and never identifies a concrete provider product.
const ( ServiceSQL ServiceKind = "sql" ServiceCache ServiceKind = "cache" ServiceObjectStorage ServiceKind = "object-storage" ServiceSecrets ServiceKind = "secrets" ServiceObservability ServiceKind = "observability" ServiceIdentity ServiceKind = "identity" ServiceMessaging ServiceKind = "messaging" ServiceVector ServiceKind = "vector" ServiceExposure ServiceKind = "exposure" )
func ServiceKindForCapability ¶ added in v0.4.15
func ServiceKindForCapability(kind Kind) (ServiceKind, error)
ServiceKindForCapability maps shipped v0.4 capability specifications onto the standards-first service family without renaming the existing capability compatibility surface.
type SpecificationID ¶ added in v0.4.3
type SpecificationID string
type SpecificationVersion ¶ added in v0.4.3
type SpecificationVersion string
const SpecificationV1 SpecificationVersion = "v1"
type StepResult ¶
type StepResult struct {
Phase Phase `json:"phase"`
Status Status `json:"status"`
Resource Resource `json:"resource"`
Binding Binding `json:"binding"`
Diagnostics []Diagnostic `json:"diagnostics,omitempty"`
}