-
Notifications
You must be signed in to change notification settings - Fork 2
/
default_manager.go
87 lines (67 loc) · 1.79 KB
/
default_manager.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
package config
import (
"fmt"
bosherr "github.com/cloudfoundry/bosh-utils/errors"
"github.com/dpb587/ssoca/config/storage"
)
type DefaultManager struct {
storage storage.Storage
path string
}
var _ Manager = DefaultManager{}
func NewDefaultManager(storage storage.Storage, path string) DefaultManager {
return DefaultManager{
storage: storage,
path: path,
}
}
func (m DefaultManager) GetSource() string {
return m.path
}
func (m DefaultManager) GetEnvironments() (EnvironmentsState, error) {
state := State{}
err := m.storage.Get(m.path, &state)
if err != nil {
return EnvironmentsState{}, bosherr.WrapError(err, "Getting environments")
}
return state.Environments, nil
}
func (m DefaultManager) GetEnvironment(name string) (EnvironmentState, error) {
envs, err := m.GetEnvironments()
if err != nil {
return EnvironmentState{}, bosherr.WrapError(err, "Getting environment")
}
for _, env := range envs {
if env.Alias == name || env.URL == name {
return env, nil
}
}
return EnvironmentState{}, fmt.Errorf("Environment not found: %s", name)
}
func (m DefaultManager) SetEnvironment(env EnvironmentState) error {
envs, err := m.GetEnvironments()
if err != nil {
return bosherr.WrapError(err, "Getting environments")
}
newState := State{}
isSet := false
for _, existingEnv := range envs {
if existingEnv.Alias == env.Alias || existingEnv.URL == env.URL {
if isSet == false {
newState.Environments = append(newState.Environments, env)
}
isSet = true
} else {
newState.Environments = append(newState.Environments, existingEnv)
}
}
if !isSet {
newState.Environments = append(newState.Environments, env)
}
// @todo sort
_, err = m.storage.Put(m.path, newState)
if err != nil {
return bosherr.WrapError(err, "Putting environment")
}
return nil
}