@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
package/layouts/default.vue
CHANGED
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
<script>
|
|
2
2
|
import debounce from 'lodash/debounce';
|
|
3
3
|
import { mapState, mapGetters } from 'vuex';
|
|
4
|
-
import {
|
|
4
|
+
import {
|
|
5
|
+
mapPref,
|
|
6
|
+
FAVORITE_TYPES,
|
|
7
|
+
AFTER_LOGIN_ROUTE,
|
|
8
|
+
THEME_SHORTCUT
|
|
9
|
+
} from '@shell/store/prefs';
|
|
5
10
|
import ActionMenu from '@shell/components/ActionMenu';
|
|
6
11
|
import GrowlManager from '@shell/components/GrowlManager';
|
|
7
12
|
import WindowManager from '@shell/components/nav/WindowManager';
|
|
@@ -16,19 +21,20 @@ import FixedBanner from '@shell/components/FixedBanner';
|
|
|
16
21
|
import AwsComplianceBanner from '@shell/components/AwsComplianceBanner';
|
|
17
22
|
import AzureWarning from '@shell/components/auth/AzureWarning';
|
|
18
23
|
import {
|
|
19
|
-
COUNT, SCHEMA, MANAGEMENT, UI, CATALOG
|
|
24
|
+
COUNT, SCHEMA, MANAGEMENT, UI, CATALOG
|
|
20
25
|
} from '@shell/config/types';
|
|
21
26
|
import { BASIC, FAVORITE, USED } from '@shell/store/type-map';
|
|
22
27
|
import { addObjects, replaceWith, clear, addObject } from '@shell/utils/array';
|
|
23
28
|
import { NAME as EXPLORER } from '@shell/config/product/explorer';
|
|
24
29
|
import { NAME as NAVLINKS } from '@shell/config/product/navlinks';
|
|
25
|
-
import {
|
|
30
|
+
import { HARVESTER_NAME as HARVESTER } from '@shell/config/product/harvester-manager';
|
|
26
31
|
import isEqual from 'lodash/isEqual';
|
|
27
32
|
import { ucFirst } from '@shell/utils/string';
|
|
28
33
|
import { getVersionInfo, markSeenReleaseNotes } from '@shell/utils/version';
|
|
29
34
|
import { sortBy } from '@shell/utils/sort';
|
|
30
35
|
import PageHeaderActions from '@shell/mixins/page-actions';
|
|
31
36
|
import BrowserTabVisibility from '@shell/mixins/browser-tab-visibility';
|
|
37
|
+
import { getProductFromRoute } from '@shell/middleware/authenticated';
|
|
32
38
|
|
|
33
39
|
const SET_LOGIN_ACTION = 'set-as-login';
|
|
34
40
|
|
|
@@ -51,15 +57,20 @@ export default {
|
|
|
51
57
|
|
|
52
58
|
mixins: [PageHeaderActions, Brand, BrowserTabVisibility],
|
|
53
59
|
|
|
60
|
+
// Note - This will not run on route change
|
|
54
61
|
data() {
|
|
55
62
|
return {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
63
|
+
noLocaleShortcut: process.env.dev || false,
|
|
64
|
+
groups: [],
|
|
65
|
+
gettingGroups: false,
|
|
66
|
+
wantNavSync: false,
|
|
59
67
|
};
|
|
60
68
|
},
|
|
61
69
|
|
|
62
|
-
|
|
70
|
+
// Note - These will run on route change
|
|
71
|
+
middleware: [
|
|
72
|
+
'authenticated'
|
|
73
|
+
],
|
|
63
74
|
|
|
64
75
|
computed: {
|
|
65
76
|
...mapState(['managementReady', 'clusterReady']),
|
|
@@ -73,8 +84,8 @@ export default {
|
|
|
73
84
|
return this.$store.getters['activeNamespaceCache'];
|
|
74
85
|
},
|
|
75
86
|
|
|
76
|
-
|
|
77
|
-
favoriteTypes:
|
|
87
|
+
themeShortcut: mapPref(THEME_SHORTCUT),
|
|
88
|
+
favoriteTypes: mapPref(FAVORITE_TYPES),
|
|
78
89
|
|
|
79
90
|
pageActions() {
|
|
80
91
|
const pageActions = [];
|
|
@@ -98,7 +109,7 @@ export default {
|
|
|
98
109
|
},
|
|
99
110
|
|
|
100
111
|
allSchemas() {
|
|
101
|
-
const managementReady = this
|
|
112
|
+
const managementReady = this.managementReady;
|
|
102
113
|
const product = this.$store.getters['currentProduct'];
|
|
103
114
|
|
|
104
115
|
if ( !managementReady || !product ) {
|
|
@@ -117,7 +128,7 @@ export default {
|
|
|
117
128
|
},
|
|
118
129
|
|
|
119
130
|
counts() {
|
|
120
|
-
const managementReady = this
|
|
131
|
+
const managementReady = this.managementReady;
|
|
121
132
|
const product = this.$store.getters['currentProduct'];
|
|
122
133
|
|
|
123
134
|
if ( !managementReady || !product ) {
|
|
@@ -143,14 +154,12 @@ export default {
|
|
|
143
154
|
},
|
|
144
155
|
|
|
145
156
|
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';
|
|
157
|
+
if (this.isSingleProduct?.getVersionInfo) {
|
|
158
|
+
return this.isSingleProduct?.getVersionInfo(this.$store);
|
|
152
159
|
}
|
|
153
160
|
|
|
161
|
+
const { displayVersion } = getVersionInfo(this.$store);
|
|
162
|
+
|
|
154
163
|
return displayVersion;
|
|
155
164
|
},
|
|
156
165
|
|
|
@@ -167,32 +176,54 @@ export default {
|
|
|
167
176
|
},
|
|
168
177
|
|
|
169
178
|
supportLink() {
|
|
170
|
-
const product = this.$store.getters['currentProduct']
|
|
179
|
+
const product = this.$store.getters['currentProduct'];
|
|
171
180
|
|
|
172
|
-
|
|
181
|
+
if (product?.supportRoute) {
|
|
182
|
+
return { ...product.supportRoute, params: { ...product.supportRoute.params, cluster: this.clusterId } };
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
return { name: `c-cluster-${ product?.name }-support` };
|
|
173
186
|
},
|
|
174
187
|
|
|
175
188
|
unmatchedRoute() {
|
|
176
189
|
return !this.$route?.matched?.length;
|
|
177
|
-
}
|
|
190
|
+
},
|
|
191
|
+
|
|
192
|
+
/**
|
|
193
|
+
* When navigation involves unloading one cluster and loading another, clusterReady toggles from true->false->true in middleware (before new route content renders)
|
|
194
|
+
* Prevent rendering "outlet" until the route changes to avoid re-rendering old route content after its cluster is unloaded
|
|
195
|
+
*/
|
|
196
|
+
clusterAndRouteReady() {
|
|
197
|
+
return this.clusterReady &&
|
|
198
|
+
this.clusterId === this.$route?.params?.cluster &&
|
|
199
|
+
this.currentProduct?.name === getProductFromRoute(this.$route);
|
|
200
|
+
},
|
|
178
201
|
|
|
179
202
|
},
|
|
180
203
|
|
|
181
204
|
watch: {
|
|
182
|
-
counts() {
|
|
183
|
-
|
|
205
|
+
counts(a, b) {
|
|
206
|
+
if ( a !== b ) {
|
|
207
|
+
this.queueUpdate();
|
|
208
|
+
}
|
|
184
209
|
},
|
|
185
210
|
|
|
186
|
-
allSchemas() {
|
|
187
|
-
|
|
211
|
+
allSchemas(a, b) {
|
|
212
|
+
if ( a !== b ) {
|
|
213
|
+
this.queueUpdate();
|
|
214
|
+
}
|
|
188
215
|
},
|
|
189
216
|
|
|
190
|
-
allNavLinks() {
|
|
191
|
-
|
|
217
|
+
allNavLinks(a, b) {
|
|
218
|
+
if ( a !== b ) {
|
|
219
|
+
this.queueUpdate();
|
|
220
|
+
}
|
|
192
221
|
},
|
|
193
222
|
|
|
194
|
-
favoriteTypes() {
|
|
195
|
-
|
|
223
|
+
favoriteTypes(a, b) {
|
|
224
|
+
if ( !isEqual(a, b) ) {
|
|
225
|
+
this.queueUpdate();
|
|
226
|
+
}
|
|
196
227
|
},
|
|
197
228
|
|
|
198
229
|
locale(a, b) {
|
|
@@ -315,7 +346,6 @@ export default {
|
|
|
315
346
|
if ( this.gettingGroups ) {
|
|
316
347
|
return;
|
|
317
348
|
}
|
|
318
|
-
|
|
319
349
|
this.gettingGroups = true;
|
|
320
350
|
|
|
321
351
|
if ( !this.clusterReady ) {
|
|
@@ -370,6 +400,7 @@ export default {
|
|
|
370
400
|
|
|
371
401
|
for ( const mode of modes ) {
|
|
372
402
|
const types = this.$store.getters['type-map/allTypes'](productId, mode) || {};
|
|
403
|
+
|
|
373
404
|
const more = this.$store.getters['type-map/getTree'](productId, mode, types, clusterId, namespaceMode, namespaces, currentType);
|
|
374
405
|
|
|
375
406
|
if ( productId === EXPLORER || !this.isExplorer ) {
|
|
@@ -615,15 +646,15 @@ export default {
|
|
|
615
646
|
{{ displayVersion }}
|
|
616
647
|
</div>
|
|
617
648
|
</nav>
|
|
618
|
-
<main v-if="
|
|
649
|
+
<main v-if="clusterAndRouteReady">
|
|
619
650
|
<nuxt class="outlet" />
|
|
620
651
|
<ActionMenu />
|
|
621
652
|
<PromptRemove />
|
|
622
653
|
<PromptRestore />
|
|
623
654
|
<AssignTo />
|
|
624
655
|
<PromptModal />
|
|
625
|
-
<button v-if="
|
|
626
|
-
<button v-if="
|
|
656
|
+
<button v-if="noLocaleShortcut" v-shortkey.once="['shift','l']" class="hide" @shortkey="toggleNoneLocale()" />
|
|
657
|
+
<button v-if="themeShortcut" v-shortkey.once="['shift','t']" class="hide" @shortkey="toggleTheme()" />
|
|
627
658
|
<button v-shortkey.once="['f8']" class="hide" @shortkey="wheresMyDebugger()" />
|
|
628
659
|
<button v-shortkey.once="['`']" class="hide" @shortkey="toggleShell" />
|
|
629
660
|
</main>
|
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
|
@@ -3,10 +3,11 @@ import Header from '@shell/components/nav/Header';
|
|
|
3
3
|
import Brand from '@shell/mixins/brand';
|
|
4
4
|
import FixedBanner from '@shell/components/FixedBanner';
|
|
5
5
|
import GrowlManager from '@shell/components/GrowlManager';
|
|
6
|
-
import { mapPref,
|
|
6
|
+
import { mapPref, THEME_SHORTCUT } 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
|
|
|
@@ -25,16 +26,23 @@ export default {
|
|
|
25
26
|
data() {
|
|
26
27
|
return {
|
|
27
28
|
// Assume home pages have routes where the name is the key to use for string lookup
|
|
28
|
-
name:
|
|
29
|
+
name: this.$route.name,
|
|
30
|
+
noLocaleShortcut: process.env.dev || false
|
|
29
31
|
};
|
|
30
32
|
},
|
|
31
33
|
|
|
32
|
-
computed: {
|
|
34
|
+
computed: {
|
|
35
|
+
themeShortcut: mapPref(THEME_SHORTCUT),
|
|
36
|
+
...mapState(['managementReady']),
|
|
37
|
+
},
|
|
33
38
|
|
|
34
39
|
methods: {
|
|
35
40
|
toggleTheme() {
|
|
36
41
|
this.$store.dispatch('prefs/toggleTheme');
|
|
37
42
|
},
|
|
43
|
+
toggleNoneLocale() {
|
|
44
|
+
this.$store.dispatch('i18n/toggleNone');
|
|
45
|
+
},
|
|
38
46
|
}
|
|
39
47
|
|
|
40
48
|
};
|
|
@@ -47,7 +55,7 @@ export default {
|
|
|
47
55
|
<AzureWarning />
|
|
48
56
|
|
|
49
57
|
<div class="dashboard-content">
|
|
50
|
-
<Header :simple="true" />
|
|
58
|
+
<Header v-if="managementReady" :simple="true" />
|
|
51
59
|
|
|
52
60
|
<main>
|
|
53
61
|
<nuxt class="outlet" />
|
|
@@ -55,7 +63,8 @@ export default {
|
|
|
55
63
|
</div>
|
|
56
64
|
<FixedBanner :footer="true" />
|
|
57
65
|
<GrowlManager />
|
|
58
|
-
<button v-if="
|
|
66
|
+
<button v-if="themeShortcut" v-shortkey.once="['shift','t']" class="hide" @shortkey="toggleTheme()" />
|
|
67
|
+
<button v-if="noLocaleShortcut" v-shortkey.once="['shift','l']" class="hide" @shortkey="toggleNoneLocale()" />
|
|
59
68
|
</div>
|
|
60
69
|
</template>
|
|
61
70
|
|
package/layouts/plain.vue
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<script>
|
|
2
|
-
import { mapPref,
|
|
2
|
+
import { mapPref, THEME_SHORTCUT } from '@shell/store/prefs';
|
|
3
3
|
import ActionMenu from '@shell/components/ActionMenu';
|
|
4
4
|
import Header from '@shell/components/nav/Header';
|
|
5
5
|
import PromptRemove from '@shell/components/PromptRemove';
|
|
@@ -33,16 +33,20 @@ export default {
|
|
|
33
33
|
data() {
|
|
34
34
|
return {
|
|
35
35
|
// Assume home pages have routes where the name is the key to use for string lookup
|
|
36
|
-
name:
|
|
36
|
+
name: this.$route.name,
|
|
37
|
+
noLocaleShortcut: process.env.dev || false,
|
|
37
38
|
};
|
|
38
39
|
},
|
|
39
40
|
|
|
40
|
-
computed: {
|
|
41
|
+
computed: { themeShortcut: mapPref(THEME_SHORTCUT) },
|
|
41
42
|
|
|
42
43
|
methods: {
|
|
43
44
|
toggleTheme() {
|
|
44
45
|
this.$store.dispatch('prefs/toggleTheme');
|
|
45
|
-
}
|
|
46
|
+
},
|
|
47
|
+
toggleNoneLocale() {
|
|
48
|
+
this.$store.dispatch('i18n/toggleNone');
|
|
49
|
+
},
|
|
46
50
|
}
|
|
47
51
|
};
|
|
48
52
|
</script>
|
|
@@ -62,7 +66,8 @@ export default {
|
|
|
62
66
|
<ActionMenu />
|
|
63
67
|
<PromptRemove />
|
|
64
68
|
<AssignTo />
|
|
65
|
-
<button v-if="
|
|
69
|
+
<button v-if="themeShortcut" v-shortkey.once="['shift','t']" class="hide" @shortkey="toggleTheme()" />
|
|
70
|
+
<button v-if="noLocaleShortcut" v-shortkey.once="['shift','l']" class="hide" @shortkey="toggleNoneLocale()" />
|
|
66
71
|
</main>
|
|
67
72
|
</div>
|
|
68
73
|
|
|
@@ -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>
|
|
@@ -4,13 +4,13 @@ import { MANAGEMENT } from '@shell/config/types';
|
|
|
4
4
|
import { ALLOWED_SETTINGS } from '@shell/config/settings';
|
|
5
5
|
import { Banner } from '@components/Banner';
|
|
6
6
|
import Loading from '@shell/components/Loading';
|
|
7
|
-
import {
|
|
7
|
+
import { VIEW_IN_API } from '@shell/store/prefs';
|
|
8
8
|
|
|
9
9
|
export default {
|
|
10
10
|
components: { Banner, Loading },
|
|
11
11
|
|
|
12
12
|
async fetch() {
|
|
13
|
-
const
|
|
13
|
+
const viewInApi = this.$store.getters['prefs/get'](VIEW_IN_API);
|
|
14
14
|
const rows = await this.$store.dispatch(`management/findAll`, { type: MANAGEMENT.SETTING });
|
|
15
15
|
const t = this.$store.getters['i18n/t'];
|
|
16
16
|
// Map settings from array to object keyed by id
|
|
@@ -51,7 +51,7 @@ export default {
|
|
|
51
51
|
}
|
|
52
52
|
// There are only 2 actions that can be enabled - Edit Setting or View in API
|
|
53
53
|
// If neither is available for this setting then we hide the action menu button
|
|
54
|
-
s.hasActions = (!s.readOnly ||
|
|
54
|
+
s.hasActions = (!s.readOnly || viewInApi) && setting.availableActions?.length;
|
|
55
55
|
settings.push(s);
|
|
56
56
|
}
|
|
57
57
|
|
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;
|
|
@@ -149,7 +149,7 @@ export default {
|
|
|
149
149
|
<template #cell:explorer="{row}">
|
|
150
150
|
<span v-if="row.mgmt && row.mgmt.isHarvester"></span>
|
|
151
151
|
<n-link
|
|
152
|
-
v-else-if="row.mgmt && row.mgmt.isReady"
|
|
152
|
+
v-else-if="row.mgmt && row.mgmt.isReady && !row.hasError"
|
|
153
153
|
data-testid="cluster-manager-list-explore-management"
|
|
154
154
|
class="btn btn-sm role-secondary"
|
|
155
155
|
:to="{name: 'c-cluster', params: {cluster: row.mgmt.id}}"
|
|
@@ -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')"
|