/
deprovisioner.go
61 lines (52 loc) · 1.52 KB
/
deprovisioner.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
package helm
import (
"fmt"
"github.com/deis/steward/mode"
"k8s.io/helm/pkg/proto/hapi/chart"
)
const (
deprovisionedNoopOperation = "deprovisioned-noop"
deprovisionedActiveOperation = "deprovisioned-active"
)
type errMissingReleaseName struct {
params mode.JSONObject
}
func (e errMissingReleaseName) Error() string {
return fmt.Sprintf("missing release name in parameters %s", e.params)
}
type deprovisioner struct {
chart *chart.Chart
provBehavior ProvisionBehavior
deleter ReleaseDeleter
}
func (d deprovisioner) Deprovision(instanceID string, dreq *mode.DeprovisionRequest) (*mode.DeprovisionResponse, error) {
if d.provBehavior == ProvisionBehaviorNoop {
return &mode.DeprovisionResponse{
Operation: deprovisionedNoopOperation,
}, nil
}
_, ok := dreq.Parameters[releaseNameKey]
if !ok {
logger.Errorf("finding the release name key")
return nil, errMissingReleaseName{params: dreq.Parameters}
}
releaseName, err := dreq.Parameters.String(releaseNameKey)
if err != nil {
return nil, err
}
if _, err := d.deleter.Delete(releaseName); err != nil {
logger.Errorf("deleting the helm chart (%s)", err)
return nil, err
}
return &mode.DeprovisionResponse{
Operation: deprovisionedActiveOperation,
}, nil
}
// newDeprovisioner returns a new Tiller-backed mode.Deprovisioner
func newDeprovisioner(chart *chart.Chart, provBehavior ProvisionBehavior, deleter ReleaseDeleter) mode.Deprovisioner {
return deprovisioner{
chart: chart,
provBehavior: provBehavior,
deleter: deleter,
}
}