Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Targetconfig crd #716

Draft
wants to merge 24 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
e407f8c
feat: create targetconfig clientset and crd struct
aerosouund Jan 23, 2025
d73cd55
modify destination package
aerosouund Jan 23, 2025
bfcb8e1
wip target config
aerosouund Jan 24, 2025
0e854e8
create target config client and set it as a dependency for the resolver
aerosouund Jan 24, 2025
ffa0339
some fixes
aerosouund Jan 25, 2025
4387ff7
delete unused client package and cleanup makefile
aerosouund Jan 26, 2025
d387055
Merge branch 'main' into targetconfig-crd
aerosouund Jan 26, 2025
d58f87c
change targetconfig to a config generic
aerosouund Jan 28, 2025
135da16
initialize map
aerosouund Jan 28, 2025
e53777e
add other config types
aerosouund Jan 28, 2025
1053683
use a channel to communicate target changes
aerosouund Jan 29, 2025
a9f2583
use cache in target
aerosouund Feb 1, 2025
56da453
change test signatures to match codebase changes
aerosouund Feb 3, 2025
239435a
change webook field calles webhook to host
aerosouund Feb 3, 2025
e4987cb
change webook field calles webhook to host
aerosouund Feb 3, 2025
34997d0
tc event and restart in run.go
aerosouund Feb 3, 2025
afde70e
remove comment
aerosouund Feb 3, 2025
b4b51b3
update makefile comment
aerosouund Feb 3, 2025
befa65c
gofumpy
aerosouund Feb 3, 2025
edba4fa
gofumpt
aerosouund Feb 3, 2025
99fe42c
only restart the policy report informer once all tcs has synced
aerosouund Feb 4, 2025
547f845
remove todo
aerosouund Feb 4, 2025
89abe77
list using a clientset
aerosouund Feb 4, 2025
9f9a2c1
crd modifications
aerosouund Feb 4, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
157 changes: 156 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ LOCAL_PLATFORM := linux/$(GOARCH)
PLATFORMS := linux/arm64,linux/amd64,linux/s390x
REPO := $(REGISTRY)/$(OWNER)/$(IMAGE)
COMMA := ,
PACKAGE ?= github.com/kyverno/policy-reporter

ifndef VERSION
APP_VERSION := $(GIT_SHA)
Expand All @@ -54,6 +55,19 @@ GOFUMPT := $(TOOLS_DIR)/gofumpt
GOFUMPT_VERSION := v0.4.0
TOOLS := $(HELM) $(HELM_DOCS) $(GCI) $(GOFUMPT)


CONTROLLER_GEN := $(TOOLS_DIR)/controller-gen
CONTROLLER_GEN_VERSION ?= v0.16.1
CLIENT_GEN ?= $(TOOLS_DIR)/client-gen
LISTER_GEN ?= $(TOOLS_DIR)/lister-gen
INFORMER_GEN ?= $(TOOLS_DIR)/informer-gen
OPENAPI_GEN ?= $(TOOLS_DIR)/openapi-gen
REGISTER_GEN ?= $(TOOLS_DIR)/register-gen
DEEPCOPY_GEN ?= $(TOOLS_DIR)/deepcopy-gen
DEFAULTER_GEN ?= $(TOOLS_DIR)/defaulter-gen
APPLYCONFIGURATION_GEN ?= $(TOOLS_DIR)/applyconfiguration-gen
CODE_GEN_VERSION ?= v0.28.0

$(HELM):
@echo Install helm... >&2
@GOBIN=$(TOOLS_DIR) go install helm.sh/helm/v3/cmd/helm@$(HELM_VERSION)
Expand All @@ -78,6 +92,46 @@ $(KO):
@echo Install ko... >&2
@GOBIN=$(TOOLS_DIR) go install github.com/google/ko@$(KO_VERSION)

$(CONTROLLER_GEN):
@echo Install controller-gen... >&2
@cd ./hack/controller-gen && GOBIN=$(TOOLS_DIR) go install

