v1

package
v0.2.8 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 18, 2025 License: AGPL-3.0 Imports: 12 Imported by: 1

Documentation

Overview

Package v1 contains API Schema definitions for the mdai v1 API group. +kubebuilder:object:generate=true +groupName=hub.mydecisive.ai

Index

Constants

View Source
const (
	AuditLogstream     MDAILogStream = "audit"
	CollectorLogstream MDAILogStream = "collector"
	HubLogstream       MDAILogStream = "hub"
	OtherLogstream     MDAILogStream = "other"

	DebugSeverityLevel SeverityLevel = "debug"
	InfoSeverityLevel  SeverityLevel = "info"
	WarnSeverityLevel  SeverityLevel = "warn"
	ErrorSeverityLevel SeverityLevel = "error"
)
View Source
const (
	VariableSourceTypeBuiltInValkey VariableStorageType = "mdai-valkey"

	// VariableTypeManual Variable type that is managed externally by the user, not attached to any automation rule
	VariableTypeManual VariableType = "manual"
	// VariableTypeComputed Variable type that is computed internally by MDAI, attached to an automation rule
	VariableTypeComputed VariableType = "computed"
	// VariableTypeMeta Variable type that is derived from manual and computed variables
	VariableTypeMeta VariableType = "meta"

	// computed variable types
	VariableDataTypeInt     VariableDataType = "int"     // internally stored in string
	VariableDataTypeFloat   VariableDataType = "float"   // internally stored in string, disabled for now
	VariableDataTypeBoolean VariableDataType = "boolean" // 0 or 1 as string in valkey
	// VariableDataTypeString the string variable, could be used to store yaml or any other string
	VariableDataTypeString VariableDataType = "string"
	VariableDataTypeSet    VariableDataType = "set" // valkey set
	// VariableDataTypeMap implemented as hash map. Order is not guaranteed. Keys and values are strings.
	VariableDataTypeMap VariableDataType = "map" // valkey hashes

	// MetaVariableDataTypeHashSet LookupTable takes an input/key variable and a lookup variable. Returns a string.
	MetaVariableDataTypeHashSet VariableDataType = "metaHashSet"
	// MetaVariableDataTypePriorityList takes a list of variable refs, and will evaluate to the first one that is not empty. Returns an array of strings.
	MetaVariableDataTypePriorityList VariableDataType = "metaPriorityList"

	TransformerTypeJoin TransformerType = "join"

	TemplateRefSlack = "slackAlertTemplate"
	TemplateRefJSON  = "jsonTemplate"
)

Variables

