Documentation
¶
Overview ¶
Package v1alpha1 contains API Schema definitions for the stories v1alpha1 API group. +kubebuilder:object:generate=true +groupName=bubustack.io
Index ¶
- Variables
- type CachePolicy
- type ConcurrencyMode
- type ConcurrencyScope
- type Engram
- type EngramList
- type EngramSpec
- type EngramStatus
- type EngramTLSSpec
- type EngramTransportSpec
- type ExecutionOverrides
- type ExecutionPolicy
- type FileStorageProvider
- type Impulse
- type ImpulseList
- type ImpulseSpec
- type ImpulseStatus
- type JobPolicy
- type JobWorkloadConfig
- type PlacementPolicy
- type PostExecutionCheck
- type ProbeOverrides
- type RBACRuleOverrides
- type RealtimeConcurrency
- type RealtimePolicy
- type ResourceLimits
- type ResourcePolicy
- type ResourceRequests
- type RetryPolicy
- type RollingUpdateConfig
- type S3Authentication
- type S3StorageProvider
- type SecurityPolicy
- type ServiceExposure
- type StatefulSetWorkloadConfig
- type Step
- type StoragePolicy
- type Story
- type StoryList
- type StoryPolicy
- type StoryRetries
- type StorySpec
- type StoryStatus
- type StoryTimeouts
- type StoryTransport
- type StoryTransportStatus
- type TriggerDedupeMode
- type TriggerDedupePolicy
- type TriggerDeliveryPolicy
- type TriggerRetryPolicy
- type TriggerThrottlePolicy
- type UpdateStrategy
- type WorkloadResources
- type WorkloadSecurity
- type WorkloadSpec
Constants ¶
This section is empty.
Variables ¶
var ( // GroupVersion is group version used to register these objects. GroupVersion = schema.GroupVersion{Group: "bubustack.io", Version: "v1alpha1"} // SchemeBuilder is used to add go types to the GroupVersionKind scheme. SchemeBuilder = &scheme.Builder{GroupVersion: GroupVersion} // AddToScheme adds the types in this group-version to the given scheme. AddToScheme = SchemeBuilder.AddToScheme )
Functions ¶
This section is empty.
Types ¶
type CachePolicy ¶ added in v0.1.4
type CachePolicy struct {
// Enabled toggles output caching when true.
// Defaults to true when CachePolicy is set.
// +optional
Enabled *bool `json:"enabled,omitempty"`
// Key selects the cache key. When empty, the resolved step inputs are hashed.
// Supports template expressions (e.g. "{{ inputs.userId }}").
// +optional
Key *string `json:"key,omitempty"`
// Salt is appended to cache keys to support explicit cache invalidation.
// Change this value to logically purge previous cache entries.
// +optional
Salt *string `json:"salt,omitempty"`
// Mode controls cache read/write behavior.
// - read: read-only (do not populate cache)
// - write: write-only (skip lookups)
// - readWrite: lookup and populate
// +kubebuilder:validation:Enum=read;write;readWrite
// +optional
Mode *string `json:"mode,omitempty"`
// TTLSeconds controls how long cache entries remain valid.
// Zero or negative means no expiry.
// +optional
TTLSeconds *int32 `json:"ttlSeconds,omitempty"`
}
CachePolicy controls step output caching.
func (*CachePolicy) DeepCopy ¶ added in v0.1.4
func (in *CachePolicy) DeepCopy() *CachePolicy
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CachePolicy.
func (*CachePolicy) DeepCopyInto ¶ added in v0.1.4
func (in *CachePolicy) DeepCopyInto(out *CachePolicy)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ConcurrencyMode ¶ added in v0.1.4
type ConcurrencyMode string
ConcurrencyMode defines how the hub handles overlapping pipeline cycles. +kubebuilder:validation:Enum=serial;cancelPrevious;parallel
const ( ConcurrencyModeSerial ConcurrencyMode = "serial" ConcurrencyModeCancelPrevious ConcurrencyMode = "cancelPrevious" ConcurrencyModeParallel ConcurrencyMode = "parallel" )
type ConcurrencyScope ¶ added in v0.1.4
type ConcurrencyScope string
ConcurrencyScope defines the granularity of cycle tracking. +kubebuilder:validation:Enum=storyrun;participant
const ( ConcurrencyScopeStoryRun ConcurrencyScope = "storyrun" ConcurrencyScopeParticipant ConcurrencyScope = "participant" )
type Engram ¶
type Engram struct {
metav1.TypeMeta `json:",inline"`
// metadata is a standard object metadata
// +optional
metav1.ObjectMeta `json:"metadata,omitzero"`
// spec defines the desired state of Engram
// +required
Spec EngramSpec `json:"spec"`
// status defines the observed state of Engram
// +optional
Status EngramStatus `json:"status,omitzero"`
}
+kubebuilder:object:root=true +kubebuilder:subresource:status +kubebuilder:resource:scope=Namespaced,shortName=engram,categories={bubu,ai} +kubebuilder:printcolumn:name="Template",type=string,JSONPath=".spec.templateRef.name" +kubebuilder:printcolumn:name="Mode",type=string,JSONPath=".spec.mode" +kubebuilder:printcolumn:name="Status",type=string,JSONPath=".status.validationStatus" +kubebuilder:printcolumn:name="Usage",type=integer,JSONPath=".status.usageCount" +kubebuilder:printcolumn:name="Triggers",type=integer,JSONPath=".status.triggers" +kubebuilder:printcolumn:name="Age",type=date,JSONPath=".metadata.creationTimestamp"
func (*Engram) DeepCopy ¶
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Engram.
func (*Engram) DeepCopyInto ¶
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*Engram) DeepCopyObject ¶
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type EngramList ¶
type EngramList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitzero"`
Items []Engram `json:"items"`
}
+kubebuilder:object:root=true
func (*EngramList) DeepCopy ¶
func (in *EngramList) DeepCopy() *EngramList
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new EngramList.
func (*EngramList) DeepCopyInto ¶
func (in *EngramList) DeepCopyInto(out *EngramList)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*EngramList) DeepCopyObject ¶
func (in *EngramList) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type EngramSpec ¶
type EngramSpec struct {
// Version identifies this Engram instance for pinning by Story steps.
// +kubebuilder:validation:MaxLength=64
// +optional
Version string `json:"version,omitempty"`
// TemplateRef selects the EngramTemplate that provides defaults, validation,
// and base artifacts for this instance.
// +kubebuilder:validation:Required
TemplateRef refs.EngramTemplateReference `json:"templateRef"`
// Mode optionally overrides the workload controller selected by the template.
// Supported values are job, deployment, and statefulset.
// +kubebuilder:validation:Enum=job;deployment;statefulset
Mode enums.WorkloadMode `json:"mode,omitempty"`
// With carries template-specific configuration. The template schema determines
// the structure and validation rules applied to this payload.
// +kubebuilder:pruning:PreserveUnknownFields
With *runtime.RawExtension `json:"with,omitempty"`
// Secrets maps named secret inputs defined by the template to concrete Secret
// resources in the tenant namespace.
Secrets map[string]string `json:"secrets,omitempty"`
// ExecutionPolicy captures the fully-resolved execution policy after hierarchical
// merge. Template defaults feed into this value.
// +optional
ExecutionPolicy *ExecutionPolicy `json:"executionPolicy,omitempty"`
// Overrides allows callers to apply instance-specific execution adjustments.
Overrides *ExecutionOverrides `json:"overrides,omitempty"`
// Transport carries transport-level overrides such as TLS configuration.
// +optional
Transport *EngramTransportSpec `json:"transport,omitempty"`
}
EngramSpec describes the desired behaviour for an Engram.
func (*EngramSpec) DeepCopy ¶
func (in *EngramSpec) DeepCopy() *EngramSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new EngramSpec.
func (*EngramSpec) DeepCopyInto ¶
func (in *EngramSpec) DeepCopyInto(out *EngramSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type EngramStatus ¶
type EngramStatus struct {
// ObservedGeneration reflects the last reconciled generation.
// +optional
ObservedGeneration int64 `json:"observedGeneration,omitempty"`
// Conditions conveys per-condition status such as Ready.
// +optional
// +listType=map
// +listMapKey=type
Conditions []metav1.Condition `json:"conditions,omitempty"`
// Replicas and ReadyReplicas surface pod readiness information for controllers
// that expose it (Deployments/StatefulSets). Jobs leave these fields at zero.
Replicas int32 `json:"replicas,omitempty"`
ReadyReplicas int32 `json:"readyReplicas,omitempty"`
Phase enums.Phase `json:"phase,omitempty"`
// ValidationStatus reflects whether the engram spec passed validation.
ValidationStatus enums.ValidationStatus `json:"validationStatus,omitempty"`
// ValidationErrors contains messages describing validation failures.
ValidationErrors []string `json:"validationErrors,omitempty"`
// UsageCount reports how many Stories reference this Engram.
// +optional
UsageCount int32 `json:"usageCount"`
// Triggers reports how many StepRuns currently reference this Engram.
// Useful for understanding runtime fan-out and utilisation.
// +optional
Triggers int64 `json:"triggers"`
// LastExecutionTime captures the completion timestamp for the most recent run.
LastExecutionTime *metav1.Time `json:"lastExecutionTime,omitempty"`
// TotalExecutions counts the number of completed runs for job workloads.
TotalExecutions int32 `json:"totalExecutions,omitempty"`
// FailedExecutions counts runs that ended in a failure state.
FailedExecutions int32 `json:"failedExecutions,omitempty"`
}
EngramStatus reports observed workload state.
func (*EngramStatus) DeepCopy ¶
func (in *EngramStatus) DeepCopy() *EngramStatus
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new EngramStatus.
func (*EngramStatus) DeepCopyInto ¶
func (in *EngramStatus) DeepCopyInto(out *EngramStatus)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type EngramTLSSpec ¶ added in v0.1.4
type EngramTLSSpec struct {
// SecretRef references a Secret containing tls.key/tls.crt data.
// +optional
SecretRef *corev1.LocalObjectReference `json:"secretRef,omitempty"`
// UseDefaultTLS requests the operator's default TLS secret when true.
// Defaults to true when SecretRef is unset.
// +optional
UseDefaultTLS *bool `json:"useDefaultTLS,omitempty"`
}
EngramTLSSpec describes TLS secret resolution behavior.
func (*EngramTLSSpec) DeepCopy ¶ added in v0.1.4
func (in *EngramTLSSpec) DeepCopy() *EngramTLSSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new EngramTLSSpec.
func (*EngramTLSSpec) DeepCopyInto ¶ added in v0.1.4
func (in *EngramTLSSpec) DeepCopyInto(out *EngramTLSSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type EngramTransportSpec ¶ added in v0.1.4
type EngramTransportSpec struct {
// TLS configures TLS secrets for hybrid transports.
// +optional
TLS *EngramTLSSpec `json:"tls,omitempty"`
}
EngramTransportSpec defines transport-related overrides for an Engram.
func (*EngramTransportSpec) DeepCopy ¶ added in v0.1.4
func (in *EngramTransportSpec) DeepCopy() *EngramTransportSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new EngramTransportSpec.
func (*EngramTransportSpec) DeepCopyInto ¶ added in v0.1.4
func (in *EngramTransportSpec) DeepCopyInto(out *EngramTransportSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ExecutionOverrides ¶
type ExecutionOverrides struct {
// Timeout overrides the resolved execution timeout (Go duration string).
Timeout *string `json:"timeout,omitempty"`
// Retry overrides the resolved retry policy.
Retry *RetryPolicy `json:"retry,omitempty"`
// Debug enables verbose, component-level logging when true.
// +optional
Debug *bool `json:"debug,omitempty"`
// Security overrides pod-level security settings.
Security *WorkloadSecurity `json:"security,omitempty"`
// Placement overrides pod scheduling constraints (node selectors, tolerations, affinity).
// +optional
Placement *PlacementPolicy `json:"placement,omitempty"`
// ImagePullPolicy overrides the container pull policy.
ImagePullPolicy *string `json:"imagePullPolicy,omitempty"`
// MaxInlineSize overrides the inline payload threshold in bytes. Set to 0 to always offload.
// +optional
MaxInlineSize *int `json:"maxInlineSize,omitempty"`
// ServiceAccountName overrides the ServiceAccount used by workload pods.
// Must be a valid DNS subdomain name (RFC 1123).
// +optional
// +kubebuilder:validation:MinLength=1
// +kubebuilder:validation:MaxLength=253
// +kubebuilder:validation:Pattern=`^[a-z0-9]([-a-z0-9]*[a-z0-9])?$`
ServiceAccountName *string `json:"serviceAccountName,omitempty"`
// AutomountServiceAccountToken toggles automountServiceAccountToken on the pod spec.
// When omitted, the controller-resolved default is preserved.
// +optional
AutomountServiceAccountToken *bool `json:"automountServiceAccountToken,omitempty"`
// Probes allows disabling template-defined probes; probe definitions themselves
// remain owned by the template.
// +optional
Probes *ProbeOverrides `json:"probes,omitempty"`
// Storage overrides the resolved storage policy (e.g., enable S3 or file providers).
// +optional
Storage *StoragePolicy `json:"storage,omitempty"`
// Cache overrides output caching behavior.
// +optional
Cache *CachePolicy `json:"cache,omitempty"`
// RBAC adds extra Role/ClusterRole bindings to the generated ServiceAccount.
// +optional
RBAC *RBACRuleOverrides `json:"rbac,omitempty"`
}
ExecutionOverrides lets an instance tune execution characteristics while inheriting from template and controller defaults.
func (*ExecutionOverrides) DeepCopy ¶
func (in *ExecutionOverrides) DeepCopy() *ExecutionOverrides
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ExecutionOverrides.
func (*ExecutionOverrides) DeepCopyInto ¶
func (in *ExecutionOverrides) DeepCopyInto(out *ExecutionOverrides)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ExecutionPolicy ¶
type ExecutionPolicy struct {
// Resources enumerates the concrete pod resource assignments.
Resources *ResourcePolicy `json:"resources,omitempty"`
// Security enumerates the concrete pod security settings.
Security *SecurityPolicy `json:"security,omitempty"`
// Placement enumerates the pod scheduling constraints.
// +optional
Placement *PlacementPolicy `json:"placement,omitempty"`
// Job enumerates the job controller settings.
Job *JobPolicy `json:"job,omitempty"`
// Retry enumerates the retry configuration.
Retry *RetryPolicy `json:"retry,omitempty"`
// Timeout is the execution deadline expressed as a Go duration string.
Timeout *string `json:"timeout,omitempty"`
// MaxRecursionDepth overrides the maximum nesting depth used when hydrating
// or dehydrating structured inputs and outputs for this Story. Increase this
// when the Story intentionally passes deeply nested documents, such as full
// Kubernetes objects, through shared storage.
// +kubebuilder:validation:Minimum=1
// +optional
MaxRecursionDepth *int `json:"maxRecursionDepth,omitempty"`
// ServiceAccountName identifies the ServiceAccount used by derived workloads.
// +optional
ServiceAccountName *string `json:"serviceAccountName,omitempty"`
// Storage enumerates the resolved storage policy applied to the workload.
// +optional
Storage *StoragePolicy `json:"storage,omitempty"`
// Cache enumerates the resolved output caching policy applied to the workload.
// +optional
Cache *CachePolicy `json:"cache,omitempty"`
// Realtime enumerates realtime-specific execution settings (e.g., TTL for lingering pods).
// +optional
Realtime *RealtimePolicy `json:"realtime,omitempty"`
}
ExecutionPolicy represents the fully materialised policy after hierarchical resolution (controller → template → namespace → story → step).
func (*ExecutionPolicy) DeepCopy ¶
func (in *ExecutionPolicy) DeepCopy() *ExecutionPolicy
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ExecutionPolicy.
func (*ExecutionPolicy) DeepCopyInto ¶
func (in *ExecutionPolicy) DeepCopyInto(out *ExecutionPolicy)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type FileStorageProvider ¶ added in v0.1.4
type FileStorageProvider struct {
// Path is the directory inside the container where the storage backend should write files.
// Defaults to "/var/run/bubu/storage" when omitted.
Path string `json:"path,omitempty"`
// VolumeClaimName references an existing PersistentVolumeClaim mounted to the workload.
// Mutually exclusive with EmptyDir.
// +optional
VolumeClaimName string `json:"volumeClaimName,omitempty"`
// EmptyDir defines an ephemeral volume to provision for file storage. When both
// EmptyDir and VolumeClaimName are omitted, an EmptyDir{} volume is used by default.
// +optional
EmptyDir *corev1.EmptyDirVolumeSource `json:"emptyDir,omitempty"`
}
FileStorageProvider configures access to a filesystem-backed storage location.
func (*FileStorageProvider) DeepCopy ¶ added in v0.1.4
func (in *FileStorageProvider) DeepCopy() *FileStorageProvider
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FileStorageProvider.
func (*FileStorageProvider) DeepCopyInto ¶ added in v0.1.4
func (in *FileStorageProvider) DeepCopyInto(out *FileStorageProvider)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type Impulse ¶
type Impulse struct {
metav1.TypeMeta `json:",inline"`
// metadata is a standard object metadata
// +optional
metav1.ObjectMeta `json:"metadata,omitzero"`
// spec defines the desired state of Impulse
// +required
Spec ImpulseSpec `json:"spec"`
// status defines the observed state of Impulse
// +optional
Status ImpulseStatus `json:"status,omitzero"`
}
Impulse defines an always-on trigger that listens for external events and launches Stories in response.
+kubebuilder:object:root=true +kubebuilder:subresource:status +kubebuilder:resource:scope=Namespaced,shortName=imp,categories={bubu,ai} +kubebuilder:printcolumn:name="Template",type=string,JSONPath=.spec.templateRef.name +kubebuilder:printcolumn:name="Story",type=string,JSONPath=.spec.storyRef.name +kubebuilder:printcolumn:name="Phase",type=string,JSONPath=.status.phase +kubebuilder:printcolumn:name="Triggers",type=integer,JSONPath=.status.triggersReceived +kubebuilder:printcolumn:name="Age",type=date,JSONPath=.metadata.creationTimestamp +kubebuilder:rbac:groups=runs.bubustack.io,resources=stepruns,verbs=get;list;watch;patch
func (*Impulse) DeepCopy ¶
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Impulse.
func (*Impulse) DeepCopyInto ¶
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*Impulse) DeepCopyObject ¶
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type ImpulseList ¶
type ImpulseList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitzero"`
Items []Impulse `json:"items"`
}
+kubebuilder:object:root=true
func (*ImpulseList) DeepCopy ¶
func (in *ImpulseList) DeepCopy() *ImpulseList
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ImpulseList.
func (*ImpulseList) DeepCopyInto ¶
func (in *ImpulseList) DeepCopyInto(out *ImpulseList)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*ImpulseList) DeepCopyObject ¶
func (in *ImpulseList) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type ImpulseSpec ¶
type ImpulseSpec struct {
// Version identifies this Impulse instance for pinning by references.
// +kubebuilder:validation:MaxLength=64
// +optional
Version string `json:"version,omitempty"`
// TemplateRef selects the ImpulseTemplate that implements the trigger mechanics.
// +kubebuilder:validation:Required
TemplateRef refs.ImpulseTemplateReference `json:"templateRef"`
// StoryRef identifies the Story executed when the trigger fires.
// +kubebuilder:validation:Required
StoryRef refs.StoryReference `json:"storyRef"`
// With carries template-specific configuration and is validated by the template.
// +kubebuilder:pruning:PreserveUnknownFields
With *runtime.RawExtension `json:"with,omitempty"`
// Secrets maps template-defined secret inputs to concrete namespace Secrets.
Secrets map[string]string `json:"secrets,omitempty"`
// Mapping describes how an incoming event is converted into Story inputs.
// +kubebuilder:pruning:PreserveUnknownFields
Mapping *runtime.RawExtension `json:"mapping,omitempty"`
// DeliveryPolicy controls trigger deduplication and retry behavior.
// Overrides delivery defaults from the referenced ImpulseTemplate.
// +optional
DeliveryPolicy *TriggerDeliveryPolicy `json:"deliveryPolicy,omitempty"`
// Throttle limits trigger submission rate and concurrency for this Impulse.
// +optional
Throttle *TriggerThrottlePolicy `json:"throttle,omitempty"`
// Workload controls the backing workload for the impulse (deployment or statefulset).
Workload *WorkloadSpec `json:"workload,omitempty"`
// Service controls instance-level exposure of the impulse via a Service.
// Ports and health come from the template; this sets type/labels/annotations.
// If omitted, defaults to ClusterIP with template-defined ports.
Service *ServiceExposure `json:"service,omitempty"`
// Execution provides instance-level execution overrides.
Execution *ExecutionOverrides `json:"execution,omitempty"`
}
ImpulseSpec describes a trigger instance and the Story it activates.
func (*ImpulseSpec) DeepCopy ¶
func (in *ImpulseSpec) DeepCopy() *ImpulseSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ImpulseSpec.
func (*ImpulseSpec) DeepCopyInto ¶
func (in *ImpulseSpec) DeepCopyInto(out *ImpulseSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ImpulseStatus ¶
type ImpulseStatus struct {
// observedGeneration is the most recent generation observed for this Impulse. It corresponds to the
// Impulse's generation, which is updated on mutation by the API Server.
// +optional
ObservedGeneration int64 `json:"observedGeneration,omitempty"`
// Conditions is the standard Kubernetes condition set (Ready, etc.).
// +optional
// +listType=map
// +listMapKey=type
Conditions []metav1.Condition `json:"conditions,omitempty"`
// Replicas and ReadyReplicas surface readiness information reported by the backing workload.
// +optional
Replicas int32 `json:"replicas,omitempty"`
// +optional
ReadyReplicas int32 `json:"readyReplicas,omitempty"`
// +optional
Phase enums.Phase `json:"phase,omitempty"`
// TriggersReceived counts all events seen by the impulse.
// +optional
TriggersReceived int64 `json:"triggersReceived"`
// StoriesLaunched counts StoryRuns successfully started from events.
// +optional
StoriesLaunched int64 `json:"storiesLaunched"`
// FailedTriggers counts events that failed validation or launch.
// +optional
FailedTriggers int64 `json:"failedTriggers"`
// ThrottledTriggers counts events delayed by trigger throttling.
// +optional
ThrottledTriggers int64 `json:"throttledTriggers"`
// LastTrigger records the timestamp of the most recent event.
// +optional
LastTrigger *metav1.Time `json:"lastTrigger,omitempty"`
// LastThrottled records the timestamp of the most recent throttled trigger.
// +optional
LastThrottled *metav1.Time `json:"lastThrottled,omitempty"`
// LastSuccess records the timestamp of the most recent successful Story launch.
// +optional
LastSuccess *metav1.Time `json:"lastSuccess,omitempty"`
}
ImpulseStatus reports observed trigger state and counters.
func (*ImpulseStatus) DeepCopy ¶
func (in *ImpulseStatus) DeepCopy() *ImpulseStatus
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ImpulseStatus.
func (*ImpulseStatus) DeepCopyInto ¶
func (in *ImpulseStatus) DeepCopyInto(out *ImpulseStatus)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type JobPolicy ¶
type JobPolicy struct {
// Backoff limit for jobs
BackoffLimit *int32 `json:"backoffLimit,omitempty"`
// TTL for cleaning up child resources (StepRuns, Pods) after StoryRun finishes.
// After this period expires, child resources are deleted to free up cluster resources.
// The parent StoryRun record is preserved for observability.
// Default: 3600 (1 hour)
TTLSecondsAfterFinished *int32 `json:"ttlSecondsAfterFinished,omitempty"`
// Retention period for the StoryRun record itself after it finishes.
// After this period expires, the StoryRun is deleted to prevent etcd overload.
// Set to 0 to keep StoryRuns forever (requires manual cleanup).
// Set to -1 to delete StoryRun immediately after child cleanup (not recommended).
// Recommended: 86400 (24 hours) to 604800 (7 days) for production systems.
// Default: 86400 (24 hours)
// +optional
StoryRunRetentionSeconds *int32 `json:"storyRunRetentionSeconds,omitempty"`
// Restart policy
RestartPolicy *string `json:"restartPolicy,omitempty"`
}
func (*JobPolicy) DeepCopy ¶
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new JobPolicy.
func (*JobPolicy) DeepCopyInto ¶
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type JobWorkloadConfig ¶
type JobWorkloadConfig struct {
// Parallelism mirrors spec.parallelism.
Parallelism *int32 `json:"parallelism,omitempty"`
// Completions mirrors spec.completions.
Completions *int32 `json:"completions,omitempty"`
// BackoffLimit mirrors spec.backoffLimit.
BackoffLimit *int32 `json:"backoffLimit,omitempty"`
// ActiveDeadlineSeconds mirrors spec.activeDeadlineSeconds.
ActiveDeadlineSeconds *int64 `json:"activeDeadlineSeconds,omitempty"`
// TTLSecondsAfterFinished mirrors spec.ttlSecondsAfterFinished.
TTLSecondsAfterFinished *int32 `json:"ttlSecondsAfterFinished,omitempty"`
}
JobWorkloadConfig contains knobs that map directly onto batch/v1 Job fields.
func (*JobWorkloadConfig) DeepCopy ¶
func (in *JobWorkloadConfig) DeepCopy() *JobWorkloadConfig
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new JobWorkloadConfig.
func (*JobWorkloadConfig) DeepCopyInto ¶
func (in *JobWorkloadConfig) DeepCopyInto(out *JobWorkloadConfig)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type PlacementPolicy ¶ added in v0.1.4
type PlacementPolicy struct {
// NodeSelector constrains scheduling to nodes with matching labels.
// +optional
NodeSelector map[string]string `json:"nodeSelector,omitempty"`
// Tolerations allow scheduling onto tainted nodes.
// +optional
Tolerations []corev1.Toleration `json:"tolerations,omitempty"`
// Affinity expresses node and pod affinity rules.
// +optional
Affinity *corev1.Affinity `json:"affinity,omitempty"`
}
PlacementPolicy captures pod scheduling constraints.
func (*PlacementPolicy) DeepCopy ¶ added in v0.1.4
func (in *PlacementPolicy) DeepCopy() *PlacementPolicy
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PlacementPolicy.
func (*PlacementPolicy) DeepCopyInto ¶ added in v0.1.4
func (in *PlacementPolicy) DeepCopyInto(out *PlacementPolicy)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type PostExecutionCheck ¶ added in v0.1.4
type PostExecutionCheck struct {
// Condition is a Go template expression that must evaluate to "true" for the step
// to be considered truly successful. Has access to steps.<name>.output.* context.
// Example: '{{ ne (index .steps "send-notification").output.deliveryStatus "failed" }}'
// +kubebuilder:validation:Required
// +kubebuilder:validation:MinLength=1
Condition string `json:"condition"`
// FailureMessage is a human-readable message used when the condition evaluates to false.
// +optional
FailureMessage string `json:"failureMessage,omitempty"`
}
PostExecutionCheck defines a verification condition evaluated after step completion.
func (*PostExecutionCheck) DeepCopy ¶ added in v0.1.4
func (in *PostExecutionCheck) DeepCopy() *PostExecutionCheck
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PostExecutionCheck.
func (*PostExecutionCheck) DeepCopyInto ¶ added in v0.1.4
func (in *PostExecutionCheck) DeepCopyInto(out *PostExecutionCheck)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ProbeOverrides ¶
type ProbeOverrides struct {
// DisableLiveness disables the liveness probe when true.
// +optional
DisableLiveness bool `json:"disableLiveness,omitempty"`
// DisableReadiness disables the readiness probe when true.
// +optional
DisableReadiness bool `json:"disableReadiness,omitempty"`
// DisableStartup disables the startup probe when true.
// +optional
DisableStartup bool `json:"disableStartup,omitempty"`
}
ProbeOverrides disables controller-provided probes on a per-instance basis. Fields default to false which keeps the template-defined probe behaviour.
func (*ProbeOverrides) DeepCopy ¶
func (in *ProbeOverrides) DeepCopy() *ProbeOverrides
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProbeOverrides.
func (*ProbeOverrides) DeepCopyInto ¶
func (in *ProbeOverrides) DeepCopyInto(out *ProbeOverrides)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type RBACRuleOverrides ¶ added in v0.1.4
type RBACRuleOverrides struct {
// Rules lists additional Role rules appended to the default policy.
// +optional
Rules []rbacv1.PolicyRule `json:"rules,omitempty"`
}
RBACRuleOverrides defines extra RBAC rules to add to the generated ServiceAccount.
func (*RBACRuleOverrides) DeepCopy ¶ added in v0.1.4
func (in *RBACRuleOverrides) DeepCopy() *RBACRuleOverrides
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RBACRuleOverrides.
func (*RBACRuleOverrides) DeepCopyInto ¶ added in v0.1.4
func (in *RBACRuleOverrides) DeepCopyInto(out *RBACRuleOverrides)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type RealtimeConcurrency ¶ added in v0.1.4
type RealtimeConcurrency struct {
// Mode controls cycle behavior: serial queues, cancelPrevious cancels old
// cycles, parallel allows all (default).
// +kubebuilder:default=parallel
Mode ConcurrencyMode `json:"mode,omitempty"`
// Scope determines the cycle tracking granularity.
// +kubebuilder:default=storyrun
Scope ConcurrencyScope `json:"scope,omitempty"`
}
RealtimeConcurrency configures how the hub handles overlapping pipeline cycles in realtime stories.
func (*RealtimeConcurrency) DeepCopy ¶ added in v0.1.4
func (in *RealtimeConcurrency) DeepCopy() *RealtimeConcurrency
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RealtimeConcurrency.
func (*RealtimeConcurrency) DeepCopyInto ¶ added in v0.1.4
func (in *RealtimeConcurrency) DeepCopyInto(out *RealtimeConcurrency)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type RealtimePolicy ¶ added in v0.1.4
type RealtimePolicy struct {
// TTLSecondsAfterFinished controls how long realtime resources (Deployments, Services) remain after finish.
// Set to 0 to delete immediately, negative to keep indefinitely, or positive seconds to keep temporarily.
TTLSecondsAfterFinished *int32 `json:"ttlSecondsAfterFinished,omitempty"`
}
RealtimePolicy captures realtime-specific execution settings.
func (*RealtimePolicy) DeepCopy ¶ added in v0.1.4
func (in *RealtimePolicy) DeepCopy() *RealtimePolicy
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RealtimePolicy.
func (*RealtimePolicy) DeepCopyInto ¶ added in v0.1.4
func (in *RealtimePolicy) DeepCopyInto(out *RealtimePolicy)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ResourceLimits ¶
type ResourceLimits struct {
CPU *string `json:"cpu,omitempty"` // e.g., "1000m", "2"
Memory *string `json:"memory,omitempty"` // e.g., "1Gi", "4Gi"
EphemeralStorage *string `json:"ephemeralStorage,omitempty"` // e.g., "5Gi"
}
ResourceLimits defines maximum allowed resources
func (*ResourceLimits) DeepCopy ¶
func (in *ResourceLimits) DeepCopy() *ResourceLimits
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ResourceLimits.
func (*ResourceLimits) DeepCopyInto ¶
func (in *ResourceLimits) DeepCopyInto(out *ResourceLimits)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ResourcePolicy ¶
type ResourcePolicy struct {
// CPU request
CPURequest *string `json:"cpuRequest,omitempty"`
// Memory request
MemoryRequest *string `json:"memoryRequest,omitempty"`
// CPU limit
CPULimit *string `json:"cpuLimit,omitempty"`
// Memory limit
MemoryLimit *string `json:"memoryLimit,omitempty"`
}
func (*ResourcePolicy) DeepCopy ¶
func (in *ResourcePolicy) DeepCopy() *ResourcePolicy
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ResourcePolicy.
func (*ResourcePolicy) DeepCopyInto ¶
func (in *ResourcePolicy) DeepCopyInto(out *ResourcePolicy)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ResourceRequests ¶
type ResourceRequests struct {
CPU *string `json:"cpu,omitempty"` // e.g., "100m", "0.5"
Memory *string `json:"memory,omitempty"` // e.g., "128Mi", "1Gi"
EphemeralStorage *string `json:"ephemeralStorage,omitempty"` // e.g., "1Gi"
}
ResourceRequests defines minimum required resources
func (*ResourceRequests) DeepCopy ¶
func (in *ResourceRequests) DeepCopy() *ResourceRequests
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ResourceRequests.
func (*ResourceRequests) DeepCopyInto ¶
func (in *ResourceRequests) DeepCopyInto(out *ResourceRequests)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type RetryPolicy ¶
type RetryPolicy struct {
// Maximum number of retry attempts
// +kubebuilder:default=3
// +kubebuilder:validation:Minimum=0
// +kubebuilder:validation:Maximum=10
MaxRetries *int32 `json:"maxRetries,omitempty"`
// Base delay between retries
// Examples: "1s", "5s", "30s"
// +kubebuilder:default="1s"
Delay *string `json:"delay,omitempty"`
// MaxDelay caps the computed retry delay after backoff is applied.
// Examples: "30s", "5m"
// +optional
MaxDelay *string `json:"maxDelay,omitempty"`
// Jitter applies a fractional jitter to the computed delay.
// 0 disables jitter; 50 allows up to +50% delay.
// +kubebuilder:validation:Minimum=0
// +kubebuilder:validation:Maximum=100
// +optional
Jitter *int32 `json:"jitter,omitempty"`
// Backoff strategy for retry delays
// - exponential: 1s, 2s, 4s, 8s... (doubles each time)
// - linear: 1s, 2s, 3s, 4s... (increases by delay each time)
// - constant: 1s, 1s, 1s, 1s... (same delay each time)
Backoff *enums.BackoffStrategy `json:"backoff,omitempty"`
}
RetryPolicy defines retry behavior for steps and execution
func (*RetryPolicy) DeepCopy ¶
func (in *RetryPolicy) DeepCopy() *RetryPolicy
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RetryPolicy.
func (*RetryPolicy) DeepCopyInto ¶
func (in *RetryPolicy) DeepCopyInto(out *RetryPolicy)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type RollingUpdateConfig ¶
type RollingUpdateConfig struct {
// Can be absolute number (ex: 5) or percentage (ex: 25%)
MaxUnavailable *string `json:"maxUnavailable,omitempty"`
// Maximum number of pods that can be created above desired replicas during update
// Only for Deployment (not StatefulSet)
MaxSurge *string `json:"maxSurge,omitempty"`
}
RollingUpdateConfig contains rolling update parameters
func (*RollingUpdateConfig) DeepCopy ¶
func (in *RollingUpdateConfig) DeepCopy() *RollingUpdateConfig
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RollingUpdateConfig.
func (*RollingUpdateConfig) DeepCopyInto ¶
func (in *RollingUpdateConfig) DeepCopyInto(out *RollingUpdateConfig)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type S3Authentication ¶
type S3Authentication struct {
// ServiceAccountAnnotations allows specifying annotations to be added to the
// auto-generated ServiceAccount. This is the recommended approach for
// IAM-based authentication on cloud providers (e.g., IRSA on EKS).
// The key-value pairs will be added to the ServiceAccount's metadata.annotations.
// +optional
ServiceAccountAnnotations map[string]string `json:"serviceAccountAnnotations,omitempty"`
// SecretRef references a Kubernetes Secret that contains the credentials.
// The secret must contain keys 'accessKeyID' and 'secretAccessKey'.
// +optional
SecretRef *corev1.LocalObjectReference `json:"secretRef,omitempty"`
}
S3Authentication defines the authentication method for S3. Only one of the fields should be set.
func (*S3Authentication) DeepCopy ¶
func (in *S3Authentication) DeepCopy() *S3Authentication
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new S3Authentication.
func (*S3Authentication) DeepCopyInto ¶
func (in *S3Authentication) DeepCopyInto(out *S3Authentication)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type S3StorageProvider ¶
type S3StorageProvider struct {
// Bucket is the name of the S3 bucket.
// +kubebuilder:validation:Required
Bucket string `json:"bucket"`
// Region is the AWS region of the bucket.
// +optional
Region string `json:"region,omitempty"`
// Endpoint is the S3 endpoint URL. Useful for S3-compatible stores like MinIO.
// +optional
Endpoint string `json:"endpoint,omitempty"`
// Authentication configures how the workload authenticates with S3.
// +kubebuilder:validation:Required
Authentication S3Authentication `json:"authentication"`
// UsePathStyle forces path-style addressing for S3-compatible providers that require it.
// +optional
UsePathStyle bool `json:"usePathStyle,omitempty"`
}
S3StorageProvider configures access to an S3 or S3-compatible object store.
func (*S3StorageProvider) DeepCopy ¶
func (in *S3StorageProvider) DeepCopy() *S3StorageProvider
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new S3StorageProvider.
func (*S3StorageProvider) DeepCopyInto ¶
func (in *S3StorageProvider) DeepCopyInto(out *S3StorageProvider)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type SecurityPolicy ¶
type SecurityPolicy struct {
// Whether to run as non-root user
RunAsNonRoot *bool `json:"runAsNonRoot,omitempty"`
// Whether to allow privilege escalation
AllowPrivilegeEscalation *bool `json:"allowPrivilegeEscalation,omitempty"`
// Read-only root filesystem
ReadOnlyRootFilesystem *bool `json:"readOnlyRootFilesystem,omitempty"`
// User ID to run as
RunAsUser *int64 `json:"runAsUser,omitempty"`
}
func (*SecurityPolicy) DeepCopy ¶
func (in *SecurityPolicy) DeepCopy() *SecurityPolicy
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SecurityPolicy.
func (*SecurityPolicy) DeepCopyInto ¶
func (in *SecurityPolicy) DeepCopyInto(out *SecurityPolicy)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ServiceExposure ¶
type ServiceExposure struct {
// Type is the Service type (ClusterIP, NodePort, LoadBalancer).
Type string `json:"type,omitempty"`
// Labels are merged into the Service metadata.
Labels map[string]string `json:"labels,omitempty"`
// Annotations are merged into the Service metadata.
Annotations map[string]string `json:"annotations,omitempty"`
}
ServiceExposure declares how a generated Service should be materialised for a given workload. Template authors own the port definitions; this struct lets instance authors override exposure type or metadata.
func (*ServiceExposure) DeepCopy ¶
func (in *ServiceExposure) DeepCopy() *ServiceExposure
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ServiceExposure.
func (*ServiceExposure) DeepCopyInto ¶
func (in *ServiceExposure) DeepCopyInto(out *ServiceExposure)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type StatefulSetWorkloadConfig ¶
type StatefulSetWorkloadConfig struct {
// ServiceName is the headless Service used for stable network identities.
ServiceName string `json:"serviceName"`
// PodManagementPolicy mirrors spec.podManagementPolicy.
PodManagementPolicy *string `json:"podManagementPolicy,omitempty"`
}
StatefulSetWorkloadConfig includes the subset of StatefulSet fields we support. Storage is provisioned by the controller; VolumeClaimTemplates are purposefully hidden.
func (*StatefulSetWorkloadConfig) DeepCopy ¶
func (in *StatefulSetWorkloadConfig) DeepCopy() *StatefulSetWorkloadConfig
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new StatefulSetWorkloadConfig.
func (*StatefulSetWorkloadConfig) DeepCopyInto ¶
func (in *StatefulSetWorkloadConfig) DeepCopyInto(out *StatefulSetWorkloadConfig)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type Step ¶
type Step struct {
// Name uniquely identifies the step within the Story. Outputs and dependencies
// are referenced by this name.
// +kubebuilder:validation:Required
// +kubebuilder:validation:MinLength=1
// +kubebuilder:validation:MaxLength=63
// +kubebuilder:validation:Pattern=^[a-z0-9]([-a-z0-9]*[a-z0-9])?$
Name string `json:"name"`
// ID optionally provides a stable identifier distinct from Name. It is useful
// for programmatic processing of the workflow graph.
// +kubebuilder:validation:MaxLength=63
// +kubebuilder:validation:Pattern=^[a-z0-9]([-a-z0-9]*[a-z0-9])?$
// +optional
ID string `json:"id,omitempty"`
// Needs lists predecessor step names that must complete before this step starts.
// +optional
Needs []string `json:"needs,omitempty"`
// Type selects a built-in primitive.
//
// Supported step types:
// - condition, parallel, sleep, stop, executeStory
// - wait, gate (batch-only)
//
// When Type is omitted and Ref is set, the step executes an Engram.
// +optional
Type enums.StepType `json:"type,omitempty"`
// If gates execution on a template expression that evaluates to true.
// +optional
If *string `json:"if,omitempty"`
// AllowFailure permits the step to fail without failing the StoryRun.
// When true, dependent steps may continue and the StoryRun can still succeed.
// +optional
AllowFailure *bool `json:"allowFailure,omitempty"`
// SideEffects indicates this step performs external mutations (e.g., API calls,
// notifications). When true and no explicit retry policy is set, retries default to 0
// to prevent duplicate side effects.
// +optional
SideEffects *bool `json:"sideEffects,omitempty"`
// Requires lists dot-paths that must resolve to non-nil values before this step
// is scheduled. Paths follow the format "steps.<name>.output.<key>".
// If any required path is nil, the step fails immediately with a descriptive error.
// +optional
Requires []string `json:"requires,omitempty"`
// IdempotencyKeyTemplate is a Go template that produces a business-scoped idempotency key.
// When set, the evaluated result replaces the auto-generated execution-scoped key.
// Template has access to inputs.* and steps.* contexts.
// Example: "send-notification-{{ .inputs.customerId }}-{{ .inputs.orderId }}"
// +kubebuilder:validation:MaxLength=512
// +optional
IdempotencyKeyTemplate *string `json:"idempotencyKeyTemplate,omitempty"`
// Ref points to the Engram executed by this step.
// +optional
Ref *refs.EngramReference `json:"ref,omitempty"`
// With carries step configuration and parameters for the Engram.
// Evaluation timing depends on execution mode:
//
// Batch/Job Mode:
// - Evaluated once when the job starts (runtime evaluation)
// - Can access story inputs (inputs.*) and outputs from completed predecessor steps (steps.*)
// - May use now at runtime
// - Passed as BUBU_STEP_CONFIG environment variable
//
// Realtime/Streaming Mode:
// - Evaluated once at deployment creation (static configuration)
// - Can access story inputs (inputs.*) only
// - Step outputs are NOT available (they're per-packet, use 'runtime' field instead)
// - now is not allowed for deterministic static config
// - Passed as BUBU_STEP_CONFIG environment variable
//
// Examples:
// Batch: with: {inputFile: "{{ steps.fetch.outputs.filename }}", config: "{{ inputs.settings }}"}
// Realtime: with: {model: "gpt-4o-mini", systemPrompt: "{{ inputs.prompt }}"}
//
// +kubebuilder:pruning:PreserveUnknownFields
// +optional
With *runtime.RawExtension `json:"with,omitempty"`
// Runtime carries dynamic per-packet configuration for realtime/streaming steps.
// This field is ONLY used in realtime mode and is evaluated by the hub for each packet.
//
// Template expressions can reference:
// - inputs.*: Story inputs (static)
// - steps.*: Outputs from predecessor steps (per-packet data)
// - packet.*: Current packet metadata
// - now: runtime clock (allowed only for runtime evaluation)
//
// The hub evaluates this configuration for each packet and passes the result
// in StreamMessage.Inputs to the engram.
//
// Batch Mode: This field is ignored (use 'with' field instead)
//
// Examples:
// runtime: {userPrompt: "{{ steps.transcribe.text }}", speakerId: "{{ packet.identity }}"}
//
// +kubebuilder:pruning:PreserveUnknownFields
// +optional
Runtime *runtime.RawExtension `json:"runtime,omitempty"`
// Transport selects a named transport declared in Story.spec.transports. Streaming
// steps use this to bind to the correct connector.
// +kubebuilder:validation:Pattern=^[a-z0-9]([-a-z0-9]*[a-z0-9])?$
// +optional
Transport string `json:"transport,omitempty"`
// Secrets overrides template secret bindings for Engram steps.
// +optional
Secrets map[string]string `json:"secrets,omitempty"`
// Execution carries per-step execution overrides. Prefer story- or template-level
// configuration when possible.
Execution *ExecutionOverrides `json:"execution,omitempty"`
// PostExecution defines optional verification to run after the step completes.
// The controller evaluates the condition template against the step's output.
// If the condition evaluates to false, the step is marked as failed with a
// verification error, even though the engram itself succeeded.
// +optional
PostExecution *PostExecutionCheck `json:"postExecution,omitempty"`
}
Step defines a node in the workflow graph. Nodes may refer to Engrams or to built-in primitives such as condition, parallel, or executeStory.
func (*Step) DeepCopy ¶
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Step.
func (*Step) DeepCopyInto ¶
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type StoragePolicy ¶
type StoragePolicy struct {
// S3 specifies the configuration for an S3-compatible object store.
// +optional
S3 *S3StorageProvider `json:"s3,omitempty"`
// File specifies configuration for a filesystem-backed object store.
// +optional
File *FileStorageProvider `json:"file,omitempty"`
// NOTE: GCS, AzureBlob, etc., can be added here in the future.
TimeoutSeconds int `json:"timeoutSeconds,omitempty"`
}
StoragePolicy defines the configuration for object storage access.
func (*StoragePolicy) DeepCopy ¶
func (in *StoragePolicy) DeepCopy() *StoragePolicy
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new StoragePolicy.
func (*StoragePolicy) DeepCopyInto ¶
func (in *StoragePolicy) DeepCopyInto(out *StoragePolicy)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type Story ¶
type Story struct {
metav1.TypeMeta `json:",inline"`
// metadata is a standard object metadata
// +optional
metav1.ObjectMeta `json:"metadata,omitzero"`
// spec defines the desired state of Story
// +required
Spec StorySpec `json:"spec"`
// status defines the observed state of Story
// +optional
Status StoryStatus `json:"status,omitzero"`
}
Story defines a workflow that coordinates Engrams and primitive steps. It captures orchestration logic, dependency ordering, and configuration that is shared across every StoryRun derived from the Story.
+kubebuilder:object:root=true +kubebuilder:subresource:status +kubebuilder:resource:scope=Namespaced,shortName=story,categories={bubu,ai,workflows} +kubebuilder:printcolumn:name="Steps",type=integer,JSONPath=".status.stepsTotal" +kubebuilder:printcolumn:name="Status",type=string,JSONPath=".status.validationStatus" +kubebuilder:printcolumn:name="Usage",type=integer,JSONPath=".status.usageCount" +kubebuilder:printcolumn:name="Triggers",type=integer,JSONPath=".status.triggers" +kubebuilder:printcolumn:name="Age",type=date,JSONPath=".metadata.creationTimestamp"
func (*Story) DeepCopy ¶
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Story.
func (*Story) DeepCopyInto ¶
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*Story) DeepCopyObject ¶
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type StoryList ¶
type StoryList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitzero"`
Items []Story `json:"items"`
}
+kubebuilder:object:root=true
func (*StoryList) DeepCopy ¶
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new StoryList.
func (*StoryList) DeepCopyInto ¶
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*StoryList) DeepCopyObject ¶
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type StoryPolicy ¶
type StoryPolicy struct {
// Timeouts
Timeouts *StoryTimeouts `json:"timeouts,omitempty"`
// With provides the inputs for the sub-story, mirroring the 'with' field in an Engram step.
// +kubebuilder:pruning:PreserveUnknownFields
// +optional
With *runtime.RawExtension `json:"with,omitempty"`
// Retry behavior
Retries *StoryRetries `json:"retries,omitempty"`
// Concurrency limits
Concurrency *int32 `json:"concurrency,omitempty"`
// Queue assigns StoryRuns to a scheduling queue for global/queue concurrency control.
// +kubebuilder:validation:MaxLength=63
// +kubebuilder:validation:Pattern="^[a-z0-9]([-a-z0-9]*[a-z0-9])?$"
// +optional
Queue *string `json:"queue,omitempty"`
// Priority controls ordering within the selected queue (higher runs first).
// +kubebuilder:validation:Minimum=0
// +optional
Priority *int32 `json:"priority,omitempty"`
// Storage configuration
Storage *StoragePolicy `json:"storage,omitempty"`
// Default execution settings (can be overridden at step level)
Execution *ExecutionPolicy `json:"execution,omitempty"`
}
StoryPolicy aggregates optional defaults applied across the Story.
func (*StoryPolicy) DeepCopy ¶
func (in *StoryPolicy) DeepCopy() *StoryPolicy
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new StoryPolicy.
func (*StoryPolicy) DeepCopyInto ¶
func (in *StoryPolicy) DeepCopyInto(out *StoryPolicy)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type StoryRetries ¶
type StoryRetries struct {
// Default retry policy for steps
StepRetryPolicy *RetryPolicy `json:"stepRetryPolicy,omitempty"`
// Whether to continue story on step failure
// +kubebuilder:default=false
ContinueOnStepFailure *bool `json:"continueOnStepFailure,omitempty"`
}
func (*StoryRetries) DeepCopy ¶
func (in *StoryRetries) DeepCopy() *StoryRetries
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new StoryRetries.
func (*StoryRetries) DeepCopyInto ¶
func (in *StoryRetries) DeepCopyInto(out *StoryRetries)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type StorySpec ¶
type StorySpec struct {
// Version identifies this Story for pinning by references.
// +kubebuilder:validation:MaxLength=64
// +optional
Version string `json:"version,omitempty"`
// Pattern selects the execution model. Batch stories produce short-lived StoryRuns;
// realtime stories maintain long-lived topologies.
// +kubebuilder:validation:Enum=batch;realtime
// +kubebuilder:default=batch
Pattern enums.StoryPattern `json:"pattern,omitempty"`
// Concurrency configures how the hub handles overlapping pipeline cycles
// in realtime stories. Only applies when spec.pattern is "realtime".
// +optional
Concurrency *RealtimeConcurrency `json:"concurrency,omitempty"`
// InputsSchema defines the schema for the data required to start a StoryRun.
// JSON Schema defaults ("default") are applied at runtime when inputs are missing.
// +optional
InputsSchema *runtime.RawExtension `json:"inputsSchema,omitempty"`
// OutputsSchema defines the schema for the data this Story is expected to produce.
// +optional
OutputsSchema *runtime.RawExtension `json:"outputsSchema,omitempty"`
// Output defines a template for the Story's final output.
// This template is evaluated upon successful completion of the story,
// and the result is stored in the StoryRun's status.output field.
// It has access to 'inputs' and 'steps' contexts.
// e.g., {"final_message": "{{ printf \"processed %v records\" steps.load_data.outputs.count }}"}
// +kubebuilder:pruning:PreserveUnknownFields
// +optional
Output *runtime.RawExtension `json:"output,omitempty"`
// Steps enumerates the workflow graph. Control-flow primitives and Engram
// references are represented here.
// +kubebuilder:validation:Required
// +kubebuilder:validation:MinItems=1
// +kubebuilder:validation:MaxItems=100
Steps []Step `json:"steps"`
// Compensations lists steps to run when the story fails.
// These steps run after main steps finish and before finally steps.
// +kubebuilder:validation:MaxItems=50
// +optional
Compensations []Step `json:"compensations,omitempty"`
// Finally lists steps that always run after the story completes
// (success or failure). These steps run after compensations.
// +kubebuilder:validation:MaxItems=50
// +optional
Finally []Step `json:"finally,omitempty"`
// Policy provides optional story-wide defaults such as timeouts and storage.
Policy *StoryPolicy `json:"policy,omitempty"`
// Transports declares named media/stream transports that steps can publish to
// or subscribe from. Controllers surface these to StoryRuns so engrams know
// whether to keep payloads on the transport ("hot") or fall back to storage.
// +optional
Transports []StoryTransport `json:"transports,omitempty"`
}
StorySpec captures the desired workflow topology and policy. +kubebuilder:validation:XValidation:rule="self.steps.all(step, has(step.ref) != has(step.type))",message="each step must set exactly one of ref or type" +kubebuilder:validation:XValidation:rule="self.steps.all(step, self.steps.exists_one(other, other.name == step.name))",message="step names must be unique"
func (*StorySpec) DeepCopy ¶
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new StorySpec.
func (*StorySpec) DeepCopyInto ¶
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type StoryStatus ¶
type StoryStatus struct {
// ObservedGeneration is the most recent generation observed for this Story.
// +optional
ObservedGeneration int64 `json:"observedGeneration,omitempty"`
// Standard Kubernetes conditions for detailed status tracking (e.g., "Ready", "Validated")
// This will indicate if the Story's syntax is valid and all referenced Engrams exist.
// +optional
// +listType=map
// +listMapKey=type
Conditions []metav1.Condition `json:"conditions,omitempty"`
// StepsTotal reflects the total number of steps defined in the story's specification.
// This provides a quick way to understand the complexity of the story.
// +optional
StepsTotal int32 `json:"stepsTotal,omitempty"`
// Transports mirrors the declared transports with lightweight readiness info.
// +optional
Transports []StoryTransportStatus `json:"transports,omitempty"`
// ValidationStatus indicates whether this Story's specification passed validation.
ValidationStatus enums.ValidationStatus `json:"validationStatus,omitempty"`
// ValidationErrors captures human-readable validation problems, when present.
ValidationErrors []string `json:"validationErrors,omitempty"`
// ValidationWarnings captures non-fatal validation issues (e.g., unreachable step references in templates).
// +optional
ValidationWarnings []string `json:"validationWarnings,omitempty"`
// UsageCount reports how many Impulses reference this Story.
// +optional
UsageCount int32 `json:"usageCount"`
// Triggers reports how many StoryRuns currently reference this Story.
// This approximates how frequently the story has been executed.
// +optional
Triggers int64 `json:"triggers"`
}
StoryStatus defines the observed state of a Story.
func (*StoryStatus) DeepCopy ¶
func (in *StoryStatus) DeepCopy() *StoryStatus
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new StoryStatus.
func (*StoryStatus) DeepCopyInto ¶
func (in *StoryStatus) DeepCopyInto(out *StoryStatus)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type StoryTimeouts ¶
type StoryTimeouts struct {
// Total time for the entire story
Story *string `json:"story,omitempty"`
// Default timeout for individual steps
Step *string `json:"step,omitempty"`
// GracefulShutdownTimeout is the maximum time to wait for steps to complete
// after cancel is requested. Defaults to 30s.
// +optional
GracefulShutdownTimeout *metav1.Duration `json:"gracefulShutdownTimeout,omitempty"`
}
func (*StoryTimeouts) DeepCopy ¶
func (in *StoryTimeouts) DeepCopy() *StoryTimeouts
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new StoryTimeouts.
func (*StoryTimeouts) DeepCopyInto ¶
func (in *StoryTimeouts) DeepCopyInto(out *StoryTimeouts)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type StoryTransport ¶ added in v0.1.4
type StoryTransport struct {
// Name references the transport from steps (e.g. "realtime-audio").
// +kubebuilder:validation:Required
// +kubebuilder:validation:Pattern=^[a-z0-9]([-a-z0-9]*[a-z0-9])?$
Name string `json:"name"`
// TransportRef references the Transport CR providing this functionality.
// +kubebuilder:validation:Required
// +kubebuilder:validation:MinLength=1
TransportRef string `json:"transportRef"`
// Description provides optional human-readable context.
// +optional
Description string `json:"description,omitempty"`
// Streaming configures streaming policies such as backpressure, flow control, and delivery.
// +optional
Streaming *transportv1alpha1.TransportStreamingSettings `json:"streaming,omitempty"`
// Settings contain provider-specific overrides evaluated per StoryRun.
// +optional
Settings *runtime.RawExtension `json:"settings,omitempty"`
}
StoryTransport describes a named transport binding available to steps.
func (*StoryTransport) DeepCopy ¶ added in v0.1.4
func (in *StoryTransport) DeepCopy() *StoryTransport
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new StoryTransport.
func (*StoryTransport) DeepCopyInto ¶ added in v0.1.4
func (in *StoryTransport) DeepCopyInto(out *StoryTransport)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type StoryTransportStatus ¶ added in v0.1.4
type StoryTransportStatus struct {
Name string `json:"name"`
TransportRef string `json:"transportRef"`
Mode enums.TransportMode `json:"mode,omitempty"`
// ModeReason explains why the controller selected the effective mode (e.g., "declarative-default", "requires-primitives").
// +optional
ModeReason string `json:"modeReason,omitempty"`
}
StoryTransportStatus mirrors declared transports in status.
func (*StoryTransportStatus) DeepCopy ¶ added in v0.1.4
func (in *StoryTransportStatus) DeepCopy() *StoryTransportStatus
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new StoryTransportStatus.
func (*StoryTransportStatus) DeepCopyInto ¶ added in v0.1.4
func (in *StoryTransportStatus) DeepCopyInto(out *StoryTransportStatus)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type TriggerDedupeMode ¶ added in v0.1.4
type TriggerDedupeMode string
TriggerDedupeMode enumerates supported dedupe strategies. +kubebuilder:validation:Enum=none;token;key
const ( TriggerDedupeNone TriggerDedupeMode = "none" TriggerDedupeToken TriggerDedupeMode = "token" TriggerDedupeKey TriggerDedupeMode = "key" )
type TriggerDedupePolicy ¶ added in v0.1.4
type TriggerDedupePolicy struct {
// Mode selects the dedupe strategy.
// - none: no deduplication
// - token: use caller-provided trigger token
// - key: derive a token from keyTemplate
// +optional
Mode *TriggerDedupeMode `json:"mode,omitempty"`
// KeyTemplate is a template string used to derive a dedupe key when mode=key.
// +optional
KeyTemplate *string `json:"keyTemplate,omitempty"`
}
TriggerDedupePolicy configures trigger deduplication.
func (*TriggerDedupePolicy) DeepCopy ¶ added in v0.1.4
func (in *TriggerDedupePolicy) DeepCopy() *TriggerDedupePolicy
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TriggerDedupePolicy.
func (*TriggerDedupePolicy) DeepCopyInto ¶ added in v0.1.4
func (in *TriggerDedupePolicy) DeepCopyInto(out *TriggerDedupePolicy)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type TriggerDeliveryPolicy ¶ added in v0.1.4
type TriggerDeliveryPolicy struct {
// Dedupe configures trigger deduplication behavior.
// +optional
Dedupe *TriggerDedupePolicy `json:"dedupe,omitempty"`
// Retry configures trigger retry behavior for transient failures.
// +optional
Retry *TriggerRetryPolicy `json:"retry,omitempty"`
}
TriggerDeliveryPolicy controls how Impulses deliver trigger events to Stories. Template policies provide defaults; Impulse policies can override them.
func (*TriggerDeliveryPolicy) DeepCopy ¶ added in v0.1.4
func (in *TriggerDeliveryPolicy) DeepCopy() *TriggerDeliveryPolicy
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TriggerDeliveryPolicy.
func (*TriggerDeliveryPolicy) DeepCopyInto ¶ added in v0.1.4
func (in *TriggerDeliveryPolicy) DeepCopyInto(out *TriggerDeliveryPolicy)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type TriggerRetryPolicy ¶ added in v0.1.4
type TriggerRetryPolicy struct {
// MaxAttempts caps total trigger attempts (including the first).
// +kubebuilder:validation:Minimum=0
// +optional
MaxAttempts *int32 `json:"maxAttempts,omitempty"`
// BaseDelay is the initial retry delay (Go duration string).
// +optional
BaseDelay *string `json:"baseDelay,omitempty"`
// MaxDelay caps the computed retry delay (Go duration string).
// +optional
MaxDelay *string `json:"maxDelay,omitempty"`
// Backoff controls how retry delays are computed.
// +optional
Backoff *enums.BackoffStrategy `json:"backoff,omitempty"`
}
TriggerRetryPolicy configures trigger retry settings.
func (*TriggerRetryPolicy) DeepCopy ¶ added in v0.1.4
func (in *TriggerRetryPolicy) DeepCopy() *TriggerRetryPolicy
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TriggerRetryPolicy.
func (*TriggerRetryPolicy) DeepCopyInto ¶ added in v0.1.4
func (in *TriggerRetryPolicy) DeepCopyInto(out *TriggerRetryPolicy)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type TriggerThrottlePolicy ¶ added in v0.1.4
type TriggerThrottlePolicy struct {
// MaxInFlight caps the number of concurrent trigger submissions.
// Zero or negative disables the limit.
// +optional
MaxInFlight *int32 `json:"maxInFlight,omitempty"`
// RatePerSecond sets the steady-state token bucket rate.
// Zero or negative disables rate limiting.
// +optional
RatePerSecond *int32 `json:"ratePerSecond,omitempty"`
// Burst sets the token bucket burst capacity.
// When omitted, the SDK defaults to RatePerSecond.
// +optional
Burst *int32 `json:"burst,omitempty"`
}
TriggerThrottlePolicy configures per-trigger throttling for Impulses. These limits are enforced by the SDK in the Impulse workload.
func (*TriggerThrottlePolicy) DeepCopy ¶ added in v0.1.4
func (in *TriggerThrottlePolicy) DeepCopy() *TriggerThrottlePolicy
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TriggerThrottlePolicy.
func (*TriggerThrottlePolicy) DeepCopyInto ¶ added in v0.1.4
func (in *TriggerThrottlePolicy) DeepCopyInto(out *TriggerThrottlePolicy)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type UpdateStrategy ¶
type UpdateStrategy struct {
// Type of update strategy
// - RollingUpdate: Gradually replace old pods with new ones
// - Recreate: Delete all old pods before creating new ones
Type *enums.UpdateStrategyType `json:"type,omitempty"`
// Rolling update configuration (only applies when type=RollingUpdate)
RollingUpdate *RollingUpdateConfig `json:"rollingUpdate,omitempty"`
}
UpdateStrategy defines how workload updates should be performed
func (*UpdateStrategy) DeepCopy ¶
func (in *UpdateStrategy) DeepCopy() *UpdateStrategy
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new UpdateStrategy.
func (*UpdateStrategy) DeepCopyInto ¶
func (in *UpdateStrategy) DeepCopyInto(out *UpdateStrategy)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type WorkloadResources ¶
type WorkloadResources struct {
// Resource requests and limits
Requests *ResourceRequests `json:"requests,omitempty"`
Limits *ResourceLimits `json:"limits,omitempty"`
// Placement defines pod scheduling constraints.
// +optional
Placement *PlacementPolicy `json:"placement,omitempty"`
}
WorkloadResources defines resource requirements and constraints
func (*WorkloadResources) DeepCopy ¶
func (in *WorkloadResources) DeepCopy() *WorkloadResources
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WorkloadResources.
func (*WorkloadResources) DeepCopyInto ¶
func (in *WorkloadResources) DeepCopyInto(out *WorkloadResources)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type WorkloadSecurity ¶
type WorkloadSecurity struct {
// Whether to run as non-root user
RunAsNonRoot *bool `json:"runAsNonRoot,omitempty"`
// Whether to allow privilege escalation
AllowPrivilegeEscalation *bool `json:"allowPrivilegeEscalation,omitempty"`
// Read-only root filesystem
ReadOnlyRootFilesystem *bool `json:"readOnlyRootFilesystem,omitempty"`
// User ID to run as
RunAsUser *int64 `json:"runAsUser,omitempty"`
// Required secrets for this workload
RequiredSecrets []string `json:"requiredSecrets,omitempty"`
}
WorkloadSecurity defines security configuration
func (*WorkloadSecurity) DeepCopy ¶
func (in *WorkloadSecurity) DeepCopy() *WorkloadSecurity
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WorkloadSecurity.
func (*WorkloadSecurity) DeepCopyInto ¶
func (in *WorkloadSecurity) DeepCopyInto(out *WorkloadSecurity)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type WorkloadSpec ¶
type WorkloadSpec struct {
// Mode selects the workload controller backing the component.
// * job – short-lived, run-to-completion executions
// * deployment – continuously running, stateless processes
// * statefulset – continuously running processes with sticky identity
// +kubebuilder:default="job"
Mode enums.WorkloadMode `json:"mode,omitempty"`
// Job config applies when Mode is job.
Job *JobWorkloadConfig `json:"job,omitempty"`
// StatefulSet config applies when Mode is statefulset.
StatefulSet *StatefulSetWorkloadConfig `json:"statefulSet,omitempty"`
// Resources specifies pod-level resource guarantees and limits.
Resources *WorkloadResources `json:"resources,omitempty"`
// UpdateStrategy determines how the workload should roll out changes.
UpdateStrategy *UpdateStrategy `json:"updateStrategy,omitempty"`
}
WorkloadSpec captures the execution primitive that should back an Engram, Impulse, or Story step. Higher-level defaults flow from controller configuration down to the individual resource and finally to the generated Kubernetes workload.
Replica counts are intentionally absent; autoscaling is delegated to purpose-built controllers (HPA, KEDA, VPA). The API only declares the shape of the workload.
func (*WorkloadSpec) DeepCopy ¶
func (in *WorkloadSpec) DeepCopy() *WorkloadSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WorkloadSpec.
func (*WorkloadSpec) DeepCopyInto ¶
func (in *WorkloadSpec) DeepCopyInto(out *WorkloadSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.