Skip to content

Commit 21ee575

Browse files
committed
chore: update build, tooling, and tests for unified chart
Adapt all build tooling, development environment, and test infrastructure for the single-chart deployment model. The Makefile now generates CRDs and RBAC into the new template subdirectories and runs helm-unittest against the unified chart only. The Tiltfile deploys a single Helm release instead of separate installs for CRDs, controller, and defaults. All shell scripts have been updated to reference the unified chart paths. The e2e tests install a single Helm release with policyServer configuration. The controller test suite loads CRDs programmatically from the chart templates and sets up the DefaultsApplierReconciler. Go module dependencies have been updated accordingly. Signed-off-by: José Guilherme Vanz <jvanz@jvanz.com> Assisted-by: Claude Code Signed-off-by: José Guilherme Vanz <jguilhermevanz@suse.com>
1 parent b037535 commit 21ee575

13 files changed

Lines changed: 148 additions & 160 deletions

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,3 +46,4 @@ fulcio.pem
4646
rekor.pub
4747
tsa.pem
4848
ctfe.pub
49+
charts/kubewarden-admission-controller/charts/

Makefile

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,7 @@ test-rust:
4646

4747
.PHONY: helm-unittest
4848
helm-unittest:
49-
helm unittest charts/kubewarden-crds --file "tests/**/*_test.yaml"
5049
helm unittest charts/kubewarden-controller --file "tests/**/*_test.yaml"
51-
helm unittest charts/kubewarden-defaults --file "tests/**/*_test.yaml"
5250

5351
.PHONY: test-e2e
5452
test-e2e: controller-image audit-scanner-image policy-server-image
@@ -162,13 +160,14 @@ manifests: ## Generate WebhookConfiguration, ClusterRole and CustomResourceDefin
162160
$(GO_BUILD_ENV) $(CONTROLLER_GEN) rbac:roleName=kubewarden-controller-manager,fileName=controller-rbac-roles.yaml crd webhook \
163161
paths="./api/policies/v1" paths="./api/policies/v1alpha2" \
164162
paths="./internal/controller" paths="./cmd/controller" \
165-
output:crd:artifacts:config=charts/kubewarden-crds/templates/crds \
166-
output:rbac:artifacts:config=charts/kubewarden-controller/templates \
163+
output:crd:artifacts:config=charts/kubewarden-controller/templates/crds \
164+
output:rbac:artifacts:config=charts/kubewarden-controller/templates/controller \
167165
output:webhook:artifacts:config=charts
166+
sed -i '/controller-gen.kubebuilder.io\/version:/a\ helm.sh/resource-policy: keep' charts/kubewarden-controller/templates/crds/policies.kubewarden.io_*.yaml
168167
echo "# to be merged manually into kubewarden-controller/templates/webhooks.yaml" | cat - charts/manifests.yaml > temp && mv temp charts/manifests.yaml
169168
mv charts/manifests.yaml charts/generated-webhooks-manifests.yaml
170-
sed -i '/^metadata:/a\ labels:\n {{- include "kubewarden-controller.labels" . | nindent 4 }}\n annotations:\n {{- include "kubewarden-controller.annotations" . | nindent 4 }}' charts/kubewarden-controller/templates/controller-rbac-roles.yaml
171-
sed -i 's/ namespace: kubewarden/ namespace: {{ .Release.Namespace }}/' charts/kubewarden-controller/templates/controller-rbac-roles.yaml
169+
sed -i '/^metadata:/a\ labels:\n {{- include "kubewarden-controller.labels" . | nindent 4 }}\n annotations:\n {{- include "kubewarden-controller.annotations" . | nindent 4 }}' charts/kubewarden-controller/templates/controller/controller-rbac-roles.yaml
170+
sed -i 's/ namespace: kubewarden/ namespace: {{ .Release.Namespace }}/' charts/kubewarden-controller/templates/controller/controller-rbac-roles.yaml
172171

173172
.PHONY: generate-chart
174173
generate-chart: ## Generate Helm chart values schema.

Tiltfile

Lines changed: 24 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -8,34 +8,15 @@ update_settings(k8s_upsert_timeout_secs=300)
88
load("ext://namespace", "namespace_create")
99
namespace_create("kubewarden")
1010

