diff --git a/frontend/src/components/App/Home/__snapshots__/index.Base.stories.storyshot b/frontend/src/components/App/Home/__snapshots__/index.Base.stories.storyshot index 4e71738dee1..fa6242575bc 100644 --- a/frontend/src/components/App/Home/__snapshots__/index.Base.stories.storyshot +++ b/frontend/src/components/App/Home/__snapshots__/index.Base.stories.storyshot @@ -590,14 +590,17 @@ class="MuiTableCell-root MuiTableCell-alignLeft MuiTableCell-sizeMedium css-1nchbpl-MuiTableCell-root" > -
-

- Active -

+

+ Unavailable +

+
-
-

- Active -

+

+ Unavailable +

+
-
-

- Active -

+

+ Unavailable +

+
+
  • + +
    + + Validating Admission Policies + +
    + +
    +
  • +
  • + +
    + + Validating Admission Policy Bindings + +
    + +
    +
  • @@ -1426,31 +1472,7 @@ >
    -
    - -
    -
    + />
    diff --git a/frontend/src/components/Sidebar/__snapshots__/Sidebar.InClusterSidebarOpen.stories.storyshot b/frontend/src/components/Sidebar/__snapshots__/Sidebar.InClusterSidebarOpen.stories.storyshot index a51088984ff..8acf5f0b315 100644 --- a/frontend/src/components/Sidebar/__snapshots__/Sidebar.InClusterSidebarOpen.stories.storyshot +++ b/frontend/src/components/Sidebar/__snapshots__/Sidebar.InClusterSidebarOpen.stories.storyshot @@ -1384,6 +1384,52 @@ /> +
  • + +
    + + Validating Admission Policies + +
    + +
    +
  • +
  • + +
    + + Validating Admission Policy Bindings + +
    + +
    +
  • @@ -1488,31 +1534,7 @@ >
    -
    - -
    -
    + />
    diff --git a/frontend/src/components/Sidebar/__snapshots__/Sidebar.SelectedItemWithSidebarOmitted.stories.storyshot b/frontend/src/components/Sidebar/__snapshots__/Sidebar.SelectedItemWithSidebarOmitted.stories.storyshot index 4d10e2d960d..2d67d65d158 100644 --- a/frontend/src/components/Sidebar/__snapshots__/Sidebar.SelectedItemWithSidebarOmitted.stories.storyshot +++ b/frontend/src/components/Sidebar/__snapshots__/Sidebar.SelectedItemWithSidebarOmitted.stories.storyshot @@ -1384,6 +1384,52 @@ /> +
  • + +
    + + Validating Admission Policies + +
    + +
    +
  • +
  • + +
    + + Validating Admission Policy Bindings + +
    + +
    +
  • @@ -1488,31 +1534,7 @@ >
    -
    - -
    -
    + />
    diff --git a/frontend/src/components/Sidebar/useSidebarItems.tsx b/frontend/src/components/Sidebar/useSidebarItems.tsx index 8cf2f1a1f51..1aa6402b9f9 100644 --- a/frontend/src/components/Sidebar/useSidebarItems.tsx +++ b/frontend/src/components/Sidebar/useSidebarItems.tsx @@ -416,6 +416,14 @@ export const useSidebarItems = (sidebarName: string = DefaultSidebars.IN_CLUSTER name: 'validatingWebhookConfigurations', label: t('glossary|Validating Webhook Configurations'), }, + { + name: 'validatingAdmissionPolicies', + label: t('glossary|Validating Admission Policies'), + }, + { + name: 'validatingAdmissionPolicyBindings', + label: t('glossary|Validating Admission Policy Bindings'), + }, ], }, ]; diff --git a/frontend/src/components/admissionpolicy/ValidatingAdmissionPolicyBindingDetails.stories.tsx b/frontend/src/components/admissionpolicy/ValidatingAdmissionPolicyBindingDetails.stories.tsx new file mode 100644 index 00000000000..68cf71ec93c --- /dev/null +++ b/frontend/src/components/admissionpolicy/ValidatingAdmissionPolicyBindingDetails.stories.tsx @@ -0,0 +1,66 @@ +/* + * Copyright 2025 The Kubernetes Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Meta, StoryFn } from '@storybook/react'; +import { http, HttpResponse } from 'msw'; +import { TestContext } from '../../test'; +import { createVAPBinding } from './storyHelper'; +import Details from './ValidatingAdmissionPolicyBindingDetails'; + +export default { + title: 'AdmissionPolicy/ValidatingAdmissionPolicyBinding/Details', + component: Details, + argTypes: {}, + decorators: [ + Story => { + return ; + }, + ], + parameters: { + msw: { + handlers: { + storyBase: [ + http.get( + 'http://localhost:4466/apis/admissionregistration.k8s.io/v1/validatingadmissionpolicybindings', + () => HttpResponse.error() + ), + ], + }, + }, + }, +} as Meta; + +const Template: StoryFn = () => { + return ( + +
    + + ); +}; + +export const Default = Template.bind({}); +Default.parameters = { + msw: { + handlers: { + story: [ + http.get( + 'http://localhost:4466/apis/admissionregistration.k8s.io/v1/validatingadmissionpolicybindings/my-vap-binding', + () => HttpResponse.json(createVAPBinding()) + ), + ], + }, + }, +}; diff --git a/frontend/src/components/admissionpolicy/ValidatingAdmissionPolicyBindingDetails.tsx b/frontend/src/components/admissionpolicy/ValidatingAdmissionPolicyBindingDetails.tsx new file mode 100644 index 00000000000..44162c5f569 --- /dev/null +++ b/frontend/src/components/admissionpolicy/ValidatingAdmissionPolicyBindingDetails.tsx @@ -0,0 +1,184 @@ +/* + * Copyright 2025 The Kubernetes Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { useTranslation } from 'react-i18next'; +import { useParams } from 'react-router-dom'; +import ValidatingAdmissionPolicyBinding from '../../lib/k8s/validatingAdmissionPolicyBinding'; +import Link from '../common/Link'; +import NameValueTable from '../common/NameValueTable'; +import { DetailsGrid } from '../common/Resource'; +import { MatchExpressions } from '../common/Resource/MatchExpressions'; +import SectionBox from '../common/SectionBox'; +import SimpleTable from '../common/SimpleTable'; + +export default function ValidatingAdmissionPolicyBindingDetails(props: { + name?: string; + cluster?: string; +}) { + const params = useParams<{ name: string }>(); + const { name = params.name, cluster } = props; + const { t } = useTranslation(['glossary', 'translation']); + + return ( + + item && [ + { + name: t('Policy Name'), + value: item.spec?.policyName ? ( + + {item.spec.policyName} + + ) : ( + '' + ), + }, + { + name: t('Validation Actions'), + value: item.spec?.validationActions?.join(', ') || '', + }, + ] + } + extraSections={item => + item && [ + { + id: 'headlamp.param-ref', + section: () => + item.spec?.paramRef ? ( + + + ), + hide: + !Object.keys(item.spec.paramRef?.selector?.matchLabels ?? {}).length && + !item.spec.paramRef?.selector?.matchExpressions?.length, + }, + ]} + /> + + ) : null, + }, + { + id: 'headlamp.match-resources', + section: () => + item.spec?.matchResources ? ( + + + ), + hide: + !Object.keys( + item.spec.matchResources.namespaceSelector?.matchLabels ?? {} + ).length && + !item.spec.matchResources.namespaceSelector?.matchExpressions?.length, + }, + { + name: t('Object Selector'), + value: ( + + ), + hide: + !Object.keys(item.spec.matchResources.objectSelector?.matchLabels ?? {}) + .length && + !item.spec.matchResources.objectSelector?.matchExpressions?.length, + }, + ]} + /> + {item.spec.matchResources.resourceRules && + item.spec.matchResources.resourceRules.length > 0 && ( + rule.apiGroups?.join(', '), + }, + { + label: t('API Versions'), + getter: rule => rule.apiVersions?.join(', '), + }, + { + label: t('translation|Operations'), + getter: rule => rule.operations?.join(', '), + }, + { + label: t('Resources'), + getter: rule => rule.resources?.join(', '), + }, + { + label: t('Scope'), + getter: rule => rule.scope || '', + }, + ]} + /> + )} + + ) : null, + }, + ] + } + /> + ); +} diff --git a/frontend/src/components/admissionpolicy/ValidatingAdmissionPolicyBindingList.stories.tsx b/frontend/src/components/admissionpolicy/ValidatingAdmissionPolicyBindingList.stories.tsx new file mode 100644 index 00000000000..eb4f05c29b2 --- /dev/null +++ b/frontend/src/components/admissionpolicy/ValidatingAdmissionPolicyBindingList.stories.tsx @@ -0,0 +1,74 @@ +/* + * Copyright 2025 The Kubernetes Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import Container from '@mui/material/Container'; +import { Meta, StoryFn } from '@storybook/react'; +import { http, HttpResponse } from 'msw'; +import ValidatingAdmissionPolicyBinding from '../../lib/k8s/validatingAdmissionPolicyBinding'; +import { TestContext } from '../../test'; +import { generateK8sResourceList } from '../../test/mocker'; +import { createVAPBinding } from './storyHelper'; +import List from './ValidatingAdmissionPolicyBindingList'; + +const VAPBindingTemplate = createVAPBinding(); +VAPBindingTemplate.metadata.name = 'vap-binding-test-{{i}}'; + +const objList = generateK8sResourceList(VAPBindingTemplate, { + numResults: 5, + instantiateAs: ValidatingAdmissionPolicyBinding, +}).map(it => it.jsonData); + +export default { + title: 'AdmissionPolicy/ValidatingAdmissionPolicyBinding/List', + component: List, + argTypes: {}, + decorators: [ + Story => { + return ( + + + + ); + }, + ], +} as Meta; + +const Template: StoryFn = () => { + return ( + + + + ); +}; + +export const Items = Template.bind({}); +Items.parameters = { + msw: { + handlers: { + story: [ + http.get( + 'http://localhost:4466/apis/admissionregistration.k8s.io/v1/validatingadmissionpolicybindings', + () => + HttpResponse.json({ + kind: 'ValidatingAdmissionPolicyBindingList', + items: objList, + metadata: {}, + }) + ), + ], + }, + }, +}; diff --git a/frontend/src/components/admissionpolicy/ValidatingAdmissionPolicyBindingList.tsx b/frontend/src/components/admissionpolicy/ValidatingAdmissionPolicyBindingList.tsx new file mode 100644 index 00000000000..52f7de33592 --- /dev/null +++ b/frontend/src/components/admissionpolicy/ValidatingAdmissionPolicyBindingList.tsx @@ -0,0 +1,46 @@ +/* + * Copyright 2025 The Kubernetes Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { useTranslation } from 'react-i18next'; +import ValidatingAdmissionPolicyBinding from '../../lib/k8s/validatingAdmissionPolicyBinding'; +import ResourceListView from '../common/Resource/ResourceListView'; + +export default function ValidatingAdmissionPolicyBindingList() { + const { t } = useTranslation('glossary'); + + return ( + binding.spec?.policyName || '', + }, + { + id: 'validationActions', + label: t('Validation Actions'), + getValue: binding => binding.spec?.validationActions?.join(', ') || '', + }, + 'labels', + 'age', + ]} + /> + ); +} diff --git a/frontend/src/components/admissionpolicy/ValidatingAdmissionPolicyDetails.stories.tsx b/frontend/src/components/admissionpolicy/ValidatingAdmissionPolicyDetails.stories.tsx new file mode 100644 index 00000000000..3acac4fb5c9 --- /dev/null +++ b/frontend/src/components/admissionpolicy/ValidatingAdmissionPolicyDetails.stories.tsx @@ -0,0 +1,66 @@ +/* + * Copyright 2025 The Kubernetes Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Meta, StoryFn } from '@storybook/react'; +import { http, HttpResponse } from 'msw'; +import { TestContext } from '../../test'; +import { createVAP } from './storyHelper'; +import Details from './ValidatingAdmissionPolicyDetails'; + +export default { + title: 'AdmissionPolicy/ValidatingAdmissionPolicy/Details', + component: Details, + argTypes: {}, + decorators: [ + Story => { + return ; + }, + ], + parameters: { + msw: { + handlers: { + storyBase: [ + http.get( + 'http://localhost:4466/apis/admissionregistration.k8s.io/v1/validatingadmissionpolicies', + () => HttpResponse.error() + ), + ], + }, + }, + }, +} as Meta; + +const Template: StoryFn = () => { + return ( + +
    + + ); +}; + +export const Default = Template.bind({}); +Default.parameters = { + msw: { + handlers: { + story: [ + http.get( + 'http://localhost:4466/apis/admissionregistration.k8s.io/v1/validatingadmissionpolicies/my-vap', + () => HttpResponse.json(createVAP()) + ), + ], + }, + }, +}; diff --git a/frontend/src/components/admissionpolicy/ValidatingAdmissionPolicyDetails.tsx b/frontend/src/components/admissionpolicy/ValidatingAdmissionPolicyDetails.tsx new file mode 100644 index 00000000000..fc1d2b9febf --- /dev/null +++ b/frontend/src/components/admissionpolicy/ValidatingAdmissionPolicyDetails.tsx @@ -0,0 +1,226 @@ +/* + * Copyright 2025 The Kubernetes Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { useTranslation } from 'react-i18next'; +import { useParams } from 'react-router-dom'; +import ValidatingAdmissionPolicy from '../../lib/k8s/validatingAdmissionPolicy'; +import NameValueTable from '../common/NameValueTable'; +import { DetailsGrid } from '../common/Resource'; +import { MatchExpressions } from '../common/Resource/MatchExpressions'; +import SectionBox from '../common/SectionBox'; +import SimpleTable from '../common/SimpleTable'; + +export default function ValidatingAdmissionPolicyDetails(props: { + name?: string; + cluster?: string; +}) { + const params = useParams<{ name: string }>(); + const { name = params.name, cluster } = props; + const { t } = useTranslation(['glossary', 'translation']); + + return ( + + item && [ + { + name: t('Failure Policy'), + value: item.spec?.failurePolicy, + }, + { + name: t('Validations'), + value: item.spec?.validations?.length || 0, + }, + { + name: t('Match Conditions'), + value: item.spec?.matchConditions?.length || 0, + }, + ] + } + extraSections={item => + item && [ + { + id: 'headlamp.validations', + section: () => + item.spec?.validations && item.spec.validations.length > 0 ? ( + + v.expression, + }, + { + label: t('translation|Message'), + getter: v => v.message || v.messageExpression || '', + }, + { + label: t('translation|Reason'), + getter: v => v.reason || '', + }, + ]} + /> + + ) : null, + }, + { + id: 'headlamp.match-constraints', + section: () => + item.spec?.matchConstraints ? ( + + + ), + hide: + !Object.keys( + item.spec.matchConstraints.namespaceSelector?.matchLabels ?? {} + ).length && + !item.spec.matchConstraints.namespaceSelector?.matchExpressions?.length, + }, + { + name: t('Object Selector'), + value: ( + + ), + hide: + !Object.keys(item.spec.matchConstraints.objectSelector?.matchLabels ?? {}) + .length && + !item.spec.matchConstraints.objectSelector?.matchExpressions?.length, + }, + ]} + /> + {item.spec.matchConstraints.resourceRules && + item.spec.matchConstraints.resourceRules.length > 0 && ( + rule.apiGroups?.join(', '), + }, + { + label: t('API Versions'), + getter: rule => rule.apiVersions?.join(', '), + }, + { + label: t('translation|Operations'), + getter: rule => rule.operations?.join(', '), + }, + { + label: t('Resources'), + getter: rule => rule.resources?.join(', '), + }, + { + label: t('Scope'), + getter: rule => rule.scope || '', + }, + ]} + /> + )} + + ) : null, + }, + { + id: 'headlamp.match-conditions', + section: () => + item.spec?.matchConditions && item.spec.matchConditions.length > 0 ? ( + + c.name, + }, + { + label: t('Expression'), + getter: c => c.expression, + }, + ]} + /> + + ) : null, + }, + { + id: 'headlamp.audit-annotations', + section: () => + item.spec?.auditAnnotations && item.spec.auditAnnotations.length > 0 ? ( + + a.key, + }, + { + label: t('Value Expression'), + getter: a => a.valueExpression, + }, + ]} + /> + + ) : null, + }, + { + id: 'headlamp.variables', + section: () => + item.spec?.variables && item.spec.variables.length > 0 ? ( + + v.name, + }, + { + label: t('Expression'), + getter: v => v.expression, + }, + ]} + /> + + ) : null, + }, + ] + } + /> + ); +} diff --git a/frontend/src/components/admissionpolicy/ValidatingAdmissionPolicyList.stories.tsx b/frontend/src/components/admissionpolicy/ValidatingAdmissionPolicyList.stories.tsx new file mode 100644 index 00000000000..9593c12423e --- /dev/null +++ b/frontend/src/components/admissionpolicy/ValidatingAdmissionPolicyList.stories.tsx @@ -0,0 +1,74 @@ +/* + * Copyright 2025 The Kubernetes Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import Container from '@mui/material/Container'; +import { Meta, StoryFn } from '@storybook/react'; +import { http, HttpResponse } from 'msw'; +import ValidatingAdmissionPolicy from '../../lib/k8s/validatingAdmissionPolicy'; +import { TestContext } from '../../test'; +import { generateK8sResourceList } from '../../test/mocker'; +import { createVAP } from './storyHelper'; +import List from './ValidatingAdmissionPolicyList'; + +const VAPTemplate = createVAP(); +VAPTemplate.metadata.name = 'vap-test-{{i}}'; + +const objList = generateK8sResourceList(VAPTemplate, { + numResults: 5, + instantiateAs: ValidatingAdmissionPolicy, +}).map(it => it.jsonData); + +export default { + title: 'AdmissionPolicy/ValidatingAdmissionPolicy/List', + component: List, + argTypes: {}, + decorators: [ + Story => { + return ( + + + + ); + }, + ], +} as Meta; + +const Template: StoryFn = () => { + return ( + + + + ); +}; + +export const Items = Template.bind({}); +Items.parameters = { + msw: { + handlers: { + story: [ + http.get( + 'http://localhost:4466/apis/admissionregistration.k8s.io/v1/validatingadmissionpolicies', + () => + HttpResponse.json({ + kind: 'ValidatingAdmissionPolicyList', + items: objList, + metadata: {}, + }) + ), + ], + }, + }, +}; diff --git a/frontend/src/components/admissionpolicy/ValidatingAdmissionPolicyList.tsx b/frontend/src/components/admissionpolicy/ValidatingAdmissionPolicyList.tsx new file mode 100644 index 00000000000..f615f55d7ea --- /dev/null +++ b/frontend/src/components/admissionpolicy/ValidatingAdmissionPolicyList.tsx @@ -0,0 +1,48 @@ +/* + * Copyright 2025 The Kubernetes Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { useTranslation } from 'react-i18next'; +import ValidatingAdmissionPolicy from '../../lib/k8s/validatingAdmissionPolicy'; +import ResourceListView from '../common/Resource/ResourceListView'; + +export default function ValidatingAdmissionPolicyList() { + const { t } = useTranslation('glossary'); + + return ( + policy.spec?.failurePolicy || '', + }, + { + id: 'validations', + label: t('Validations'), + gridTemplate: 'min-content', + getValue: policy => policy.spec?.validations?.length || 0, + }, + 'labels', + 'age', + ]} + /> + ); +} diff --git a/frontend/src/components/admissionpolicy/__snapshots__/ValidatingAdmissionPolicyBindingDetails.Default.stories.storyshot b/frontend/src/components/admissionpolicy/__snapshots__/ValidatingAdmissionPolicyBindingDetails.Default.stories.storyshot new file mode 100644 index 00000000000..c60ffe51a61 --- /dev/null +++ b/frontend/src/components/admissionpolicy/__snapshots__/ValidatingAdmissionPolicyBindingDetails.Default.stories.storyshot @@ -0,0 +1,496 @@ + +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +

    + ValidatingAdmissionPolicyBinding: my-vap-binding +

    +
    + +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + Name +
    +
    + + my-vap-binding + +
    +
    + Creation +
    +
    + + 2024-01-01T00:00:00.000Z + +
    +
    + Policy Name +
    +
    + + my-vap + +
    +
    + Validation Actions +
    +
    + + Deny, Audit + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +

    + Param Ref +

    +
    +
    +
    +
    +
    +
    +
    + Name +
    +
    + + my-params + +
    +
    + Namespace +
    +
    + + default + +
    +
    + Parameter Not Found Action +
    +
    + + Deny + +
    +
    + Selector +
    +
    +

    + config: vap-params +

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +

    + Match Resources +

    +
    +
    +
    +
    +
    +
    +
    + Match Policy +
    +
    + + Equivalent + +
    +
    + Namespace Selector +
    +
    +

    + environment: production +

    +
    +
    + Object Selector +
    +
    +

    + app +

    +
    +
    +
    + + + + + + + + + + + + + + + + + + + +
    + API Groups + + API Versions + + Operations + + Resources + + Scope +
    + apps + + v1 + + CREATE, UPDATE + + deployments + + Namespaced +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +

    + Events +

    +
    +
    +
    +
    +
    +
    +
    +

    + No data to be shown. +

    +
    +
    +
    +
    +
    +
    +
    +
    + \ No newline at end of file diff --git a/frontend/src/components/admissionpolicy/__snapshots__/ValidatingAdmissionPolicyBindingList.Items.stories.storyshot b/frontend/src/components/admissionpolicy/__snapshots__/ValidatingAdmissionPolicyBindingList.Items.stories.storyshot new file mode 100644 index 00000000000..7919a7ca751 --- /dev/null +++ b/frontend/src/components/admissionpolicy/__snapshots__/ValidatingAdmissionPolicyBindingList.Items.stories.storyshot @@ -0,0 +1,886 @@ + +
    +
    +
    +
    +
    +
    +

    + Validating Admission Policy Bindings +

    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + +
    + +
    +
    + + + +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + + + + + + + vap-binding-test-0 + + + my-vap + + Deny, Audit + +

    + 90d +

    +
    + +
    + + + + + + + + vap-binding-test-1 + + + my-vap + + Deny, Audit + +

    + 90d +

    +
    + +
    + + + + + + + + vap-binding-test-2 + + + my-vap + + Deny, Audit + +

    + 90d +

    +
    + +
    + + + + + + + + vap-binding-test-3 + + + my-vap + + Deny, Audit + +

    + 90d +

    +
    + +
    + + + + + + + + vap-binding-test-4 + + + my-vap + + Deny, Audit + +

    + 90d +

    +
    + +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    + \ No newline at end of file diff --git a/frontend/src/components/admissionpolicy/__snapshots__/ValidatingAdmissionPolicyDetails.Default.stories.storyshot b/frontend/src/components/admissionpolicy/__snapshots__/ValidatingAdmissionPolicyDetails.Default.stories.storyshot new file mode 100644 index 00000000000..73525961e91 --- /dev/null +++ b/frontend/src/components/admissionpolicy/__snapshots__/ValidatingAdmissionPolicyDetails.Default.stories.storyshot @@ -0,0 +1,768 @@ + +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +

    + ValidatingAdmissionPolicy: my-vap +

    +
    + +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + Name +
    +
    + + my-vap + +
    +
    + Creation +
    +
    + + 2024-01-01T00:00:00.000Z + +
    +
    + Failure Policy +
    +
    + + Fail + +
    +
    + Validations +
    +
    + 2 +
    +
    + Match Conditions +
    +
    + 1 +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +

    + Validations +

    +
    +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + +
    + Expression + + Message + + Reason +
    + object.spec.replicas <= 5 + + Replicas must be 5 or fewer + + Invalid +
    + object.metadata.labels.exists(l, l == 'app') + + 'Missing required label: app' + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +

    + Match Constraints +

    +
    +
    +
    +
    +
    +
    +
    + Match Policy +
    +
    + + Equivalent + +
    +
    + Namespace Selector +
    +
    +

    + environment: production +

    +

    + env in (prod,staging) +

    +
    +
    + Object Selector +
    +
    +

    + app.kubernetes.io/managed-by: helm +

    +
    +
    +
    + + + + + + + + + + + + + + + + + + +
    + API Groups + + API Versions + + Operations + + Resources + + Scope +
    + + v1 + + CREATE, UPDATE + + pods + + Namespaced +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +

    + Match Conditions +

    +
    +
    +
    +
    +
    +
    + + + + + + + + + + + + + +
    + Name + + Expression +
    + exclude-system-namespaces + + !object.metadata.namespace.startsWith('kube-') +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +

    + Audit Annotations +

    +
    +
    +
    +
    +
    +
    + + + + + + + + + + + + + +
    + Key + + Value Expression +
    + policy-check + + 'checked by my-vap' +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +

    + Variables +

    +
    +
    +
    +
    +
    +
    + + + + + + + + + + + + + +
    + Name + + Expression +
    + maxReplicas + + 5 +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +

    + Events +

    +
    +
    +
    +
    +
    +
    +
    +

    + No data to be shown. +

    +
    +
    +
    +
    +
    +
    +
    +
    + \ No newline at end of file diff --git a/frontend/src/components/admissionpolicy/__snapshots__/ValidatingAdmissionPolicyList.Items.stories.storyshot b/frontend/src/components/admissionpolicy/__snapshots__/ValidatingAdmissionPolicyList.Items.stories.storyshot new file mode 100644 index 00000000000..516aea2072d --- /dev/null +++ b/frontend/src/components/admissionpolicy/__snapshots__/ValidatingAdmissionPolicyList.Items.stories.storyshot @@ -0,0 +1,886 @@ + +
    +
    +
    +
    +
    +
    +

    + Validating Admission Policies +

    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + +
    + +
    +
    + + + +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + + + + + + + vap-test-0 + + + Fail + + 2 + +

    + 90d +

    +
    + +
    + + + + + + + + vap-test-1 + + + Fail + + 2 + +

    + 90d +

    +
    + +
    + + + + + + + + vap-test-2 + + + Fail + + 2 + +

    + 90d +

    +
    + +
    + + + + + + + + vap-test-3 + + + Fail + + 2 + +

    + 90d +

    +
    + +
    + + + + + + + + vap-test-4 + + + Fail + + 2 + +

    + 90d +

    +
    + +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    + \ No newline at end of file diff --git a/frontend/src/components/admissionpolicy/storyHelper.tsx b/frontend/src/components/admissionpolicy/storyHelper.tsx new file mode 100644 index 00000000000..2c84d347901 --- /dev/null +++ b/frontend/src/components/admissionpolicy/storyHelper.tsx @@ -0,0 +1,120 @@ +/* + * Copyright 2025 The Kubernetes Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export const createVAP = () => ({ + apiVersion: 'admissionregistration.k8s.io/v1', + kind: 'ValidatingAdmissionPolicy', + metadata: { + creationTimestamp: '2024-01-01T00:00:00Z', + generation: 1, + name: 'my-vap', + resourceVersion: '123', + uid: 'abc-123', + }, + spec: { + failurePolicy: 'Fail', + matchConstraints: { + matchPolicy: 'Equivalent', + namespaceSelector: { + matchLabels: { environment: 'production' }, + matchExpressions: [{ key: 'env', operator: 'In', values: ['prod', 'staging'] }], + }, + objectSelector: { + matchLabels: { 'app.kubernetes.io/managed-by': 'helm' }, + }, + resourceRules: [ + { + apiGroups: [''], + apiVersions: ['v1'], + operations: ['CREATE', 'UPDATE'], + resources: ['pods'], + scope: 'Namespaced', + }, + ], + }, + validations: [ + { + expression: 'object.spec.replicas <= 5', + message: 'Replicas must be 5 or fewer', + reason: 'Invalid', + }, + { + expression: "object.metadata.labels.exists(l, l == 'app')", + messageExpression: "'Missing required label: app'", + }, + ], + matchConditions: [ + { + name: 'exclude-system-namespaces', + expression: "!object.metadata.namespace.startsWith('kube-')", + }, + ], + auditAnnotations: [ + { + key: 'policy-check', + valueExpression: "'checked by my-vap'", + }, + ], + variables: [ + { + name: 'maxReplicas', + expression: '5', + }, + ], + }, +}); + +export const createVAPBinding = () => ({ + apiVersion: 'admissionregistration.k8s.io/v1', + kind: 'ValidatingAdmissionPolicyBinding', + metadata: { + creationTimestamp: '2024-01-01T00:00:00Z', + generation: 1, + name: 'my-vap-binding', + resourceVersion: '456', + uid: 'def-456', + }, + spec: { + policyName: 'my-vap', + validationActions: ['Deny', 'Audit'], + matchResources: { + matchPolicy: 'Equivalent', + namespaceSelector: { + matchLabels: { environment: 'production' }, + }, + objectSelector: { + matchExpressions: [{ key: 'app', operator: 'Exists', values: [] }], + }, + resourceRules: [ + { + apiGroups: ['apps'], + apiVersions: ['v1'], + operations: ['CREATE', 'UPDATE'], + resources: ['deployments'], + scope: 'Namespaced', + }, + ], + }, + paramRef: { + name: 'my-params', + namespace: 'default', + parameterNotFoundAction: 'Deny', + selector: { + matchLabels: { config: 'vap-params' }, + }, + }, + }, +}); diff --git a/frontend/src/components/common/Resource/MainInfoSection/__snapshots__/MainInfoSection.Normal.stories.storyshot b/frontend/src/components/common/Resource/MainInfoSection/__snapshots__/MainInfoSection.Normal.stories.storyshot index 21e11094a7c..ce5d0e06e32 100644 --- a/frontend/src/components/common/Resource/MainInfoSection/__snapshots__/MainInfoSection.Normal.stories.storyshot +++ b/frontend/src/components/common/Resource/MainInfoSection/__snapshots__/MainInfoSection.Normal.stories.storyshot @@ -68,8 +68,8 @@ class="MuiGrid-root MuiGrid-item css-13i4rnv-MuiGrid-root" > -
    -
    + />
    diff --git a/frontend/src/components/common/Resource/MainInfoSection/__snapshots__/MainInfoSection.NullBacklink.stories.storyshot b/frontend/src/components/common/Resource/MainInfoSection/__snapshots__/MainInfoSection.NullBacklink.stories.storyshot index dfaa642cebc..e592630b4c3 100644 --- a/frontend/src/components/common/Resource/MainInfoSection/__snapshots__/MainInfoSection.NullBacklink.stories.storyshot +++ b/frontend/src/components/common/Resource/MainInfoSection/__snapshots__/MainInfoSection.NullBacklink.stories.storyshot @@ -50,8 +50,8 @@ class="MuiGrid-root MuiGrid-item css-13i4rnv-MuiGrid-root" > -
    -
    + />
    diff --git a/frontend/src/components/common/Resource/__snapshots__/ResourceTableMultiActions.Default.stories.storyshot b/frontend/src/components/common/Resource/__snapshots__/ResourceTableMultiActions.Default.stories.storyshot index a2a4dad7482..181bcc96e30 100644 --- a/frontend/src/components/common/Resource/__snapshots__/ResourceTableMultiActions.Default.stories.storyshot +++ b/frontend/src/components/common/Resource/__snapshots__/ResourceTableMultiActions.Default.stories.storyshot @@ -5,19 +5,7 @@ >
    - -
    + />
    diff --git a/frontend/src/components/common/Resource/__snapshots__/ResourceTableMultiActions.WithMixedItems.stories.storyshot b/frontend/src/components/common/Resource/__snapshots__/ResourceTableMultiActions.WithMixedItems.stories.storyshot index a2a4dad7482..181bcc96e30 100644 --- a/frontend/src/components/common/Resource/__snapshots__/ResourceTableMultiActions.WithMixedItems.stories.storyshot +++ b/frontend/src/components/common/Resource/__snapshots__/ResourceTableMultiActions.WithMixedItems.stories.storyshot @@ -5,19 +5,7 @@ >
    - -
    + />
    diff --git a/frontend/src/components/common/Resource/__snapshots__/ResourceTableMultiActions.WithNonRestartableItems.stories.storyshot b/frontend/src/components/common/Resource/__snapshots__/ResourceTableMultiActions.WithNonRestartableItems.stories.storyshot index 0874bec3709..63c7c447f81 100644 --- a/frontend/src/components/common/Resource/__snapshots__/ResourceTableMultiActions.WithNonRestartableItems.stories.storyshot +++ b/frontend/src/components/common/Resource/__snapshots__/ResourceTableMultiActions.WithNonRestartableItems.stories.storyshot @@ -5,19 +5,7 @@ >
    - -
    + />
    diff --git a/frontend/src/components/common/Resource/__snapshots__/ResourceTableMultiActions.WithRestartableItems.stories.storyshot b/frontend/src/components/common/Resource/__snapshots__/ResourceTableMultiActions.WithRestartableItems.stories.storyshot index a2a4dad7482..181bcc96e30 100644 --- a/frontend/src/components/common/Resource/__snapshots__/ResourceTableMultiActions.WithRestartableItems.stories.storyshot +++ b/frontend/src/components/common/Resource/__snapshots__/ResourceTableMultiActions.WithRestartableItems.stories.storyshot @@ -5,19 +5,7 @@ >
    - -
    + />
    diff --git a/frontend/src/components/common/Resource/__snapshots__/RestartButton.DeploymentExample.stories.storyshot b/frontend/src/components/common/Resource/__snapshots__/RestartButton.DeploymentExample.stories.storyshot index 1b55fe1dab9..92f068f62c9 100644 --- a/frontend/src/components/common/Resource/__snapshots__/RestartButton.DeploymentExample.stories.storyshot +++ b/frontend/src/components/common/Resource/__snapshots__/RestartButton.DeploymentExample.stories.storyshot @@ -1,16 +1,3 @@ -
    - -
    -
    +
    \ No newline at end of file diff --git a/frontend/src/components/common/Resource/__snapshots__/RestartButton.StatefulSetExample.stories.storyshot b/frontend/src/components/common/Resource/__snapshots__/RestartButton.StatefulSetExample.stories.storyshot index 1b55fe1dab9..92f068f62c9 100644 --- a/frontend/src/components/common/Resource/__snapshots__/RestartButton.StatefulSetExample.stories.storyshot +++ b/frontend/src/components/common/Resource/__snapshots__/RestartButton.StatefulSetExample.stories.storyshot @@ -1,16 +1,3 @@ -
    - -
    -
    +
    \ No newline at end of file diff --git a/frontend/src/components/common/Resource/__snapshots__/RollbackButton.DaemonSetExample.stories.storyshot b/frontend/src/components/common/Resource/__snapshots__/RollbackButton.DaemonSetExample.stories.storyshot index b4d91ce48cc..92f068f62c9 100644 --- a/frontend/src/components/common/Resource/__snapshots__/RollbackButton.DaemonSetExample.stories.storyshot +++ b/frontend/src/components/common/Resource/__snapshots__/RollbackButton.DaemonSetExample.stories.storyshot @@ -1,15 +1,3 @@ -
    - -
    +
    \ No newline at end of file diff --git a/frontend/src/components/common/Resource/__snapshots__/RollbackButton.DeploymentExample.stories.storyshot b/frontend/src/components/common/Resource/__snapshots__/RollbackButton.DeploymentExample.stories.storyshot index b4d91ce48cc..92f068f62c9 100644 --- a/frontend/src/components/common/Resource/__snapshots__/RollbackButton.DeploymentExample.stories.storyshot +++ b/frontend/src/components/common/Resource/__snapshots__/RollbackButton.DeploymentExample.stories.storyshot @@ -1,15 +1,3 @@ -
    - -
    +
    \ No newline at end of file diff --git a/frontend/src/components/common/Resource/__snapshots__/RollbackButton.StatefulSetExample.stories.storyshot b/frontend/src/components/common/Resource/__snapshots__/RollbackButton.StatefulSetExample.stories.storyshot index b4d91ce48cc..92f068f62c9 100644 --- a/frontend/src/components/common/Resource/__snapshots__/RollbackButton.StatefulSetExample.stories.storyshot +++ b/frontend/src/components/common/Resource/__snapshots__/RollbackButton.StatefulSetExample.stories.storyshot @@ -1,15 +1,3 @@ -
    - -
    +
    \ No newline at end of file diff --git a/frontend/src/components/common/Resource/__snapshots__/ScaleButton.DeploymentExample.stories.storyshot b/frontend/src/components/common/Resource/__snapshots__/ScaleButton.DeploymentExample.stories.storyshot index f367a3fc6a2..92f068f62c9 100644 --- a/frontend/src/components/common/Resource/__snapshots__/ScaleButton.DeploymentExample.stories.storyshot +++ b/frontend/src/components/common/Resource/__snapshots__/ScaleButton.DeploymentExample.stories.storyshot @@ -1,15 +1,3 @@ -
    - -
    +
    \ No newline at end of file diff --git a/frontend/src/components/common/Resource/__snapshots__/ScaleButton.ReplicaSetExample.stories.storyshot b/frontend/src/components/common/Resource/__snapshots__/ScaleButton.ReplicaSetExample.stories.storyshot index f367a3fc6a2..92f068f62c9 100644 --- a/frontend/src/components/common/Resource/__snapshots__/ScaleButton.ReplicaSetExample.stories.storyshot +++ b/frontend/src/components/common/Resource/__snapshots__/ScaleButton.ReplicaSetExample.stories.storyshot @@ -1,15 +1,3 @@ -
    - -
    +
    \ No newline at end of file diff --git a/frontend/src/components/common/Resource/__snapshots__/ScaleButton.StatefulSetExample.stories.storyshot b/frontend/src/components/common/Resource/__snapshots__/ScaleButton.StatefulSetExample.stories.storyshot index f367a3fc6a2..92f068f62c9 100644 --- a/frontend/src/components/common/Resource/__snapshots__/ScaleButton.StatefulSetExample.stories.storyshot +++ b/frontend/src/components/common/Resource/__snapshots__/ScaleButton.StatefulSetExample.stories.storyshot @@ -1,15 +1,3 @@ -
    - -
    +
    \ No newline at end of file diff --git a/frontend/src/components/configmap/__snapshots__/Details.Empty.stories.storyshot b/frontend/src/components/configmap/__snapshots__/Details.Empty.stories.storyshot index 82c7f45b48f..e4c2b32fccd 100644 --- a/frontend/src/components/configmap/__snapshots__/Details.Empty.stories.storyshot +++ b/frontend/src/components/configmap/__snapshots__/Details.Empty.stories.storyshot @@ -82,8 +82,8 @@ class="MuiGrid-root MuiGrid-item css-13i4rnv-MuiGrid-root" > -
    -
    + />
    diff --git a/frontend/src/components/configmap/__snapshots__/Details.WithBase.stories.storyshot b/frontend/src/components/configmap/__snapshots__/Details.WithBase.stories.storyshot index 47c34afe1d1..76c83b8c6de 100644 --- a/frontend/src/components/configmap/__snapshots__/Details.WithBase.stories.storyshot +++ b/frontend/src/components/configmap/__snapshots__/Details.WithBase.stories.storyshot @@ -82,8 +82,8 @@ class="MuiGrid-root MuiGrid-item css-13i4rnv-MuiGrid-root" > -
    -
    + />
    diff --git a/frontend/src/components/configmap/__snapshots__/List.Items.stories.storyshot b/frontend/src/components/configmap/__snapshots__/List.Items.stories.storyshot index 5bcbaaf9505..c025b6fb07f 100644 --- a/frontend/src/components/configmap/__snapshots__/List.Items.stories.storyshot +++ b/frontend/src/components/configmap/__snapshots__/List.Items.stories.storyshot @@ -19,19 +19,7 @@
    - -
    + />
    -
    -
    + />
    @@ -518,19 +505,7 @@
    - -
    + />
    -
    -
    + />
    diff --git a/frontend/src/components/crd/__snapshots__/CustomResourceList.List.stories.storyshot b/frontend/src/components/crd/__snapshots__/CustomResourceList.List.stories.storyshot index 50f16f84cf2..3f768524736 100644 --- a/frontend/src/components/crd/__snapshots__/CustomResourceList.List.stories.storyshot +++ b/frontend/src/components/crd/__snapshots__/CustomResourceList.List.stories.storyshot @@ -19,19 +19,7 @@
    - -
    + />

    - -
    + />
    - -
    + />
    @@ -110,35 +86,10 @@ />
    - -
    + />
    - -
    -
    + />
    @@ -280,19 +231,7 @@
    - -
    + />
    diff --git a/frontend/src/components/cronjob/__snapshots__/CronJobDetails.EveryMinute.stories.storyshot b/frontend/src/components/cronjob/__snapshots__/CronJobDetails.EveryMinute.stories.storyshot index 7d38316a32c..08bc2f047d7 100644 --- a/frontend/src/components/cronjob/__snapshots__/CronJobDetails.EveryMinute.stories.storyshot +++ b/frontend/src/components/cronjob/__snapshots__/CronJobDetails.EveryMinute.stories.storyshot @@ -74,34 +74,10 @@ >
    - -
    + />
    - -
    + />
    @@ -110,35 +86,10 @@ />
    - -
    + />
    - -
    -
    + />
    @@ -280,19 +231,7 @@
    - -
    + />
    diff --git a/frontend/src/components/cronjob/__snapshots__/List.Items.stories.storyshot b/frontend/src/components/cronjob/__snapshots__/List.Items.stories.storyshot index 62c9645b390..cda14349ca5 100644 --- a/frontend/src/components/cronjob/__snapshots__/List.Items.stories.storyshot +++ b/frontend/src/components/cronjob/__snapshots__/List.Items.stories.storyshot @@ -19,19 +19,7 @@
    - -
    + />
    - -
    + />
    - -
    + />
    -
    -
    + />
    diff --git a/frontend/src/components/endpointSlices/__snapshots__/EndpointSliceList.Items.stories.storyshot b/frontend/src/components/endpointSlices/__snapshots__/EndpointSliceList.Items.stories.storyshot index 84f0ee21050..8ad33b49742 100644 --- a/frontend/src/components/endpointSlices/__snapshots__/EndpointSliceList.Items.stories.storyshot +++ b/frontend/src/components/endpointSlices/__snapshots__/EndpointSliceList.Items.stories.storyshot @@ -19,19 +19,7 @@
    - -
    + />
    -
    -
    + />
    diff --git a/frontend/src/components/endpoints/__snapshots__/EndpointList.Items.stories.storyshot b/frontend/src/components/endpoints/__snapshots__/EndpointList.Items.stories.storyshot index fe3b9aa66e9..399e860d460 100644 --- a/frontend/src/components/endpoints/__snapshots__/EndpointList.Items.stories.storyshot +++ b/frontend/src/components/endpoints/__snapshots__/EndpointList.Items.stories.storyshot @@ -19,19 +19,7 @@
    - -
    + />
    -
    -
    + />
    diff --git a/frontend/src/components/gateway/__snapshots__/BackendTLSPolicyList.Items.stories.storyshot b/frontend/src/components/gateway/__snapshots__/BackendTLSPolicyList.Items.stories.storyshot index c1d854e9b89..0c3c464db54 100644 --- a/frontend/src/components/gateway/__snapshots__/BackendTLSPolicyList.Items.stories.storyshot +++ b/frontend/src/components/gateway/__snapshots__/BackendTLSPolicyList.Items.stories.storyshot @@ -19,19 +19,7 @@
    - -
    + />
    -
    -
    + />
    diff --git a/frontend/src/components/gateway/__snapshots__/BackendTrafficPolicyList.Items.stories.storyshot b/frontend/src/components/gateway/__snapshots__/BackendTrafficPolicyList.Items.stories.storyshot index 8770d7bca03..6e3828cf221 100644 --- a/frontend/src/components/gateway/__snapshots__/BackendTrafficPolicyList.Items.stories.storyshot +++ b/frontend/src/components/gateway/__snapshots__/BackendTrafficPolicyList.Items.stories.storyshot @@ -19,19 +19,7 @@
    - -
    + />
    -
    -
    + />
    diff --git a/frontend/src/components/gateway/__snapshots__/ClassList.Items.stories.storyshot b/frontend/src/components/gateway/__snapshots__/ClassList.Items.stories.storyshot index 59b8fe74562..ce447007b2a 100644 --- a/frontend/src/components/gateway/__snapshots__/ClassList.Items.stories.storyshot +++ b/frontend/src/components/gateway/__snapshots__/ClassList.Items.stories.storyshot @@ -19,19 +19,7 @@
    - -
    + /> diff --git a/frontend/src/components/gateway/__snapshots__/GRPCRouteDetails.Basic.stories.storyshot b/frontend/src/components/gateway/__snapshots__/GRPCRouteDetails.Basic.stories.storyshot index cd86d2c7002..1f3ca3ef2a6 100644 --- a/frontend/src/components/gateway/__snapshots__/GRPCRouteDetails.Basic.stories.storyshot +++ b/frontend/src/components/gateway/__snapshots__/GRPCRouteDetails.Basic.stories.storyshot @@ -82,8 +82,8 @@ class="MuiGrid-root MuiGrid-item css-13i4rnv-MuiGrid-root" > -
    -
    + /> diff --git a/frontend/src/components/gateway/__snapshots__/GRPCRouteList.Items.stories.storyshot b/frontend/src/components/gateway/__snapshots__/GRPCRouteList.Items.stories.storyshot index 61d9670e20e..9a4bc6c03b1 100644 --- a/frontend/src/components/gateway/__snapshots__/GRPCRouteList.Items.stories.storyshot +++ b/frontend/src/components/gateway/__snapshots__/GRPCRouteList.Items.stories.storyshot @@ -19,19 +19,7 @@
    - -
    + />
    -
    -
    + />
    diff --git a/frontend/src/components/gateway/__snapshots__/GatewayList.Items.stories.storyshot b/frontend/src/components/gateway/__snapshots__/GatewayList.Items.stories.storyshot index 867dfc7ef8e..2b02b6e4056 100644 --- a/frontend/src/components/gateway/__snapshots__/GatewayList.Items.stories.storyshot +++ b/frontend/src/components/gateway/__snapshots__/GatewayList.Items.stories.storyshot @@ -19,19 +19,7 @@
    - -
    + />
    -
    -
    + />
    diff --git a/frontend/src/components/gateway/__snapshots__/HTTPRouteDetails.Empty.stories.storyshot b/frontend/src/components/gateway/__snapshots__/HTTPRouteDetails.Empty.stories.storyshot index 7d77ca6f009..99c3731beea 100644 --- a/frontend/src/components/gateway/__snapshots__/HTTPRouteDetails.Empty.stories.storyshot +++ b/frontend/src/components/gateway/__snapshots__/HTTPRouteDetails.Empty.stories.storyshot @@ -82,8 +82,8 @@ class="MuiGrid-root MuiGrid-item css-13i4rnv-MuiGrid-root" > -
    -
    + /> diff --git a/frontend/src/components/gateway/__snapshots__/HTTPRouteList.Items.stories.storyshot b/frontend/src/components/gateway/__snapshots__/HTTPRouteList.Items.stories.storyshot index f49f431b6f7..faeb29edba6 100644 --- a/frontend/src/components/gateway/__snapshots__/HTTPRouteList.Items.stories.storyshot +++ b/frontend/src/components/gateway/__snapshots__/HTTPRouteList.Items.stories.storyshot @@ -19,19 +19,7 @@
    - -
    + />
    -
    -
    + />
    diff --git a/frontend/src/components/gateway/__snapshots__/ReferenceGrantList.Items.stories.storyshot b/frontend/src/components/gateway/__snapshots__/ReferenceGrantList.Items.stories.storyshot index 21107ad6fba..54efe3683cc 100644 --- a/frontend/src/components/gateway/__snapshots__/ReferenceGrantList.Items.stories.storyshot +++ b/frontend/src/components/gateway/__snapshots__/ReferenceGrantList.Items.stories.storyshot @@ -19,19 +19,7 @@
    - -
    + />
    -
    -
    + />
    diff --git a/frontend/src/components/horizontalPodAutoscaler/__snapshots__/HPAList.Items.stories.storyshot b/frontend/src/components/horizontalPodAutoscaler/__snapshots__/HPAList.Items.stories.storyshot index 16544863199..6e32f4d6a49 100644 --- a/frontend/src/components/horizontalPodAutoscaler/__snapshots__/HPAList.Items.stories.storyshot +++ b/frontend/src/components/horizontalPodAutoscaler/__snapshots__/HPAList.Items.stories.storyshot @@ -19,19 +19,7 @@
    - -
    + />
    -
    -
    + />
    diff --git a/frontend/src/components/ingress/__snapshots__/ClassDetails.WithDefault.stories.storyshot b/frontend/src/components/ingress/__snapshots__/ClassDetails.WithDefault.stories.storyshot index 7cb74261290..2bee3e0cc7d 100644 --- a/frontend/src/components/ingress/__snapshots__/ClassDetails.WithDefault.stories.storyshot +++ b/frontend/src/components/ingress/__snapshots__/ClassDetails.WithDefault.stories.storyshot @@ -82,8 +82,8 @@ class="MuiGrid-root MuiGrid-item css-13i4rnv-MuiGrid-root" > -
    -
    + /> diff --git a/frontend/src/components/ingress/__snapshots__/ClassList.Items.stories.storyshot b/frontend/src/components/ingress/__snapshots__/ClassList.Items.stories.storyshot index b724d39923c..adbc0fd1b47 100644 --- a/frontend/src/components/ingress/__snapshots__/ClassList.Items.stories.storyshot +++ b/frontend/src/components/ingress/__snapshots__/ClassList.Items.stories.storyshot @@ -19,19 +19,7 @@
    - -
    + /> diff --git a/frontend/src/components/ingress/__snapshots__/Details.WithResource.stories.storyshot b/frontend/src/components/ingress/__snapshots__/Details.WithResource.stories.storyshot index c776b2dde68..95ccb3201f3 100644 --- a/frontend/src/components/ingress/__snapshots__/Details.WithResource.stories.storyshot +++ b/frontend/src/components/ingress/__snapshots__/Details.WithResource.stories.storyshot @@ -82,8 +82,8 @@ class="MuiGrid-root MuiGrid-item css-13i4rnv-MuiGrid-root" > -
    -
    + /> diff --git a/frontend/src/components/ingress/__snapshots__/Details.WithTLS.stories.storyshot b/frontend/src/components/ingress/__snapshots__/Details.WithTLS.stories.storyshot index 218b0392381..70c2a172fa9 100644 --- a/frontend/src/components/ingress/__snapshots__/Details.WithTLS.stories.storyshot +++ b/frontend/src/components/ingress/__snapshots__/Details.WithTLS.stories.storyshot @@ -82,8 +82,8 @@ class="MuiGrid-root MuiGrid-item css-13i4rnv-MuiGrid-root" > -
    -
    + /> diff --git a/frontend/src/components/ingress/__snapshots__/Details.WithWildcardTLS.stories.storyshot b/frontend/src/components/ingress/__snapshots__/Details.WithWildcardTLS.stories.storyshot index b34884e8616..04bbbba01f4 100644 --- a/frontend/src/components/ingress/__snapshots__/Details.WithWildcardTLS.stories.storyshot +++ b/frontend/src/components/ingress/__snapshots__/Details.WithWildcardTLS.stories.storyshot @@ -82,8 +82,8 @@ class="MuiGrid-root MuiGrid-item css-13i4rnv-MuiGrid-root" > -
    -
    + /> diff --git a/frontend/src/components/ingress/__snapshots__/List.Items.stories.storyshot b/frontend/src/components/ingress/__snapshots__/List.Items.stories.storyshot index f27cd35c2c7..92478ca60ce 100644 --- a/frontend/src/components/ingress/__snapshots__/List.Items.stories.storyshot +++ b/frontend/src/components/ingress/__snapshots__/List.Items.stories.storyshot @@ -19,19 +19,7 @@
    - -
    + />
    - -
    + />
    - -
    + />
    -
    -
    + />
    diff --git a/frontend/src/components/lease/__snapshots__/List.Items.stories.storyshot b/frontend/src/components/lease/__snapshots__/List.Items.stories.storyshot index 34bac1a94c7..b741cf4a80f 100644 --- a/frontend/src/components/lease/__snapshots__/List.Items.stories.storyshot +++ b/frontend/src/components/lease/__snapshots__/List.Items.stories.storyshot @@ -19,19 +19,7 @@
    - -
    + />
    -
    -
    + />
    diff --git a/frontend/src/components/limitRange/__snapshots__/List.Items.stories.storyshot b/frontend/src/components/limitRange/__snapshots__/List.Items.stories.storyshot index 5f94da00eb8..2e50a474a79 100644 --- a/frontend/src/components/limitRange/__snapshots__/List.Items.stories.storyshot +++ b/frontend/src/components/limitRange/__snapshots__/List.Items.stories.storyshot @@ -19,19 +19,7 @@
    - -
    + />
    -
    -
    + />
    @@ -207,19 +194,7 @@
    - -
    + /> @@ -276,19 +251,7 @@
    - -
    + /> diff --git a/frontend/src/components/namespace/__snapshots__/NamespaceList.Regular.stories.storyshot b/frontend/src/components/namespace/__snapshots__/NamespaceList.Regular.stories.storyshot index a9a063c51d6..0e8b01820ca 100644 --- a/frontend/src/components/namespace/__snapshots__/NamespaceList.Regular.stories.storyshot +++ b/frontend/src/components/namespace/__snapshots__/NamespaceList.Regular.stories.storyshot @@ -19,19 +19,7 @@
    - -
    + /> diff --git a/frontend/src/components/networkpolicy/__snapshots__/Details.Default.stories.storyshot b/frontend/src/components/networkpolicy/__snapshots__/Details.Default.stories.storyshot index c6aa3049ce3..bb22b4d899d 100644 --- a/frontend/src/components/networkpolicy/__snapshots__/Details.Default.stories.storyshot +++ b/frontend/src/components/networkpolicy/__snapshots__/Details.Default.stories.storyshot @@ -82,8 +82,8 @@ class="MuiGrid-root MuiGrid-item css-13i4rnv-MuiGrid-root" > -
    -
    + /> diff --git a/frontend/src/components/networkpolicy/__snapshots__/List.Items.stories.storyshot b/frontend/src/components/networkpolicy/__snapshots__/List.Items.stories.storyshot index a8245e98813..910906ef6b2 100644 --- a/frontend/src/components/networkpolicy/__snapshots__/List.Items.stories.storyshot +++ b/frontend/src/components/networkpolicy/__snapshots__/List.Items.stories.storyshot @@ -19,19 +19,7 @@
    - -
    + />
    - -
    + />
    diff --git a/frontend/src/components/pod/__snapshots__/PodDebugTerminal.Default.stories.storyshot b/frontend/src/components/pod/__snapshots__/PodDebugTerminal.Default.stories.storyshot index 385df079375..0eaa418cb9c 100644 --- a/frontend/src/components/pod/__snapshots__/PodDebugTerminal.Default.stories.storyshot +++ b/frontend/src/components/pod/__snapshots__/PodDebugTerminal.Default.stories.storyshot @@ -18,7 +18,239 @@
    + > +
    +
    +
    +
    +
    +
    +