@rancher/shell 3.0.4 → 3.0.5-rc.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/images/providers/sks.svg +1 -0
- package/assets/styles/base/_basic.scss +6 -0
- package/assets/styles/base/_helpers.scss +4 -0
- package/assets/styles/base/_variables.scss +1 -0
- package/assets/styles/global/_button.scss +1 -0
- package/assets/translations/en-us.yaml +65 -15
- package/assets/translations/zh-hans.yaml +4 -3
- package/chart/monitoring/index.vue +3 -1
- package/cloud-credential/aws.vue +2 -0
- package/components/ActionDropdownShell.vue +71 -0
- package/components/AppModal.vue +18 -4
- package/components/AsyncButton.vue +24 -7
- package/components/BannerGraphic.vue +1 -0
- package/components/CommunityLinks.vue +4 -59
- package/components/CopyToClipboardText.vue +2 -1
- package/components/CruResource.vue +6 -1
- package/components/DetailText.vue +5 -0
- package/components/ExplorerMembers.vue +1 -1
- package/components/ExplorerProjectsNamespaces.vue +68 -18
- package/components/GlobalRoleBindings.vue +5 -1
- package/components/GrowlManager.vue +1 -0
- package/components/LandingPagePreference.vue +7 -3
- package/components/LocaleSelector.vue +39 -95
- package/components/ModalManager.vue +55 -0
- package/components/ModalWithCard.vue +1 -0
- package/components/PromptModal.vue +47 -8
- package/components/PromptRemove.vue +1 -0
- package/components/PromptRestore.vue +1 -0
- package/components/ResourceCancelModal.vue +1 -0
- package/components/ResourceDetail/Masthead.vue +38 -12
- package/components/ResourceDetail/__tests__/Masthead.test.ts +5 -1
- package/components/ResourceDetail/index.vue +47 -12
- package/components/ResourceTable.vue +54 -19
- package/components/SideNav.vue +5 -1
- package/components/SlideInPanelManager.vue +126 -0
- package/components/SortableTable/THead.vue +5 -2
- package/components/SortableTable/actions.js +1 -1
- package/components/SortableTable/index.vue +64 -51
- package/components/SortableTable/paging.js +16 -19
- package/components/SortableTable/selection.js +0 -11
- package/components/Wizard.vue +2 -2
- package/components/__tests__/AsyncButton.test.ts +2 -2
- package/components/__tests__/ModalManager.spec.ts +176 -0
- package/components/__tests__/PromptModal.test.ts +148 -0
- package/components/__tests__/SlideInPanelManager.spec.ts +166 -0
- package/components/auth/AuthBanner.vue +13 -11
- package/components/auth/Principal.vue +1 -0
- package/components/auth/__tests__/RoleDetailEdit.test.ts +3 -2
- package/components/auth/login/ldap.vue +1 -1
- package/components/fleet/FleetResources.vue +21 -6
- package/components/form/ArrayList.vue +76 -60
- package/components/form/BannerSettings.vue +17 -2
- package/components/form/ColorInput.vue +35 -6
- package/components/form/Command.vue +6 -15
- package/components/form/EnvVars.vue +16 -8
- package/components/form/HealthCheck.vue +3 -3
- package/components/form/HookOption.vue +11 -16
- package/components/form/LabeledSelect.vue +18 -22
- package/components/form/LifecycleHooks.vue +3 -3
- package/components/form/MatchExpressions.vue +14 -8
- package/components/form/NameNsDescription.vue +128 -104
- package/components/form/Networking.vue +20 -12
- package/components/form/NodeAffinity.vue +31 -23
- package/components/form/NodeScheduling.vue +13 -3
- package/components/form/NotificationSettings.vue +15 -1
- package/components/form/Password.vue +1 -0
- package/components/form/PodAffinity.vue +43 -43
- package/components/form/Probe.vue +68 -66
- package/components/form/ResourceQuota/Project.vue +5 -1
- package/components/form/ResourceSelector.vue +7 -9
- package/components/form/SSHKnownHosts/__tests__/KnownHostsEditDialog.test.ts +16 -24
- package/components/form/SSHKnownHosts/index.vue +30 -13
- package/components/form/Security.vue +54 -56
- package/components/form/Select.vue +32 -21
- package/components/form/ShellInput.vue +5 -1
- package/components/form/Tolerations.vue +5 -1
- package/components/form/ValueFromResource.vue +134 -121
- package/components/form/WorkloadPorts.vue +18 -18
- package/components/form/__tests__/ArrayList.test.ts +5 -2
- package/components/form/__tests__/ColorInput.test.ts +35 -0
- package/components/form/__tests__/LabeledSelect.test.ts +40 -0
- package/components/form/__tests__/MatchExpressions.test.ts +12 -12
- package/components/form/__tests__/NameNsDescription.test.ts +115 -14
- package/components/form/__tests__/Probe.test.ts +12 -8
- package/components/form/__tests__/SSHKnownHosts.test.ts +22 -2
- package/components/form/__tests__/Select.test.ts +37 -0
- package/components/formatter/InternalExternalIP.vue +2 -0
- package/components/formatter/SecretData.vue +20 -7
- package/components/nav/Group.vue +27 -5
- package/components/nav/Header.vue +17 -43
- package/components/nav/NamespaceFilter.vue +134 -86
- package/components/nav/TopLevelMenu.vue +4 -5
- package/components/nav/Type.vue +12 -1
- package/components/nav/WindowManager/ContainerLogs.vue +87 -61
- package/components/nav/WindowManager/ContainerLogsActions.vue +76 -0
- package/components/templates/blank.vue +4 -1
- package/components/templates/default.vue +8 -3
- package/components/templates/home.vue +10 -1
- package/components/templates/plain.vue +10 -4
- package/composables/focusTrap.ts +12 -4
- package/composables/useRuntimeFlag.ts +29 -0
- package/config/router/routes.js +20 -13
- package/config/store.js +4 -0
- package/config/uiplugins.js +5 -1
- package/core/types.ts +12 -6
- package/detail/catalog.cattle.io.app.vue +6 -1
- package/detail/fleet.cattle.io.bundle.vue +70 -6
- package/detail/fleet.cattle.io.gitrepo.vue +1 -1
- package/detail/namespace.vue +0 -3
- package/detail/node.vue +17 -13
- package/detail/provisioning.cattle.io.cluster.vue +72 -6
- package/dialog/AddCustomBadgeDialog.vue +1 -1
- package/{pages/c/_cluster/uiplugins/AddExtensionRepos.vue → dialog/AddExtensionReposDialog.vue} +72 -42
- package/{components/AssignTo.vue → dialog/AssignToDialog.vue} +71 -80
- package/dialog/ChangePasswordDialog.vue +106 -0
- package/dialog/DeactivateDriverDialog.vue +1 -0
- package/{pages/c/_cluster/uiplugins/DeveloperInstallDialog.vue → dialog/DeveloperLoadExtensionDialog.vue} +74 -71
- package/dialog/DisableAuthProviderDialog.vue +101 -0
- package/dialog/DrainNode.vue +1 -1
- package/{pages/c/_cluster/uiplugins/CatalogList/CatalogLoadDialog.vue → dialog/ExtensionCatalogInstallDialog.vue} +100 -88
- package/{pages/c/_cluster/uiplugins/CatalogList/CatalogUninstallDialog.vue → dialog/ExtensionCatalogUninstallDialog.vue} +69 -57
- package/dialog/FeatureFlagListDialog.vue +288 -0
- package/dialog/ForceMachineRemoveDialog.vue +5 -2
- package/{components/Import.vue → dialog/ImportDialog.vue} +0 -5
- package/{pages/c/_cluster/uiplugins/InstallDialog.vue → dialog/InstallExtensionDialog.vue} +124 -106
- package/{components/form/SSHKnownHosts → dialog}/KnownHostsEditDialog.vue +52 -59
- package/dialog/MoveNamespaceDialog.vue +157 -0
- package/dialog/ScalePoolDownDialog.vue +1 -1
- package/{components/nav/Jump.vue → dialog/SearchDialog.vue} +34 -14
- package/{pages/c/_cluster/uiplugins/UninstallDialog.vue → dialog/UninstallExtensionDialog.vue} +67 -58
- package/dialog/WechatDialog.vue +57 -0
- package/edit/__tests__/monitoring.coreos.com.prometheusrule.test.ts +16 -3
- package/edit/auth/__tests__/oidc.test.ts +152 -109
- package/edit/auth/azuread.vue +2 -1
- package/edit/auth/github.vue +1 -1
- package/edit/auth/googleoauth.vue +5 -1
- package/edit/auth/ldap/index.vue +1 -1
- package/edit/auth/oidc.vue +38 -5
- package/edit/auth/saml.vue +1 -1
- package/edit/cloudcredential.vue +24 -9
- package/edit/logging.banzaicloud.io.output/__tests__/logging.banzaicloud.io.output.test.ts +40 -9
- package/edit/management.cattle.io.user.vue +28 -3
- package/edit/namespace.vue +1 -4
- package/edit/networking.k8s.io.ingress/IngressClass.vue +7 -3
- package/edit/networking.k8s.io.ingress/__tests__/IngressClass.test.ts +58 -0
- package/edit/persistentvolume/__tests__/persistentvolume.test.ts +14 -2
- package/edit/provisioning.cattle.io.cluster/CustomCommand.vue +4 -1
- package/edit/provisioning.cattle.io.cluster/SelectCredential.vue +26 -9
- package/edit/provisioning.cattle.io.cluster/__tests__/Advanced.test.ts +8 -8
- package/edit/provisioning.cattle.io.cluster/__tests__/DirectoryConfig.test.ts +26 -12
- package/edit/provisioning.cattle.io.cluster/__tests__/rke2.test.ts +66 -0
- package/edit/provisioning.cattle.io.cluster/__tests__/utils/rke2-test-data.ts +58 -0
- package/edit/provisioning.cattle.io.cluster/rke2.vue +49 -41
- package/edit/provisioning.cattle.io.cluster/tabs/AgentConfiguration.vue +6 -1
- package/edit/provisioning.cattle.io.cluster/tabs/DirectoryConfig.vue +5 -3
- package/edit/provisioning.cattle.io.cluster/tabs/MachinePool.vue +33 -2
- package/edit/provisioning.cattle.io.cluster/tabs/etcd/index.vue +2 -2
- package/edit/token.vue +2 -0
- package/edit/workload/index.vue +1 -0
- package/edit/workload/mixins/workload.js +0 -2
- package/initialize/install-plugins.js +2 -1
- package/list/harvesterhci.io.management.cluster.vue +4 -1
- package/list/management.cattle.io.feature.vue +4 -287
- package/list/provisioning.cattle.io.cluster.vue +20 -12
- package/machine-config/azure.vue +16 -4
- package/mixins/vue-select-overrides.js +0 -4
- package/models/__tests__/namespace.test.ts +25 -1
- package/models/cloudcredential.js +5 -0
- package/models/fleet.cattle.io.cluster.js +8 -2
- package/models/fleet.cattle.io.gitrepo.js +8 -34
- package/models/kontainerdriver.js +6 -3
- package/models/management.cattle.io.feature.js +7 -1
- package/models/management.cattle.io.node.js +3 -3
- package/models/namespace.js +11 -6
- package/models/nodedriver.js +6 -3
- package/models/workload.js +4 -1
- package/package.json +3 -3
- package/pages/about.vue +13 -3
- package/pages/account/index.vue +16 -6
- package/pages/auth/login.vue +18 -7
- package/pages/auth/logout.vue +4 -1
- package/pages/auth/setup.vue +2 -0
- package/pages/auth/verify.vue +13 -8
- package/pages/c/_cluster/apps/charts/chart.vue +1 -1
- package/pages/c/_cluster/apps/charts/install.vue +26 -26
- package/pages/c/_cluster/auth/config/index.vue +10 -12
- package/pages/c/_cluster/explorer/EventsTable.vue +38 -33
- package/pages/c/_cluster/explorer/index.vue +17 -15
- package/pages/c/_cluster/istio/index.vue +2 -2
- package/pages/c/_cluster/longhorn/index.vue +1 -1
- package/pages/c/_cluster/monitoring/index.vue +1 -1
- package/pages/c/_cluster/monitoring/monitor/_namespace/_id.vue +4 -2
- package/pages/c/_cluster/monitoring/monitor/create.vue +4 -2
- package/pages/c/_cluster/monitoring/route-receiver/_id.vue +4 -2
- package/pages/c/_cluster/monitoring/route-receiver/create.vue +5 -2
- package/pages/c/_cluster/neuvector/index.vue +1 -1
- package/pages/c/_cluster/settings/banners.vue +4 -3
- package/pages/c/_cluster/uiplugins/CatalogList/index.vue +8 -10
- package/pages/c/_cluster/uiplugins/__tests__/AddExtensionRepos.test.ts +4 -7
- package/pages/c/_cluster/uiplugins/index.vue +98 -55
- package/pages/diagnostic.vue +59 -11
- package/pages/fail-whale.vue +14 -8
- package/pages/home.vue +24 -18
- package/pages/prefs.vue +7 -6
- package/pages/support/index.vue +4 -1
- package/plugins/internal-api/index.ts +37 -0
- package/plugins/internal-api/shared/base-api.ts +13 -0
- package/plugins/internal-api/shell/shell.api.ts +108 -0
- package/plugins/steve/actions.js +0 -12
- package/public/index.html +1 -0
- package/rancher-components/Card/Card.vue +1 -1
- package/rancher-components/Form/Checkbox/Checkbox.test.ts +59 -1
- package/rancher-components/Form/Checkbox/Checkbox.vue +27 -3
- package/rancher-components/Form/LabeledInput/LabeledInput.test.ts +47 -0
- package/rancher-components/Form/LabeledInput/LabeledInput.vue +20 -2
- package/rancher-components/Form/Radio/RadioButton.test.ts +36 -1
- package/rancher-components/Form/Radio/RadioButton.vue +20 -4
- package/rancher-components/Form/Radio/RadioGroup.test.ts +60 -0
- package/rancher-components/Form/Radio/RadioGroup.vue +52 -10
- package/rancher-components/Form/ToggleSwitch/ToggleSwitch.test.ts +17 -0
- package/rancher-components/Form/ToggleSwitch/ToggleSwitch.vue +5 -0
- package/rancher-components/LabeledTooltip/LabeledTooltip.vue +10 -1
- package/rancher-components/RcButton/RcButton.vue +2 -1
- package/rancher-components/RcButton/types.ts +1 -0
- package/rancher-components/RcDropdown/RcDropdown.vue +18 -6
- package/rancher-components/RcDropdown/RcDropdownItem.vue +3 -56
- package/rancher-components/RcDropdown/RcDropdownItemCheckbox.vue +68 -0
- package/rancher-components/RcDropdown/RcDropdownItemSelect.vue +92 -0
- package/rancher-components/RcDropdown/RcDropdownTrigger.vue +10 -0
- package/rancher-components/RcDropdown/index.ts +2 -0
- package/rancher-components/RcDropdown/useDropdownCollection.ts +8 -0
- package/rancher-components/RcDropdown/useDropdownContext.ts +9 -3
- package/rancher-components/RcDropdown/useDropdownItem.ts +63 -0
- package/scripts/extension/bundle +20 -0
- package/scripts/extension/helm/charts/ui-plugin-server/templates/cr.yaml +2 -1
- package/scripts/extension/helm/charts/ui-plugin-server/values.yaml +2 -0
- package/scripts/extension/helmpatch +44 -31
- package/scripts/extension/publish +12 -12
- package/scripts/typegen.sh +2 -4
- package/server/har-file.js +25 -3
- package/store/action-menu.js +26 -56
- package/store/features.js +2 -1
- package/store/index.js +5 -0
- package/store/modal.ts +71 -0
- package/store/slideInPanel.ts +47 -0
- package/store/type-map.js +12 -1
- package/store/type-map.utils.ts +4 -4
- package/types/global-vue.d.ts +5 -0
- package/types/internal-api/shell/growl.d.ts +25 -0
- package/types/internal-api/shell/modal.d.ts +77 -0
- package/types/internal-api/shell/slideIn.d.ts +15 -0
- package/types/resources/fleet.d.ts +0 -14
- package/types/shell/index.d.ts +43 -24
- package/types/vue-shim.d.ts +4 -1
- package/utils/__mocks__/tabbable.js +13 -0
- package/utils/__tests__/object.test.ts +38 -4
- package/utils/cluster.js +35 -0
- package/utils/fleet.ts +15 -73
- package/utils/object.js +48 -5
- package/utils/validators/formRules/__tests__/index.test.ts +10 -1
- package/utils/validators/formRules/index.ts +27 -3
- package/utils/validators/machine-pool.ts +20 -0
- package/components/DisableAuthProviderModal.vue +0 -114
- package/components/MoveModal.vue +0 -166
- package/components/PromptChangePassword.vue +0 -123
- package/components/fleet/FleetBundleResources.vue +0 -86
- package/components/formatter/ExtensionCache.vue +0 -74
- package/components/formatter/Port.vue +0 -24
- package/components/formatter/SecretType.vue +0 -41
- package/types/vue-shim.d +0 -20
package/models/namespace.js
CHANGED
|
@@ -5,7 +5,6 @@ import {
|
|
|
5
5
|
import { ISTIO, MANAGEMENT } from '@shell/config/types';
|
|
6
6
|
|
|
7
7
|
import { get, set } from '@shell/utils/object';
|
|
8
|
-
import { escapeHtml } from '@shell/utils/string';
|
|
9
8
|
import { insertAt, isArray } from '@shell/utils/array';
|
|
10
9
|
import SteveModel from '@shell/plugins/steve/steve-class';
|
|
11
10
|
import { HARVESTER_NAME as HARVESTER } from '@shell/config/features';
|
|
@@ -74,7 +73,13 @@ export default class Namespace extends SteveModel {
|
|
|
74
73
|
}
|
|
75
74
|
|
|
76
75
|
move(resources = this) {
|
|
77
|
-
this.$dispatch('
|
|
76
|
+
this.$dispatch('promptModal', {
|
|
77
|
+
component: 'MoveNamespaceDialog',
|
|
78
|
+
resources: !Array.isArray(resources) ? [resources] : resources,
|
|
79
|
+
modalWidth: '440',
|
|
80
|
+
height: 'auto',
|
|
81
|
+
styles: 'max-height: 100vh;'
|
|
82
|
+
});
|
|
78
83
|
}
|
|
79
84
|
|
|
80
85
|
get isSystem() {
|
|
@@ -124,11 +129,11 @@ export default class Namespace extends SteveModel {
|
|
|
124
129
|
return project;
|
|
125
130
|
}
|
|
126
131
|
|
|
127
|
-
get
|
|
128
|
-
const
|
|
132
|
+
get groupById() {
|
|
133
|
+
const projectId = this.project?.id;
|
|
129
134
|
|
|
130
|
-
if (
|
|
131
|
-
return
|
|
135
|
+
if ( projectId ) {
|
|
136
|
+
return projectId;
|
|
132
137
|
} else {
|
|
133
138
|
return this.$rootGetters['i18n/t']('resourceTable.groupLabel.notInAProject');
|
|
134
139
|
}
|
package/models/nodedriver.js
CHANGED
|
@@ -80,14 +80,17 @@ export default class NodeDriver extends Driver {
|
|
|
80
80
|
return this.$dispatch('rancher/request', {
|
|
81
81
|
url: `v3/nodeDrivers/${ escape(this.id) }?action=activate`,
|
|
82
82
|
method: 'post',
|
|
83
|
-
}, { root: true })
|
|
83
|
+
}, { root: true }).catch((err) => {
|
|
84
|
+
this.$dispatch('growl/fromError', { title: this.t('drivers.error.activate', { name: this.nameDisplay }), err }, { root: true });
|
|
85
|
+
});
|
|
84
86
|
}
|
|
85
87
|
|
|
86
88
|
async activateBulk(resources) {
|
|
87
89
|
await Promise.all(resources.map((resource) => this.$dispatch('rancher/request', {
|
|
88
90
|
url: `v3/nodeDrivers/${ escape(resource.id) }?action=activate`,
|
|
89
91
|
method: 'post',
|
|
90
|
-
}, { root: true }
|
|
91
|
-
|
|
92
|
+
}, { root: true }).catch((err) => {
|
|
93
|
+
this.$dispatch('growl/fromError', { title: this.t('drivers.error.activate', { name: resource.nameDisplay }), err }, { root: true });
|
|
94
|
+
})));
|
|
92
95
|
}
|
|
93
96
|
}
|
package/models/workload.js
CHANGED
|
@@ -34,7 +34,10 @@ export default class Workload extends WorkloadService {
|
|
|
34
34
|
enabled: !!this.links.update,
|
|
35
35
|
});
|
|
36
36
|
|
|
37
|
-
if (type !== WORKLOAD_TYPES.JOB &&
|
|
37
|
+
if (type !== WORKLOAD_TYPES.JOB &&
|
|
38
|
+
type !== WORKLOAD_TYPES.CRON_JOB &&
|
|
39
|
+
type !== WORKLOAD_TYPES.REPLICA_SET
|
|
40
|
+
) {
|
|
38
41
|
insertAt(out, 0, {
|
|
39
42
|
action: 'toggleRollbackModal',
|
|
40
43
|
label: this.t('action.rollback'),
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rancher/shell",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.5-rc.2",
|
|
4
4
|
"description": "Rancher Dashboard Shell",
|
|
5
5
|
"repository": "https://github.com/rancherlabs/dashboard",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -75,7 +75,7 @@
|
|
|
75
75
|
"dayjs": "1.8.29",
|
|
76
76
|
"defu": "5.0.1",
|
|
77
77
|
"diff2html": "3.4.24",
|
|
78
|
-
"dompurify": "2.5
|
|
78
|
+
"dompurify": "3.2.5",
|
|
79
79
|
"element-matches": "^0.1.2",
|
|
80
80
|
"entities": "4.5.0",
|
|
81
81
|
"eslint-config-standard": "16.0.3",
|
|
@@ -105,7 +105,7 @@
|
|
|
105
105
|
"js-yaml-loader": "1.2.2",
|
|
106
106
|
"js-yaml": "4.1.0",
|
|
107
107
|
"jsdiff": "1.1.1",
|
|
108
|
-
"jsonpath-plus": "10.0
|
|
108
|
+
"jsonpath-plus": "10.3.0",
|
|
109
109
|
"jsrsasign": "11.0.0",
|
|
110
110
|
"jszip": "3.8.0",
|
|
111
111
|
"lodash": "4.17.21",
|
package/pages/about.vue
CHANGED
|
@@ -8,10 +8,12 @@ import { getVendor } from '@shell/config/private-label';
|
|
|
8
8
|
import { downloadFile } from '@shell/utils/download';
|
|
9
9
|
import { mapGetters } from 'vuex';
|
|
10
10
|
import TabTitle from '@shell/components/TabTitle';
|
|
11
|
+
import { PanelLocation, ExtensionPoint } from '@shell/core/types';
|
|
12
|
+
import ExtensionPanel from '@shell/components/ExtensionPanel';
|
|
11
13
|
|
|
12
14
|
export default {
|
|
13
15
|
components: {
|
|
14
|
-
BackLink, Loading, TabTitle
|
|
16
|
+
BackLink, ExtensionPanel, Loading, TabTitle
|
|
15
17
|
},
|
|
16
18
|
mixins: [BackRoute],
|
|
17
19
|
async fetch() {
|
|
@@ -19,8 +21,10 @@ export default {
|
|
|
19
21
|
},
|
|
20
22
|
data() {
|
|
21
23
|
return {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
+
extensionType: ExtensionPoint.PANEL,
|
|
25
|
+
extensionLocation: PanelLocation.ABOUT_TOP,
|
|
26
|
+
dashboardVersion: this.$config.dashboardVersion,
|
|
27
|
+
settings: null,
|
|
24
28
|
SETTING
|
|
25
29
|
};
|
|
26
30
|
},
|
|
@@ -115,6 +119,12 @@ export default {
|
|
|
115
119
|
{{ t('about.diagnostic.title') }}
|
|
116
120
|
</router-link>
|
|
117
121
|
</div>
|
|
122
|
+
<!-- Extensions area -->
|
|
123
|
+
<ExtensionPanel
|
|
124
|
+
:resource="{}"
|
|
125
|
+
:type="extensionType"
|
|
126
|
+
:location="extensionLocation"
|
|
127
|
+
/>
|
|
118
128
|
<h3>{{ t('about.versions.title') }}</h3>
|
|
119
129
|
<table>
|
|
120
130
|
<thead>
|
package/pages/account/index.vue
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
<script>
|
|
2
2
|
import BackLink from '@shell/components/BackLink';
|
|
3
|
-
import PromptChangePassword from '@shell/components/PromptChangePassword';
|
|
4
3
|
import { MANAGEMENT, NORMAN } from '@shell/config/types';
|
|
5
4
|
import { SETTING } from '@shell/config/settings';
|
|
6
5
|
import Loading from '@shell/components/Loading';
|
|
@@ -17,7 +16,7 @@ const API_ENDPOINT = '/v3';
|
|
|
17
16
|
|
|
18
17
|
export default {
|
|
19
18
|
components: {
|
|
20
|
-
CopyToClipboardText, BackLink, Banner,
|
|
19
|
+
CopyToClipboardText, BackLink, Banner, Loading, ResourceTable, Principal, TabTitle
|
|
21
20
|
},
|
|
22
21
|
mixins: [BackRoute],
|
|
23
22
|
async fetch() {
|
|
@@ -136,6 +135,15 @@ export default {
|
|
|
136
135
|
|
|
137
136
|
return false;
|
|
138
137
|
},
|
|
138
|
+
showChangePasswordDialog() {
|
|
139
|
+
this.$store.dispatch('management/promptModal', {
|
|
140
|
+
component: 'ChangePasswordDialog',
|
|
141
|
+
testId: 'change-password__modal',
|
|
142
|
+
customClass: 'change-password-modal',
|
|
143
|
+
modalWidth: '500',
|
|
144
|
+
height: '465'
|
|
145
|
+
});
|
|
146
|
+
}
|
|
139
147
|
}
|
|
140
148
|
};
|
|
141
149
|
</script>
|
|
@@ -165,21 +173,23 @@ export default {
|
|
|
165
173
|
type="button"
|
|
166
174
|
class="btn role-primary"
|
|
167
175
|
data-testid="account_change_password"
|
|
168
|
-
@click="
|
|
176
|
+
@click="showChangePasswordDialog"
|
|
169
177
|
>
|
|
170
178
|
{{ t("accountAndKeys.account.change") }}
|
|
171
179
|
</button>
|
|
172
180
|
</div>
|
|
173
181
|
</div>
|
|
174
|
-
<PromptChangePassword ref="promptChangePassword" />
|
|
175
182
|
|
|
176
|
-
<hr>
|
|
183
|
+
<hr role="none">
|
|
177
184
|
<div class="keys-header">
|
|
178
185
|
<div>
|
|
179
186
|
<h2 v-t="'accountAndKeys.apiKeys.title'" />
|
|
180
187
|
<div class="api-url">
|
|
181
188
|
<span>{{ t("accountAndKeys.apiKeys.apiEndpoint") }}</span>
|
|
182
|
-
<CopyToClipboardText
|
|
189
|
+
<CopyToClipboardText
|
|
190
|
+
:aria-label="t('accountAndKeys.apiKeys.copyApiEnpoint')"
|
|
191
|
+
:text="apiUrl"
|
|
192
|
+
/>
|
|
183
193
|
</div>
|
|
184
194
|
</div>
|
|
185
195
|
<button
|
package/pages/auth/login.vue
CHANGED
|
@@ -31,19 +31,18 @@ import {
|
|
|
31
31
|
import loadPlugins from '@shell/plugins/plugin';
|
|
32
32
|
import Loading from '@shell/components/Loading';
|
|
33
33
|
import { HARVESTER_NAME as HARVESTER } from '@shell/config/features';
|
|
34
|
+
import TabTitle from '@shell/components/TabTitle.vue';
|
|
34
35
|
|
|
35
36
|
export default {
|
|
36
37
|
name: 'Login',
|
|
37
38
|
components: {
|
|
38
|
-
LabeledInput, AsyncButton, Checkbox, BrandImage, Banner, InfoBox, CopyCode, Password, LocaleSelector, Loading
|
|
39
|
+
LabeledInput, AsyncButton, Checkbox, BrandImage, Banner, InfoBox, CopyCode, Password, LocaleSelector, Loading, TabTitle
|
|
39
40
|
},
|
|
40
41
|
|
|
41
42
|
data() {
|
|
42
|
-
const username = this.$cookies.get(USERNAME, { parseJSON: false }) || '';
|
|
43
|
-
|
|
44
43
|
return {
|
|
45
|
-
username,
|
|
46
|
-
remember:
|
|
44
|
+
username: '',
|
|
45
|
+
remember: false,
|
|
47
46
|
password: '',
|
|
48
47
|
|
|
49
48
|
timedOut: this.$route.query[TIMED_OUT] === _FLAGGED,
|
|
@@ -135,6 +134,11 @@ export default {
|
|
|
135
134
|
},
|
|
136
135
|
|
|
137
136
|
async fetch() {
|
|
137
|
+
const username = this.$cookies.get(USERNAME, { parseJSON: false }) || '';
|
|
138
|
+
|
|
139
|
+
this.username = username;
|
|
140
|
+
this.remember = !!username;
|
|
141
|
+
|
|
138
142
|
const { firstLoginSetting } = await this.loadInitialSettings();
|
|
139
143
|
const { value } = await this.$store.dispatch('management/find', { type: MANAGEMENT.SETTING, id: SETTING.BANNERS });
|
|
140
144
|
const drivers = await this.$store.dispatch('auth/getAuthProviders');
|
|
@@ -311,10 +315,16 @@ export default {
|
|
|
311
315
|
v-if="$fetchState.pending"
|
|
312
316
|
mode="relative"
|
|
313
317
|
/>
|
|
314
|
-
<
|
|
318
|
+
<div
|
|
315
319
|
v-else
|
|
316
320
|
class="main-layout login"
|
|
317
321
|
>
|
|
322
|
+
<TabTitle
|
|
323
|
+
:show-child="false"
|
|
324
|
+
:breadcrumb="false"
|
|
325
|
+
>
|
|
326
|
+
{{ `${vendor} - ${t('login.login')}` }}
|
|
327
|
+
</TabTitle>
|
|
318
328
|
<div class="row gutless mb-20">
|
|
319
329
|
<div class="col span-6 p-20">
|
|
320
330
|
<p class="text-center">
|
|
@@ -509,9 +519,10 @@ export default {
|
|
|
509
519
|
class="col span-6 landscape"
|
|
510
520
|
data-testid="login-landscape__img"
|
|
511
521
|
file-name="login-landscape.svg"
|
|
522
|
+
:alt="t('login.landscapeAlt')"
|
|
512
523
|
/>
|
|
513
524
|
</div>
|
|
514
|
-
</
|
|
525
|
+
</div>
|
|
515
526
|
</template>
|
|
516
527
|
|
|
517
528
|
<style lang="scss" scoped>
|
package/pages/auth/logout.vue
CHANGED
package/pages/auth/setup.vue
CHANGED
|
@@ -331,6 +331,7 @@ export default {
|
|
|
331
331
|
style="padding: 0 0 0 12px;"
|
|
332
332
|
>
|
|
333
333
|
<CopyToClipboard
|
|
334
|
+
:aria-label="t('setup.copyRandom')"
|
|
334
335
|
:text="password"
|
|
335
336
|
class="btn-sm"
|
|
336
337
|
/>
|
|
@@ -361,6 +362,7 @@ export default {
|
|
|
361
362
|
<hr
|
|
362
363
|
v-if="mustChangePassword"
|
|
363
364
|
class="mt-20 mb-20"
|
|
365
|
+
role="none"
|
|
364
366
|
>
|
|
365
367
|
<p>
|
|
366
368
|
<t
|
package/pages/auth/verify.vue
CHANGED
|
@@ -129,6 +129,13 @@ export default {
|
|
|
129
129
|
},
|
|
130
130
|
|
|
131
131
|
data() {
|
|
132
|
+
return {
|
|
133
|
+
testing: null,
|
|
134
|
+
isSlo: null,
|
|
135
|
+
};
|
|
136
|
+
},
|
|
137
|
+
|
|
138
|
+
created() {
|
|
132
139
|
const stateJSON = this.$route.query[GITHUB_NONCE] || '';
|
|
133
140
|
|
|
134
141
|
let parsed = {};
|
|
@@ -140,13 +147,8 @@ export default {
|
|
|
140
147
|
|
|
141
148
|
const { test } = parsed;
|
|
142
149
|
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
return {
|
|
147
|
-
testing: test,
|
|
148
|
-
isSlo
|
|
149
|
-
};
|
|
150
|
+
this.testing = test;
|
|
151
|
+
this.isSlo = this.$route.query[IS_SLO] === _FLAGGED;
|
|
150
152
|
},
|
|
151
153
|
|
|
152
154
|
mounted() {
|
|
@@ -182,7 +184,10 @@ export default {
|
|
|
182
184
|
</script>
|
|
183
185
|
|
|
184
186
|
<template>
|
|
185
|
-
<main
|
|
187
|
+
<main
|
|
188
|
+
class="main-layout"
|
|
189
|
+
:aria-label="t('layouts.verify')"
|
|
190
|
+
>
|
|
186
191
|
<h1 class="text-center mt-50">
|
|
187
192
|
<span v-if="testing">
|
|
188
193
|
Testing Configuration…
|
|
@@ -32,7 +32,9 @@ import {
|
|
|
32
32
|
import { CATALOG as CATALOG_ANNOTATIONS, PROJECT } from '@shell/config/labels-annotations';
|
|
33
33
|
|
|
34
34
|
import { exceptionToErrorsArray } from '@shell/utils/error';
|
|
35
|
-
import {
|
|
35
|
+
import {
|
|
36
|
+
clone, diff, get, mergeWithReplace, set
|
|
37
|
+
} from '@shell/utils/object';
|
|
36
38
|
import { ignoreVariables } from './install.helpers';
|
|
37
39
|
import { findBy, insertAt } from '@shell/utils/array';
|
|
38
40
|
import { saferDump } from '@shell/utils/create-yaml';
|
|
@@ -45,6 +47,22 @@ const VALUES_STATE = {
|
|
|
45
47
|
DIFF: 'DIFF'
|
|
46
48
|
};
|
|
47
49
|
|
|
50
|
+
/**
|
|
51
|
+
* Helm CLI options that are not persisted on the back end,
|
|
52
|
+
* but are used for the final install/upgrade operation.
|
|
53
|
+
*/
|
|
54
|
+
const defaultCmdOpts = {
|
|
55
|
+
cleanupOnFail: false,
|
|
56
|
+
crds: true,
|
|
57
|
+
hooks: true,
|
|
58
|
+
force: false,
|
|
59
|
+
resetValues: false,
|
|
60
|
+
openApi: true,
|
|
61
|
+
wait: true,
|
|
62
|
+
timeout: 600,
|
|
63
|
+
historyMax: 5,
|
|
64
|
+
};
|
|
65
|
+
|
|
48
66
|
function isPlainLayout(query) {
|
|
49
67
|
return Object.keys(query).includes(HIDE_SIDE_NAV);
|
|
50
68
|
}
|
|
@@ -312,15 +330,11 @@ export default {
|
|
|
312
330
|
*/
|
|
313
331
|
this.removeGlobalValuesFrom(userValues);
|
|
314
332
|
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
In this case, any values in userValues override any
|
|
321
|
-
matching values in versionInfo.
|
|
322
|
-
*/
|
|
323
|
-
this.chartValues = merge(merge({}, this.versionInfo?.values || {}), userValues);
|
|
333
|
+
this.chartValues = mergeWithReplace(
|
|
334
|
+
merge({}, this.versionInfo?.values || {}),
|
|
335
|
+
userValues,
|
|
336
|
+
{ replaceObjectProps: true }
|
|
337
|
+
);
|
|
324
338
|
|
|
325
339
|
if (this.showCustomRegistry) {
|
|
326
340
|
/**
|
|
@@ -359,20 +373,6 @@ export default {
|
|
|
359
373
|
},
|
|
360
374
|
|
|
361
375
|
data() {
|
|
362
|
-
/* Helm CLI options that are not persisted on the back end,
|
|
363
|
-
but are used for the final install/upgrade operation. */
|
|
364
|
-
const defaultCmdOpts = {
|
|
365
|
-
cleanupOnFail: false,
|
|
366
|
-
crds: true,
|
|
367
|
-
hooks: true,
|
|
368
|
-
force: false,
|
|
369
|
-
resetValues: false,
|
|
370
|
-
openApi: true,
|
|
371
|
-
wait: true,
|
|
372
|
-
timeout: 600,
|
|
373
|
-
historyMax: 5,
|
|
374
|
-
};
|
|
375
|
-
|
|
376
376
|
return {
|
|
377
377
|
defaultRegistrySetting: '',
|
|
378
378
|
customRegistrySetting: '',
|
|
@@ -1386,7 +1386,7 @@ export default {
|
|
|
1386
1386
|
>
|
|
1387
1387
|
<template v-slot:option="opt">
|
|
1388
1388
|
<template v-if="opt.kind === 'divider'">
|
|
1389
|
-
<hr>
|
|
1389
|
+
<hr role="none">
|
|
1390
1390
|
</template>
|
|
1391
1391
|
<template v-else-if="opt.kind === 'label'">
|
|
1392
1392
|
<b style="position: relative; left: -2.5px;">{{ opt.label }}</b>
|
|
@@ -1858,7 +1858,7 @@ export default {
|
|
|
1858
1858
|
}
|
|
1859
1859
|
|
|
1860
1860
|
.namespace-create-banner {
|
|
1861
|
-
margin-bottom:
|
|
1861
|
+
margin-bottom: calc($footer-height + 10px);
|
|
1862
1862
|
}
|
|
1863
1863
|
}
|
|
1864
1864
|
&__values {
|
|
@@ -7,6 +7,8 @@ import { authProvidersInfo } from '@shell/utils/auth';
|
|
|
7
7
|
import { Banner } from '@components/Banner';
|
|
8
8
|
import Loading from '@shell/components/Loading';
|
|
9
9
|
|
|
10
|
+
const resource = MANAGEMENT.AUTH_CONFIG;
|
|
11
|
+
|
|
10
12
|
export default {
|
|
11
13
|
components: {
|
|
12
14
|
SelectIconGrid, Banner, Loading
|
|
@@ -24,19 +26,7 @@ export default {
|
|
|
24
26
|
},
|
|
25
27
|
|
|
26
28
|
data() {
|
|
27
|
-
const resource = MANAGEMENT.AUTH_CONFIG;
|
|
28
|
-
const getters = this.$store.getters;
|
|
29
|
-
const inStore = getters['currentStore'](resource);
|
|
30
|
-
const hasListComponent = getters['type-map/hasCustomList'](resource);
|
|
31
|
-
const hasEditComponent = getters['type-map/hasCustomEdit'](resource);
|
|
32
|
-
const schema = getters[`${ inStore }/schemaFor`](resource);
|
|
33
|
-
|
|
34
29
|
return {
|
|
35
|
-
resource,
|
|
36
|
-
schema,
|
|
37
|
-
hasListComponent,
|
|
38
|
-
hasEditComponent,
|
|
39
|
-
|
|
40
30
|
// Provided by fetch later
|
|
41
31
|
enabled: false,
|
|
42
32
|
nonLocal: null,
|
|
@@ -60,6 +50,14 @@ export default {
|
|
|
60
50
|
}
|
|
61
51
|
};
|
|
62
52
|
},
|
|
53
|
+
|
|
54
|
+
inStore() {
|
|
55
|
+
return this.$store.getters['currentStore'](resource);
|
|
56
|
+
},
|
|
57
|
+
|
|
58
|
+
schema() {
|
|
59
|
+
return this.$store.getters[`${ this.inStore }/schemaFor`](resource);
|
|
60
|
+
}
|
|
63
61
|
},
|
|
64
62
|
|
|
65
63
|
methods: {
|
|
@@ -7,32 +7,48 @@ import { STEVE_EVENT_OBJECT, STEVE_NAME_COL } from '@shell/config/pagination-tab
|
|
|
7
7
|
import { headerFromSchemaColString } from '@shell/store/type-map.utils';
|
|
8
8
|
import { NAME as EXPLORER } from '@shell/config/product/explorer';
|
|
9
9
|
|
|
10
|
+
const reason = {
|
|
11
|
+
...REASON,
|
|
12
|
+
...{ canBeVariable: true },
|
|
13
|
+
width: 130,
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
const eventHeaders = [
|
|
17
|
+
reason,
|
|
18
|
+
OBJECT,
|
|
19
|
+
MESSAGE,
|
|
20
|
+
NAME, {
|
|
21
|
+
name: 'date',
|
|
22
|
+
label: 'Date',
|
|
23
|
+
labelKey: 'clusterIndexPage.sections.events.date.label',
|
|
24
|
+
value: 'timestamp',
|
|
25
|
+
sort: 'timestamp:desc',
|
|
26
|
+
formatter: 'Date',
|
|
27
|
+
width: 220,
|
|
28
|
+
defaultSort: true,
|
|
29
|
+
},
|
|
30
|
+
];
|
|
31
|
+
|
|
10
32
|
export default {
|
|
11
33
|
components: { PaginatedResourceTable },
|
|
12
34
|
|
|
13
35
|
data() {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
36
|
+
return {
|
|
37
|
+
schema: null,
|
|
38
|
+
events: [],
|
|
39
|
+
eventHeaders,
|
|
40
|
+
paginationHeaders: null,
|
|
41
|
+
allEventsLink: {
|
|
42
|
+
name: 'c-cluster-product-resource',
|
|
43
|
+
params: {
|
|
44
|
+
product: EXPLORER,
|
|
45
|
+
resource: EVENT,
|
|
46
|
+
}
|
|
47
|
+
}
|
|
18
48
|
};
|
|
49
|
+
},
|
|
19
50
|
|
|
20
|
-
|
|
21
|
-
reason,
|
|
22
|
-
OBJECT,
|
|
23
|
-
MESSAGE,
|
|
24
|
-
NAME, {
|
|
25
|
-
name: 'date',
|
|
26
|
-
label: 'Date',
|
|
27
|
-
labelKey: 'clusterIndexPage.sections.events.date.label',
|
|
28
|
-
value: 'timestamp',
|
|
29
|
-
sort: 'timestamp:desc',
|
|
30
|
-
formatter: 'Date',
|
|
31
|
-
width: 220,
|
|
32
|
-
defaultSort: true,
|
|
33
|
-
},
|
|
34
|
-
];
|
|
35
|
-
|
|
51
|
+
beforeMount() {
|
|
36
52
|
const schema = this.$store.getters['cluster/schemaFor'](EVENT);
|
|
37
53
|
|
|
38
54
|
const paginationHeaders = schema ? [
|
|
@@ -51,19 +67,8 @@ export default {
|
|
|
51
67
|
headerFromSchemaColString('Count', schema, this.$store.getters, true),
|
|
52
68
|
] : [];
|
|
53
69
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
events: [],
|
|
57
|
-
eventHeaders,
|
|
58
|
-
paginationHeaders,
|
|
59
|
-
allEventsLink: {
|
|
60
|
-
name: 'c-cluster-product-resource',
|
|
61
|
-
params: {
|
|
62
|
-
product: EXPLORER,
|
|
63
|
-
resource: EVENT,
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
};
|
|
70
|
+
this.schema = schema;
|
|
71
|
+
this.paginationHeaders = paginationHeaders;
|
|
67
72
|
},
|
|
68
73
|
|
|
69
74
|
mounted() {
|
|
@@ -63,6 +63,19 @@ const CLUSTER_COMPONENTS = [
|
|
|
63
63
|
'controller-manager',
|
|
64
64
|
];
|
|
65
65
|
|
|
66
|
+
const nodeHeaders = [
|
|
67
|
+
STATE,
|
|
68
|
+
NAME,
|
|
69
|
+
ROLES,
|
|
70
|
+
];
|
|
71
|
+
|
|
72
|
+
const clusterServiceIcons = {
|
|
73
|
+
[STATES_ENUM.IN_PROGRESS]: 'icon-spinner icon-spin',
|
|
74
|
+
[STATES_ENUM.HEALTHY]: 'icon-checkmark',
|
|
75
|
+
[STATES_ENUM.WARNING]: 'icon-warning',
|
|
76
|
+
[STATES_ENUM.UNHEALTHY]: 'icon-warning',
|
|
77
|
+
};
|
|
78
|
+
|
|
66
79
|
export default {
|
|
67
80
|
name: 'ClusterExplorerIndexPage',
|
|
68
81
|
|
|
@@ -118,20 +131,6 @@ export default {
|
|
|
118
131
|
},
|
|
119
132
|
|
|
120
133
|
data() {
|
|
121
|
-
const clusterCounts = this.$store.getters[`cluster/all`](COUNT);
|
|
122
|
-
const nodeHeaders = [
|
|
123
|
-
STATE,
|
|
124
|
-
NAME,
|
|
125
|
-
ROLES,
|
|
126
|
-
];
|
|
127
|
-
|
|
128
|
-
const clusterServiceIcons = {
|
|
129
|
-
[STATES_ENUM.IN_PROGRESS]: 'icon-spinner icon-spin',
|
|
130
|
-
[STATES_ENUM.HEALTHY]: 'icon-checkmark',
|
|
131
|
-
[STATES_ENUM.WARNING]: 'icon-warning',
|
|
132
|
-
[STATES_ENUM.UNHEALTHY]: 'icon-warning',
|
|
133
|
-
};
|
|
134
|
-
|
|
135
134
|
return {
|
|
136
135
|
nodeHeaders,
|
|
137
136
|
constraints: [],
|
|
@@ -152,7 +151,6 @@ export default {
|
|
|
152
151
|
ETCD_METRICS_DETAIL_URL,
|
|
153
152
|
ETCD_METRICS_SUMMARY_URL,
|
|
154
153
|
STATES_ENUM,
|
|
155
|
-
clusterCounts,
|
|
156
154
|
selectedTab: 'cluster-events',
|
|
157
155
|
extensionCards: getApplicableExtensionEnhancements(this, ExtensionPoint.CARD, CardLocation.CLUSTER_DASHBOARD_CARD, this.$route),
|
|
158
156
|
canViewEvents: !!this.$store.getters['cluster/schemaFor'](EVENT),
|
|
@@ -188,6 +186,10 @@ export default {
|
|
|
188
186
|
...mapGetters(['currentCluster']),
|
|
189
187
|
...monitoringStatus(),
|
|
190
188
|
|
|
189
|
+
clusterCounts() {
|
|
190
|
+
return this.$store.getters[`cluster/all`](COUNT);
|
|
191
|
+
},
|
|
192
|
+
|
|
191
193
|
nodes() {
|
|
192
194
|
return this.$store.getters['cluster/all'](NODE);
|
|
193
195
|
},
|
|
@@ -95,7 +95,7 @@ export default {
|
|
|
95
95
|
<t k="istio.links.kiali.label" />
|
|
96
96
|
<i class="icon icon-external-link pull-right" />
|
|
97
97
|
</a>
|
|
98
|
-
<hr>
|
|
98
|
+
<hr role="none">
|
|
99
99
|
<div class="description">
|
|
100
100
|
<span v-clean-html="t('istio.links.kiali.description', {link: monitoringUrl}, true)" />
|
|
101
101
|
</div>
|
|
@@ -131,7 +131,7 @@ export default {
|
|
|
131
131
|
<t k="istio.links.jaeger.label" />
|
|
132
132
|
<i class="icon icon-external-link pull-right" />
|
|
133
133
|
</a>
|
|
134
|
-
<hr>
|
|
134
|
+
<hr role="none">
|
|
135
135
|
<div class="description">
|
|
136
136
|
<span v-clean-html="t('istio.links.jaeger.description', true)" />
|
|
137
137
|
</div>
|