Skip to content

Commit c54163f

Browse files
committed
[csc] Move CatalogSourceConfig logic to its own package
This makes it more consistent with the OperatorSource implementation. Added more informative logging.
1 parent 81f6dbf commit c54163f

File tree

3 files changed

+55
-14
lines changed

3 files changed

+55
-14
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package catalogsourceconfig
2+
3+
func NewHandler() Handler {
4+
return &handler{}
5+
}
Lines changed: 38 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1-
package stub
1+
package catalogsourceconfig
22

33
import (
4+
"context"
5+
46
olm "github.com/operator-framework/operator-lifecycle-manager/pkg/api/apis/operators/v1alpha1"
57
"github.com/operator-framework/operator-marketplace/pkg/apis/marketplace/v1alpha1"
68
"github.com/operator-framework/operator-sdk/pkg/sdk"
@@ -10,27 +12,58 @@ import (
1012
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1113
)
1214

15+
// Handler is the interface that wraps the Handle method
16+
type Handler interface {
17+
Handle(ctx context.Context, event sdk.Event) error
18+
}
19+
20+
type handler struct {
21+
}
22+
23+
var log *logrus.Entry
24+
25+
// Handle handles a new event associated with CatalogSourceConfig type
26+
func (h *handler) Handle(ctx context.Context, event sdk.Event) error {
27+
csc := event.Object.(*v1alpha1.CatalogSourceConfig)
28+
log = getLoggerWithCatalogSourceConfigTypeFields(csc)
29+
// Ignore the delete event as the garbage collector will clean up the created resources as per the OwnerReference
30+
if event.Deleted {
31+
log.Infof("Deleted")
32+
return nil
33+
}
34+
return createCatalogSource(csc)
35+
}
36+
1337
// createCatalogSource creates a new CatalogSource CR and all the resources it requires
1438
func createCatalogSource(cr *v1alpha1.CatalogSourceConfig) error {
1539
// Create the ConfigMap that will be used by the CatalogSource
1640
catalogConfigMap := newConfigMap(cr)
17-
logrus.Infof("Creating %s ConfigMap in %s namespace", catalogConfigMap.Name, cr.Spec.TargetNamespace)
41+
log.Infof("Creating %s ConfigMap", catalogConfigMap.Name)
1842
err := sdk.Create(catalogConfigMap)
1943
if err != nil && !errors.IsAlreadyExists(err) {
20-
logrus.Errorf("Failed to create catalog source : %v", err)
44+
log.Errorf("Failed to create ConfigMap : %v", err)
2145
return err
2246
}
2347

2448
catalogSource := newCatalogSource(cr, catalogConfigMap.Name)
25-
logrus.Infof("Creating %s CatalogSource in %s namespace", catalogSource.Name, cr.Spec.TargetNamespace)
2649
err = sdk.Create(catalogSource)
2750
if err != nil && !errors.IsAlreadyExists(err) {
28-
logrus.Errorf("Failed to create catalog source : %v", err)
51+
log.Errorf("Failed to create CatalogSource : %v", err)
2952
return err
3053
}
54+
log.Infof("Created")
3155
return nil
3256
}
3357

58+
// getLoggerWithCatalogSourceConfigTypeFields returns a logger entry that can be used for consistent logging
59+
func getLoggerWithCatalogSourceConfigTypeFields(csc *v1alpha1.CatalogSourceConfig) *logrus.Entry {
60+
return logrus.WithFields(logrus.Fields{
61+
"type": csc.TypeMeta.Kind,
62+
"targetNamespace": csc.Spec.TargetNamespace,
63+
"name": csc.GetName(),
64+
})
65+
}
66+
3467
// newCatalogSource returns a CatalogSource object
3568
func newCatalogSource(cr *v1alpha1.CatalogSourceConfig, configMapName string) *olm.CatalogSource {
3669
name := v1alpha1.CatalogSourcePrefix + cr.Name

pkg/stub/handler.go

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ package stub
33
import (
44
"context"
55

6+
"github.com/operator-framework/operator-marketplace/pkg/catalogsourceconfig"
7+
68
"github.com/operator-framework/operator-marketplace/pkg/apis/marketplace/v1alpha1"
79
"github.com/operator-framework/operator-marketplace/pkg/operatorsource"
810

@@ -12,29 +14,30 @@ import (
1214

1315
func NewHandler() sdk.Handler {
1416
opsrcHandler, _ := operatorsource.NewHandler()
17+
cscHandler := catalogsourceconfig.NewHandler()
1518
return &Handler{
16-
operatorSourceHandler: opsrcHandler,
19+
operatorSourceHandler: opsrcHandler,
20+
catalogSourceConfigHandler: cscHandler,
1721
}
1822
}
1923

2024
type Handler struct {
21-
operatorSourceHandler operatorsource.Handler
25+
operatorSourceHandler operatorsource.Handler
26+
catalogSourceConfigHandler operatorsource.Handler
2227
}
2328

2429
// Handle function for handling CatalogSourceConfig and OperatorSource CR events
2530
func (h *Handler) Handle(ctx context.Context, event sdk.Event) error {
26-
switch o := event.Object.(type) {
31+
switch event.Object.(type) {
2732
case *v1alpha1.CatalogSourceConfig:
28-
// Ignore the delete event as the garbage collector will clean up the created resources as per the OwnerReference
29-
if event.Deleted {
30-
logrus.Infof("Deleted %s CatalogSourceConfig in %s namespace", o.Name, o.Spec.TargetNamespace)
31-
return nil
33+
if err := h.catalogSourceConfigHandler.Handle(ctx, event); err != nil {
34+
logrus.Errorf("CatalogSourceConfig reconciliation error: %v", err)
35+
return err
3236
}
33-
return createCatalogSource(o)
3437

3538
case *v1alpha1.OperatorSource:
3639
if err := h.operatorSourceHandler.Handle(ctx, event); err != nil {
37-
logrus.Errorf("reconciliation error: %v", err)
40+
logrus.Errorf("OperatorSource reconciliation error: %v", err)
3841
return err
3942
}
4043
}

0 commit comments

Comments
 (0)