Skip to content

Commit 449d065

Browse files
authored
Use object deepcopy function with patch command for CSV update (#1161)
Signed-off-by: Daniel Fan <[email protected]>
1 parent 298b721 commit 449d065

File tree

3 files changed

+133
-217
lines changed

3 files changed

+133
-217
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 & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ require (
1616
github.com/onsi/ginkgo/v2 v2.1.4
1717
github.com/onsi/gomega v1.19.0
1818
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
19+
github.com/operator-framework/api v0.17.1
20+
github.com/operator-framework/operator-lifecycle-manager v0.22.0
2121
github.com/pkg/errors v0.9.1
2222
github.com/stretchr/testify v1.9.0
2323
golang.org/x/mod v0.17.0
@@ -34,9 +34,11 @@ require (
3434
cloud.google.com/go/compute/metadata v0.3.0 // indirect
3535
github.com/PuerkitoBio/purell v1.1.1 // indirect
3636
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect
37+
github.com/Shopify/logrus-bugsnag v0.0.0-20240507214313-004243a594f4 // indirect
3738
github.com/beorn7/perks v1.0.1 // indirect
3839
github.com/blang/semver v3.5.1+incompatible // indirect
3940
github.com/blang/semver/v4 v4.0.0 // indirect
41+
github.com/bshuster-repo/logrus-logstash-hook v1.1.0 // indirect
4042
github.com/cespare/xxhash/v2 v2.2.0 // indirect
4143
github.com/davecgh/go-spew v1.1.1 // indirect
4244
github.com/emicklei/go-restful/v3 v3.10.0 // indirect
@@ -47,13 +49,15 @@ require (
4749
github.com/go-openapi/jsonpointer v0.19.5 // indirect
4850
github.com/go-openapi/jsonreference v0.19.5 // indirect
4951
github.com/go-openapi/swag v0.19.14 // indirect
50-
github.com/gobuffalo/flect v0.2.1 // indirect
52+
github.com/gobuffalo/flect v0.2.3 // indirect
5153
github.com/gogo/protobuf v1.3.2 // indirect
5254
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
5355
github.com/golang/protobuf v1.5.3 // indirect
5456
github.com/google/gnostic v0.6.9 // indirect
55-
github.com/google/gofuzz v1.1.0 // indirect
57+
github.com/google/gofuzz v1.2.0 // indirect
5658
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
5761
github.com/hashicorp/hcl v1.0.0 // indirect
5862
github.com/imdario/mergo v0.3.12 // indirect
5963
github.com/josharian/intern v1.0.0 // indirect
@@ -67,7 +71,7 @@ require (
6771
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
6872
github.com/nxadm/tail v1.4.8 // indirect
6973
github.com/openshift/elasticsearch-operator v0.0.0-20220708171007-a87102296ded // indirect
70-
github.com/operator-framework/operator-registry v1.13.6 // indirect
74+
github.com/operator-framework/operator-registry v1.17.5 // indirect
7175
github.com/pelletier/go-toml v1.9.5 // indirect
7276
github.com/pelletier/go-toml/v2 v2.0.1 // indirect
7377
github.com/pmezard/go-difflib v1.0.0 // indirect

0 commit comments

Comments
 (0)