diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 000000000..36122502b --- /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", + } + ] + +} diff --git a/package.json b/package.json index c134bd4c5..72a4d2369 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/pkg/kubewarden/chart/kubewarden/policy-server/General.vue b/pkg/kubewarden/chart/kubewarden/policy-server/General.vue index 4cb87d7b5..9ad268115 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'; @@ -21,11 +22,13 @@ 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'; import Loading from '@shell/components/Loading'; import ServiceNameSelect from '@shell/components/form/ServiceNameSelect'; +import { RcButton } from '@components/RcButton'; const props = defineProps<{ mode?: string; @@ -259,5 +262,30 @@ watchEffect(() => { /> +
+
+ +

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

+
+ + {{ t("generic.clear") }} +
+
+
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 b1bf816c9..223058a1e 100644 --- a/pkg/kubewarden/chart/kubewarden/policy-server/__tests__/General.spec.ts +++ b/pkg/kubewarden/chart/kubewarden/policy-server/__tests__/General.spec.ts @@ -80,10 +80,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: '' } } } }; @@ -116,6 +117,43 @@ describe('component: General', () => { expect(selector.props('options')).toStrictEqual(['sa-1', 'sa-2', 'sa-3']); }); + it('displays priorityClassName', () => { + 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('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, diff --git a/pkg/kubewarden/config/contstants.ts b/pkg/kubewarden/config/contstants.ts new file mode 100644 index 000000000..05a702754 --- /dev/null +++ b/pkg/kubewarden/config/contstants.ts @@ -0,0 +1 @@ +export const PRIORITY_CLASS = 'scheduling.k8s.io.priorityclass'; diff --git a/pkg/kubewarden/config/table-headers.ts b/pkg/kubewarden/config/table-headers.ts index df0402622..183e6fe29 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', diff --git a/pkg/kubewarden/l10n/en-us.yaml b/pkg/kubewarden/l10n/en-us.yaml index 0746f95c9..23e4a6891 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 c0392cfdd..987f2fc87 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; diff --git a/yarn.lock b/yarn.lock index 4753a7bfd..3c893d2aa 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"