$(CLIENT_GEN):
@echo Install client-gen... >&2
@GOBIN=$(TOOLS_DIR) go install k8s.io/code-generator/cmd/client-gen@$(CODE_GEN_VERSION)

$(LISTER_GEN):
@echo Install lister-gen... >&2
@GOBIN=$(TOOLS_DIR) go install k8s.io/code-generator/cmd/lister-gen@$(CODE_GEN_VERSION)

$(INFORMER_GEN):
@echo Install informer-gen... >&2
@GOBIN=$(TOOLS_DIR) go install k8s.io/code-generator/cmd/informer-gen@$(CODE_GEN_VERSION)

$(OPENAPI_GEN):
@echo Install openapi-gen... >&2
@GOBIN=$(TOOLS_DIR) go install k8s.io/code-generator/cmd/openapi-gen@$(CODE_GEN_VERSION)

$(REGISTER_GEN):
@echo Install register-gen... >&2
@GOBIN=$(TOOLS_DIR) go install k8s.io/code-generator/cmd/register-gen@$(CODE_GEN_VERSION)

$(DEEPCOPY_GEN):
@echo Install deepcopy-gen... >&2
@GOBIN=$(TOOLS_DIR) go install k8s.io/code-generator/cmd/deepcopy-gen@$(CODE_GEN_VERSION)

$(DEFAULTER_GEN):
@echo Install defaulter-gen... >&2
@GOBIN=$(TOOLS_DIR) go install k8s.io/code-generator/cmd/defaulter-gen@$(CODE_GEN_VERSION)

$(APPLYCONFIGURATION_GEN):
@echo Install applyconfiguration-gen... >&2
@GOBIN=$(TOOLS_DIR) go install k8s.io/code-generator/cmd/applyconfiguration-gen@$(CODE_GEN_VERSION)

$(GEN_CRD_API_REFERENCE_DOCS):
@echo Install gen-crd-api-reference-docs... >&2
@GOBIN=$(TOOLS_DIR) go install github.com/ahmetb/gen-crd-api-reference-docs@$(GEN_CRD_API_REFERENCE_DOCS_VERSION)

.PHONY: gci
gci: $(GCI)
@echo "Running gci"
Expand Down Expand Up @@ -205,4 +259,105 @@ docker-push:

.PHONY: docker-push-dev
docker-push-dev:
@docker buildx build --progress plain --platform $(PLATFORMS) --tag $(REPO):dev . --build-arg LD_FLAGS='$(LD_FLAGS) -X main.Version=$(IMAGE_TAG)-dev' --push
@docker buildx build --progress plane --platform $(PLATFORMS) --tag $(REPO):dev . --build-arg LD_FLAGS='$(LD_FLAGS) -X main.Version=$(IMAGE_TAG)-dev' --push



###########
# CODEGEN #
###########

GOPATH_SHIM := ${PWD}/.gopath
PACKAGE_SHIM := $(GOPATH_SHIM)/src/$(PACKAGE)
OUT_PACKAGE := $(PACKAGE)/pkg/crd/client/targetconfig
INPUT_DIRS := $(PACKAGE)/pkg/crd/api/targetconfig/v1alpha1
CLIENT_INPUT_DIRS := $(PACKAGE)/pkg/crd/api/targetconfig/v1alpha1
CLIENTSET_PACKAGE := $(OUT_PACKAGE)/clientset
LISTERS_PACKAGE := $(OUT_PACKAGE)/listers
INFORMERS_PACKAGE := $(OUT_PACKAGE)/informers
APPLYCONFIGURATIONS_PACKAGE := $(OUT_PACKAGE)/applyconfigurations
CRDS_PATH := ${PWD}/config/crds


$(GOPATH_SHIM):
@echo Create gopath shim... >&2
@mkdir -p $(GOPATH_SHIM)

