Skip to content

Commit 565ef16

Browse files
Merge pull request #209 from dmage/status-subresource
Enable subresource status
2 parents 0780074 + 78ccdac commit 565ef16

File tree

2 files changed

+28
-6
lines changed

2 files changed

+28
-6
lines changed

manifests/00-crd.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,5 @@ spec:
1212
listKind: ConfigList
1313
plural: configs
1414
singular: config
15+
subresources:
16+
status: {}

pkg/operator/controller.go

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -153,24 +153,44 @@ func (c *Controller) sync() error {
153153

154154
metadataChanged := strategy.Metadata(&prevCR.ObjectMeta, &cr.ObjectMeta)
155155
specChanged := !reflect.DeepEqual(prevCR.Spec, cr.Spec)
156-
statusChanged := !reflect.DeepEqual(prevCR.Status, cr.Status)
157-
if metadataChanged || specChanged || statusChanged {
158-
glog.Infof("object changed: %s (metadata=%t, spec=%t, status=%t)", util.ObjectInfo(cr), metadataChanged, specChanged, statusChanged)
159-
160-
cr.Status.ObservedGeneration = cr.Generation
156+
if metadataChanged || specChanged {
157+
glog.Infof("object changed: %s (metadata=%t, spec=%t)", util.ObjectInfo(cr), metadataChanged, specChanged)
161158

162159
client, err := regopset.NewForConfig(c.kubeconfig)
163160
if err != nil {
164161
return err
165162
}
166163

167-
_, err = client.ImageregistryV1().Configs().Update(cr)
164+
updatedCR, err := client.ImageregistryV1().Configs().Update(cr)
168165
if err != nil {
169166
if !errors.IsConflict(err) {
170167
glog.Errorf("unable to update %s: %s", util.ObjectInfo(cr), err)
171168
}
172169
return err
173170
}
171+
172+
// If we updated the Status field too, we'll make one more call and we
173+
// want it to succeed.
174+
cr.ResourceVersion = updatedCR.ResourceVersion
175+
}
176+
177+
cr.Status.ObservedGeneration = cr.Generation
178+
statusChanged := !reflect.DeepEqual(prevCR.Status, cr.Status)
179+
if statusChanged {
180+
glog.Infof("object changed: %s (status=%t)", util.ObjectInfo(cr), statusChanged)
181+
182+
client, err := regopset.NewForConfig(c.kubeconfig)
183+
if err != nil {
184+
return err
185+
}
186+
187+
_, err = client.ImageregistryV1().Configs().UpdateStatus(cr)
188+
if err != nil {
189+
if !errors.IsConflict(err) {
190+
glog.Errorf("unable to update status %s: %s", util.ObjectInfo(cr), err)
191+
}
192+
return err
193+
}
174194
}
175195

176196
if _, ok := applyError.(permanentError); !ok {

0 commit comments

Comments
 (0)