Skip to content

Commit d2d884c

Browse files
authored
[CD] Use object deepcopy function with patch command for CSV update (#1170)
* Use object deepcopy function with patch command for CSV update (#1161) Signed-off-by: Daniel Fan <[email protected]> * Remove deprecated deepcopy dependency from go.mod and go.sum Signed-off-by: Daniel Fan <[email protected]> --------- Signed-off-by: Daniel Fan <[email protected]>
1 parent 352c6ec commit d2d884c

File tree

3 files changed

+133
-220
lines changed

3 files changed

+133
-220
lines changed

controllers/operatorconfig/operatorconfig_controller.go

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ package operatorconfig
1919
import (
2020
"context"
2121

22-
"github.com/barkimedes/go-deepcopy"
2322
olmv1alpha1 "github.com/operator-framework/api/pkg/operators/v1alpha1"
2423
"k8s.io/apimachinery/pkg/api/equality"
2524
"k8s.io/apimachinery/pkg/types"
@@ -116,13 +115,8 @@ func (r *Reconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Resu
116115
continue
117116
}
118117

119-
copyToCast, err := deepcopy.Anything(csv)
120-
if err != nil {
121-
return ctrl.Result{}, err
122-
}
123-
csvToUpdate := copyToCast.(*olmv1alpha1.ClusterServiceVersion)
124118
klog.Infof("Applying OperatorConfig: %s to Operator: %s via CSV: %s, %s", operator.OperatorConfig, operator.Name, csv.Name, csv.Namespace)
125-
if err := r.configCsv(ctx, csvToUpdate, serviceConfig); err != nil {
119+
if err := r.configCsv(ctx, csv, serviceConfig); err != nil {
126120
klog.Errorf("Failed to apply OperatorConfig %s/%s to Operator: %s via CSV: %s, %s", registry.Namespace, operator.OperatorConfig, operator.Name, csv.Namespace, csv.Name)
127121
return ctrl.Result{}, err
128122
}
@@ -133,18 +127,30 @@ func (r *Reconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Resu
133127
}
134128

135129
func (r *Reconciler) configCsv(ctx context.Context, csv *olmv1alpha1.ClusterServiceVersion, config *operatorv1alpha1.ServiceOperatorConfig) error {
130+
csvToPatch := csv.DeepCopy()
131+
136132
if config.Replicas != nil {
137-
csv.Spec.InstallStrategy.StrategySpec.DeploymentSpecs[0].Spec.Replicas = config.Replicas
133+
if len(csvToPatch.Spec.InstallStrategy.StrategySpec.DeploymentSpecs) > 0 {
134+
csvToPatch.Spec.InstallStrategy.StrategySpec.DeploymentSpecs[0].Spec.Replicas = config.Replicas
135+
}
138136
}
137+
139138
if config.Affinity != nil {
140-
csv.Spec.InstallStrategy.StrategySpec.DeploymentSpecs[0].Spec.Template.Spec.Affinity = config.Affinity
139+
if len(csvToPatch.Spec.InstallStrategy.StrategySpec.DeploymentSpecs) > 0 {
140+
csvToPatch.Spec.InstallStrategy.StrategySpec.DeploymentSpecs[0].Spec.Template.Spec.Affinity = config.Affinity
141+
}
141142
}
143+
142144
if config.TopologySpreadConstraints != nil {
143-
csv.Spec.InstallStrategy.StrategySpec.DeploymentSpecs[0].Spec.Template.Spec.TopologySpreadConstraints = config.TopologySpreadConstraints
145+
if len(csvToPatch.Spec.InstallStrategy.StrategySpec.DeploymentSpecs) > 0 {
146+
csvToPatch.Spec.InstallStrategy.StrategySpec.DeploymentSpecs[0].Spec.Template.Spec.TopologySpreadConstraints = config.TopologySpreadConstraints
147+
}
144148
}
145-
if err := r.Client.Update(ctx, csv); err != nil {
149+
150+
if err := r.Client.Patch(ctx, csvToPatch, client.MergeFrom(csv)); err != nil {
146151
return err
147152
}
153+
148154
return nil
149155
}
150156

go.mod

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ toolchain go1.23.4
77
require (
88
github.com/IBM/controller-filtered-cache v0.3.5
99
github.com/IBM/ibm-namespace-scope-operator v1.17.3
10-
github.com/barkimedes/go-deepcopy v0.0.0-20220514131651-17c30cfc62df
1110
github.com/deckarep/golang-set v1.7.1
1211
github.com/google/go-cmp v0.5.9
1312
github.com/jaegertracing/jaeger-operator v1.36.0
@@ -16,8 +15,8 @@ require (
1615
github.com/onsi/ginkgo/v2 v2.1.4
1716
github.com/onsi/gomega v1.19.0
1817
github.com/openshift/api v0.0.0-20220124143425-d74727069f6f
19-
github.com/operator-framework/api v0.6.2
20-
github.com/operator-framework/operator-lifecycle-manager v0.17.0
18+
github.com/operator-framework/api v0.17.1
19+
github.com/operator-framework/operator-lifecycle-manager v0.22.0
2120
github.com/pkg/errors v0.9.1
2221
github.com/stretchr/testify v1.9.0
2322
golang.org/x/mod v0.17.0
@@ -35,9 +34,11 @@ require (
3534
cloud.google.com/go/compute/metadata v0.2.3 // indirect
3635
github.com/PuerkitoBio/purell v1.1.1 // indirect
3736
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect
37+
github.com/Shopify/logrus-bugsnag v0.0.0-20240507214313-004243a594f4 // indirect
3838
github.com/beorn7/perks v1.0.1 // indirect
3939
github.com/blang/semver v3.5.1+incompatible // indirect
4040
github.com/blang/semver/v4 v4.0.0 // indirect
41+
github.com/bshuster-repo/logrus-logstash-hook v1.1.0 // indirect
4142
github.com/cespare/xxhash/v2 v2.2.0 // indirect
4243
github.com/davecgh/go-spew v1.1.1 // indirect
4344
github.com/emicklei/go-restful/v3 v3.10.0 // indirect
@@ -48,13 +49,15 @@ require (
4849
github.com/go-openapi/jsonpointer v0.19.5 // indirect
4950
github.com/go-openapi/jsonreference v0.19.5 // indirect
5051
github.com/go-openapi/swag v0.19.14 // indirect
51-
github.com/gobuffalo/flect v0.2.1 // indirect
52+
github.com/gobuffalo/flect v0.2.3 // indirect
5253
github.com/gogo/protobuf v1.3.2 // indirect
5354
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
5455
github.com/golang/protobuf v1.5.3 // indirect
5556
github.com/google/gnostic v0.6.9 // indirect
56-
github.com/google/gofuzz v1.1.0 // indirect
57+
github.com/google/gofuzz v1.2.0 // indirect
5758
github.com/google/uuid v1.3.1 // indirect
59+
github.com/h2non/filetype v1.1.1 // indirect
60+
github.com/h2non/go-is-svg v0.0.0-20160927212452-35e8c4b0612c // indirect
5861
github.com/hashicorp/hcl v1.0.0 // indirect
5962
github.com/imdario/mergo v0.3.12 // indirect
6063
github.com/josharian/intern v1.0.0 // indirect
@@ -68,7 +71,7 @@ require (
6871
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
6972
github.com/nxadm/tail v1.4.8 // indirect
7073
github.com/openshift/elasticsearch-operator v0.0.0-20220708171007-a87102296ded // indirect
71-
github.com/operator-framework/operator-registry v1.13.6 // indirect
74+
github.com/operator-framework/operator-registry v1.17.5 // indirect
7275
github.com/pelletier/go-toml v1.9.5 // indirect
7376
github.com/pelletier/go-toml/v2 v2.0.1 // indirect
7477
github.com/pmezard/go-difflib v1.0.0 // indirect

0 commit comments

Comments
 (0)