.INTERMEDIATE: $(PACKAGE_SHIM)
$(PACKAGE_SHIM): $(GOPATH_SHIM)
@echo Create package shim... >&2
@mkdir -p $(GOPATH_SHIM)/src/github.com/kyverno && ln -s -f ${PWD} $(PACKAGE_SHIM)

.PHONY: codegen-client-clientset
codegen-client-clientset: $(PACKAGE_SHIM) $(CLIENT_GEN) ## Generate clientset
@echo Generate clientset... >&2
@rm -rf $(CLIENTSET_PACKAGE) && mkdir -p $(CLIENTSET_PACKAGE)
GOPATH=$(GOPATH_SHIM) $(CLIENT_GEN) \
--go-header-file ./scripts/boilerplate.go.txt \
--clientset-name versioned \
--output-package $(CLIENTSET_PACKAGE) \
--input-base "" \
--input $(CLIENT_INPUT_DIRS)

.PHONY: codegen-client-listers
codegen-client-listers: $(PACKAGE_SHIM) $(LISTER_GEN) ## Generate listers
@echo Generate listers... >&2
@rm -rf $(LISTERS_PACKAGE) && mkdir -p $(LISTERS_PACKAGE)
GOPATH=$(GOPATH_SHIM) $(LISTER_GEN) \
--go-header-file ./scripts/boilerplate.go.txt \
--output-package $(LISTERS_PACKAGE) \
--input-dirs $(CLIENT_INPUT_DIRS)

.PHONY: codegen-client-informers
codegen-client-informers: $(PACKAGE_SHIM) $(INFORMER_GEN) ## Generate informers
GOPATH=$(GOPATH_SHIM) $(INFORMER_GEN) \
--go-header-file ./scripts/boilerplate.go.txt \
--output-package $(INFORMERS_PACKAGE) \
--input-dirs $(CLIENT_INPUT_DIRS) \
--versioned-clientset-package $(CLIENTSET_PACKAGE)/versioned \
--listers-package $(LISTERS_PACKAGE)

.PHONY: codegen-client-wrappers
codegen-client-wrappers: codegen-client-clientset $(GOIMPORTS) ## Generate client wrappers
@echo Generate client wrappers... >&2
@go run ./hack/main.go
@$(GOIMPORTS) -w ./pkg/clients
@go fmt ./pkg/clients/...

.PHONY: codegen-register
codegen-register: $(PACKAGE_SHIM) $(REGISTER_GEN) ## Generate types registrations
@echo Generate registration... >&2
@GOPATH=$(GOPATH_SHIM) $(REGISTER_GEN) \
--go-header-file=./scripts/boilerplate.go.txt \
--input-dirs=$(INPUT_DIRS)

.PHONY: codegen-deepcopy
codegen-deepcopy: $(PACKAGE_SHIM) $(DEEPCOPY_GEN) ## Generate deep copy functions
echo Generate deep copy functions... >&2
GOPATH=$(GOPATH_SHIM) $(DEEPCOPY_GEN) \
--go-header-file=./scripts/boilerplate.go.txt \
--input-dirs=$(INPUT_DIRS) \
--output-file-base=zz_generated.deepcopy

.PHONY: codegen-defaulters
codegen-defaulters: $(PACKAGE_SHIM) $(DEFAULTER_GEN) ## Generate defaulters
@echo Generate defaulters... >&2
@GOPATH=$(GOPATH_SHIM) $(DEFAULTER_GEN) --go-header-file=./scripts/boilerplate.go.txt --input-dirs=$(INPUT_DIRS)

.PHONY: codegen-applyconfigurations
codegen-applyconfigurations: $(PACKAGE_SHIM) $(APPLYCONFIGURATION_GEN) ## Generate apply configurations
@echo Generate applyconfigurations... >&2
@rm -rf $(APPLYCONFIGURATIONS_PACKAGE) && mkdir -p $(APPLYCONFIGURATIONS_PACKAGE)
@GOPATH=$(GOPATH_SHIM) $(APPLYCONFIGURATION_GEN) \
--go-header-file=./scripts/boilerplate.go.txt \
--input-dirs=$(INPUT_DIRS) \
--output-package $(APPLYCONFIGURATIONS_PACKAGE)