View Source
var (
	// GroupVersion is group version used to register these objects.
	GroupVersion = schema.GroupVersion{Group: "hub.mydecisive.ai", Version: "v1"}

	// 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 AWSConfig

type AWSConfig struct {
	AWSAccessKeySecret *string `json:"awsAccessKeySecret,omitempty" yaml:"awsAccessKeySecret,omitempty"`
}

func (*AWSConfig) DeepCopy

func (in *AWSConfig) DeepCopy() *AWSConfig

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSConfig.

func (*AWSConfig) DeepCopyInto

func (in *AWSConfig) DeepCopyInto(out *AWSConfig)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type Action added in v0.2.0

type Action struct {
	// Payloads (one required depending on Type)
	AddToSet      *SetAction `json:"addToSet,omitempty"`
	RemoveFromSet *SetAction `json:"removeFromSet,omitempty"`

	SetVariable *ScalarAction `json:"setVariable,omitempty"`

	AddToMap      *MapAction `json:"addToMap,omitempty"`
	RemoveFromMap *MapAction `json:"removeFromMap,omitempty"`

	CallWebhook *CallWebhookAction `json:"callWebhook,omitempty"`
}

func (*Action) DeepCopy added in v0.2.0

func (in *Action) DeepCopy() *Action

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Action.

func (*Action) DeepCopyInto added in v0.2.0

func (in *Action) DeepCopyInto(out *Action)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type AuditLogstreamConfig added in v0.1.21

type AuditLogstreamConfig struct {
	// +optional
	Disabled bool `json:"disabled" yaml:"disabled"`
}

func (*AuditLogstreamConfig) DeepCopy added in v0.1.21

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AuditLogstreamConfig.

func (*AuditLogstreamConfig) DeepCopyInto added in v0.1.21

func (in *AuditLogstreamConfig) DeepCopyInto(out *AuditLogstreamConfig)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type AutomationRule added in v0.2.0

type AutomationRule struct {
	// Name How this rule will be referred to elsewhere in the config and audit.
	// +kubebuilder:validation:MinLength=1
	// +kubebuilder:validation:Required
	Name string `json:"name"`
	// When specifies the conditions under which the rule is triggered.
	// +kubebuilder:validation:Required
	When When `json:"when"`
	// Then specifies the actions to be taken when the rule is triggered.
	// +kubebuilder:validation:Required
	Then []Action `json:"then"`
}

func (*AutomationRule) DeepCopy added in v0.2.0

func (in *AutomationRule) DeepCopy() *AutomationRule

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AutomationRule.

func (*AutomationRule) DeepCopyInto added in v0.2.0

func (in *AutomationRule) DeepCopyInto(out *AutomationRule)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type CallWebhookAction added in v0.2.0

type CallWebhookAction struct {
	// URL provided as string or read from secret or configmap within hub namespace.
	// +kubebuilder: required
	URL StringOrFrom `json:"url"`

	// Method defaults to POST if not provided. If template is used, POST method has to be used.
	// +kubebuilder:default=POST
	// +kubebuilder:validation:Enum=POST;PUT;PATCH
	Method string `json:"method,omitempty"`

	// TemplateRef uses built-in templates or custom ones.
	// `slackAlertTemplate` uses Slack's built-in alert template.
	// `jsonTemplate` is default and uses a custom JSON payload template referenced from a ConfigMap/Secret.
	// +kubebuilder:validation:Enum=slackAlertTemplate;jsonTemplate
	// +kubebuilder:default=jsonTemplate
	TemplateRef string `json:"templateRef"`

	// PayloadTemplate A reusable JSON payload template stored inline or referenced from a ConfigMap/Secret.
	// Used when TemplateRef is "jsonTemplate".
	// +optional
	PayloadTemplate *StringOrFrom `json:"payloadTemplate,omitempty"`

	// TemplateValues literal key/value pairs available to the template as ${template:KEY}.
	// +optional
	TemplateValues map[string]string `json:"templateValues,omitempty"`
	// TemplateValuesFrom sourced from Secrets/ConfigMaps (overridden by TemplateValues).
	// +optional
	TemplateValuesFrom map[string]ValueFromSource `json:"templateValuesFrom,omitempty"`

	// Headers additional HTTP headers to be included in the request.
	// +optional
	Headers map[string]string `json:"headers,omitempty"`
	// HeadersFrom additional HTTP headers to be included in the request from a Secret or ConfigMap.
	// +optional
	HeadersFrom map[string]ValueFromSource `json:"headersFrom,omitempty"`

	// Timeout specifies the maximum time to wait for the response from the webhook before retry.
	// Default is 0s, means no timeout should be applied.
	// +kubebuilder: default= 0s
	Timeout *metav1.Duration `json:"timeout,omitempty"`
}

CallWebhookAction is used to call a webhook with the provided template.

func (*CallWebhookAction) DeepCopy added in v0.2.0

func (in *CallWebhookAction) DeepCopy() *CallWebhookAction

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CallWebhookAction.

func (*CallWebhookAction) DeepCopyInto added in v0.2.0

func (in *CallWebhookAction) DeepCopyInto(out *CallWebhookAction)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type CloudProvider added in v0.2.1

type CloudProvider string

CloudProvider represents what Could provider is it . +kubebuilder:validation:Enum=aws

const (
	// CLoudProviderAws specifies that an aws specific ingress should be created.
	CloudProviderAws CloudProvider = "aws"
)

type Config

type Config struct {
	// EvaluationInterval Specify the interval at which all evaluations within this hub are assessed in the Prometheus infrastructure.
	// +kubebuilder:validation:Optional
	EvaluationInterval *prometheusv1.Duration `json:"evaluation_interval,omitempty" yaml:"evaluation_interval,omitempty"` //nolint:tagliatelle
}

func (*Config) DeepCopy

func (in *Config) DeepCopy() *Config

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Config.

func (*Config) DeepCopyInto

func (in *Config) DeepCopyInto(out *Config)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type IngressService added in v0.2.1

type IngressService struct {
	// Type defines the type of the Service.
	// +kubebuilder:validation:Enum=ClusterIP;NodePort;LoadBalancer;ExternalName
	Type corev1.ServiceType `json:"type"`
	// Annotations to add to service.
	// +optional
	Annotations map[string]string `json:"annotations,omitempty"`
}

IngressService defines Service properties related to Ingress configuration.

func (*IngressService) DeepCopy added in v0.2.1

func (in *IngressService) DeepCopy() *IngressService

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IngressService.

func (*IngressService) DeepCopyInto added in v0.2.1

func (in *IngressService) DeepCopyInto(out *IngressService)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type JoinTransformer

type JoinTransformer struct {
	// Delimiter The delimiter inserted between each item in the collection during the Join
	// +kubebuilder:validation:Required
	Delimiter string `json:"delimiter" yaml:"delimiter"`
}

func (*JoinTransformer) DeepCopy

func (in *JoinTransformer) DeepCopy() *JoinTransformer

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new JoinTransformer.

func (*JoinTransformer) DeepCopyInto

func (in *JoinTransformer) DeepCopyInto(out *JoinTransformer)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type LogsConfig

type LogsConfig struct {
	// +optional
	S3 *S3LogsConfig `json:"s3,omitempty" yaml:"s3,omitempty"`
	// +optional
	Otlp *OtlpLogsConfig `json:"otlp,omitempty" yaml:"otlp,omitempty"`
}

func (*LogsConfig) DeepCopy

func (in *LogsConfig) DeepCopy() *LogsConfig

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LogsConfig.

func (*LogsConfig) DeepCopyInto

func (in *LogsConfig) DeepCopyInto(out *LogsConfig)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type LogstreamConfig added in v0.1.21

type LogstreamConfig struct {
	// +optional
	MinSeverity *SeverityLevel `json:"minSeverity,omitempty" yaml:"minSeverity,omitempty"`
	// +optional
	Disabled bool `json:"disabled" yaml:"disabled"`
}

func (*LogstreamConfig) DeepCopy added in v0.1.21

func (in *LogstreamConfig) DeepCopy() *LogstreamConfig

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LogstreamConfig.

func (*LogstreamConfig) DeepCopyInto added in v0.1.21

func (in *LogstreamConfig) DeepCopyInto(out *LogstreamConfig)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type MDAILogStream added in v0.1.21

type MDAILogStream string

type MapAction added in v0.2.2

type MapAction struct {
	// Map Target map variable name
	// +kubebuilder:validation:Pattern:="^[a-zA-Z_][a-zA-Z0-9_]*$"
	// +kubebuilder:validation:MinLength=1
	// +kubebuilder:validation:MaxLength=63
	// +kubebuilder:validation:Required
	Map string `json:"map"`

	// Key to add or remove
	// +kubebuilder:validation:MinLength=1
	Key string `json:"key"`
	// +optional
	// Value for key. Is not required for remove operations.
	Value *string `json:"value,omitempty"`
}

func (*MapAction) DeepCopy added in v0.2.2

func (in *MapAction) DeepCopy() *MapAction

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MapAction.

func (*MapAction) DeepCopyInto added in v0.2.2

func (in *MapAction) DeepCopyInto(out *MapAction)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type MdaiCollector

type MdaiCollector struct {
	metav1.TypeMeta   `json:",inline"`
	metav1.ObjectMeta `json:"metadata,omitempty"`

	Spec   MdaiCollectorSpec   `json:"spec,omitempty"`
	Status MdaiCollectorStatus `json:"status,omitempty"`
}

MdaiCollector is the Schema for the mdaicollectors API.

func (*MdaiCollector) DeepCopy

func (in *MdaiCollector) DeepCopy() *MdaiCollector

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MdaiCollector.

func (*MdaiCollector) DeepCopyInto

func (in *MdaiCollector) DeepCopyInto(out *MdaiCollector)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*MdaiCollector) DeepCopyObject

