This repository has been archived by the owner on Nov 16, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 58
/
entity_handler.go
112 lines (83 loc) · 3.06 KB
/
entity_handler.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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
///////////////////////////////////////////////////////////////////////
// Copyright (c) 2017 VMware, Inc. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
///////////////////////////////////////////////////////////////////////
package drivers
import (
"reflect"
"time"
ewrapper "github.com/pkg/errors"
log "github.com/sirupsen/logrus"
"github.com/vmware/dispatch/pkg/controller"
"github.com/vmware/dispatch/pkg/entity-store"
"github.com/vmware/dispatch/pkg/event-manager/drivers/entities"
"github.com/vmware/dispatch/pkg/trace"
)
// EntityHandler handles driver entity operations
type EntityHandler struct {
store entitystore.EntityStore
backend Backend
}
// NewEntityHandler creates new instance of EntityHandler
func NewEntityHandler(store entitystore.EntityStore, backend Backend) *EntityHandler {
return &EntityHandler{
store: store,
backend: backend,
}
}
// Type returns Entity Handler type
func (h *EntityHandler) Type() reflect.Type {
defer trace.Trace("")()
return reflect.TypeOf(&entities.Driver{})
}
// Add adds new driver to the store, and executes its deployment.
func (h *EntityHandler) Add(obj entitystore.Entity) (err error) {
defer trace.Tracef("name %s", obj.GetName())()
driver := obj.(*entities.Driver)
defer func() { h.store.UpdateWithError(driver, err) }()
// deploy the deployment in k8s cluster
if err := h.backend.Deploy(driver); err != nil {
return ewrapper.Wrap(err, "error deploying driver")
}
driver.Status = entitystore.StatusREADY
log.Infof("%s-driver %s has been deployed on k8s", driver.Type, driver.Name)
return nil
}
// Update updates the driver by updating the deployment
func (h *EntityHandler) Update(obj entitystore.Entity) (err error) {
defer trace.Tracef("name %s", obj.GetName())()
driver := obj.(*entities.Driver)
defer func() { h.store.UpdateWithError(driver, err) }()
if err := h.backend.Update(driver); err != nil {
return ewrapper.Wrap(err, "error updating driver")
}
driver.Status = entitystore.StatusREADY
log.Info("%s-driver %s has been updated", driver.Type, driver.Name)
return nil
}
// Delete deletes the driver from the backend
func (h *EntityHandler) Delete(obj entitystore.Entity) error {
defer trace.Tracef("name '%s'", obj.GetName())()
driver := obj.(*entities.Driver)
// delete the deployment from k8s cluster
err := h.backend.Delete(driver)
if err != nil {
return ewrapper.Wrap(err, "error deleting driver")
}
if err := h.store.Delete(driver.OrganizationID, driver.Name, driver); err != nil {
return ewrapper.Wrap(err, "store error when deleting driver")
}
log.Infof("driver %s deleted from k8s and the entity store", driver.Name)
return nil
}
// Sync Executes sync loop
func (h *EntityHandler) Sync(organizationID string, resyncPeriod time.Duration) ([]entitystore.Entity, error) {
defer trace.Trace("")()
return controller.DefaultSync(h.store, h.Type(), organizationID, resyncPeriod, nil)
}
// Error handles error state
func (h *EntityHandler) Error(obj entitystore.Entity) error {
defer trace.Tracef("")()
log.Errorf("handleError func not implemented yet")
return nil
}