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

Commit fcca94c

Browse files
Don't update k8s resource in Observe function
Signed-off-by: Daniel Kozlowski <[email protected]>
1 parent 903c00b commit fcca94c

File tree

4 files changed

+82
-38
lines changed

4 files changed

+82
-38
lines changed

package/crds/dns.gcp.crossplane.io_managedzones.yaml

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,31 @@ spec:
125125
name:
126126
description: Name of the referenced object.
127127
type: string
128+
policy:
129+
description: Policies for referencing.
130+
properties:
131+
resolution:
132+
default: Required
133+
description: Resolution specifies whether resolution of this
134+
reference is required. The default is 'Required', which
135+
means the reconcile will fail if the reference cannot be
136+
resolved. 'Optional' means this reference will be a no-op
137+
if it cannot be resolved.
138+
enum:
139+
- Required
140+
- Optional
141+
type: string
142+
resolve:
143+
description: Resolve specifies when this reference should
144+
be resolved. The default is 'IfNotPresent', which will attempt
145+
to resolve the reference only when the corresponding field
146+
is not present. Use 'Always' to resolve the reference on
147+
every reconcile.
148+
enum:
149+
- Always
150+
- IfNotPresent
151+
type: string
152+
type: object
128153
required:
129154
- name
130155
type: object
@@ -136,6 +161,31 @@ spec:
136161
name:
137162
description: Name of the referenced object.
138163
type: string
164+
policy:
165+
description: Policies for referencing.
166+
properties:
167+
resolution:
168+
default: Required
169+
description: Resolution specifies whether resolution of this
170+
reference is required. The default is 'Required', which
171+
means the reconcile will fail if the reference cannot be
172+
resolved. 'Optional' means this reference will be a no-op
173+
if it cannot be resolved.
174+
enum:
175+
- Required
176+
- Optional
177+
type: string
178+
resolve:
179+
description: Resolve specifies when this reference should
180+
be resolved. The default is 'IfNotPresent', which will attempt
181+
to resolve the reference only when the corresponding field
182+
is not present. Use 'Always' to resolve the reference on
183+
every reconcile.
184+
enum:
185+
- Always
186+
- IfNotPresent
187+
type: string
188+
type: object
139189
required:
140190
- name
141191
type: object
@@ -155,6 +205,31 @@ spec:
155205
name:
156206
description: Name of the referenced object.
157207
type: string
208+
policy:
209+
description: Policies for referencing.
210+
properties:
211+
resolution:
212+
default: Required
213+
description: Resolution specifies whether resolution of
214+
this reference is required. The default is 'Required',
215+
which means the reconcile will fail if the reference
216+
cannot be resolved. 'Optional' means this reference
217+
will be a no-op if it cannot be resolved.
218+
enum:
219+
- Required
220+
- Optional
221+
type: string
222+
resolve:
223+
description: Resolve specifies when this reference should
224+
be resolved. The default is 'IfNotPresent', which will
225+
attempt to resolve the reference only when the corresponding
226+
field is not present. Use 'Always' to resolve the reference
227+
on every reconcile.
228+
enum:
229+
- Always
230+
- IfNotPresent
231+
type: string
232+
type: object
158233
required:
159234
- name
160235
type: object