.PHONY: codegen-crds
codegen-crds: ## Generate policy reporter CRDs
codegen-crds: $(PACKAGE_SHIM)
codegen-crds: $(CONTROLLER_GEN)
@echo Generate policy reporter crds... >&2
@rm -rf $(CRDS_PATH) && mkdir -p $(CRDS_PATH)
@GOPATH=$(GOPATH_SHIM) $(CONTROLLER_GEN) paths=./pkg/crd/api/targetconfig/... crd:crdVersions=v1,ignoreUnexportedFields=true,generateEmbeddedObjectMeta=false output:dir=$(CRDS_PATH)

48 changes: 38 additions & 10 deletions cmd/run.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@ import (
"context"
"errors"
"flag"
"time"

"github.com/spf13/cobra"
"go.uber.org/zap"
"golang.org/x/sync/errgroup"
"k8s.io/client-go/rest"
"k8s.io/client-go/tools/clientcmd"

"github.com/kyverno/policy-reporter/pkg/api"
Expand All @@ -17,6 +17,7 @@ import (
"github.com/kyverno/policy-reporter/pkg/config"
"github.com/kyverno/policy-reporter/pkg/database"
"github.com/kyverno/policy-reporter/pkg/listener"
"github.com/kyverno/policy-reporter/pkg/targetconfig"
)

func newRunCMD(version string) *cobra.Command {
Expand All @@ -30,12 +31,7 @@ func newRunCMD(version string) *cobra.Command {
}
c.Version = version

var k8sConfig *rest.Config
if c.K8sClient.Kubeconfig != "" {
k8sConfig, err = clientcmd.BuildConfigFromFlags("", c.K8sClient.Kubeconfig)
} else {
k8sConfig, err = rest.InClusterConfig()
}
k8sConfig, err := clientcmd.BuildConfigFromFlags("", "/Users/ammaryasser/Downloads/ips")
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

cleanup

if err != nil {
return err
}
Expand All @@ -62,6 +58,7 @@ func newRunCMD(version string) *cobra.Command {
return err
}

targetChan := make(chan targetconfig.TcEvent)
g := &errgroup.Group{}

var store *database.Store
Expand Down Expand Up @@ -140,7 +137,7 @@ func newRunCMD(version string) *cobra.Command {
}
}

resolver.RegisterSendResultListener()
resolver.RegisterSendResultListener(targetChan)

readinessProbe.Ready()
}).RegisterOnNew(func(currentID, lockID string) {
Expand All @@ -165,7 +162,7 @@ func newRunCMD(version string) *cobra.Command {
return elector.Run(cmd.Context())
})
} else {
resolver.RegisterSendResultListener()
resolver.RegisterSendResultListener(targetChan)
readinessProbe.Ready()
}

Expand All @@ -176,15 +173,46 @@ func newRunCMD(version string) *cobra.Command {

g.Go(server.Start)

g.Go(func() error {
// call TargetClients to ensure targets passed from the config file are initialized
resolver.TargetClients()
stop := make(chan struct{})

_, err = resolver.TargetConfigClient(targetChan)
if err != nil {
return err
}

resolver.StartTargetConfigInformer(stop)

<-stop

return nil
})

g.Go(func() error {
logger.Info("wait policy informer")
readinessProbe.Wait()

logger.Info("start client", zap.Int("worker", c.WorkerCount))
restart := make(chan struct{})
resolver.SetRestartCh(restart)

go func() {
for {
select {
case <-restart:
zap.L().Info("received restart signal")
client.Stop()
case <-time.After(time.Second * 3):
}
}
}()

for {
stop := make(chan struct{})
if err := client.Run(c.WorkerCount, stop); err != nil {

if err := client.Run(c.WorkerCount, stop, restart); err != nil {
zap.L().Error("informer client error", zap.Error(err))
}

Expand Down
Loading
Loading