-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Only add very basic components Signed-off-by: Jens Schneider <schneider@23technologies.cloud>
- Loading branch information
0 parents
commit 455c9c7
Showing
9 changed files
with
2,162 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,137 @@ | ||
# SPDX-FileCopyrightText: 2021 SAP SE or an SAP affiliate company and Gardener contributors | ||
# | ||
# SPDX-License-Identifier: Apache-2.0 | ||
|
||
EXTENSION_PREFIX := gardener-extension | ||
NAME := mwe | ||
REGISTRY := eu.gcr.io/gardener-project/gardener | ||
IMAGE_PREFIX := $(REGISTRY)/extensions | ||
REPO_ROOT := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST)))) | ||
HACK_DIR := $(REPO_ROOT)/hack | ||
VERSION := $(shell cat "$(REPO_ROOT)/VERSION") | ||
LD_FLAGS := "-w $(shell $(REPO_ROOT)/vendor/github.com/gardener/gardener/hack/get-build-ld-flags.sh k8s.io/component-base $(REPO_ROOT)/VERSION $(EXTENSION_PREFIX)-$(NAME))" | ||
LEADER_ELECTION := false | ||
IGNORE_OPERATION_ANNOTATION := true | ||
KUBECONFIG := dev/kubeconfig.yaml | ||
|
||
WEBHOOK_CONFIG_PORT := 8444 | ||
WEBHOOK_CONFIG_URL := localhost:${WEBHOOK_CONFIG_PORT} | ||
EXTENSION_NAMESPACE := | ||
|
||
WEBHOOK_PARAM := --webhook-config-url=${WEBHOOK_CONFIG_URL} | ||
ifeq (${WEBHOOK_CONFIG_MODE}, service) | ||
WEBHOOK_PARAM := --webhook-config-namespace=${EXTENSION_NAMESPACE} | ||
endif | ||
|
||
|
||
TOOLS_DIR := $(REPO_ROOT)/vendor/github.com/gardener/gardener/hack/tools | ||
include $(REPO_ROOT)/vendor/github.com/gardener/gardener/hack/tools.mk | ||
|
||
.PHONY: start | ||
start: | ||
@LEADER_ELECTION_NAMESPACE=garden GO111MODULE=on go run \ | ||
-mod=vendor \ | ||
-ldflags $(LD_FLAGS) \ | ||
./cmd/$(EXTENSION_PREFIX)-$(NAME) \ | ||
--kubeconfig=${KUBECONFIG} \ | ||
--ignore-operation-annotation=$(IGNORE_OPERATION_ANNOTATION) \ | ||
--leader-election=$(LEADER_ELECTION) \ | ||
--webhook-config-server-host=localhost \ | ||
--webhook-config-server-port=${WEBHOOK_CONFIG_PORT} \ | ||
--gardener-version="v1.39.0" | ||
|
||
################################################################# | ||
# Rules related to binary build, Docker image build and release # | ||
################################################################# | ||
|
||
.PHONY: install | ||
install: | ||
@LD_FLAGS=$(LD_FLAGS) \ | ||
$(REPO_ROOT)/vendor/github.com/gardener/gardener/hack/install.sh ./... | ||
|
||
.PHONY: docker-login | ||
docker-login: | ||
@gcloud auth activate-service-account --key-file .kube-secrets/gcr/gcr-readwrite.json | ||
|
||
.PHONY: docker-images | ||
docker-images: | ||
@docker build -t $(IMAGE_PREFIX)/$(NAME):$(VERSION) -t $(IMAGE_PREFIX)/$(NAME):latest -f Dockerfile -m 6g --target $(EXTENSION_PREFIX)-$(NAME) . | ||
|
||
##################################################################### | ||
# Rules for verification, formatting, linting, testing and cleaning # | ||
##################################################################### | ||
|
||
.PHONY: install-requirements | ||
install-requirements: | ||
@go install -mod=vendor $(REPO_ROOT)/vendor/github.com/ahmetb/gen-crd-api-reference-docs | ||
@go install -mod=vendor $(REPO_ROOT)/vendor/github.com/golang/mock/mockgen | ||
@go install -mod=vendor $(REPO_ROOT)/vendor/golang.org/x/tools/cmd/goimports | ||
@$(REPO_ROOT)/vendor/github.com/gardener/gardener/hack/install-requirements.sh | ||
|
||
.PHONY: revendor | ||
revendor: | ||
@GO111MODULE=on go mod vendor | ||
@GO111MODULE=on go mod tidy | ||
@chmod +x $(REPO_ROOT)/vendor/github.com/gardener/gardener/hack/* | ||
@chmod +x $(REPO_ROOT)/vendor/github.com/gardener/gardener/hack/.ci/* | ||
@sed -i "1 s/.*/\#\!\/usr\/bin\/env bash/" $(REPO_ROOT)/vendor/github.com/gardener/gardener/hack/get-build-ld-flags.sh | ||
@sed -i "1 s/.*/\#\!\/usr\/bin\/env bash/" $(REPO_ROOT)/vendor/github.com/gardener/gardener/hack/generate-controller-registration.sh | ||
@sed -i "1 s/.*/\#\!\/usr\/bin\/env bash/" $(REPO_ROOT)/vendor/github.com/gardener/gardener/hack/hook-me.sh | ||
@sed -i "s/host.docker.internal/172.18.0.1/" $(REPO_ROOT)/vendor/github.com/gardener/gardener/hack/hook-me.sh | ||
|
||
# @$(REPO_ROOT)/hack/update-github-templates.sh | ||
|
||
.PHONY: clean | ||
clean: | ||
@$(shell find ./example -type f -name "controller-registration.yaml" -exec rm '{}' \;) | ||
@$(REPO_ROOT)/vendor/github.com/gardener/gardener/hack/clean.sh ./cmd/... ./pkg/... ./test/... | ||
|
||
.PHONY: check-generate | ||
check-generate: | ||
@$(REPO_ROOT)/vendor/github.com/gardener/gardener/hack/check-generate.sh $(REPO_ROOT) | ||
|
||
# TODO: after next gardener/gardener revendoring use the docforge instance in the tools directory | ||
.PHONY: check-docforge | ||
check-docforge: | ||
@./hack/check-docforge.sh | ||
|
||
.PHONY: check | ||
check: $(GOIMPORTS) | ||
go vet ./... | ||
@$(REPO_ROOT)/vendor/github.com/gardener/gardener/hack/check-charts.sh ./charts | ||
|
||
.PHONY: generate | ||
generate: | ||
@GO111MODULE=off hack/update-codegen.sh --parallel | ||
@$(REPO_ROOT)/vendor/github.com/gardener/gardener/hack/generate.sh ./charts/... ./cmd/... ./pkg/... ./test/... | ||
|
||
.PHONY: format | ||
format: | ||
@$(REPO_ROOT)/vendor/github.com/gardener/gardener/hack/format.sh ./cmd ./pkg ./test | ||
|
||
.PHONY: test | ||
test: | ||
@SKIP_FETCH_TOOLS=1 $(REPO_ROOT)/vendor/github.com/gardener/gardener/hack/test.sh ./cmd/... ./pkg/... | ||
|
||
.PHONY: test-cov | ||
test-cov: | ||
@SKIP_FETCH_TOOLS=1 $(REPO_ROOT)/vendor/github.com/gardener/gardener/hack/test-cover.sh ./cmd/... ./pkg/... | ||
|
||
.PHONY: test-clean | ||
test-clean: | ||
@$(REPO_ROOT)/vendor/github.com/gardener/gardener/hack/test-cover-clean.sh | ||
|
||
.PHONY: verify | ||
verify: check check-docforge format test | ||
|
||
.PHONY: verify-extended | ||
verify-extended: install-requirements check-generate check check-docforge format test test-cov test-clean | ||
|
||
.PHONY: get-debug-command | ||
get-debug-command: | ||
$(info LEADER_ELECTION_NAMESPACE=garden dlv debug --build-flags "mod vendor" ./cmd/$(EXTENSION_PREFIX)-$(NAME) -- \ | ||
--kubeconfig=${KUBECONFIG} \ | ||
--ignore-operation-annotation=$(IGNORE_OPERATION_ANNOTATION) \ | ||
--leader-election=$(LEADER_ELECTION) \ | ||
--gardener-version="v1.39.0") | ||
@true |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,86 @@ | ||
// SPDX-FileCopyrightText: 2021 SAP SE or an SAP affiliate company and Gardener contributors | ||
// | ||
// SPDX-License-Identifier: Apache-2.0 | ||
|
||
package app | ||
|
||
import ( | ||
"context" | ||
"fmt" | ||
|
||
"github.com/23technologies/gardener-extension-mwe/pkg/controller/lifecycle" | ||
extensionscontroller "github.com/gardener/gardener/extensions/pkg/controller" | ||
"github.com/gardener/gardener/extensions/pkg/util" | ||
|
||
"github.com/spf13/cobra" | ||
corev1 "k8s.io/api/core/v1" | ||
componentbaseconfig "k8s.io/component-base/config" | ||
"k8s.io/component-base/version/verflag" | ||
"sigs.k8s.io/controller-runtime/pkg/client" | ||
"sigs.k8s.io/controller-runtime/pkg/manager" | ||
) | ||
|
||
// NewServiceControllerCommand creates a new command that is used to start the mwe controller | ||
func NewServiceControllerCommand() *cobra.Command { | ||
options := NewOptions() | ||
|
||
cmd := &cobra.Command{ | ||
Use: "gardener-extension-mwe", | ||
Short: "Minimal working example controller does nothing special", | ||
SilenceErrors: true, | ||
|
||
RunE: func(cmd *cobra.Command, args []string) error { | ||
verflag.PrintAndExitIfRequested() | ||
|
||
if err := options.optionAggregator.Complete(); err != nil { | ||
return fmt.Errorf("error completing options: %s", err) | ||
} | ||
cmd.SilenceUsage = true | ||
return options.run(cmd.Context()) | ||
}, | ||
} | ||
|
||
verflag.AddFlags(cmd.Flags()) | ||
options.optionAggregator.AddFlags(cmd.Flags()) | ||
|
||
return cmd | ||
} | ||
|
||
func (o *Options) run(ctx context.Context) error { | ||
// TODO: Make these flags configurable via command line parameters or component config file. | ||
util.ApplyClientConnectionConfigurationToRESTConfig(&componentbaseconfig.ClientConnectionConfiguration{ | ||
QPS: 100.0, | ||
Burst: 130, | ||
}, o.restOptions.Completed().Config) | ||
|
||
mgrOpts := o.managerOptions.Completed().Options() | ||
|
||
// do not enable a metrics server for the quick start | ||
mgrOpts.MetricsBindAddress = "0" | ||
|
||
mgrOpts.ClientDisableCacheFor = []client.Object{ | ||
&corev1.Secret{}, // applied for ManagedResources | ||
} | ||
|
||
mgr, err := manager.New(o.restOptions.Completed().Config, mgrOpts) | ||
if err != nil { | ||
return fmt.Errorf("could not instantiate controller-manager: %s", err) | ||
} | ||
|
||
if err := extensionscontroller.AddToScheme(mgr.GetScheme()); err != nil { | ||
return fmt.Errorf("could not update manager scheme: %s", err) | ||
} | ||
|
||
o.controllerOptions.Completed().Apply(&lifecycle.DefaultAddOptions.ControllerOptions) | ||
o.lifecycleOptions.Completed().Apply(&lifecycle.DefaultAddOptions.ControllerOptions) | ||
|
||
if err := o.controllerSwitches.Completed().AddToManager(mgr); err != nil { | ||
return fmt.Errorf("could not add controllers to manager: %s", err) | ||
} | ||
|
||
if err := mgr.Start(ctx); err != nil { | ||
return fmt.Errorf("error running manager: %s", err) | ||
} | ||
|
||
return nil | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,70 @@ | ||
// SPDX-FileCopyrightText: 2021 SAP SE or an SAP affiliate company and Gardener contributors | ||
// | ||
// SPDX-License-Identifier: Apache-2.0 | ||
|
||
package app | ||
|
||
import ( | ||
"os" | ||
|
||
"github.com/23technologies/gardener-extension-mwe/pkg/controller/lifecycle" | ||
controllercmd "github.com/gardener/gardener/extensions/pkg/controller/cmd" | ||
) | ||
|
||
// ExtensionName is the name of the extension. | ||
const ExtensionName = "mwe" | ||
|
||
// Options holds configuration passed to the mwe controller. | ||
type Options struct { | ||
generalOptions *controllercmd.GeneralOptions | ||
restOptions *controllercmd.RESTOptions | ||
managerOptions *controllercmd.ManagerOptions | ||
controllerOptions *controllercmd.ControllerOptions | ||
lifecycleOptions *controllercmd.ControllerOptions | ||
healthOptions *controllercmd.ControllerOptions | ||
controllerSwitches *controllercmd.SwitchOptions | ||
reconcileOptions *controllercmd.ReconcilerOptions | ||
optionAggregator controllercmd.OptionAggregator | ||
} | ||
|
||
// NewOptions creates a new Options instance. | ||
func NewOptions() *Options { | ||
options := &Options{ | ||
generalOptions: &controllercmd.GeneralOptions{}, | ||
restOptions: &controllercmd.RESTOptions{}, | ||
managerOptions: &controllercmd.ManagerOptions{ | ||
// These are default values. | ||
LeaderElection: true, | ||
LeaderElectionID: controllercmd.LeaderElectionNameID(ExtensionName), | ||
LeaderElectionNamespace: os.Getenv("LEADER_ELECTION_NAMESPACE"), | ||
}, | ||
controllerOptions: &controllercmd.ControllerOptions{ | ||
// This is a default value. | ||
MaxConcurrentReconciles: 5, | ||
}, | ||
lifecycleOptions: &controllercmd.ControllerOptions{ | ||
// This is a default value. | ||
MaxConcurrentReconciles: 5, | ||
}, | ||
healthOptions: &controllercmd.ControllerOptions{ | ||
// This is a default value. | ||
MaxConcurrentReconciles: 5, | ||
}, | ||
reconcileOptions: &controllercmd.ReconcilerOptions{}, | ||
controllerSwitches: controllercmd.NewSwitchOptions( | ||
controllercmd.Switch("mwe_lifecycle_controller", lifecycle.AddToManager)), | ||
} | ||
|
||
options.optionAggregator = controllercmd.NewOptionAggregator( | ||
options.generalOptions, | ||
options.restOptions, | ||
options.managerOptions, | ||
options.controllerOptions, | ||
controllercmd.PrefixOption("lifecycle-", options.lifecycleOptions), | ||
controllercmd.PrefixOption("healthcheck-", options.healthOptions), | ||
options.controllerSwitches, | ||
options.reconcileOptions, | ||
) | ||
|
||
return options | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
// SPDX-FileCopyrightText: 2021 SAP SE or an SAP affiliate company and Gardener contributors | ||
// | ||
// SPDX-License-Identifier: Apache-2.0 | ||
|
||
package main | ||
|
||
import ( | ||
"fmt" | ||
|
||
"github.com/23technologies/gardener-extension-mwe/cmd/gardener-extension-mwe/app" | ||
|
||
"github.com/gardener/gardener/pkg/logger" | ||
runtimelog "sigs.k8s.io/controller-runtime/pkg/log" | ||
"sigs.k8s.io/controller-runtime/pkg/manager/signals" | ||
) | ||
|
||
func main() { | ||
runtimelog.SetLogger(logger.ZapLogger(false)) | ||
|
||
ctx := signals.SetupSignalHandler() | ||
if err := app.NewServiceControllerCommand().ExecuteContext(ctx); err != nil { | ||
fmt.Println(err) | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
module github.com/23technologies/gardener-extension-mwe | ||
|
||
go 1.16 | ||
|
||
require ( | ||
github.com/ahmetb/gen-crd-api-reference-docs v0.2.0 | ||
github.com/gardener/gardener v1.43.1 | ||
github.com/go-logr/logr v1.2.2 | ||
github.com/spf13/cobra v1.4.0 | ||
golang.org/x/tools v0.1.9 | ||
k8s.io/api v0.23.5 | ||
k8s.io/code-generator v0.23.5 | ||
k8s.io/component-base v0.23.5 | ||
sigs.k8s.io/controller-runtime v0.11.2 | ||
) | ||
|
||
replace ( | ||
k8s.io/api => k8s.io/api v0.22.2 | ||
k8s.io/apimachinery => k8s.io/apimachinery v0.22.2 | ||
k8s.io/client-go => k8s.io/client-go v0.22.2 | ||
k8s.io/component-base => k8s.io/component-base v0.22.2 | ||
k8s.io/helm => k8s.io/helm v2.13.1+incompatible | ||
) |
Oops, something went wrong.