Skip to content
This repository was archived by the owner on Jan 28, 2025. It is now read-only.

Commit 58779d2

Browse files
Refactor
Signed-off-by: PhilippPlotnikov <[email protected]>
1 parent 0accb50 commit 58779d2

File tree

1 file changed

+50
-53
lines changed

1 file changed

+50
-53
lines changed

rollout/trafficrouting/traefik/traefik.go

Lines changed: 50 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -82,36 +82,47 @@ func (r *Reconciler) SetWeight(desiredWeight int32, additionalDestinations ...v1
8282
if err != nil || !isFound {
8383
return err
8484
}
85+
canaryService, err := getService(canaryServiceName, services)
86+
if err != nil {
87+
return err
88+
}
89+
err = unstructured.SetNestedField(canaryService, int64(desiredWeight), "weight")
90+
if err != nil {
91+
return err
92+
}
93+
stableService, err := getService(stableServiceName, services)
94+
if err != nil {
95+
return err
96+
}
97+
err = unstructured.SetNestedField(stableService, int64(100-desiredWeight), "weight")
98+
if err != nil {
99+
return err
100+
}
101+
err = unstructured.SetNestedSlice(traefikService.Object, services, "spec", "weighted", "services")
102+
if err != nil {
103+
return err
104+
}
105+
_, err = r.Client.Update(ctx, traefikService, metav1.UpdateOptions{})
106+
return err
107+
}
108+
109+
func getService(serviceName string, services []interface{}) (map[string]interface{}, error) {
110+
var selectedService map[string]interface{}
85111
for _, service := range services {
86112
typedService, ok := service.(map[string]interface{})
87113
if !ok {
88-
return errors.New("Failed type assertion setting weight for traefik service")
114+
return nil, errors.New("Failed type assertion setting weight for traefik service")
89115
}
90-
serviceName, isFound, err := unstructured.NestedString(typedService, "name")
116+
nameOfCurrentService, isFound, err := unstructured.NestedString(typedService, "name")
91117
if err != nil || !isFound {
92-
return err
118+
return nil, err
93119
}
94-
if serviceName == canaryServiceName {
95-
err := unstructured.SetNestedField(typedService, int64(desiredWeight), "weight")
96-
if err != nil {
97-
return err
98-
}
99-
continue
120+
if nameOfCurrentService == serviceName {
121+
selectedService = typedService
122+
break
100123
}
101-
if serviceName == stableServiceName {
102-
err := unstructured.SetNestedField(typedService, int64(100-desiredWeight), "weight")
103-
if err != nil {
104-
return err
105-
}
106-
continue
107-
}
108-
}
109-
err = unstructured.SetNestedSlice(traefikService.Object, services, "spec", "weighted", "services")
110-
if err != nil {
111-
return err
112124
}
113-
_, err = r.Client.Update(ctx, traefikService, metav1.UpdateOptions{})
114-
return err
125+
return selectedService, nil
115126
}
116127

117128
func (r *Reconciler) VerifyWeight(desiredWeight int32, additionalDestinations ...v1alpha1.WeightDestination) (*bool, error) {
@@ -129,37 +140,23 @@ func (r *Reconciler) VerifyWeight(desiredWeight int32, additionalDestinations ..
129140
if err != nil || !isFound {
130141
return &verifyingStatus, err
131142
}
132-
for _, service := range services {
133-
typedService, ok := service.(map[string]interface{})
134-
if !ok {
135-
return &verifyingStatus, errors.New("Failed type assertion setting weight for traefik service")
136-
}
137-
serviceName, isFound, err := unstructured.NestedString(typedService, "name")
138-
if err != nil || !isFound {
139-
return &verifyingStatus, err
140-
}
141-
if serviceName == canaryServiceName {
142-
verifyingStatus = false
143-
weight, isFound, err := unstructured.NestedInt64(typedService, "weight")
144-
if err != nil || !isFound {
145-
return &verifyingStatus, err
146-
}
147-
verifyingStatus = weight == int64(desiredWeight)
148-
if !verifyingStatus {
149-
return &verifyingStatus, errors.New("Traefik service weight for canary service is not right")
150-
}
151-
}
152-
if serviceName == stableServiceName {
153-
verifyingStatus = false
154-
weight, isFound, err := unstructured.NestedInt64(typedService, "weight")
155-
if err != nil || !isFound {
156-
return &verifyingStatus, err
157-
}
158-
verifyingStatus = weight == int64(100-desiredWeight)
159-
if !verifyingStatus {
160-
return &verifyingStatus, errors.New("Traefik service weight for canary service is not right")
161-
}
162-
}
143+
canaryService, err := getService(canaryServiceName, services)
144+
if err != nil {
145+
return &verifyingStatus, err
146+
}
147+
weight, isFound, err := unstructured.NestedInt64(canaryService, "weight")
148+
verifyingStatus = weight == int64(desiredWeight)
149+
if err != nil || !isFound || !verifyingStatus {
150+
return &verifyingStatus, err
151+
}
152+
stableService, err := getService(stableServiceName, services)
153+
if err != nil {
154+
return &verifyingStatus, err
155+
}
156+
weight, isFound, err = unstructured.NestedInt64(stableService, "weight")
157+
verifyingStatus = weight == int64(100-desiredWeight)
158+
if err != nil || !isFound || !verifyingStatus {
159+
return &verifyingStatus, err
163160
}
164161
return &verifyingStatus, nil
165162
}

0 commit comments

Comments
 (0)