@rancher/shell 0.3.0 → 0.3.2
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/styles/global/_button.scss +5 -1
- package/assets/styles/global/_columns.scss +4 -0
- package/assets/styles/global/_gauges.scss +1 -1
- package/assets/styles/global/_layout.scss +5 -2
- package/assets/styles/global/_select.scss +1 -4
- package/assets/styles/themes/_dark.scss +5 -4
- package/assets/styles/themes/_light.scss +4 -3
- package/assets/styles/themes/_suse.scss +1 -1
- package/assets/styles/vendor/vue-select.scss +4 -3
- package/assets/translations/en-us.yaml +673 -73
- package/assets/translations/zh-hans.yaml +720 -207
- package/chart/monitoring/steps/uninstall-v1.vue +2 -2
- package/cloud-credential/azure.vue +23 -0
- package/cloud-credential/harvester.vue +25 -62
- package/cloud-credential/pnap.vue +80 -0
- package/components/.DS_Store +0 -0
- package/components/ActionMenu.vue +28 -7
- package/components/AdvancedSection.vue +9 -2
- package/components/Alert.vue +2 -2
- package/components/ButtonDropdown.vue +0 -2
- package/components/ButtonGroup.vue +1 -0
- package/components/CollapsibleCard.vue +0 -1
- package/components/CruResource.vue +41 -4
- package/components/DetailTop.vue +72 -4
- package/components/DisableAuthProviderModal.vue +106 -0
- package/{rancher-components/components/Utils/DraggableZone → components}/DraggableZone.vue +0 -0
- package/components/ExplorerMembers.vue +253 -30
- package/components/ExplorerProjectsNamespaces.vue +77 -33
- package/components/ExtensionPanel.vue +42 -0
- package/components/GrowlManager.vue +3 -3
- package/components/IconOrSvg.vue +178 -0
- package/components/LogItem.vue +69 -0
- package/components/PodSecurityAdmission.vue +302 -0
- package/components/PromptModal.vue +1 -0
- package/components/ResourceDetail/Masthead.vue +69 -4
- package/components/ResourceDetail/index.vue +12 -5
- package/components/ResourceList/Masthead.vue +11 -1
- package/components/ResourceList/ResourceLoadingIndicator.vue +12 -2
- package/components/ResourceList/index.vue +66 -12
- package/components/ResourceList/resource-list.config.js +7 -0
- package/components/ResourceTable.vue +33 -6
- package/components/SimpleBox.vue +1 -1
- package/components/SortableTable/THead.vue +21 -14
- package/components/SortableTable/filtering.js +1 -1
- package/components/SortableTable/index.vue +21 -10
- package/components/SortableTable/selection.js +15 -3
- package/components/Tabbed/Tab.vue +1 -1
- package/components/Tabbed/index.vue +20 -15
- package/components/__tests__/.DS_Store +0 -0
- package/components/__tests__/AsyncButton.test.ts +140 -0
- package/components/__tests__/BackLink.test.ts +33 -0
- package/components/__tests__/ButtonGroup.test.ts +124 -0
- package/components/__tests__/ClusterBadge.test.ts +32 -0
- package/components/__tests__/CollapsibleCard.test.ts +64 -0
- package/components/__tests__/ConsumptionGauge.test.ts +88 -0
- package/components/__tests__/CruResource.test.ts +3 -2
- package/components/__tests__/FixedBanner.test.ts +129 -0
- package/components/__tests__/GrowlManager.test.ts +147 -0
- package/components/__tests__/NamespaceFilter.test.ts +33 -25
- package/components/__tests__/PercentageBar.test.ts +32 -0
- package/components/__tests__/PodSecurityAdmission.test.ts +398 -0
- package/components/auth/AuthBanner.vue +20 -10
- package/components/auth/RoleDetailEdit.vue +26 -17
- package/components/auth/SelectPrincipal.vue +36 -5
- package/components/form/ArrayList.vue +3 -35
- package/components/form/ArrayListGrouped.vue +13 -4
- package/components/form/ArrayListSelect.vue +5 -5
- package/components/form/Error.vue +8 -0
- package/components/form/KeyValue.vue +39 -7
- package/components/form/LabeledSelect.vue +5 -2
- package/components/form/Labels.vue +46 -16
- package/components/form/Members/ClusterPermissionsEditor.vue +17 -17
- package/components/form/Members/MembershipEditor.vue +12 -12
- package/components/form/NameNsDescription.vue +1 -1
- package/components/form/NodeScheduling.vue +1 -1
- package/components/form/Probe.vue +3 -3
- package/components/form/ResourceQuota/Project.vue +6 -6
- package/components/form/ResourceTabs/index.vue +24 -6
- package/components/form/Security.vue +7 -6
- package/components/form/Select.vue +3 -2
- package/components/form/SelectOrCreateAuthSecret.vue +22 -29
- package/components/form/ServicePorts.vue +8 -0
- package/components/form/WorkloadPorts.vue +7 -1
- package/components/form/__tests__/ArrayList.test.ts +74 -0
- package/components/form/__tests__/ArrayListGrouped.test.ts +6 -4
- package/components/formatter/Checked.vue +1 -1
- package/components/formatter/ClusterLink.vue +5 -0
- package/components/formatter/IconIsDefault.vue +2 -2
- package/components/formatter/InternalExternalIP.vue +11 -8
- package/components/formatter/LiveDuration.vue +78 -0
- package/components/formatter/WorkloadHealthScale.vue +5 -3
- package/components/nav/Header.vue +74 -7
- package/components/nav/NamespaceFilter.vue +146 -63
- package/components/nav/TopLevelMenu.vue +22 -19
- package/components/nav/WindowManager/ContainerLogs.vue +83 -126
- package/components/nav/WindowManager/ContainerShell.vue +9 -7
- package/components/nav/WindowManager/Window.vue +2 -0
- package/components/nav/WindowManager/index.vue +10 -0
- package/config/elemental-types.js +9 -0
- package/config/features.js +2 -0
- package/config/home-links.js +4 -1
- package/config/pod-security-admission.ts +82 -0
- package/config/product/apps.js +1 -1
- package/config/product/auth.js +6 -5
- package/config/product/backup.js +1 -1
- package/config/product/explorer.js +6 -6
- package/config/product/fleet.js +1 -1
- package/config/product/manager.js +6 -2
- package/config/query-params.js +1 -0
- package/config/secret.js +0 -1
- package/config/settings.ts +26 -9
- package/config/table-headers.js +22 -11
- package/config/types.js +4 -1
- package/config/uiplugins.js +3 -3
- package/content/docs/zh-hans/getting-started.md +113 -137
- package/content/docs/zh-hans/whats-new.md +8 -46
- package/core/plugin-helpers.js +171 -0
- package/core/plugin.ts +61 -1
- package/core/plugins.js +33 -0
- package/core/types.ts +128 -2
- package/creators/pkg/package-lock.json +37 -0
- package/creators/pkg/package.json +1 -1
- package/detail/catalog.cattle.io.app.vue +1 -1
- package/detail/pod.vue +1 -1
- package/detail/provisioning.cattle.io.cluster.vue +35 -9
- package/detail/service.vue +2 -9
- package/detail/workload/index.vue +0 -1
- package/dialog/AddClusterMemberDialog.vue +22 -28
- package/dialog/AddProjectMemberDialog.vue +53 -9
- package/dialog/DiagnosticTimingsDialog.vue +8 -7
- package/dialog/DrainNode.vue +44 -48
- package/dialog/ForceMachineRemoveDialog.vue +5 -7
- package/dialog/GenericPrompt.vue +15 -20
- package/dialog/RollbackWorkloadDialog.vue +15 -46
- package/dialog/RotateCertificatesDialog.vue +5 -7
- package/dialog/RotateEncryptionKeyDialog.vue +5 -9
- package/dialog/SaveAsRKETemplateDialog.vue +5 -13
- package/dialog/ScaleMachineDownDialog.vue +1 -1
- package/dialog/ScalePoolDownDialog.vue +121 -0
- package/edit/__tests__/management.cattle.io.setting.test.ts +3 -3
- package/edit/auth/azuread.vue +16 -16
- package/edit/auth/github.vue +8 -0
- package/edit/auth/googleoauth.vue +10 -1
- package/edit/auth/ldap/index.vue +10 -0
- package/edit/auth/oidc.vue +10 -0
- package/edit/auth/saml.vue +10 -0
- package/edit/autoscaling.horizontalpodautoscaler/index.vue +1 -1
- package/edit/catalog.cattle.io.clusterrepo.vue +3 -0
- package/edit/cloudcredential.vue +3 -7
- package/edit/logging-flow/Match.vue +39 -8
- package/edit/logging-flow/index.vue +27 -4
- package/edit/management.cattle.io.podsecurityadmissionconfigurationtemplate.vue +107 -0
- package/edit/management.cattle.io.project.vue +8 -1
- package/edit/management.cattle.io.setting.vue +5 -2
- package/edit/management.cattle.io.user.vue +7 -1
- package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +36 -8
- package/edit/monitoring.coreos.com.alertmanagerconfig/types/email.vue +2 -2
- package/edit/monitoring.coreos.com.prometheusrule/GroupRules.vue +14 -6
- package/edit/namespace.vue +18 -4
- package/edit/networking.k8s.io.ingress/Certificate.vue +1 -0
- package/edit/networking.k8s.io.ingress/IngressClass.vue +8 -6
- package/edit/networking.k8s.io.ingress/RulePath.vue +12 -6
- package/edit/networking.k8s.io.ingress/index.vue +8 -6
- package/edit/persistentvolume/index.vue +30 -27
- package/edit/persistentvolume/plugins/cephfs.vue +29 -29
- package/edit/persistentvolume/plugins/csi.vue +102 -62
- package/edit/persistentvolume/plugins/fc.vue +19 -19
- package/edit/persistentvolume/plugins/iscsi.vue +45 -45
- package/edit/persistentvolume/plugins/rbd.vue +39 -39
- package/edit/persistentvolumeclaim.vue +78 -75
- package/edit/provisioning.cattle.io.cluster/MachinePool.vue +11 -7
- package/edit/provisioning.cattle.io.cluster/RegistryConfigs.vue +10 -1
- package/edit/provisioning.cattle.io.cluster/RegistryMirrors.vue +87 -27
- package/edit/provisioning.cattle.io.cluster/SelectCredential.vue +3 -6
- package/edit/provisioning.cattle.io.cluster/__tests__/rke2.test.ts +96 -0
- package/edit/provisioning.cattle.io.cluster/import.vue +1 -1
- package/edit/provisioning.cattle.io.cluster/index.vue +29 -6
- package/edit/provisioning.cattle.io.cluster/rke2.vue +445 -154
- package/edit/secret/index.vue +3 -7
- package/edit/service.vue +3 -1
- package/edit/storage.k8s.io.storageclass/index.vue +100 -16
- package/edit/storage.k8s.io.storageclass/provisioners/driver.harvesterhci.io.vue +114 -0
- package/edit/workload/__tests__/index.test.ts +98 -0
- package/edit/workload/index.vue +58 -8
- package/edit/workload/mixins/workload.js +107 -70
- package/edit/workload/storage/ContainerMountPaths.vue +0 -10
- package/edit/workload/storage/emptyDir.vue +88 -0
- package/edit/workload/storage/ephemeralVolume/index.vue +1 -1
- package/edit/workload/storage/index.vue +8 -0
- package/edit/workload/storage/persistentVolumeClaim/index.vue +1 -1
- package/layouts/default.vue +57 -44
- package/list/__tests__/workload.test.ts +5 -2
- package/list/catalog.cattle.io.app.vue +1 -0
- package/list/cis.cattle.io.clusterscan.vue +1 -0
- package/list/fleet.cattle.io.bundle.vue +5 -6
- package/list/fleet.cattle.io.cluster.vue +6 -3
- package/list/fleet.cattle.io.clusterregistrationtoken.vue +5 -6
- package/list/fleet.cattle.io.gitrepo.vue +4 -9
- package/list/helm.cattle.io.projecthelmchart.vue +1 -5
- package/list/logging.banzaicloud.io.clusterflow.vue +4 -1
- package/list/logging.banzaicloud.io.flow.vue +6 -5
- package/list/management.cattle.io.cluster.vue +1 -0
- package/list/management.cattle.io.feature.vue +3 -4
- package/list/management.cattle.io.podsecurityadmissionconfigurationtemplate.vue +47 -0
- package/list/management.cattle.io.setting.vue +2 -2
- package/list/management.cattle.io.user.vue +4 -10
- package/list/monitoring.coreos.com.alertmanagerconfig.vue +2 -7
- package/list/node.vue +8 -5
- package/list/persistentvolume.vue +3 -3
- package/list/persistentvolumeclaim.vue +3 -4
- package/list/provisioning.cattle.io.cluster.vue +18 -19
- package/list/service.vue +6 -14
- package/list/workload.vue +43 -38
- package/machine-config/azure.vue +429 -60
- package/machine-config/pnap.vue +288 -0
- package/mixins/auth-config.js +1 -3
- package/mixins/browser-tab-visibility.js +8 -14
- package/mixins/chart.js +1 -1
- package/mixins/create-edit-view/impl.js +4 -0
- package/mixins/create-edit-view/index.js +4 -2
- package/mixins/resource-fetch-namespaced.js +98 -0
- package/mixins/resource-fetch.js +79 -45
- package/mixins/resource-manager.js +1 -23
- package/models/apps.controllerrevision.js +7 -0
- package/models/apps.daemonset.js +18 -0
- package/models/apps.deployment.js +44 -0
- package/models/apps.replicaset.js +7 -0
- package/models/apps.statefulset.js +18 -0
- package/models/batch.job.js +7 -14
- package/models/cluster/node.js +10 -2
- package/models/cluster.x-k8s.io.machine.js +26 -4
- package/models/cluster.x-k8s.io.machinedeployment.js +12 -2
- package/models/event.js +7 -0
- package/models/logging.banzaicloud.io.flow.js +4 -0
- package/models/management.cattle.io.cluster.js +1 -1
- package/models/management.cattle.io.clusterroletemplatebinding.js +1 -1
- package/models/management.cattle.io.globalrole.js +2 -2
- package/models/management.cattle.io.node.js +37 -2
- package/models/management.cattle.io.podsecurityadmissionconfigurationtemplate.ts +4 -0
- package/models/management.cattle.io.project.js +30 -11
- package/models/management.cattle.io.setting.js +1 -1
- package/models/management.cattle.io.user.js +37 -1
- package/models/namespace.js +42 -5
- package/models/persistentvolume.js +14 -2
- package/models/pod.js +15 -0
- package/models/projectroletemplatebinding.js +7 -0
- package/models/provisioning.cattle.io.cluster.js +61 -10
- package/models/rke-machine.cattle.io.pnapmachinetemplate.js +15 -0
- package/models/service.js +14 -13
- package/models/storage.k8s.io.storageclass.js +33 -18
- package/models/workload.js +38 -7
- package/nuxt.config.js +27 -17
- package/package.json +7 -7
- package/pages/about.vue +14 -2
- package/pages/c/_cluster/apps/charts/index.vue +21 -3
- package/pages/c/_cluster/apps/charts/install.vue +59 -22
- package/pages/c/_cluster/auth/config/_id.vue +6 -0
- package/pages/c/_cluster/auth/config/index.vue +8 -6
- package/pages/c/_cluster/auth/group.principal/assign-edit.vue +1 -1
- package/pages/c/_cluster/auth/roles/index.vue +1 -1
- package/pages/c/_cluster/explorer/index.vue +51 -6
- package/pages/c/_cluster/longhorn/index.vue +1 -1
- package/pages/c/_cluster/monitoring/alertmanagerconfig/_alertmanagerconfigid/receiver.vue +15 -4
- package/pages/c/_cluster/monitoring/index.vue +1 -1
- package/pages/c/_cluster/neuvector/index.vue +1 -1
- package/pages/c/_cluster/settings/performance.vue +48 -2
- package/pages/c/_cluster/uiplugins/DeveloperInstallDialog.vue +2 -0
- package/pages/c/_cluster/uiplugins/InstallDialog.vue +3 -0
- package/pages/c/_cluster/uiplugins/PluginInfoPanel.vue +42 -2
- package/pages/c/_cluster/uiplugins/RemoveUIPlugins.vue +2 -0
- package/pages/c/_cluster/uiplugins/SetupUIPlugins.vue +1 -0
- package/pages/c/_cluster/uiplugins/UninstallDialog.vue +2 -0
- package/pages/c/_cluster/uiplugins/index.vue +42 -3
- package/pages/diagnostic.vue +5 -4
- package/pages/home.vue +105 -30
- package/pages/prefs.vue +23 -12
- package/pages/rio/mesh.vue +1 -1
- package/pkg/dynamic-importer.lib.js +8 -0
- package/pkg/vue.config.js +4 -0
- package/plugins/dashboard-store/__tests__/mutations.spec.js +406 -0
- package/plugins/dashboard-store/actions.js +32 -25
- package/plugins/dashboard-store/getters.js +50 -33
- package/plugins/dashboard-store/mutations.js +134 -28
- package/plugins/dashboard-store/resource-class.js +37 -42
- package/plugins/steve/actions.js +30 -0
- package/plugins/steve/caches/resourceCache.js +60 -0
- package/plugins/steve/getters.js +44 -1
- package/plugins/steve/mutations.js +97 -36
- package/plugins/steve/resourceWatcher.js +277 -0
- package/plugins/steve/schema.utils.js +25 -0
- package/plugins/steve/subscribe.js +288 -115
- package/plugins/steve/worker/index.js +17 -0
- package/plugins/steve/worker/web-worker.advanced.js +302 -0
- package/plugins/steve/{web-worker.steve-sub-worker.js → worker/web-worker.basic.js} +3 -44
- package/rancher-components/Card/Card.vue +3 -3
- package/rancher-components/Form/TextArea/TextAreaAutoGrow.vue +1 -0
- package/rancher-components/StringList/StringList.test.ts +45 -420
- package/rancher-components/StringList/StringList.vue +1 -10
- package/rancher-components/components/Banner/Banner.test.ts +44 -0
- package/rancher-components/components/Banner/Banner.vue +130 -61
- package/rancher-components/components/Form/Checkbox/Checkbox.test.ts +13 -22
- package/rancher-components/components/Form/Checkbox/Checkbox.vue +8 -6
- package/rancher-components/components/Form/ToggleSwitch/ToggleSwitch.test.ts +9 -9
- package/rancher-components/components/LabeledTooltip/LabeledTooltip.vue +0 -1
- package/rancher-components/components/StringList/StringList.test.ts +7 -7
- package/rancher-components/components/StringList/StringList.vue +21 -15
- package/scripts/test-plugins-build.sh +8 -0
- package/static/loading-indicator.html +1 -1
- package/store/action-menu.js +4 -3
- package/store/index.js +54 -3
- package/store/plugins.js +0 -17
- package/store/pnap.js +128 -0
- package/store/prefs.js +4 -2
- package/store/type-map.js +81 -13
- package/types/pod-security-admission.ts +36 -0
- package/types/shell/index.d.ts +497 -396
- package/utils/__tests__/object.test.ts +17 -1
- package/utils/__tests__/pod-security-admission.test.ts +61 -0
- package/utils/async.ts +36 -0
- package/utils/color.js +45 -0
- package/utils/crypto/browserHashUtils.js +18 -0
- package/utils/dynamic-importer.js +8 -0
- package/utils/install-redirect.js +1 -1
- package/utils/object.js +24 -0
- package/utils/pod-security-admission.ts +39 -0
- package/utils/socket.js +61 -24
- package/utils/string.js +2 -0
- package/utils/svg-filter.js +301 -0
- package/utils/time.js +49 -0
- package/utils/validators/cidr.js +4 -0
- package/utils/validators/formRules/__tests__/index.test.ts +23 -3
- package/utils/validators/formRules/index.ts +14 -0
- package/config/product/harvester-manager.js +0 -162
- package/edit/harvesterhci.io.management.cluster.vue +0 -153
- package/list/harvesterhci.io.management.cluster.vue +0 -241
- package/machine-config/harvester.vue +0 -693
- package/models/harvesterhci.io.management.cluster.js +0 -228
- package/pages/c/_cluster/harvesterManager/index.vue +0 -24
- package/rancher-components/Card/Card.test.ts +0 -39
- package/rancher-components/Utils/DraggableZone/DraggableZone.vue +0 -181
- package/rancher-components/Utils/DraggableZone/index.ts +0 -1
- package/rancher-components/components/Utils/DraggableZone/index.ts +0 -1
|
@@ -95,9 +95,12 @@ export default {
|
|
|
95
95
|
this.errors = [];
|
|
96
96
|
|
|
97
97
|
// If the chart doesn't contain system `systemDefaultRegistry` properties there's no point applying them
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
98
|
+
if (this.showCustomRegistry) {
|
|
99
|
+
// Note: Cluster scoped registry is only supported for node driver clusters
|
|
100
|
+
this.clusterRegistry = await this.getClusterRegistry();
|
|
101
|
+
this.globalRegistry = await this.getGlobalRegistry();
|
|
102
|
+
this.defaultRegistrySetting = this.clusterRegistry || this.globalRegistry;
|
|
103
|
+
}
|
|
101
104
|
|
|
102
105
|
this.serverUrlSetting = await this.$store.dispatch('management/find', {
|
|
103
106
|
type: MANAGEMENT.SETTING,
|
|
@@ -282,13 +285,20 @@ export default {
|
|
|
282
285
|
*/
|
|
283
286
|
this.chartValues = merge(merge({}, this.versionInfo?.values || {}), userValues);
|
|
284
287
|
|
|
285
|
-
|
|
288
|
+
if (this.showCustomRegistry) {
|
|
289
|
+
/**
|
|
290
|
+
* The input to configure the registry should never be
|
|
291
|
+
* shown for third-party charts, which don't have Rancher
|
|
292
|
+
* global values.
|
|
293
|
+
*/
|
|
294
|
+
const existingRegistry = this.chartValues?.global?.systemDefaultRegistry || this.chartValues?.global?.cattle?.systemDefaultRegistry;
|
|
286
295
|
|
|
287
|
-
|
|
288
|
-
|
|
296
|
+
delete this.chartValues?.global?.systemDefaultRegistry;
|
|
297
|
+
delete this.chartValues?.global?.cattle?.systemDefaultRegistry;
|
|
289
298
|
|
|
290
|
-
|
|
291
|
-
|
|
299
|
+
this.customRegistrySetting = existingRegistry || this.defaultRegistrySetting;
|
|
300
|
+
this.showCustomRegistryInput = !!this.customRegistrySetting;
|
|
301
|
+
}
|
|
292
302
|
|
|
293
303
|
/* Serializes an object as a YAML document */
|
|
294
304
|
this.valuesYaml = saferDump(this.chartValues);
|
|
@@ -522,6 +532,10 @@ export default {
|
|
|
522
532
|
return this.formYamlOption === VALUES_STATE.YAML || ( !this.valuesComponent && !this.hasQuestions );
|
|
523
533
|
},
|
|
524
534
|
|
|
535
|
+
showingYamlDiff() {
|
|
536
|
+
return this.formYamlOption === VALUES_STATE.DIFF;
|
|
537
|
+
},
|
|
538
|
+
|
|
525
539
|
formYamlOptions() {
|
|
526
540
|
const options = [];
|
|
527
541
|
|
|
@@ -660,6 +674,22 @@ export default {
|
|
|
660
674
|
return null;
|
|
661
675
|
},
|
|
662
676
|
|
|
677
|
+
/**
|
|
678
|
+
* Check if the chart contains `systemDefaultRegistry` properties.
|
|
679
|
+
* If not we shouldn't apply the setting, because if the option
|
|
680
|
+
* is exposed for third-party Helm charts, it confuses users because
|
|
681
|
+
* it shows a private registry setting that is never used
|
|
682
|
+
* by the chart they are installing. If not hidden, the setting
|
|
683
|
+
* does nothing, and if the user changes it, it will look like
|
|
684
|
+
* there is a bug in the UI when it doesn't work, because UI is
|
|
685
|
+
* exposing a feature that the chart does not have.
|
|
686
|
+
*/
|
|
687
|
+
showCustomRegistry() {
|
|
688
|
+
const global = this.versionInfo?.values?.global || {};
|
|
689
|
+
|
|
690
|
+
return global.systemDefaultRegistry !== undefined || global.cattle?.systemDefaultRegistry !== undefined;
|
|
691
|
+
},
|
|
692
|
+
|
|
663
693
|
},
|
|
664
694
|
|
|
665
695
|
watch: {
|
|
@@ -763,7 +793,7 @@ export default {
|
|
|
763
793
|
|
|
764
794
|
if (hasPermissionToSeeProvCluster) {
|
|
765
795
|
const mgmCluster = this.$store.getters['currentCluster'];
|
|
766
|
-
const provCluster = mgmCluster ? await this.$store.dispatch('management/find', {
|
|
796
|
+
const provCluster = mgmCluster?.provClusterId ? await this.$store.dispatch('management/find', {
|
|
767
797
|
type: CAPI.RANCHER_CLUSTER,
|
|
768
798
|
id: mgmCluster.provClusterId
|
|
769
799
|
}) : {};
|
|
@@ -976,8 +1006,11 @@ export default {
|
|
|
976
1006
|
|
|
977
1007
|
setIfNotSet(cattle, 'clusterId', cluster?.id);
|
|
978
1008
|
setIfNotSet(cattle, 'clusterName', cluster?.nameDisplay);
|
|
979
|
-
|
|
980
|
-
|
|
1009
|
+
|
|
1010
|
+
if (this.showCustomRegistry) {
|
|
1011
|
+
set(cattle, 'systemDefaultRegistry', this.customRegistrySetting);
|
|
1012
|
+
set(global, 'systemDefaultRegistry', this.customRegistrySetting);
|
|
1013
|
+
}
|
|
981
1014
|
|
|
982
1015
|
setIfNotSet(global, 'cattle.systemProjectId', systemProjectId);
|
|
983
1016
|
setIfNotSet(cattle, 'url', serverUrl);
|
|
@@ -1062,7 +1095,7 @@ export default {
|
|
|
1062
1095
|
|
|
1063
1096
|
const errors = [];
|
|
1064
1097
|
|
|
1065
|
-
if ( this.showingYaml ) {
|
|
1098
|
+
if ( this.showingYaml || this.showingYamlDiff ) {
|
|
1066
1099
|
const { errors: yamlErrors } = this.applyYamlToValues();
|
|
1067
1100
|
|
|
1068
1101
|
errors.push(...yamlErrors);
|
|
@@ -1316,13 +1349,15 @@ export default {
|
|
|
1316
1349
|
color="info"
|
|
1317
1350
|
class="description"
|
|
1318
1351
|
>
|
|
1319
|
-
<
|
|
1320
|
-
|
|
1321
|
-
|
|
1322
|
-
|
|
1323
|
-
|
|
1324
|
-
|
|
1325
|
-
|
|
1352
|
+
<div>
|
|
1353
|
+
<span>{{ step1Description }}</span>
|
|
1354
|
+
<span
|
|
1355
|
+
v-if="namespaceNewAllowed"
|
|
1356
|
+
class="mt-10"
|
|
1357
|
+
>
|
|
1358
|
+
{{ t('catalog.install.steps.basics.nsCreationDescription', {}, true) }}
|
|
1359
|
+
</span>
|
|
1360
|
+
</div>
|
|
1326
1361
|
</Banner>
|
|
1327
1362
|
<div
|
|
1328
1363
|
v-if="requires.length || warnings.length"
|
|
@@ -1417,6 +1452,7 @@ export default {
|
|
|
1417
1452
|
/>
|
|
1418
1453
|
|
|
1419
1454
|
<Checkbox
|
|
1455
|
+
v-if="showCustomRegistry"
|
|
1420
1456
|
v-model="showCustomRegistryInput"
|
|
1421
1457
|
class="mb-20"
|
|
1422
1458
|
:label="t('catalog.chart.registry.custom.checkBoxLabel')"
|
|
@@ -1440,10 +1476,11 @@ export default {
|
|
|
1440
1476
|
|
|
1441
1477
|
</div>
|
|
1442
1478
|
<Banner
|
|
1443
|
-
v-if="isNamespaceNew"
|
|
1479
|
+
v-if="isNamespaceNew && value.metadata.namespace.length"
|
|
1444
1480
|
color="info"
|
|
1445
|
-
|
|
1446
|
-
|
|
1481
|
+
>
|
|
1482
|
+
<div v-html="t('catalog.install.steps.basics.createNamespace', {namespace: value.metadata.namespace}, true) " />
|
|
1483
|
+
</Banner>
|
|
1447
1484
|
</div>
|
|
1448
1485
|
</template>
|
|
1449
1486
|
<template #clusterTplVersion>
|
|
@@ -19,6 +19,12 @@ export default {
|
|
|
19
19
|
// Ensure we re-evaluate the redirect in case this auth provider has been disabled
|
|
20
20
|
const authProvs = await authProvidersInfo(this.$store);
|
|
21
21
|
|
|
22
|
+
// Nuxt does not remove it's loading indicator - if we are not changing route, then hide it
|
|
23
|
+
// https://nuxtjs.org/docs/features/loading/
|
|
24
|
+
if (authProvs.enabledLocation) {
|
|
25
|
+
this.$nuxt.$loading.finish();
|
|
26
|
+
}
|
|
27
|
+
|
|
22
28
|
next(!authProvs.enabledLocation);
|
|
23
29
|
} else {
|
|
24
30
|
next();
|
|
@@ -91,12 +91,14 @@ export default {
|
|
|
91
91
|
:label="t('authConfig.noneEnabled')"
|
|
92
92
|
color="info"
|
|
93
93
|
>
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
94
|
+
<div>
|
|
95
|
+
{{ t('authConfig.localEnabled') }}
|
|
96
|
+
<nuxt-link :to="localUsersRoute">
|
|
97
|
+
{{ t('authConfig.manageLocal') }}
|
|
98
|
+
</nuxt-link>
|
|
99
|
+
<br>
|
|
100
|
+
{{ t('authConfig.noneEnabled') }}
|
|
101
|
+
</div>
|
|
100
102
|
</Banner>
|
|
101
103
|
<SelectIconGrid
|
|
102
104
|
:rows="rows"
|
|
@@ -40,6 +40,9 @@ import { isEmpty } from '@shell/utils/object';
|
|
|
40
40
|
import ConfigBadge from './ConfigBadge';
|
|
41
41
|
import EventsTable from './EventsTable';
|
|
42
42
|
import { fetchClusterResources } from './explorer-utils';
|
|
43
|
+
import SimpleBox from '@shell/components/SimpleBox';
|
|
44
|
+
import { ExtensionPoint, CardLocation } from '@shell/core/types';
|
|
45
|
+
import { getApplicableExtensionEnhancements } from '@shell/core/plugin-helpers';
|
|
43
46
|
|
|
44
47
|
export const RESOURCES = [NAMESPACE, INGRESS, PV, WORKLOAD_TYPES.DEPLOYMENT, WORKLOAD_TYPES.STATEFUL_SET, WORKLOAD_TYPES.JOB, WORKLOAD_TYPES.DAEMON_SET, SERVICE];
|
|
45
48
|
|
|
@@ -71,6 +74,7 @@ export default {
|
|
|
71
74
|
EmberPage,
|
|
72
75
|
ConfigBadge,
|
|
73
76
|
EventsTable,
|
|
77
|
+
SimpleBox,
|
|
74
78
|
},
|
|
75
79
|
|
|
76
80
|
mixins: [metricPoller],
|
|
@@ -126,6 +130,7 @@ export default {
|
|
|
126
130
|
ETCD_METRICS_SUMMARY_URL,
|
|
127
131
|
clusterCounts,
|
|
128
132
|
selectedTab: 'cluster-events',
|
|
133
|
+
extensionCards: getApplicableExtensionEnhancements(this, ExtensionPoint.CARD, CardLocation.CLUSTER_DASHBOARD_CARD, this.$route),
|
|
129
134
|
};
|
|
130
135
|
},
|
|
131
136
|
|
|
@@ -247,9 +252,12 @@ export default {
|
|
|
247
252
|
},
|
|
248
253
|
|
|
249
254
|
cpuReserved() {
|
|
255
|
+
const total = parseSi(this.currentCluster?.status?.allocatable?.cpu);
|
|
256
|
+
|
|
250
257
|
return {
|
|
251
|
-
total
|
|
252
|
-
useful: parseSi(this.currentCluster?.status?.requested?.cpu)
|
|
258
|
+
total,
|
|
259
|
+
useful: parseSi(this.currentCluster?.status?.requested?.cpu),
|
|
260
|
+
units: this.t('clusterIndexPage.hardwareResourceGauge.units.cores', { count: total })
|
|
253
261
|
};
|
|
254
262
|
},
|
|
255
263
|
|
|
@@ -308,9 +316,12 @@ export default {
|
|
|
308
316
|
},
|
|
309
317
|
|
|
310
318
|
cpuUsed() {
|
|
319
|
+
const total = parseSi(this.currentCluster?.status?.capacity?.cpu);
|
|
320
|
+
|
|
311
321
|
return {
|
|
312
|
-
total
|
|
313
|
-
useful: this.metricAggregations?.cpu
|
|
322
|
+
total,
|
|
323
|
+
useful: this.metricAggregations?.cpu,
|
|
324
|
+
units: this.t('clusterIndexPage.hardwareResourceGauge.units.cores', { count: total })
|
|
314
325
|
};
|
|
315
326
|
},
|
|
316
327
|
|
|
@@ -394,7 +405,7 @@ export default {
|
|
|
394
405
|
|
|
395
406
|
<template>
|
|
396
407
|
<section class="dashboard">
|
|
397
|
-
<header
|
|
408
|
+
<header>
|
|
398
409
|
<div class="title">
|
|
399
410
|
<h1>
|
|
400
411
|
<t k="clusterIndexPage.header" />
|
|
@@ -486,6 +497,27 @@ export default {
|
|
|
486
497
|
/>
|
|
487
498
|
</div>
|
|
488
499
|
|
|
500
|
+
<!-- extension cards -->
|
|
501
|
+
<div
|
|
502
|
+
v-if="extensionCards.length"
|
|
503
|
+
class="extension-card-container mt-20"
|
|
504
|
+
>
|
|
505
|
+
<SimpleBox
|
|
506
|
+
v-for="item, i in extensionCards"
|
|
507
|
+
:key="`extensionCards${i}`"
|
|
508
|
+
class="extension-card"
|
|
509
|
+
:style="item.style"
|
|
510
|
+
>
|
|
511
|
+
<h3>
|
|
512
|
+
{{ item.label }}
|
|
513
|
+
</h3>
|
|
514
|
+
<component
|
|
515
|
+
:is="item.component"
|
|
516
|
+
:resource="currentCluster"
|
|
517
|
+
/>
|
|
518
|
+
</SimpleBox>
|
|
519
|
+
</div>
|
|
520
|
+
|
|
489
521
|
<h3
|
|
490
522
|
v-if="!hasV1Monitoring && hasStats"
|
|
491
523
|
class="mt-40"
|
|
@@ -504,6 +536,7 @@ export default {
|
|
|
504
536
|
:name="t('clusterIndexPage.hardwareResourceGauge.cores')"
|
|
505
537
|
:reserved="cpuReserved"
|
|
506
538
|
:used="cpuUsed"
|
|
539
|
+
:units="cpuReserved.units"
|
|
507
540
|
/>
|
|
508
541
|
<HardwareResourceGauge
|
|
509
542
|
:name="t('clusterIndexPage.hardwareResourceGauge.ram')"
|
|
@@ -624,6 +657,19 @@ export default {
|
|
|
624
657
|
</template>
|
|
625
658
|
|
|
626
659
|
<style lang="scss" scoped>
|
|
660
|
+
.extension-card-container {
|
|
661
|
+
display: grid;
|
|
662
|
+
grid-template-columns: repeat(auto-fit, minmax(calc((100%/3) - 40px), 1fr));
|
|
663
|
+
grid-column-gap: 15px;
|
|
664
|
+
grid-row-gap: 20px;
|
|
665
|
+
}
|
|
666
|
+
|
|
667
|
+
@media only screen and (max-width: map-get($breakpoints, "--viewport-9")) {
|
|
668
|
+
.extension-card-container {
|
|
669
|
+
grid-template-columns: 1fr !important;
|
|
670
|
+
}
|
|
671
|
+
}
|
|
672
|
+
|
|
627
673
|
.cluster-dashboard-glance {
|
|
628
674
|
border-top: 1px solid var(--border);
|
|
629
675
|
border-bottom: 1px solid var(--border);
|
|
@@ -712,7 +758,6 @@ export default {
|
|
|
712
758
|
|
|
713
759
|
> I {
|
|
714
760
|
text-align: center;
|
|
715
|
-
font-size: 20px;
|
|
716
761
|
padding: 5px 10px;
|
|
717
762
|
border-right: 1px solid var(--border);
|
|
718
763
|
}
|
|
@@ -156,7 +156,7 @@ export default {
|
|
|
156
156
|
// being saved. Therefore we take the save from the
|
|
157
157
|
// AlertmanagerConfig resource and pass it into the
|
|
158
158
|
// receiver config form.
|
|
159
|
-
saveOverride(buttonDone) {
|
|
159
|
+
async saveOverride(buttonDone) {
|
|
160
160
|
if (this.alertmanagerConfigResource.yamlError) {
|
|
161
161
|
this.alertmanagerConfigResource.errors = this.alertmanagerConfigResource.errors || [];
|
|
162
162
|
this.alertmanagerConfigResource.errors.push(this.alertmanagerConfigResource.yamlError);
|
|
@@ -166,8 +166,18 @@ export default {
|
|
|
166
166
|
return;
|
|
167
167
|
}
|
|
168
168
|
|
|
169
|
-
|
|
170
|
-
|
|
169
|
+
try {
|
|
170
|
+
await this.alertmanagerConfigResource.save(...arguments);
|
|
171
|
+
|
|
172
|
+
buttonDone(true);
|
|
173
|
+
|
|
174
|
+
this.redirectToAlertmanagerConfigDetail();
|
|
175
|
+
} catch (e) {
|
|
176
|
+
const msg = e?.message ? e.message : this.t('monitoring.alertmanagerConfig.error');
|
|
177
|
+
|
|
178
|
+
this.$refs.config.setError(msg);
|
|
179
|
+
buttonDone(false);
|
|
180
|
+
}
|
|
171
181
|
},
|
|
172
182
|
handleButtonGroupClick(event) {
|
|
173
183
|
if (event === this.yaml) {
|
|
@@ -226,7 +236,7 @@ export default {
|
|
|
226
236
|
|
|
227
237
|
<template>
|
|
228
238
|
<div>
|
|
229
|
-
<header class="header
|
|
239
|
+
<header class="header">
|
|
230
240
|
<div class="title">
|
|
231
241
|
<div class="primaryheader">
|
|
232
242
|
<h1>
|
|
@@ -271,6 +281,7 @@ export default {
|
|
|
271
281
|
/>
|
|
272
282
|
<ReceiverConfig
|
|
273
283
|
v-if="(currentView === config || currentView === detail) && alertmanagerConfigResource"
|
|
284
|
+
ref="config"
|
|
274
285
|
:value="receiverValue"
|
|
275
286
|
:mode="mode"
|
|
276
287
|
:alertmanager-config-id="alertmanagerConfigId"
|
|
@@ -133,7 +133,7 @@ export default {
|
|
|
133
133
|
<p>{{ t('performance.manualRefresh.description') }}</p>
|
|
134
134
|
<Banner
|
|
135
135
|
color="error"
|
|
136
|
-
label-key="performance.
|
|
136
|
+
label-key="performance.experimental"
|
|
137
137
|
/>
|
|
138
138
|
<Checkbox
|
|
139
139
|
v-model="value.manualRefresh.enabled"
|
|
@@ -163,7 +163,7 @@ export default {
|
|
|
163
163
|
<p>{{ t('performance.gc.description') }}</p>
|
|
164
164
|
<Banner
|
|
165
165
|
color="error"
|
|
166
|
-
label-key="performance.
|
|
166
|
+
label-key="performance.experimental"
|
|
167
167
|
/>
|
|
168
168
|
<Checkbox
|
|
169
169
|
v-model="value.garbageCollection.enabled"
|
|
@@ -237,6 +237,52 @@ export default {
|
|
|
237
237
|
</div>
|
|
238
238
|
</div>
|
|
239
239
|
</div>
|
|
240
|
+
<!-- Force NS filter -->
|
|
241
|
+
<div class="mt-40">
|
|
242
|
+
<h2>{{ t('performance.nsFiltering.label') }}</h2>
|
|
243
|
+
<p>{{ t('performance.nsFiltering.description') }}</p>
|
|
244
|
+
<Banner
|
|
245
|
+
color="error"
|
|
246
|
+
label-key="performance.experimental"
|
|
247
|
+
/>
|
|
248
|
+
<Checkbox
|
|
249
|
+
v-model="value.forceNsFilter.enabled"
|
|
250
|
+
:mode="mode"
|
|
251
|
+
:label="t('performance.nsFiltering.checkboxLabel')"
|
|
252
|
+
class="mt-10 mb-20"
|
|
253
|
+
:primary="true"
|
|
254
|
+
/>
|
|
255
|
+
<div class="ml-20">
|
|
256
|
+
<p :class="{ 'text-muted': !value.forceNsFilter.enabled }">
|
|
257
|
+
{{ t('performance.nsFiltering.count.description') }}
|
|
258
|
+
</p>
|
|
259
|
+
<LabeledInput
|
|
260
|
+
v-model="value.forceNsFilter.threshold"
|
|
261
|
+
:mode="mode"
|
|
262
|
+
:label="t('performance.nsFiltering.count.inputLabel')"
|
|
263
|
+
:disabled="!value.forceNsFilter.enabled"
|
|
264
|
+
class="input"
|
|
265
|
+
type="number"
|
|
266
|
+
min="0"
|
|
267
|
+
/>
|
|
268
|
+
</div>
|
|
269
|
+
</div>
|
|
270
|
+
<!-- Advanced Websocket Worker -->
|
|
271
|
+
<div class="mt-40">
|
|
272
|
+
<h2>{{ t('performance.advancedWorker.label') }}</h2>
|
|
273
|
+
<p>{{ t('performance.advancedWorker.description') }}</p>
|
|
274
|
+
<Banner
|
|
275
|
+
color="error"
|
|
276
|
+
label-key="performance.experimental"
|
|
277
|
+
/>
|
|
278
|
+
<Checkbox
|
|
279
|
+
v-model="value.advancedWorker.enabled"
|
|
280
|
+
:mode="mode"
|
|
281
|
+
:label="t('performance.advancedWorker.checkboxLabel')"
|
|
282
|
+
class="mt-10 mb-20"
|
|
283
|
+
:primary="true"
|
|
284
|
+
/>
|
|
285
|
+
</div>
|
|
240
286
|
</div>
|
|
241
287
|
</div>
|
|
242
288
|
<template v-for="err in errors">
|
|
@@ -181,12 +181,14 @@ export default {
|
|
|
181
181
|
<div class="dialog-buttons mt-20">
|
|
182
182
|
<button
|
|
183
183
|
class="btn role-secondary"
|
|
184
|
+
data-testid="dev-install-ext-modal-cancel-btn"
|
|
184
185
|
@click="closeDialog()"
|
|
185
186
|
>
|
|
186
187
|
{{ t('generic.cancel') }}
|
|
187
188
|
</button>
|
|
188
189
|
<AsyncButton
|
|
189
190
|
mode="load"
|
|
191
|
+
data-testid="dev-install-ext-modal-install-btn"
|
|
190
192
|
@click="loadPlugin"
|
|
191
193
|
/>
|
|
192
194
|
</div>
|
|
@@ -243,6 +243,7 @@ export default {
|
|
|
243
243
|
label-key="plugins.install.version"
|
|
244
244
|
:options="versionOptions"
|
|
245
245
|
class="version-selector mt-10"
|
|
246
|
+
data-testid="install-ext-modal-select-version"
|
|
246
247
|
/>
|
|
247
248
|
<div v-else>
|
|
248
249
|
{{ t('plugins.install.version') }} {{ version }}
|
|
@@ -252,12 +253,14 @@ export default {
|
|
|
252
253
|
<button
|
|
253
254
|
:disabled="busy"
|
|
254
255
|
class="btn role-secondary"
|
|
256
|
+
data-testid="install-ext-modal-cancel-btn"
|
|
255
257
|
@click="closeDialog(false)"
|
|
256
258
|
>
|
|
257
259
|
{{ t('generic.cancel') }}
|
|
258
260
|
</button>
|
|
259
261
|
<AsyncButton
|
|
260
262
|
:mode="buttonMode"
|
|
263
|
+
data-testid="install-ext-modal-install-btn"
|
|
261
264
|
@click="install"
|
|
262
265
|
/>
|
|
263
266
|
</div>
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
<script>
|
|
2
|
+
import { mapGetters } from 'vuex';
|
|
2
3
|
import ChartReadme from '@shell/components/ChartReadme';
|
|
3
4
|
import { Banner } from '@components/Banner';
|
|
4
5
|
import LazyImage from '@shell/components/LazyImage';
|
|
@@ -34,6 +35,18 @@ export default {
|
|
|
34
35
|
};
|
|
35
36
|
},
|
|
36
37
|
|
|
38
|
+
computed: {
|
|
39
|
+
...mapGetters({ theme: 'prefs/theme' }),
|
|
40
|
+
|
|
41
|
+
applyDarkModeBg() {
|
|
42
|
+
if (this.theme === 'dark') {
|
|
43
|
+
return { 'dark-mode': true };
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
return {};
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
|
|
37
50
|
methods: {
|
|
38
51
|
show(info) {
|
|
39
52
|
this.info = info;
|
|
@@ -100,10 +113,12 @@ export default {
|
|
|
100
113
|
<div
|
|
101
114
|
v-if="showSlideIn"
|
|
102
115
|
class="glass"
|
|
116
|
+
data-testid="extension-details-bg"
|
|
103
117
|
@click="hide()"
|
|
104
118
|
/>
|
|
105
119
|
<div
|
|
106
120
|
class="slideIn"
|
|
121
|
+
data-testid="extension-details"
|
|
107
122
|
:class="{'hide': false, 'slideIn__show': showSlideIn}"
|
|
108
123
|
>
|
|
109
124
|
<div
|
|
@@ -111,7 +126,10 @@ export default {
|
|
|
111
126
|
class="plugin-info-content"
|
|
112
127
|
>
|
|
113
128
|
<div class="plugin-header">
|
|
114
|
-
<div
|
|
129
|
+
<div
|
|
130
|
+
class="plugin-icon"
|
|
131
|
+
:class="applyDarkModeBg"
|
|
132
|
+
>
|
|
115
133
|
<LazyImage
|
|
116
134
|
v-if="info.icon"
|
|
117
135
|
:initial-src="defaultIcon"
|
|
@@ -126,7 +144,10 @@ export default {
|
|
|
126
144
|
>
|
|
127
145
|
</div>
|
|
128
146
|
<div class="plugin-title">
|
|
129
|
-
<h2
|
|
147
|
+
<h2
|
|
148
|
+
class="slideIn__header"
|
|
149
|
+
data-testid="extension-details-title"
|
|
150
|
+
>
|
|
130
151
|
{{ info.name }}
|
|
131
152
|
</h2>
|
|
132
153
|
<p class="plugin-description">
|
|
@@ -137,6 +158,7 @@ export default {
|
|
|
137
158
|
<div class="slideIn__header__buttons">
|
|
138
159
|
<div
|
|
139
160
|
class="slideIn__header__button"
|
|
161
|
+
data-testid="extension-details-close"
|
|
140
162
|
@click="showSlideIn = false"
|
|
141
163
|
>
|
|
142
164
|
<i class="icon icon-close" />
|
|
@@ -220,6 +242,7 @@ export default {
|
|
|
220
242
|
position: fixed;
|
|
221
243
|
top: 0;
|
|
222
244
|
left: 0;
|
|
245
|
+
z-index: 1;
|
|
223
246
|
|
|
224
247
|
$slideout-width: 35%;
|
|
225
248
|
$title-height: 50px;
|
|
@@ -254,6 +277,10 @@ export default {
|
|
|
254
277
|
|
|
255
278
|
transition: right .5s ease;
|
|
256
279
|
|
|
280
|
+
&__header {
|
|
281
|
+
text-transform: capitalize;
|
|
282
|
+
}
|
|
283
|
+
|
|
257
284
|
.plugin-info-content {
|
|
258
285
|
display: flex;
|
|
259
286
|
flex-direction: column;
|
|
@@ -285,10 +312,23 @@ export default {
|
|
|
285
312
|
font-size: 40px;
|
|
286
313
|
margin-right:10px;
|
|
287
314
|
color: #888;
|
|
315
|
+
width: 44px;
|
|
316
|
+
height: 44px;
|
|
317
|
+
|
|
318
|
+
&.dark-mode {
|
|
319
|
+
border-radius: calc(2 * var(--border-radius));
|
|
320
|
+
overflow: hidden;
|
|
321
|
+
background-color: white;
|
|
322
|
+
}
|
|
288
323
|
|
|
289
324
|
.plugin-icon-img {
|
|
290
325
|
height: 40px;
|
|
291
326
|
width: 40px;
|
|
327
|
+
-o-object-fit: contain;
|
|
328
|
+
object-fit: contain;
|
|
329
|
+
position: relative;
|
|
330
|
+
top: 2px;
|
|
331
|
+
left: 2px;
|
|
292
332
|
}
|
|
293
333
|
}
|
|
294
334
|
|
|
@@ -107,6 +107,7 @@ export default {
|
|
|
107
107
|
name="confirm-uiplugins-remove"
|
|
108
108
|
:title="t('plugins.setup.remove.title')"
|
|
109
109
|
mode="disable"
|
|
110
|
+
data-testid="disable-ext-modal"
|
|
110
111
|
@okay="doRemove"
|
|
111
112
|
>
|
|
112
113
|
<template>
|
|
@@ -121,6 +122,7 @@ export default {
|
|
|
121
122
|
v-model="removeRepo"
|
|
122
123
|
:primary="true"
|
|
123
124
|
label-key="plugins.setup.remove.registry.title"
|
|
125
|
+
data-testid="disable-ext-modal-remove-repo"
|
|
124
126
|
/>
|
|
125
127
|
<div class="checkbox-info">
|
|
126
128
|
{{ t('plugins.setup.remove.registry.prompt') }}
|
|
@@ -84,12 +84,14 @@ export default {
|
|
|
84
84
|
<button
|
|
85
85
|
:disabled="busy"
|
|
86
86
|
class="btn role-secondary"
|
|
87
|
+
data-testid="uninstall-ext-modal-cancel-btn"
|
|
87
88
|
@click="closeDialog(false)"
|
|
88
89
|
>
|
|
89
90
|
{{ t('generic.cancel') }}
|
|
90
91
|
</button>
|
|
91
92
|
<AsyncButton
|
|
92
93
|
mode="uninstall"
|
|
94
|
+
data-testid="uninstall-ext-modal-uninstall-btn"
|
|
93
95
|
@click="uninstall()"
|
|
94
96
|
/>
|
|
95
97
|
</div>
|