@rancher/shell 0.1.2 → 0.1.4
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/dark/rancher-logo.svg +1 -148
- package/assets/brand/suse/rancher-logo.svg +1 -130
- package/assets/images/featured/img1.jpg +0 -0
- package/assets/images/featured.jpg +0 -0
- package/assets/images/generic-plugin.svg +7 -0
- package/assets/styles/themes/_dark.scss +3 -0
- package/assets/styles/themes/_light.scss +3 -0
- package/assets/styles/themes/_suse.scss +1 -1
- package/assets/translations/en-us.yaml +209 -813
- package/assets/translations/zh-hans.yaml +28 -792
- package/components/ActionMenu.vue +3 -3
- package/components/AsyncButton.vue +17 -2
- package/components/ButtonDropdown.vue +4 -0
- package/components/Carousel.vue +291 -0
- package/components/CodeMirror.vue +6 -8
- package/components/CommunityLinks.vue +70 -19
- package/components/ContainerResourceLimit.vue +14 -0
- package/components/CruResource.vue +11 -3
- package/components/Dialog.vue +102 -0
- package/components/ExplorerMembers.vue +121 -0
- package/components/ExplorerProjectsNamespaces.vue +404 -0
- package/components/GrafanaDashboard.vue +17 -2
- package/components/IconMessage.vue +9 -1
- package/components/LocaleSelector.vue +114 -0
- package/components/PromptModal.vue +2 -3
- package/components/ResourceList/index.vue +1 -1
- package/components/ResourceTable.vue +9 -7
- package/components/SimpleBox.vue +6 -4
- package/components/SingleClusterInfo.vue +1 -1
- package/components/SortableTable/index.vue +18 -25
- package/components/SortableTable/selection.js +1 -0
- package/components/Tabbed/Tab.vue +5 -0
- package/components/Tabbed/index.vue +29 -2
- package/components/auth/AzureWarning.vue +5 -1
- package/components/auth/Principal.vue +2 -1
- package/components/auth/RoleDetailEdit.vue +18 -11
- package/components/fleet/FleetBundles.vue +8 -3
- package/components/fleet/FleetRepos.vue +0 -2
- package/components/fleet/FleetSummary.vue +6 -0
- package/components/form/KeyValue.vue +80 -58
- package/components/form/NameNsDescription.vue +12 -8
- package/components/form/NodeScheduling.vue +1 -1
- package/components/form/ResourceTabs/index.vue +5 -1
- package/components/form/WorkloadPorts.vue +1 -1
- package/components/formatter/ClusterLink.vue +3 -7
- package/components/formatter/WorkloadHealthScale.vue +1 -1
- package/components/nav/Header.vue +9 -9
- package/components/nav/NamespaceFilter.vue +10 -7
- package/components/nav/TopLevelMenu.vue +10 -65
- package/components/nav/WindowManager/ContainerLogs.vue +1 -1
- package/config/footer.js +13 -14
- package/config/labels-annotations.js +2 -1
- package/config/product/explorer.js +5 -4
- package/config/product/harvester-manager.js +64 -2
- package/config/product/legacy.js +0 -47
- package/config/product/manager.js +9 -0
- package/config/product/multi-cluster-apps.js +0 -12
- package/config/product/settings.js +12 -1
- package/config/product/uiplugins.js +17 -0
- package/config/settings.js +37 -72
- package/config/table-headers.js +0 -1
- package/config/types.js +9 -25
- package/config/uiplugins.js +60 -0
- package/content/docs/en-us/getting-started.md +1 -26
- package/core/plugin-routes.ts +34 -22
- package/core/plugin.ts +15 -3
- package/core/plugins-loader.js +2 -0
- package/core/plugins.js +91 -36
- package/core/types.ts +7 -1
- package/detail/provisioning.cattle.io.cluster.vue +15 -2
- 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/dialog/DiagnosticTimingsDialog.vue +116 -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 +9 -3
- 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 +44 -6
- package/edit/management.cattle.io.project.vue +2 -2
- package/edit/namespace.vue +17 -10
- package/edit/networking.k8s.io.ingress/index.vue +2 -2
- package/edit/persistentvolume/index.vue +3 -0
- package/edit/persistentvolumeclaim.vue +1 -0
- package/edit/pod.vue +27 -0
- package/edit/provisioning.cattle.io.cluster/CustomCommand.vue +1 -1
- package/edit/provisioning.cattle.io.cluster/MachinePool.vue +33 -5
- package/edit/provisioning.cattle.io.cluster/rke2.vue +76 -5
- package/edit/service.vue +8 -6
- package/edit/workload/__tests__/Upgrading.test.ts +1 -0
- package/edit/workload/index.vue +375 -15
- package/edit/workload/mixins/workload.js +62 -7
- package/edit/workload/storage/ContainerMountPaths.vue +240 -0
- package/edit/workload/storage/Mount.vue +1 -0
- package/edit/workload/storage/awsElasticBlockStore.vue +20 -1
- package/edit/workload/storage/azureDisk.vue +22 -2
- package/edit/workload/storage/azureFile.vue +20 -2
- package/edit/workload/storage/csi/index.vue +23 -1
- package/edit/workload/storage/gcePersistentDisk.vue +20 -2
- package/edit/workload/storage/index.vue +23 -49
- package/edit/workload/storage/persistentVolumeClaim/persistentvolumeclaim.vue +1 -0
- package/edit/workload/storage/vsphereVolume.vue +11 -1
- package/layouts/default.vue +63 -32
- package/layouts/error.vue +5 -1
- package/layouts/home.vue +14 -5
- package/layouts/plain.vue +10 -5
- package/list/harvesterhci.io.management.cluster.vue +74 -33
- package/list/management.cattle.io.setting.vue +3 -3
- package/list/namespace.vue +3 -5
- package/list/provisioning.cattle.io.cluster.vue +1 -1
- package/machine-config/amazonec2.vue +2 -0
- package/machine-config/harvester.vue +100 -51
- package/middleware/authenticated.js +56 -52
- package/mixins/form-validation.js +1 -1
- package/mixins/resource-fetch.js +3 -1
- package/models/catalog.cattle.io.uiplugin.js +34 -0
- package/models/cluster/node.js +25 -2
- package/models/fleet.cattle.io.bundle.js +27 -20
- package/models/harvesterhci.io.management.cluster.js +200 -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 +16 -6
- package/models/workload.js +9 -246
- package/models/workload.service.js +314 -0
- package/nuxt.config.js +80 -34
- package/package.json +107 -108
- 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/apps/charts/index.vue +46 -1
- package/pages/c/_cluster/apps/charts/install.vue +10 -9
- package/pages/c/_cluster/explorer/index.vue +72 -9
- package/pages/c/_cluster/explorer/tools/index.vue +12 -5
- package/pages/c/_cluster/mcapps/index.vue +1 -1
- package/pages/c/_cluster/settings/brand.vue +0 -40
- package/pages/c/_cluster/settings/links.vue +200 -0
- package/pages/c/_cluster/settings/performance.vue +19 -16
- package/pages/c/_cluster/uiplugins/DeveloperInstallDialog.vue +232 -0
- package/pages/c/_cluster/uiplugins/InstallDialog.vue +242 -0
- package/pages/c/_cluster/uiplugins/PluginInfoPanel.vue +284 -0
- package/pages/c/_cluster/uiplugins/RemoveUIPlugins.vue +130 -0
- package/pages/c/_cluster/uiplugins/SetupUIPlugins.vue +253 -0
- package/pages/c/_cluster/uiplugins/UninstallDialog.vue +115 -0
- package/pages/c/_cluster/uiplugins/index.vue +694 -0
- package/pages/diagnostic.vue +185 -101
- package/pages/docs/_doc.vue +3 -1
- package/pages/fail-whale.vue +1 -10
- package/pages/home.vue +21 -56
- package/pages/index.vue +18 -4
- package/pages/prefs.vue +108 -86
- package/pages/safeMode.vue +17 -0
- package/pages/support/index.vue +23 -15
- package/pkg/auto-import.js +44 -7
- package/pkg/dynamic-importer.lib.js +4 -0
- 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 +12 -5
- package/plugins/formatters.js +15 -0
- package/plugins/plugin.js +56 -4
- package/plugins/steve/actions.js +1 -1
- package/plugins/steve/index.js +6 -4
- package/plugins/steve/mutations.js +1 -1
- package/plugins/steve/subscribe.js +89 -56
- package/plugins/steve/web-worker.steve-sub-worker.js +24 -15
- package/promptRemove/management.cattle.io.globalrole.vue +47 -0
- package/promptRemove/management.cattle.io.roletemplate.vue +47 -0
- package/promptRemove/mixin/roleDeletionCheck.js +97 -0
- 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 +11 -12
- package/scripts/serve-pkgs +17 -10
- package/scripts/sync-shell-deps +37 -0
- package/store/catalog.js +12 -9
- package/store/i18n.js +26 -12
- package/store/index.js +4 -181
- package/store/prefs.js +46 -2
- package/store/type-map.js +47 -33
- package/store/uiplugins.ts +15 -61
- package/utils/__tests__/object.test.ts +0 -24
- package/utils/__tests__/selector.test.ts +1 -1
- package/utils/cluster.js +1 -1
- package/utils/custom-validators.js +1 -12
- package/utils/dynamic-importer.js +5 -1
- package/utils/grafana.js +2 -6
- package/utils/socket.js +41 -20
- package/utils/string.js +1 -7
- package/utils/validators/formRules/__tests__/index.test.ts +108 -0
- package/utils/validators/formRules/index.ts +9 -1
- package/utils/validators/setting.js +0 -35
- package/yarn-error.log +195 -0
- 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/pages/plugins.vue +0 -387
- package/pkg/model-loader.lib.js +0 -3
- package/promptRemove/kubevirt.io.virtualmachine.vue +0 -164
- package/server/verdaccio-middleware.js +0 -56
- 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
|
@@ -58,6 +58,7 @@ export function init(store) {
|
|
|
58
58
|
'namespaces',
|
|
59
59
|
NODE,
|
|
60
60
|
VIRTUAL_TYPES.CLUSTER_MEMBERS,
|
|
61
|
+
EVENT,
|
|
61
62
|
], 'cluster');
|
|
62
63
|
basicType([
|
|
63
64
|
SERVICE,
|
|
@@ -142,6 +143,7 @@ export function init(store) {
|
|
|
142
143
|
configureType(NORMAN.PROJECT_ROLE_TEMPLATE_BINDING, { depaginate: true });
|
|
143
144
|
|
|
144
145
|
configureType(EVENT, { limit: 500 });
|
|
146
|
+
weightType(EVENT, -1, true);
|
|
145
147
|
|
|
146
148
|
// Allow Pods to be grouped by node
|
|
147
149
|
configureType(POD, {
|
|
@@ -158,13 +160,12 @@ export function init(store) {
|
|
|
158
160
|
|
|
159
161
|
setGroupDefaultType('serviceDiscovery', SERVICE);
|
|
160
162
|
|
|
161
|
-
configureType(
|
|
162
|
-
displayName: '
|
|
163
|
+
configureType(WORKLOAD, {
|
|
164
|
+
displayName: store.getters['i18n/t'](`typeLabel.${ WORKLOAD }`, { count: 1 }).trim(),
|
|
163
165
|
location: {
|
|
164
166
|
name: 'c-cluster-product-resource',
|
|
165
|
-
params: { resource:
|
|
167
|
+
params: { resource: WORKLOAD },
|
|
166
168
|
},
|
|
167
|
-
resource: WORKLOAD_TYPES.DEPLOYMENT
|
|
168
169
|
});
|
|
169
170
|
|
|
170
171
|
headers(PV, [STATE, NAME_COL, RECLAIM_POLICY, PERSISTENT_VOLUME_CLAIM, PERSISTENT_VOLUME_SOURCE, PV_REASON, AGE]);
|
|
@@ -3,9 +3,60 @@ import { HARVESTER, MULTI_CLUSTER } from '@shell/store/features';
|
|
|
3
3
|
import { DSL } from '@shell/store/type-map';
|
|
4
4
|
import { STATE, NAME as NAME_COL, AGE, VERSION } from '@shell/config/table-headers';
|
|
5
5
|
import { allHash } from '@shell/utils/promise';
|
|
6
|
+
import dynamicPluginLoader from '@shell/pkg/dynamic-plugin-loader';
|
|
7
|
+
import { BLANK_CLUSTER } from '@shell/store';
|
|
8
|
+
|
|
9
|
+
dynamicPluginLoader.register({
|
|
10
|
+
load: async({ route, store }) => {
|
|
11
|
+
// Check that we've either got here either
|
|
12
|
+
// - directly (page refresh/load -> have path but no name)
|
|
13
|
+
// - via router name (have name but no path)
|
|
14
|
+
let clusterId;
|
|
15
|
+
const pathParts = route.path.split('/');
|
|
16
|
+
|
|
17
|
+
if (pathParts?.[1] === HARVESTER_NAME && pathParts?.[3] ) {
|
|
18
|
+
clusterId = pathParts?.[3];
|
|
19
|
+
} else {
|
|
20
|
+
const nameParts = route.name?.split('-');
|
|
21
|
+
|
|
22
|
+
if (nameParts?.[0] === HARVESTER_NAME) {
|
|
23
|
+
clusterId = route.params?.cluster;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// If we have a cluster id, try to load the plugin via the harvester cluster's `loadClusterPlugin`
|
|
28
|
+
if (clusterId) {
|
|
29
|
+
const provClusters = await store.dispatch('management/findAll', { type: CAPI.RANCHER_CLUSTER });
|
|
30
|
+
const provCluster = provClusters.find(p => p.mgmt.id === clusterId);
|
|
31
|
+
|
|
32
|
+
if (provCluster) {
|
|
33
|
+
const harvCluster = await store.dispatch('management/create', {
|
|
34
|
+
...provCluster,
|
|
35
|
+
type: HCI.CLUSTER
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
if (harvCluster) {
|
|
39
|
+
try {
|
|
40
|
+
await harvCluster.loadClusterPlugin();
|
|
41
|
+
|
|
42
|
+
return route;
|
|
43
|
+
} catch (err) {
|
|
44
|
+
// If we've failed to load the harvester plugin nav to the harvester cluster list (probably got here from a bookmarked
|
|
45
|
+
// harvester instance that hasn't been updated to serve a plugin)
|
|
46
|
+
console.error('Failed to load harvester package: ', typeof error === 'object' ? JSON.stringify(err) : err); // eslint-disable-line no-console
|
|
47
|
+
|
|
48
|
+
return harvesterClustersLocation;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
});
|
|
6
55
|
|
|
7
56
|
export const NAME = 'harvesterManager';
|
|
8
57
|
|
|
58
|
+
export const HARVESTER_NAME = 'harvester';
|
|
59
|
+
|
|
9
60
|
const MACHINE_POOLS = {
|
|
10
61
|
name: 'summary',
|
|
11
62
|
labelKey: 'tableHeaders.machines',
|
|
@@ -16,6 +67,15 @@ const MACHINE_POOLS = {
|
|
|
16
67
|
width: 100,
|
|
17
68
|
};
|
|
18
69
|
|
|
70
|
+
const harvesterClustersLocation = {
|
|
71
|
+
name: 'c-cluster-product-resource',
|
|
72
|
+
params: {
|
|
73
|
+
cluster: BLANK_CLUSTER,
|
|
74
|
+
product: NAME,
|
|
75
|
+
resource: HCI.CLUSTER
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
|
|
19
79
|
export function init(store) {
|
|
20
80
|
const {
|
|
21
81
|
product,
|
|
@@ -33,6 +93,7 @@ export function init(store) {
|
|
|
33
93
|
removable: false,
|
|
34
94
|
showClusterSwitcher: false,
|
|
35
95
|
weight: 100,
|
|
96
|
+
to: harvesterClustersLocation,
|
|
36
97
|
});
|
|
37
98
|
|
|
38
99
|
configureType(HCI.CLUSTER, { showListMasthead: false });
|
|
@@ -41,7 +102,8 @@ export function init(store) {
|
|
|
41
102
|
NAME_COL,
|
|
42
103
|
{
|
|
43
104
|
...VERSION,
|
|
44
|
-
value:
|
|
105
|
+
value: 'kubernetesVersion',
|
|
106
|
+
getValue: row => row.kubernetesVersion
|
|
45
107
|
},
|
|
46
108
|
MACHINE_POOLS,
|
|
47
109
|
AGE,
|
|
@@ -54,7 +116,7 @@ export function init(store) {
|
|
|
54
116
|
]);
|
|
55
117
|
basicType([HCI.CLUSTER]);
|
|
56
118
|
spoofedType({
|
|
57
|
-
label: store.getters['i18n/t']('
|
|
119
|
+
label: store.getters['i18n/t']('harvesterManager.cluster.label'),
|
|
58
120
|
name: HCI.CLUSTER,
|
|
59
121
|
type: HCI.CLUSTER,
|
|
60
122
|
namespaced: false,
|
package/config/product/legacy.js
CHANGED
|
@@ -46,16 +46,6 @@ export function init(store) {
|
|
|
46
46
|
exact: true
|
|
47
47
|
});
|
|
48
48
|
|
|
49
|
-
virtualType({
|
|
50
|
-
labelKey: 'legacy.cis-scans',
|
|
51
|
-
name: 'v1-cis-scans',
|
|
52
|
-
group: 'Root',
|
|
53
|
-
namespaced: true,
|
|
54
|
-
weight: 111,
|
|
55
|
-
route: { name: 'c-cluster-legacy-pages-page', params: { page: 'cis' } },
|
|
56
|
-
exact: true
|
|
57
|
-
});
|
|
58
|
-
|
|
59
49
|
virtualType({
|
|
60
50
|
ifHave: IF_HAVE.PROJECT,
|
|
61
51
|
labelKey: 'legacy.project.label',
|
|
@@ -82,7 +72,6 @@ export function init(store) {
|
|
|
82
72
|
'v1-alerts',
|
|
83
73
|
'v1-catalogs',
|
|
84
74
|
'v1-notifiers',
|
|
85
|
-
'v1-cis-scans',
|
|
86
75
|
'v1-project-overview'
|
|
87
76
|
]);
|
|
88
77
|
|
|
@@ -121,17 +110,6 @@ export function init(store) {
|
|
|
121
110
|
overview: false,
|
|
122
111
|
});
|
|
123
112
|
|
|
124
|
-
virtualType({
|
|
125
|
-
ifHave: IF_HAVE.PROJECT,
|
|
126
|
-
labelKey: 'legacy.logging',
|
|
127
|
-
namespaced: true,
|
|
128
|
-
name: 'project-logging',
|
|
129
|
-
weight: 105,
|
|
130
|
-
route: { name: 'c-cluster-legacy-project-page', params: { page: 'logging' } },
|
|
131
|
-
exact: true,
|
|
132
|
-
overview: false,
|
|
133
|
-
});
|
|
134
|
-
|
|
135
113
|
virtualType({
|
|
136
114
|
ifHave: IF_HAVE.PROJECT,
|
|
137
115
|
labelKey: 'legacy.monitoring',
|
|
@@ -143,28 +121,6 @@ export function init(store) {
|
|
|
143
121
|
overview: false,
|
|
144
122
|
});
|
|
145
123
|
|
|
146
|
-
virtualType({
|
|
147
|
-
ifHave: IF_HAVE.PROJECT,
|
|
148
|
-
labelKey: 'legacy.istio',
|
|
149
|
-
namespaced: true,
|
|
150
|
-
name: 'project-istio',
|
|
151
|
-
weight: 105,
|
|
152
|
-
route: { name: 'c-cluster-legacy-project-page', params: { page: 'istio' } },
|
|
153
|
-
exact: true,
|
|
154
|
-
overview: false,
|
|
155
|
-
});
|
|
156
|
-
|
|
157
|
-
virtualType({
|
|
158
|
-
ifHave: IF_HAVE.PROJECT,
|
|
159
|
-
labelKey: 'legacy.pipelines',
|
|
160
|
-
namespaced: true,
|
|
161
|
-
name: 'project-pipelines',
|
|
162
|
-
weight: 104,
|
|
163
|
-
route: { name: 'c-cluster-legacy-project-pipelines' },
|
|
164
|
-
exact: true,
|
|
165
|
-
overview: false,
|
|
166
|
-
});
|
|
167
|
-
|
|
168
124
|
virtualType({
|
|
169
125
|
ifHave: IF_HAVE.PROJECT,
|
|
170
126
|
labelKey: 'legacy.secrets',
|
|
@@ -192,10 +148,7 @@ export function init(store) {
|
|
|
192
148
|
'project-alerts',
|
|
193
149
|
'project-catalogs',
|
|
194
150
|
'project-config-maps',
|
|
195
|
-
'project-logging',
|
|
196
|
-
'project-istio',
|
|
197
151
|
'project-monitoring',
|
|
198
|
-
'project-pipelines',
|
|
199
152
|
'project-secrets',
|
|
200
153
|
], 'Project');
|
|
201
154
|
}
|
|
@@ -7,6 +7,7 @@ import {
|
|
|
7
7
|
} from '@shell/config/types';
|
|
8
8
|
import { MULTI_CLUSTER } from '@shell/store/features';
|
|
9
9
|
import { DSL } from '@shell/store/type-map';
|
|
10
|
+
import { BLANK_CLUSTER } from '@shell/store';
|
|
10
11
|
|
|
11
12
|
export const NAME = 'manager';
|
|
12
13
|
|
|
@@ -28,6 +29,14 @@ export function init(store) {
|
|
|
28
29
|
icon: 'cluster-management',
|
|
29
30
|
removable: false,
|
|
30
31
|
showClusterSwitcher: false,
|
|
32
|
+
to: {
|
|
33
|
+
name: 'c-cluster-product-resource',
|
|
34
|
+
params: {
|
|
35
|
+
cluster: BLANK_CLUSTER,
|
|
36
|
+
product: NAME,
|
|
37
|
+
resource: CAPI.RANCHER_CLUSTER
|
|
38
|
+
}
|
|
39
|
+
},
|
|
31
40
|
});
|
|
32
41
|
|
|
33
42
|
virtualType({
|
|
@@ -20,17 +20,6 @@ export function init(store) {
|
|
|
20
20
|
showWorkspaceSwitcher: false,
|
|
21
21
|
});
|
|
22
22
|
|
|
23
|
-
virtualType({
|
|
24
|
-
labelKey: 'legacy.apps',
|
|
25
|
-
name: 'mc-apps',
|
|
26
|
-
group: 'Root',
|
|
27
|
-
namespaced: false,
|
|
28
|
-
weight: 112,
|
|
29
|
-
icon: 'folder',
|
|
30
|
-
route: { name: 'c-cluster-mcapps-pages-page', params: { cluster: 'local', page: 'apps' } },
|
|
31
|
-
exact: true
|
|
32
|
-
});
|
|
33
|
-
|
|
34
23
|
virtualType({
|
|
35
24
|
labelKey: 'legacy.catalogs',
|
|
36
25
|
name: 'mc-catalogs',
|
|
@@ -65,7 +54,6 @@ export function init(store) {
|
|
|
65
54
|
});
|
|
66
55
|
|
|
67
56
|
basicType([
|
|
68
|
-
'mc-apps',
|
|
69
57
|
'mc-catalogs',
|
|
70
58
|
'global-dns-entries',
|
|
71
59
|
'global-dns-providers',
|
|
@@ -90,12 +90,23 @@ export function init(store) {
|
|
|
90
90
|
route: { name: 'c-cluster-settings-performance' }
|
|
91
91
|
});
|
|
92
92
|
|
|
93
|
+
virtualType({
|
|
94
|
+
ifHaveType: MANAGEMENT.SETTING,
|
|
95
|
+
labelKey: 'customLinks.label',
|
|
96
|
+
name: 'links',
|
|
97
|
+
namespaced: false,
|
|
98
|
+
weight: 96,
|
|
99
|
+
icon: 'folder',
|
|
100
|
+
route: { name: 'c-cluster-settings-links' }
|
|
101
|
+
});
|
|
102
|
+
|
|
93
103
|
basicType([
|
|
94
104
|
'settings',
|
|
95
105
|
'features',
|
|
96
106
|
'brand',
|
|
97
107
|
'banners',
|
|
98
|
-
'performance'
|
|
108
|
+
'performance',
|
|
109
|
+
'links'
|
|
99
110
|
]);
|
|
100
111
|
|
|
101
112
|
configureType(MANAGEMENT.SETTING, {
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { DSL, IF_HAVE } from '@shell/store/type-map';
|
|
2
|
+
|
|
3
|
+
export const NAME = 'uiplugins';
|
|
4
|
+
|
|
5
|
+
export function init(store) {
|
|
6
|
+
const { product } = DSL(store, NAME);
|
|
7
|
+
|
|
8
|
+
// Add a product for UI Plugins - will appear in the top-level menu
|
|
9
|
+
product({
|
|
10
|
+
ifHave: IF_HAVE.ADMIN, // Only admins can see the UI Plugin Custom Resource by default
|
|
11
|
+
inStore: 'management',
|
|
12
|
+
icon: 'gear',
|
|
13
|
+
removable: false,
|
|
14
|
+
showClusterSwitcher: false,
|
|
15
|
+
category: 'configuration',
|
|
16
|
+
});
|
|
17
|
+
}
|
package/config/settings.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
// Settings
|
|
2
2
|
import { MANAGEMENT } from './types';
|
|
3
|
+
|
|
3
4
|
// Adapted from: https://github.com/rancher/ui/blob/08c379a9529f740666a704b52522a468986c3520/lib/shared/addon/utils/constants.js#L564
|
|
4
5
|
// Setting IDs
|
|
5
6
|
export const SETTING = {
|
|
@@ -15,12 +16,12 @@ export const SETTING = {
|
|
|
15
16
|
API_HOST: 'api-host',
|
|
16
17
|
CA_CERTS: 'cacerts',
|
|
17
18
|
|
|
18
|
-
// Allow the local
|
|
19
|
+
// Allow the local cluster to be hidden
|
|
19
20
|
HIDE_LOCAL_CLUSTER: 'hide-local-cluster',
|
|
20
21
|
AUTH_TOKEN_MAX_TTL_MINUTES: 'auth-token-max-ttl-minutes',
|
|
21
22
|
KUBECONFIG_GENERATE_TOKEN: 'kubeconfig-generate-token',
|
|
22
23
|
KUBECONFIG_TOKEN_TTL_MINUTES: 'kubeconfig-token-ttl-minutes',
|
|
23
|
-
KUBECONFIG_DEFAULT_TOKEN_TTL_MINUTES:
|
|
24
|
+
KUBECONFIG_DEFAULT_TOKEN_TTL_MINUTES: 'kubeconfig-default-token-ttl-minutes',
|
|
24
25
|
ENGINE_URL: 'engine-install-url',
|
|
25
26
|
ENGINE_ISO_URL: 'engine-iso-url',
|
|
26
27
|
FIRST_LOGIN: 'first-login',
|
|
@@ -33,9 +34,11 @@ export const SETTING = {
|
|
|
33
34
|
AUTH_USER_SESSION_TTL_MINUTES: 'auth-user-session-ttl-minutes',
|
|
34
35
|
AUTH_USER_INFO_RESYNC_CRON: 'auth-user-info-resync-cron',
|
|
35
36
|
AUTH_LOCAL_VALIDATE_DESC: 'auth-password-requirements-description',
|
|
37
|
+
CATTLE_PASSWORD_MIN_LENGTH: 'password-min-length',
|
|
36
38
|
CLUSTER_TEMPLATE_ENFORCEMENT: 'cluster-template-enforcement',
|
|
37
39
|
UI_INDEX: 'ui-index',
|
|
38
40
|
UI_DASHBOARD_INDEX: 'ui-dashboard-index',
|
|
41
|
+
UI_DASHBOARD_HARVESTER_LEGACY_PLUGIN: 'ui-dashboard-harvester-legacy-plugin',
|
|
39
42
|
UI_OFFLINE_PREFERRED: 'ui-offline-preferred',
|
|
40
43
|
SYSTEM_DEFAULT_REGISTRY: 'system-default-registry',
|
|
41
44
|
UI_ISSUES: 'ui-issues',
|
|
@@ -52,6 +55,7 @@ export const SETTING = {
|
|
|
52
55
|
COMMUNITY_LINKS: 'ui-community-links',
|
|
53
56
|
FAVICON: 'ui-favicon',
|
|
54
57
|
UI_PERFORMANCE: 'ui-performance',
|
|
58
|
+
UI_CUSTOM_LINKS: 'ui-custom-links',
|
|
55
59
|
/**
|
|
56
60
|
* Allow the backend to force a light/dark theme. Used in non-rancher world and results in the theme used
|
|
57
61
|
* both pre and post log in. If not present defaults to the usual process
|
|
@@ -63,11 +67,9 @@ export const SETTING = {
|
|
|
63
67
|
// These are the settings that are allowed to be edited via the UI
|
|
64
68
|
export const ALLOWED_SETTINGS = {
|
|
65
69
|
[SETTING.CA_CERTS]: { kind: 'multiline', readOnly: true },
|
|
66
|
-
// [SETTING.CLUSTER_DEFAULTS]: { kind: 'json' },
|
|
67
70
|
[SETTING.ENGINE_URL]: {},
|
|
68
71
|
[SETTING.ENGINE_ISO_URL]: {},
|
|
69
|
-
|
|
70
|
-
// [SETTING.ISSUES]: {},
|
|
72
|
+
[SETTING.CATTLE_PASSWORD_MIN_LENGTH]: { kind: 'integer' },
|
|
71
73
|
[SETTING.INGRESS_IP_DOMAIN]: {},
|
|
72
74
|
[SETTING.AUTH_USER_INFO_MAX_AGE_SECONDS]: {},
|
|
73
75
|
[SETTING.AUTH_USER_SESSION_TTL_MINUTES]: {},
|
|
@@ -78,7 +80,6 @@ export const ALLOWED_SETTINGS = {
|
|
|
78
80
|
[SETTING.AUTH_USER_INFO_RESYNC_CRON]: {},
|
|
79
81
|
[SETTING.SERVER_URL]: { kind: 'url', canReset: true },
|
|
80
82
|
[SETTING.RKE_METADATA_CONFIG]: { kind: 'json' },
|
|
81
|
-
// [SETTING.BANNERS]: { kind: 'json' },
|
|
82
83
|
[SETTING.SYSTEM_DEFAULT_REGISTRY]: {},
|
|
83
84
|
[SETTING.UI_INDEX]: {},
|
|
84
85
|
[SETTING.UI_DASHBOARD_INDEX]: {},
|
|
@@ -86,7 +87,7 @@ export const ALLOWED_SETTINGS = {
|
|
|
86
87
|
kind: 'enum',
|
|
87
88
|
options: ['dynamic', 'true', 'false']
|
|
88
89
|
},
|
|
89
|
-
[SETTING.BRAND]: {},
|
|
90
|
+
[SETTING.BRAND]: { canReset: true },
|
|
90
91
|
[SETTING.CLUSTER_TEMPLATE_ENFORCEMENT]: { kind: 'boolean' },
|
|
91
92
|
[SETTING.TELEMETRY]: {
|
|
92
93
|
kind: 'enum',
|
|
@@ -94,74 +95,19 @@ export const ALLOWED_SETTINGS = {
|
|
|
94
95
|
},
|
|
95
96
|
[SETTING.HIDE_LOCAL_CLUSTER]: { kind: 'boolean' },
|
|
96
97
|
};
|
|
97
|
-
|
|
98
|
-
export const
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
UI_INDEX: 'ui-index',
|
|
103
|
-
UPGRADE_CHECKER_ENABLED: 'upgrade-checker-enabled',
|
|
104
|
-
UPGRADE_CHECKER_URL: 'upgrade-checker-url',
|
|
105
|
-
VLAN: 'vlan',
|
|
106
|
-
UI_SOURCE: 'ui-source',
|
|
107
|
-
HTTP_PROXY: 'http-proxy',
|
|
108
|
-
ADDITIONAL_CA: 'additional-ca',
|
|
109
|
-
OVERCOMMIT_CONFIG: 'overcommit-config',
|
|
110
|
-
CLUSTER_REGISTRATION_URL: 'cluster-registration-url',
|
|
111
|
-
DEFAULT_STORAGE_CLASS: 'default-storage-class',
|
|
112
|
-
VIP: 'vip-pools',
|
|
113
|
-
SUPPORT_BUNDLE_TIMEOUT: 'support-bundle-timeout',
|
|
114
|
-
SUPPORT_BUNDLE_IMAGE: 'support-bundle-image',
|
|
115
|
-
VM_FORCE_RESET_POLICY: 'vm-force-reset-policy',
|
|
116
|
-
SSL_CERTIFICATES: 'ssl-certificates',
|
|
117
|
-
SSL_PARAMETERS: 'ssl-parameters',
|
|
118
|
-
SUPPORT_BUNDLE_NAMESPACES: 'support-bundle-namespaces',
|
|
119
|
-
AUTO_DISK_PROVISION_PATHS: 'auto-disk-provision-paths',
|
|
120
|
-
RANCHER_MONITORING: 'fleet-local/rancher-monitoring',
|
|
121
|
-
RELEASE_DOWNLOAD_URL: 'release-download-url'
|
|
122
|
-
};
|
|
123
|
-
export const HCI_ALLOWED_SETTINGS = {
|
|
124
|
-
[HCI_SETTING.BACKUP_TARGET]: { kind: 'json', from: 'import' },
|
|
125
|
-
[HCI_SETTING.LOG_LEVEL]: {
|
|
126
|
-
kind: 'enum',
|
|
127
|
-
options: ['info', 'debug', 'trace']
|
|
128
|
-
},
|
|
129
|
-
[HCI_SETTING.VLAN]: {
|
|
130
|
-
kind: 'custom', from: 'import', alias: 'vlan'
|
|
131
|
-
},
|
|
132
|
-
[HCI_SETTING.SERVER_VERSION]: { readOnly: true },
|
|
133
|
-
[HCI_SETTING.UPGRADE_CHECKER_ENABLED]: { kind: 'boolean' },
|
|
134
|
-
[HCI_SETTING.UPGRADE_CHECKER_URL]: { kind: 'url' },
|
|
135
|
-
[HCI_SETTING.HTTP_PROXY]: { kind: 'json', from: 'import' },
|
|
136
|
-
[HCI_SETTING.ADDITIONAL_CA]: {
|
|
137
|
-
kind: 'multiline', canReset: true, from: 'import'
|
|
138
|
-
},
|
|
139
|
-
[HCI_SETTING.OVERCOMMIT_CONFIG]: { kind: 'json', from: 'import' },
|
|
140
|
-
[HCI_SETTING.SUPPORT_BUNDLE_TIMEOUT]: {},
|
|
141
|
-
[HCI_SETTING.SUPPORT_BUNDLE_IMAGE]: { kind: 'json', from: 'import' },
|
|
142
|
-
[HCI_SETTING.VM_FORCE_RESET_POLICY]: { kind: 'json', from: 'import' },
|
|
143
|
-
[HCI_SETTING.SSL_CERTIFICATES]: { kind: 'json', from: 'import' },
|
|
144
|
-
[HCI_SETTING.VIP]: {
|
|
145
|
-
kind: 'json', from: 'import', canReset: true
|
|
146
|
-
},
|
|
147
|
-
[HCI_SETTING.SSL_PARAMETERS]: {
|
|
148
|
-
kind: 'json', from: 'import', canReset: true
|
|
149
|
-
},
|
|
150
|
-
[HCI_SETTING.SUPPORT_BUNDLE_NAMESPACES]: { from: 'import', canReset: true },
|
|
151
|
-
[HCI_SETTING.AUTO_DISK_PROVISION_PATHS]: { canReset: true },
|
|
152
|
-
[HCI_SETTING.RANCHER_MONITORING]: {
|
|
153
|
-
kind: 'custom', from: 'import', canReset: true, customFormatter: 'json', alias: 'harvester-monitoring'
|
|
98
|
+
|
|
99
|
+
export const DEFAULT_PERF_SETTING = {
|
|
100
|
+
incrementalLoading: {
|
|
101
|
+
enabled: true,
|
|
102
|
+
threshold: 1500,
|
|
154
103
|
},
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
[HCI_SETTING.UI_SOURCE]: {
|
|
159
|
-
kind: 'enum',
|
|
160
|
-
options: ['auto', 'external', 'bundled']
|
|
104
|
+
manualRefresh: {
|
|
105
|
+
enabled: false,
|
|
106
|
+
threshold: 1500,
|
|
161
107
|
},
|
|
162
|
-
|
|
163
|
-
[HCI_SETTING.CLUSTER_REGISTRATION_URL]: { kind: 'url' },
|
|
108
|
+
disableWebsocketNotification: true
|
|
164
109
|
};
|
|
110
|
+
|
|
165
111
|
export const fetchOrCreateSetting = async(store, id, val, save = true) => {
|
|
166
112
|
let setting;
|
|
167
113
|
|
|
@@ -181,6 +127,7 @@ export const fetchOrCreateSetting = async(store, id, val, save = true) => {
|
|
|
181
127
|
|
|
182
128
|
return setting;
|
|
183
129
|
};
|
|
130
|
+
|
|
184
131
|
export const setSetting = async(store, id, val) => {
|
|
185
132
|
const setting = await fetchOrCreateSetting(store, id, val, false);
|
|
186
133
|
|
|
@@ -189,3 +136,21 @@ export const setSetting = async(store, id, val) => {
|
|
|
189
136
|
|
|
190
137
|
return setting;
|
|
191
138
|
};
|
|
139
|
+
|
|
140
|
+
export const getPerformanceSetting = (rootGetters) => {
|
|
141
|
+
const perfSetting = rootGetters['management/byId'](MANAGEMENT.SETTING, SETTING.UI_PERFORMANCE);
|
|
142
|
+
let perfConfig = {};
|
|
143
|
+
|
|
144
|
+
if (perfSetting && perfSetting.value) {
|
|
145
|
+
try {
|
|
146
|
+
perfConfig = JSON.parse(perfSetting.value);
|
|
147
|
+
} catch (e) {
|
|
148
|
+
console.warn('ui-performance setting contains invalid data'); // eslint-disable-line no-console
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
// Start with the default and overwrite the values from the setting - ensures we have defaults for newly added options
|
|
153
|
+
perfConfig = Object.assign(DEFAULT_PERF_SETTING, perfConfig);
|
|
154
|
+
|
|
155
|
+
return perfConfig;
|
|
156
|
+
};
|
package/config/table-headers.js
CHANGED
package/config/types.js
CHANGED
|
@@ -51,6 +51,7 @@ export const NAMESPACE = 'namespace';
|
|
|
51
51
|
export const NODE = 'node';
|
|
52
52
|
export const NETWORK_POLICY = 'networking.k8s.io.networkpolicy';
|
|
53
53
|
export const POD = 'pod';
|
|
54
|
+
export const PSP = 'policy.podsecuritypolicy';
|
|
54
55
|
export const PV = 'persistentvolume';
|
|
55
56
|
export const PVC = 'persistentvolumeclaim';
|
|
56
57
|
export const RESOURCE_QUOTA = 'resourcequota';
|
|
@@ -79,7 +80,7 @@ export const WORKLOAD_TYPES = {
|
|
|
79
80
|
JOB: 'batch.job',
|
|
80
81
|
STATEFUL_SET: 'apps.statefulset',
|
|
81
82
|
REPLICA_SET: 'apps.replicaset',
|
|
82
|
-
REPLICATION_CONTROLLER: 'replicationcontroller'
|
|
83
|
+
REPLICATION_CONTROLLER: 'replicationcontroller',
|
|
83
84
|
};
|
|
84
85
|
|
|
85
86
|
const {
|
|
@@ -100,6 +101,9 @@ export const CATALOG = {
|
|
|
100
101
|
REPO: 'catalog.cattle.io.repo',
|
|
101
102
|
};
|
|
102
103
|
|
|
104
|
+
// UI Plugin type
|
|
105
|
+
export const UI_PLUGIN = 'catalog.cattle.io.uiplugin';
|
|
106
|
+
|
|
103
107
|
export const HELM = { PROJECTHELMCHART: 'helm.cattle.io.projecthelmchart' };
|
|
104
108
|
|
|
105
109
|
export const MONITORING = {
|
|
@@ -267,30 +271,10 @@ export const VIRTUAL_TYPES = {
|
|
|
267
271
|
|
|
268
272
|
// harvester
|
|
269
273
|
export const HCI = {
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
VM_VERSION: 'harvesterhci.io.virtualmachinetemplateversion',
|
|
275
|
-
IMAGE: 'harvesterhci.io.virtualmachineimage',
|
|
276
|
-
SSH: 'harvesterhci.io.keypair',
|
|
277
|
-
VOLUME: 'harvesterhci.io.volume',
|
|
278
|
-
USER: 'harvesterhci.io.user',
|
|
279
|
-
SETTING: 'harvesterhci.io.setting',
|
|
280
|
-
UPGRADE: 'harvesterhci.io.upgrade',
|
|
281
|
-
BACKUP: 'harvesterhci.io.virtualmachinebackup',
|
|
282
|
-
RESTORE: 'harvesterhci.io.virtualmachinerestore',
|
|
283
|
-
NODE_NETWORK: 'network.harvesterhci.io.nodenetwork',
|
|
284
|
-
CLUSTER_NETWORK: 'network.harvesterhci.io.clusternetwork',
|
|
285
|
-
SUPPORT_BUNDLE: 'harvesterhci.io.supportbundle',
|
|
286
|
-
NETWORK_ATTACHMENT: 'harvesterhci.io.networkattachmentdefinition',
|
|
287
|
-
CLUSTER: 'harvesterhci.io.management.cluster',
|
|
288
|
-
DASHBOARD: 'harvesterhci.io.dashboard',
|
|
289
|
-
BLOCK_DEVICE: 'harvesterhci.io.blockdevice',
|
|
290
|
-
CLOUD_TEMPLATE: 'harvesterhci.io.cloudtemplate',
|
|
291
|
-
HOST: 'harvesterhci.io.host',
|
|
292
|
-
VERSION: 'harvesterhci.io.version',
|
|
293
|
-
MANAGED_CHART: 'harvesterhci.io.managedchart',
|
|
274
|
+
CLUSTER: 'harvesterhci.io.management.cluster',
|
|
275
|
+
DASHBOARD: 'harvesterhci.io.dashboard',
|
|
276
|
+
IMAGE: 'harvesterhci.io.virtualmachineimage',
|
|
277
|
+
SETTING: 'harvesterhci.io.setting',
|
|
294
278
|
};
|
|
295
279
|
|
|
296
280
|
export const VIRTUAL_HARVESTER_PROVIDER = 'harvester';
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import semver from 'semver';
|
|
2
|
+
|
|
3
|
+
// Version of the plugin API supported
|
|
4
|
+
export const UI_PLUGIN_API_VERSION = '1.0.0';
|
|
5
|
+
|
|
6
|
+
export const UI_PLUGIN_BASE_URL = '/api/v1/namespaces/cattle-ui-plugin-system/services/http:ui-plugin-operator:80/proxy';
|
|
7
|
+
|
|
8
|
+
export const UI_PLUGIN_NAMESPACE = 'cattle-ui-plugin-system';
|
|
9
|
+
|
|
10
|
+
// Annotation name and value that indicate a chart is a UI plugin
|
|
11
|
+
export const UI_PLUGIN_ANNOTATION_NAME = 'catalog.cattle.io/ui-component';
|
|
12
|
+
export const UI_PLUGIN_ANNOTATION_VALUE = 'plugins';
|
|
13
|
+
|
|
14
|
+
export const UI_PLUGIN_OPERATOR_CRD_CHART_NAME = 'ui-plugin-operator-crd';
|
|
15
|
+
export const UI_PLUGIN_OPERATOR_CHART_NAME = 'ui-plugin-operator';
|
|
16
|
+
|
|
17
|
+
export const UI_PLUGIN_CHARTS = [
|
|
18
|
+
UI_PLUGIN_OPERATOR_CHART_NAME,
|
|
19
|
+
UI_PLUGIN_OPERATOR_CRD_CHART_NAME,
|
|
20
|
+
];
|
|
21
|
+
|
|
22
|
+
// Expected chart repo name for the UI Plugins operator
|
|
23
|
+
export const UI_PLUGIN_OPERATOR_REPO_NAME = 'rancher-charts';
|
|
24
|
+
|
|
25
|
+
// Info for the Helm Chart Repository that we will add
|
|
26
|
+
export const UI_PLUGINS_REPO_NAME = 'rancher-ui-plugins';
|
|
27
|
+
|
|
28
|
+
export const UI_PLUGINS_REPO_URL = 'https://github.com/rancher/ui-plugin-charts';
|
|
29
|
+
export const UI_PLUGINS_REPO_BRANCH = 'main';
|
|
30
|
+
|
|
31
|
+
// Plugin Metadata properties
|
|
32
|
+
const UI_PLUGIN_METADATA_API_VERSION = 'apiVersion';
|
|
33
|
+
|
|
34
|
+
export function isUIPlugin(chart) {
|
|
35
|
+
return !!chart?.versions.find((v) => {
|
|
36
|
+
return v.annotations && v.annotations[UI_PLUGIN_ANNOTATION_NAME] === UI_PLUGIN_ANNOTATION_VALUE;
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export function uiPluginHasAnnotation(chart, name, value) {
|
|
41
|
+
return !!chart?.versions.find((v) => {
|
|
42
|
+
return v.annotations && v.annotations[name] === value;
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// Should we load a plugin, based on the metadata returned by the backend?
|
|
47
|
+
export function shouldLoadPlugin(plugin) {
|
|
48
|
+
if (!plugin.name || !plugin.version || !plugin.endpoint) {
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// Plugin specified a required API version
|
|
53
|
+
const requiredAPI = plugin.metadata?.[UI_PLUGIN_METADATA_API_VERSION];
|
|
54
|
+
|
|
55
|
+
if (requiredAPI) {
|
|
56
|
+
return semver.satisfies(UI_PLUGIN_API_VERSION, requiredAPI);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
return true;
|
|
60
|
+
}
|