diff --git a/apis/v1beta1/ingress_type.go b/apis/v1beta1/ingress.go similarity index 53% rename from apis/v1beta1/ingress_type.go rename to apis/v1beta1/ingress.go index 7d248a30d2..8c28d95571 100644 --- a/apis/v1beta1/ingress_type.go +++ b/apis/v1beta1/ingress.go @@ -14,6 +14,8 @@ package v1beta1 +import networkingv1 "k8s.io/api/networking/v1" + type ( // IngressType represents how a collector should be exposed (ingress vs route). // +kubebuilder:validation:Enum=ingress;route @@ -61,3 +63,55 @@ const ( // receiver port. The port name is used as a subdomain for the host defined in the Ingress e.g. otlp-http.example.com. IngressRuleTypeSubdomain IngressRuleType = "subdomain" ) + +// Ingress is used to specify how OpenTelemetry Collector is exposed. This +// functionality is only available if one of the valid modes is set. +// Valid modes are: deployment, daemonset and statefulset. +// NOTE: If this feature is activated, all specified receivers are exposed. +// Currently, this has a few limitations. Depending on the ingress controller +// there are problems with TLS and gRPC. +// SEE: https://github.com/open-telemetry/opentelemetry-operator/issues/1306. +// NOTE: As a workaround, port name and appProtocol could be specified directly +// in the CR. +// SEE: OpenTelemetryCollector.spec.ports[index]. +type Ingress struct { + // Type default value is: "" + // Supported types are: ingress, route + Type IngressType `json:"type,omitempty"` + + // RuleType defines how Ingress exposes collector receivers. + // IngressRuleTypePath ("path") exposes each receiver port on a unique path on single domain defined in Hostname. + // IngressRuleTypeSubdomain ("subdomain") exposes each receiver port on a unique subdomain of Hostname. + // Default is IngressRuleTypePath ("path"). + RuleType IngressRuleType `json:"ruleType,omitempty"` + + // Hostname by which the ingress proxy can be reached. + // +optional + Hostname string `json:"hostname,omitempty"` + + // Annotations to add to ingress. + // e.g. 'cert-manager.io/cluster-issuer: "letsencrypt"' + // +optional + Annotations map[string]string `json:"annotations,omitempty"` + + // TLS configuration. + // +optional + TLS []networkingv1.IngressTLS `json:"tls,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"` + + // Route is an OpenShift specific section that is only considered when + // type "route" is used. + // +optional + Route OpenShiftRoute `json:"route,omitempty"` +} + +// OpenShiftRoute defines openshift route specific settings. +type OpenShiftRoute struct { + // Termination indicates termination type. By default "edge" is used. + Termination TLSRouteTerminationType `json:"termination,omitempty"` +} diff --git a/apis/v1beta1/opentelemetrycollector_types.go b/apis/v1beta1/opentelemetrycollector_types.go index 6982cabab9..53eb93934f 100644 --- a/apis/v1beta1/opentelemetrycollector_types.go +++ b/apis/v1beta1/opentelemetrycollector_types.go @@ -19,98 +19,61 @@ package v1beta1 import ( appsv1 "k8s.io/api/apps/v1" v1 "k8s.io/api/core/v1" - networkingv1 "k8s.io/api/networking/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) -// Probe defines the OpenTelemetry's pod probe config. Only Liveness probe is supported currently. -type Probe struct { - // Number of seconds after the container has started before liveness probes are initiated. - // Defaults to 0 seconds. Minimum value is 0. - // More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes - // +optional - InitialDelaySeconds *int32 `json:"initialDelaySeconds,omitempty"` - // Number of seconds after which the probe times out. - // Defaults to 1 second. Minimum value is 1. - // More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes - // +optional - TimeoutSeconds *int32 `json:"timeoutSeconds,omitempty"` - // How often (in seconds) to perform the probe. - // Default to 10 seconds. Minimum value is 1. - // +optional - PeriodSeconds *int32 `json:"periodSeconds,omitempty"` - // Minimum consecutive successes for the probe to be considered successful after having failed. - // Defaults to 1. Must be 1 for liveness and startup. Minimum value is 1. - // +optional - SuccessThreshold *int32 `json:"successThreshold,omitempty"` - // Minimum consecutive failures for the probe to be considered failed after having succeeded. - // Defaults to 3. Minimum value is 1. - // +optional - FailureThreshold *int32 `json:"failureThreshold,omitempty"` - // Optional duration in seconds the pod needs to terminate gracefully upon probe failure. - // The grace period is the duration in seconds after the processes running in the pod are sent - // a termination signal and the time when the processes are forcibly halted with a kill signal. - // Set this value longer than the expected cleanup time for your process. - // If this value is nil, the pod's terminationGracePeriodSeconds will be used. Otherwise, this - // value overrides the value provided by the pod spec. - // Value must be non-negative integer. The value zero indicates stop immediately via - // the kill signal (no opportunity to shut down). - // This is a beta field and requires enabling ProbeTerminationGracePeriod feature gate. - // Minimum value is 1. spec.terminationGracePeriodSeconds is used if unset. - // +optional - TerminationGracePeriodSeconds *int64 `json:"terminationGracePeriodSeconds,omitempty"` +func init() { + SchemeBuilder.Register(&OpenTelemetryCollector{}, &OpenTelemetryCollectorList{}) } -// Ingress is used to specify how OpenTelemetry Collector is exposed. This -// functionality is only available if one of the valid modes is set. -// Valid modes are: deployment, daemonset and statefulset. -// NOTE: If this feature is activated, all specified receivers are exposed. -// Currently, this has a few limitations. Depending on the ingress controller -// there are problems with TLS and gRPC. -// SEE: https://github.com/open-telemetry/opentelemetry-operator/issues/1306. -// NOTE: As a workaround, port name and appProtocol could be specified directly -// in the CR. -// SEE: OpenTelemetryCollector.spec.ports[index]. -type Ingress struct { - // Type default value is: "" - // Supported types are: ingress, route - Type IngressType `json:"type,omitempty"` +// +kubebuilder:object:root=true +// +kubebuilder:resource:shortName=otelcol;otelcols +// +kubebuilder:subresource:status +// +kubebuilder:subresource:scale:specpath=.spec.replicas,statuspath=.status.scale.replicas,selectorpath=.status.scale.selector +// +kubebuilder:printcolumn:name="Mode",type="string",JSONPath=".spec.mode",description="Deployment Mode" +// +kubebuilder:printcolumn:name="Version",type="string",JSONPath=".status.version",description="OpenTelemetry Version" +// +kubebuilder:printcolumn:name="Ready",type="string",JSONPath=".status.scale.statusReplicas" +// +kubebuilder:printcolumn:name="Age",type="date",JSONPath=".metadata.creationTimestamp" +// +kubebuilder:printcolumn:name="Image",type="string",JSONPath=".status.image" +// +kubebuilder:printcolumn:name="Management",type="string",JSONPath=".spec.managementState",description="Management State" +// +operator-sdk:csv:customresourcedefinitions:displayName="OpenTelemetry Collector" +// This annotation provides a hint for OLM which resources are managed by OpenTelemetryCollector kind. +// It's not mandatory to list all resources. +// +operator-sdk:csv:customresourcedefinitions:resources={{Pod,v1},{Deployment,apps/v1},{DaemonSets,apps/v1},{StatefulSets,apps/v1},{ConfigMaps,v1},{Service,v1}} + +// OpenTelemetryCollector is the Schema for the opentelemetrycollectors API. +type OpenTelemetryCollector struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` - // RuleType defines how Ingress exposes collector receivers. - // IngressRuleTypePath ("path") exposes each receiver port on a unique path on single domain defined in Hostname. - // IngressRuleTypeSubdomain ("subdomain") exposes each receiver port on a unique subdomain of Hostname. - // Default is IngressRuleTypePath ("path"). - RuleType IngressRuleType `json:"ruleType,omitempty"` + Spec OpenTelemetryCollectorSpec `json:"spec,omitempty"` + Status OpenTelemetryCollectorStatus `json:"status,omitempty"` +} - // Hostname by which the ingress proxy can be reached. - // +optional - Hostname string `json:"hostname,omitempty"` +func (*OpenTelemetryCollector) Hub() {} - // Annotations to add to ingress. - // e.g. 'cert-manager.io/cluster-issuer: "letsencrypt"' - // +optional - Annotations map[string]string `json:"annotations,omitempty"` +//+kubebuilder:object:root=true - // TLS configuration. - // +optional - TLS []networkingv1.IngressTLS `json:"tls,omitempty"` +// OpenTelemetryCollectorList contains a list of OpenTelemetryCollector. +type OpenTelemetryCollectorList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty"` + Items []OpenTelemetryCollector `json:"items"` +} - // 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. +// OpenTelemetryCollectorStatus defines the observed state of OpenTelemetryCollector. +type OpenTelemetryCollectorStatus struct { + // Scale is the OpenTelemetryCollector's scale subresource status. // +optional - IngressClassName *string `json:"ingressClassName,omitempty"` + Scale ScaleSubresourceStatus `json:"scale,omitempty"` - // Route is an OpenShift specific section that is only considered when - // type "route" is used. + // Version of the managed OpenTelemetry Collector (operand) // +optional - Route OpenShiftRoute `json:"route,omitempty"` -} + Version string `json:"version,omitempty"` -// OpenShiftRoute defines openshift route specific settings. -type OpenShiftRoute struct { - // Termination indicates termination type. By default "edge" is used. - Termination TLSRouteTerminationType `json:"termination,omitempty"` + // Image indicates the container image to use for the OpenTelemetry Collector. + // +optional + Image string `json:"image,omitempty"` } // OpenTelemetryCollectorSpec defines the desired state of OpenTelemetryCollector. @@ -242,19 +205,42 @@ type TargetAllocatorEmbedded struct { PodDisruptionBudget *PodDisruptionBudgetSpec `json:"podDisruptionBudget,omitempty"` } -// OpenTelemetryCollectorStatus defines the observed state of OpenTelemetryCollector. -type OpenTelemetryCollectorStatus struct { - // Scale is the OpenTelemetryCollector's scale subresource status. +// Probe defines the OpenTelemetry's pod probe config. Only Liveness probe is supported currently. +type Probe struct { + // Number of seconds after the container has started before liveness probes are initiated. + // Defaults to 0 seconds. Minimum value is 0. + // More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes // +optional - Scale ScaleSubresourceStatus `json:"scale,omitempty"` - - // Version of the managed OpenTelemetry Collector (operand) + InitialDelaySeconds *int32 `json:"initialDelaySeconds,omitempty"` + // Number of seconds after which the probe times out. + // Defaults to 1 second. Minimum value is 1. + // More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes // +optional - Version string `json:"version,omitempty"` - - // Image indicates the container image to use for the OpenTelemetry Collector. + TimeoutSeconds *int32 `json:"timeoutSeconds,omitempty"` + // How often (in seconds) to perform the probe. + // Default to 10 seconds. Minimum value is 1. // +optional - Image string `json:"image,omitempty"` + PeriodSeconds *int32 `json:"periodSeconds,omitempty"` + // Minimum consecutive successes for the probe to be considered successful after having failed. + // Defaults to 1. Must be 1 for liveness and startup. Minimum value is 1. + // +optional + SuccessThreshold *int32 `json:"successThreshold,omitempty"` + // Minimum consecutive failures for the probe to be considered failed after having succeeded. + // Defaults to 3. Minimum value is 1. + // +optional + FailureThreshold *int32 `json:"failureThreshold,omitempty"` + // Optional duration in seconds the pod needs to terminate gracefully upon probe failure. + // The grace period is the duration in seconds after the processes running in the pod are sent + // a termination signal and the time when the processes are forcibly halted with a kill signal. + // Set this value longer than the expected cleanup time for your process. + // If this value is nil, the pod's terminationGracePeriodSeconds will be used. Otherwise, this + // value overrides the value provided by the pod spec. + // Value must be non-negative integer. The value zero indicates stop immediately via + // the kill signal (no opportunity to shut down). + // This is a beta field and requires enabling ProbeTerminationGracePeriod feature gate. + // Minimum value is 1. spec.terminationGracePeriodSeconds is used if unset. + // +optional + TerminationGracePeriodSeconds *int64 `json:"terminationGracePeriodSeconds,omitempty"` } // ObservabilitySpec defines how telemetry data gets handled. @@ -309,42 +295,3 @@ type ConfigMapsSpec struct { Name string `json:"name"` MountPath string `json:"mountpath"` } - -// +kubebuilder:object:root=true -// +kubebuilder:resource:shortName=otelcol;otelcols -// +kubebuilder:subresource:status -// +kubebuilder:subresource:scale:specpath=.spec.replicas,statuspath=.status.scale.replicas,selectorpath=.status.scale.selector -// +kubebuilder:printcolumn:name="Mode",type="string",JSONPath=".spec.mode",description="Deployment Mode" -// +kubebuilder:printcolumn:name="Version",type="string",JSONPath=".status.version",description="OpenTelemetry Version" -// +kubebuilder:printcolumn:name="Ready",type="string",JSONPath=".status.scale.statusReplicas" -// +kubebuilder:printcolumn:name="Age",type="date",JSONPath=".metadata.creationTimestamp" -// +kubebuilder:printcolumn:name="Image",type="string",JSONPath=".status.image" -// +kubebuilder:printcolumn:name="Management",type="string",JSONPath=".spec.managementState",description="Management State" -// +operator-sdk:csv:customresourcedefinitions:displayName="OpenTelemetry Collector" -// This annotation provides a hint for OLM which resources are managed by OpenTelemetryCollector kind. -// It's not mandatory to list all resources. -// +operator-sdk:csv:customresourcedefinitions:resources={{Pod,v1},{Deployment,apps/v1},{DaemonSets,apps/v1},{StatefulSets,apps/v1},{ConfigMaps,v1},{Service,v1}} - -// OpenTelemetryCollector is the Schema for the opentelemetrycollectors API. -type OpenTelemetryCollector struct { - metav1.TypeMeta `json:",inline"` - metav1.ObjectMeta `json:"metadata,omitempty"` - - Spec OpenTelemetryCollectorSpec `json:"spec,omitempty"` - Status OpenTelemetryCollectorStatus `json:"status,omitempty"` -} - -func (*OpenTelemetryCollector) Hub() {} - -//+kubebuilder:object:root=true - -// OpenTelemetryCollectorList contains a list of OpenTelemetryCollector. -type OpenTelemetryCollectorList struct { - metav1.TypeMeta `json:",inline"` - metav1.ListMeta `json:"metadata,omitempty"` - Items []OpenTelemetryCollector `json:"items"` -} - -func init() { - SchemeBuilder.Register(&OpenTelemetryCollector{}, &OpenTelemetryCollectorList{}) -} diff --git a/apis/v1beta1/targetallocator_types.go b/apis/v1beta1/targetallocator_types.go index cce7b30e09..7185a75576 100644 --- a/apis/v1beta1/targetallocator_types.go +++ b/apis/v1beta1/targetallocator_types.go @@ -20,6 +20,42 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) +func init() { + SchemeBuilder.Register(&TargetAllocator{}, &TargetAllocatorList{}) +} + +//+kubebuilder:object:root=true +//+kubebuilder:subresource:status + +// TargetAllocator is the Schema for the targetallocators API. +type TargetAllocator struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + + Spec TargetAllocatorSpec `json:"spec,omitempty"` + Status TargetAllocatorStatus `json:"status,omitempty"` +} + +//+kubebuilder:object:root=true + +// TargetAllocatorList contains a list of TargetAllocator. +type TargetAllocatorList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty"` + Items []OpenTelemetryCollector `json:"items"` +} + +// TargetAllocatorStatus defines the observed state of Target Allocator. +type TargetAllocatorStatus struct { + // Version of the managed Target Allocator (operand) + // +optional + Version string `json:"version,omitempty"` + + // Image indicates the container image to use for the Target Allocator. + // +optional + Image string `json:"image,omitempty"` +} + // TargetAllocatorSpec defines the desired state of TargetAllocator. type TargetAllocatorSpec struct { // Common defines fields that are common to all OpenTelemetry CRD workloads. @@ -71,39 +107,3 @@ type TargetAllocatorPrometheusCR struct { // +optional ServiceMonitorSelector *metav1.LabelSelector `json:"serviceMonitorSelector,omitempty"` } - -// TargetAllocatorStatus defines the observed state of Target Allocator. -type TargetAllocatorStatus struct { - // Version of the managed Target Allocator (operand) - // +optional - Version string `json:"version,omitempty"` - - // Image indicates the container image to use for the Target Allocator. - // +optional - Image string `json:"image,omitempty"` -} - -//+kubebuilder:object:root=true -//+kubebuilder:subresource:status - -// TargetAllocator is the Schema for the targetallocators API. -type TargetAllocator struct { - metav1.TypeMeta `json:",inline"` - metav1.ObjectMeta `json:"metadata,omitempty"` - - Spec TargetAllocatorSpec `json:"spec,omitempty"` - Status TargetAllocatorStatus `json:"status,omitempty"` -} - -//+kubebuilder:object:root=true - -// TargetAllocatorList contains a list of TargetAllocator. -type TargetAllocatorList struct { - metav1.TypeMeta `json:",inline"` - metav1.ListMeta `json:"metadata,omitempty"` - Items []OpenTelemetryCollector `json:"items"` -} - -func init() { - SchemeBuilder.Register(&TargetAllocator{}, &TargetAllocatorList{}) -}