func (in *MdaiCollector) DeepCopyObject() runtime.Object

DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.

type MdaiCollectorList

type MdaiCollectorList struct {
	metav1.TypeMeta `json:",inline"`
	metav1.ListMeta `json:"metadata,omitempty"`

	Items []MdaiCollector `json:"items"`
}

MdaiCollectorList contains a list of MdaiCollector.

func (*MdaiCollectorList) DeepCopy

func (in *MdaiCollectorList) DeepCopy() *MdaiCollectorList

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MdaiCollectorList.

func (*MdaiCollectorList) DeepCopyInto

func (in *MdaiCollectorList) DeepCopyInto(out *MdaiCollectorList)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*MdaiCollectorList) DeepCopyObject

func (in *MdaiCollectorList) DeepCopyObject() runtime.Object

DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.

type MdaiCollectorSpec

type MdaiCollectorSpec struct {
	// +optional
	AWSConfig *AWSConfig `json:"aws,omitempty"`
	// +optional
	Logs *LogsConfig `json:"logs,omitempty"`
	// +kubebuilder:default="public.ecr.aws/decisiveai/mdai-collector:0.1.6"
	// +optional
	Image string `json:"image,omitempty"`
	// +kubebuilder:default=1
	// +optional
	Replicas int32 `json:"replicas,omitempty"`
	// +kubebuilder:default={}
	// +optional
	Tolerations []corev1.Toleration `json:"tolerations,omitempty"`
}

MdaiCollectorSpec defines the desired state of MdaiCollector.

func (*MdaiCollectorSpec) DeepCopy

func (in *MdaiCollectorSpec) DeepCopy() *MdaiCollectorSpec

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MdaiCollectorSpec.

func (*MdaiCollectorSpec) DeepCopyInto

func (in *MdaiCollectorSpec) DeepCopyInto(out *MdaiCollectorSpec)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type MdaiCollectorStatus

type MdaiCollectorStatus struct {
	// Time when last MDAI Collector Configuration change was detected
	// Right now it's updated on each reconcile, we have to skip when reconciliation detects no changes
	// +optional
	LastUpdatedTime *metav1.Time `json:"lastUpdatedTime,omitempty"`

	// Conditions store the status conditions of the MDAI Collector instances
	Conditions []metav1.Condition `json:"conditions,omitempty" patchStrategy:"merge" patchMergeKey:"type" protobuf:"bytes,1,rep,name=conditions"`
}

MdaiCollectorStatus defines the observed state of MdaiCollector.

func (*MdaiCollectorStatus) DeepCopy

func (in *MdaiCollectorStatus) DeepCopy() *MdaiCollectorStatus

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MdaiCollectorStatus.

func (*MdaiCollectorStatus) DeepCopyInto

func (in *MdaiCollectorStatus) DeepCopyInto(out *MdaiCollectorStatus)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type MdaiHub

type MdaiHub struct {
	metav1.TypeMeta   `json:",inline"`
	metav1.ObjectMeta `json:"metadata,omitempty"`

	Spec   MdaiHubSpec   `json:"spec,omitempty"`
	Status MdaiHubStatus `json:"status,omitempty"`
}

MdaiHub is the Schema for the mdaihubs API.

func (*MdaiHub) DeepCopy

func (in *MdaiHub) DeepCopy() *MdaiHub

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MdaiHub.

func (*MdaiHub) DeepCopyInto

