forked from coreos/coreos-kubernetes
-
Notifications
You must be signed in to change notification settings - Fork 1
/
config.go
76 lines (65 loc) · 1.91 KB
/
config.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
package cluster
import (
"errors"
"fmt"
"io/ioutil"
"net/url"
"gopkg.in/yaml.v2"
)
var (
DefaultClusterName = "kubernetes"
)
type Config struct {
ClusterName string `yaml:"clusterName"`
ExternalDNSName string `yaml:"externalDNSName"`
KeyName string `yaml:"keyName"`
Region string `yaml:"region"`
AvailabilityZone string `yaml:"availabilityZone"`
ArtifactURL string `yaml:"artifactURL"`
ReleaseChannel string `yaml:"releaseChannel"`
ControllerInstanceType string `yaml:"controllerInstanceType"`
ControllerRootVolumeSize int `yaml:"controllerRootVolumeSize"`
WorkerCount int `yaml:"workerCount"`
WorkerInstanceType string `yaml:"workerInstanceType"`
WorkerRootVolumeSize int `yaml:"workerRootVolumeSize"`
}
func (cfg *Config) Valid() error {
if cfg.ExternalDNSName == "" {
return errors.New("externalDNSName must be set")
}
if cfg.KeyName == "" {
return errors.New("keyName must be set")
}
if cfg.Region == "" {
return errors.New("region must be set")
}
if cfg.ClusterName == "" {
return errors.New("clusterName must be set")
}
if _, err := url.Parse(cfg.ArtifactURL); err != nil {
return fmt.Errorf("invalid artifactURL: %v", err)
}
return nil
}
func DecodeConfigFromFile(out *Config, loc string) error {
d, err := ioutil.ReadFile(loc)
if err != nil {
return fmt.Errorf("failed reading config file: %v", err)
}
if err = yaml.Unmarshal(d, &out); err != nil {
return fmt.Errorf("failed decoding config file: %v", err)
}
if err = out.Valid(); err != nil {
return fmt.Errorf("config file invalid: %v", err)
}
return nil
}
func NewDefaultConfig(ver string) *Config {
return &Config{
ClusterName: "kubernetes",
ArtifactURL: DefaultArtifactURL(ver),
}
}
func DefaultArtifactURL(ver string) string {
return fmt.Sprintf("https://coreos-kubernetes.s3.amazonaws.com/%s", ver)
}