@rancher/shell 3.0.8-rc.1 → 3.0.8-rc.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/brand/suse/banner.svg +1 -0
- package/assets/brand/suse/dark/banner.svg +1 -0
- package/assets/brand/suse/dark/login-landscape.svg +1 -0
- package/assets/brand/suse/dark/rancher-logo.svg +1 -1
- package/assets/brand/suse/favicon.png +0 -0
- package/assets/brand/suse/login-landscape.svg +1 -0
- package/assets/brand/suse/metadata.json +11 -1
- package/assets/brand/suse/rancher-logo.svg +1 -1
- package/assets/fonts/suse/suse-v2-latin-300.woff +0 -0
- package/assets/fonts/suse/suse-v2-latin-300.woff2 +0 -0
- package/assets/fonts/suse/suse-v2-latin-600.woff +0 -0
- package/assets/fonts/suse/suse-v2-latin-600.woff2 +0 -0
- package/assets/fonts/suse/suse-v2-latin-700.woff +0 -0
- package/assets/fonts/suse/suse-v2-latin-700.woff2 +0 -0
- package/assets/fonts/suse/suse-v2-latin-800.woff +0 -0
- package/assets/fonts/suse/suse-v2-latin-800.woff2 +0 -0
- package/assets/fonts/suse/suse-v2-latin-regular.woff +0 -0
- package/assets/fonts/suse/suse-v2-latin-regular.woff2 +0 -0
- package/assets/images/content/README.md +5 -0
- package/assets/images/content/cloud-native.svg +84 -0
- package/assets/images/content/dark/cloud-native.svg +21 -0
- package/assets/images/content/dark/shield.svg +59 -0
- package/assets/images/content/dark/suse.svg +10 -0
- package/assets/images/content/shield.svg +59 -0
- package/assets/images/content/suse.svg +10 -0
- package/assets/styles/base/_typography.scss +1 -0
- package/assets/styles/fonts/_fontstack.scss +53 -1
- package/assets/styles/global/_cards.scss +0 -3
- package/assets/styles/global/_layout.scss +21 -35
- package/assets/styles/themes/_dark.scss +1 -1
- package/assets/styles/themes/_light.scss +1 -1
- package/assets/styles/themes/_modern.scss +11 -3
- package/assets/styles/themes/_suse.scss +116 -24
- package/assets/translations/en-us.yaml +94 -10
- package/components/AutoscalerCard.vue +113 -0
- package/components/AutoscalerTab.vue +94 -0
- package/components/BackLink.vue +8 -0
- package/components/BannerGraphic.vue +36 -21
- package/components/BrandImage.vue +17 -6
- package/components/ClusterIconMenu.vue +1 -1
- package/components/ClusterProviderIcon.vue +1 -1
- package/components/Cron/CronExpressionEditor.vue +1 -1
- package/components/Cron/CronExpressionEditorModal.vue +1 -1
- package/components/Drawer/Chrome.vue +2 -6
- package/components/Drawer/ResourceDetailDrawer/ConfigTab.vue +4 -9
- package/components/Drawer/ResourceDetailDrawer/YamlTab.vue +3 -8
- package/components/Drawer/ResourceDetailDrawer/composables.ts +3 -4
- package/components/Drawer/ResourceDetailDrawer/index.vue +4 -9
- package/components/Drawer/ResourceDetailDrawer/types.ts +17 -0
- package/components/Drawer/types.ts +3 -0
- package/components/DynamicContent/DynamicContentBanner.vue +102 -0
- package/components/DynamicContent/DynamicContentCloseButton.vue +42 -0
- package/components/DynamicContent/DynamicContentIcon.vue +132 -0
- package/components/DynamicContent/DynamicContentPanel.vue +112 -0
- package/components/DynamicContent/content.ts +78 -0
- package/components/EmberPage.vue +1 -1
- package/components/IconOrSvg.vue +2 -2
- package/components/PaginatedResourceTable.vue +2 -6
- package/components/PopoverCard.vue +192 -0
- package/components/Questions/__tests__/index.test.ts +159 -0
- package/components/Resource/Detail/CopyToClipboard.vue +4 -1
- package/components/Resource/Detail/FetchLoader/composables.ts +18 -4
- package/components/Resource/Detail/Metadata/Annotations/index.vue +2 -2
- package/components/Resource/Detail/Metadata/IdentifyingInformation/__tests__/identifying-fields.test.ts +1 -1
- package/components/Resource/Detail/Metadata/IdentifyingInformation/identifying-fields.ts +4 -0
- package/components/Resource/Detail/Metadata/KeyValueRow.vue +1 -1
- package/components/Resource/Detail/Metadata/Labels/index.vue +2 -2
- package/components/Resource/Detail/Metadata/composables.ts +9 -9
- package/components/Resource/Detail/Metadata/index.vue +3 -3
- package/components/Resource/Detail/ResourcePopover/ResourcePopoverCard.vue +2 -19
- package/components/Resource/Detail/ResourcePopover/__tests__/ResourcePopoverCard.test.ts +0 -29
- package/components/Resource/Detail/ResourcePopover/__tests__/index.test.ts +132 -150
- package/components/Resource/Detail/ResourcePopover/index.vue +54 -159
- package/components/Resource/Detail/TitleBar/__tests__/index.test.ts +0 -2
- package/components/Resource/Detail/TitleBar/composables.ts +2 -1
- package/components/Resource/Detail/TitleBar/index.vue +10 -6
- package/components/Resource/Detail/composables.ts +12 -0
- package/components/ResourceDetail/Masthead/latest.vue +29 -0
- package/components/ResourceDetail/index.vue +4 -1
- package/components/ResourceList/Masthead.vue +1 -1
- package/components/ResourceTable.vue +1 -1
- package/components/SortableTable/index.vue +2 -1
- package/components/Tabbed/__tests__/index.test.ts +86 -0
- package/components/{nav/WindowManager → Window}/ContainerLogs.vue +1 -1
- package/components/{nav/WindowManager → Window}/ContainerLogsActions.vue +1 -0
- package/components/{nav/WindowManager → Window}/__tests__/ContainerLogs.test.ts +1 -1
- package/components/{nav/WindowManager → Window}/__tests__/ContainerShell.test.ts +2 -2
- package/components/__tests__/AutoscalerCard.test.ts +154 -0
- package/components/__tests__/AutoscalerTab.test.ts +125 -0
- package/components/__tests__/PopoverCard.test.ts +204 -0
- package/components/auth/SelectPrincipal.vue +24 -6
- package/components/auth/__tests__/SelectPrincipal.test.ts +119 -0
- package/components/auth/login/ldap.vue +3 -3
- package/components/form/NodeScheduling.vue +2 -2
- package/components/formatter/Autoscaler.vue +97 -0
- package/components/formatter/InternalExternalIP.vue +198 -24
- package/components/formatter/__tests__/Autoscaler.test.ts +156 -0
- package/components/formatter/__tests__/InternalExternalIP.test.ts +133 -0
- package/components/google/util/__tests__/formatter.test.ts +47 -0
- package/components/google/util/formatter.ts +5 -2
- package/components/nav/Group.vue +21 -5
- package/components/nav/Header.vue +37 -17
- package/components/nav/NamespaceFilter.vue +13 -1
- package/components/nav/NotificationCenter/index.vue +2 -1
- package/components/nav/TopLevelMenu.helper.ts +16 -6
- package/components/nav/TopLevelMenu.vue +4 -2
- package/components/nav/Type.vue +8 -3
- package/components/{DraggableZone.vue → nav/WindowManager/PinArea.vue} +47 -80
- package/components/nav/WindowManager/composables/useComponentsMount.ts +70 -0
- package/components/nav/WindowManager/composables/useDimensionsHandler.ts +105 -0
- package/components/nav/WindowManager/composables/useDragHandler.ts +99 -0
- package/components/nav/WindowManager/composables/usePanelHandler.ts +72 -0
- package/components/nav/WindowManager/composables/usePanelsHandler.ts +14 -0
- package/components/nav/WindowManager/composables/useResizeHandler.ts +167 -0
- package/components/nav/WindowManager/composables/useTabsHandler.ts +51 -0
- package/components/nav/WindowManager/constants.ts +23 -0
- package/components/nav/WindowManager/index.vue +61 -575
- package/components/nav/WindowManager/panels/HorizontalPanel.vue +265 -0
- package/components/nav/WindowManager/panels/TabBodyContainer.vue +39 -0
- package/components/nav/WindowManager/panels/VerticalPanel.vue +308 -0
- package/components/nav/__tests__/Type.test.ts +59 -0
- package/components/templates/default.vue +4 -40
- package/components/templates/home.vue +31 -5
- package/components/templates/plain.vue +30 -4
- package/components/templates/standalone.vue +1 -1
- package/composables/useI18n.ts +10 -1
- package/composables/useInterval.ts +15 -0
- package/config/__test__/uiplugins.test.ts +309 -0
- package/config/labels-annotations.js +9 -1
- package/config/product/explorer.js +3 -1
- package/config/product/manager.js +20 -9
- package/config/router/navigation-guards/clusters.js +3 -3
- package/config/router/navigation-guards/products.js +1 -1
- package/config/router/routes.js +10 -2
- package/config/settings.ts +2 -1
- package/config/store.js +4 -2
- package/config/table-headers.js +8 -0
- package/config/types.js +9 -0
- package/config/uiplugins.js +46 -2
- package/config/version.js +1 -1
- package/core/__test__/extension-manager-impl.test.js +236 -0
- package/core/extension-manager-impl.js +21 -4
- package/core/plugin-helpers.ts +4 -2
- package/core/plugins-loader.js +2 -2
- package/core/types-provisioning.ts +8 -1
- package/detail/pod.vue +1 -0
- package/detail/provisioning.cattle.io.cluster.vue +19 -7
- package/dialog/DeveloperLoadExtensionDialog.vue +13 -4
- package/dialog/RollbackWorkloadDialog.vue +2 -5
- package/dialog/SearchDialog.vue +1 -0
- package/directives/ui-context.ts +103 -0
- package/edit/__tests__/fleet.cattle.io.helmop.test.ts +2 -2
- package/edit/auth/__tests__/oidc.test.ts +26 -0
- package/edit/auth/github.vue +5 -0
- package/edit/auth/oidc.vue +5 -1
- package/edit/autoscaling.horizontalpodautoscaler/index.vue +1 -0
- package/edit/cloudcredential.vue +1 -1
- package/edit/configmap.vue +1 -0
- package/edit/constraints.gatekeeper.sh.constraint/index.vue +1 -0
- package/edit/fleet.cattle.io.gitrepo.vue +0 -10
- package/edit/fleet.cattle.io.helmop.vue +6 -6
- package/edit/helm.cattle.io.projecthelmchart.vue +1 -0
- package/edit/k8s.cni.cncf.io.networkattachmentdefinition.vue +1 -0
- package/edit/logging-flow/index.vue +1 -0
- package/edit/logging.banzaicloud.io.output/index.vue +1 -0
- package/edit/management.cattle.io.fleetworkspace.vue +1 -1
- package/edit/management.cattle.io.project.vue +1 -0
- package/edit/monitoring.coreos.com.alertmanagerconfig/index.vue +4 -1
- package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +2 -1
- package/edit/monitoring.coreos.com.prometheusrule/index.vue +1 -0
- package/edit/monitoring.coreos.com.receiver/index.vue +2 -1
- package/edit/monitoring.coreos.com.route.vue +1 -1
- package/edit/namespace.vue +1 -0
- package/edit/networking.istio.io.destinationrule/index.vue +1 -0
- package/edit/networking.k8s.io.ingress/index.vue +1 -0
- package/edit/networking.k8s.io.networkpolicy/PolicyRules.vue +1 -0
- package/edit/networking.k8s.io.networkpolicy/index.vue +1 -0
- package/edit/node.vue +1 -0
- package/edit/persistentvolume/index.vue +27 -22
- package/edit/persistentvolume/plugins/awsElasticBlockStore.vue +13 -14
- package/edit/persistentvolume/plugins/azureDisk.vue +49 -48
- package/edit/persistentvolume/plugins/azureFile.vue +15 -14
- package/edit/persistentvolume/plugins/cephfs.vue +15 -14
- package/edit/persistentvolume/plugins/cinder.vue +15 -14
- package/edit/persistentvolume/plugins/csi.vue +18 -16
- package/edit/persistentvolume/plugins/fc.vue +13 -14
- package/edit/persistentvolume/plugins/flexVolume.vue +15 -14
- package/edit/persistentvolume/plugins/flocker.vue +1 -3
- package/edit/persistentvolume/plugins/gcePersistentDisk.vue +13 -14
- package/edit/persistentvolume/plugins/glusterfs.vue +15 -14
- package/edit/persistentvolume/plugins/hostPath.vue +40 -39
- package/edit/persistentvolume/plugins/iscsi.vue +13 -14
- package/edit/persistentvolume/plugins/local.vue +1 -3
- package/edit/persistentvolume/plugins/longhorn.vue +23 -22
- package/edit/persistentvolume/plugins/nfs.vue +15 -14
- package/edit/persistentvolume/plugins/photonPersistentDisk.vue +1 -14
- package/edit/persistentvolume/plugins/portworxVolume.vue +15 -14
- package/edit/persistentvolume/plugins/quobyte.vue +15 -14
- package/edit/persistentvolume/plugins/rbd.vue +15 -14
- package/edit/persistentvolume/plugins/scaleIO.vue +15 -14
- package/edit/persistentvolume/plugins/storageos.vue +15 -14
- package/edit/persistentvolume/plugins/vsphereVolume.vue +1 -3
- package/edit/provisioning.cattle.io.cluster/CustomCommand.vue +32 -5
- package/edit/provisioning.cattle.io.cluster/__tests__/CustomCommand.test.ts +35 -0
- package/edit/provisioning.cattle.io.cluster/__tests__/Networking.test.ts +155 -0
- package/edit/provisioning.cattle.io.cluster/__tests__/rke2.test.ts +21 -21
- package/edit/provisioning.cattle.io.cluster/index.vue +28 -18
- package/edit/provisioning.cattle.io.cluster/rke2.vue +50 -16
- package/edit/provisioning.cattle.io.cluster/tabs/MachinePool.vue +107 -5
- package/edit/provisioning.cattle.io.cluster/tabs/networking/index.vue +92 -4
- package/edit/secret/index.vue +1 -1
- package/edit/service.vue +9 -4
- package/edit/serviceaccount.vue +1 -0
- package/edit/storage.k8s.io.storageclass/index.vue +1 -0
- package/edit/workload/index.vue +2 -1
- package/edit/workload/mixins/workload.js +1 -1
- package/initialize/App.vue +4 -4
- package/initialize/install-directives.js +2 -0
- package/initialize/install-plugins.js +19 -2
- package/list/provisioning.cattle.io.cluster.vue +15 -2
- package/machine-config/amazonec2.vue +42 -135
- package/machine-config/components/EC2Networking.vue +490 -0
- package/machine-config/components/__tests__/EC2Networking.test.ts +148 -0
- package/machine-config/components/__tests__/utils/vpcSubnetMockData.js +294 -0
- package/machine-config/digitalocean.vue +11 -0
- package/machine-config/google.vue +1 -1
- package/mixins/__tests__/brand.spec.ts +2 -2
- package/mixins/__tests__/chart.test.ts +21 -0
- package/mixins/brand.js +1 -7
- package/mixins/chart.js +7 -1
- package/mixins/create-edit-view/index.js +5 -0
- package/models/__tests__/chart.test.ts +33 -4
- package/models/__tests__/provisioning.cattle.io.cluster.test.ts +112 -5
- package/models/chart.js +25 -13
- package/models/cluster/node.js +13 -6
- package/models/cluster.x-k8s.io.machine.js +10 -20
- package/models/cluster.x-k8s.io.machinedeployment.js +5 -1
- package/models/management.cattle.io.cluster.js +21 -3
- package/models/management.cattle.io.kontainerdriver.js +1 -0
- package/models/provisioning.cattle.io.cluster.js +249 -33
- package/package.json +8 -7
- package/pages/auth/login.vue +41 -5
- package/pages/auth/setup.vue +1 -1
- package/pages/auth/verify.vue +3 -3
- package/pages/c/_cluster/apps/charts/__tests__/chart.test.ts +135 -0
- package/pages/c/_cluster/apps/charts/chart.vue +33 -15
- package/pages/c/_cluster/apps/charts/index.vue +11 -13
- package/pages/c/_cluster/apps/charts/install.vue +1 -1
- package/pages/c/_cluster/explorer/index.vue +8 -6
- package/pages/c/_cluster/manager/hostedprovider/index.vue +220 -0
- package/pages/c/_cluster/settings/brand.vue +1 -1
- package/pages/c/_cluster/uiplugins/__tests__/index.test.ts +7 -0
- package/pages/c/_cluster/uiplugins/catalogs.vue +147 -0
- package/pages/c/_cluster/uiplugins/index.vue +126 -184
- package/pages/home.vue +14 -4
- package/pkg/auto-import.js +3 -3
- package/pkg/dynamic-importer.lib.js +5 -1
- package/pkg/import.js +1 -1
- package/plugins/dashboard-client-init.js +3 -0
- package/plugins/dashboard-store/getters.js +19 -2
- package/plugins/dashboard-store/model-loader.js +1 -1
- package/plugins/dashboard-store/resource-class.js +10 -6
- package/plugins/dynamic-content.js +13 -0
- package/plugins/i18n.js +8 -0
- package/plugins/plugin.js +2 -2
- package/plugins/steve/__tests__/steve-pagination-utils.test.ts +333 -0
- package/plugins/steve/steve-class.js +1 -1
- package/plugins/steve/steve-pagination-utils.ts +39 -20
- package/plugins/steve/subscribe.js +17 -9
- package/plugins/subscribe-events.ts +4 -2
- package/rancher-components/Form/Checkbox/Checkbox.vue +1 -1
- package/rancher-components/Pill/RcStatusBadge/RcStatusBadge.vue +6 -34
- package/rancher-components/Pill/RcStatusBadge/index.ts +0 -1
- package/rancher-components/Pill/RcStatusBadge/types.ts +1 -1
- package/rancher-components/Pill/RcStatusIndicator/RcStatusIndicator.vue +5 -28
- package/rancher-components/Pill/RcStatusIndicator/types.ts +2 -1
- package/rancher-components/Pill/types.ts +0 -1
- package/rancher-components/RcDropdown/RcDropdownItem.vue +1 -0
- package/rancher-components/RcDropdown/RcDropdownItemSelect.vue +5 -1
- package/rancher-components/RcIcon/RcIcon.test.ts +51 -0
- package/rancher-components/RcIcon/RcIcon.vue +46 -0
- package/rancher-components/RcIcon/index.ts +1 -0
- package/rancher-components/RcIcon/types.ts +160 -0
- package/rancher-components/utils/status.test.ts +67 -0
- package/rancher-components/utils/status.ts +77 -0
- package/scripts/typegen.sh +1 -0
- package/store/__tests__/catalog.test.ts +1 -1
- package/store/action-menu.js +8 -0
- package/store/auth.js +4 -4
- package/store/catalog.js +6 -0
- package/store/features.js +1 -0
- package/store/i18n.js +3 -3
- package/store/index.js +40 -19
- package/store/notifications.ts +51 -4
- package/store/plugins.js +7 -3
- package/store/prefs.js +6 -6
- package/store/type-map.js +7 -7
- package/store/ui-context.ts +86 -0
- package/store/wm.ts +244 -0
- package/types/notifications/index.ts +27 -3
- package/types/shell/index.d.ts +80 -4
- package/types/store/__tests__/pagination.types.spec.ts +137 -0
- package/types/store/pagination.types.ts +157 -9
- package/types/store/subscribe-events.types.ts +8 -1
- package/types/store/subscribe.types.ts +1 -0
- package/types/window-manager.ts +24 -0
- package/utils/__tests__/object.test.ts +19 -0
- package/utils/__tests__/provider.test.ts +98 -0
- package/utils/__tests__/selector-typed.test.ts +263 -0
- package/utils/__tests__/version.test.ts +19 -1
- package/utils/autoscaler-utils.ts +7 -0
- package/utils/back-off.ts +3 -3
- package/utils/brand.ts +29 -0
- package/utils/chart.js +18 -0
- package/utils/color.js +1 -1
- package/utils/dynamic-content/__tests__/announcement.test.ts +498 -0
- package/utils/dynamic-content/__tests__/info.test.ts +21 -9
- package/utils/dynamic-content/announcement.ts +142 -0
- package/utils/dynamic-content/example.json +40 -0
- package/utils/dynamic-content/index.ts +6 -2
- package/utils/dynamic-content/info.ts +44 -2
- package/utils/dynamic-content/new-release.ts +1 -1
- package/utils/dynamic-content/notification-handler.ts +48 -0
- package/utils/dynamic-content/types.d.ts +53 -1
- package/utils/dynamic-importer.js +2 -2
- package/utils/favicon.js +4 -4
- package/utils/object.js +20 -2
- package/utils/pagination-utils.ts +2 -2
- package/utils/pagination-wrapper.ts +13 -9
- package/utils/provider.ts +14 -0
- package/utils/scroll.js +7 -0
- package/utils/selector-typed.ts +6 -2
- package/utils/settings.ts +15 -0
- package/utils/unit-tests/pagination-utils.spec.ts +8 -8
- package/utils/validators/machine-pool.ts +13 -3
- package/utils/version.js +15 -0
- package/vue.config.js +3 -3
- package/assets/images/icons/document.svg +0 -3
- package/plugins/nuxt-client-init.js +0 -3
- package/store/wm.js +0 -95
- /package/components/{nav/WindowManager → Window}/ChartReadme.vue +0 -0
- /package/components/{nav/WindowManager → Window}/ContainerShell.vue +0 -0
- /package/components/{nav/WindowManager → Window}/KubectlShell.vue +0 -0
- /package/components/{nav/WindowManager → Window}/MachineSsh.vue +0 -0
- /package/components/{nav/WindowManager → Window}/Window.vue +0 -0
|
@@ -61,9 +61,13 @@ export interface ClusterProvisionerContext {
|
|
|
61
61
|
*/
|
|
62
62
|
axios: any,
|
|
63
63
|
/**
|
|
64
|
-
* Definition of the extension
|
|
64
|
+
* [Deprecated] Definition of the extension
|
|
65
65
|
*/
|
|
66
66
|
$plugin: any,
|
|
67
|
+
/**
|
|
68
|
+
* Definition of the extension
|
|
69
|
+
*/
|
|
70
|
+
$extension: any,
|
|
67
71
|
/**
|
|
68
72
|
* Function to retrieve a localised string
|
|
69
73
|
*/
|
|
@@ -158,6 +162,9 @@ export interface IClusterProvisioner {
|
|
|
158
162
|
*/
|
|
159
163
|
hideCreate?: boolean
|
|
160
164
|
|
|
165
|
+
/** Is extension Prime-only */
|
|
166
|
+
prime?: boolean
|
|
167
|
+
|
|
161
168
|
/**
|
|
162
169
|
* Also show the provider card in the cluster importing flow
|
|
163
170
|
* If not set, the card will only be shown in the cluster creation page
|
package/detail/pod.vue
CHANGED
|
@@ -97,6 +97,7 @@ export default {
|
|
|
97
97
|
|
|
98
98
|
return {
|
|
99
99
|
...container,
|
|
100
|
+
kind: 'Container',
|
|
100
101
|
status: status || {},
|
|
101
102
|
stateDisplay: status ? this.value.containerStateDisplay(status) : undefined,
|
|
102
103
|
stateBackground: status ? this.value.containerStateColor(status).replace('text', 'bg') : undefined,
|
|
@@ -33,6 +33,8 @@ import { isAlternate } from '@shell/utils/platform';
|
|
|
33
33
|
import DetailPage from '@shell/components/Resource/Detail/Page.vue';
|
|
34
34
|
import Masthead from '@shell/components/Resource/Detail/Masthead/index.vue';
|
|
35
35
|
import { useDefaultMastheadProps } from '@shell/components/Resource/Detail/Masthead/composable';
|
|
36
|
+
import AutoscalerTab from '@shell/components/AutoscalerTab.vue';
|
|
37
|
+
import { isAutoscalerFeatureFlagEnabled } from '@shell/utils/autoscaler-utils';
|
|
36
38
|
|
|
37
39
|
let lastId = 1;
|
|
38
40
|
const ansiup = new AnsiUp();
|
|
@@ -62,6 +64,7 @@ export default {
|
|
|
62
64
|
emits: ['input'],
|
|
63
65
|
|
|
64
66
|
components: {
|
|
67
|
+
AutoscalerTab,
|
|
65
68
|
Banner,
|
|
66
69
|
ResourceTable,
|
|
67
70
|
ResourceTabs,
|
|
@@ -93,15 +96,15 @@ export default {
|
|
|
93
96
|
await this.value.waitForProvisioner();
|
|
94
97
|
|
|
95
98
|
// Support for the 'provisioner' extension
|
|
96
|
-
const extClass = this.$
|
|
99
|
+
const extClass = this.$extension.getDynamic('provisioner', this.value.machineProvider);
|
|
97
100
|
|
|
98
101
|
if (extClass) {
|
|
99
102
|
this.extProvider = new extClass({
|
|
100
|
-
dispatch:
|
|
101
|
-
getters:
|
|
102
|
-
axios:
|
|
103
|
-
$
|
|
104
|
-
$t:
|
|
103
|
+
dispatch: this.$store.dispatch,
|
|
104
|
+
getters: this.$store.getters,
|
|
105
|
+
axios: this.$store.$axios,
|
|
106
|
+
$extension: this.$store.app.$extension,
|
|
107
|
+
$t: this.t
|
|
105
108
|
});
|
|
106
109
|
|
|
107
110
|
this.extDetailTabs = {
|
|
@@ -575,6 +578,7 @@ export default {
|
|
|
575
578
|
// Hosted kubernetes providers with private endpoints need the registration tab
|
|
576
579
|
// https://github.com/rancher/dashboard/issues/6036
|
|
577
580
|
// https://github.com/rancher/dashboard/issues/4545
|
|
581
|
+
|
|
578
582
|
if ( this.value.isHostedKubernetesProvider && this.value.isPrivateHostedProvider && !this.isClusterReady ) {
|
|
579
583
|
return this.extDetailTabs.registration;
|
|
580
584
|
}
|
|
@@ -620,6 +624,10 @@ export default {
|
|
|
620
624
|
|
|
621
625
|
extDetailTabsConditions() {
|
|
622
626
|
return this.extDetailTabs?.conditions;
|
|
627
|
+
},
|
|
628
|
+
|
|
629
|
+
showAutoScalerTab() {
|
|
630
|
+
return isAutoscalerFeatureFlagEnabled(this.$store) && this.value.hasAccessToAutoscalerConfigMap;
|
|
623
631
|
}
|
|
624
632
|
},
|
|
625
633
|
|
|
@@ -870,7 +878,7 @@ export default {
|
|
|
870
878
|
</div>
|
|
871
879
|
</div>
|
|
872
880
|
<div
|
|
873
|
-
v-if="group.ref"
|
|
881
|
+
v-if="group.ref && !group.ref.isAutoscalerEnabled"
|
|
874
882
|
class="right group-header-buttons mr-20"
|
|
875
883
|
>
|
|
876
884
|
<MachineSummaryGraph
|
|
@@ -1119,6 +1127,10 @@ export default {
|
|
|
1119
1127
|
</template>
|
|
1120
1128
|
</SortableTable>
|
|
1121
1129
|
</Tab>
|
|
1130
|
+
<AutoscalerTab
|
|
1131
|
+
v-if="showAutoScalerTab"
|
|
1132
|
+
:value="value"
|
|
1133
|
+
/>
|
|
1122
1134
|
</ResourceTabs>
|
|
1123
1135
|
</div>
|
|
1124
1136
|
</template>
|
|
@@ -4,6 +4,7 @@ import { LabeledInput } from '@components/Form/LabeledInput';
|
|
|
4
4
|
import Checkbox from '@components/Form/Checkbox/Checkbox.vue';
|
|
5
5
|
import { UI_PLUGIN } from '@shell/config/types';
|
|
6
6
|
import { UI_PLUGIN_CHART_ANNOTATIONS, UI_PLUGIN_NAMESPACE } from '@shell/config/uiplugins';
|
|
7
|
+
import { DEVELOPER_LOAD_NAME_SUFFIX } from '@shell/core/extension-manager-impl';
|
|
7
8
|
|
|
8
9
|
export default {
|
|
9
10
|
emits: ['close'],
|
|
@@ -101,8 +102,16 @@ export default {
|
|
|
101
102
|
const parts = name.split('-');
|
|
102
103
|
|
|
103
104
|
if (parts.length >= 2) {
|
|
104
|
-
version
|
|
105
|
-
|
|
105
|
+
// fixing the name-version separation, especially in RC versions
|
|
106
|
+
// like: elemental-3.0.1-rc.1
|
|
107
|
+
// on capturing version it must be "digit + dot + digit" + rest of string
|
|
108
|
+
const regex = /^(?<name>.+?)-(?<version>\d+\.\d+.*)$/;
|
|
109
|
+
const match = name.match(regex);
|
|
110
|
+
|
|
111
|
+
if (match && match.groups) {
|
|
112
|
+
version = match.groups.version;
|
|
113
|
+
crdName = match.groups.name;
|
|
114
|
+
}
|
|
106
115
|
}
|
|
107
116
|
|
|
108
117
|
if (this.persist) {
|
|
@@ -114,7 +123,7 @@ export default {
|
|
|
114
123
|
},
|
|
115
124
|
spec: {
|
|
116
125
|
plugin: {
|
|
117
|
-
name: crdName
|
|
126
|
+
name: `${ crdName }${ DEVELOPER_LOAD_NAME_SUFFIX }`,
|
|
118
127
|
version,
|
|
119
128
|
endpoint: url,
|
|
120
129
|
noCache: true,
|
|
@@ -136,7 +145,7 @@ export default {
|
|
|
136
145
|
}
|
|
137
146
|
}
|
|
138
147
|
|
|
139
|
-
this.$
|
|
148
|
+
this.$extension.loadAsync(name, url).then(() => {
|
|
140
149
|
this.closeDialog(true);
|
|
141
150
|
|
|
142
151
|
this.$store.dispatch('growl/success', {
|
|
@@ -165,12 +165,9 @@ export default {
|
|
|
165
165
|
return option.label;
|
|
166
166
|
},
|
|
167
167
|
sizeDialog() {
|
|
168
|
-
const
|
|
169
|
-
const width = this.showDiff ? '85%' : '600px';
|
|
168
|
+
const modalWidth = this.showDiff ? '85%' : '600px';
|
|
170
169
|
|
|
171
|
-
|
|
172
|
-
dialogs[0].style.setProperty('width', width);
|
|
173
|
-
}
|
|
170
|
+
this.$store.commit('action-menu/updateModalData', [{ key: 'modalWidth', value: modalWidth }]);
|
|
174
171
|
},
|
|
175
172
|
sanitizeYaml(obj, path = '') {
|
|
176
173
|
const res = {};
|
package/dialog/SearchDialog.vue
CHANGED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { get, isEmpty } from '@shell/utils/object';
|
|
2
|
+
import { generateRandomAlphaString } from '@shell/utils/string';
|
|
3
|
+
|
|
4
|
+
interface Context {
|
|
5
|
+
tag: string;
|
|
6
|
+
path?: string;
|
|
7
|
+
value?: any;
|
|
8
|
+
hookable?: boolean;
|
|
9
|
+
description?: string;
|
|
10
|
+
icon?: string;
|
|
11
|
+
store?: any;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
function isValid(context: Context ): context is Context {
|
|
15
|
+
return (
|
|
16
|
+
context !== null &&
|
|
17
|
+
typeof context === 'object' &&
|
|
18
|
+
(
|
|
19
|
+
(context.path === undefined && context.value === undefined) || // both undefined is allowed
|
|
20
|
+
(typeof context.path === 'string' && context.path?.length > 0 && context.value === undefined) || // path defined, value undefined
|
|
21
|
+
(context.value !== undefined && context.path === undefined) // value defined, path undefined
|
|
22
|
+
) &&
|
|
23
|
+
typeof context.tag === 'string' && context.tag?.length > 0 &&
|
|
24
|
+
(typeof context.description === 'string' || context.description === undefined)
|
|
25
|
+
);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/** UI Context Directive
|
|
29
|
+
*
|
|
30
|
+
* Usage:
|
|
31
|
+
* <div v-ui-context="{ tag: 'example-tag', path: 'some.path.in.component', description: 'An example context' }"></div>
|
|
32
|
+
* or
|
|
33
|
+
* <div v-ui-context="{ tag: 'example-tag', value: 'Direct Value', description: 'An example context with direct value' }"></div>
|
|
34
|
+
* or
|
|
35
|
+
* <div v-ui-context="{ tag: 'example-tag', description: 'An example context with text content' }">Text Content Value</div>
|
|
36
|
+
*
|
|
37
|
+
* The directive will register the context on mount and unregister it before unmounting.
|
|
38
|
+
*
|
|
39
|
+
* The context object must have a 'tag' and either a 'path' or a 'value'.
|
|
40
|
+
* If both 'path' and 'value' are undefined, the element's textContent will be used as the value.
|
|
41
|
+
*
|
|
42
|
+
* !IMPORTANT:
|
|
43
|
+
* The value object will be reactive only when using 'path'.
|
|
44
|
+
* Using 'value' or textContent will not be reactive.
|
|
45
|
+
*
|
|
46
|
+
*/
|
|
47
|
+
export default {
|
|
48
|
+
async mounted(el: any, binding: { value: Context, instance: any }) {
|
|
49
|
+
const context: Context = binding.value;
|
|
50
|
+
|
|
51
|
+
if (!context || isEmpty(context)) {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
if (!isValid(context)) {
|
|
56
|
+
// eslint-disable-next-line no-console
|
|
57
|
+
console.warn(`[ui-context] invalid value: ${ JSON.stringify({ tag: (context as Context).tag, description: (context as Context).description }) }`);
|
|
58
|
+
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
if (context.path === undefined && context.value === undefined) {
|
|
63
|
+
// path and value undefined, use textContent as value
|
|
64
|
+
context.value = el.textContent;
|
|
65
|
+
} else if (context.value === undefined) {
|
|
66
|
+
// Use context.value directly if provided, otherwise resolve it from the component instance using context.path
|
|
67
|
+
const value = get(binding.instance, context.path);
|
|
68
|
+
|
|
69
|
+
if (value === undefined) {
|
|
70
|
+
// eslint-disable-next-line no-console
|
|
71
|
+
console.warn(`[ui-context] path "${ context.path }" is undefined on the component instance`);
|
|
72
|
+
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
context.value = value;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
delete context.path;
|
|
80
|
+
|
|
81
|
+
if (context.hookable) {
|
|
82
|
+
const hookId = generateRandomAlphaString(12);
|
|
83
|
+
|
|
84
|
+
el.setAttribute('ux-context-hook-id', hookId);
|
|
85
|
+
(context as any).hookId = hookId;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
const store = context.store || binding.instance.$store || binding.instance.store;
|
|
89
|
+
|
|
90
|
+
if (store) {
|
|
91
|
+
delete context.store;
|
|
92
|
+
const id = await store.dispatch('ui-context/add', context);
|
|
93
|
+
|
|
94
|
+
el._uiContextRemove = async() => await store.dispatch('ui-context/remove', id);
|
|
95
|
+
}
|
|
96
|
+
},
|
|
97
|
+
|
|
98
|
+
async beforeUnmount(el: any) {
|
|
99
|
+
if (el._uiContextRemove) {
|
|
100
|
+
await el._uiContextRemove();
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
};
|
|
@@ -243,7 +243,7 @@ describe.each([
|
|
|
243
243
|
|
|
244
244
|
await fleetSecretSelector.vm.$emit('update:value', ['secret2', 'secret3']);
|
|
245
245
|
|
|
246
|
-
expect(wrapper.vm.value.spec.
|
|
246
|
+
expect(wrapper.vm.value.spec.downstreamResources).toStrictEqual([{ name: 'secret2', kind: 'Secret' }, { name: 'secret3', kind: 'Secret' }]);
|
|
247
247
|
});
|
|
248
248
|
|
|
249
249
|
it('should update downstreamResources with new ConfigMaps when FleetConfigMapSelector emits update event', async() => {
|
|
@@ -260,6 +260,6 @@ describe.each([
|
|
|
260
260
|
|
|
261
261
|
await fleetConfigMapSelector.vm.$emit('update:value', ['configMap2', 'configMap3']);
|
|
262
262
|
|
|
263
|
-
expect(wrapper.vm.value.spec.
|
|
263
|
+
expect(wrapper.vm.value.spec.downstreamResources).toStrictEqual([{ name: 'configMap2', kind: 'ConfigMap' }, { name: 'configMap3', kind: 'ConfigMap' }]);
|
|
264
264
|
});
|
|
265
265
|
});
|
|
@@ -221,5 +221,31 @@ describe('oidc.vue', () => {
|
|
|
221
221
|
expect(issuer).toBe('');
|
|
222
222
|
expect(endpoint).toBe('');
|
|
223
223
|
});
|
|
224
|
+
|
|
225
|
+
it('custom claims fields should not appear in UI if Amazon cognito', async() => {
|
|
226
|
+
wrapper.vm.model.id = 'cognito';
|
|
227
|
+
|
|
228
|
+
const nameClaim = wrapper.find('[data-testid="input-name-claim"]');
|
|
229
|
+
const groupsClaim = wrapper.find('[data-testid="input-groups-claim"]');
|
|
230
|
+
const emailClaim = wrapper.find('[data-testid="input-email-claim"]');
|
|
231
|
+
|
|
232
|
+
expect(nameClaim.exists()).toBe(false);
|
|
233
|
+
expect(groupsClaim.exists()).toBe(false);
|
|
234
|
+
expect(emailClaim.exists()).toBe(false);
|
|
235
|
+
});
|
|
236
|
+
|
|
237
|
+
it('custom claims fields should appear in UI if genericoidc', async() => {
|
|
238
|
+
wrapper.vm.model.id = 'genericoidc';
|
|
239
|
+
wrapper.vm.addCustomClaims = true;
|
|
240
|
+
await nextTick();
|
|
241
|
+
|
|
242
|
+
const nameClaim = wrapper.find('[data-testid="input-name-claim"]');
|
|
243
|
+
const groupsClaim = wrapper.find('[data-testid="input-groups-claim"]');
|
|
244
|
+
const emailClaim = wrapper.find('[data-testid="input-email-claim"]');
|
|
245
|
+
|
|
246
|
+
expect(nameClaim.exists()).toBe(true);
|
|
247
|
+
expect(groupsClaim.exists()).toBe(true);
|
|
248
|
+
expect(emailClaim.exists()).toBe(true);
|
|
249
|
+
});
|
|
224
250
|
});
|
|
225
251
|
});
|
package/edit/auth/github.vue
CHANGED
|
@@ -97,6 +97,11 @@ export default {
|
|
|
97
97
|
},
|
|
98
98
|
|
|
99
99
|
validationPassed() {
|
|
100
|
+
// Allows for configuring authorized users and groups
|
|
101
|
+
if ( this.model.enabled && !this.editConfig ) {
|
|
102
|
+
return true;
|
|
103
|
+
}
|
|
104
|
+
|
|
100
105
|
if (!this.model.clientId || !this.model.clientSecret) {
|
|
101
106
|
return false;
|
|
102
107
|
}
|
package/edit/auth/oidc.vue
CHANGED
|
@@ -442,12 +442,14 @@ export default {
|
|
|
442
442
|
</div>
|
|
443
443
|
</template>
|
|
444
444
|
|
|
445
|
-
|
|
445
|
+
<!-- Custom Claims -->
|
|
446
|
+
<template v-if="addCustomClaims && isGenericOidc">
|
|
446
447
|
<h4>{{ t('authConfig.oidc.customClaims.label') }}</h4>
|
|
447
448
|
<div class="row mb-20">
|
|
448
449
|
<div class="col span-6">
|
|
449
450
|
<LabeledInput
|
|
450
451
|
v-model:value="model.nameClaim"
|
|
452
|
+
data-testid="input-name-claim"
|
|
451
453
|
:label="t(`authConfig.oidc.customClaims.nameClaim.label`)"
|
|
452
454
|
:mode="mode"
|
|
453
455
|
/>
|
|
@@ -455,6 +457,7 @@ export default {
|
|
|
455
457
|
<div class="col span-6">
|
|
456
458
|
<LabeledInput
|
|
457
459
|
v-model:value="model.groupsClaim"
|
|
460
|
+
data-testid="input-groups-claim"
|
|
458
461
|
:label="t(`authConfig.oidc.customClaims.groupsClaim.label`)"
|
|
459
462
|
:mode="mode"
|
|
460
463
|
/>
|
|
@@ -464,6 +467,7 @@ export default {
|
|
|
464
467
|
<div class="col span-6">
|
|
465
468
|
<LabeledInput
|
|
466
469
|
v-model:value="model.emailClaim"
|
|
470
|
+
data-testid="input-email-claim"
|
|
467
471
|
:label="t(`authConfig.oidc.customClaims.emailClaim.label`)"
|
|
468
472
|
:mode="mode"
|
|
469
473
|
/>
|
package/edit/cloudcredential.vue
CHANGED
|
@@ -139,8 +139,8 @@ export default {
|
|
|
139
139
|
const fromDrivers = [...this.nodeDrivers, ...this.kontainerDrivers]
|
|
140
140
|
.filter((x) => x.spec.active && x.id !== 'rancherkubernetesengine')
|
|
141
141
|
.map((x) => x.spec.displayName || x.id);
|
|
142
|
+
const fromExtensions = this.extensions?.filter((x) => !x.hidden).map((x) => x.id) || [];
|
|
142
143
|
|
|
143
|
-
const fromExtensions = this.extensions?.filter((x) => !!this.getCustomCloudCredentialComponent(x?.id)).map((x) => x?.id) || [];
|
|
144
144
|
const providers = [...fromDrivers, ...fromExtensions];
|
|
145
145
|
|
|
146
146
|
let types = uniq(providers.map((x) => this.$store.getters['plugins/credentialDriverFor'](x)));
|
package/edit/configmap.vue
CHANGED
|
@@ -400,16 +400,6 @@ export default {
|
|
|
400
400
|
}
|
|
401
401
|
},
|
|
402
402
|
|
|
403
|
-
scrollToBottom() {
|
|
404
|
-
this.$nextTick(() => {
|
|
405
|
-
const scrollable = document.getElementsByTagName('main')[0];
|
|
406
|
-
|
|
407
|
-
if (scrollable) {
|
|
408
|
-
scrollable.scrollTop = scrollable.scrollHeight;
|
|
409
|
-
}
|
|
410
|
-
});
|
|
411
|
-
},
|
|
412
|
-
|
|
413
403
|
updateBeforeSave() {
|
|
414
404
|
this.value.spec['correctDrift'] = { enabled: this.correctDriftEnabled };
|
|
415
405
|
|
|
@@ -237,11 +237,11 @@ export default {
|
|
|
237
237
|
},
|
|
238
238
|
|
|
239
239
|
downstreamSecretsList() {
|
|
240
|
-
return (this.value.spec.
|
|
240
|
+
return (this.value.spec.downstreamResources || []).filter((r) => r.kind === 'Secret').map((r) => r.name);
|
|
241
241
|
},
|
|
242
242
|
|
|
243
243
|
downstreamConfigMapsList() {
|
|
244
|
-
return (this.value.spec.
|
|
244
|
+
return (this.value.spec.downstreamResources || []).filter((r) => r.kind === 'ConfigMap').map((r) => r.name);
|
|
245
245
|
},
|
|
246
246
|
},
|
|
247
247
|
|
|
@@ -446,14 +446,14 @@ export default {
|
|
|
446
446
|
updateDownstreamResources(kind, list) {
|
|
447
447
|
switch (kind) {
|
|
448
448
|
case 'Secret':
|
|
449
|
-
this.value.spec.
|
|
450
|
-
...(this.value.spec.
|
|
449
|
+
this.value.spec.downstreamResources = [
|
|
450
|
+
...(this.value.spec.downstreamResources || []).filter((r) => r.kind !== 'Secret'),
|
|
451
451
|
...(list || []).map((name) => ({ name, kind: 'Secret' })),
|
|
452
452
|
];
|
|
453
453
|
break;
|
|
454
454
|
case 'ConfigMap':
|
|
455
|
-
this.value.spec.
|
|
456
|
-
...(this.value.spec.
|
|
455
|
+
this.value.spec.downstreamResources = [
|
|
456
|
+
...(this.value.spec.downstreamResources || []).filter((r) => r.kind !== 'ConfigMap'),
|
|
457
457
|
...(list || []).map((name) => ({ name, kind: 'ConfigMap' })),
|
|
458
458
|
];
|
|
459
459
|
break;
|
|
@@ -204,7 +204,10 @@ export default {
|
|
|
204
204
|
@input="$emit('input', $event)"
|
|
205
205
|
/>
|
|
206
206
|
|
|
207
|
-
<Tabbed
|
|
207
|
+
<Tabbed
|
|
208
|
+
:use-hash="useTabbedHash"
|
|
209
|
+
:default-tab="defaultTab"
|
|
210
|
+
>
|
|
208
211
|
<Tab
|
|
209
212
|
:label="t('monitoring.route.label')"
|
|
210
213
|
:weight="1"
|
package/edit/namespace.vue
CHANGED