diff --git a/Makefile b/Makefile index 75fb8ab470..86244cb940 100644 --- a/Makefile +++ b/Makefile @@ -59,7 +59,7 @@ PWD := $(CURDIR) INITC_PATH := cmd/initContainer INITC_IMAGE := kyvernopre initContainer: fmt vet - GOOS=$(GOOS) go build -o $(PWD)/$(INITC_PATH)/kyvernopre -ldflags=$(LD_FLAGS) $(PWD)/$(INITC_PATH)/main.go + GOOS=$(GOOS) go build -o $(PWD)/$(INITC_PATH)/kyvernopre -ldflags=$(LD_FLAGS) $(PWD)/$(INITC_PATH) .PHONY: docker-build-initContainer docker-push-initContainer @@ -84,7 +84,7 @@ docker-get-initContainer-digest: @docker buildx imagetools inspect --raw $(REPO)/$(INITC_IMAGE):$(IMAGE_TAG) | perl -pe 'chomp if eof' | openssl dgst -sha256 | sed 's/^.* //' docker-build-initContainer-local: - CGO_ENABLED=0 GOOS=linux go build -o $(PWD)/$(INITC_PATH)/kyvernopre -ldflags=$(LD_FLAGS) $(PWD)/$(INITC_PATH)/main.go + CGO_ENABLED=0 GOOS=linux go build -o $(PWD)/$(INITC_PATH)/kyvernopre -ldflags=$(LD_FLAGS) $(PWD)/$(INITC_PATH) @docker build -f $(PWD)/$(INITC_PATH)/localDockerfile -t $(REPO)/$(INITC_IMAGE):$(IMAGE_TAG_DEV) $(PWD)/$(INITC_PATH) @docker tag $(REPO)/$(INITC_IMAGE):$(IMAGE_TAG_DEV) $(REPO)/$(INITC_IMAGE):latest @@ -111,7 +111,7 @@ local: go build -ldflags=$(LD_FLAGS) $(PWD)/$(CLI_PATH) kyverno: fmt vet - GOOS=$(GOOS) go build -o $(PWD)/$(KYVERNO_PATH)/kyverno -ldflags=$(LD_FLAGS) $(PWD)/$(KYVERNO_PATH)/main.go + GOOS=$(GOOS) go build -o $(PWD)/$(KYVERNO_PATH)/kyverno -ldflags=$(LD_FLAGS) $(PWD)/$(KYVERNO_PATH) docker-publish-kyverno: docker-buildx-builder docker-build-kyverno docker-push-kyverno @@ -119,7 +119,7 @@ docker-build-kyverno: docker-buildx-builder @docker buildx build --file $(PWD)/$(KYVERNO_PATH)/Dockerfile --progress plane --platform linux/arm64,linux/amd64,linux/s390x --tag $(REPO)/$(KYVERNO_IMAGE):$(IMAGE_TAG) . --build-arg LD_FLAGS=$(LD_FLAGS) docker-build-kyverno-local: - CGO_ENABLED=0 GOOS=linux go build -o $(PWD)/$(KYVERNO_PATH)/kyverno -ldflags=$(LD_FLAGS_DEV) $(PWD)/$(KYVERNO_PATH)/main.go + CGO_ENABLED=0 GOOS=linux go build -o $(PWD)/$(KYVERNO_PATH)/kyverno -ldflags=$(LD_FLAGS_DEV) $(PWD)/$(KYVERNO_PATH) @docker build -f $(PWD)/$(KYVERNO_PATH)/localDockerfile -t $(REPO)/$(KYVERNO_IMAGE):$(IMAGE_TAG_DEV) -t $(REPO)/$(KYVERNO_IMAGE):latest $(PWD)/$(KYVERNO_PATH) @docker tag $(REPO)/$(KYVERNO_IMAGE):$(IMAGE_TAG_DEV) $(REPO)/$(KYVERNO_IMAGE):$(IMAGE_TAG_LATEST_DEV)-latest @@ -174,7 +174,7 @@ CLI_PATH := cmd/cli/kubectl-kyverno KYVERNO_CLI_IMAGE := kyverno-cli cli: - GOOS=$(GOOS) go build -o $(PWD)/$(CLI_PATH)/kyverno -ldflags=$(LD_FLAGS) $(PWD)/$(CLI_PATH)/main.go + GOOS=$(GOOS) go build -o $(PWD)/$(CLI_PATH)/kyverno -ldflags=$(LD_FLAGS) $(PWD)/$(CLI_PATH) docker-publish-cli: docker-buildx-builder docker-build-cli docker-push-cli diff --git a/cmd/kyverno/informer.go b/cmd/kyverno/informer.go new file mode 100644 index 0000000000..f8c2073048 --- /dev/null +++ b/cmd/kyverno/informer.go @@ -0,0 +1,28 @@ +package main + +import ( + "reflect" +) + +// TODO: eventually move this in an util package +type informer interface { + Start(stopCh <-chan struct{}) + WaitForCacheSync(stopCh <-chan struct{}) map[reflect.Type]bool +} + +func startInformers(stopCh <-chan struct{}, informers ...informer) { + for i := range informers { + informers[i].Start(stopCh) + } +} + +func waitForCacheSync(stopCh <-chan struct{}, informers ...informer) { + for i := range informers { + informers[i].WaitForCacheSync(stopCh) + } +} + +func startInformersAndWaitForCacheSync(stopCh <-chan struct{}, informers ...informer) { + startInformers(stopCh, informers...) + waitForCacheSync(stopCh, informers...) +} diff --git a/cmd/kyverno/main.go b/cmd/kyverno/main.go index 1687774c8d..f7891f3a02 100755 --- a/cmd/kyverno/main.go +++ b/cmd/kyverno/main.go @@ -343,9 +343,7 @@ func main() { registerWrapperRetry := common.RetryFunc(time.Second, webhookRegistrationTimeout, webhookCfg.Register, "failed to register webhook", setupLog) registerWebhookConfigurations := func() { certManager.InitTLSPemPair() - kyvernoInformer.WaitForCacheSync(stopCh) - kubeInformer.WaitForCacheSync(stopCh) - kubeKyvernoInformer.WaitForCacheSync(stopCh) + waitForCacheSync(stopCh, kyvernoInformer, kubeInformer, kubeKyvernoInformer) // validate the ConfigMap format if err := webhookCfg.ValidateWebhookConfigurations(config.KyvernoNamespace, configData.GetInitConfigMapName()); err != nil { @@ -459,12 +457,7 @@ func main() { os.Exit(1) } - kyvernoInformer.Start(stopCh) - kubeInformer.Start(stopCh) - kubeKyvernoInformer.Start(stopCh) - kyvernoInformer.WaitForCacheSync(stopCh) - kubeInformer.WaitForCacheSync(stopCh) - kubeKyvernoInformer.WaitForCacheSync(stopCh) + startInformersAndWaitForCacheSync(stopCh, kyvernoInformer, kubeInformer, kubeKyvernoInformer) pCacheController.CheckPolicySync(stopCh)