From e3446c9a57c6ee7c280d26f317bd9672b66e6233 Mon Sep 17 00:00:00 2001 From: cnotv Date: Mon, 20 Oct 2025 19:51:48 +0200 Subject: [PATCH 01/12] Add priorityClassName dropdown to the resource --- .../chart/kubewarden/policy-server/General.vue | 12 ++++++++++++ .../policy-server/__tests__/General.spec.ts | 8 ++++++++ pkg/kubewarden/l10n/en-us.yaml | 2 ++ pkg/kubewarden/types/kubewarden.ts | 1 + 4 files changed, 23 insertions(+) diff --git a/pkg/kubewarden/chart/kubewarden/policy-server/General.vue b/pkg/kubewarden/chart/kubewarden/policy-server/General.vue index 4cb87d7b..b4fe890a 100644 --- a/pkg/kubewarden/chart/kubewarden/policy-server/General.vue +++ b/pkg/kubewarden/chart/kubewarden/policy-server/General.vue @@ -21,6 +21,7 @@ import { } from '@kubewarden/types'; import { findCompatibleDefaultsChart } from '@kubewarden/utils/chart'; +import ResourceLabeledSelect from '@shell/components/form/ResourceLabeledSelect'; import { Banner } from '@components/Banner'; import { LabeledInput } from '@components/Form/LabeledInput'; import { RadioGroup } from '@components/Form/Radio'; @@ -259,5 +260,16 @@ watchEffect(() => { /> +
+
+ +
+
diff --git a/pkg/kubewarden/chart/kubewarden/policy-server/__tests__/General.spec.ts b/pkg/kubewarden/chart/kubewarden/policy-server/__tests__/General.spec.ts index b1bf816c..53e4ad42 100644 --- a/pkg/kubewarden/chart/kubewarden/policy-server/__tests__/General.spec.ts +++ b/pkg/kubewarden/chart/kubewarden/policy-server/__tests__/General.spec.ts @@ -5,6 +5,7 @@ import flushPromises from 'flush-promises'; import General from '@kubewarden/chart/kubewarden/policy-server/General.vue'; import ServiceNameSelect from '@shell/components/form/ServiceNameSelect'; import { DEFAULT_POLICY_SERVER } from '@kubewarden/models/policies.kubewarden.io.policyserver'; +import ResourceLabeledSelect from '@shell/components/form/ResourceLabeledSelect'; import { fleetBundles as bundles } from '@tests/unit/mocks/fleetBundles'; import { mockControllerAppWithFleet } from '@tests/unit/mocks/controllerApp'; @@ -116,6 +117,13 @@ describe('component: General', () => { expect(selector.props('options')).toStrictEqual(['sa-1', 'sa-2', 'sa-3']); }); + it('displays priorityClassName', () => { + const wrapper = createWrapper(); + const selector = wrapper.findComponent(ResourceLabeledSelect); + + expect(selector.props('options')).toStrictEqual([]); + }); + it('displays correct service account when existing', async() => { const policyServer = { ...DEFAULT_POLICY_SERVER, diff --git a/pkg/kubewarden/l10n/en-us.yaml b/pkg/kubewarden/l10n/en-us.yaml index 0746f95c..23e4a689 100644 --- a/pkg/kubewarden/l10n/en-us.yaml +++ b/pkg/kubewarden/l10n/en-us.yaml @@ -414,6 +414,8 @@ kubewarden: label: Image URL tooltip: This is the container image the policy server. replicas: Replicas + priorityClassName: + label: Priority Class Name registry: description: The PolicyServer allows you to pull policies from OCI registries and HTTP servers, by default HTTPS is enforced with host TLS verification. You can interact with registries using untrusted certificates or even without TLS by using the `insecureSources` setting. This approach is highly discouraged in environments closer to production. More information on configuring custom certificate authorities can be found here. insecureSources: diff --git a/pkg/kubewarden/types/kubewarden.ts b/pkg/kubewarden/types/kubewarden.ts index c0392cfd..987f2fc8 100644 --- a/pkg/kubewarden/types/kubewarden.ts +++ b/pkg/kubewarden/types/kubewarden.ts @@ -97,6 +97,7 @@ export interface PolicyServer { env: V1EnvVar[]; image?: string; replicas?: number; + priorityClassName?: string; securityContexts?: { container?: V1SecurityContext; pod?: V1PodSecurityContext; From 741b8b67ed92300304361d56470c68415d65be69 Mon Sep 17 00:00:00 2001 From: cnotv Date: Mon, 20 Oct 2025 21:05:27 +0200 Subject: [PATCH 02/12] Add launcher for Jest in VSCode --- .vscode/launch.json | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 .vscode/launch.json diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 00000000..36122502 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,40 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Debug Jest Tests", + "type": "node", + "request": "launch", + "runtimeArgs": [ + "--inspect-brk", + "${workspaceRoot}/node_modules/.bin/jest", + "--runInBand", + "--watch" + ], + "console": "integratedTerminal", + "internalConsoleOptions": "neverOpen", + }, + { + "name": "Debug Jest Tests relativeFile", + "type": "node", + "request": "launch", + "program": "${workspaceFolder}/node_modules/.bin/jest", + "windows": { + "program": "${workspaceFolder}/node_modules/jest/bin/jest", + }, + "runtimeArgs": [ + "--inspect-brk", + "${workspaceRoot}/node_modules/.bin/jest", + "--runInBand", + "--watch" + ], + "args": ["${relativeFile}"], + "console": "integratedTerminal", + "internalConsoleOptions": "neverOpen", + } + ] + +} From 92a233e8bdad47cee73efa62a3bef256b6374a61 Mon Sep 17 00:00:00 2001 From: cnotv Date: Mon, 20 Oct 2025 21:53:22 +0200 Subject: [PATCH 03/12] Correct import in unit test, resource-type definition for component --- .../chart/kubewarden/policy-server/General.vue | 2 +- .../policy-server/__tests__/General.spec.ts | 13 +++++++------ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/pkg/kubewarden/chart/kubewarden/policy-server/General.vue b/pkg/kubewarden/chart/kubewarden/policy-server/General.vue index b4fe890a..5d8a7afc 100644 --- a/pkg/kubewarden/chart/kubewarden/policy-server/General.vue +++ b/pkg/kubewarden/chart/kubewarden/policy-server/General.vue @@ -266,7 +266,7 @@ watchEffect(() => { v-model:value="value.spec.priorityClassName" data-testid="ps-config-priority-class-name-select" :mode="mode" - resource-type="PriorityClass" + resource-type="scheduling.k8s.io.priorityclass" :label="t('kubewarden.policyServerConfig.priorityClassName.label')" /> diff --git a/pkg/kubewarden/chart/kubewarden/policy-server/__tests__/General.spec.ts b/pkg/kubewarden/chart/kubewarden/policy-server/__tests__/General.spec.ts index 53e4ad42..394d1509 100644 --- a/pkg/kubewarden/chart/kubewarden/policy-server/__tests__/General.spec.ts +++ b/pkg/kubewarden/chart/kubewarden/policy-server/__tests__/General.spec.ts @@ -81,10 +81,11 @@ const defaultMountOptions = { template: '
', props: ['modelValue', 'options'] }, - Banner: { template: '' }, - LabeledInput: { template: '' }, - LabeledTooltip: { template: '' }, - RadioGroup: { template: '' } + Banner: { template: '' }, + ResourceLabeledSelect: true, + LabeledInput: { template: '' }, + LabeledTooltip: { template: '' }, + RadioGroup: { template: '' } } } }; @@ -119,9 +120,9 @@ describe('component: General', () => { it('displays priorityClassName', () => { const wrapper = createWrapper(); - const selector = wrapper.findComponent(ResourceLabeledSelect); + const selector = wrapper.find('[data-testid="ps-config-priority-class-name-select"]'); - expect(selector.props('options')).toStrictEqual([]); + expect(selector.exists()).toBe(true); }); it('displays correct service account when existing', async() => { From 363b03f0be2f0ea0efd1b46528a9f322122cbeb6 Mon Sep 17 00:00:00 2001 From: cnotv Date: Tue, 21 Oct 2025 19:54:37 +0200 Subject: [PATCH 04/12] Map values for priorityClasses --- pkg/kubewarden/chart/kubewarden/policy-server/General.vue | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/pkg/kubewarden/chart/kubewarden/policy-server/General.vue b/pkg/kubewarden/chart/kubewarden/policy-server/General.vue index 5d8a7afc..1ad40390 100644 --- a/pkg/kubewarden/chart/kubewarden/policy-server/General.vue +++ b/pkg/kubewarden/chart/kubewarden/policy-server/General.vue @@ -160,6 +160,12 @@ watchEffect(() => { } ); +const mapPriorityClassNameUpdate = { + updateResources: (options: any[]) => options + .filter((option) => option.metadata.name === props.value.spec.priorityClassName) + .map((option) => option.name) +}; + watchEffect(() => { if (!controllerApp.value && allApps.value.length) { const controller = allApps.value.find( @@ -266,7 +272,9 @@ watchEffect(() => { v-model:value="value.spec.priorityClassName" data-testid="ps-config-priority-class-name-select" :mode="mode" + :key="value.spec.priorityClassName" resource-type="scheduling.k8s.io.priorityclass" + :get-option-label="(priorityClasses: any) => priorityClasses.metadata.name" :label="t('kubewarden.policyServerConfig.priorityClassName.label')" />
From 9392da72257c31e7bfbae6e40132bb194c0efef9 Mon Sep 17 00:00:00 2001 From: cnotv Date: Fri, 24 Oct 2025 17:39:36 +0200 Subject: [PATCH 05/12] Correct issues with returned value using the component --- .../kubewarden/policy-server/General.vue | 26 ++++++++----------- pkg/kubewarden/config/contstants.ts | 1 + 2 files changed, 12 insertions(+), 15 deletions(-) create mode 100644 pkg/kubewarden/config/contstants.ts diff --git a/pkg/kubewarden/chart/kubewarden/policy-server/General.vue b/pkg/kubewarden/chart/kubewarden/policy-server/General.vue index 1ad40390..edf4f96b 100644 --- a/pkg/kubewarden/chart/kubewarden/policy-server/General.vue +++ b/pkg/kubewarden/chart/kubewarden/policy-server/General.vue @@ -7,6 +7,7 @@ import { useStore } from 'vuex'; import { _CREATE } from '@shell/config/query-params'; import { CATALOG, FLEET } from '@shell/config/types'; +import { PRIORITY_CLASS } from '@kubewarden/config/contstants'; import { DEFAULT_POLICY_SERVER } from '@kubewarden/models/policies.kubewarden.io.policyserver'; import { getPolicyServerModule, isFleetDeployment } from '@kubewarden/modules/fleet'; @@ -160,12 +161,6 @@ watchEffect(() => { } ); -const mapPriorityClassNameUpdate = { - updateResources: (options: any[]) => options - .filter((option) => option.metadata.name === props.value.spec.priorityClassName) - .map((option) => option.name) -}; - watchEffect(() => { if (!controllerApp.value && allApps.value.length) { const controller = allApps.value.find( @@ -268,15 +263,16 @@ watchEffect(() => {
- + +
diff --git a/pkg/kubewarden/config/contstants.ts b/pkg/kubewarden/config/contstants.ts new file mode 100644 index 00000000..05a70275 --- /dev/null +++ b/pkg/kubewarden/config/contstants.ts @@ -0,0 +1 @@ +export const PRIORITY_CLASS = 'scheduling.k8s.io.priorityclass'; From afa5d1c3879216fc27c00d12c03cd6bf3a9b78f0 Mon Sep 17 00:00:00 2001 From: cnotv Date: Fri, 24 Oct 2025 18:14:01 +0200 Subject: [PATCH 06/12] Add priority Class Name to the table --- pkg/kubewarden/config/table-headers.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pkg/kubewarden/config/table-headers.ts b/pkg/kubewarden/config/table-headers.ts index df040262..183e6fe2 100644 --- a/pkg/kubewarden/config/table-headers.ts +++ b/pkg/kubewarden/config/table-headers.ts @@ -97,6 +97,12 @@ export const POLICY_SERVER_HEADERS = [ formatter: 'PolicyServerDeployment', canBeVariable: true, }, + { + name: 'priorityClassName', + label: 'Priority Class Name', + value: 'spec.priorityClassName', + sort: ['spec.priorityClassName'] + }, { name: 'kubewardenPolicyServers', label: 'Image', From 6dbf4c98e3efa8c83362bccaadbe7cd1687fbeea Mon Sep 17 00:00:00 2001 From: cnotv Date: Fri, 24 Oct 2025 18:26:03 +0200 Subject: [PATCH 07/12] Update tests --- .../policy-server/__tests__/General.spec.ts | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/pkg/kubewarden/chart/kubewarden/policy-server/__tests__/General.spec.ts b/pkg/kubewarden/chart/kubewarden/policy-server/__tests__/General.spec.ts index 394d1509..04b263a8 100644 --- a/pkg/kubewarden/chart/kubewarden/policy-server/__tests__/General.spec.ts +++ b/pkg/kubewarden/chart/kubewarden/policy-server/__tests__/General.spec.ts @@ -5,7 +5,6 @@ import flushPromises from 'flush-promises'; import General from '@kubewarden/chart/kubewarden/policy-server/General.vue'; import ServiceNameSelect from '@shell/components/form/ServiceNameSelect'; import { DEFAULT_POLICY_SERVER } from '@kubewarden/models/policies.kubewarden.io.policyserver'; -import ResourceLabeledSelect from '@shell/components/form/ResourceLabeledSelect'; import { fleetBundles as bundles } from '@tests/unit/mocks/fleetBundles'; import { mockControllerAppWithFleet } from '@tests/unit/mocks/controllerApp'; @@ -119,10 +118,22 @@ describe('component: General', () => { }); it('displays priorityClassName', () => { - const wrapper = createWrapper(); + const expectation = 'whatever'; + const wrapper = createWrapper({ + props: { + value: { + ...DEFAULT_POLICY_SERVER, + spec: { + ...DEFAULT_POLICY_SERVER.spec, + priorityClassName: expectation + } + } + } + }); const selector = wrapper.find('[data-testid="ps-config-priority-class-name-select"]'); expect(selector.exists()).toBe(true); + expect(selector.attributes('value')).toBe(expectation); }); it('displays correct service account when existing', async() => { From e3dcaff958f3b8a8b2e75c96aced9c283dc56959 Mon Sep 17 00:00:00 2001 From: cnotv Date: Mon, 3 Nov 2025 17:07:58 +0100 Subject: [PATCH 08/12] Make the component clearable --- pkg/kubewarden/chart/kubewarden/policy-server/General.vue | 1 + 1 file changed, 1 insertion(+) diff --git a/pkg/kubewarden/chart/kubewarden/policy-server/General.vue b/pkg/kubewarden/chart/kubewarden/policy-server/General.vue index edf4f96b..cde17154 100644 --- a/pkg/kubewarden/chart/kubewarden/policy-server/General.vue +++ b/pkg/kubewarden/chart/kubewarden/policy-server/General.vue @@ -267,6 +267,7 @@ watchEffect(() => { Date: Mon, 3 Nov 2025 17:09:20 +0100 Subject: [PATCH 09/12] Add name to the section to avoid confusion with Replicas --- pkg/kubewarden/chart/kubewarden/policy-server/General.vue | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pkg/kubewarden/chart/kubewarden/policy-server/General.vue b/pkg/kubewarden/chart/kubewarden/policy-server/General.vue index cde17154..96efd68a 100644 --- a/pkg/kubewarden/chart/kubewarden/policy-server/General.vue +++ b/pkg/kubewarden/chart/kubewarden/policy-server/General.vue @@ -264,6 +264,9 @@ watchEffect(() => {
+

+ {{ t('kubewarden.policyServerConfig.priorityClassName.label') }} +

Date: Wed, 5 Nov 2025 16:53:03 +0100 Subject: [PATCH 10/12] Add button to clear class name --- .../kubewarden/policy-server/General.vue | 28 ++++++++++++------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/pkg/kubewarden/chart/kubewarden/policy-server/General.vue b/pkg/kubewarden/chart/kubewarden/policy-server/General.vue index 96efd68a..9ad26811 100644 --- a/pkg/kubewarden/chart/kubewarden/policy-server/General.vue +++ b/pkg/kubewarden/chart/kubewarden/policy-server/General.vue @@ -28,6 +28,7 @@ import { LabeledInput } from '@components/Form/LabeledInput'; import { RadioGroup } from '@components/Form/Radio'; import Loading from '@shell/components/Loading'; import ServiceNameSelect from '@shell/components/form/ServiceNameSelect'; +import { RcButton } from '@components/RcButton'; const props = defineProps<{ mode?: string; @@ -267,16 +268,23 @@ watchEffect(() => {

{{ t('kubewarden.policyServerConfig.priorityClassName.label') }}

- +
+ + {{ t("generic.clear") }} +
From 274d7513a2694bbea206e8676894e7882405a979 Mon Sep 17 00:00:00 2001 From: cnotv Date: Wed, 5 Nov 2025 17:27:20 +0100 Subject: [PATCH 11/12] Update test for the clear functionality of class priority --- .../policy-server/__tests__/General.spec.ts | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/pkg/kubewarden/chart/kubewarden/policy-server/__tests__/General.spec.ts b/pkg/kubewarden/chart/kubewarden/policy-server/__tests__/General.spec.ts index 04b263a8..223058a1 100644 --- a/pkg/kubewarden/chart/kubewarden/policy-server/__tests__/General.spec.ts +++ b/pkg/kubewarden/chart/kubewarden/policy-server/__tests__/General.spec.ts @@ -136,6 +136,24 @@ describe('component: General', () => { expect(selector.attributes('value')).toBe(expectation); }); + it('can clear priorityClassName', () => { + const wrapper = createWrapper({ + props: { + value: { + ...DEFAULT_POLICY_SERVER, + spec: { + ...DEFAULT_POLICY_SERVER.spec, + priorityClassName: 'whatever' + } + } + } + }); + + wrapper.find('[data-testid="ps-config-priority-class-name-clear"]').element.click(); + + expect(wrapper.vm.value.spec.priorityClassName).toBe(''); + }); + it('displays correct service account when existing', async() => { const policyServer = { ...DEFAULT_POLICY_SERVER, From 63cbfcad4cb5a1b24001ad35939677bb52b13782 Mon Sep 17 00:00:00 2001 From: cnotv Date: Wed, 5 Nov 2025 19:30:35 +0100 Subject: [PATCH 12/12] Update Rancher Components --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index c134bd4c..72a4d236 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ }, "dependencies": { "@kubernetes/client-node": "^1.3.0", - "@rancher/components": "^0.3.0-alpha.1", + "@rancher/components": "^0.3.0-alpha.2", "@rancher/shell": "^3.0.4", "vue": "^3.5.13", "vue-router": "^4.5.0", diff --git a/yarn.lock b/yarn.lock index 4753a7bf..3c893d2a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3312,10 +3312,10 @@ resolved "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f" integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A== -"@rancher/components@^0.3.0-alpha.1": - version "0.3.0-alpha.1" - resolved "https://registry.npmjs.org/@rancher/components/-/components-0.3.0-alpha.1.tgz#86f570be89f84ab271bd3ca392b7bc57827e33c1" - integrity sha512-wqplnnHD4RUY1KO1zl9IZ8pZvVfY2MhgRWHsNaqAd17Y0Chylk9egsFveRJb0VBPOCwa3iu0ttFvl9mLIjvpHw== +"@rancher/components@^0.3.0-alpha.2": + version "0.3.0-alpha.2" + resolved "https://registry.npmjs.org/@rancher/components/-/components-0.3.0-alpha.2.tgz#aad9b3eddccf3602422d4628275d6ee4cc687ee1" + integrity sha512-bOr+BeTJSrOlXaIaZpVBRHTN9CxPpUNxvSBAaX6c2cGzZFgU2XUaUBY35t6azt0FFkrsVTkjTzKBaJBYTFSUsQ== dependencies: lodash.debounce "4.0.8"