This repository has been archived by the owner on Jan 11, 2019. It is now read-only.
/
service.go
102 lines (82 loc) · 2.05 KB
/
service.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
package swarm
import (
"github.com/juju/errgo"
"github.com/giantswarm/kocho/swarm/types"
)
// Config describes the configuration of a Service.
type Config struct {
}
// Dependencies describe the dependencies of a Service.
type Dependencies struct {
}
// NewService returns a new Service.
func NewService(cfg Config, deps Dependencies) *Service {
return &Service{
Config: cfg,
Dependencies: deps,
providers: NewManager(),
}
}
// Service descibes a ProviderManager, and some configuration and dependencies.
type Service struct {
Config
Dependencies
providers ProviderManager
}
// Create creates and returns a Swarm, given a name for the swarm, a ProviderType, and CreateFlags.
func (srv *Service) Create(name string, providerType ProviderType, flags swarmtypes.CreateFlags) (*Swarm, error) {
p, err := srv.providers.GetByType(providerType)
if err != nil {
return nil, err
}
switch providerType {
case AWS:
if flags.AWSCreateFlags == nil {
return nil, errgo.Newf("AWSCreateFlags must be provided")
}
}
var cfg string
if flags.UseIgnition {
cfg, err = createIgnitionConfig(flags)
} else {
cfg, err = createCloudConfig(flags)
}
if err != nil {
return nil, err
}
swarm, err := p.CreateSwarm(name, flags, cfg)
if err != nil {
return nil, err
}
return createSwarm(swarm), nil
}
// List returns all available Swarms.
func (srv *Service) List() ([]*Swarm, error) {
plist, err := srv.providers.ActiveProviders()
if err != nil {
return nil, err
}
var swarms []*Swarm
for _, provider := range plist {
swarmList, err := provider.GetSwarms()
if err != nil {
return nil, err
}
for _, swarm := range swarmList {
swarms = append(swarms, createSwarm(swarm))
}
}
return swarms, nil
}
// Get returns a Swarm, given a swarm name, and a ProviderType.
func (srv *Service) Get(name string, providerType ProviderType) (*Swarm, error) {
p, err := srv.providers.GetByType(providerType)
if err != nil {
return nil, err
}
swarm, err := p.GetSwarm(name)
if err != nil {
return nil, err
}
return createSwarm(swarm), nil
}