func (in *MdaiHub) DeepCopyInto(out *MdaiHub)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*MdaiHub) DeepCopyObject

func (in *MdaiHub) DeepCopyObject() runtime.Object

DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.

type MdaiHubList

type MdaiHubList struct {
	metav1.TypeMeta `json:",inline"`
	metav1.ListMeta `json:"metadata,omitempty"`

	Items []MdaiHub `json:"items"`
}

MdaiHubList contains a list of MdaiHub.

func (*MdaiHubList) DeepCopy

func (in *MdaiHubList) DeepCopy() *MdaiHubList

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MdaiHubList.

func (*MdaiHubList) DeepCopyInto

func (in *MdaiHubList) DeepCopyInto(out *MdaiHubList)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*MdaiHubList) DeepCopyObject

func (in *MdaiHubList) DeepCopyObject() runtime.Object

DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.

type MdaiHubSpec

type MdaiHubSpec struct {
	// +optional
	Config *Config `json:"config,omitempty" yaml:"config,omitempty"`
	// +optional
	Variables []Variable `json:"variables,omitempty"`
	// +optional
	PrometheusAlerts []PrometheusAlert `json:"prometheusAlerts,omitempty"` // evaluation configuration (alerting rules)
	// +optional
	Rules []AutomationRule `json:"rules,omitempty"`
}

MdaiHubSpec defines the desired state of MdaiHub.

func (*MdaiHubSpec) DeepCopy

func (in *MdaiHubSpec) DeepCopy() *MdaiHubSpec

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MdaiHubSpec.

func (*MdaiHubSpec) DeepCopyInto

func (in *MdaiHubSpec) DeepCopyInto(out *MdaiHubSpec)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type MdaiHubStatus

type MdaiHubStatus struct {
	// Status of the Cluster defined by its modules and dependencies statuses
	HubStatus string `json:"hubStatus"`

	// Time when last Cluster Configuration change was detected
	// Right now it's updated on each reconcile, we have to skip when reconciliation detects no changes
	// +optional
	LastUpdatedTime *metav1.Time `json:"lastUpdatedTime,omitempty"`

	// Conditions store the status conditions of the Cluster instances
	Conditions []metav1.Condition `json:"conditions,omitempty" patchStrategy:"merge" patchMergeKey:"type" protobuf:"bytes,1,rep,name=conditions"`
}

MdaiHubStatus defines the observed state of MdaiHub.

func (*MdaiHubStatus) DeepCopy

func (in *MdaiHubStatus) DeepCopy() *MdaiHubStatus

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MdaiHubStatus.

func (*MdaiHubStatus) DeepCopyInto

func (in *MdaiHubStatus) DeepCopyInto(out *MdaiHubStatus)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type MdaiIngress added in v0.2.1

type MdaiIngress struct {
	metav1.TypeMeta   `json:",inline"`
	metav1.ObjectMeta `json:"metadata,omitempty"`

	Spec   MdaiIngressSpec   `json:"spec,omitempty"`
	Status MdaiIngressStatus `json:"status,omitempty"`
}

MdaiIngress is the Schema for the mdaiingresses API

func (*MdaiIngress) DeepCopy added in v0.2.1

func (in *MdaiIngress) DeepCopy() *MdaiIngress

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MdaiIngress.

func (*MdaiIngress) DeepCopyInto added in v0.2.1

func (in *MdaiIngress) DeepCopyInto(out *MdaiIngress)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*MdaiIngress) DeepCopyObject added in v0.2.1

func (in *MdaiIngress) DeepCopyObject() runtime.Object

DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.

type MdaiIngressList added in v0.2.1

type MdaiIngressList struct {
	metav1.TypeMeta `json:",inline"`
	metav1.ListMeta `json:"metadata,omitempty"`

	Items []MdaiIngress `json:"items"`
}

MdaiIngressList contains a list of MdaiIngress

func (*MdaiIngressList) DeepCopy added in v0.2.1

func (in *MdaiIngressList) DeepCopy() *MdaiIngressList

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MdaiIngressList.

func (*MdaiIngressList) DeepCopyInto added in v0.2.1

func (in *MdaiIngressList) DeepCopyInto(out *MdaiIngressList)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*MdaiIngressList) DeepCopyObject added in v0.2.1

func (in *MdaiIngressList) DeepCopyObject() runtime.Object

DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.

type MdaiIngressSpec added in v0.2.1

type MdaiIngressSpec struct {
	// Name of the Otel Collector, current Custom Resource belongs to.
	OtelCollector OtelColRef `json:"otelCollector"`

	// Supported types are: aws
	CloudType CloudProvider `json:"cloudType"`

	// Annotations to add to ingress.
	// e.g. 'cert-manager.io/cluster-issuer: "letsencrypt"'
	// +optional
	Annotations map[string]string `json:"annotations,omitempty"`

	// IngressClassName is the name of an IngressClass cluster resource. Ingress
	// controller implementations use this field to know whether they should be
	// serving this Ingress resource.
	// +optional
	IngressClassName *string `json:"ingressClassName,omitempty"`

	GrpcService *IngressService `json:"grpcService"`

	NonGrpcService *IngressService `json:"nonGrpcService"`

	// CollectorEndpoints should contain dns names for all collectors endpoints (grpc receivers)
	// mapped to receivers names e.g. :
	// otlp/1: otlp1.grpc.some.domain
	// otlp/2: otlp2.grpc.some.domain
	// +optional
	CollectorEndpoints map[string]string `json:"collectorEndpoints,omitempty"`
}