pkg/clients/managedzone/managed_zone.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ func IsUpToDate(name string, spec *v1alpha1.ManagedZoneParameters, observed *dns
104104

105105
// GenerateManagedZoneObservation takes a dns.ManagedZone and returns
106106
// *ManagedZoneObservation.
107-
func GenerateManagedZoneObservation(observed *dns.ManagedZone) v1alpha1.ManagedZoneObservation {
107+
func GenerateManagedZoneObservation(observed dns.ManagedZone) v1alpha1.ManagedZoneObservation {
108108
return v1alpha1.ManagedZoneObservation{
109109
CreationTime: observed.CreationTime,
110110
ID: observed.Id,

pkg/controller/dns/managed_zone.go

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@ const (
4646
errGetManagedZone = "cannot get the DNS ManagedZone"
4747
errCreateManagedZone = "cannot create DNS ManagedZone"
4848
errDeleteManagedZone = "cannot delete DNS ManagedZone"
49-
errUpdateManagedZone = "cannot update DNS ManagedZone custom resource"
5049
errUpToDateManagedZone = "cannot determine if ManagedZone is up to date"
5150
)
5251

@@ -109,7 +108,7 @@ func (e *managedZoneExternal) Observe(ctx context.Context, mg resource.Managed)
109108
return managed.ExternalObservation{}, errors.New(errNotManagedZone)
110109
}
111110

112-
mz, err := e.dns.Get(
111+
observed, err := e.dns.Get(
113112
e.projectID,
114113
meta.GetExternalName(cr),
115114
).Context(ctx).Do()
@@ -122,22 +121,19 @@ func (e *managedZoneExternal) Observe(ctx context.Context, mg resource.Managed)
122121

123122
lateInit := false
124123
currentSpec := cr.Spec.ForProvider.DeepCopy()
125-
mzclient.LateInitializeSpec(&cr.Spec.ForProvider, *mz)
124+
mzclient.LateInitializeSpec(&cr.Spec.ForProvider, *observed)
126125
if !cmp.Equal(currentSpec, &cr.Spec.ForProvider) {
127-
if err := e.kube.Update(ctx, cr); err != nil {
128-
return managed.ExternalObservation{}, errors.Wrap(err, errUpdateManagedZone)
129-
}
130126
lateInit = true
131127
}
132128

133-
cr.Status.AtProvider = mzclient.GenerateManagedZoneObservation(mz)
129+
cr.Status.AtProvider = mzclient.GenerateManagedZoneObservation(*observed)
134130

135131
cr.SetConditions(xpv1.Available())
136132

137133
upToDate, err := mzclient.IsUpToDate(
138134
meta.GetExternalName(cr),
139135
&cr.Spec.ForProvider,
140-
mz)
136+
observed)
141137
if err != nil {
142138
return managed.ExternalObservation{}, errors.Wrap(err, errUpToDateManagedZone)
143139
}

pkg/controller/dns/managed_zone_test.go

Lines changed: 2 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,8 @@ const (
4444
)
4545

4646
var (
47-
nonManagedZone resource.Managed
48-
errManagedZoneBoom = errors.New("boom")
49-
managedZoneLabels = map[string]string{"foo": "bar"}
47+
nonManagedZone resource.Managed
48+
managedZoneLabels = map[string]string{"foo": "bar"}
5049
)
5150

5251
type ManagedZoneOption func(*v1alpha1.ManagedZone)
@@ -141,32 +140,6 @@ func TestManagedZoneObserve(t *testing.T) {
141140
}
142141
}),
143142
},
144-
"UpdateResourceSpecFail": {
145-
reason: "Should return an error if the internal update fails",
146-
args: args{
147-
mg: newManagedZone(),
148-
},
149-
want: want{
150-
e: managed.ExternalObservation{},
151-
err: errors.Wrap(errManagedZoneBoom, errUpdateManagedZone),
152-
},
153-
handler: http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
154-
_ = r.Body.Close()
155-
if diff := cmp.Diff(http.MethodGet, r.Method); diff != "" {
156-
t.Errorf("r: -want, +got:\n%s", diff)
157-
}
158-
w.WriteHeader(http.StatusOK)
159-
cr := newManagedZone(withLabels(managedZoneLabels))
160-
mz := &dns.ManagedZone{}
161-
mzclient.GenerateManagedZone(meta.GetExternalName(cr), cr.Spec.ForProvider, mz)
162-
if err := json.NewEncoder(w).Encode(mz); err != nil {
163-
t.Error(err)
164-
}
165-
}),
166-
kube: &test.MockClient{
167-
MockUpdate: test.NewMockUpdateFn(errManagedZoneBoom),
168-
},
169-
},
170143
"UpdateResourceSpecSuccess": {
171144
reason: "Should not return an error if the internal update succeeds",
172145
args: args{

0 commit comments

Comments
 (0)