-
Notifications
You must be signed in to change notification settings - Fork 155
/
params.go
127 lines (108 loc) · 3.11 KB
/
params.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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
// Copyright 2018 Anapaya Systems
//
// 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 brconf
import (
"io"
"strings"
"github.com/scionproto/scion/go/lib/common"
"github.com/scionproto/scion/go/lib/config"
"github.com/scionproto/scion/go/lib/env"
"github.com/scionproto/scion/go/lib/log"
)
var _ config.Config = (*Config)(nil)
// Config is the border router configuration that is loaded from file.
type Config struct {
General env.General `toml:"general,omitempty"`
Features env.Features `toml:"features,omitempty"`
Logging log.Config `toml:"log,omitempty"`
Metrics env.Metrics `toml:"metrics,omitempty"`
BR BR `toml:"br,omitempty"`
}
func (cfg *Config) InitDefaults() {
config.InitAll(
&cfg.General,
&cfg.Features,
&cfg.Logging,
&cfg.Metrics,
&cfg.BR,
)
}
func (cfg *Config) Validate() error {
return config.ValidateAll(
&cfg.General,
&cfg.Features,
&cfg.Logging,
&cfg.Metrics,
&cfg.BR,
)
}
func (cfg *Config) Sample(dst io.Writer, path config.Path, _ config.CtxMap) {
config.WriteSample(dst, path, config.CtxMap{config.ID: idSample},
&cfg.General,
&cfg.Features,
&cfg.Logging,
&cfg.Metrics,
&cfg.BR,
)
}
func (cfg *Config) ConfigName() string {
return "br_config"
}
var _ config.Config = (*BR)(nil)
// BR contains the border router specific parts of the configuration.
type BR struct {
// RollbackFailAction indicates the action that should be taken
// if the rollback fails.
RollbackFailAction FailAction `toml:"rollback_fail_action,omitempty"`
}
func (cfg *BR) InitDefaults() {
if cfg.RollbackFailAction != FailActionContinue {
cfg.RollbackFailAction = FailActionFatal
}
}
func (cfg *BR) Validate() error {
return cfg.RollbackFailAction.Validate()
}
func (cfg *BR) Sample(dst io.Writer, path config.Path, _ config.CtxMap) {
config.WriteString(dst, brSample)
}
func (cfg *BR) ConfigName() string {
return "br"
}
type FailAction string
const (
// FailActionFatal indicates that the process exits on error.
FailActionFatal FailAction = "fatal"
// FailActionContinue indicates that the process continues on error.
FailActionContinue FailAction = "continue"
)
func (f *FailAction) Validate() error {
switch *f {
case FailActionFatal, FailActionContinue:
return nil
default:
return common.NewBasicError("Unknown FailAction", nil, "input", *f)
}
}
func (f *FailAction) UnmarshalText(text []byte) error {
switch FailAction(strings.ToLower(string(text))) {
case FailActionFatal:
*f = FailActionFatal
case FailActionContinue:
*f = FailActionContinue
default:
return common.NewBasicError("Unknown FailAction", nil, "input", string(text))
}
return nil
}