@rancher/shell 0.1.2 → 0.1.3
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/translations/en-us.yaml +27 -769
- package/assets/translations/zh-hans.yaml +8 -769
- package/components/ActionMenu.vue +3 -3
- package/components/CodeMirror.vue +6 -8
- package/components/CommunityLinks.vue +1 -1
- package/components/ContainerResourceLimit.vue +14 -0
- package/components/ExplorerMembers.vue +123 -0
- package/components/ExplorerProjectsNamespaces.vue +405 -0
- package/components/GrafanaDashboard.vue +17 -2
- package/components/LocaleSelector.vue +81 -0
- package/components/PromptModal.vue +2 -3
- package/components/ResourceList/index.vue +1 -1
- package/components/ResourceTable.vue +3 -6
- package/components/SingleClusterInfo.vue +1 -1
- package/components/SortableTable/index.vue +23 -20
- package/components/SortableTable/selection.js +1 -0
- package/components/auth/AzureWarning.vue +5 -1
- package/components/auth/Principal.vue +1 -1
- package/components/auth/RoleDetailEdit.vue +18 -11
- package/components/fleet/FleetRepos.vue +0 -2
- package/components/form/NameNsDescription.vue +4 -6
- package/components/form/NodeScheduling.vue +1 -1
- package/components/form/WorkloadPorts.vue +1 -1
- package/components/formatter/WorkloadHealthScale.vue +1 -1
- package/components/nav/Header.vue +9 -9
- package/components/nav/NamespaceFilter.vue +7 -4
- package/components/nav/TopLevelMenu.vue +6 -43
- package/components/nav/WindowManager/ContainerLogs.vue +1 -1
- package/config/product/harvester-manager.js +64 -2
- package/config/product/manager.js +9 -0
- package/config/settings.js +17 -71
- package/config/table-headers.js +0 -1
- package/config/types.js +5 -25
- package/core/plugin-routes.ts +34 -22
- package/core/plugin.ts +15 -3
- package/core/plugins-loader.js +2 -0
- package/core/plugins.js +79 -36
- package/core/types.ts +7 -1
- package/detail/provisioning.cattle.io.cluster.vue +13 -0
- package/detail/workload/index.vue +11 -5
- package/{components/dialog → dialog}/AddClusterMemberDialog.vue +0 -0
- package/{components/dialog → dialog}/AddCustomBadgeDialog.vue +0 -0
- package/{components/dialog → dialog}/AddProjectMemberDialog.vue +0 -0
- package/{components/dialog → dialog}/AddonConfigConfirmationDialog.vue +0 -0
- package/{components/dialog → dialog}/DrainNode.vue +0 -0
- package/{components/dialog → dialog}/ForceMachineRemoveDialog.vue +0 -0
- package/{components/dialog → dialog}/GenericPrompt.vue +0 -0
- package/{components/dialog → dialog}/RollbackWorkloadDialog.vue +0 -0
- package/{components/dialog → dialog}/RotateCertificatesDialog.vue +0 -0
- package/{components/dialog → dialog}/RotateEncryptionKeyDialog.vue +0 -0
- package/{components/dialog → dialog}/SaveAsRKETemplateDialog.vue +0 -0
- package/{components/dialog → dialog}/ScaleMachineDownDialog.vue +0 -0
- package/edit/auth/azuread.vue +20 -1
- package/edit/management.cattle.io.project.vue +2 -2
- package/edit/namespace.vue +17 -10
- package/edit/persistentvolumeclaim.vue +1 -0
- package/edit/provisioning.cattle.io.cluster/CustomCommand.vue +1 -1
- package/edit/provisioning.cattle.io.cluster/MachinePool.vue +33 -5
- package/edit/service.vue +1 -1
- package/edit/workload/index.vue +363 -15
- package/edit/workload/mixins/workload.js +62 -7
- package/edit/workload/storage/persistentVolumeClaim/persistentvolumeclaim.vue +1 -0
- package/layouts/default.vue +52 -27
- package/layouts/error.vue +5 -1
- package/layouts/home.vue +6 -2
- package/list/harvesterhci.io.management.cluster.vue +74 -33
- package/list/namespace.vue +3 -5
- package/machine-config/amazonec2.vue +2 -0
- package/machine-config/harvester.vue +96 -49
- package/middleware/authenticated.js +56 -52
- package/mixins/form-validation.js +1 -1
- package/mixins/resource-fetch.js +3 -1
- package/models/fleet.cattle.io.bundle.js +26 -19
- package/models/harvesterhci.io.management.cluster.js +194 -5
- package/models/management.cattle.io.cluster.js +1 -1
- package/models/management.cattle.io.clusterroletemplatebinding.js +9 -0
- package/models/management.cattle.io.project.js +23 -2
- package/models/namespace.js +19 -3
- package/models/pod.js +19 -2
- package/models/provisioning.cattle.io.cluster.js +4 -0
- package/models/workload.js +4 -243
- package/models/workload.service.js +314 -0
- package/nuxt.config.js +11 -9
- package/package.json +3 -3
- package/pages/auth/login.vue +11 -2
- package/pages/auth/setup.vue +1 -1
- package/pages/c/_cluster/_product/members/index.vue +3 -93
- package/pages/c/_cluster/_product/projectsnamespaces.vue +6 -403
- package/pages/c/_cluster/settings/performance.vue +19 -16
- package/pages/fail-whale.vue +1 -10
- package/pages/index.vue +18 -4
- package/pages/plugins.vue +2 -2
- package/pages/prefs.vue +8 -6
- package/pkg/auto-import.js +44 -7
- package/pkg/dynamic-plugin-loader.js +28 -0
- package/pkg/import.js +2 -2
- package/pkg/model-loader-require.lib.js +3 -0
- package/pkg/vue.config.js +9 -6
- package/plugins/dashboard-store/model-loader-require.js +12 -0
- package/plugins/dashboard-store/model-loader.js +4 -1
- package/plugins/dashboard-store/resource-class.js +10 -3
- package/plugins/steve/actions.js +1 -1
- package/plugins/steve/index.js +6 -4
- package/plugins/steve/subscribe.js +34 -23
- package/rancher-components/Form/Checkbox/Checkbox.test.ts +77 -0
- package/rancher-components/Form/Checkbox/Checkbox.vue +12 -2
- package/scripts/build-pkg.sh +48 -2
- package/scripts/drone-build-pkg.sh +31 -0
- package/scripts/publish-shell.sh +10 -11
- package/scripts/serve-pkgs +17 -10
- package/store/catalog.js +3 -1
- package/store/i18n.js +16 -11
- package/store/index.js +4 -181
- package/store/prefs.js +30 -2
- package/store/type-map.js +16 -29
- package/utils/cluster.js +1 -1
- package/utils/custom-validators.js +1 -12
- package/utils/dynamic-importer.js +1 -1
- package/utils/validators/setting.js +0 -35
- package/components/FilterLabel.vue +0 -254
- package/components/HarvesterUpgradeProgressBarList.vue +0 -109
- package/components/VMConsoleBar.vue +0 -87
- package/components/dialog/harvester/AddHotplugModal.vue +0 -159
- package/components/dialog/harvester/BackupModal.vue +0 -117
- package/components/dialog/harvester/CloneTemplate.vue +0 -125
- package/components/dialog/harvester/EjectCDROMDialog.vue +0 -157
- package/components/dialog/harvester/ExportImageDialog.vue +0 -152
- package/components/dialog/harvester/MaintenanceDialog.vue +0 -94
- package/components/dialog/harvester/MigrationDialog.vue +0 -154
- package/components/dialog/harvester/RestoreDialog.vue +0 -153
- package/components/dialog/harvester/SupportBundle.vue +0 -217
- package/components/dialog/harvester/UnplugVolume.vue +0 -108
- package/components/form/SerialConsole/index.vue +0 -267
- package/components/formatter/AttachVMWithName.vue +0 -46
- package/components/formatter/CloudInitType.vue +0 -27
- package/components/formatter/HarvesterBackupTargetValidation.vue +0 -43
- package/components/formatter/HarvesterCPUUsed.vue +0 -122
- package/components/formatter/HarvesterDiskState.vue +0 -66
- package/components/formatter/HarvesterHostName.vue +0 -66
- package/components/formatter/HarvesterIpAddress.vue +0 -90
- package/components/formatter/HarvesterMemoryUsed.vue +0 -140
- package/components/formatter/HarvesterMigrationState.vue +0 -85
- package/components/formatter/HarvesterNodeName.vue +0 -49
- package/components/formatter/HarvesterStorageUsed.vue +0 -194
- package/components/formatter/HarvesterVmState.vue +0 -123
- package/components/nav/HarvesterUpgrade.vue +0 -232
- package/components/novnc/NovncConsole.vue +0 -93
- package/components/novnc/NovncConsoleItem.vue +0 -89
- package/components/novnc/NovncConsoleWrapper.vue +0 -243
- package/config/harvester-map.js +0 -44
- package/config/harvester-table-headers.js +0 -27
- package/config/product/harvester.js +0 -305
- package/detail/harvesterhci.io.host/HarvesterHostBasic.vue +0 -364
- package/detail/harvesterhci.io.host/HarvesterHostDisk.vue +0 -200
- package/detail/harvesterhci.io.host/HarvesterHostNetwork.vue +0 -89
- package/detail/harvesterhci.io.host/VirtualMachineInstance.vue +0 -134
- package/detail/harvesterhci.io.host/index.vue +0 -243
- package/detail/harvesterhci.io.virtualmachinebackup/index.vue +0 -221
- package/detail/harvesterhci.io.virtualmachineimage.vue +0 -118
- package/detail/kubevirt.io.virtualmachine/VirtualMachineTabs/VirtualMachineBasics.vue +0 -279
- package/detail/kubevirt.io.virtualmachine/VirtualMachineTabs/VirtualMachineEvents.vue +0 -75
- package/detail/kubevirt.io.virtualmachine/VirtualMachineTabs/VirtualMachineKeypairs.vue +0 -114
- package/detail/kubevirt.io.virtualmachine/VirtualMachineTabs/VirtualMachineMigration.vue +0 -79
- package/detail/kubevirt.io.virtualmachine/index.vue +0 -213
- package/edit/harvesterhci.io.cloudtemplate.vue +0 -123
- package/edit/harvesterhci.io.host/HarvesterDisk.vue +0 -262
- package/edit/harvesterhci.io.host/index.vue +0 -533
- package/edit/harvesterhci.io.keypair.vue +0 -112
- package/edit/harvesterhci.io.managedchart/index.vue +0 -25
- package/edit/harvesterhci.io.managedchart/rancher-monitoring.vue +0 -172
- package/edit/harvesterhci.io.networkattachmentdefinition.vue +0 -210
- package/edit/harvesterhci.io.setting/additional-ca.vue +0 -36
- package/edit/harvesterhci.io.setting/backup-target.vue +0 -182
- package/edit/harvesterhci.io.setting/http-proxy.vue +0 -79
- package/edit/harvesterhci.io.setting/index.vue +0 -201
- package/edit/harvesterhci.io.setting/overcommit-config.vue +0 -94
- package/edit/harvesterhci.io.setting/ssl-certificates.vue +0 -117
- package/edit/harvesterhci.io.setting/ssl-parameters.vue +0 -161
- package/edit/harvesterhci.io.setting/support-bundle-image.vue +0 -134
- package/edit/harvesterhci.io.setting/support-bundle-namespaces.vue +0 -73
- package/edit/harvesterhci.io.setting/vip-pools.vue +0 -244
- package/edit/harvesterhci.io.setting/vm-force-reset-policy.vue +0 -81
- package/edit/harvesterhci.io.virtualmachinebackup.vue +0 -256
- package/edit/harvesterhci.io.virtualmachineimage.vue +0 -364
- package/edit/harvesterhci.io.virtualmachinetemplateversion.vue +0 -340
- package/edit/harvesterhci.io.volume.vue +0 -195
- package/edit/kubevirt.io.virtualmachine/VirtualMachineAccessCredentials/AccessCredentialsUsers.vue +0 -190
- package/edit/kubevirt.io.virtualmachine/VirtualMachineAccessCredentials/index.vue +0 -212
- package/edit/kubevirt.io.virtualmachine/VirtualMachineAccessCredentials/type/basicAuth.vue +0 -94
- package/edit/kubevirt.io.virtualmachine/VirtualMachineAccessCredentials/type/sshkey.vue +0 -85
- package/edit/kubevirt.io.virtualmachine/VirtualMachineCloudConfig/DataTemplate.vue +0 -153
- package/edit/kubevirt.io.virtualmachine/VirtualMachineCloudConfig/index.vue +0 -279
- package/edit/kubevirt.io.virtualmachine/VirtualMachineCpuMemory.vue +0 -113
- package/edit/kubevirt.io.virtualmachine/VirtualMachineNetwork/__tests__/HarvesterEditNetwork.test.ts +0 -41
- package/edit/kubevirt.io.virtualmachine/VirtualMachineNetwork/base.vue +0 -281
- package/edit/kubevirt.io.virtualmachine/VirtualMachineNetwork/index.vue +0 -142
- package/edit/kubevirt.io.virtualmachine/VirtualMachineReserved.vue +0 -54
- package/edit/kubevirt.io.virtualmachine/VirtualMachineSSHKey.vue +0 -256
- package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/index.vue +0 -391
- package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/__tests__/HarvesterEditContainer.test.ts +0 -40
- package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/__tests__/HarvesterEditExisting.test.ts +0 -102
- package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/__tests__/HarvesterEditVMImage.test.ts +0 -117
- package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/__tests__/HarvesterEditVolume.test.ts +0 -74
- package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/container.vue +0 -132
- package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/existing.vue +0 -303
- package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/vmImage.vue +0 -285
- package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/volume.vue +0 -188
- package/edit/kubevirt.io.virtualmachine/index.vue +0 -642
- package/edit/network.harvesterhci.io.clusternetwork/index.vue +0 -19
- package/edit/network.harvesterhci.io.clusternetwork/vlan.vue +0 -134
- package/edit/workload/types/Deployment.vue +0 -377
- package/edit/workload/types/Generic.vue +0 -295
- package/list/harvesterhci.io.cloudtemplate.vue +0 -78
- package/list/harvesterhci.io.dashboard/HarvesterUpgrade.vue +0 -211
- package/list/harvesterhci.io.dashboard/UpgradeInfo.vue +0 -40
- package/list/harvesterhci.io.dashboard/index.vue +0 -752
- package/list/harvesterhci.io.host/index.vue +0 -186
- package/list/harvesterhci.io.networkattachmentdefinition.vue +0 -167
- package/list/harvesterhci.io.setting.vue +0 -241
- package/list/harvesterhci.io.virtualmachinebackup.vue +0 -172
- package/list/harvesterhci.io.virtualmachineimage.vue +0 -80
- package/list/harvesterhci.io.virtualmachinetemplateversion.vue +0 -173
- package/list/harvesterhci.io.volume.vue +0 -122
- package/list/kubevirt.io.virtualmachine.vue +0 -193
- package/mixins/harvester-vm/impl.js +0 -267
- package/mixins/harvester-vm/index.js +0 -1357
- package/models/harvester/configmap.js +0 -32
- package/models/harvester/harvesterhci.io.blockdevice.js +0 -55
- package/models/harvester/harvesterhci.io.keypair.js +0 -12
- package/models/harvester/harvesterhci.io.setting.js +0 -127
- package/models/harvester/harvesterhci.io.supportbundle.js +0 -35
- package/models/harvester/harvesterhci.io.upgrade.js +0 -226
- package/models/harvester/harvesterhci.io.virtualmachinebackup.js +0 -116
- package/models/harvester/harvesterhci.io.virtualmachineimage.js +0 -255
- package/models/harvester/harvesterhci.io.virtualmachinerestore.js +0 -43
- package/models/harvester/harvesterhci.io.virtualmachinetemplate.js +0 -69
- package/models/harvester/harvesterhci.io.virtualmachinetemplateversion.js +0 -227
- package/models/harvester/k8s.cni.cncf.io.networkattachmentdefinition.js +0 -32
- package/models/harvester/kubevirt.io.virtualmachine.js +0 -850
- package/models/harvester/kubevirt.io.virtualmachineinstance.js +0 -142
- package/models/harvester/management.cattle.io.managedchart.js +0 -191
- package/models/harvester/management.cattle.io.setting.js +0 -40
- package/models/harvester/network.harvesterhci.io.clusternetwork.js +0 -100
- package/models/harvester/network.harvesterhci.io.nodenetwork.js +0 -34
- package/models/harvester/node.js +0 -255
- package/models/harvester/persistentvolumeclaim.js +0 -166
- package/models/harvester/pod.js +0 -185
- package/pages/c/_cluster/harvester/airgapupgrade/index.vue +0 -309
- package/pages/c/_cluster/harvester/console/_uid/serial.vue +0 -51
- package/pages/c/_cluster/harvester/console/_uid/vnc.vue +0 -52
- package/pages/c/_cluster/harvester/index.vue +0 -24
- package/pages/c/_cluster/harvester/support/index.vue +0 -154
- package/pkg/model-loader.lib.js +0 -3
- package/promptRemove/kubevirt.io.virtualmachine.vue +0 -164
- package/store/harvester-common.js +0 -126
- package/utils/validators/vm-datavolumes.js +0 -38
- package/utils/validators/vm-image.js +0 -32
- package/utils/validators/vm.js +0 -221
package/layouts/default.vue
CHANGED
|
@@ -16,19 +16,20 @@ import FixedBanner from '@shell/components/FixedBanner';
|
|
|
16
16
|
import AwsComplianceBanner from '@shell/components/AwsComplianceBanner';
|
|
17
17
|
import AzureWarning from '@shell/components/auth/AzureWarning';
|
|
18
18
|
import {
|
|
19
|
-
COUNT, SCHEMA, MANAGEMENT, UI, CATALOG
|
|
19
|
+
COUNT, SCHEMA, MANAGEMENT, UI, CATALOG
|
|
20
20
|
} from '@shell/config/types';
|
|
21
21
|
import { BASIC, FAVORITE, USED } from '@shell/store/type-map';
|
|
22
22
|
import { addObjects, replaceWith, clear, addObject } from '@shell/utils/array';
|
|
23
23
|
import { NAME as EXPLORER } from '@shell/config/product/explorer';
|
|
24
24
|
import { NAME as NAVLINKS } from '@shell/config/product/navlinks';
|
|
25
|
-
import {
|
|
25
|
+
import { HARVESTER_NAME as HARVESTER } from '@shell/config/product/harvester-manager';
|
|
26
26
|
import isEqual from 'lodash/isEqual';
|
|
27
27
|
import { ucFirst } from '@shell/utils/string';
|
|
28
28
|
import { getVersionInfo, markSeenReleaseNotes } from '@shell/utils/version';
|
|
29
29
|
import { sortBy } from '@shell/utils/sort';
|
|
30
30
|
import PageHeaderActions from '@shell/mixins/page-actions';
|
|
31
31
|
import BrowserTabVisibility from '@shell/mixins/browser-tab-visibility';
|
|
32
|
+
import { getProductFromRoute } from '@shell/middleware/authenticated';
|
|
32
33
|
|
|
33
34
|
const SET_LOGIN_ACTION = 'set-as-login';
|
|
34
35
|
|
|
@@ -51,15 +52,19 @@ export default {
|
|
|
51
52
|
|
|
52
53
|
mixins: [PageHeaderActions, Brand, BrowserTabVisibility],
|
|
53
54
|
|
|
55
|
+
// Note - This will not run on route change
|
|
54
56
|
data() {
|
|
55
57
|
return {
|
|
56
|
-
groups:
|
|
57
|
-
gettingGroups:
|
|
58
|
-
wantNavSync:
|
|
58
|
+
groups: [],
|
|
59
|
+
gettingGroups: false,
|
|
60
|
+
wantNavSync: false,
|
|
59
61
|
};
|
|
60
62
|
},
|
|
61
63
|
|
|
62
|
-
|
|
64
|
+
// Note - These will run on route change
|
|
65
|
+
middleware: [
|
|
66
|
+
'authenticated'
|
|
67
|
+
],
|
|
63
68
|
|
|
64
69
|
computed: {
|
|
65
70
|
...mapState(['managementReady', 'clusterReady']),
|
|
@@ -98,7 +103,7 @@ export default {
|
|
|
98
103
|
},
|
|
99
104
|
|
|
100
105
|
allSchemas() {
|
|
101
|
-
const managementReady = this
|
|
106
|
+
const managementReady = this.managementReady;
|
|
102
107
|
const product = this.$store.getters['currentProduct'];
|
|
103
108
|
|
|
104
109
|
if ( !managementReady || !product ) {
|
|
@@ -117,7 +122,7 @@ export default {
|
|
|
117
122
|
},
|
|
118
123
|
|
|
119
124
|
counts() {
|
|
120
|
-
const managementReady = this
|
|
125
|
+
const managementReady = this.managementReady;
|
|
121
126
|
const product = this.$store.getters['currentProduct'];
|
|
122
127
|
|
|
123
128
|
if ( !managementReady || !product ) {
|
|
@@ -143,14 +148,12 @@ export default {
|
|
|
143
148
|
},
|
|
144
149
|
|
|
145
150
|
displayVersion() {
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
if (this.isVirtualProduct && this.isSingleProduct) {
|
|
149
|
-
const setting = this.$store.getters['harvester/byId'](HCI.SETTING, 'server-version');
|
|
150
|
-
|
|
151
|
-
displayVersion = setting?.value || 'unknown';
|
|
151
|
+
if (this.isSingleProduct?.getVersionInfo) {
|
|
152
|
+
return this.isSingleProduct?.getVersionInfo(this.$store);
|
|
152
153
|
}
|
|
153
154
|
|
|
155
|
+
const { displayVersion } = getVersionInfo(this.$store);
|
|
156
|
+
|
|
154
157
|
return displayVersion;
|
|
155
158
|
},
|
|
156
159
|
|
|
@@ -167,32 +170,54 @@ export default {
|
|
|
167
170
|
},
|
|
168
171
|
|
|
169
172
|
supportLink() {
|
|
170
|
-
const product = this.$store.getters['currentProduct']
|
|
173
|
+
const product = this.$store.getters['currentProduct'];
|
|
174
|
+
|
|
175
|
+
if (product?.supportRoute) {
|
|
176
|
+
return { ...product.supportRoute, params: { ...product.supportRoute.params, cluster: this.clusterId } };
|
|
177
|
+
}
|
|
171
178
|
|
|
172
|
-
return { name: `c-cluster-${ product }-support` };
|
|
179
|
+
return { name: `c-cluster-${ product?.name }-support` };
|
|
173
180
|
},
|
|
174
181
|
|
|
175
182
|
unmatchedRoute() {
|
|
176
183
|
return !this.$route?.matched?.length;
|
|
177
|
-
}
|
|
184
|
+
},
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* When navigation involves unloading one cluster and loading another, clusterReady toggles from true->false->true in middleware (before new route content renders)
|
|
188
|
+
* Prevent rendering "outlet" until the route changes to avoid re-rendering old route content after its cluster is unloaded
|
|
189
|
+
*/
|
|
190
|
+
clusterAndRouteReady() {
|
|
191
|
+
return this.clusterReady &&
|
|
192
|
+
this.clusterId === this.$route?.params?.cluster &&
|
|
193
|
+
this.currentProduct?.name === getProductFromRoute(this.$route);
|
|
194
|
+
},
|
|
178
195
|
|
|
179
196
|
},
|
|
180
197
|
|
|
181
198
|
watch: {
|
|
182
|
-
counts() {
|
|
183
|
-
|
|
199
|
+
counts(a, b) {
|
|
200
|
+
if ( a !== b ) {
|
|
201
|
+
this.queueUpdate();
|
|
202
|
+
}
|
|
184
203
|
},
|
|
185
204
|
|
|
186
|
-
allSchemas() {
|
|
187
|
-
|
|
205
|
+
allSchemas(a, b) {
|
|
206
|
+
if ( a !== b ) {
|
|
207
|
+
this.queueUpdate();
|
|
208
|
+
}
|
|
188
209
|
},
|
|
189
210
|
|
|
190
|
-
allNavLinks() {
|
|
191
|
-
|
|
211
|
+
allNavLinks(a, b) {
|
|
212
|
+
if ( a !== b ) {
|
|
213
|
+
this.queueUpdate();
|
|
214
|
+
}
|
|
192
215
|
},
|
|
193
216
|
|
|
194
|
-
favoriteTypes() {
|
|
195
|
-
|
|
217
|
+
favoriteTypes(a, b) {
|
|
218
|
+
if ( !isEqual(a, b) ) {
|
|
219
|
+
this.queueUpdate();
|
|
220
|
+
}
|
|
196
221
|
},
|
|
197
222
|
|
|
198
223
|
locale(a, b) {
|
|
@@ -315,7 +340,6 @@ export default {
|
|
|
315
340
|
if ( this.gettingGroups ) {
|
|
316
341
|
return;
|
|
317
342
|
}
|
|
318
|
-
|
|
319
343
|
this.gettingGroups = true;
|
|
320
344
|
|
|
321
345
|
if ( !this.clusterReady ) {
|
|
@@ -370,6 +394,7 @@ export default {
|
|
|
370
394
|
|
|
371
395
|
for ( const mode of modes ) {
|
|
372
396
|
const types = this.$store.getters['type-map/allTypes'](productId, mode) || {};
|
|
397
|
+
|
|
373
398
|
const more = this.$store.getters['type-map/getTree'](productId, mode, types, clusterId, namespaceMode, namespaces, currentType);
|
|
374
399
|
|
|
375
400
|
if ( productId === EXPLORER || !this.isExplorer ) {
|
|
@@ -615,7 +640,7 @@ export default {
|
|
|
615
640
|
{{ displayVersion }}
|
|
616
641
|
</div>
|
|
617
642
|
</nav>
|
|
618
|
-
<main v-if="
|
|
643
|
+
<main v-if="clusterAndRouteReady">
|
|
619
644
|
<nuxt class="outlet" />
|
|
620
645
|
<ActionMenu />
|
|
621
646
|
<PromptRemove />
|
package/layouts/error.vue
CHANGED
|
@@ -35,7 +35,11 @@ export default {
|
|
|
35
35
|
return;
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
-
|
|
38
|
+
// Avoid scenarios where the 404 error will blip up whilst the authenticated middleware is determining if there's an alternative valid
|
|
39
|
+
// route
|
|
40
|
+
setTimeout(() => {
|
|
41
|
+
this.ready = true;
|
|
42
|
+
}, 1000);
|
|
39
43
|
},
|
|
40
44
|
|
|
41
45
|
head() {
|
package/layouts/home.vue
CHANGED
|
@@ -7,6 +7,7 @@ import { mapPref, DEV } from '@shell/store/prefs';
|
|
|
7
7
|
import AwsComplianceBanner from '@shell/components/AwsComplianceBanner';
|
|
8
8
|
import AzureWarning from '@shell/components/auth/AzureWarning';
|
|
9
9
|
import BrowserTabVisibility from '@shell/mixins/browser-tab-visibility';
|
|
10
|
+
import { mapState } from 'vuex';
|
|
10
11
|
|
|
11
12
|
export default {
|
|
12
13
|
|
|
@@ -29,7 +30,10 @@ export default {
|
|
|
29
30
|
};
|
|
30
31
|
},
|
|
31
32
|
|
|
32
|
-
computed: {
|
|
33
|
+
computed: {
|
|
34
|
+
dev: mapPref(DEV),
|
|
35
|
+
...mapState(['managementReady']),
|
|
36
|
+
},
|
|
33
37
|
|
|
34
38
|
methods: {
|
|
35
39
|
toggleTheme() {
|
|
@@ -47,7 +51,7 @@ export default {
|
|
|
47
51
|
<AzureWarning />
|
|
48
52
|
|
|
49
53
|
<div class="dashboard-content">
|
|
50
|
-
<Header :simple="true" />
|
|
54
|
+
<Header v-if="managementReady" :simple="true" />
|
|
51
55
|
|
|
52
56
|
<main>
|
|
53
57
|
<nuxt class="outlet" />
|
|
@@ -3,16 +3,19 @@ import BrandImage from '@shell/components/BrandImage';
|
|
|
3
3
|
import TypeDescription from '@shell/components/TypeDescription';
|
|
4
4
|
import ResourceTable from '@shell/components/ResourceTable';
|
|
5
5
|
import Masthead from '@shell/components/ResourceList/Masthead';
|
|
6
|
-
import
|
|
7
|
-
import {
|
|
6
|
+
import Loading from '@shell/components/Loading';
|
|
7
|
+
import { HARVESTER_NAME as VIRTUAL } from '@shell/config/product/harvester-manager';
|
|
8
|
+
import { CAPI, HCI, MANAGEMENT } from '@shell/config/types';
|
|
8
9
|
import { isHarvesterCluster } from '@shell/utils/cluster';
|
|
10
|
+
import { allHash } from '@shell/utils/promise';
|
|
9
11
|
|
|
10
12
|
export default {
|
|
11
13
|
components: {
|
|
12
14
|
BrandImage,
|
|
13
15
|
ResourceTable,
|
|
14
16
|
Masthead,
|
|
15
|
-
TypeDescription
|
|
17
|
+
TypeDescription,
|
|
18
|
+
Loading
|
|
16
19
|
},
|
|
17
20
|
|
|
18
21
|
props: {
|
|
@@ -22,14 +25,30 @@ export default {
|
|
|
22
25
|
},
|
|
23
26
|
},
|
|
24
27
|
|
|
28
|
+
async fetch() {
|
|
29
|
+
const inStore = this.$store.getters['currentProduct'].inStore;
|
|
30
|
+
|
|
31
|
+
const hash = await allHash({
|
|
32
|
+
hciClusters: this.$store.dispatch(`${ inStore }/findAll`, { type: HCI.CLUSTER }),
|
|
33
|
+
mgmtClusters: this.$store.dispatch(`${ inStore }/findAll`, { type: MANAGEMENT.CLUSTER })
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
this.hciClusters = hash.hciClusters;
|
|
37
|
+
this.mgmtClusters = hash.mgmtClusters;
|
|
38
|
+
},
|
|
39
|
+
|
|
25
40
|
data() {
|
|
26
41
|
const resource = CAPI.RANCHER_CLUSTER;
|
|
27
42
|
|
|
28
43
|
return {
|
|
44
|
+
navigating: false,
|
|
29
45
|
VIRTUAL,
|
|
46
|
+
hciDashboard: HCI.DASHBOARD,
|
|
30
47
|
resource,
|
|
31
|
-
hResource:
|
|
32
|
-
realSchema:
|
|
48
|
+
hResource: HCI.CLUSTER,
|
|
49
|
+
realSchema: this.$store.getters['management/schemaFor'](CAPI.RANCHER_CLUSTER),
|
|
50
|
+
hciClusters: [],
|
|
51
|
+
mgmtClusters: []
|
|
33
52
|
};
|
|
34
53
|
},
|
|
35
54
|
|
|
@@ -51,16 +70,8 @@ export default {
|
|
|
51
70
|
},
|
|
52
71
|
|
|
53
72
|
rows() {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
const manageClusters = this.$store.getters[`${ inStore }/all`](MANAGEMENT.CLUSTER);
|
|
57
|
-
|
|
58
|
-
return clusters.filter((c) => {
|
|
59
|
-
const cluster = manageClusters.find(cluster => cluster?.metadata?.name === c?.status?.clusterName);
|
|
60
|
-
|
|
61
|
-
if (cluster?.status?.provider && cluster?.status?.provider !== VIRTUAL_HARVESTER_PROVIDER) {
|
|
62
|
-
return false;
|
|
63
|
-
}
|
|
73
|
+
return this.hciClusters.filter((c) => {
|
|
74
|
+
const cluster = this.mgmtClusters.find(cluster => cluster?.metadata?.name === c?.status?.clusterName);
|
|
64
75
|
|
|
65
76
|
return isHarvesterCluster(cluster);
|
|
66
77
|
});
|
|
@@ -69,12 +80,33 @@ export default {
|
|
|
69
80
|
typeDisplay() {
|
|
70
81
|
return this.t(`typeLabel."${ HCI.CLUSTER }"`, { count: this.row?.length || 0 });
|
|
71
82
|
},
|
|
83
|
+
},
|
|
84
|
+
|
|
85
|
+
methods: {
|
|
86
|
+
async goToCluster(row) {
|
|
87
|
+
const timeout = setTimeout(() => {
|
|
88
|
+
// Don't show loading indicator for quickly fetched plugins
|
|
89
|
+
this.navigating = row.id;
|
|
90
|
+
}, 1000);
|
|
91
|
+
|
|
92
|
+
try {
|
|
93
|
+
await row.goToCluster();
|
|
94
|
+
|
|
95
|
+
clearTimeout(timeout);
|
|
96
|
+
this.navigating = false;
|
|
97
|
+
} catch {
|
|
98
|
+
// The error handling is carried out within goToCluster, but just in case something happens before the promise chain can catch it...
|
|
99
|
+
clearTimeout(timeout);
|
|
100
|
+
this.navigating = false;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
72
103
|
}
|
|
73
104
|
};
|
|
74
105
|
</script>
|
|
75
106
|
|
|
76
107
|
<template>
|
|
77
|
-
<
|
|
108
|
+
<Loading v-if="$fetchState.pending" />
|
|
109
|
+
<div v-else>
|
|
78
110
|
<Masthead
|
|
79
111
|
:schema="realSchema"
|
|
80
112
|
:resource="resource"
|
|
@@ -99,27 +131,17 @@ export default {
|
|
|
99
131
|
v-if="rows && rows.length"
|
|
100
132
|
:schema="schema"
|
|
101
133
|
:rows="rows"
|
|
102
|
-
:sub-rows="true"
|
|
103
134
|
:is-creatable="true"
|
|
104
135
|
:namespaced="false"
|
|
105
136
|
>
|
|
106
137
|
<template #col:name="{row}">
|
|
107
138
|
<td>
|
|
108
|
-
<span>
|
|
109
|
-
<
|
|
110
|
-
v-if="row.isReady"
|
|
111
|
-
:to="{
|
|
112
|
-
name: `c-cluster-${VIRTUAL}`,
|
|
113
|
-
params: {
|
|
114
|
-
cluster: row.status.clusterName,
|
|
115
|
-
}
|
|
116
|
-
}"
|
|
117
|
-
>
|
|
118
|
-
{{ row.nameDisplay }}
|
|
119
|
-
</n-link>
|
|
139
|
+
<span class="cluster-link">
|
|
140
|
+
<a v-if="row.isReady" class="link" :disabled="navigating" @click="goToCluster(row)">{{ row.nameDisplay }}</a>
|
|
120
141
|
<span v-else>
|
|
121
142
|
{{ row.nameDisplay }}
|
|
122
143
|
</span>
|
|
144
|
+
<i class="icon icon-spinner icon-spin ml-5" :class="{'navigating': navigating === row.id}" />
|
|
123
145
|
</span>
|
|
124
146
|
</td>
|
|
125
147
|
</template>
|
|
@@ -129,29 +151,43 @@ export default {
|
|
|
129
151
|
class="btn btn-sm role-primary"
|
|
130
152
|
:to="row.detailLocation"
|
|
131
153
|
>
|
|
132
|
-
{{ t('
|
|
154
|
+
{{ t('harvesterManager.manage') }}
|
|
133
155
|
</n-link>
|
|
134
156
|
</template>
|
|
135
157
|
</ResourceTable>
|
|
136
158
|
<div v-else>
|
|
137
159
|
<div class="no-clusters">
|
|
138
|
-
{{ t('
|
|
160
|
+
{{ t('harvesterManager.cluster.none') }}
|
|
139
161
|
</div>
|
|
140
162
|
<hr class="info-section" />
|
|
141
163
|
<div class="logo">
|
|
142
164
|
<BrandImage file-name="harvester.png" height="64" />
|
|
143
165
|
</div>
|
|
144
166
|
<div class="tagline">
|
|
145
|
-
<div>{{ t('
|
|
167
|
+
<div>{{ t('harvesterManager.cluster.description') }}</div>
|
|
146
168
|
</div>
|
|
147
169
|
<div class="tagline sub-tagline">
|
|
148
|
-
<div v-html="t('
|
|
170
|
+
<div v-html="t('harvesterManager.cluster.learnMore', {}, true)"></div>
|
|
149
171
|
</div>
|
|
150
172
|
</div>
|
|
151
173
|
</div>
|
|
152
174
|
</template>
|
|
153
175
|
|
|
154
176
|
<style lang="scss" scoped>
|
|
177
|
+
.cluster-link {
|
|
178
|
+
display: flex;
|
|
179
|
+
align-items: center;
|
|
180
|
+
|
|
181
|
+
.icon {
|
|
182
|
+
// Use visibility to avoid the columns re-adjusting when the icon is shown
|
|
183
|
+
visibility: hidden;
|
|
184
|
+
|
|
185
|
+
&.navigating {
|
|
186
|
+
visibility: visible;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
}
|
|
155
191
|
.no-clusters {
|
|
156
192
|
text-align: center;
|
|
157
193
|
}
|
|
@@ -178,4 +214,9 @@ export default {
|
|
|
178
214
|
text-align: center;
|
|
179
215
|
}
|
|
180
216
|
}
|
|
217
|
+
|
|
218
|
+
.link {
|
|
219
|
+
cursor: pointer;
|
|
220
|
+
}
|
|
221
|
+
|
|
181
222
|
</style>
|
package/list/namespace.vue
CHANGED
|
@@ -17,14 +17,12 @@ export default {
|
|
|
17
17
|
},
|
|
18
18
|
|
|
19
19
|
computed: {
|
|
20
|
-
...mapGetters(['
|
|
20
|
+
...mapGetters(['currentProduct']),
|
|
21
21
|
|
|
22
22
|
filterRow() {
|
|
23
|
-
if (this.
|
|
23
|
+
if (this.currentProduct.hideSystemResources) {
|
|
24
24
|
return this.rows.filter( (N) => {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
return !N.isSystem && !N.isFleetManaged && !isSettingSystemNamespace;
|
|
25
|
+
return !N.isSystem && !N.isFleetManaged;
|
|
28
26
|
});
|
|
29
27
|
} else {
|
|
30
28
|
return this.rows;
|
|
@@ -632,6 +632,7 @@ export default {
|
|
|
632
632
|
<div>
|
|
633
633
|
<Checkbox
|
|
634
634
|
v-model="value.httpEndpoint"
|
|
635
|
+
value-when-true="enabled"
|
|
635
636
|
:mode="mode"
|
|
636
637
|
:disabled="disabled"
|
|
637
638
|
:label="t('cluster.machineConfig.amazonEc2.httpEndpoint')"
|
|
@@ -640,6 +641,7 @@ export default {
|
|
|
640
641
|
<div>
|
|
641
642
|
<Checkbox
|
|
642
643
|
v-model="value.httpTokens"
|
|
644
|
+
value-when-true="required"
|
|
643
645
|
:mode="mode"
|
|
644
646
|
:disabled="!value.httpEndpoint || disabled"
|
|
645
647
|
:label="t('cluster.machineConfig.amazonEc2.httpTokens')"
|