-
Notifications
You must be signed in to change notification settings - Fork 6
/
config.go
88 lines (68 loc) · 2.8 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
77
78
79
80
81
82
83
84
85
86
87
88
package config
import (
"flag"
"github.com/pivotal-cf-experimental/service-config"
"gopkg.in/validator.v2"
"errors"
"code.cloudfoundry.org/cflager"
"code.cloudfoundry.org/lager"
)
type Config struct {
PidFile string `yaml:"PidFile" validate:"nonzero"`
Logger lager.Logger
MySQL MySQL `yaml:"MySQL" validate:"nonzero"`
Canary Canary `yaml:"Canary" validate:"nonzero"`
Notifications Notifications `yaml:"Notifications" validate:"nonzero"`
Switchboard Switchboard `yaml:"Switchboard" validate:"nonzero"`
WriteReadDelay int `yaml:"WriteReadDelay" validate:"nonzero"`
PollFrequency int `yaml:"PollFrequency" validate:"nonzero,min=1"`
NotifyOnly bool `yaml:"NotifyOnly"`
SkipSSLValidation bool `yaml:"SkipSSLValidation"`
APIPort uint `yaml:"APIPort"`
}
type MySQL struct {
ClusterIPs []string `yaml:"ClusterIPs" validate:"nonzero"`
Port int `yaml:"Port" validate:"nonzero"`
GaleraHealthcheckPort int `yaml:"GaleraHealthcheckPort" validate:"nonzero"`
}
type Canary struct {
Database string `yaml:"Database" validate:"nonzero"`
Username string `yaml:"Username" validate:"nonzero"`
Password string `yaml:"Password" validate:"nonzero"`
}
type Notifications struct {
AdminClientUsername string `yaml:"AdminClientUsername" validate:"nonzero"`
AdminClientSecret string `yaml:"AdminClientSecret" validate:"nonzero"`
ClientUsername string `yaml:"ClientUsername" validate:"nonzero"`
ClientSecret string `yaml:"ClientSecret" validate:"nonzero"`
NotificationsDomain string `yaml:"NotificationsDomain" validate:"nonzero"`
UAADomain string `yaml:"UAADomain" validate:"nonzero"`
ToAddress string `yaml:"ToAddress" validate:"nonzero"`
SystemDomain string `yaml:"SystemDomain" validate:"nonzero"`
ClusterIdentifier string `yaml:"ClusterIdentifier" validate:"nonzero"`
}
type Switchboard struct {
URLs []string `yaml:"URLs" validate:"nonzero"`
Username string `yaml:"Username" validate:"nonzero"`
Password string `yaml:"Password" validate:"nonzero"`
}
var InvalidDelay = errors.New("WriteReadDelay must be less than the PollFrequency")
func (c Config) Validate() error {
if c.PollFrequency <= c.WriteReadDelay {
return InvalidDelay
}
return validator.Validate(c)
}
func NewConfig(osArgs []string) (*Config, error) {
var rootConfig Config
binaryName := osArgs[0]
configurationOptions := osArgs[1:]
serviceConfig := service_config.New()
flags := flag.NewFlagSet(binaryName, flag.ExitOnError)
cflager.AddFlags(flags)
serviceConfig.AddFlags(flags)
flags.Parse(configurationOptions)
rootConfig.Logger, _ = cflager.New(binaryName)
err := serviceConfig.Read(&rootConfig)
return &rootConfig, err
}