@rancher/shell 3.0.8-rc.8 → 3.0.8
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/apis/impl/apis.ts +61 -0
- package/apis/index.ts +40 -0
- package/apis/intf/modal.ts +90 -0
- package/apis/intf/shell.ts +36 -0
- package/apis/intf/slide-in.ts +98 -0
- package/apis/intf/system.ts +41 -0
- package/apis/shell/__tests__/modal.test.ts +80 -0
- package/apis/shell/__tests__/notifications.test.ts +71 -0
- package/apis/shell/__tests__/slide-in.test.ts +54 -0
- package/apis/shell/__tests__/system.test.ts +129 -0
- package/apis/shell/index.ts +38 -0
- package/apis/shell/modal.ts +41 -0
- package/apis/shell/notifications.ts +65 -0
- package/apis/shell/slide-in.ts +33 -0
- package/apis/shell/system.ts +65 -0
- package/apis/vue-shim.d.ts +11 -0
- package/assets/brand/suse/dark/rancher-logo.svg +1 -64
- package/assets/styles/global/_tooltip.scss +6 -1
- package/assets/translations/en-us.yaml +14 -1
- package/components/ActionMenuShell.vue +3 -1
- package/components/BackLink.vue +8 -0
- package/components/BannerGraphic.vue +1 -5
- package/components/BrandImage.vue +17 -6
- package/components/Cron/CronExpressionEditor.vue +1 -1
- package/components/Cron/CronExpressionEditorModal.vue +1 -1
- package/components/CruResource.vue +8 -1
- package/components/Drawer/ResourceDetailDrawer/ConfigTab.vue +1 -0
- package/components/Drawer/ResourceDetailDrawer/__tests__/composables.test.ts +50 -1
- package/components/Drawer/ResourceDetailDrawer/composables.ts +19 -0
- package/components/Drawer/ResourceDetailDrawer/index.vue +4 -1
- package/components/Drawer/ResourceDetailDrawer/types.ts +2 -1
- package/components/LocaleSelector.vue +2 -2
- package/components/ModalManager.vue +11 -1
- package/components/Questions/__tests__/Yaml.test.ts +1 -1
- package/components/Questions/__tests__/index.test.ts +159 -0
- package/components/RelatedResources.vue +5 -0
- package/components/Resource/Detail/Metadata/Annotations/index.vue +2 -2
- package/components/Resource/Detail/Metadata/Labels/index.vue +2 -2
- package/components/Resource/Detail/Metadata/index.vue +3 -3
- package/components/Resource/Detail/ResourcePopover/index.vue +5 -1
- package/components/Resource/Detail/composables.ts +2 -2
- package/components/ResourceDetail/Masthead/latest.vue +23 -21
- package/components/ResourceDetail/index.vue +3 -0
- package/components/ResourceTable.vue +54 -21
- package/components/SlideInPanelManager.vue +16 -11
- package/components/SortableTable/THead.vue +2 -1
- package/components/SortableTable/index.vue +20 -2
- package/components/Tabbed/__tests__/index.test.ts +86 -0
- package/components/Tabbed/index.vue +37 -2
- package/components/__tests__/NamespaceFilter.test.ts +49 -0
- package/components/auth/SelectPrincipal.vue +28 -6
- package/components/auth/__tests__/SelectPrincipal.test.ts +119 -0
- package/components/auth/login/ldap.vue +3 -3
- package/components/fleet/FleetSecretSelector.vue +1 -1
- package/components/form/KeyValue.vue +1 -1
- package/components/form/NameNsDescription.vue +1 -1
- package/components/form/NodeScheduling.vue +2 -2
- package/components/form/ResourceTabs/composable.ts +2 -2
- package/components/form/ResourceTabs/index.vue +0 -2
- package/components/form/__tests__/NameNsDescription.test.ts +42 -0
- package/components/formatter/InternalExternalIP.vue +4 -1
- package/components/formatter/LinkName.vue +5 -0
- package/components/formatter/__tests__/InternalExternalIP.test.ts +1 -1
- package/components/nav/Group.vue +25 -7
- package/components/nav/Header.vue +1 -1
- package/components/nav/NamespaceFilter.vue +1 -0
- package/components/nav/Type.vue +17 -6
- package/components/nav/WindowManager/panels/TabBodyContainer.vue +1 -1
- package/components/nav/__tests__/Type.test.ts +59 -0
- package/components/templates/standalone.vue +1 -1
- package/composables/cruResource.ts +27 -0
- package/composables/focusTrap.ts +3 -1
- package/composables/resourceDetail.ts +15 -0
- package/composables/useI18n.ts +10 -1
- package/composables/useLabeledFormElement.ts +3 -4
- package/config/__test__/uiplugins.test.ts +309 -0
- package/config/labels-annotations.js +1 -0
- package/config/product/explorer.js +3 -1
- package/config/product/fleet.js +1 -1
- package/config/router/navigation-guards/clusters.js +3 -3
- package/config/router/navigation-guards/products.js +1 -1
- package/config/router/routes.js +7 -7
- package/config/types.js +7 -0
- package/config/uiplugins.js +46 -2
- package/core/__tests__/extension-manager-impl.test.js +437 -0
- package/core/extension-manager-impl.js +21 -25
- package/core/plugin-helpers.ts +2 -2
- package/core/plugin.ts +9 -1
- package/core/plugins-loader.js +2 -2
- package/core/types-provisioning.ts +5 -1
- package/core/types.ts +35 -0
- package/detail/provisioning.cattle.io.cluster.vue +9 -6
- package/dialog/DeveloperLoadExtensionDialog.vue +13 -4
- package/dialog/MoveNamespaceDialog.vue +20 -4
- package/dialog/RollbackWorkloadDialog.vue +2 -5
- package/dialog/SearchDialog.vue +1 -0
- package/dialog/__tests__/MoveNamespaceDialog.test.ts +249 -0
- package/directives/__tests__/clean-tooltip.test.ts +298 -0
- package/directives/clean-tooltip.ts +234 -0
- package/edit/__tests__/fleet.cattle.io.gitrepo.test.ts +2 -2
- package/edit/__tests__/fleet.cattle.io.helmop.test.ts +100 -3
- package/edit/autoscaling.horizontalpodautoscaler/index.vue +1 -0
- package/edit/configmap.vue +1 -0
- package/edit/constraints.gatekeeper.sh.constraint/index.vue +1 -0
- package/edit/fleet.cattle.io.helmop.vue +11 -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/__tests__/rke2.test.ts +21 -21
- package/edit/provisioning.cattle.io.cluster/index.vue +5 -5
- package/edit/provisioning.cattle.io.cluster/rke2.vue +9 -8
- package/edit/resources.cattle.io.restore.vue +1 -1
- package/edit/secret/index.vue +1 -1
- package/edit/service.vue +1 -0
- package/edit/serviceaccount.vue +1 -0
- package/edit/storage.k8s.io.storageclass/index.vue +1 -0
- package/edit/workload/Job.vue +2 -2
- package/edit/workload/index.vue +2 -1
- package/edit/workload/mixins/workload.js +1 -1
- package/initialize/App.vue +4 -4
- package/initialize/install-plugins.js +19 -5
- package/machine-config/azure.vue +1 -1
- package/machine-config/components/GCEImage.vue +1 -1
- package/mixins/__tests__/brand.spec.ts +2 -2
- package/mixins/brand.js +1 -7
- package/mixins/create-edit-view/index.js +5 -0
- package/models/__tests__/provisioning.cattle.io.cluster.test.ts +128 -5
- package/models/chart.js +70 -74
- package/models/management.cattle.io.cluster.js +21 -3
- package/models/provisioning.cattle.io.cluster.js +31 -11
- package/package.json +11 -10
- package/pages/auth/login.vue +4 -6
- 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 +122 -24
- package/pages/c/_cluster/apps/charts/install.vue +33 -0
- package/pages/c/_cluster/explorer/__tests__/index.test.ts +1 -1
- package/pages/c/_cluster/explorer/index.vue +8 -6
- package/pages/c/_cluster/fleet/index.vue +4 -7
- package/pages/c/_cluster/manager/hostedprovider/index.vue +12 -6
- package/pages/c/_cluster/settings/brand.vue +1 -1
- package/pages/c/_cluster/settings/index.vue +5 -0
- 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/pkg/auto-import.js +3 -3
- package/pkg/dynamic-importer.lib.js +1 -1
- package/pkg/import.js +1 -1
- package/plugins/__tests__/mutations.tests.ts +179 -0
- 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/mutations.js +23 -2
- package/plugins/dashboard-store/resource-class.js +11 -5
- package/plugins/i18n.js +8 -0
- package/plugins/plugin.js +2 -2
- package/plugins/steve/__tests__/steve-pagination-utils.test.ts +506 -0
- package/plugins/steve/steve-class.js +1 -1
- package/plugins/steve/steve-pagination-utils.ts +131 -47
- package/rancher-components/Form/Checkbox/Checkbox.vue +1 -1
- package/rancher-components/Form/LabeledInput/LabeledInput.vue +1 -1
- package/rancher-components/Pill/RcStatusBadge/RcStatusBadge.vue +6 -42
- 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/useDropdownContext.ts +2 -4
- 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/RcItemCard/RcItemCard.vue +1 -1
- package/rancher-components/utils/status.test.ts +67 -0
- package/rancher-components/utils/status.ts +77 -0
- package/scripts/publish-shell.sh +25 -0
- package/scripts/typegen.sh +1 -0
- package/store/__tests__/catalog.test.ts +1 -1
- package/store/__tests__/type-map.test.ts +164 -2
- package/store/action-menu.js +8 -0
- package/store/auth.js +25 -13
- package/store/catalog.js +6 -0
- package/store/i18n.js +3 -3
- package/store/index.js +8 -6
- package/store/notifications.ts +2 -0
- package/store/prefs.js +6 -7
- package/store/type-map.js +17 -7
- package/store/wm.ts +4 -4
- package/types/internal-api/shell/modal.d.ts +6 -6
- package/types/notifications/index.ts +126 -15
- package/types/rancher/index.d.ts +9 -0
- package/types/shell/index.d.ts +54 -3
- package/types/store/__tests__/pagination.types.spec.ts +137 -0
- package/types/store/pagination.types.ts +157 -9
- package/types/vue-shim.d.ts +5 -4
- package/utils/__tests__/provider.test.ts +98 -0
- package/utils/__tests__/router.test.js +238 -0
- package/utils/__tests__/selector-typed.test.ts +263 -0
- package/utils/cluster.js +4 -1
- package/utils/color.js +1 -1
- package/utils/dynamic-content/__tests__/info.test.ts +6 -0
- package/utils/dynamic-content/info.ts +43 -0
- package/utils/favicon.js +4 -4
- package/utils/fleet.ts +8 -1
- package/utils/pagination-utils.ts +2 -2
- package/utils/pagination-wrapper.ts +1 -1
- package/utils/provider.ts +14 -0
- package/utils/router.js +50 -0
- package/utils/selector-typed.ts +6 -2
- package/utils/unit-tests/pagination-utils.spec.ts +8 -8
- package/vue.config.js +3 -3
- package/composables/useExtensionManager.ts +0 -17
- package/core/plugins.js +0 -38
- package/directives/clean-tooltip.js +0 -32
- package/plugins/internal-api/index.ts +0 -37
- package/plugins/internal-api/shared/base-api.ts +0 -13
- package/plugins/internal-api/shell/shell.api.ts +0 -108
- package/plugins/nuxt-client-init.js +0 -3
- package/types/internal-api/shell/growl.d.ts +0 -25
- package/types/internal-api/shell/slideIn.d.ts +0 -15
|
@@ -112,8 +112,8 @@ describe('component: rke2', () => {
|
|
|
112
112
|
global: {
|
|
113
113
|
mocks: {
|
|
114
114
|
...defaultMocks,
|
|
115
|
-
$store:
|
|
116
|
-
$
|
|
115
|
+
$store: { dispatch: () => jest.fn(), getters: defaultGetters },
|
|
116
|
+
$extension: { getDynamic: jest.fn(() => undefined ) }
|
|
117
117
|
},
|
|
118
118
|
|
|
119
119
|
stubs: defaultStubs,
|
|
@@ -143,8 +143,8 @@ describe('component: rke2', () => {
|
|
|
143
143
|
global: {
|
|
144
144
|
mocks: {
|
|
145
145
|
...defaultMocks,
|
|
146
|
-
$store:
|
|
147
|
-
$
|
|
146
|
+
$store: { dispatch: () => jest.fn(), getters: defaultGetters },
|
|
147
|
+
$extension: { getDynamic: jest.fn(() => undefined ) },
|
|
148
148
|
},
|
|
149
149
|
|
|
150
150
|
stubs: defaultStubs,
|
|
@@ -174,8 +174,8 @@ describe('component: rke2', () => {
|
|
|
174
174
|
global: {
|
|
175
175
|
mocks: {
|
|
176
176
|
...defaultMocks,
|
|
177
|
-
$store:
|
|
178
|
-
$
|
|
177
|
+
$store: { dispatch: () => jest.fn(), getters: defaultGetters },
|
|
178
|
+
$extension: { getDynamic: jest.fn(() => undefined ) },
|
|
179
179
|
},
|
|
180
180
|
|
|
181
181
|
stubs: defaultStubs,
|
|
@@ -231,7 +231,7 @@ describe('component: rke2', () => {
|
|
|
231
231
|
},
|
|
232
232
|
getters: defaultGetters
|
|
233
233
|
},
|
|
234
|
-
$
|
|
234
|
+
$extension: { getDynamic: jest.fn(() => undefined ) },
|
|
235
235
|
},
|
|
236
236
|
|
|
237
237
|
stubs: defaultStubs,
|
|
@@ -275,7 +275,7 @@ describe('component: rke2', () => {
|
|
|
275
275
|
'management/findAll': () => ([]),
|
|
276
276
|
}
|
|
277
277
|
},
|
|
278
|
-
$
|
|
278
|
+
$extension: { getDynamic: jest.fn(() => undefined ) },
|
|
279
279
|
},
|
|
280
280
|
|
|
281
281
|
stubs: defaultStubs,
|
|
@@ -324,7 +324,7 @@ describe('component: rke2', () => {
|
|
|
324
324
|
'management/findAll': () => ([]),
|
|
325
325
|
}
|
|
326
326
|
},
|
|
327
|
-
$
|
|
327
|
+
$extension: { getDynamic: jest.fn(() => undefined ) },
|
|
328
328
|
},
|
|
329
329
|
|
|
330
330
|
stubs: defaultStubs,
|
|
@@ -369,8 +369,8 @@ describe('component: rke2', () => {
|
|
|
369
369
|
global: {
|
|
370
370
|
mocks: {
|
|
371
371
|
...defaultMocks,
|
|
372
|
-
$store:
|
|
373
|
-
$
|
|
372
|
+
$store: { dispatch: () => jest.fn(), getters: defaultGetters },
|
|
373
|
+
$extension: { getDynamic: jest.fn(() => undefined ) },
|
|
374
374
|
},
|
|
375
375
|
stubs: defaultStubs
|
|
376
376
|
}
|
|
@@ -409,8 +409,8 @@ describe('component: rke2', () => {
|
|
|
409
409
|
global: {
|
|
410
410
|
mocks: {
|
|
411
411
|
...defaultMocks,
|
|
412
|
-
$store:
|
|
413
|
-
$
|
|
412
|
+
$store: { dispatch: () => jest.fn(), getters: defaultGetters },
|
|
413
|
+
$extension: { getDynamic: jest.fn(() => undefined ) },
|
|
414
414
|
},
|
|
415
415
|
stubs: defaultStubs
|
|
416
416
|
}
|
|
@@ -441,8 +441,8 @@ describe('component: rke2', () => {
|
|
|
441
441
|
global: {
|
|
442
442
|
mocks: {
|
|
443
443
|
...defaultMocks,
|
|
444
|
-
$store:
|
|
445
|
-
$
|
|
444
|
+
$store: { dispatch: () => jest.fn(), getters: defaultGetters },
|
|
445
|
+
$extension: { getDynamic: jest.fn(() => undefined ) },
|
|
446
446
|
},
|
|
447
447
|
stubs: defaultStubs
|
|
448
448
|
}
|
|
@@ -489,8 +489,8 @@ describe('component: rke2', () => {
|
|
|
489
489
|
global: {
|
|
490
490
|
mocks: {
|
|
491
491
|
...defaultMocks,
|
|
492
|
-
$store:
|
|
493
|
-
$
|
|
492
|
+
$store: { dispatch: () => jest.fn(), getters: defaultGetters },
|
|
493
|
+
$extension: { getDynamic: jest.fn(() => undefined ) },
|
|
494
494
|
},
|
|
495
495
|
stubs: defaultStubs
|
|
496
496
|
}
|
|
@@ -536,8 +536,8 @@ describe('component: rke2', () => {
|
|
|
536
536
|
global: {
|
|
537
537
|
mocks: {
|
|
538
538
|
...defaultMocks,
|
|
539
|
-
$store:
|
|
540
|
-
$
|
|
539
|
+
$store: { dispatch: () => jest.fn(), getters: defaultGetters },
|
|
540
|
+
$extension: { getDynamic: jest.fn(() => undefined ) },
|
|
541
541
|
},
|
|
542
542
|
stubs: defaultStubs
|
|
543
543
|
}
|
|
@@ -600,8 +600,8 @@ describe('component: rke2', () => {
|
|
|
600
600
|
global: {
|
|
601
601
|
mocks: {
|
|
602
602
|
...defaultMocks,
|
|
603
|
-
$store:
|
|
604
|
-
$
|
|
603
|
+
$store: { dispatch: () => jest.fn(), getters: defaultGetters },
|
|
604
|
+
$extension: { getDynamic: jest.fn(() => undefined ) },
|
|
605
605
|
},
|
|
606
606
|
|
|
607
607
|
stubs: defaultStubs,
|
|
@@ -332,9 +332,9 @@ export default {
|
|
|
332
332
|
// Keeping this for non Rancher-managed kontainer drivers
|
|
333
333
|
this.kontainerDrivers.filter((x) => (isImport ? x.showImport : x.showCreate)).forEach((obj) => {
|
|
334
334
|
if ( vueKontainerTypes.includes(obj.driverName) ) {
|
|
335
|
-
addType(this.$
|
|
335
|
+
addType(this.$extension, obj.driverName, 'hosted', false);
|
|
336
336
|
} else {
|
|
337
|
-
addType(this.$
|
|
337
|
+
addType(this.$extension, obj.driverName, 'hosted', false, (isImport ? obj.emberImportPath : obj.emberCreatePath));
|
|
338
338
|
}
|
|
339
339
|
});
|
|
340
340
|
if (!isImport) {
|
|
@@ -351,7 +351,7 @@ export default {
|
|
|
351
351
|
|
|
352
352
|
// If Elemental is installed, then add the elemental cluster provider
|
|
353
353
|
if (isElementalActive) {
|
|
354
|
-
addType(this.$
|
|
354
|
+
addType(this.$extension, ELEMENTAL_CLUSTER_PROVIDER, 'custom2', false);
|
|
355
355
|
}
|
|
356
356
|
|
|
357
357
|
// Only add the RKE2 options if RKE2 is enabled
|
|
@@ -359,10 +359,10 @@ export default {
|
|
|
359
359
|
machineTypes.forEach((type) => {
|
|
360
360
|
const id = type.spec.displayName || type.id;
|
|
361
361
|
|
|
362
|
-
addType(this.$
|
|
362
|
+
addType(this.$extension, id, _RKE2, false, null, undefined, type);
|
|
363
363
|
});
|
|
364
364
|
|
|
365
|
-
addType(this.$
|
|
365
|
+
addType(this.$extension, 'custom', 'custom2', false);
|
|
366
366
|
}
|
|
367
367
|
}
|
|
368
368
|
// Add from extensions
|
|
@@ -502,7 +502,7 @@ export default {
|
|
|
502
502
|
* 2) Override via hardcoded setting
|
|
503
503
|
*/
|
|
504
504
|
cloudCredentialsOverride() {
|
|
505
|
-
const cloudCredential = this.$
|
|
505
|
+
const cloudCredential = this.$extension.getDynamic('cloud-credential', this.provider);
|
|
506
506
|
|
|
507
507
|
if (cloudCredential === undefined) {
|
|
508
508
|
return CLOUD_CREDENTIAL_OVERRIDE[this.provider];
|
|
@@ -527,16 +527,16 @@ export default {
|
|
|
527
527
|
* Extension provider where being provisioned by an extension
|
|
528
528
|
*/
|
|
529
529
|
extensionProvider() {
|
|
530
|
-
const extClass = this.$
|
|
530
|
+
const extClass = this.$extension.getDynamic('provisioner', this.provider);
|
|
531
531
|
|
|
532
532
|
if (extClass) {
|
|
533
533
|
return new extClass({
|
|
534
|
-
dispatch:
|
|
535
|
-
getters:
|
|
536
|
-
axios:
|
|
537
|
-
$
|
|
538
|
-
$t:
|
|
539
|
-
isCreate:
|
|
534
|
+
dispatch: this.$store.dispatch,
|
|
535
|
+
getters: this.$store.getters,
|
|
536
|
+
axios: this.$store.$axios,
|
|
537
|
+
$extension: this.$store.app.$extension,
|
|
538
|
+
$t: this.t,
|
|
539
|
+
isCreate: this.isCreate
|
|
540
540
|
});
|
|
541
541
|
}
|
|
542
542
|
|
|
@@ -2440,6 +2440,7 @@ export default {
|
|
|
2440
2440
|
:side-tabs="true"
|
|
2441
2441
|
class="min-height"
|
|
2442
2442
|
:use-hash="useTabbedHash"
|
|
2443
|
+
:default-tab="defaultTab"
|
|
2443
2444
|
@changed="handleTabChange"
|
|
2444
2445
|
>
|
|
2445
2446
|
<Tab
|
|
@@ -310,7 +310,7 @@ export default {
|
|
|
310
310
|
<template #label>
|
|
311
311
|
<label
|
|
312
312
|
v-clean-tooltip="t('backupRestoreOperator.deleteTimeout.tip')"
|
|
313
|
-
class="
|
|
313
|
+
class="has-clean-tooltip"
|
|
314
314
|
>
|
|
315
315
|
{{ t('backupRestoreOperator.deleteTimeout.label') }} <i class="icon icon-info" />
|
|
316
316
|
</label>
|
package/edit/secret/index.vue
CHANGED
package/edit/service.vue
CHANGED
package/edit/serviceaccount.vue
CHANGED
package/edit/workload/Job.vue
CHANGED
|
@@ -261,7 +261,7 @@ export default {
|
|
|
261
261
|
>
|
|
262
262
|
<template #label>
|
|
263
263
|
<label
|
|
264
|
-
class="
|
|
264
|
+
class="has-clean-tooltip"
|
|
265
265
|
:style="{'color':'var(--input-label)'}"
|
|
266
266
|
>
|
|
267
267
|
{{ t('workload.upgrading.terminationGracePeriodSeconds.label') }}
|
|
@@ -322,7 +322,7 @@ export default {
|
|
|
322
322
|
>
|
|
323
323
|
<template #label>
|
|
324
324
|
<label
|
|
325
|
-
class="
|
|
325
|
+
class="has-clean-tooltip"
|
|
326
326
|
:style="{'color':'var(--input-label)'}"
|
|
327
327
|
>
|
|
328
328
|
{{ t('workload.upgrading.terminationGracePeriodSeconds.label') }}
|
package/edit/workload/index.vue
CHANGED
|
@@ -152,9 +152,10 @@ export default {
|
|
|
152
152
|
ref="containersTabbed"
|
|
153
153
|
class="deployment-tabs"
|
|
154
154
|
:show-tabs-add-remove="true"
|
|
155
|
-
:default-tab="defaultTab"
|
|
155
|
+
:default-tab="defaultTab || defaultWorkloadTab"
|
|
156
156
|
:flat="true"
|
|
157
157
|
:use-hash="useTabbedHash"
|
|
158
|
+
:showExtensionTabs="false"
|
|
158
159
|
data-testid="workload-horizontal-tabs"
|
|
159
160
|
@changed="changed"
|
|
160
161
|
>
|
|
@@ -292,7 +292,7 @@ export default {
|
|
|
292
292
|
return { general: this.fvGetPathErrors(['image'])?.length > 0 };
|
|
293
293
|
},
|
|
294
294
|
|
|
295
|
-
|
|
295
|
+
defaultWorkloadTab() {
|
|
296
296
|
if (!!this.$route.query.sidecar || this.$route.query.init || this.mode === _CREATE) {
|
|
297
297
|
const container = this.allContainers.find((c) => c.__active);
|
|
298
298
|
|
package/initialize/App.vue
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<script>
|
|
2
|
-
import
|
|
2
|
+
import GlobalLoading from '@shell/components/nav/GlobalLoading.vue';
|
|
3
3
|
|
|
4
4
|
import '@shell/assets/styles/app.scss';
|
|
5
5
|
|
|
@@ -55,12 +55,12 @@ export default {
|
|
|
55
55
|
},
|
|
56
56
|
},
|
|
57
57
|
|
|
58
|
-
components: {
|
|
58
|
+
components: { GlobalLoading }
|
|
59
59
|
};
|
|
60
60
|
</script>
|
|
61
61
|
<template>
|
|
62
|
-
<div id="
|
|
63
|
-
<
|
|
62
|
+
<div id="__root">
|
|
63
|
+
<GlobalLoading ref="loading" />
|
|
64
64
|
<div
|
|
65
65
|
id="__layout"
|
|
66
66
|
>
|
|
@@ -17,15 +17,14 @@ import axiosShell from '@shell/plugins/axios';
|
|
|
17
17
|
import codeMirror from '@shell/plugins/codemirror-loader';
|
|
18
18
|
import { InstallCodeMirror } from 'codemirror-editor-vue3';
|
|
19
19
|
import * as intNumber from '@shell/directives/int-number';
|
|
20
|
-
import
|
|
20
|
+
import dashboardClientInit from '@shell/plugins/dashboard-client-init';
|
|
21
21
|
import plugin from '@shell/plugins/plugin';
|
|
22
|
-
import plugins from '@shell/core/plugins.js';
|
|
23
22
|
import pluginsLoader from '@shell/core/plugins-loader.js';
|
|
24
23
|
import replaceAll from '@shell/plugins/replaceall';
|
|
25
24
|
import steveCreateWorker from '@shell/plugins/steve-create-worker';
|
|
26
25
|
import emberCookie from '@shell/plugins/ember-cookie';
|
|
27
26
|
import ShortKey from '@shell/plugins/shortkey';
|
|
28
|
-
import
|
|
27
|
+
import { initUiApis } from '@shell/apis/impl/apis';
|
|
29
28
|
|
|
30
29
|
import 'floating-vue/dist/style.css';
|
|
31
30
|
import { floatingVueOptions } from '@shell/plugins/floating-vue';
|
|
@@ -48,13 +47,28 @@ export async function installPlugins(vueApp) {
|
|
|
48
47
|
}
|
|
49
48
|
|
|
50
49
|
export async function installInjectedPlugins(app, vueApp) {
|
|
51
|
-
const pluginDefinitions = [
|
|
50
|
+
const pluginDefinitions = [
|
|
51
|
+
config,
|
|
52
|
+
axios,
|
|
53
|
+
initUiApis,
|
|
54
|
+
pluginsLoader,
|
|
55
|
+
axiosShell,
|
|
56
|
+
intNumber,
|
|
57
|
+
codeMirror,
|
|
58
|
+
dashboardClientInit,
|
|
59
|
+
replaceAll,
|
|
60
|
+
plugin,
|
|
61
|
+
steveCreateWorker,
|
|
62
|
+
emberCookie,
|
|
63
|
+
dynamicContent,
|
|
64
|
+
];
|
|
52
65
|
|
|
53
66
|
const installations = pluginDefinitions.map(async(pluginDefinition) => {
|
|
54
67
|
if (typeof pluginDefinition === 'function') {
|
|
55
68
|
await pluginDefinition(
|
|
56
69
|
app.context,
|
|
57
|
-
(key, value) => inject(key, value, app.context, vueApp)
|
|
70
|
+
(key, value) => inject(key, value, app.context, vueApp),
|
|
71
|
+
vueApp
|
|
58
72
|
);
|
|
59
73
|
}
|
|
60
74
|
});
|
package/machine-config/azure.vue
CHANGED
|
@@ -8,7 +8,7 @@ import { getGKEImageFamilies, getGKEFamiliesFromProject } from '@shell/component
|
|
|
8
8
|
import debounce from 'lodash/debounce';
|
|
9
9
|
import { mapGetters } from 'vuex';
|
|
10
10
|
|
|
11
|
-
const DEFAULT_PROJECTS = '
|
|
11
|
+
const DEFAULT_PROJECTS = 'ubuntu-os-cloud';
|
|
12
12
|
const DEFAULT_MIN_DISK = 10;
|
|
13
13
|
|
|
14
14
|
export default {
|
|
@@ -99,9 +99,9 @@ describe('brandMixin', () => {
|
|
|
99
99
|
filters: [{
|
|
100
100
|
equals: true,
|
|
101
101
|
fields: [{
|
|
102
|
-
equals: true, exact: true, exists: false, field: 'metadata.name', value: 'rancher-csp-adapter'
|
|
102
|
+
equality: '=', equals: true, exact: true, exists: false, field: 'metadata.name', value: 'rancher-csp-adapter'
|
|
103
103
|
}, {
|
|
104
|
-
equals: true, exact: true, exists: false, field: 'metadata.name', value: 'rancher-csp-billing-adapter'
|
|
104
|
+
equality: '=', equals: true, exact: true, exists: false, field: 'metadata.name', value: 'rancher-csp-billing-adapter'
|
|
105
105
|
}],
|
|
106
106
|
param: 'filter'
|
|
107
107
|
}],
|
package/mixins/brand.js
CHANGED
|
@@ -36,7 +36,7 @@ export default {
|
|
|
36
36
|
},
|
|
37
37
|
|
|
38
38
|
computed: {
|
|
39
|
-
...mapGetters({ loggedIn: 'auth/loggedIn' }),
|
|
39
|
+
...mapGetters({ loggedIn: 'auth/loggedIn', brand: 'management/brand' }),
|
|
40
40
|
|
|
41
41
|
// added to fix https://github.com/rancher/dashboard/issues/10788
|
|
42
42
|
// because on logout the brand mixin is mounted, but then a management store reset happens
|
|
@@ -46,12 +46,6 @@ export default {
|
|
|
46
46
|
return this.$store.getters['management/all'](MANAGEMENT.SETTING);
|
|
47
47
|
},
|
|
48
48
|
|
|
49
|
-
brand() {
|
|
50
|
-
const setting = this.globalSettings?.find((gs) => gs.id === SETTING.BRAND);
|
|
51
|
-
|
|
52
|
-
return setting?.value;
|
|
53
|
-
},
|
|
54
|
-
|
|
55
49
|
color() {
|
|
56
50
|
const setting = this.globalSettings?.find((gs) => gs.id === SETTING.PRIMARY_COLOR);
|
|
57
51
|
|
|
@@ -1,24 +1,28 @@
|
|
|
1
1
|
import ProvCluster from '@shell/models/provisioning.cattle.io.cluster';
|
|
2
|
-
|
|
2
|
+
jest.mock('@shell/utils/provider', () => ({
|
|
3
|
+
isHostedProvider: jest.fn().mockImplementation((context, provider) => {
|
|
4
|
+
return ['GKE', 'EKS', 'AKS'].includes(provider);
|
|
5
|
+
})
|
|
6
|
+
}));
|
|
3
7
|
describe('class ProvCluster', () => {
|
|
4
8
|
const gkeClusterWithPrivateEndpoint = {
|
|
5
9
|
clusterName: 'test',
|
|
6
10
|
provisioner: 'GKE',
|
|
7
|
-
spec: {
|
|
11
|
+
spec: { },
|
|
8
12
|
mgmt: { spec: { gkeConfig: { privateClusterConfig: { enablePrivateEndpoint: true } } } }
|
|
9
13
|
};
|
|
10
14
|
|
|
11
15
|
const eksClusterWithPrivateEndpoint = {
|
|
12
16
|
clusterName: 'test',
|
|
13
17
|
provisioner: 'EKS',
|
|
14
|
-
spec: {
|
|
18
|
+
spec: { },
|
|
15
19
|
mgmt: { spec: { eksConfig: { privateAccess: true } } }
|
|
16
20
|
};
|
|
17
21
|
|
|
18
22
|
const aksClusterWithPrivateEndpoint = {
|
|
19
23
|
clusterName: 'test',
|
|
20
24
|
provisioner: 'AKS',
|
|
21
|
-
spec: {
|
|
25
|
+
spec: { },
|
|
22
26
|
mgmt: { spec: { aksConfig: { privateCluster: true } } }
|
|
23
27
|
};
|
|
24
28
|
|
|
@@ -44,12 +48,131 @@ describe('class ProvCluster', () => {
|
|
|
44
48
|
clusterData.provisioner
|
|
45
49
|
);
|
|
46
50
|
|
|
47
|
-
expect(cluster.isRke2).toBe(
|
|
51
|
+
expect(cluster.isRke2).toBe(false);
|
|
48
52
|
expect(cluster.isHostedKubernetesProvider).toBe(expected);
|
|
49
53
|
expect(cluster.isPrivateHostedProvider).toBe(expected);
|
|
50
54
|
resetMocks();
|
|
51
55
|
});
|
|
52
56
|
});
|
|
57
|
+
describe('isImported', () => {
|
|
58
|
+
const testCases = [
|
|
59
|
+
{
|
|
60
|
+
description: 'should return false for a local cluster',
|
|
61
|
+
clusterData: { isLocal: true },
|
|
62
|
+
expected: false
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
description: 'should return true for an imported k3s cluster',
|
|
66
|
+
clusterData: {
|
|
67
|
+
isLocal: false,
|
|
68
|
+
mgmt: { status: { provider: 'k3s', driver: 'k3s' } }
|
|
69
|
+
},
|
|
70
|
+
expected: true
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
description: 'should return true for an imported k3s cluster in waiting state',
|
|
74
|
+
clusterData: {
|
|
75
|
+
isLocal: false,
|
|
76
|
+
mgmt: { status: { provider: undefined, driver: 'k3s' } }
|
|
77
|
+
},
|
|
78
|
+
expected: true
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
description: 'should return true for an imported rke2 cluster in waiting state',
|
|
82
|
+
clusterData: {
|
|
83
|
+
isLocal: false,
|
|
84
|
+
mgmt: { status: { provider: undefined, driver: 'rke2' } }
|
|
85
|
+
},
|
|
86
|
+
expected: true
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
description: 'should return false for a provisioned k3s cluster',
|
|
90
|
+
clusterData: {
|
|
91
|
+
isLocal: false,
|
|
92
|
+
mgmt: { status: { provider: 'k3s', driver: 'imported' } }
|
|
93
|
+
},
|
|
94
|
+
expected: false
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
description: 'should return true for an imported rke2 cluster',
|
|
98
|
+
clusterData: {
|
|
99
|
+
isLocal: false,
|
|
100
|
+
mgmt: { status: { provider: 'rke2', driver: 'rke2' } }
|
|
101
|
+
},
|
|
102
|
+
expected: true
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
description: 'should return false for a provisioned rke2 cluster',
|
|
106
|
+
clusterData: {
|
|
107
|
+
isLocal: false,
|
|
108
|
+
mgmt: { status: { provider: 'rke2', driver: 'imported' } }
|
|
109
|
+
},
|
|
110
|
+
expected: false
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
description: 'should return true for an imported hosted cluster',
|
|
114
|
+
clusterData: {
|
|
115
|
+
isLocal: false,
|
|
116
|
+
isHostedKubernetesProvider: true,
|
|
117
|
+
providerConfig: { imported: true }
|
|
118
|
+
},
|
|
119
|
+
expected: true
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
description: 'should return false for a provisioned hosted cluster',
|
|
123
|
+
clusterData: {
|
|
124
|
+
isLocal: false,
|
|
125
|
+
isHostedKubernetesProvider: true,
|
|
126
|
+
providerConfig: { imported: false }
|
|
127
|
+
},
|
|
128
|
+
expected: false
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
description: 'should return true for a generic imported cluster',
|
|
132
|
+
clusterData: {
|
|
133
|
+
isLocal: false,
|
|
134
|
+
provisioner: 'imported'
|
|
135
|
+
},
|
|
136
|
+
expected: true
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
description: 'should return false for a generic provisioned cluster',
|
|
140
|
+
clusterData: {
|
|
141
|
+
isLocal: false,
|
|
142
|
+
provisioner: 'rke2'
|
|
143
|
+
},
|
|
144
|
+
expected: false
|
|
145
|
+
}
|
|
146
|
+
];
|
|
147
|
+
const resetMocks = () => {
|
|
148
|
+
// Clear all mock function calls:
|
|
149
|
+
jest.clearAllMocks();
|
|
150
|
+
};
|
|
151
|
+
|
|
152
|
+
it.each(testCases)('$description', ({ clusterData, expected }) => {
|
|
153
|
+
const cluster = new ProvCluster({});
|
|
154
|
+
|
|
155
|
+
// Mock getters
|
|
156
|
+
jest.spyOn(cluster, 'mgmt', 'get').mockReturnValue(
|
|
157
|
+
clusterData.mgmt
|
|
158
|
+
);
|
|
159
|
+
if (clusterData.isLocal !== undefined) {
|
|
160
|
+
jest.spyOn(cluster, 'isLocal', 'get').mockReturnValue(clusterData.isLocal);
|
|
161
|
+
}
|
|
162
|
+
if (clusterData.isHostedKubernetesProvider !== undefined) {
|
|
163
|
+
jest.spyOn(cluster, 'isHostedKubernetesProvider', 'get').mockReturnValue(clusterData.isHostedKubernetesProvider);
|
|
164
|
+
}
|
|
165
|
+
if (clusterData.providerConfig !== undefined) {
|
|
166
|
+
jest.spyOn(cluster, 'providerConfig', 'get').mockReturnValue(clusterData.providerConfig);
|
|
167
|
+
}
|
|
168
|
+
if (clusterData.provisioner !== undefined) {
|
|
169
|
+
jest.spyOn(cluster, 'provisioner', 'get').mockReturnValue(clusterData.provisioner);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
expect(cluster.isImported).toBe(expected);
|
|
173
|
+
resetMocks();
|
|
174
|
+
});
|
|
175
|
+
});
|
|
53
176
|
|
|
54
177
|
describe('hasError', () => {
|
|
55
178
|
const conditionsWithoutError = [
|