MdaiIngressSpec defines the desired state of MdaiIngress

func (*MdaiIngressSpec) DeepCopy added in v0.2.1

func (in *MdaiIngressSpec) DeepCopy() *MdaiIngressSpec

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MdaiIngressSpec.

func (*MdaiIngressSpec) DeepCopyInto added in v0.2.1

func (in *MdaiIngressSpec) DeepCopyInto(out *MdaiIngressSpec)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type MdaiIngressStatus added in v0.2.1

type MdaiIngressStatus struct {
}

MdaiIngressStatus defines the observed state of MdaiIngress

func (*MdaiIngressStatus) DeepCopy added in v0.2.1

func (in *MdaiIngressStatus) DeepCopy() *MdaiIngressStatus

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MdaiIngressStatus.

func (*MdaiIngressStatus) DeepCopyInto added in v0.2.1

func (in *MdaiIngressStatus) DeepCopyInto(out *MdaiIngressStatus)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type MdaiObserver added in v0.1.21

type MdaiObserver struct {
	metav1.TypeMeta   `json:",inline"`
	metav1.ObjectMeta `json:"metadata,omitempty"`

	Spec   MdaiObserverSpec   `json:"spec,omitempty"`
	Status MdaiObserverStatus `json:"status,omitempty"`
}

MdaiObserver is the Schema for the mdaiobservers API.

func (*MdaiObserver) DeepCopy added in v0.1.21

func (in *MdaiObserver) DeepCopy() *MdaiObserver

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MdaiObserver.

func (*MdaiObserver) DeepCopyInto added in v0.1.21

func (in *MdaiObserver) DeepCopyInto(out *MdaiObserver)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*MdaiObserver) DeepCopyObject added in v0.1.21

func (in *MdaiObserver) DeepCopyObject() runtime.Object

DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.

type MdaiObserverList added in v0.1.21

type MdaiObserverList struct {
	metav1.TypeMeta `json:",inline"`
	metav1.ListMeta `json:"metadata,omitempty"`

	Items []MdaiObserver `json:"items"`
}

MdaiObserverList contains a list of MdaiObserver.

func (*MdaiObserverList) DeepCopy added in v0.1.21

func (in *MdaiObserverList) DeepCopy() *MdaiObserverList

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MdaiObserverList.

func (*MdaiObserverList) DeepCopyInto added in v0.1.21

func (in *MdaiObserverList) DeepCopyInto(out *MdaiObserverList)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*MdaiObserverList) DeepCopyObject added in v0.1.21

func (in *MdaiObserverList) DeepCopyObject() runtime.Object

DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.

type MdaiObserverSpec added in v0.1.21

type MdaiObserverSpec struct {
	// +optional
	Observers []Observer `json:"observers,omitempty"`
	// +optional
	ObserverResource ObserverResource `json:"observerResource,omitempty"`
}

MdaiObserverSpec defines the desired state of MdaiObserver.

func (*MdaiObserverSpec) DeepCopy added in v0.1.21

func (in *MdaiObserverSpec) DeepCopy() *MdaiObserverSpec

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MdaiObserverSpec.

func (*MdaiObserverSpec) DeepCopyInto added in v0.1.21

func (in *MdaiObserverSpec) DeepCopyInto(out *MdaiObserverSpec)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type MdaiObserverStatus added in v0.1.21

type MdaiObserverStatus struct {
	// Status of the Cluster defined by its modules and dependencies statuses
	ObserverStatus string `json:"observerStatus"`

	// +optional
	LastUpdatedTime *metav1.Time `json:"lastUpdatedTime,omitempty"`

	// Conditions store the status conditions of the Cluster instances
	Conditions []metav1.Condition `json:"conditions,omitempty" patchStrategy:"merge" patchMergeKey:"type" protobuf:"bytes,1,rep,name=conditions"`
}

MdaiObserverStatus defines the observed state of MdaiObserver.

func (*MdaiObserverStatus) DeepCopy added in v0.1.21

func (in *MdaiObserverStatus) DeepCopy() *MdaiObserverStatus

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MdaiObserverStatus.

func (*MdaiObserverStatus) DeepCopyInto added in v0.1.21

func (in *MdaiObserverStatus) DeepCopyInto(out *MdaiObserverStatus)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type Observer

type Observer struct {
	// +kubebuilder:validation:Required
	Name string `json:"name" yaml:"name"`
	// +kubebuilder:validation:Required
	LabelResourceAttributes []string `json:"labelResourceAttributes" yaml:"labelResourceAttributes"`
	// +optional
	CountMetricName *string `json:"countMetricName,omitempty" yaml:"countMetricName,omitempty"`
	// +optional
	BytesMetricName *string `json:"bytesMetricName,omitempty" yaml:"bytesMetricName,omitempty"`
	// +optional
	Filter *ObserverFilter `json:"filter,omitempty" yaml:"filter,omitempty"`
}

func (*Observer) DeepCopy

func (in *Observer) DeepCopy() *Observer

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Observer.

func (*Observer) DeepCopyInto

