Skip to content

Commit 0f08c36

Browse files
authored
[shell-operator] add default option funcs, break import cycle in app (#828)
Signed-off-by: Pavel Okhlopkov <[email protected]>
1 parent ae8e951 commit 0f08c36

File tree

14 files changed

+283
-96
lines changed

14 files changed

+283
-96
lines changed

pkg/app/kube-client.go

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,25 +7,32 @@ import (
77
)
88

99
var (
10-
KubeContext = ""
11-
KubeConfig = ""
12-
KubeServer = ""
10+
KubeContext = ""
11+
KubeConfig = ""
12+
KubeServer = ""
13+
KubeClientFieldManager = ""
1314
)
1415

1516
var (
16-
KubeClientQpsDefault = "5" // DefaultQPS from k8s.io/client-go/rest/config.go
17-
KubeClientQps float32
17+
KubeClientQps float32
18+
KubeClientBurst int
19+
)
20+
21+
const (
22+
KubeClientQpsDefault = "5" // DefaultQPS from k8s.io/client-go/rest/config.go
1823
KubeClientBurstDefault = "10" // DefaultBurst from k8s.io/client-go/rest/config.go
19-
KubeClientBurst int
2024
)
2125

2226
var (
23-
ObjectPatcherKubeClientQpsDefault = "5" // DefaultQPS from k8s.io/client-go/rest/config.go
24-
ObjectPatcherKubeClientQps float32
27+
ObjectPatcherKubeClientQps float32
28+
ObjectPatcherKubeClientBurst int
29+
ObjectPatcherKubeClientTimeout time.Duration
30+
)
31+
32+
const (
33+
ObjectPatcherKubeClientQpsDefault = "5" // DefaultQPS from k8s.io/client-go/rest/config.go
2534
ObjectPatcherKubeClientBurstDefault = "10" // DefaultBurst from k8s.io/client-go/rest/config.go
26-
ObjectPatcherKubeClientBurst int
2735
ObjectPatcherKubeClientTimeoutDefault = "10s"
28-
ObjectPatcherKubeClientTimeout time.Duration
2936
)
3037

3138
func DefineKubeClientFlags(cmd *kingpin.CmdClause) {

pkg/app/log.go

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@ import (
88

99
"github.com/deckhouse/deckhouse/pkg/log"
1010
"gopkg.in/alecthomas/kingpin.v2"
11-
12-
"github.com/flant/shell-operator/pkg/config"
1311
)
1412

1513
// Use info level with timestamps and a text output by default
@@ -44,8 +42,14 @@ func DefineLoggingFlags(cmd *kingpin.CmdClause) {
4442
BoolVar(&LogProxyHookJSON)
4543
}
4644

45+
type Registerer interface {
46+
Register(key string, help string, defaultValue string,
47+
setter func(key string, newValue string) error,
48+
expirer func(key string, newValue string) time.Duration)
49+
}
50+
4751
// SetupLogging sets logger formatter and level.
48-
func SetupLogging(runtimeConfig *config.Config, logger *log.Logger) {
52+
func SetupLogging(runtimeConfig Registerer, logger *log.Logger) {
4953
// TODO: if we need formatters - add to logger
5054
// jsonFormatter := log.JSONFormatter{DisableTimestamp: LogNoTime}
5155
// textFormatter := log.TextFormatter{DisableTimestamp: LogNoTime, DisableColors: true}

pkg/app/webhook.go

Lines changed: 77 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -2,112 +2,132 @@ package app
22

33
import (
44
"gopkg.in/alecthomas/kingpin.v2"
5+
)
6+
7+
// Note: ValidatingWebhookSettings and ConversionWebhookSettings are defined in
8+
// their respective packages (pkg/webhook/admission and pkg/webhook/conversion).
9+
// Default values are centralized in pkg/webhook/defaults package.
510

6-
"github.com/flant/shell-operator/pkg/webhook/admission"
7-
"github.com/flant/shell-operator/pkg/webhook/conversion"
8-
"github.com/flant/shell-operator/pkg/webhook/server"
11+
// Validating webhook flag variables - exported so they can be used after parsing
12+
var (
13+
ValidatingWebhookConfigurationName string
14+
ValidatingWebhookServiceName string
15+
ValidatingWebhookServerCert string
16+
ValidatingWebhookServerKey string
17+
ValidatingWebhookCA string
18+
ValidatingWebhookClientCA []string
19+
ValidatingWebhookFailurePolicy string
20+
ValidatingWebhookListenPort string
21+
ValidatingWebhookListenAddress string
922
)
1023

11-
var ValidatingWebhookSettings = &admission.WebhookSettings{
12-
Settings: server.Settings{
13-
ServerCertPath: "/validating-certs/tls.crt",
14-
ServerKeyPath: "/validating-certs/tls.key",
15-
ClientCAPaths: nil,
16-
ServiceName: "shell-operator-validating-svc",
17-
ListenAddr: "0.0.0.0",
18-
ListenPort: "9680",
19-
},
20-
CAPath: "/validating-certs/ca.crt",
21-
ConfigurationName: "shell-operator-hooks",
22-
DefaultFailurePolicy: "Fail",
23-
}
24+
// Conversion webhook flag variables - exported so they can be used after parsing
25+
var (
26+
ConversionWebhookServiceName string
27+
ConversionWebhookServerCert string
28+
ConversionWebhookServerKey string
29+
ConversionWebhookCA string
30+
ConversionWebhookClientCA []string
31+
ConversionWebhookListenPort string
32+
ConversionWebhookListenAddress string
33+
)
2434

25-
var ConversionWebhookSettings = &conversion.WebhookSettings{
26-
Settings: server.Settings{
27-
ServerCertPath: "/conversion-certs/tls.crt",
28-
ServerKeyPath: "/conversion-certs/tls.key",
29-
ClientCAPaths: nil,
30-
ServiceName: "shell-operator-conversion-svc",
31-
ListenAddr: "0.0.0.0",
32-
ListenPort: "9681",
33-
},
34-
CAPath: "/conversion-certs/ca.crt",
35-
}
35+
// Default values for validating webhook configuration
36+
const (
37+
ValidatingServerCertPathDefault = "/validating-certs/tls.crt"
38+
ValidatingServerKeyPathDefault = "/validating-certs/tls.key"
39+
ValidatingServiceNameDefault = "shell-operator-validating-svc"
40+
ValidatingListenAddrDefault = "0.0.0.0"
41+
ValidatingListenPortDefault = "9680"
42+
ValidatingCAPathDefault = "/validating-certs/ca.crt"
43+
ValidatingConfigurationNameDefault = "shell-operator-hooks"
44+
ValidatingFailurePolicyTypeDefault = "Fail"
45+
)
46+
47+
// Default values for conversion webhook configuration
48+
const (
49+
ConversionServerCertPathDefault = "/conversion-certs/tls.crt"
50+
ConversionServerKeyPathDefault = "/conversion-certs/tls.key"
51+
ConversionServiceNameDefault = "shell-operator-conversion-svc"
52+
ConversionListenAddrDefault = "0.0.0.0"
53+
ConversionListenPortDefault = "9681"
54+
ConversionCAPathDefault = "/conversion-certs/ca.crt"
55+
)
3656

3757
// DefineValidatingWebhookFlags defines flags for ValidatingWebhook server.
3858
func DefineValidatingWebhookFlags(cmd *kingpin.CmdClause) {
3959
cmd.Flag("validating-webhook-configuration-name", "A name of a ValidatingWebhookConfiguration resource. Can be set with $VALIDATING_WEBHOOK_CONFIGURATION_NAME.").
4060
Envar("VALIDATING_WEBHOOK_CONFIGURATION_NAME").
41-
Default(ValidatingWebhookSettings.ConfigurationName).
42-
StringVar(&ValidatingWebhookSettings.ConfigurationName)
61+
Default(ValidatingConfigurationNameDefault).
62+
StringVar(&ValidatingWebhookConfigurationName)
4363
cmd.Flag("validating-webhook-service-name", "A name of a service used in ValidatingWebhookConfiguration. Can be set with $VALIDATING_WEBHOOK_SERVICE_NAME.").
4464
Envar("VALIDATING_WEBHOOK_SERVICE_NAME").
45-
Default(ValidatingWebhookSettings.ServiceName).
46-
StringVar(&ValidatingWebhookSettings.ServiceName)
65+
Default(ValidatingServiceNameDefault).
66+
StringVar(&ValidatingWebhookServiceName)
4767
cmd.Flag("validating-webhook-server-cert", "A path to a server certificate for service used in ValidatingWebhookConfiguration. Can be set with $VALIDATING_WEBHOOK_SERVER_CERT.").
4868
Envar("VALIDATING_WEBHOOK_SERVER_CERT").
49-
Default(ValidatingWebhookSettings.ServerCertPath).
50-
StringVar(&ValidatingWebhookSettings.ServerCertPath)
69+
Default(ValidatingServerCertPathDefault).
70+
StringVar(&ValidatingWebhookServerCert)
5171
cmd.Flag("validating-webhook-server-key", "A path to a server private key for service used in ValidatingWebhookConfiguration. Can be set with $VALIDATING_WEBHOOK_SERVER_KEY.").
5272
Envar("VALIDATING_WEBHOOK_SERVER_KEY").
53-
Default(ValidatingWebhookSettings.ServerKeyPath).
54-
StringVar(&ValidatingWebhookSettings.ServerKeyPath)
73+
Default(ValidatingServerKeyPathDefault).
74+
StringVar(&ValidatingWebhookServerKey)
5575
cmd.Flag("validating-webhook-ca", "A path to a ca certificate for ValidatingWebhookConfiguration. Can be set with $VALIDATING_WEBHOOK_CA.").
5676
Envar("VALIDATING_WEBHOOK_CA").
57-
Default(ValidatingWebhookSettings.CAPath).
58-
StringVar(&ValidatingWebhookSettings.CAPath)
77+
Default(ValidatingCAPathDefault).
78+
StringVar(&ValidatingWebhookCA)
5979
cmd.Flag("validating-webhook-client-ca", "A path to a server certificate for ValidatingWebhookConfiguration. Can be set with $VALIDATING_WEBHOOK_CLIENT_CA.").
6080
Envar("VALIDATING_WEBHOOK_CLIENT_CA").
61-
StringsVar(&ValidatingWebhookSettings.ClientCAPaths)
81+
StringsVar(&ValidatingWebhookClientCA)
6282
cmd.Flag("validating-webhook-failure-policy", "Defines default FailurePolicy for ValidatingWebhookConfiguration.").
63-
Default("Fail").
83+
Default(ValidatingFailurePolicyTypeDefault).
6484
Envar("VALIDATING_WEBHOOK_FAILURE_POLICY").
65-
EnumVar(&ValidatingWebhookSettings.DefaultFailurePolicy, "Fail", "Ignore")
85+
EnumVar(&ValidatingWebhookFailurePolicy, "Fail", "Ignore")
6686
cmd.Flag("validating-webhook-listen-port",
6787
"Defines default ListenPort for ValidatingWebhookConfiguration. "+
6888
"Can be set with $VALIDATING_WEBHOOK_LISTEN_PORT.").
69-
Default(ValidatingWebhookSettings.ListenPort).
89+
Default(ValidatingListenPortDefault).
7090
Envar("VALIDATING_WEBHOOK_LISTEN_PORT").
71-
StringVar(&ValidatingWebhookSettings.ListenPort)
91+
StringVar(&ValidatingWebhookListenPort)
7292
cmd.Flag("validating-webhook-listen-address",
7393
"Defines default ListenAddr for ValidatingWebhookConfiguration. "+
7494
"Can be set with $VALIDATING_WEBHOOK_LISTEN_ADDRESS.").
75-
Default(ValidatingWebhookSettings.ListenAddr).
95+
Default(ValidatingListenAddrDefault).
7696
Envar("VALIDATING_WEBHOOK_LISTEN_ADDRESS").
77-
StringVar(&ValidatingWebhookSettings.ListenAddr)
97+
StringVar(&ValidatingWebhookListenAddress)
7898
}
7999

80100
// DefineConversionWebhookFlags defines flags for ConversionWebhook server.
81101
func DefineConversionWebhookFlags(cmd *kingpin.CmdClause) {
82102
cmd.Flag("conversion-webhook-service-name", "A name of a service for clientConfig in CRD. Can be set with $CONVERSION_WEBHOOK_SERVICE_NAME.").
83103
Envar("CONVERSION_WEBHOOK_SERVICE_NAME").
84-
Default(ConversionWebhookSettings.ServiceName).
85-
StringVar(&ConversionWebhookSettings.ServiceName)
104+
Default(ConversionServiceNameDefault).
105+
StringVar(&ConversionWebhookServiceName)
86106
cmd.Flag("conversion-webhook-server-cert", "A path to a server certificate for clientConfig in CRD. Can be set with $CONVERSION_WEBHOOK_SERVER_CERT.").
87107
Envar("CONVERSION_WEBHOOK_SERVER_CERT").
88-
Default(ConversionWebhookSettings.ServerCertPath).
89-
StringVar(&ConversionWebhookSettings.ServerCertPath)
108+
Default(ConversionServerCertPathDefault).
109+
StringVar(&ConversionWebhookServerCert)
90110
cmd.Flag("conversion-webhook-server-key", "A path to a server private key for clientConfig in CRD. Can be set with $CONVERSION_WEBHOOK_SERVER_KEY.").
91111
Envar("CONVERSION_WEBHOOK_SERVER_KEY").
92-
Default(ConversionWebhookSettings.ServerKeyPath).
93-
StringVar(&ConversionWebhookSettings.ServerKeyPath)
112+
Default(ConversionServerKeyPathDefault).
113+
StringVar(&ConversionWebhookServerKey)
94114
cmd.Flag("conversion-webhook-ca", "A path to a ca certificate for clientConfig in CRD. Can be set with $CONVERSION_WEBHOOK_CA.").
95115
Envar("CONVERSION_WEBHOOK_CA").
96-
Default(ConversionWebhookSettings.CAPath).
97-
StringVar(&ConversionWebhookSettings.CAPath)
116+
Default(ConversionCAPathDefault).
117+
StringVar(&ConversionWebhookCA)
98118
cmd.Flag("conversion-webhook-client-ca", "A path to a server certificate for CRD.spec.conversion.webhook. Can be set with $CONVERSION_WEBHOOK_CLIENT_CA.").
99119
Envar("CONVERSION_WEBHOOK_CLIENT_CA").
100-
StringsVar(&ConversionWebhookSettings.ClientCAPaths)
120+
StringsVar(&ConversionWebhookClientCA)
101121
cmd.Flag("conversion-webhook-listen-port",
102122
"Defines default ListenPort for ConversionWebhookConfiguration. "+
103123
"Can be set with $CONVERSION_WEBHOOK_LISTEN_PORT.").
104124
Envar("CONVERSION_WEBHOOK_LISTEN_PORT").
105-
Default(ConversionWebhookSettings.ListenPort).
106-
StringVar(&ConversionWebhookSettings.ListenPort)
125+
Default(ConversionListenPortDefault).
126+
StringVar(&ConversionWebhookListenPort)
107127
cmd.Flag("conversion-webhook-listen-address",
108128
"Defines default ListenAddr for ConversionWebhookConfiguration. "+
109129
"Can be set with $CONVERSION_WEBHOOK_LISTEN_ADDRESS.").
110-
Default(ConversionWebhookSettings.ListenAddr).
130+
Default(ConversionListenAddrDefault).
111131
Envar("CONVERSION_WEBHOOK_LISTEN_ADDRESS").
112-
StringVar(&ConversionWebhookSettings.ListenAddr)
132+
StringVar(&ConversionWebhookListenAddress)
113133
}

pkg/hook/config/config_v1.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import (
1111
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1212
"k8s.io/apimachinery/pkg/runtime/schema"
1313

14-
"github.com/flant/shell-operator/pkg/app"
1514
htypes "github.com/flant/shell-operator/pkg/hook/types"
1615
kubeeventsmanager "github.com/flant/shell-operator/pkg/kube_events_manager"
1716
kemtypes "github.com/flant/shell-operator/pkg/kube_events_manager/types"
@@ -441,7 +440,7 @@ func convertValidating(cfgV1 KubernetesAdmissionConfigV1) htypes.ValidatingConfi
441440
if cfgV1.FailurePolicy != nil {
442441
webhook.FailurePolicy = cfgV1.FailurePolicy
443442
} else {
444-
defaultFailurePolicy := v1.FailurePolicyType(app.ValidatingWebhookSettings.DefaultFailurePolicy)
443+
defaultFailurePolicy := v1.FailurePolicyType(admission.DefaultSettings.DefaultFailurePolicy)
445444
webhook.FailurePolicy = &defaultFailurePolicy
446445
}
447446

pkg/hook/hook_manager_test.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import (
99
"github.com/deckhouse/deckhouse/pkg/log"
1010
. "github.com/onsi/gomega"
1111

12-
"github.com/flant/shell-operator/pkg/app"
1312
"github.com/flant/shell-operator/pkg/hook/controller"
1413
"github.com/flant/shell-operator/pkg/hook/types"
1514
"github.com/flant/shell-operator/pkg/webhook/admission"
@@ -20,10 +19,10 @@ func newHookManager(t *testing.T, testdataDir string) *Manager {
2019
hooksDir, _ := filepath.Abs(testdataDir)
2120

2221
conversionManager := conversion.NewWebhookManager()
23-
conversionManager.Settings = app.ConversionWebhookSettings
22+
conversionManager.Settings = conversion.DefaultSettings
2423

2524
admissionManager := admission.NewWebhookManager(nil)
26-
admissionManager.Settings = app.ValidatingWebhookSettings
25+
admissionManager.Settings = admission.DefaultSettings
2726

2827
cfg := &ManagerConfig{
2928
WorkingDir: hooksDir,

pkg/kube/object_patch/patch.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ import (
2121
"k8s.io/client-go/dynamic"
2222
"k8s.io/client-go/kubernetes"
2323
"k8s.io/client-go/util/retry"
24+
25+
"github.com/flant/shell-operator/pkg"
2426
)
2527

2628
type ObjectPatcher struct {
@@ -106,7 +108,7 @@ func (o *ObjectPatcher) executeCreateOperation(op *createOperation) error {
106108
_, err = o.kubeClient.Dynamic().
107109
Resource(gvk).
108110
Namespace(object.GetNamespace()).
109-
Create(context.TODO(), object, metav1.CreateOptions{}, generateSubresources(op.subresource)...)
111+
Create(context.TODO(), object, pkg.DefaultCreateOptions(), generateSubresources(op.subresource)...)
110112
log.Debug("Finished Create API call")
111113

112114
objectExists := errors.IsAlreadyExists(err)
@@ -137,7 +139,7 @@ func (o *ObjectPatcher) executeCreateOperation(op *createOperation) error {
137139
_, err = o.kubeClient.Dynamic().
138140
Resource(gvk).
139141
Namespace(objCopy.GetNamespace()).
140-
Update(context.TODO(), objCopy, metav1.UpdateOptions{}, generateSubresources(op.subresource)...)
142+
Update(context.TODO(), objCopy, pkg.DefaultUpdateOptions(), generateSubresources(op.subresource)...)
141143
log.Debug("Finished Update API call")
142144
return wrapErr(err)
143145
})
@@ -184,7 +186,7 @@ func (o *ObjectPatcher) executePatchOperation(op *patchOperation) error {
184186
_, err = o.kubeClient.Dynamic().
185187
Resource(gvk).
186188
Namespace(op.namespace).
187-
Patch(context.TODO(), op.name, op.patchType, patchBytes, metav1.PatchOptions{}, generateSubresources(op.subresource)...)
189+
Patch(context.TODO(), op.name, op.patchType, patchBytes, pkg.DefaultPatchOptions(), generateSubresources(op.subresource)...)
188190
log.Debug("Finished Patch API call")
189191

190192
if op.ignoreMissingObject && errors.IsNotFound(err) {
@@ -247,7 +249,7 @@ func (o *ObjectPatcher) executeFilterOperation(op *patchOperation) error {
247249
_, err = o.kubeClient.Dynamic().
248250
Resource(gvk).
249251
Namespace(op.namespace).
250-
Update(context.TODO(), filteredObj, metav1.UpdateOptions{}, generateSubresources(op.subresource)...)
252+
Update(context.TODO(), filteredObj, pkg.DefaultUpdateOptions(), generateSubresources(op.subresource)...)
251253
log.Debug("Finished Update API call")
252254
if err != nil {
253255
return err

0 commit comments

Comments
 (0)