/
options.go
83 lines (73 loc) · 2.86 KB
/
options.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
/*
* Copyright 2018 The Service Manager Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package sbproxy
import (
"github.com/Peripli/service-broker-proxy/pkg/authn"
"github.com/Peripli/service-broker-proxy/pkg/sbproxy/notifications"
"github.com/Peripli/service-broker-proxy/pkg/sbproxy/reconcile"
"github.com/Peripli/service-broker-proxy/pkg/sm"
"github.com/Peripli/service-manager/pkg/env"
"github.com/Peripli/service-manager/pkg/health"
"github.com/Peripli/service-manager/pkg/log"
"github.com/Peripli/service-manager/pkg/server"
"github.com/Peripli/service-manager/pkg/util"
"github.com/spf13/pflag"
)
// Settings type holds all config properties for the sbproxy
type Settings struct {
Server *server.Settings `mapstructure:"server"`
Log *log.Settings `mapstructure:"log"`
Sm *sm.Settings `mapstructure:"sm"`
Reconcile *reconcile.Settings `mapstructure:"app"`
Producer *notifications.ProducerSettings `mapstructure:"producer"`
Health *health.Settings `mapstructure:"health"`
Authentication *authn.Settings `mapstructure:"authn"`
}
// DefaultSettings returns default value for the proxy settings
func DefaultSettings() *Settings {
return &Settings{
Server: server.DefaultSettings(),
Log: log.DefaultSettings(),
Sm: sm.DefaultSettings(),
Reconcile: reconcile.DefaultSettings(),
Producer: notifications.DefaultProducerSettings(),
Health: health.DefaultSettings(),
Authentication: authn.DefaultSettings(),
}
}
// NewSettings creates new proxy settings from the specified environment
func NewSettings(env env.Environment) (*Settings, error) {
config := DefaultSettings()
if err := env.Unmarshal(config); err != nil {
return nil, err
}
return config, nil
}
// AddPFlags adds the SM config flags to the provided flag set
func AddPFlags(set *pflag.FlagSet) {
env.CreatePFlags(set, DefaultSettings())
env.CreatePFlagsForConfigFile(set)
}
// Validate validates that the configuration contains all mandatory properties
func (c *Settings) Validate() error {
validatable := []util.InputValidator{c.Server, c.Log, c.Sm, c.Reconcile, c.Producer, c.Health}
for _, item := range validatable {
if err := item.Validate(); err != nil {
return err
}
}
return nil
}