func (in *Observer) DeepCopyInto(out *Observer)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type ObserverFilter

type ObserverFilter struct {
	// +optional
	ErrorMode *string `json:"error_mode" yaml:"error_mode"` //nolint:tagliatelle
	// +optional
	Logs *ObserverLogsFilter `json:"logs" yaml:"logs"`
}

func (*ObserverFilter) DeepCopy

func (in *ObserverFilter) DeepCopy() *ObserverFilter

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ObserverFilter.

func (*ObserverFilter) DeepCopyInto

func (in *ObserverFilter) DeepCopyInto(out *ObserverFilter)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type ObserverLogsFilter

type ObserverLogsFilter struct {
	// +kubebuilder:validation:Required
	LogRecord []string `json:"log_record" yaml:"log_record"` //nolint:tagliatelle
}

func (*ObserverLogsFilter) DeepCopy

func (in *ObserverLogsFilter) DeepCopy() *ObserverLogsFilter

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ObserverLogsFilter.

func (*ObserverLogsFilter) DeepCopyInto

func (in *ObserverLogsFilter) DeepCopyInto(out *ObserverLogsFilter)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type ObserverResource

type ObserverResource struct {
	// +kubebuilder:default="public.ecr.aws/decisiveai/observer-collector:0.1.6"
	// +optional
	Image string `json:"image,omitempty"`
	// +kubebuilder:default=1
	// +optional
	Replicas int32 `json:"replicas,omitempty"`
	// +optional
	Resources *corev1.ResourceRequirements `json:"resources,omitempty"`
	// +optional
	// +kubebuilder:validation:Minimum=1
	GrpcReceiverMaxMsgSize *uint64 `json:"grpcReceiverMaxMsgSize,omitempty"`
	// +optional
	OwnLogsOtlpEndpoint *string `json:"ownLogsOtlpEndpoint,omitempty"`
	// +kubebuilder:default={}
	// +optional
	Tolerations []corev1.Toleration `json:"tolerations,omitempty"`
}

func (*ObserverResource) DeepCopy

func (in *ObserverResource) DeepCopy() *ObserverResource

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ObserverResource.

func (*ObserverResource) DeepCopyInto

func (in *ObserverResource) DeepCopyInto(out *ObserverResource)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type ObserverResourceType

type ObserverResourceType string

type OtelColRef added in v0.2.6

type OtelColRef struct {
	// +kubebuilder:validation:MinLength=1
	Name string `json:"name"`
}

OtelColRef represents reference to Otel Collector Custom Resource

func (*OtelColRef) DeepCopy added in v0.2.6

func (in *OtelColRef) DeepCopy() *OtelColRef

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OtelColRef.

func (*OtelColRef) DeepCopyInto added in v0.2.6

func (in *OtelColRef) DeepCopyInto(out *OtelColRef)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type OtelMdaiIngressComb added in v0.2.1

type OtelMdaiIngressComb struct {
	Otelcol     v1beta1.OpenTelemetryCollector
	MdaiIngress MdaiIngress
}

Config encapsulates collector & ingress config.

func NewOtelIngressConfig added in v0.2.1

func NewOtelIngressConfig(otelcolConfig v1beta1.OpenTelemetryCollector, ingressConfig MdaiIngress) *OtelMdaiIngressComb

func (*OtelMdaiIngressComb) DeepCopy added in v0.2.1

func (in *OtelMdaiIngressComb) DeepCopy() *OtelMdaiIngressComb

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OtelMdaiIngressComb.

func (*OtelMdaiIngressComb) DeepCopyInto added in v0.2.1

func (in *OtelMdaiIngressComb) DeepCopyInto(out *OtelMdaiIngressComb)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*OtelMdaiIngressComb) GetReceiverPortsWithUrlPaths added in v0.2.1

func (c *OtelMdaiIngressComb) GetReceiverPortsWithUrlPaths(logger *zap.Logger) (components.ComponentsPortsUrlPaths, error)

mydecisive

type OtlpLogsConfig added in v0.1.21

type OtlpLogsConfig struct {
	// +optional
	AuditLogs *AuditLogstreamConfig `json:"auditLogs,omitempty" yaml:"auditLogs,omitempty"`
	// +optional
	CollectorLogs *LogstreamConfig `json:"collectorLogs,omitempty" yaml:"collectorLogs,omitempty"`
	// +optional
	HubLogs *LogstreamConfig `json:"hubLogs,omitempty" yaml:"hubLogs,omitempty"`
	// +optional
	OtherLogs *LogstreamConfig `json:"otherLogs,omitempty" yaml:"otherLogs,omitempty"`
	Endpoint  string           `json:"endpoint" yaml:"endpoint"`
}

func (*OtlpLogsConfig) DeepCopy added in v0.1.21

func (in *OtlpLogsConfig) DeepCopy() *OtlpLogsConfig

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OtlpLogsConfig.

func (*OtlpLogsConfig) DeepCopyInto added in v0.1.21

func (in *OtlpLogsConfig) DeepCopyInto(out *OtlpLogsConfig)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type PrometheusAlert

