Skip to content

Commit d9f8cd0

Browse files
authored
Ensures that we only skip reconciliation for unmanaged resources (open-telemetry#2197)
* ensures that we only skip reconciliation for unmanaged resources * update tests
1 parent 96e81a5 commit d9f8cd0

File tree

4 files changed

+59
-2
lines changed

4 files changed

+59
-2
lines changed

.chloggen/default-managed.yaml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix'
2+
change_type: bug_fix
3+
4+
# The name of the component, or a single word describing the area of concern, (e.g. operator, target allocator, github action)
5+
component: operator
6+
7+
# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`).
8+
note: fixes scenario where an old CRD would cause the operator to default to an unmanaged state
9+
10+
# One or more tracking issues related to the change
11+
issues: [2039]
12+
13+
# (Optional) One or more lines of additional information to render under the primary note.
14+
# These lines will be padded with 2 spaces and then inserted directly into the document.
15+
# Use pipe (|) for multiline entries.
16+
subtext:

apis/v1alpha1/opentelemetrycollector_webhook.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,11 @@ func (r *OpenTelemetryCollector) Default() {
112112
if r.Spec.Ingress.Type == IngressTypeNginx && r.Spec.Ingress.RuleType == "" {
113113
r.Spec.Ingress.RuleType = IngressRuleTypePath
114114
}
115+
// If someone upgrades to a later version without upgrading their CRD they will not have a management state set.
116+
// This results in a default state of unmanaged preventing reconciliation from continuing.
117+
if len(r.Spec.ManagementState) == 0 {
118+
r.Spec.ManagementState = ManagementStateManaged
119+
}
115120
}
116121

117122
// +kubebuilder:webhook:verbs=create;update,path=/validate-opentelemetry-io-v1alpha1-opentelemetrycollector,mutating=false,failurePolicy=fail,groups=opentelemetry.io,resources=opentelemetrycollectors,versions=v1alpha1,name=vopentelemetrycollectorcreateupdate.kb.io,sideEffects=none,admissionReviewVersions=v1

apis/v1alpha1/opentelemetrycollector_webhook_test.go

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ func TestOTELColDefaultingWebhook(t *testing.T) {
4949
Mode: ModeDeployment,
5050
Replicas: &one,
5151
UpgradeStrategy: UpgradeStrategyAutomatic,
52+
ManagementState: ManagementStateManaged,
5253
PodDisruptionBudget: &PodDisruptionBudgetSpec{
5354
MaxUnavailable: &intstr.IntOrString{
5455
Type: intstr.Int,
@@ -77,6 +78,37 @@ func TestOTELColDefaultingWebhook(t *testing.T) {
7778
Mode: ModeSidecar,
7879
Replicas: &five,
7980
UpgradeStrategy: "adhoc",
81+
ManagementState: ManagementStateManaged,
82+
PodDisruptionBudget: &PodDisruptionBudgetSpec{
83+
MaxUnavailable: &intstr.IntOrString{
84+
Type: intstr.Int,
85+
IntVal: 1,
86+
},
87+
},
88+
},
89+
},
90+
},
91+
{
92+
name: "doesn't override unmanaged",
93+
otelcol: OpenTelemetryCollector{
94+
Spec: OpenTelemetryCollectorSpec{
95+
ManagementState: ManagementStateUnmanaged,
96+
Mode: ModeSidecar,
97+
Replicas: &five,
98+
UpgradeStrategy: "adhoc",
99+
},
100+
},
101+
expected: OpenTelemetryCollector{
102+
ObjectMeta: metav1.ObjectMeta{
103+
Labels: map[string]string{
104+
"app.kubernetes.io/managed-by": "opentelemetry-operator",
105+
},
106+
},
107+
Spec: OpenTelemetryCollectorSpec{
108+
Mode: ModeSidecar,
109+
Replicas: &five,
110+
UpgradeStrategy: "adhoc",
111+
ManagementState: ManagementStateUnmanaged,
80112
PodDisruptionBudget: &PodDisruptionBudgetSpec{
81113
MaxUnavailable: &intstr.IntOrString{
82114
Type: intstr.Int,
@@ -106,6 +138,7 @@ func TestOTELColDefaultingWebhook(t *testing.T) {
106138
Mode: ModeDeployment,
107139
Replicas: &one,
108140
UpgradeStrategy: UpgradeStrategyAutomatic,
141+
ManagementState: ManagementStateManaged,
109142
Autoscaler: &AutoscalerSpec{
110143
TargetCPUUtilization: &defaultCPUTarget,
111144
MaxReplicas: &five,
@@ -137,6 +170,7 @@ func TestOTELColDefaultingWebhook(t *testing.T) {
137170
Mode: ModeDeployment,
138171
Replicas: &one,
139172
UpgradeStrategy: UpgradeStrategyAutomatic,
173+
ManagementState: ManagementStateManaged,
140174
Autoscaler: &AutoscalerSpec{
141175
TargetCPUUtilization: &defaultCPUTarget,
142176
// webhook Default adds MaxReplicas to Autoscaler because
@@ -171,7 +205,8 @@ func TestOTELColDefaultingWebhook(t *testing.T) {
171205
},
172206
},
173207
Spec: OpenTelemetryCollectorSpec{
174-
Mode: ModeDeployment,
208+
Mode: ModeDeployment,
209+
ManagementState: ManagementStateManaged,
175210
Ingress: Ingress{
176211
Type: IngressTypeRoute,
177212
Route: OpenShiftRoute{
@@ -212,6 +247,7 @@ func TestOTELColDefaultingWebhook(t *testing.T) {
212247
Mode: ModeDeployment,
213248
Replicas: &one,
214249
UpgradeStrategy: UpgradeStrategyAutomatic,
250+
ManagementState: ManagementStateManaged,
215251
PodDisruptionBudget: &PodDisruptionBudgetSpec{
216252
MinAvailable: &intstr.IntOrString{
217253
Type: intstr.String,

controllers/opentelemetrycollector_controller.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ func (r *OpenTelemetryCollectorReconciler) Reconcile(ctx context.Context, req ct
174174
return ctrl.Result{}, client.IgnoreNotFound(err)
175175
}
176176

177-
if instance.Spec.ManagementState != v1alpha1.ManagementStateManaged {
177+
if instance.Spec.ManagementState == v1alpha1.ManagementStateUnmanaged {
178178
log.Info("Skipping reconciliation for unmanaged OpenTelemetryCollector resource", "name", req.String())
179179
// Stop requeueing for unmanaged OpenTelemetryCollector custom resources
180180
return ctrl.Result{}, nil

0 commit comments

Comments
 (0)