-
Notifications
You must be signed in to change notification settings - Fork 1.8k
/
options.go
113 lines (91 loc) · 4.52 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
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
/*
Copyright 2021 The Dapr 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 options
import (
"flag"
"strings"
"time"
"k8s.io/klog"
"github.com/dapr/dapr/pkg/metrics"
"github.com/dapr/kit/logger"
)
const (
// defaultDaprSystemConfigName is the default resource object name for Dapr System Config.
defaultDaprSystemConfigName = "daprsystem"
// defaultWatchInterval is the default value for watch-interval, in seconds (note this is a string as `once` is an acceptable value too).
defaultWatchInterval = "0"
// defaultMaxPodRestartsPerMinute is the default value for max-pod-restarts-per-minute.
defaultMaxPodRestartsPerMinute = 20
)
var log = logger.NewLogger("dapr.operator.options")
type Options struct {
Config string
MaxPodRestartsPerMinute int
DisableLeaderElection bool
DisableServiceReconciler bool
WatchNamespace string
EnableArgoRolloutServiceReconciler bool
WatchdogEnabled bool
WatchdogInterval time.Duration
watchdogIntervalStr string
WatchdogCanPatchPodLabels bool
TrustAnchorsFile string
Logger logger.Options
Metrics *metrics.Options
}
func New() *Options {
var opts Options
// This resets the flags on klog, which will otherwise try to log to the FS.
klogFlags := flag.NewFlagSet("klog", flag.ExitOnError)
klog.InitFlags(klogFlags)
klogFlags.Set("logtostderr", "true")
flag.StringVar(&opts.Config, "config", defaultDaprSystemConfigName, "Path to config file, or name of a configuration object")
flag.StringVar(&opts.watchdogIntervalStr, "watch-interval", defaultWatchInterval, "Interval for polling pods' state, e.g. '2m'. Set to '0' to disable, or 'once' to only run once when the operator starts")
flag.IntVar(&opts.MaxPodRestartsPerMinute, "max-pod-restarts-per-minute", defaultMaxPodRestartsPerMinute, "Maximum number of pods in an invalid state that can be restarted per minute")
flag.BoolVar(&opts.DisableLeaderElection, "disable-leader-election", false, "Disable leader election for operator")
flag.BoolVar(&opts.DisableServiceReconciler, "disable-service-reconciler", false, "Disable the Service reconciler for Dapr-enabled Deployments and StatefulSets")
flag.StringVar(&opts.WatchNamespace, "watch-namespace", "", "Namespace to watch Dapr annotated resources in")
flag.BoolVar(&opts.EnableArgoRolloutServiceReconciler, "enable-argo-rollout-service-reconciler", false, "Enable the service reconciler for Dapr-enabled Argo Rollouts")
flag.BoolVar(&opts.WatchdogCanPatchPodLabels, "watchdog-can-patch-pod-labels", false, "Allow watchdog to patch pod labels to set pods with sidecar present")
flag.StringVar(&opts.TrustAnchorsFile, "trust-anchors-file", "/var/run/secrets/dapr.io/tls/ca.crt", "Path to trust anchors file")
depCCP := flag.String("certchain", "", "DEPRECATED")
depRCF := flag.String("issuer-ca-filename", "", "DEPRECATED")
depICF := flag.String("issuer-certificate-filename", "", "DEPRECATED")
depIKF := flag.String("issuer-key-filename", "", "DEPRECATED")
opts.Logger = logger.DefaultOptions()
opts.Logger.AttachCmdFlags(flag.StringVar, flag.BoolVar)
opts.Metrics = metrics.DefaultMetricOptions()
opts.Metrics.AttachCmdFlags(flag.StringVar, flag.BoolVar)
flag.Parse()
if len(*depRCF) > 0 || len(*depICF) > 0 || len(*depIKF) > 0 || len(*depCCP) > 0 {
log.Warn("--certchain, --issuer-ca-filename, --issuer-certificate-filename and --issuer-key-filename are deprecated and will be removed in v1.14")
}
wilc := strings.ToLower(opts.watchdogIntervalStr)
switch wilc {
case "0", "false", "f", "no", "off":
// Disabled - do nothing
default:
opts.WatchdogEnabled = true
if wilc != "once" {
dur, err := time.ParseDuration(opts.watchdogIntervalStr)
if err != nil {
log.Fatalf("invalid value for watch-interval: %v", err)
}
if dur < time.Second {
log.Fatalf("invalid watch-interval value: if not '0' or 'once', must be at least 1s")
}
opts.WatchdogInterval = dur
}
}
return &opts
}