-
Notifications
You must be signed in to change notification settings - Fork 81
/
foundationdb_custom_parameter.go
76 lines (63 loc) · 2.57 KB
/
foundationdb_custom_parameter.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
/*
* foundationdb_custom_parameters.go
*
* This source file is part of the FoundationDB open source project
*
* Copyright 2021-2022 Apple Inc. and the FoundationDB project 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 v1beta1
import (
"fmt"
"strings"
)
// FoundationDBCustomParameter defines a single custom knob
// +kubebuilder:validation:MaxLength=100
type FoundationDBCustomParameter string
// FoundationDBCustomParameters defines a slice of custom knobs
// +kubebuilder:validation:MaxItems=100
type FoundationDBCustomParameters []FoundationDBCustomParameter
// GetKnobsForCLI returns the list of knobs that should be provided to the commandline when running
// an command over the admin client.
func (customParameters FoundationDBCustomParameters) GetKnobsForCLI() []string {
args := make([]string, 0, len(customParameters))
for _, arg := range customParameters {
args = append(args, fmt.Sprintf("--%s", arg))
}
return args
}
// ValidateCustomParameters ensures that no duplicate values are set and that no
// protected/forbidden parameters are set. Theoretically we could also check if FDB
// supports the given parameter.
func (customParameters FoundationDBCustomParameters) ValidateCustomParameters() error {
protectedParameters := map[string]None{"datadir": {}}
parameters := make(map[string]None)
violations := make([]string, 0)
for _, parameter := range customParameters {
parameterName := strings.Split(string(parameter), "=")[0]
parameterName = strings.TrimSpace(parameterName)
if _, ok := parameters[parameterName]; !ok {
parameters[parameterName] = None{}
} else {
violations = append(violations, fmt.Sprintf("found duplicated customParameter: %v", parameterName))
}
if _, ok := protectedParameters[parameterName]; ok {
violations = append(violations, fmt.Sprintf("found protected customParameter: %v, please remove this parameter from the customParameters list", parameterName))
}
}
if len(violations) > 0 {
return fmt.Errorf("found the following customParameters violations:\n%s", strings.Join(violations, "\n"))
}
return nil
}