Skip to content

Commit 18ffbe0

Browse files
committed
removed progressive status from error cases
1 parent 1e6f52b commit 18ffbe0

11 files changed

+252
-401
lines changed

api/v1alpha1/condition_types.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ const (
2020
// ConvertComponentDescriptorFailedReason is used when the Component Descriptor cannot be converted.
2121
ConvertComponentDescriptorFailedReason = "ConvertComponentDescriptorFailed"
2222

23-
// NameGenerationFailedReason is used when the componentn name could not be generated.
23+
// NameGenerationFailedReason is used when the component name could not be generated.
2424
NameGenerationFailedReason = "NameGenerationFailed"
2525

2626
// CreateOrUpdateComponentDescriptorFailedReason is used when the Component Descriptor cannot be created or updated on the resource.
@@ -44,6 +44,12 @@ const (
4444
// ComponentDescriptorNotFoundReason is used when the component descriptor cannot be found.
4545
ComponentDescriptorNotFoundReason = "ComponentDescriptorNotFound"
4646

47+
// ComponentVersionNotFoundReason is used when the component version cannot be found.
48+
ComponentVersionNotFoundReason = "ComponentVersionNotFound"
49+
50+
// ComponentVersionNotReadyReason is used when the component version is not ready.
51+
ComponentVersionNotReadyReason = "ComponentVersionNotReady"
52+
4753
// CreateOrUpdateSnapshotFailedReason is used when the snapshot cannot be created or updated.
4854
CreateOrUpdateSnapshotFailedReason = "CreateOrUpdateSnapshotFailed"
4955

api/v1alpha1/localization_types.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,17 @@ type Localization struct {
2828
Status MutationStatus `json:"status,omitempty"`
2929
}
3030

31+
func (in *Localization) GetVID() map[string]string {
32+
metadata := make(map[string]string)
33+
metadata[GroupVersion.Group+"/localization_digest"] = in.Status.LatestSnapshotDigest
34+
35+
return metadata
36+
}
37+
38+
func (in *Localization) SetObservedGeneration(v int64) {
39+
in.Status.ObservedGeneration = v
40+
}
41+
3142
// GetConditions returns the conditions of the Localization.
3243
func (in *Localization) GetConditions() []metav1.Condition {
3344
return in.Status.Conditions

api/v1alpha1/resource_types.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,17 @@ type Resource struct {
7474
Status ResourceStatus `json:"status,omitempty"`
7575
}
7676

77+
func (in *Resource) GetVID() map[string]string {
78+
metadata := make(map[string]string)
79+
metadata[GroupVersion.Group+"/resource_version"] = in.Status.LastAppliedResourceVersion
80+
81+
return metadata
82+
}
83+
84+
func (in *Resource) SetObservedGeneration(v int64) {
85+
in.Status.ObservedGeneration = v
86+
}
87+
7788
// GetConditions returns the conditions of the Resource.
7889
func (in *Resource) GetConditions() []metav1.Condition {
7990
return in.Status.Conditions

api/v1alpha1/snapshot_types.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,17 @@ type SnapshotStatus struct {
5353
ObservedGeneration int64 `json:"observedGeneration,omitempty"`
5454
}
5555

56+
func (in *Snapshot) GetVID() map[string]string {
57+
metadata := make(map[string]string)
58+
metadata[GroupVersion.Group+"/snapshot_digest"] = in.Status.LastReconciledDigest
59+
60+
return metadata
61+
}
62+
63+
func (in *Snapshot) SetObservedGeneration(v int64) {
64+
in.Status.ObservedGeneration = v
65+
}
66+
5667
// GetComponentVersion returns the component version for the snapshot
5768
func (in Snapshot) GetComponentVersion() string {
5869
return in.Spec.Identity[ComponentVersionKey]

controllers/componentversion_controller.go

Lines changed: 37 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -101,10 +101,11 @@ func (r *ComponentVersionReconciler) Reconcile(ctx context.Context, req ctrl.Req
101101
if err != nil {
102102
// we don't fail here, because all manifests might have been applied at once or the secret
103103
// for authentication is being reconciled.
104-
_ = r.markAsFailed(
104+
MarkAsFailed(
105+
r.EventRecorder,
105106
obj,
106107
v1alpha1.AuthenticatedContextCreationFailedReason,
107-
fmt.Errorf("authentication failed for repository: %s with error: %s", obj.Spec.Repository.URL, err),
108+
fmt.Sprintf("authentication failed for repository: %s with error: %s", obj.Spec.Repository.URL, err),
108109
)
109110

110111
return ctrl.Result{
@@ -116,10 +117,11 @@ func (r *ComponentVersionReconciler) Reconcile(ctx context.Context, req ctrl.Req
116117
update, version, err := r.checkVersion(ctx, octx, obj)
117118
if err != nil {
118119
// The component might not be there yet. We don't fail but keep polling instead.
119-
_ = r.markAsFailed(
120+
MarkAsFailed(
121+
r.EventRecorder,
120122
obj,
121123
v1alpha1.CheckVersionFailedReason,
122-
fmt.Errorf("version check failed for %s %s with error: %s", obj.Spec.Component, obj.Spec.Version.Semver, err),
124+
fmt.Sprintf("version check failed for %s %s with error: %s", obj.Spec.Component, obj.Spec.Version.Semver, err),
123125
)
124126

125127
return ctrl.Result{
@@ -144,10 +146,11 @@ func (r *ComponentVersionReconciler) Reconcile(ctx context.Context, req ctrl.Req
144146

145147
ok, err := r.OCMClient.VerifyComponent(ctx, octx, obj, version)
146148
if err != nil {
147-
_ = r.markAsFailed(
149+
MarkAsFailed(
150+
r.EventRecorder,
148151
obj,
149152
v1alpha1.VerificationFailedReason,
150-
fmt.Errorf("failed to verify %s with constraint %s with error: %s", obj.Spec.Component, obj.Spec.Version.Semver, err),
153+
fmt.Sprintf("failed to verify %s with constraint %s with error: %s", obj.Spec.Component, obj.Spec.Version.Semver, err),
151154
)
152155

153156
return ctrl.Result{
@@ -156,10 +159,11 @@ func (r *ComponentVersionReconciler) Reconcile(ctx context.Context, req ctrl.Req
156159
}
157160

158161
if !ok {
159-
_ = r.markAsFailed(
162+
MarkAsFailed(
163+
r.EventRecorder,
160164
obj,
161165
v1alpha1.VerificationFailedReason,
162-
errors.New("attempted to verify component, but the digest didn't match"),
166+
"attempted to verify component, but the digest didn't match",
163167
)
164168

165169
return ctrl.Result{
@@ -178,11 +182,14 @@ func (r *ComponentVersionReconciler) reconcile(ctx context.Context, octx ocm.Con
178182

179183
cv, err := r.OCMClient.GetComponentVersion(ctx, octx, obj, obj.Spec.Component, version)
180184
if err != nil {
181-
return ctrl.Result{}, r.markAsFailed(
185+
err = fmt.Errorf("failed to get component version: %w", err)
186+
MarkAsFailed(
187+
r.EventRecorder,
182188
obj,
183189
v1alpha1.ComponentVersionInvalidReason,
184-
fmt.Errorf("failed to get component version: %w", err),
190+
err.Error(),
185191
)
192+
return ctrl.Result{}, err
186193
}
187194

188195
defer cv.Close()
@@ -191,23 +198,29 @@ func (r *ComponentVersionReconciler) reconcile(ctx context.Context, octx ocm.Con
191198
dv := &compdesc.DescriptorVersion{}
192199
cd, err := dv.ConvertFrom(cv.GetDescriptor())
193200
if err != nil {
194-
return ctrl.Result{}, r.markAsFailed(
201+
err = fmt.Errorf("failed to convert component descriptor: %w", err)
202+
MarkAsFailed(
203+
r.EventRecorder,
195204
obj,
196205
v1alpha1.ConvertComponentDescriptorFailedReason,
197-
fmt.Errorf("failed to convert component descriptor: %w", err),
206+
err.Error(),
198207
)
208+
return ctrl.Result{}, err
199209
}
200210

201211
rreconcile.ProgressiveStatus(false, obj, meta.ProgressingReason, "component fetched, creating descriptors")
202212

203213
// setup the component descriptor kubernetes resource
204214
componentName, err := component.ConstructUniqueName(cd.GetName(), cd.GetVersion(), nil)
205215
if err != nil {
206-
return ctrl.Result{}, r.markAsFailed(
216+
err = fmt.Errorf("failed to generate name: %w", err)
217+
MarkAsFailed(
218+
r.EventRecorder,
207219
obj,
208220
v1alpha1.NameGenerationFailedReason,
209-
fmt.Errorf("failed to generate name: %w", err),
221+
err.Error(),
210222
)
223+
return ctrl.Result{}, err
211224
}
212225

213226
descriptor := &v1alpha1.ComponentDescriptor{
@@ -237,11 +250,14 @@ func (r *ComponentVersionReconciler) reconcile(ctx context.Context, octx ocm.Con
237250
})
238251

239252
if err != nil {
240-
return ctrl.Result{}, r.markAsFailed(
253+
err = fmt.Errorf("failed to create or update component descriptor: %w", err)
254+
MarkAsFailed(
255+
r.EventRecorder,
241256
obj,
242257
v1alpha1.CreateOrUpdateComponentDescriptorFailedReason,
243-
fmt.Errorf("failed to create or update component descriptor: %w", err),
258+
err.Error(),
244259
)
260+
return ctrl.Result{}, err
245261
}
246262

247263
componentDescriptor := v1alpha1.Reference{
@@ -258,11 +274,14 @@ func (r *ComponentVersionReconciler) reconcile(ctx context.Context, octx ocm.Con
258274

259275
componentDescriptor.References, err = r.parseReferences(ctx, octx, obj, cv.GetDescriptor().References)
260276
if err != nil {
261-
return ctrl.Result{}, r.markAsFailed(
277+
err = fmt.Errorf("failed to parse references: %w", err)
278+
MarkAsFailed(
279+
r.EventRecorder,
262280
obj,
263281
v1alpha1.ParseReferencesFailedReason,
264-
fmt.Errorf("failed to parse references: %w", err),
282+
err.Error(),
265283
)
284+
return ctrl.Result{}, err
266285
}
267286
}
268287

@@ -403,10 +422,3 @@ func (r *ComponentVersionReconciler) createComponentDescriptor(ctx context.Conte
403422

404423
return descriptor, nil
405424
}
406-
407-
func (r *ComponentVersionReconciler) markAsFailed(obj *v1alpha1.ComponentVersion, reason string, err error) error {
408-
conditions.MarkFalse(obj, meta.ReadyCondition, reason, err.Error())
409-
event.New(r.EventRecorder, obj, eventv1.EventSeverityError, err.Error(), nil)
410-
411-
return err
412-
}

controllers/configuration_controller.go

Lines changed: 36 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,11 @@ import (
1010
"fmt"
1111
"time"
1212

13-
eventv1 "github.com/fluxcd/pkg/apis/event/v1beta1"
1413
"github.com/fluxcd/pkg/apis/meta"
1514
"github.com/fluxcd/pkg/runtime/conditions"
1615
"github.com/fluxcd/pkg/runtime/patch"
1716
rreconcile "github.com/fluxcd/pkg/runtime/reconcile"
1817
sourcev1 "github.com/fluxcd/source-controller/api/v1"
19-
"github.com/open-component-model/ocm-controller/pkg/event"
2018
"golang.org/x/exp/slices"
2119
apierrors "k8s.io/apimachinery/pkg/api/errors"
2220
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -30,7 +28,6 @@ import (
3028
"sigs.k8s.io/controller-runtime/pkg/builder"
3129
"sigs.k8s.io/controller-runtime/pkg/client"
3230
"sigs.k8s.io/controller-runtime/pkg/handler"
33-
"sigs.k8s.io/controller-runtime/pkg/log"
3431
"sigs.k8s.io/controller-runtime/pkg/predicate"
3532
"sigs.k8s.io/controller-runtime/pkg/reconcile"
3633
"sigs.k8s.io/controller-runtime/pkg/source"
@@ -153,8 +150,6 @@ func (r *ConfigurationReconciler) Reconcile(
153150
ctx context.Context,
154151
req ctrl.Request,
155152
) (result ctrl.Result, err error) {
156-
logger := log.FromContext(ctx).WithName("configuration-controller")
157-
158153
obj := &v1alpha1.Configuration{}
159154
if err = r.Client.Get(ctx, req.NamespacedName, obj); err != nil {
160155
if apierrors.IsNotFound(err) {
@@ -166,8 +161,7 @@ func (r *ConfigurationReconciler) Reconcile(
166161

167162
// return early if obj is suspended
168163
if obj.Spec.Suspend {
169-
logger.Info("configuration object suspended")
170-
return result, nil
164+
return ctrl.Result{}, nil
171165
}
172166

173167
patchHelper := patch.NewSerialPatcher(obj, r.Client)
@@ -187,25 +181,40 @@ func (r *ConfigurationReconciler) Reconcile(
187181
// check dependencies are ready
188182
ready, err := r.checkReadiness(ctx, obj.GetNamespace(), &obj.Spec.SourceRef)
189183
if err != nil {
190-
r.markAsFailed(obj, "SourceRefNotReadyWithError", err.Error(), "source ref not yet ready with error: %s", obj.Spec.SourceRef.Name)
184+
MarkAsFailed(r.EventRecorder, obj, "SourceRefNotReadyWithError", err.Error())
191185

192186
return ctrl.Result{RequeueAfter: obj.GetRequeueAfter()}, nil
193187
}
194188
if !ready {
195-
r.markAsFailed(obj, "SourceRefNotReady", "source not ready yet", "source ref not yet ready: %s", obj.Spec.SourceRef.Name)
189+
MarkAsFailed(
190+
r.EventRecorder,
191+
obj,
192+
"SourceRefNotReady",
193+
fmt.Sprintf("source ref not yet ready: %s", obj.Spec.SourceRef.Name),
194+
)
196195

197196
return ctrl.Result{RequeueAfter: obj.GetRequeueAfter()}, nil
198197
}
199198

200199
if obj.Spec.ConfigRef != nil {
201200
ready, err := r.checkReadiness(ctx, obj.GetNamespace(), obj.Spec.ConfigRef)
202201
if err != nil {
203-
r.markAsFailed(obj, "ConfigRefNotReadyWithError", err.Error(), "config ref not yet ready with error: %s", obj.Spec.ConfigRef.Name)
202+
MarkAsFailed(
203+
r.EventRecorder,
204+
obj,
205+
"ConfigRefNotReadyWithError",
206+
fmt.Sprintf("config ref not yet ready with error: %s: %s", obj.Spec.ConfigRef.Name, err),
207+
)
204208

205209
return ctrl.Result{RequeueAfter: obj.GetRequeueAfter()}, nil
206210
}
207211
if !ready {
208-
r.markAsFailed(obj, "ConfigRefNotReady", "config ref not ready", "config ref not yet ready: %s", obj.Spec.ConfigRef.Name)
212+
MarkAsFailed(
213+
r.EventRecorder,
214+
obj,
215+
"ConfigRefNotReady",
216+
fmt.Sprintf("config ref not yet ready: %s", obj.Spec.ConfigRef.Name),
217+
)
209218

210219
return ctrl.Result{RequeueAfter: obj.GetRequeueAfter()}, nil
211220
}
@@ -214,13 +223,23 @@ func (r *ConfigurationReconciler) Reconcile(
214223
if obj.Spec.PatchStrategicMerge != nil {
215224
ready, err := r.checkFluxSourceReadiness(ctx, obj.Spec.PatchStrategicMerge.Source.SourceRef)
216225
if err != nil {
217-
r.markAsFailed(obj, "PatchStrategicMergeSourceRefNotReadyWithError", err.Error(), "patch strategic merge source ref not yet ready with error: %s", obj.Spec.PatchStrategicMerge.Source.SourceRef.Name)
226+
MarkAsFailed(
227+
r.EventRecorder,
228+
obj,
229+
"PatchStrategicMergeSourceRefNotReadyWithError",
230+
fmt.Sprintf("patch strategic merge source ref not yet ready with error: %s: %s", obj.Spec.PatchStrategicMerge.Source.SourceRef.Name, err),
231+
)
218232

219233
return ctrl.Result{RequeueAfter: obj.GetRequeueAfter()}, nil
220234
}
221235

222236
if !ready {
223-
r.markAsFailed(obj, "PatchStrategicMergeSourceRefNotReady", "patch strategic merge source not ready yet", "patch strategic merge source ref not yet ready: %s", obj.Spec.PatchStrategicMerge.Source.SourceRef.Name)
237+
MarkAsFailed(
238+
r.EventRecorder,
239+
obj,
240+
"PatchStrategicMergeSourceRefNotReady",
241+
fmt.Sprintf("patch strategic merge source ref not yet ready: %s", obj.Spec.PatchStrategicMerge.Source.SourceRef.Name),
242+
)
224243

225244
return ctrl.Result{RequeueAfter: obj.GetRequeueAfter()}, nil
226245
}
@@ -231,7 +250,8 @@ func (r *ConfigurationReconciler) Reconcile(
231250
if obj.GetSnapshotName() == "" {
232251
name, err := snapshot.GenerateSnapshotName(obj.GetName())
233252
if err != nil {
234-
r.markAsFailed(obj, "GenerateSnapshotNameError", err.Error(), "failed to generate snapshot name for: %s", obj.GetName())
253+
err := fmt.Errorf("failed to generate snapshot name for: %s: %s", obj.GetName(), err)
254+
MarkAsFailed(r.EventRecorder, obj, v1alpha1.NameGenerationFailedReason, err.Error())
235255

236256
return ctrl.Result{}, err
237257
}
@@ -248,8 +268,6 @@ func (r *ConfigurationReconciler) reconcile(
248268
ctx context.Context,
249269
obj *v1alpha1.Configuration,
250270
) (ctrl.Result, error) {
251-
rreconcile.ProgressiveStatus(false, obj, meta.ProgressingReason, "reconciliation in progress")
252-
253271
if obj.Generation != obj.Status.ObservedGeneration {
254272
rreconcile.ProgressiveStatus(
255273
false,
@@ -269,13 +287,13 @@ func (r *ConfigurationReconciler) reconcile(
269287

270288
if errors.Is(err, errTar) {
271289
err = fmt.Errorf("source resource is not a tar archive: %w", err)
272-
r.markAsFailed(obj, v1alpha1.SourceReasonNotATarArchiveReason, err.Error(), "source is not a tar archive")
290+
MarkAsFailed(r.EventRecorder, obj, v1alpha1.SourceReasonNotATarArchiveReason, err.Error())
273291

274292
return ctrl.Result{}, err
275293
}
276294

277295
err = fmt.Errorf("failed to reconcile mutation object: %w", err)
278-
r.markAsFailed(obj, v1alpha1.ReconcileMutationObjectFailedReason, err.Error(), "failed to reconcile mutation object")
296+
MarkAsFailed(r.EventRecorder, obj, v1alpha1.ReconcileMutationObjectFailedReason, err.Error())
279297

280298
return ctrl.Result{}, err
281299
}
@@ -452,9 +470,3 @@ func makeRequestsForConfigurations(ll ...v1alpha1.Configuration) []reconcile.Req
452470

453471
return requests
454472
}
455-
456-
func (r *ConfigurationReconciler) markAsFailed(obj *v1alpha1.Configuration, reason, msg, format string, messageArgs ...any) {
457-
rreconcile.ProgressiveStatus(false, obj, meta.ProgressingReason, format, messageArgs...)
458-
conditions.MarkFalse(obj, meta.ReadyCondition, reason, msg)
459-
event.New(r.EventRecorder, obj, eventv1.EventSeverityError, msg, nil)
460-
}

0 commit comments

Comments
 (0)