From ce960ca94f5ae9729b2fd9009619388d6f4cbb9a Mon Sep 17 00:00:00 2001 From: Yuri Sa Date: Mon, 1 Jul 2024 15:32:56 +0200 Subject: [PATCH 1/4] Added IpFamily and IpFamilyPolicy Signed-off-by: Yuri Sa --- .chloggen/add-ip-families.yaml | 16 +++++ apis/v1alpha1/opampbridge_types.go | 6 ++ apis/v1alpha1/zz_generated.deepcopy.go | 5 ++ apis/v1beta1/common.go | 10 +++ apis/v1beta1/zz_generated.deepcopy.go | 5 ++ .../opentelemetry.io_opampbridges.yaml | 6 ++ ...ntelemetry.io_opentelemetrycollectors.yaml | 9 +++ .../bases/opentelemetry.io_opampbridges.yaml | 6 ++ ...ntelemetry.io_opentelemetrycollectors.yaml | 9 +++ .../opentelemetry.io_targetallocators.yaml | 9 +++ controllers/builder_test.go | 15 +++-- docs/api.md | 34 ++++++++++ internal/manifests/collector/service.go | 4 ++ internal/manifests/collector/service_test.go | 37 +++++++++++ internal/manifests/opampbridge/service.go | 6 +- internal/manifests/targetallocator/service.go | 2 + tests/e2e/smoke-ip-families/00-assert.yaml | 63 ++++++++++++++++++ tests/e2e/smoke-ip-families/00-install.yaml | 28 ++++++++ tests/e2e/smoke-ip-families/01-assert.yaml | 64 +++++++++++++++++++ tests/e2e/smoke-ip-families/01-install.yaml | 28 ++++++++ .../e2e/smoke-ip-families/chainsaw-test.yaml | 20 ++++++ 21 files changed, 375 insertions(+), 7 deletions(-) create mode 100755 .chloggen/add-ip-families.yaml create mode 100644 tests/e2e/smoke-ip-families/00-assert.yaml create mode 100644 tests/e2e/smoke-ip-families/00-install.yaml create mode 100644 tests/e2e/smoke-ip-families/01-assert.yaml create mode 100644 tests/e2e/smoke-ip-families/01-install.yaml create mode 100755 tests/e2e/smoke-ip-families/chainsaw-test.yaml diff --git a/.chloggen/add-ip-families.yaml b/.chloggen/add-ip-families.yaml new file mode 100755 index 0000000000..bd4f68db2f --- /dev/null +++ b/.chloggen/add-ip-families.yaml @@ -0,0 +1,16 @@ +# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix' +change_type: 'enhancement' + +# The name of the component, or a single word describing the area of concern, (e.g. collector, target allocator, auto-instrumentation, opamp, github action) +component: 'collector' + +# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). +note: "Enabling ipFamilies and ipFamilyPolicy to be configured via OpenTelemetryCollector" + +# One or more tracking issues related to the change +issues: [2958] + +# (Optional) One or more lines of additional information to render under the primary note. +# These lines will be padded with 2 spaces and then inserted directly into the document. +# Use pipe (|) for multiline entries. +subtext: diff --git a/apis/v1alpha1/opampbridge_types.go b/apis/v1alpha1/opampbridge_types.go index e8ee0e52e6..cf16c4b48b 100644 --- a/apis/v1alpha1/opampbridge_types.go +++ b/apis/v1alpha1/opampbridge_types.go @@ -107,6 +107,12 @@ type OpAMPBridgeSpec struct { TopologySpreadConstraints []v1.TopologySpreadConstraint `json:"topologySpreadConstraints,omitempty"` // PodDNSConfig defines the DNS parameters of a pod in addition to those generated from DNSPolicy. PodDNSConfig v1.PodDNSConfig `json:"podDnsConfig,omitempty"` + // IPFamily represents the IP Family (IPv4 or IPv6). This type is used + // to express the family of an IP expressed by a type (e.g. service.spec.ipFamilies). + // +optional + IpFamilies []v1.IPFamily `json:"ipFamilies,omitempty"` + // IPFamilyPolicy represents the dual-stack-ness requested or required by a Service + IpFamilyPolicy v1.IPFamilyPolicy `json:"ipFamilyPolicy,omitempty"` } // OpAMPBridgeStatus defines the observed state of OpAMPBridge. diff --git a/apis/v1alpha1/zz_generated.deepcopy.go b/apis/v1alpha1/zz_generated.deepcopy.go index 086fafcfd2..2a379e8f35 100644 --- a/apis/v1alpha1/zz_generated.deepcopy.go +++ b/apis/v1alpha1/zz_generated.deepcopy.go @@ -681,6 +681,11 @@ func (in *OpAMPBridgeSpec) DeepCopyInto(out *OpAMPBridgeSpec) { } } in.PodDNSConfig.DeepCopyInto(&out.PodDNSConfig) + if in.IpFamilies != nil { + in, out := &in.IpFamilies, &out.IpFamilies + *out = make([]v1.IPFamily, len(*in)) + copy(*out, *in) + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OpAMPBridgeSpec. diff --git a/apis/v1beta1/common.go b/apis/v1beta1/common.go index 374f5a2a82..29d06552d6 100644 --- a/apis/v1beta1/common.go +++ b/apis/v1beta1/common.go @@ -226,6 +226,16 @@ type OpenTelemetryCommonFields struct { AdditionalContainers []v1.Container `json:"additionalContainers,omitempty"` // PodDNSConfig defines the DNS parameters of a pod in addition to those generated from DNSPolicy. PodDNSConfig v1.PodDNSConfig `json:"podDnsConfig,omitempty"` + // IPFamily represents the IP Family (IPv4 or IPv6). This type is used + // to express the family of an IP expressed by a type (e.g. service.spec.ipFamilies). + // +kubebuilder:default:=IPv4 + // +optional + // +listType=atomic + IpFamilies []v1.IPFamily `json:"ipFamilies,omitempty"` + // IPFamilyPolicy represents the dual-stack-ness requested or required by a Service + // +kubebuilder:default:=SingleStack + // +optional + IpFamilyPolicy v1.IPFamilyPolicy `json:"ipFamilyPolicy,omitempty"` } type StatefulSetCommonFields struct { diff --git a/apis/v1beta1/zz_generated.deepcopy.go b/apis/v1beta1/zz_generated.deepcopy.go index cff0c978e3..c01e48159f 100644 --- a/apis/v1beta1/zz_generated.deepcopy.go +++ b/apis/v1beta1/zz_generated.deepcopy.go @@ -477,6 +477,11 @@ func (in *OpenTelemetryCommonFields) DeepCopyInto(out *OpenTelemetryCommonFields } } in.PodDNSConfig.DeepCopyInto(&out.PodDNSConfig) + if in.IpFamilies != nil { + in, out := &in.IpFamilies, &out.IpFamilies + *out = make([]v1.IPFamily, len(*in)) + copy(*out, *in) + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OpenTelemetryCommonFields. diff --git a/bundle/manifests/opentelemetry.io_opampbridges.yaml b/bundle/manifests/opentelemetry.io_opampbridges.yaml index 6e7a42fd34..f20a9de845 100644 --- a/bundle/manifests/opentelemetry.io_opampbridges.yaml +++ b/bundle/manifests/opentelemetry.io_opampbridges.yaml @@ -592,6 +592,12 @@ spec: type: string imagePullPolicy: type: string + ipFamilies: + items: + type: string + type: array + ipFamilyPolicy: + type: string nodeSelector: additionalProperties: type: string diff --git a/bundle/manifests/opentelemetry.io_opentelemetrycollectors.yaml b/bundle/manifests/opentelemetry.io_opentelemetrycollectors.yaml index af08b8e91c..f4f443f45e 100644 --- a/bundle/manifests/opentelemetry.io_opentelemetrycollectors.yaml +++ b/bundle/manifests/opentelemetry.io_opentelemetrycollectors.yaml @@ -6740,6 +6740,15 @@ spec: - name type: object type: array + ipFamilies: + default: IPv4 + items: + type: string + type: array + x-kubernetes-list-type: atomic + ipFamilyPolicy: + default: SingleStack + type: string lifecycle: properties: postStart: diff --git a/config/crd/bases/opentelemetry.io_opampbridges.yaml b/config/crd/bases/opentelemetry.io_opampbridges.yaml index 181f2f2d1c..7e789c115f 100644 --- a/config/crd/bases/opentelemetry.io_opampbridges.yaml +++ b/config/crd/bases/opentelemetry.io_opampbridges.yaml @@ -589,6 +589,12 @@ spec: type: string imagePullPolicy: type: string + ipFamilies: + items: + type: string + type: array + ipFamilyPolicy: + type: string nodeSelector: additionalProperties: type: string diff --git a/config/crd/bases/opentelemetry.io_opentelemetrycollectors.yaml b/config/crd/bases/opentelemetry.io_opentelemetrycollectors.yaml index 445cc211e5..5bdadbfa54 100644 --- a/config/crd/bases/opentelemetry.io_opentelemetrycollectors.yaml +++ b/config/crd/bases/opentelemetry.io_opentelemetrycollectors.yaml @@ -6726,6 +6726,15 @@ spec: - name type: object type: array + ipFamilies: + default: IPv4 + items: + type: string + type: array + x-kubernetes-list-type: atomic + ipFamilyPolicy: + default: SingleStack + type: string lifecycle: properties: postStart: diff --git a/config/crd/bases/opentelemetry.io_targetallocators.yaml b/config/crd/bases/opentelemetry.io_targetallocators.yaml index 27e6c74678..a35e859837 100644 --- a/config/crd/bases/opentelemetry.io_targetallocators.yaml +++ b/config/crd/bases/opentelemetry.io_targetallocators.yaml @@ -1929,6 +1929,15 @@ spec: - name type: object type: array + ipFamilies: + default: IPv4 + items: + type: string + type: array + x-kubernetes-list-type: atomic + ipFamilyPolicy: + default: SingleStack + type: string lifecycle: properties: postStart: diff --git a/controllers/builder_test.go b/controllers/builder_test.go index 12304494bc..5086d55da7 100644 --- a/controllers/builder_test.go +++ b/controllers/builder_test.go @@ -1088,7 +1088,8 @@ endpoint: ws://opamp-server:4320/v1/opamp TargetPort: intstr.FromInt(8080), }, }, - Selector: opampbridgeSelectorLabels, + Selector: opampbridgeSelectorLabels, + IPFamilies: []corev1.IPFamily{}, }, }, }, @@ -1352,7 +1353,8 @@ service: Port: 8888, }, }, - Selector: selectorLabels, + Selector: selectorLabels, + IPFamilies: []corev1.IPFamily{}, }, }, &corev1.ConfigMap{ @@ -1547,7 +1549,8 @@ prometheus_cr: }, }, }, - Selector: taSelectorLabels, + Selector: taSelectorLabels, + IPFamilies: []corev1.IPFamily{}, }, }, }, @@ -1748,7 +1751,8 @@ prometheus_cr: Port: 8888, }, }, - Selector: selectorLabels, + Selector: selectorLabels, + IPFamilies: []corev1.IPFamily{}, }, }, &corev1.ConfigMap{ @@ -1943,7 +1947,8 @@ prometheus_cr: }, }, }, - Selector: taSelectorLabels, + Selector: taSelectorLabels, + IPFamilies: []corev1.IPFamily{}, }, }, &monitoringv1.ServiceMonitor{ diff --git a/docs/api.md b/docs/api.md index ab8e1a0b02..7ed8bc0024 100644 --- a/docs/api.md +++ b/docs/api.md @@ -4183,6 +4183,21 @@ typically used to set access tokens or other authorization headers.
ImagePullPolicy indicates the pull policy to be used for retrieving the container image (Always, Never, IfNotPresent)
false + + ipFamilies + []string + + IPFamily represents the IP Family (IPv4 or IPv6). This type is used +to express the family of an IP expressed by a type (e.g. service.spec.ipFamilies).
+ + false + + ipFamilyPolicy + string + + IPFamilyPolicy represents the dual-stack-ness requested or required by a Service
+ + false nodeSelector map[string]string @@ -30936,6 +30951,25 @@ an initContainer will lead to a restart of the Pod. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/
false + + ipFamilies + []string + + IPFamily represents the IP Family (IPv4 or IPv6). This type is used +to express the family of an IP expressed by a type (e.g. service.spec.ipFamilies).
+
+ Default: IPv4
+ + false + + ipFamilyPolicy + string + + IPFamilyPolicy represents the dual-stack-ness requested or required by a Service
+
+ Default: SingleStack
+ + false lifecycle object diff --git a/internal/manifests/collector/service.go b/internal/manifests/collector/service.go index d66e4bfe99..812d513871 100644 --- a/internal/manifests/collector/service.go +++ b/internal/manifests/collector/service.go @@ -98,6 +98,8 @@ func MonitoringService(params manifests.Params) (*corev1.Service, error) { Name: "monitoring", Port: metricsPort, }}, + IPFamilies: params.OtelCol.Spec.IpFamilies, + IPFamilyPolicy: ¶ms.OtelCol.Spec.IpFamilyPolicy, }, }, nil } @@ -175,6 +177,8 @@ func Service(params manifests.Params) (*corev1.Service, error) { Selector: manifestutils.SelectorLabels(params.OtelCol.ObjectMeta, ComponentOpenTelemetryCollector), ClusterIP: "", Ports: ports, + IPFamilies: params.OtelCol.Spec.IpFamilies, + IPFamilyPolicy: ¶ms.OtelCol.Spec.IpFamilyPolicy, }, }, nil } diff --git a/internal/manifests/collector/service_test.go b/internal/manifests/collector/service_test.go index 2a5cd8d08f..5d9ab71056 100644 --- a/internal/manifests/collector/service_test.go +++ b/internal/manifests/collector/service_test.go @@ -308,3 +308,40 @@ func serviceWithInternalTrafficPolicy(name string, ports []v1beta1.PortsSpec, in }, } } + +func TestServiceWithIpFamily(t *testing.T) { + t.Run("should return IPFamilies for IPV4 and IPV6", func(t *testing.T) { + params := deploymentParams() + params.OtelCol.Spec.IpFamilies = []v1.IPFamily{ + "IPv4", + "IPv6", + } + actual, err := Service(params) + assert.NoError(t, err) + assert.Equal(t, actual.Spec.IPFamilies, []v1.IPFamily{ + "IPv4", + "IPv6", + }) + }) + t.Run("should return IPPolicy SingleStack", func(t *testing.T) { + params := deploymentParams() + params.OtelCol.Spec.IpFamilyPolicy = v1.IPFamilyPolicySingleStack + actual, err := Service(params) + assert.NoError(t, err) + assert.Equal(t, actual.Spec.IPFamilyPolicy, ¶ms.OtelCol.Spec.IpFamilyPolicy) + }) + t.Run("should return IPPolicy PreferDualStack", func(t *testing.T) { + params := deploymentParams() + params.OtelCol.Spec.IpFamilyPolicy = v1.IPFamilyPolicyPreferDualStack + actual, err := Service(params) + assert.NoError(t, err) + assert.Equal(t, actual.Spec.IPFamilyPolicy, ¶ms.OtelCol.Spec.IpFamilyPolicy) + }) + t.Run("should return IPPolicy RequireDualStack ", func(t *testing.T) { + params := deploymentParams() + params.OtelCol.Spec.IpFamilyPolicy = v1.IPFamilyPolicyRequireDualStack + actual, err := Service(params) + assert.NoError(t, err) + assert.Equal(t, actual.Spec.IPFamilyPolicy, ¶ms.OtelCol.Spec.IpFamilyPolicy) + }) +} diff --git a/internal/manifests/opampbridge/service.go b/internal/manifests/opampbridge/service.go index 0c2a7dd9a0..0829a76486 100644 --- a/internal/manifests/opampbridge/service.go +++ b/internal/manifests/opampbridge/service.go @@ -44,8 +44,10 @@ func Service(params manifests.Params) *corev1.Service { Labels: labels, }, Spec: corev1.ServiceSpec{ - Selector: selector, - Ports: ports, + Selector: selector, + Ports: ports, + IPFamilies: params.OpAMPBridge.Spec.IpFamilies, + IPFamilyPolicy: ¶ms.OpAMPBridge.Spec.IpFamilyPolicy, }, } } diff --git a/internal/manifests/targetallocator/service.go b/internal/manifests/targetallocator/service.go index c31cb927d5..8b8119d40f 100644 --- a/internal/manifests/targetallocator/service.go +++ b/internal/manifests/targetallocator/service.go @@ -41,6 +41,8 @@ func Service(params Params) *corev1.Service { Port: 80, TargetPort: intstr.FromString("http"), }}, + IPFamilies: params.TargetAllocator.Spec.IpFamilies, + IPFamilyPolicy: ¶ms.TargetAllocator.Spec.IpFamilyPolicy, }, } } diff --git a/tests/e2e/smoke-ip-families/00-assert.yaml b/tests/e2e/smoke-ip-families/00-assert.yaml new file mode 100644 index 0000000000..26f994bcc8 --- /dev/null +++ b/tests/e2e/smoke-ip-families/00-assert.yaml @@ -0,0 +1,63 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: simplest-ipfamily-collector +status: + readyReplicas: 1 + +--- + +apiVersion: v1 +kind: Service +metadata: + name: simplest-ipfamily-collector-headless +spec: + ipFamilies: + - IPv4 + ipFamilyPolicy: + - SingleStack + ports: + - appProtocol: grpc + name: jaeger-grpc + port: 14250 + protocol: TCP + targetPort: 14250 + - appProtocol: grpc + name: otlp-grpc + port: 4317 + protocol: TCP + targetPort: 4317 + - appProtocol: http + name: otlp-http + port: 4318 + protocol: TCP + targetPort: 4318 + +--- + +apiVersion: v1 +kind: Service +metadata: + name: simplest-ipfamily-collector +spec: + ipFamilies: + - IPv4 + - IPv6 + ipFamilyPolicy: + - PreferDualStack + ports: + - appProtocol: grpc + name: jaeger-grpc + port: 14250 + protocol: TCP + targetPort: 14250 + - appProtocol: grpc + name: otlp-grpc + port: 4317 + protocol: TCP + targetPort: 4317 + - appProtocol: http + name: otlp-http + port: 4318 + protocol: TCP + targetPort: 4318 diff --git a/tests/e2e/smoke-ip-families/00-install.yaml b/tests/e2e/smoke-ip-families/00-install.yaml new file mode 100644 index 0000000000..809d978caa --- /dev/null +++ b/tests/e2e/smoke-ip-families/00-install.yaml @@ -0,0 +1,28 @@ +apiVersion: opentelemetry.io/v1beta1 +kind: OpenTelemetryCollector +metadata: + name: simplest-ipfamily +spec: + ipFamilies: + - IPv4 + ipFamilyPolicy: SingleStack + config: + receivers: + jaeger: + protocols: + grpc: + otlp: + protocols: + grpc: + http: + processors: + + exporters: + debug: + + service: + pipelines: + traces: + receivers: [jaeger, otlp] + processors: [] + exporters: [debug] diff --git a/tests/e2e/smoke-ip-families/01-assert.yaml b/tests/e2e/smoke-ip-families/01-assert.yaml new file mode 100644 index 0000000000..a3b31252e2 --- /dev/null +++ b/tests/e2e/smoke-ip-families/01-assert.yaml @@ -0,0 +1,64 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: simplest-ippolicy-collector +status: + readyReplicas: 1 + +--- + +apiVersion: v1 +kind: Service +metadata: + name: simplest-ippolicy-collector-headless +spec: + ipFamilies: + - IPv4 + - IPv6 + ippolicyPolicy: + - PreferDualStack + ports: + - appProtocol: grpc + name: jaeger-grpc + port: 14250 + protocol: TCP + targetPort: 14250 + - appProtocol: grpc + name: otlp-grpc + port: 4317 + protocol: TCP + targetPort: 4317 + - appProtocol: http + name: otlp-http + port: 4318 + protocol: TCP + targetPort: 4318 + +--- + +apiVersion: v1 +kind: Service +metadata: + name: simplest-ippolicy-collector +spec: + ipFamilies: + - IPv4 + - IPv6 + ippolicyPolicy: + - PreferDualStack + ports: + - appProtocol: grpc + name: jaeger-grpc + port: 14250 + protocol: TCP + targetPort: 14250 + - appProtocol: grpc + name: otlp-grpc + port: 4317 + protocol: TCP + targetPort: 4317 + - appProtocol: http + name: otlp-http + port: 4318 + protocol: TCP + targetPort: 4318 diff --git a/tests/e2e/smoke-ip-families/01-install.yaml b/tests/e2e/smoke-ip-families/01-install.yaml new file mode 100644 index 0000000000..3791628859 --- /dev/null +++ b/tests/e2e/smoke-ip-families/01-install.yaml @@ -0,0 +1,28 @@ +apiVersion: opentelemetry.io/v1beta1 +kind: OpenTelemetryCollector +metadata: + name: simplest-ippolicy +spec: + ipFamilies: + - IPv4 + ipFamilyPolicy: PreferDualStack + config: + receivers: + jaeger: + protocols: + grpc: + otlp: + protocols: + grpc: + http: + processors: + + exporters: + debug: + + service: + pipelines: + traces: + receivers: [jaeger, otlp] + processors: [] + exporters: [debug] diff --git a/tests/e2e/smoke-ip-families/chainsaw-test.yaml b/tests/e2e/smoke-ip-families/chainsaw-test.yaml new file mode 100755 index 0000000000..c8cf14641c --- /dev/null +++ b/tests/e2e/smoke-ip-families/chainsaw-test.yaml @@ -0,0 +1,20 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/kyverno/chainsaw/main/.schemas/json/test-chainsaw-v1alpha1.json +apiVersion: chainsaw.kyverno.io/v1alpha1 +kind: Test +metadata: + creationTimestamp: null + name: smoke-ip-families-policies +spec: + steps: + - name: step-00 + try: + - apply: + file: 00-install.yaml + - assert: + file: 00-assert.yaml + - name: step-01 + try: + - apply: + file: 01-install.yaml + - assert: + file: 01-assert.yaml From ae5da1ffe602f0dd9cf19c88a2e10c282106c47a Mon Sep 17 00:00:00 2001 From: Yuri Sa Date: Tue, 2 Jul 2024 17:58:30 +0200 Subject: [PATCH 2/4] Added IpFamily and IpFamilyPolicy Signed-off-by: Yuri Sa --- apis/v1alpha1/opampbridge_types.go | 2 +- apis/v1alpha1/zz_generated.deepcopy.go | 5 +++++ apis/v1beta1/common.go | 6 +++--- apis/v1beta1/zz_generated.deepcopy.go | 5 +++++ .../opentelemetry.io_opentelemetrycollectors.yaml | 5 +++-- .../opentelemetry.io_opentelemetrycollectors.yaml | 5 +++-- .../bases/opentelemetry.io_targetallocators.yaml | 5 +++-- controllers/builder_test.go | 15 +++++---------- docs/api.md | 2 +- internal/manifests/collector/service.go | 4 ++-- internal/manifests/collector/service_test.go | 15 +++++++++------ internal/manifests/opampbridge/service.go | 2 +- internal/manifests/targetallocator/service.go | 2 +- 13 files changed, 42 insertions(+), 31 deletions(-) diff --git a/apis/v1alpha1/opampbridge_types.go b/apis/v1alpha1/opampbridge_types.go index cf16c4b48b..3f6a3dc3a2 100644 --- a/apis/v1alpha1/opampbridge_types.go +++ b/apis/v1alpha1/opampbridge_types.go @@ -112,7 +112,7 @@ type OpAMPBridgeSpec struct { // +optional IpFamilies []v1.IPFamily `json:"ipFamilies,omitempty"` // IPFamilyPolicy represents the dual-stack-ness requested or required by a Service - IpFamilyPolicy v1.IPFamilyPolicy `json:"ipFamilyPolicy,omitempty"` + IpFamilyPolicy *v1.IPFamilyPolicy `json:"ipFamilyPolicy,omitempty"` } // OpAMPBridgeStatus defines the observed state of OpAMPBridge. diff --git a/apis/v1alpha1/zz_generated.deepcopy.go b/apis/v1alpha1/zz_generated.deepcopy.go index 2a379e8f35..87092d21f8 100644 --- a/apis/v1alpha1/zz_generated.deepcopy.go +++ b/apis/v1alpha1/zz_generated.deepcopy.go @@ -686,6 +686,11 @@ func (in *OpAMPBridgeSpec) DeepCopyInto(out *OpAMPBridgeSpec) { *out = make([]v1.IPFamily, len(*in)) copy(*out, *in) } + if in.IpFamilyPolicy != nil { + in, out := &in.IpFamilyPolicy, &out.IpFamilyPolicy + *out = new(v1.IPFamilyPolicy) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OpAMPBridgeSpec. diff --git a/apis/v1beta1/common.go b/apis/v1beta1/common.go index 29d06552d6..88c4edcdb4 100644 --- a/apis/v1beta1/common.go +++ b/apis/v1beta1/common.go @@ -228,14 +228,14 @@ type OpenTelemetryCommonFields struct { PodDNSConfig v1.PodDNSConfig `json:"podDnsConfig,omitempty"` // IPFamily represents the IP Family (IPv4 or IPv6). This type is used // to express the family of an IP expressed by a type (e.g. service.spec.ipFamilies). - // +kubebuilder:default:=IPv4 + // +kubebuilder:default:={IPv4} // +optional - // +listType=atomic + // +listType=set IpFamilies []v1.IPFamily `json:"ipFamilies,omitempty"` // IPFamilyPolicy represents the dual-stack-ness requested or required by a Service // +kubebuilder:default:=SingleStack // +optional - IpFamilyPolicy v1.IPFamilyPolicy `json:"ipFamilyPolicy,omitempty"` + IpFamilyPolicy *v1.IPFamilyPolicy `json:"ipFamilyPolicy,omitempty"` } type StatefulSetCommonFields struct { diff --git a/apis/v1beta1/zz_generated.deepcopy.go b/apis/v1beta1/zz_generated.deepcopy.go index c01e48159f..d0334a8051 100644 --- a/apis/v1beta1/zz_generated.deepcopy.go +++ b/apis/v1beta1/zz_generated.deepcopy.go @@ -482,6 +482,11 @@ func (in *OpenTelemetryCommonFields) DeepCopyInto(out *OpenTelemetryCommonFields *out = make([]v1.IPFamily, len(*in)) copy(*out, *in) } + if in.IpFamilyPolicy != nil { + in, out := &in.IpFamilyPolicy, &out.IpFamilyPolicy + *out = new(v1.IPFamilyPolicy) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OpenTelemetryCommonFields. diff --git a/bundle/manifests/opentelemetry.io_opentelemetrycollectors.yaml b/bundle/manifests/opentelemetry.io_opentelemetrycollectors.yaml index f4f443f45e..5812bb589b 100644 --- a/bundle/manifests/opentelemetry.io_opentelemetrycollectors.yaml +++ b/bundle/manifests/opentelemetry.io_opentelemetrycollectors.yaml @@ -6741,11 +6741,12 @@ spec: type: object type: array ipFamilies: - default: IPv4 + default: + - IPv4 items: type: string type: array - x-kubernetes-list-type: atomic + x-kubernetes-list-type: set ipFamilyPolicy: default: SingleStack type: string diff --git a/config/crd/bases/opentelemetry.io_opentelemetrycollectors.yaml b/config/crd/bases/opentelemetry.io_opentelemetrycollectors.yaml index 5bdadbfa54..0c609cdab6 100644 --- a/config/crd/bases/opentelemetry.io_opentelemetrycollectors.yaml +++ b/config/crd/bases/opentelemetry.io_opentelemetrycollectors.yaml @@ -6727,11 +6727,12 @@ spec: type: object type: array ipFamilies: - default: IPv4 + default: + - IPv4 items: type: string type: array - x-kubernetes-list-type: atomic + x-kubernetes-list-type: set ipFamilyPolicy: default: SingleStack type: string diff --git a/config/crd/bases/opentelemetry.io_targetallocators.yaml b/config/crd/bases/opentelemetry.io_targetallocators.yaml index a35e859837..085c12b7db 100644 --- a/config/crd/bases/opentelemetry.io_targetallocators.yaml +++ b/config/crd/bases/opentelemetry.io_targetallocators.yaml @@ -1930,11 +1930,12 @@ spec: type: object type: array ipFamilies: - default: IPv4 + default: + - IPv4 items: type: string type: array - x-kubernetes-list-type: atomic + x-kubernetes-list-type: set ipFamilyPolicy: default: SingleStack type: string diff --git a/controllers/builder_test.go b/controllers/builder_test.go index 5086d55da7..12304494bc 100644 --- a/controllers/builder_test.go +++ b/controllers/builder_test.go @@ -1088,8 +1088,7 @@ endpoint: ws://opamp-server:4320/v1/opamp TargetPort: intstr.FromInt(8080), }, }, - Selector: opampbridgeSelectorLabels, - IPFamilies: []corev1.IPFamily{}, + Selector: opampbridgeSelectorLabels, }, }, }, @@ -1353,8 +1352,7 @@ service: Port: 8888, }, }, - Selector: selectorLabels, - IPFamilies: []corev1.IPFamily{}, + Selector: selectorLabels, }, }, &corev1.ConfigMap{ @@ -1549,8 +1547,7 @@ prometheus_cr: }, }, }, - Selector: taSelectorLabels, - IPFamilies: []corev1.IPFamily{}, + Selector: taSelectorLabels, }, }, }, @@ -1751,8 +1748,7 @@ prometheus_cr: Port: 8888, }, }, - Selector: selectorLabels, - IPFamilies: []corev1.IPFamily{}, + Selector: selectorLabels, }, }, &corev1.ConfigMap{ @@ -1947,8 +1943,7 @@ prometheus_cr: }, }, }, - Selector: taSelectorLabels, - IPFamilies: []corev1.IPFamily{}, + Selector: taSelectorLabels, }, }, &monitoringv1.ServiceMonitor{ diff --git a/docs/api.md b/docs/api.md index 7ed8bc0024..56e40e18f2 100644 --- a/docs/api.md +++ b/docs/api.md @@ -30958,7 +30958,7 @@ https://kubernetes.io/docs/concepts/workloads/pods/init-containers/
IPFamily represents the IP Family (IPv4 or IPv6). This type is used to express the family of an IP expressed by a type (e.g. service.spec.ipFamilies).

- Default: IPv4
+ Default: [IPv4]
false diff --git a/internal/manifests/collector/service.go b/internal/manifests/collector/service.go index 812d513871..c080349747 100644 --- a/internal/manifests/collector/service.go +++ b/internal/manifests/collector/service.go @@ -99,7 +99,7 @@ func MonitoringService(params manifests.Params) (*corev1.Service, error) { Port: metricsPort, }}, IPFamilies: params.OtelCol.Spec.IpFamilies, - IPFamilyPolicy: ¶ms.OtelCol.Spec.IpFamilyPolicy, + IPFamilyPolicy: params.OtelCol.Spec.IpFamilyPolicy, }, }, nil } @@ -178,7 +178,7 @@ func Service(params manifests.Params) (*corev1.Service, error) { ClusterIP: "", Ports: ports, IPFamilies: params.OtelCol.Spec.IpFamilies, - IPFamilyPolicy: ¶ms.OtelCol.Spec.IpFamilyPolicy, + IPFamilyPolicy: params.OtelCol.Spec.IpFamilyPolicy, }, }, nil } diff --git a/internal/manifests/collector/service_test.go b/internal/manifests/collector/service_test.go index 5d9ab71056..35dc472fdb 100644 --- a/internal/manifests/collector/service_test.go +++ b/internal/manifests/collector/service_test.go @@ -325,23 +325,26 @@ func TestServiceWithIpFamily(t *testing.T) { }) t.Run("should return IPPolicy SingleStack", func(t *testing.T) { params := deploymentParams() - params.OtelCol.Spec.IpFamilyPolicy = v1.IPFamilyPolicySingleStack + baseIpFamily := v1.IPFamilyPolicySingleStack + params.OtelCol.Spec.IpFamilyPolicy = &baseIpFamily actual, err := Service(params) assert.NoError(t, err) - assert.Equal(t, actual.Spec.IPFamilyPolicy, ¶ms.OtelCol.Spec.IpFamilyPolicy) + assert.Equal(t, actual.Spec.IPFamilyPolicy, params.OtelCol.Spec.IpFamilyPolicy) }) t.Run("should return IPPolicy PreferDualStack", func(t *testing.T) { params := deploymentParams() - params.OtelCol.Spec.IpFamilyPolicy = v1.IPFamilyPolicyPreferDualStack + baseIpFamily := v1.IPFamilyPolicyPreferDualStack + params.OtelCol.Spec.IpFamilyPolicy = &baseIpFamily actual, err := Service(params) assert.NoError(t, err) - assert.Equal(t, actual.Spec.IPFamilyPolicy, ¶ms.OtelCol.Spec.IpFamilyPolicy) + assert.Equal(t, actual.Spec.IPFamilyPolicy, params.OtelCol.Spec.IpFamilyPolicy) }) t.Run("should return IPPolicy RequireDualStack ", func(t *testing.T) { params := deploymentParams() - params.OtelCol.Spec.IpFamilyPolicy = v1.IPFamilyPolicyRequireDualStack + baseIpFamily := v1.IPFamilyPolicyRequireDualStack + params.OtelCol.Spec.IpFamilyPolicy = &baseIpFamily actual, err := Service(params) assert.NoError(t, err) - assert.Equal(t, actual.Spec.IPFamilyPolicy, ¶ms.OtelCol.Spec.IpFamilyPolicy) + assert.Equal(t, actual.Spec.IPFamilyPolicy, params.OtelCol.Spec.IpFamilyPolicy) }) } diff --git a/internal/manifests/opampbridge/service.go b/internal/manifests/opampbridge/service.go index 0829a76486..b8faef887e 100644 --- a/internal/manifests/opampbridge/service.go +++ b/internal/manifests/opampbridge/service.go @@ -47,7 +47,7 @@ func Service(params manifests.Params) *corev1.Service { Selector: selector, Ports: ports, IPFamilies: params.OpAMPBridge.Spec.IpFamilies, - IPFamilyPolicy: ¶ms.OpAMPBridge.Spec.IpFamilyPolicy, + IPFamilyPolicy: params.OpAMPBridge.Spec.IpFamilyPolicy, }, } } diff --git a/internal/manifests/targetallocator/service.go b/internal/manifests/targetallocator/service.go index 8b8119d40f..9577a43290 100644 --- a/internal/manifests/targetallocator/service.go +++ b/internal/manifests/targetallocator/service.go @@ -42,7 +42,7 @@ func Service(params Params) *corev1.Service { TargetPort: intstr.FromString("http"), }}, IPFamilies: params.TargetAllocator.Spec.IpFamilies, - IPFamilyPolicy: ¶ms.TargetAllocator.Spec.IpFamilyPolicy, + IPFamilyPolicy: params.TargetAllocator.Spec.IpFamilyPolicy, }, } } From f50c8162c8db786911fa476a36a36b3de3ab2d10 Mon Sep 17 00:00:00 2001 From: Yuri Sa Date: Tue, 2 Jul 2024 18:11:17 +0200 Subject: [PATCH 3/4] Fix e2e Signed-off-by: Yuri Sa --- tests/e2e/smoke-ip-families/00-assert.yaml | 7 ++----- tests/e2e/smoke-ip-families/01-assert.yaml | 6 ++---- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/tests/e2e/smoke-ip-families/00-assert.yaml b/tests/e2e/smoke-ip-families/00-assert.yaml index 26f994bcc8..65eb0c0e99 100644 --- a/tests/e2e/smoke-ip-families/00-assert.yaml +++ b/tests/e2e/smoke-ip-families/00-assert.yaml @@ -14,8 +14,7 @@ metadata: spec: ipFamilies: - IPv4 - ipFamilyPolicy: - - SingleStack + ipFamilyPolicy: SingleStack ports: - appProtocol: grpc name: jaeger-grpc @@ -42,9 +41,7 @@ metadata: spec: ipFamilies: - IPv4 - - IPv6 - ipFamilyPolicy: - - PreferDualStack + ipFamilyPolicy: SingleStack ports: - appProtocol: grpc name: jaeger-grpc diff --git a/tests/e2e/smoke-ip-families/01-assert.yaml b/tests/e2e/smoke-ip-families/01-assert.yaml index a3b31252e2..70ab2d3e35 100644 --- a/tests/e2e/smoke-ip-families/01-assert.yaml +++ b/tests/e2e/smoke-ip-families/01-assert.yaml @@ -15,8 +15,7 @@ spec: ipFamilies: - IPv4 - IPv6 - ippolicyPolicy: - - PreferDualStack + ipFamilyPolicy: PreferDualStack ports: - appProtocol: grpc name: jaeger-grpc @@ -44,8 +43,7 @@ spec: ipFamilies: - IPv4 - IPv6 - ippolicyPolicy: - - PreferDualStack + ipFamilyPolicy: PreferDualStack ports: - appProtocol: grpc name: jaeger-grpc From d54b13e9234b93fe1d2dd5f8901e60c17fee225b Mon Sep 17 00:00:00 2001 From: Yuri Sa Date: Wed, 3 Jul 2024 11:24:19 +0200 Subject: [PATCH 4/4] Fix e2e Signed-off-by: Yuri Sa --- tests/e2e/smoke-ip-families/01-install.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/e2e/smoke-ip-families/01-install.yaml b/tests/e2e/smoke-ip-families/01-install.yaml index 3791628859..9eb7d5e60e 100644 --- a/tests/e2e/smoke-ip-families/01-install.yaml +++ b/tests/e2e/smoke-ip-families/01-install.yaml @@ -5,6 +5,7 @@ metadata: spec: ipFamilies: - IPv4 + - IPv6 ipFamilyPolicy: PreferDualStack config: receivers: