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/Makefile b/Makefile
index 19e7d3ccd5..932995526f 100644
--- a/Makefile
+++ b/Makefile
@@ -496,7 +496,7 @@ operator-sdk: $(LOCALBIN)
# Generate bundle manifests and metadata, then validate generated files.
.PHONY: generate-bundle
generate-bundle: kustomize operator-sdk manifests set-image-controller api-docs
- sed -i 's/minKubeVersion: .*/minKubeVersion: $(MIN_KUBERNETES_VERSION)/' config/manifests/$(BUNDLE_VARIANT)/bases/opentelemetry-operator.clusterserviceversion.yaml
+ sed -e 's/minKubeVersion: .*/minKubeVersion: $(MIN_KUBERNETES_VERSION)/' config/manifests/$(BUNDLE_VARIANT)/bases/opentelemetry-operator.clusterserviceversion.yaml
$(OPERATOR_SDK) generate kustomize manifests -q --input-dir $(MANIFESTS_DIR) --output-dir $(MANIFESTS_DIR)
cd $(BUNDLE_DIR) && cp ../../PROJECT . && $(KUSTOMIZE) build ../../$(MANIFESTS_DIR) | $(OPERATOR_SDK) generate bundle $(BUNDLE_BUILD_GEN_FLAGS) && rm PROJECT
diff --git a/apis/v1alpha1/opampbridge_types.go b/apis/v1alpha1/opampbridge_types.go
index e8ee0e52e6..3f6a3dc3a2 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..87092d21f8 100644
--- a/apis/v1alpha1/zz_generated.deepcopy.go
+++ b/apis/v1alpha1/zz_generated.deepcopy.go
@@ -681,6 +681,16 @@ 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)
+ }
+ 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 374f5a2a82..7aa341dade 100644
--- a/apis/v1beta1/common.go
+++ b/apis/v1beta1/common.go
@@ -226,6 +226,14 @@ 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).
+ // +optional
+ 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..d0334a8051 100644
--- a/apis/v1beta1/zz_generated.deepcopy.go
+++ b/apis/v1beta1/zz_generated.deepcopy.go
@@ -477,6 +477,16 @@ 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)
+ }
+ 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/community/manifests/opentelemetry.io_opampbridges.yaml b/bundle/community/manifests/opentelemetry.io_opampbridges.yaml
index 6e7a42fd34..f20a9de845 100644
--- a/bundle/community/manifests/opentelemetry.io_opampbridges.yaml
+++ b/bundle/community/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/community/manifests/opentelemetry.io_opentelemetrycollectors.yaml b/bundle/community/manifests/opentelemetry.io_opentelemetrycollectors.yaml
index 9569d7fb6c..44c99242ad 100644
--- a/bundle/community/manifests/opentelemetry.io_opentelemetrycollectors.yaml
+++ b/bundle/community/manifests/opentelemetry.io_opentelemetrycollectors.yaml
@@ -6739,6 +6739,13 @@ spec:
- name
type: object
type: array
+ ipFamilies:
+ items:
+ type: string
+ type: array
+ ipFamilyPolicy:
+ default: SingleStack
+ type: string
lifecycle:
properties:
postStart:
diff --git a/bundle/openshift/manifests/opentelemetry-operator.clusterserviceversion.yaml b/bundle/openshift/manifests/opentelemetry-operator.clusterserviceversion.yaml
index d7eb5dd65c..7d74d1e993 100644
--- a/bundle/openshift/manifests/opentelemetry-operator.clusterserviceversion.yaml
+++ b/bundle/openshift/manifests/opentelemetry-operator.clusterserviceversion.yaml
@@ -99,7 +99,7 @@ metadata:
categories: Logging & Tracing,Monitoring
certified: "false"
containerImage: ghcr.io/open-telemetry/opentelemetry-operator/opentelemetry-operator
- createdAt: "2024-07-18T14:09:56Z"
+ createdAt: "2024-07-20T18:51:11Z"
description: Provides the OpenTelemetry components, including the Collector
operators.operatorframework.io/builder: operator-sdk-v1.29.0
operators.operatorframework.io/project_layout: go.kubebuilder.io/v3
diff --git a/bundle/openshift/manifests/opentelemetry.io_opampbridges.yaml b/bundle/openshift/manifests/opentelemetry.io_opampbridges.yaml
index 6e7a42fd34..f20a9de845 100644
--- a/bundle/openshift/manifests/opentelemetry.io_opampbridges.yaml
+++ b/bundle/openshift/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/openshift/manifests/opentelemetry.io_opentelemetrycollectors.yaml b/bundle/openshift/manifests/opentelemetry.io_opentelemetrycollectors.yaml
index 9569d7fb6c..44c99242ad 100644
--- a/bundle/openshift/manifests/opentelemetry.io_opentelemetrycollectors.yaml
+++ b/bundle/openshift/manifests/opentelemetry.io_opentelemetrycollectors.yaml
@@ -6739,6 +6739,13 @@ spec:
- name
type: object
type: array
+ ipFamilies:
+ items:
+ type: string
+ type: array
+ 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 44110368ad..08a229c1fa 100644
--- a/config/crd/bases/opentelemetry.io_opentelemetrycollectors.yaml
+++ b/config/crd/bases/opentelemetry.io_opentelemetrycollectors.yaml
@@ -6725,6 +6725,13 @@ spec:
- name
type: object
type: array
+ ipFamilies:
+ items:
+ type: string
+ type: array
+ 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..3543bf1141 100644
--- a/config/crd/bases/opentelemetry.io_targetallocators.yaml
+++ b/config/crd/bases/opentelemetry.io_targetallocators.yaml
@@ -1929,6 +1929,13 @@ spec:
- name
type: object
type: array
+ ipFamilies:
+ items:
+ type: string
+ type: array
+ ipFamilyPolicy:
+ default: SingleStack
+ type: string
lifecycle:
properties:
postStart:
diff --git a/docs/api.md b/docs/api.md
index 0f84f1f75e..7c756d98b8 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)