type PrometheusAlert struct {
	// Name How this evaluation will be referred to elsewhere in the config. Also, the name applied to the Prometheus Alert
	// +kubebuilder:validation:Pattern:="^[a-zA-Z_][a-zA-Z0-9_]*$"
	// +kubebuilder:validation:MinLength=1
	// +kubebuilder:validation:Required
	Name string `json:"name" yaml:"name"`
	// +kubebuilder:validation:Required
	Expr intstr.IntOrString `json:"expr" yaml:"expr"`
	// For Alerts are considered firing once they have been returned for this long.
	// +kubebuilder:validation:Optional
	For *prometheusv1.Duration `json:"for,omitempty" yaml:"for,omitempty"`
	// KeepFiringFor defines how long an alert will continue firing after the condition that triggered it has cleared.
	// +kubebuilder:validation:Optional
	KeepFiringFor *prometheusv1.NonEmptyDuration `json:"keep_firing_for,omitempty" yaml:"keep_firing_for,omitempty"` //nolint:tagliatelle
	// +kubebuilder:validation:Pattern:="^(warning|critical)$"
	// +kubebuilder:validation:Required
	Severity string `json:"severity" yaml:"severity"`
}

func (*PrometheusAlert) DeepCopy

func (in *PrometheusAlert) DeepCopy() *PrometheusAlert

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PrometheusAlert.

func (*PrometheusAlert) DeepCopyInto

func (in *PrometheusAlert) DeepCopyInto(out *PrometheusAlert)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type S3LogsConfig

type S3LogsConfig struct {
	// +optional
	AuditLogs *AuditLogstreamConfig `json:"auditLogs,omitempty" yaml:"auditLogs,omitempty"`
	// +optional
	CollectorLogs *LogstreamConfig `json:"collectorLogs,omitempty" yaml:"collectorLogs,omitempty"`
	// +optional
	HubLogs *LogstreamConfig `json:"hubLogs,omitempty" yaml:"hubLogs,omitempty"`
	// +optional
	OtherLogs *LogstreamConfig `json:"otherLogs,omitempty" yaml:"otherLogs,omitempty"`
	S3Region  string           `json:"s3Region" yaml:"s3Region"`
	S3Bucket  string           `json:"s3Bucket" yaml:"s3Bucket"`
}

func (*S3LogsConfig) DeepCopy

func (in *S3LogsConfig) DeepCopy() *S3LogsConfig

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new S3LogsConfig.

func (*S3LogsConfig) DeepCopyInto

func (in *S3LogsConfig) DeepCopyInto(out *S3LogsConfig)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type ScalarAction added in v0.2.0

type ScalarAction struct {
	// Target set variable name
	// +kubebuilder:validation:Pattern:="^[a-zA-Z_][a-zA-Z0-9_]*$"
	// +kubebuilder:validation:MinLength=1
	// +kubebuilder:validation:MaxLength=63
	// +kubebuilder:validation:Required
	Scalar string `json:"scalar"`
	// Value to add (templated string allowed)
	// +kubebuilder:validation:MinLength=1
	Value string `json:"value"`
}

func (*ScalarAction) DeepCopy added in v0.2.0

func (in *ScalarAction) DeepCopy() *ScalarAction

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ScalarAction.

func (*ScalarAction) DeepCopyInto added in v0.2.0

func (in *ScalarAction) DeepCopyInto(out *ScalarAction)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type Serializer

type Serializer struct {
	// Name The environment variable name to be used to access the variable's value.
	// +kubeuilder:validation:Pattern:="^[a-zA-Z_][a-zA-Z0-9_]*$"
	// +kubebuilder:validation:MinLength=1
	// + required
	Name string `json:"name" yaml:"name"`
	// Transformers The transformation applied to the value of the variable in the order provided before it is assigned
	// as an environment variable.
	// +optional
	Transformers []VariableTransformer `json:"transformers,omitempty" yaml:"transformers,omitempty"`
}

func (*Serializer) DeepCopy

func (in *Serializer) DeepCopy() *Serializer

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Serializer.

func (*Serializer) DeepCopyInto

func (in *Serializer) DeepCopyInto(out *Serializer)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type SetAction added in v0.2.0

type SetAction struct {
	// Target set variable name
	// +kubebuilder:validation:Pattern:="^[a-zA-Z_][a-zA-Z0-9_]*$"
	// +kubebuilder:validation:MinLength=1
	// +kubebuilder:validation:MaxLength=63
	// +kubebuilder:validation:Required
	Set string `json:"set"`
	// Value to add (templated string allowed)
	// +kubebuilder:validation:MinLength=1
	Value string `json:"value"`
}

func (*SetAction) DeepCopy added in v0.2.0

func (in *SetAction) DeepCopy() *SetAction

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SetAction.

func (*SetAction) DeepCopyInto added in v0.2.0

func (in *SetAction) DeepCopyInto(out *SetAction)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type SeverityLevel added in v0.1.21

type SeverityLevel string

type StringOrFrom added in v0.2.0

type StringOrFrom struct {
	// +optional
	Value *string `json:"value,omitempty"`
	// +optional
	ValueFrom *ValueFromSource `json:"valueFrom,omitempty"`
}

StringOrFrom represents a string value or a reference to a value in a Secret or ConfigMap. +kubebuilder:validation:XValidation:rule="(has(self.value)?1:0)+(has(self.valueFrom)?1:0)==1",message="set exactly one of value or valueFrom"

