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

Merged
merged 53 commits into from
Mar 9, 2025
Merged
Show file tree
Hide file tree
Changes from 49 commits
Commits
Show all changes
53 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
866361a
remove redundant comment
aerosouund Feb 6, 2025
2136db1
disable informer resync
aerosouund Feb 6, 2025
3105829
make fmt
aerosouund Feb 6, 2025
7bd9dda
fix all failing tests and remove tests that no longer make sense
aerosouund Feb 6, 2025
fb2db0e
remove references to thew restart channel
aerosouund Feb 8, 2025
4060545
in cluster config
aerosouund Feb 9, 2025
6dddc11
update crd
aerosouund Feb 9, 2025
3b1db6d
change groupname and add missing slack target
aerosouund Feb 10, 2025
30f1d7a
run fmt
aerosouund Feb 10, 2025
11a2308
update group name
aerosouund Feb 10, 2025
02c64e1
fix result sending exiting if one of the results is in the cache
aerosouund Feb 10, 2025
c5ef882
fix result sending for batch send clients
aerosouund Feb 10, 2025
c397c11
clone cache to clients at client start time
aerosouund Feb 12, 2025
c264a8d
fmt
aerosouund Feb 12, 2025
24e7e34
remove filesystem kubeconfig read
aerosouund Feb 16, 2025
b4617df
fix caching logic at send
aerosouund Feb 16, 2025
5cedec8
add tcfg to rbac
aerosouund Feb 16, 2025
edc6a28
return filters
aerosouund Feb 16, 2025
c74f205
dont use an array in validation
aerosouund Feb 17, 2025
21fcc53
change send result tests to account for new sending logic
aerosouund Feb 20, 2025
ce57e0b
change send result tests to account for new sending logic
aerosouund Feb 20, 2025
beb8bd2
add ms teams
aerosouund Feb 21, 2025
3771ead
drop the skip existing polr informer restart
aerosouund Feb 24, 2025
e68947b
strip the changes to new result
aerosouund Mar 1, 2025
b183d85
drop the client cache and restart signal
aerosouund Mar 2, 2025
22fb0d4
remove timestamp and base client fields
aerosouund Mar 3, 2025
6918bd6
remove methods from the test client
aerosouund Mar 3, 2025
609696d
Merge branch 'main' into targetconfig-crd
aerosouund Mar 3, 2025
502ca4e
fix go mod
aerosouund Mar 3, 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)

8 changes: 8 additions & 0 deletions charts/policy-reporter/templates/clusterrole.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,14 @@ rules:
- namespaces
verbs:
- list
- apiGroups:
- policyreporter.kyverno.io
resources:
- targetconfigs
verbs:
- get
- list
- watch
- apiGroups:
- ''
resources:
Expand Down
25 changes: 22 additions & 3 deletions cmd/run.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 Down Expand Up @@ -62,6 +63,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 +142,7 @@ func newRunCMD(version string) *cobra.Command {
}
}

resolver.RegisterSendResultListener()
resolver.RegisterSendResultListener(targetChan)

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

Expand All @@ -176,14 +178,31 @@ 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))

for {
stop := make(chan struct{})

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