/
app.go
76 lines (60 loc) · 2.28 KB
/
app.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
package app
import (
"context"
"fmt"
admissioncmd "github.com/metal-stack/gardener-extension-provider-metal/pkg/admission/cmd"
metalinstall "github.com/metal-stack/gardener-extension-provider-metal/pkg/apis/metal/install"
providermetal "github.com/metal-stack/gardener-extension-provider-metal/pkg/metal"
controllercmd "github.com/gardener/gardener/extensions/pkg/controller/cmd"
"github.com/gardener/gardener/extensions/pkg/util"
webhookcmd "github.com/gardener/gardener/extensions/pkg/webhook/cmd"
"github.com/gardener/gardener/pkg/apis/core/install"
"github.com/spf13/cobra"
componentbaseconfig "k8s.io/component-base/config"
logf "sigs.k8s.io/controller-runtime/pkg/log"
"sigs.k8s.io/controller-runtime/pkg/manager"
)
var log = logf.Log.WithName("gardener-extension-admission-metal")
// NewAdmissionCommand creates a new command for running an metal admission webhook.
func NewAdmissionCommand(ctx context.Context) *cobra.Command {
var (
restOpts = &controllercmd.RESTOptions{}
mgrOpts = &controllercmd.ManagerOptions{
WebhookServerPort: 443,
}
webhookSwitches = admissioncmd.GardenWebhookSwitchOptions()
webhookOptions = webhookcmd.NewAddToManagerSimpleOptions(webhookSwitches)
aggOption = controllercmd.NewOptionAggregator(
restOpts,
mgrOpts,
webhookOptions,
)
)
cmd := &cobra.Command{
Use: fmt.Sprintf("admission-%s", providermetal.Type),
RunE: func(cmd *cobra.Command, args []string) error {
if err := aggOption.Complete(); err != nil {
controllercmd.LogErrAndExit(err, "Error completing options")
}
util.ApplyClientConnectionConfigurationToRESTConfig(&componentbaseconfig.ClientConnectionConfiguration{
QPS: 100.0,
Burst: 130,
}, restOpts.Completed().Config)
mgr, err := manager.New(restOpts.Completed().Config, mgrOpts.Completed().Options())
if err != nil {
controllercmd.LogErrAndExit(err, "Could not instantiate manager")
}
install.Install(mgr.GetScheme())
if err := metalinstall.AddToScheme(mgr.GetScheme()); err != nil {
controllercmd.LogErrAndExit(err, "Could not update manager scheme")
}
log.Info("Setting up webhook server")
if err := webhookOptions.Completed().AddToManager(mgr); err != nil {
return err
}
return mgr.Start(ctx)
},
}
aggOption.AddFlags(cmd.Flags())
return cmd
}