func (*StringOrFrom) DeepCopy added in v0.2.0

func (in *StringOrFrom) DeepCopy() *StringOrFrom

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new StringOrFrom.

func (*StringOrFrom) DeepCopyInto added in v0.2.0

func (in *StringOrFrom) DeepCopyInto(out *StringOrFrom)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type TransformerType

type TransformerType string

type ValueFromSource added in v0.2.0

type ValueFromSource struct {
	// +optional
	SecretKeyRef *corev1.SecretKeySelector `json:"secretKeyRef,omitempty"`
	// +optional
	ConfigMapKeyRef *corev1.ConfigMapKeySelector `json:"configMapKeyRef,omitempty"`
}

ValueFromSource refers to a key in a Secret or ConfigMap. +kubebuilder:validation:XValidation:rule="(has(self.secretKeyRef)?1:0)+(has(self.configMapKeyRef)?1:0)==1",message="set exactly one of secretKeyRef or configMapKeyRef"

func (*ValueFromSource) DeepCopy added in v0.2.0

func (in *ValueFromSource) DeepCopy() *ValueFromSource

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ValueFromSource.

func (*ValueFromSource) DeepCopyInto added in v0.2.0

func (in *ValueFromSource) DeepCopyInto(out *ValueFromSource)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type Variable

type Variable struct {
	// Key The key for which this variable's managed value is assigned. Will also be used as the environment variable name for variables of type "string"
	// +kubebuilder:validation:Pattern:="^[a-zA-Z_][a-zA-Z0-9_]*$"
	// +kubebuilder:validation:MinLength=1
	// +kubebuilder:validation:MaxLength=63
	// +kubebuilder:validation:Required
	Key string `json:"key" yaml:"key"`
	// Type for the variable, defaults to "computed" if not provided
	// +kubebuilder:validation:Required
	// +kubebuilder:default="computed"
	// +kubebuilder:validation:Enum:=manual;computed;meta
	Type VariableType `json:"type" yaml:"type"`
	// DataType Data type for the managed variable value
	// +kubebuilder:validation:Required
	// +kubebuilder:validation:Enum:=string;int;set;map;boolean;metaHashSet;metaPriorityList
	DataType VariableDataType `json:"dataType" yaml:"dataType"`
	// StorageType defaults to "mdai-valkey" if not provided
	// +kubebuilder:default="mdai-valkey"
	// +kubebuilder:validation:Enum:=mdai-valkey
	StorageType VariableStorageType `json:"storageType" yaml:"storageType"`
	// VariableRefs name references to other managed variables to be included in meta calculation. Listed variables should be of the same data type.
	// +kubebuilder:validation:Optional
	VariableRefs []string `json:"variableRefs,omitempty" yaml:"variableRefs,omitempty"`
	// +kubebuilder:validation:Required
	// +kubebuilder:validation:MinItems=1
	SerializeAs []Serializer `json:"serializeAs" yaml:"serializeAs"`
}

Variable defines mdai variable +kubebuilder:validation:XValidation:rule="self.type == 'meta' ? self.dataType in ['metaHashSet', 'metaPriorityList'] : self.dataType in ['string', 'int', 'boolean', 'set', 'map']",messageExpression="\"variable '\" + self.key + \"': dataType is not allowed for type specified\"",reason="FieldValueInvalid"

func (*Variable) DeepCopy

func (in *Variable) DeepCopy() *Variable

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Variable.

func (*Variable) DeepCopyInto

func (in *Variable) DeepCopyInto(out *Variable)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type VariableDataType

type VariableDataType string

type VariableSourceType

type VariableSourceType string

type VariableStorageType

type VariableStorageType string

type VariableTransform

type VariableTransform string

type VariableTransformer

type VariableTransformer struct {
	Type TransformerType `json:"type" yaml:"type"`
	// Join For use with "set" or "array" type variables, joins the items of the collection into a string.
	// +optional
	Join *JoinTransformer `json:"join,omitempty" yaml:"join,omitempty"`
}

func (*VariableTransformer) DeepCopy

func (in *VariableTransformer) DeepCopy() *VariableTransformer

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VariableTransformer.

func (*VariableTransformer) DeepCopyInto

func (in *VariableTransformer) DeepCopyInto(out *VariableTransformer)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type VariableType

type VariableType string

type VariableUpdateOperation

type VariableUpdateOperation string

type When added in v0.2.0

type When struct {
	// Variant 1: alert
	// +optional
	AlertName *string `json:"alertName,omitempty"`
	// +optional
	Status *string `json:"status,omitempty"`

	// Variant 2: variable-driven
	// +optional
	VariableUpdated *string `json:"variableUpdated,omitempty"`
	// +optional
	// +kubebuilder:validation:Enum=added;removed;set
	UpdateType *string `json:"updateType,omitempty"`
}

When represents one of two trigger variants:

  1. alertName + status
  2. variableUpdated + UpdateType

Exactly one variant must be set. TODO check the validation logic for this. +kubebuilder:validation:XValidation:rule="(has(self.alertName)) != (has(self.variableUpdated))",message="exactly one variant must be set"

func (*When) DeepCopy added in v0.2.0

func (in *When) DeepCopy() *When

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new When.

func (*When) DeepCopyInto added in v0.2.0

func (in *When) DeepCopyInto(out *When)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL