-
Notifications
You must be signed in to change notification settings - Fork 84
/
operation_processor.go
59 lines (49 loc) · 2.18 KB
/
operation_processor.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
package ord
import (
"context"
"encoding/json"
"github.com/kyma-incubator/compass/components/director/internal/open_resource_discovery/data"
"github.com/kyma-incubator/compass/components/director/pkg/log"
"github.com/kyma-incubator/compass/components/director/internal/model"
"github.com/pkg/errors"
)
// ORDService missing godoc
//
//go:generate mockery --name=ORDService --output=automock --outpkg=automock --case=underscore --disable-version-string
type ORDService interface {
ProcessApplication(ctx context.Context, appID string) error
ProcessApplicationTemplate(ctx context.Context, appTemplateID string) error
ProcessAppInAppTemplateContext(ctx context.Context, appTemplateID, appID string) error
}
// OperationsProcessor defines Open Resource Discovery operation processor
type OperationsProcessor struct {
OrdSvc ORDService
}
// Process processes the given operation
func (p *OperationsProcessor) Process(ctx context.Context, operation *model.Operation) error {
var opData data.OrdOperationData
if err := json.Unmarshal(operation.Data, &opData); err != nil {
return errors.Wrapf(err, "while unmarshalling operation with id %q", operation.ID)
}
log.C(ctx).Infof("Starting processing of operation with id %q", operation.ID)
// If only ApplicationID is defined - process the application ord data
if opData.ApplicationID != "" && opData.ApplicationTemplateID == "" {
if err := p.OrdSvc.ProcessApplication(ctx, opData.ApplicationID); err != nil {
return err
}
}
// If both ApplicationID and ApplicationTemplateID are defined - process the application ord data in the context of appTmpl
if opData.ApplicationID != "" && opData.ApplicationTemplateID != "" {
if err := p.OrdSvc.ProcessAppInAppTemplateContext(ctx, opData.ApplicationTemplateID, opData.ApplicationID); err != nil {
return err
}
}
// If only ApplicationTemplateID is defined - process application template static ord data
if opData.ApplicationID == "" && opData.ApplicationTemplateID != "" {
if err := p.OrdSvc.ProcessApplicationTemplate(ctx, opData.ApplicationTemplateID); err != nil {
return err
}
}
log.C(ctx).Infof("Processing of operation with id %q finished successfully", operation.ID)
return nil
}