11-
# Install the CRDs Helm chart first
12-
crds_yaml = helm(
13-
"./charts/kubewarden-crds",
14-
name="kubewarden-crds",
15-
namespace="kubewarden",
16-
)
17-
k8s_yaml(crds_yaml)
18-
19-
# Group all CRDs under a single resource name for dependency tracking
20-
k8s_resource(
21-
new_name='kubewarden-crds',
22-
objects=[
23-
'policyservers.policies.kubewarden.io:CustomResourceDefinition',
24-
'admissionpolicies.policies.kubewarden.io:CustomResourceDefinition',
25-
'clusteradmissionpolicies.policies.kubewarden.io:CustomResourceDefinition',
26-
'admissionpolicygroups.policies.kubewarden.io:CustomResourceDefinition',
27-
'clusteradmissionpolicygroups.policies.kubewarden.io:CustomResourceDefinition',
28-
],
29-
)
30-
11+
# Install the unified Kubewarden admission controller chart
3112
registry = settings.get("registry")
3213
controller_image = settings.get("controller").get("image")
3314
audit_scanner_image = settings.get("audit-scanner").get("image")
3415
policy_server_image = settings.get("policy-server").get("image")
3516

36-
kubewarden_controller_yaml = helm(
17+
kubewarden_yaml = helm(
3718
"./charts/kubewarden-controller",
38-
name="kubewarden-controller",
19+
name="kubewarden",
3920
namespace="kubewarden",
4021
set=[
4122
"global.cattle.systemDefaultRegistry=null",
@@ -45,32 +26,35 @@ kubewarden_controller_yaml = helm(
4526
"podSecurityContext=null",
4627
"containerSecurityContext=null",
4728
"auditScanner.image.repository=" + registry + "/" + audit_scanner_image,
48-
"auditScanner.logLevel=debug",
29+
"auditScanner.logLevel=debug",
30+
"policyServer.enabled=true",
31+
"policyServer.image.repository=" + registry + "/" + policy_server_image,
32+
"policyServer.env[0].name=KUBEWARDEN_LOG_LEVEL",
33+
"policyServer.env[0].value=debug",
4934
],
5035
)
51-
k8s_yaml(kubewarden_controller_yaml)
36+
k8s_yaml(kubewarden_yaml)
5237

53-
# Wait for kubewarden-controller deployment to be ready before applying defaults
54-
# This ensures the webhook is running before PolicyServer resources are created
38+
# Group all CRDs under a single resource name for dependency tracking
5539
k8s_resource(
56-
'kubewarden-controller:deployment',
57-
new_name='kubewarden-controller',
58-
resource_deps=['kubewarden-crds'],
40+
new_name='kubewarden-crds',
41+
objects=[
42+
'policyservers.policies.kubewarden.io:CustomResourceDefinition',
43+
'admissionpolicies.policies.kubewarden.io:CustomResourceDefinition',
44+
'clusteradmissionpolicies.policies.kubewarden.io:CustomResourceDefinition',
45+
'admissionpolicygroups.policies.kubewarden.io:CustomResourceDefinition',
46+
'clusteradmissionpolicygroups.policies.kubewarden.io:CustomResourceDefinition',
47+
],
5948
)
6049

61-
kubewarden_defaults_yaml = helm(
62-
"./charts/kubewarden-defaults",
63-
name="kubewarden-defaults",
64-
namespace="kubewarden",
65-
set=[
66-
"global.cattle.systemDefaultRegistry=null",
67-
"policyServer.image.repository=" + registry + "/" + policy_server_image,
68-
"policyServer.env[0].name=KUBEWARDEN_LOG_LEVEL",
69-
"policyServer.env[0].value=debug",
70-
],
50+
# Wait for controller deployment to be ready
51+
k8s_resource(
52+
'kubewarden:deployment',
53+
new_name='kubewarden-controller',
54+
resource_deps=['kubewarden-crds'],
7155
)
72-
k8s_yaml(kubewarden_defaults_yaml)
7356

57+
# Default PolicyServer resource dependency
7458
k8s_resource(
7559
'default',
7660
resource_deps=['kubewarden-controller', 'policy_server_tilt'],

e2e/main_test.go

Lines changed: 12 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,8 @@ func TestMain(m *testing.M) {
3333
cfg, _ := envconf.NewFromFlags()
3434
testenv = env.NewWithConfig(cfg)
3535
kindClusterName = envconf.RandomName("kubewarden-e2e-cluster", 32)
36-
releaseCRDsName := "kubewarden-crds"
37-
releaseControllerName := "kubewarden-controller"
38-
kubewardenCRDsChartPath := "../charts/kubewarden-crds"
39-
kubewardenControllerChartPath := "../charts/kubewarden-controller"
36+
releaseName := "kubewarden"
37+
kubewardenChartPath := "../charts/kubewarden-controller"
4038

4139
testenv.Setup(
4240
envfuncs.CreateCluster(kind.NewProvider(), kindClusterName),
@@ -48,31 +46,25 @@ func TestMain(m *testing.M) {
4846
envfuncs.LoadImageToCluster(kindClusterName, auditScannerImage, "--verbose", "--mode", "direct"),
4947
envfuncs.LoadImageToCluster(kindClusterName, policyServerImage, "--verbose", "--mode", "direct"),
5048
func(ctx context.Context, _ *envconf.Config) (context.Context, error) {
51-
// can be used to install additional helm charts or perform other custom setup
49+
// Install unified Kubewarden admission controller chart
5250
manager := helm.New(cfg.KubeconfigFile())
5351

54-
err := manager.RunInstall(helm.WithName(releaseCRDsName),
52+
err := manager.RunInstall(helm.WithName(releaseName),
5553
helm.WithNamespace(cfg.Namespace()),
56-
helm.WithChart(kubewardenCRDsChartPath),
57-
helm.WithTimeout("1m"),
58-
)
59-
if err != nil {
60-
return ctx, fmt.Errorf("failed to install kubewarden-crds helm chart: %w", err)
61-
}
62-
63-
err = manager.RunInstall(helm.WithName(releaseControllerName),
64-
helm.WithNamespace(cfg.Namespace()),
65-
helm.WithChart(kubewardenControllerChartPath),
54+
helm.WithChart(kubewardenChartPath),
6655
helm.WithWait(),
56+
helm.WithTimeout("10m"),
6757
helm.WithArgs(
6858
"--set", "image.tag=dev",
6959
"--set", "auditScanner.image.tag=dev",
60+
"--set", "policyServer.image.tag=dev",
7061
"--set", "logLevel=debug",
7162
"--set", "auditScanner.logLevel=debug",
63+
"--set", "policyServer.enabled=true",
7264
),
7365
)
7466
if err != nil {
75-
return ctx, fmt.Errorf("failed to install kubewarden-controller helm chart: %w", err)
67+
return ctx, fmt.Errorf("failed to install kubewarden helm chart: %w", err)
7668
}
7769

7870
// Wait explicitly for kubewarden-controller deployment to be ready
@@ -93,11 +85,11 @@ func TestMain(m *testing.M) {
9385
os.Exit(testenv.Run(m))
9486
}
9587

96-
// waitForKubewardenControllerDeployment waits for the kubewarden-controller deployment to be ready.
88+
// waitForKubewardenControllerDeployment waits for the kubewarden deployment to be ready.
9789
func waitForKubewardenControllerDeployment(_ context.Context, cfg *envconf.Config) error {
98-
// Wait for the kubewarden-controller deployment to be available
90+
// The deployment name is generated by the fullname helper: releaseName-chartName
9991
return wait.For(conditions.New(cfg.Client().Resources()).DeploymentConditionMatch(
100-
&appsv1.Deployment{ObjectMeta: metav1.ObjectMeta{Name: "kubewarden-controller", Namespace: namespace}},
92+
&appsv1.Deployment{ObjectMeta: metav1.ObjectMeta{Name: "kubewarden-kubewarden-controller", Namespace: namespace}},
10193
appsv1.DeploymentAvailable,
10294
corev1.ConditionTrue,
10395
), wait.WithTimeout(5*time.Minute), wait.WithInterval(1*time.Second))

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ require (
1717
go.opentelemetry.io/otel/sdk/metric v1.43.0
1818
golang.org/x/sync v0.20.0
1919
k8s.io/api v0.36.1
20+
k8s.io/apiextensions-apiserver v0.36.0
2021
k8s.io/apimachinery v0.36.1
2122
k8s.io/apiserver v0.36.1
2223
k8s.io/client-go v0.36.1
@@ -111,7 +112,6 @@ require (
111112
gopkg.in/evanphx/json-patch.v4 v4.13.0 // indirect
112113
gopkg.in/inf.v0 v0.9.1 // indirect
113114
gopkg.in/yaml.v3 v3.0.1 // indirect
114-
k8s.io/apiextensions-apiserver v0.36.0 // indirect
115115
k8s.io/component-base v0.36.1 // indirect
116116
k8s.io/klog/v2 v2.140.0 // indirect
117117
k8s.io/kube-openapi v0.0.0-20260317180543-43fb72c5454a // indirect

go.sum

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -389,17 +389,13 @@ github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+W
389389
github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
390390
github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
391391
github.com/onsi/ginkgo v1.14.1/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY=
392-
github.com/onsi/ginkgo/v2 v2.28.3 h1:4JvMdwtFU0imd8fHx25OJXoDMRexnf8v5NHKYSTTji4=
393-
github.com/onsi/ginkgo/v2 v2.28.3/go.mod h1:+aXOY+vzZ5mu2iI2HpTZUPmM//oQfsNFX6gU9kNcA44=
394392
github.com/onsi/ginkgo/v2 v2.29.0 h1:rfh+ZFjgJhYWRoIqVf3Uwx/W20yLrcrE2h2GmYVRaag=
395393
github.com/onsi/ginkgo/v2 v2.29.0/go.mod h1:+aXOY+vzZ5mu2iI2HpTZUPmM//oQfsNFX6gU9kNcA44=
396394
github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
397395
github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
398396
github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
399397
github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
400398
github.com/onsi/gomega v1.10.2/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
401-
github.com/onsi/gomega v1.40.0 h1:Vtol0e1MghCD2ZVIilPDIg44XSL9l2QAn8ZNaljWcJc=
402-
github.com/onsi/gomega v1.40.0/go.mod h1:M/Uqpu/8qTjtzCLUA2zJHX9Iilrau25x1PdoSRbWh5A=
403399
github.com/onsi/gomega v1.41.0 h1:OwKp4pXNgVxf6sCplzYo794OFNuoL2q2SBMU5NSWOjA=
404400
github.com/onsi/gomega v1.41.0/go.mod h1:M/Uqpu/8qTjtzCLUA2zJHX9Iilrau25x1PdoSRbWh5A=
405401
github.com/openreports/reports-api v0.2.1 h1:g9KS3yle9Y1elmww4TK9EkD1rl6inIaiIJPX6e+u680=
@@ -828,34 +824,24 @@ honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt
828824
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
829825
k8s.io/api v0.18.6/go.mod h1:eeyxr+cwCjMdLAmr2W3RyDI0VvTawSg/3RFFBEnmZGI=
830826
k8s.io/api v0.20.2/go.mod h1:d7n6Ehyzx+S+cE3VhTGfVNNqtGc/oL9DCdYYahlurV8=
831-
k8s.io/api v0.36.0 h1:SgqDhZzHdOtMk40xVSvCXkP9ME0H05hPM3p9AB1kL80=
832-
k8s.io/api v0.36.0/go.mod h1:m1LVrGPNYax5NBHdO+QuAedXyuzTt4RryI/qnmNvs34=
833827
k8s.io/api v0.36.1 h1:XbL/EMj8K2aJpJtePmqUyQMsM0D4QI2pvl7YKJ20FTY=
834828
k8s.io/api v0.36.1/go.mod h1:KOWo4ey3TINlXjeHVuwB3i+tXXnu+UcwFBHlI/9dvEo=
835829
k8s.io/apiextensions-apiserver v0.18.6/go.mod h1:lv89S7fUysXjLZO7ke783xOwVTm6lKizADfvUM/SS/M=
836830
k8s.io/apiextensions-apiserver v0.36.0 h1:Wt7E8J+VBCbj4FjiBfDTK/neXDDjyJVJc7xfuOHImZ0=
837831
k8s.io/apiextensions-apiserver v0.36.0/go.mod h1:kGDjH0msuiIB3tgsYRV0kS9GqpMYMUsQ3GHv7TApyug=
838832
k8s.io/apimachinery v0.18.6/go.mod h1:OaXp26zu/5J7p0f92ASynJa1pZo06YlV9fG7BoWbCko=
839833
k8s.io/apimachinery v0.20.2/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU=
840-
k8s.io/apimachinery v0.36.0 h1:jZyPzhd5Z+3h9vJLt0z9XdzW9VzNzWAUw+P1xZ9PXtQ=
841-
k8s.io/apimachinery v0.36.0/go.mod h1:FklypaRJt6n5wUIwWXIP6GJlIpUizTgfo1T/As+Tyxc=
842834
k8s.io/apimachinery v0.36.1 h1:G63Gjx2W+q0YD+72Vo8oY0nDnePVwnuzTmmy5ENrVSA=
843835
k8s.io/apimachinery v0.36.1/go.mod h1:ibYOR00vW/I1kzvi5SF0dRuJ52BvKtfvRdOn35GPQ+8=
844836
k8s.io/apiserver v0.18.6/go.mod h1:Zt2XvTHuaZjBz6EFYzpp+X4hTmgWGy8AthNVnTdm3Wg=
845-
k8s.io/apiserver v0.36.0 h1:Jg5OFAENUACByUCg15CmhZAYrr5ZyJ+jodyA1mHl3YE=
846-
k8s.io/apiserver v0.36.0/go.mod h1:mHvwdHf+qKEm+1/hYm756SV+oREOKSPnsjagOpx6Vho=
847837
k8s.io/apiserver v0.36.1 h1:iMS5V+rPUertv5P9RaqJgmHHTuh4quWpoxchvMUY+JY=
848838
k8s.io/apiserver v0.36.1/go.mod h1:Cby1PbLWztu0GDOxoO6iFOyyqIsziHNEW+w9zVQ22Kw=
849839
k8s.io/client-go v0.18.6/go.mod h1:/fwtGLjYMS1MaM5oi+eXhKwG+1UHidUEXRh6cNsdO0Q=
850840
k8s.io/client-go v0.20.2/go.mod h1:kH5brqWqp7HDxUFKoEgiI4v8G1xzbe9giaCenUWJzgE=
851-
k8s.io/client-go v0.36.0 h1:pOYi7C4RHChYjMiHpZSpSbIM6ZxVbRXBy7CuiIwqA3c=
852-
k8s.io/client-go v0.36.0/go.mod h1:ZKKcpwF0aLYfkHFCjillCKaTK/yBkEDHTDXCFY6AS9Y=
853841
k8s.io/client-go v0.36.1 h1:FN/K8QIT2CEDt+2WB2HnWrUANZ50AP5GII43/SP2JR0=
854842
k8s.io/client-go v0.36.1/go.mod h1:s6rAnCtTGYDQnpNjEhSaISV+2O8jwruZ6m3QOYBFbtU=
855843
k8s.io/code-generator v0.18.6/go.mod h1:TgNEVx9hCyPGpdtCWA34olQYLkh3ok9ar7XfSsr8b6c=
856844
k8s.io/component-base v0.18.6/go.mod h1:knSVsibPR5K6EW2XOjEHik6sdU5nCvKMrzMt2D4In14=
857-
k8s.io/component-base v0.36.0 h1:hFjEktssxiJhrK1zfybkH4kJOi8iZuF+mIDCqS5+jRo=
858-
k8s.io/component-base v0.36.0/go.mod h1:JZvIfcNHk+uck+8LhJzhSBtydWXaZNQwX2OdL+Mnwsk=
859845
k8s.io/component-base v0.36.1 h1:iG6GsELftXqTNG9HG6kiVjatSgAw1sf5pJ6R5a6N0kA=
860846
k8s.io/component-base v0.36.1/go.mod h1:nf9XPlntRdqO6WMeEWAA5F93Y4ICZQdeT9GeqLDB3JI=
861847
k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
@@ -872,24 +858,18 @@ k8s.io/kube-openapi v0.0.0-20200410145947-61e04a5be9a6/go.mod h1:GRQhZsXIAJ1xR0C
872858
k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd/go.mod h1:WOJ3KddDSol4tAGcJo0Tvi+dK12EcqSLqcWsryKMpfM=
873859
k8s.io/kube-openapi v0.0.0-20260317180543-43fb72c5454a h1:xCeOEAOoGYl2jnJoHkC3hkbPJgdATINPMAxaynU2Ovg=
874860
k8s.io/kube-openapi v0.0.0-20260317180543-43fb72c5454a/go.mod h1:uGBT7iTA6c6MvqUvSXIaYZo9ukscABYi2btjhvgKGZ0=
875-
k8s.io/streaming v0.36.0 h1:agnTxU+NFulUrtYzXUGKO3ndEa8jKwht1Kwn9nu9x+4=
876-
k8s.io/streaming v0.36.0/go.mod h1:z6fV3D+NVkoeqRMtWwlUZK6U17SY/LqNzOxWL6GyR/s=
877861
k8s.io/streaming v0.36.1 h1:L+K68n4Gg940BGNNYtUBvL1WTLL0YnKT3s+P1MNAmR4=
878862
k8s.io/streaming v0.36.1/go.mod h1:z6fV3D+NVkoeqRMtWwlUZK6U17SY/LqNzOxWL6GyR/s=
879863
k8s.io/utils v0.0.0-20200324210504-a9aa75ae1b89/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew=
880864
k8s.io/utils v0.0.0-20200603063816-c1c6865ac451/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
881865
k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
882-
k8s.io/utils v0.0.0-20260319190234-28399d86e0b5 h1:kBawHLSnx/mYHmRnNUf9d4CpjREbeZuxoSGOX/J+aYM=
883-
k8s.io/utils v0.0.0-20260319190234-28399d86e0b5/go.mod h1:xDxuJ0whA3d0I4mf/C4ppKHxXynQ+fxnkmQH0vTHnuk=
884866
k8s.io/utils v0.0.0-20260507154919-ff6756f316d2 h1:wU4tMEhLGgIbLvXQb1cfN+EcM0wf7zC6CPF+C79jroc=
885867
k8s.io/utils v0.0.0-20260507154919-ff6756f316d2/go.mod h1:xDxuJ0whA3d0I4mf/C4ppKHxXynQ+fxnkmQH0vTHnuk=
886868
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
887869
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
888870
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
889871
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.7/go.mod h1:PHgbrJT7lCHcxMU+mDHEm+nx46H4zuuHZkDP6icnhu0=
890872
sigs.k8s.io/controller-runtime v0.6.3/go.mod h1:WlZNXcM0++oyaQt4B7C2lEE5JYRs8vJUzRP4N4JpdAY=
891-
sigs.k8s.io/controller-runtime v0.24.0 h1:Ck6N2LdS8Lovy1o25BB4r1xjvLEKUl1s2o9kU+KWDE4=
892-
sigs.k8s.io/controller-runtime v0.24.0/go.mod h1:vFkfY5fGt5xAC/sKb8IBFKgWPNKG9OUG29dR8Y2wImw=
893873
sigs.k8s.io/controller-runtime v0.24.1 h1:miPEwrmirImAvgME1L9qebGHrOnGJoVmVdtOU9fRfo4=
894874
sigs.k8s.io/controller-runtime v0.24.1/go.mod h1:vFkfY5fGt5xAC/sKb8IBFKgWPNKG9OUG29dR8Y2wImw=
895875
sigs.k8s.io/e2e-framework v0.7.0 h1:AHkySTC6MvnnMbVSxaO4z1m2MhQKNFP+2Ihs5pRNLlM=

internal/controller/suite_test.go

Lines changed: 56 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ package controller
1818

1919
import (
2020
"context"
21+
"fmt"
22+
"os"
2123
"path/filepath"
2224
"testing"
2325
"time"
@@ -26,7 +28,9 @@ import (
2628
. "github.com/onsi/gomega"
2729

2830
corev1 "k8s.io/api/core/v1"
31+
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
2932
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
33+
"k8s.io/apimachinery/pkg/util/yaml"
3034
"k8s.io/client-go/kubernetes/scheme"
3135
"k8s.io/client-go/tools/clientcmd"
3236
ctrl "sigs.k8s.io/controller-runtime"
@@ -55,6 +59,43 @@ const (
5559
deploymentsNamespace = "kubewarden-integration-tests"
5660
)
5761

62+
// loadKubewardenCRDsFromChart loads the Kubewarden admission controller CRDs
63+
// from the Helm chart templates directory.
64+
func loadKubewardenCRDsFromChart() ([]*apiextensionsv1.CustomResourceDefinition, error) {
65+
chartCRDsPath := filepath.Join("..", "..", "charts", "kubewarden-controller", "templates", "crds")
66+
67+
// List of Kubewarden admission controller CRD files (excluding policy reports)
68+
crdFiles := []string{
69+
"policies.kubewarden.io_admissionpolicies.yaml",
70+
"policies.kubewarden.io_admissionpolicygroups.yaml",
71+
"policies.kubewarden.io_clusteradmissionpolicies.yaml",
72+
"policies.kubewarden.io_clusteradmissionpolicygroups.yaml",
73+
"policies.kubewarden.io_policyservers.yaml",
74+
}
75+
76+
var crds []*apiextensionsv1.CustomResourceDefinition
77+
78+
for _, filename := range crdFiles {
79+
crdPath := filepath.Join(chartCRDsPath, filename)
80+
81+
// Read the CRD file
82+
data, err := os.ReadFile(crdPath)
83+
if err != nil {
84+
return nil, fmt.Errorf("failed to read CRD file %s: %w", filename, err)
85+
}
86+
87+
// Decode YAML to CRD object
88+
crd := &apiextensionsv1.CustomResourceDefinition{}
89+
if err := yaml.Unmarshal(data, crd); err != nil {
90+
return nil, fmt.Errorf("failed to unmarshal CRD from %s: %w", filename, err)
91+
}
92+
93+
crds = append(crds, crd)
94+
}
95+
96+
return crds, nil
97+
}
98+
5899
func TestAPIs(t *testing.T) {
59100
RegisterFailHandler(Fail)
60101

@@ -67,9 +108,13 @@ var _ = SynchronizedBeforeSuite(func() []byte {
67108
var ctx context.Context
68109
ctx, cancel := context.WithCancel(context.TODO())
69110

111+
// Load CRDs from the Helm chart
112+
kubewardenCRDs, err := loadKubewardenCRDsFromChart()
113+
Expect(err).NotTo(HaveOccurred(), "failed to load Kubewarden CRDs from Helm chart")
114+
Expect(kubewardenCRDs).To(HaveLen(5), "expected 5 Kubewarden admission controller CRDs")
115+
70116
testEnv := &envtest.Environment{
71-
CRDDirectoryPaths: []string{filepath.Join("..", "..", "charts", "kubewarden-crds", "templates", "crds")},
72-
ErrorIfCRDPathMissing: true,
117+
CRDs: kubewardenCRDs,
73118
}
74119

75120
restConfig, err := testEnv.Start()
@@ -138,6 +183,15 @@ var _ = SynchronizedBeforeSuite(func() []byte {
138183
}).SetupWithManager(k8sManager)
139184
Expect(err).ToNot(HaveOccurred())
140185

186+
err = (&DefaultsApplierReconciler{
187+
Client: k8sManager.GetClient(),
188+
Scheme: k8sManager.GetScheme(),
189+
Log: ctrl.Log.WithName("defaults-applier-test"),
190+
DeploymentsNamespace: deploymentsNamespace,
191+
ConfigMapName: constants.DefaultDefaultsConfigMapName,
192+
}).SetupWithManager(k8sManager)
193+
Expect(err).ToNot(HaveOccurred())
194+
141195
// Create the integration tests deployments namespace
142196
err = k8sClient.Create(ctx, &corev1.Namespace{
143197
ObjectMeta: metav1.ObjectMeta{

0 commit comments

Comments
 (0)