@rancher/shell 0.3.16 → 0.3.18
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/wechat-qr-code.jpg +0 -0
- package/assets/translations/en-us.yaml +75 -16
- package/assets/translations/zh-hans.yaml +151 -15
- package/chart/__tests__/S3.test.ts +50 -0
- package/chart/rancher-backup/S3.vue +21 -0
- package/chart/rancher-backup/index.vue +4 -0
- package/components/AsyncButton.vue +1 -1
- package/components/CommunityLinks.vue +1 -0
- package/components/FileDiff.vue +92 -85
- package/components/Inactivity.vue +10 -0
- package/components/LazyImage.vue +2 -2
- package/components/PromptRestore.vue +7 -5
- package/components/ResourceDetail/Masthead.vue +1 -1
- package/components/ResourceDetail/index.vue +8 -14
- package/components/ResourceList/index.vue +1 -1
- package/components/ResourceTable.vue +50 -2
- package/components/YamlEditor.vue +1 -0
- package/components/__tests__/PromptRestore.test.ts +72 -0
- package/components/auth/AzureWarning.vue +1 -1
- package/components/auth/RoleDetailEdit.vue +1 -0
- package/components/fleet/FleetResources.vue +3 -64
- package/components/form/FileImageSelector.vue +9 -0
- package/components/form/FileSelector.vue +2 -1
- package/components/form/MatchExpressions.vue +1 -3
- package/components/form/NameNsDescription.vue +28 -12
- package/components/form/NodeAffinity.vue +2 -2
- package/components/form/PodAffinity.vue +2 -2
- package/components/form/ResourceTabs/index.vue +8 -2
- package/components/form/Select.vue +16 -0
- package/components/form/__tests__/FileImageSelector.test.ts +42 -0
- package/components/form/__tests__/FileSelector.test.ts +76 -0
- package/components/form/__tests__/NodeAffinity.test.ts +38 -0
- package/components/form/__tests__/PodAffinity.test.ts +46 -0
- package/components/formatter/ClusterLink.vue +8 -4
- package/components/formatter/ClusterProvider.vue +3 -1
- package/components/formatter/ImageName.vue +23 -0
- package/components/formatter/PodImages.vue +7 -1
- package/components/formatter/__tests__/ClusterLink.test.ts +101 -0
- package/components/formatter/__tests__/ClusterProvider.test.ts +24 -0
- package/components/nav/Header.vue +2 -2
- package/components/nav/WindowManager/ContainerShell.vue +60 -36
- package/components/nav/WindowManager/__tests__/ContainerShell.test.ts +561 -0
- package/config/__test__/home-links.test.ts +62 -0
- package/config/home-links.js +15 -3
- package/config/labels-annotations.js +7 -2
- package/config/persistentVolume.ts +108 -0
- package/config/product/manager.js +5 -1
- package/config/router.js +0 -4
- package/config/settings.ts +4 -0
- package/config/table-headers.js +6 -5
- package/config/types.js +2 -0
- package/config/uiplugins.js +50 -5
- package/core/plugin-helpers.js +39 -15
- package/core/plugin.ts +9 -0
- package/core/plugins.js +1 -1
- package/core/types-provisioning.ts +253 -0
- package/core/types.ts +21 -3
- package/detail/autoscaling.horizontalpodautoscaler/index.vue +50 -1
- package/detail/fleet.cattle.io.gitrepo.vue +10 -2
- package/detail/node.vue +6 -6
- package/detail/pod.vue +38 -9
- package/detail/provisioning.cattle.io.cluster.vue +46 -7
- package/detail/workload/index.vue +49 -18
- package/edit/__tests__/fleet.cattle.io.gitrepo.test.ts +62 -0
- package/edit/__tests__/ui.cattle.io.navlink.test.ts +110 -0
- package/edit/auth/github.vue +1 -0
- package/edit/autoscaling.horizontalpodautoscaler/hpa-scaling-rule.vue +130 -0
- package/edit/autoscaling.horizontalpodautoscaler/index.vue +79 -0
- package/edit/fleet.cattle.io.clustergroup.vue +14 -3
- package/edit/fleet.cattle.io.gitrepo.vue +18 -1
- package/edit/namespace.vue +9 -1
- package/edit/networking.k8s.io.ingress/RulePath.vue +0 -2
- package/edit/persistentvolume/__tests__/persistentvolume.test.ts +82 -0
- package/edit/persistentvolume/index.vue +2 -1
- package/edit/persistentvolume/plugins/csi.vue +3 -1
- package/edit/persistentvolume/plugins/longhorn.vue +12 -12
- package/edit/provisioning.cattle.io.cluster/AgentConfiguration.vue +1 -30
- package/edit/provisioning.cattle.io.cluster/RegistryConfigs.vue +15 -11
- package/edit/provisioning.cattle.io.cluster/__tests__/rke2.test.ts +79 -1
- package/edit/provisioning.cattle.io.cluster/index.vue +53 -1
- package/edit/provisioning.cattle.io.cluster/rke2.vue +335 -151
- package/edit/storage.k8s.io.storageclass/index.vue +1 -2
- package/edit/ui.cattle.io.navlink.vue +213 -186
- package/initialize/App.js +3 -13
- package/initialize/layouts.ts +26 -0
- package/layouts/default.vue +1 -1
- package/list/group.principal.vue +1 -1
- package/list/provisioning.cattle.io.cluster.vue +8 -1
- package/middleware/authenticated.js +101 -5
- package/mixins/brand.js +39 -3
- package/mixins/child-hook.js +2 -2
- package/mixins/create-edit-view/impl.js +4 -4
- package/models/chart.js +1 -1
- package/models/fleet.cattle.io.cluster.js +33 -4
- package/models/fleet.cattle.io.gitrepo.js +113 -38
- package/models/management.cattle.io.kontainerdriver.js +14 -0
- package/models/persistentvolume.js +2 -111
- package/models/pod.js +30 -0
- package/models/provisioning.cattle.io.cluster.js +9 -1
- package/models/rke.cattle.io.etcdsnapshot.js +10 -7
- package/package.json +2 -2
- package/pages/about.vue +8 -2
- package/pages/auth/login.vue +1 -1
- package/pages/auth/logout.vue +11 -3
- package/pages/c/_cluster/apps/charts/index.vue +5 -2
- package/pages/c/_cluster/apps/charts/install.vue +5 -0
- 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 +2 -11
- package/pages/c/_cluster/manager/cloudCredential/_id.vue +0 -1
- package/pages/c/_cluster/manager/cloudCredential/create.vue +0 -1
- package/pages/c/_cluster/settings/brand.vue +11 -8
- package/pages/c/_cluster/uiplugins/AddExtensionRepos.vue +177 -0
- package/pages/c/_cluster/uiplugins/PluginInfoPanel.vue +19 -3
- package/pages/c/_cluster/uiplugins/RemoveUIPlugins.vue +90 -21
- package/pages/c/_cluster/uiplugins/SetupUIPlugins.vue +107 -37
- package/pages/c/_cluster/uiplugins/index.vue +160 -44
- package/pages/docs/_doc.vue +9 -3
- package/pages/home.vue +6 -6
- package/pages/support/index.vue +10 -4
- package/pkg/auto-import.js +1 -1
- package/plugins/clean-tooltip-directive.js +1 -1
- package/plugins/dashboard-store/__tests__/actions.spec.ts +165 -0
- package/plugins/dashboard-store/__tests__/getters.spec.ts +100 -0
- package/plugins/dashboard-store/__tests__/{mutations.spec.js → mutations.spec.ts} +2 -2
- package/plugins/dashboard-store/actions.js +1 -1
- package/plugins/dashboard-store/resource-class.js +39 -2
- package/plugins/plugin.js +9 -1
- package/plugins/steve/__tests__/getters.spec.ts +93 -0
- package/plugins/steve/getters.js +21 -1
- package/plugins/steve/subscribe.js +1 -3
- package/rancher-components/BadgeState/BadgeState.vue +5 -1
- package/rancher-components/Banner/Banner.test.ts +51 -1
- package/rancher-components/Banner/Banner.vue +134 -53
- package/rancher-components/Card/Card.test.ts +37 -0
- package/rancher-components/Card/Card.vue +24 -7
- package/rancher-components/Form/Checkbox/Checkbox.test.ts +20 -29
- package/rancher-components/Form/Checkbox/Checkbox.vue +45 -20
- package/rancher-components/Form/LabeledInput/LabeledInput.test.ts +2 -8
- package/rancher-components/Form/LabeledInput/LabeledInput.vue +22 -10
- package/rancher-components/Form/Radio/RadioButton.test.ts +31 -0
- package/rancher-components/Form/Radio/RadioButton.vue +30 -13
- package/rancher-components/Form/Radio/RadioGroup.vue +26 -7
- package/rancher-components/Form/TextArea/TextAreaAutoGrow.vue +7 -6
- package/rancher-components/Form/ToggleSwitch/ToggleSwitch.test.ts +25 -38
- package/rancher-components/Form/ToggleSwitch/ToggleSwitch.vue +23 -11
- package/rancher-components/LabeledTooltip/LabeledTooltip.vue +19 -5
- package/rancher-components/StringList/StringList.test.ts +453 -49
- package/rancher-components/StringList/StringList.vue +44 -26
- package/scripts/extension/publish +2 -2
- package/scripts/typegen.sh +11 -2
- package/server/server-middleware.js +4 -12
- package/store/index.js +14 -3
- package/store/prefs.js +0 -3
- package/store/store-types.js +2 -0
- package/store/type-map.js +17 -29
- package/types/api.d.ts +1 -0
- package/types/fleet.d.ts +1 -0
- package/types/shell/index.d.ts +931 -85
- package/types/userPreferences.d.ts +1 -1
- package/utils/__mocks__/socket.js +21 -0
- package/utils/grafana.js +23 -11
- package/utils/kube.js +9 -0
- package/utils/object.js +27 -0
- package/utils/selector.js +2 -1
- package/utils/settings.ts +2 -2
- package/utils/validators/formRules/index.ts +3 -3
- package/vue.config.js +3 -2
- package/components/.DS_Store +0 -0
- package/components/__tests__/.DS_Store +0 -0
- package/creators/pkg/package-lock.json +0 -37
- package/pages/safeMode.vue +0 -17
- package/plugins/steve/urloptions.js +0 -47
- package/yarn-error.log +0 -196
|
@@ -15,8 +15,10 @@ export const KONTAINER_TO_DRIVER = {
|
|
|
15
15
|
huaweicontainercloudengine: 'huaweicce', // Does this actually exist?
|
|
16
16
|
huaweiengine: 'huaweicce',
|
|
17
17
|
linodekubernetesengine: 'linodelke', // Does this actually exist?
|
|
18
|
+
lke: 'linodelke',
|
|
18
19
|
lkeengine: 'linodelke',
|
|
19
20
|
okeengine: 'oracleoke',
|
|
21
|
+
oke: 'oracleoke',
|
|
20
22
|
oraclecontainerengine: 'oracleoke', // Does this actually exist?
|
|
21
23
|
rke2: 'rke2',
|
|
22
24
|
tencentengine: 'tencenttke',
|
|
@@ -63,6 +65,18 @@ export default class KontainerDriver extends HybridModel {
|
|
|
63
65
|
}
|
|
64
66
|
|
|
65
67
|
get driverName() {
|
|
68
|
+
if (!this.spec.builtIn) {
|
|
69
|
+
// if the driver is not built in, there's a good change its a custom one
|
|
70
|
+
// custom drivers have a random id, so shouldn't be used as the type
|
|
71
|
+
// instead use the status.displayName. this will map to the name extracted from the binary
|
|
72
|
+
const driverName = this.status?.displayName?.toLowerCase();
|
|
73
|
+
|
|
74
|
+
if (driverName) {
|
|
75
|
+
// some drivers are built in but don't have the builtIn flag. ensure we pass these through K_TO_D
|
|
76
|
+
return KONTAINER_TO_DRIVER[driverName] || driverName;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
66
80
|
return KONTAINER_TO_DRIVER[this.id] || this.id;
|
|
67
81
|
}
|
|
68
82
|
}
|
|
@@ -1,116 +1,7 @@
|
|
|
1
|
-
import { PVC } from '@shell/config/types';
|
|
1
|
+
import { PVC, LONGHORN_DRIVER } from '@shell/config/types';
|
|
2
|
+
import { VOLUME_PLUGINS } from '@shell/config/persistentVolume';
|
|
2
3
|
import SteveModel from '@shell/plugins/steve/steve-class';
|
|
3
4
|
|
|
4
|
-
export const VOLUME_PLUGINS = [
|
|
5
|
-
{
|
|
6
|
-
labelKey: 'persistentVolume.awsElasticBlockStore.label',
|
|
7
|
-
value: 'awsElasticBlockStore',
|
|
8
|
-
supported: true
|
|
9
|
-
},
|
|
10
|
-
{
|
|
11
|
-
labelKey: 'persistentVolume.azureDisk.label',
|
|
12
|
-
value: 'azureDisk',
|
|
13
|
-
supported: true
|
|
14
|
-
},
|
|
15
|
-
{
|
|
16
|
-
labelKey: 'persistentVolume.azureFile.label',
|
|
17
|
-
value: 'azureFile',
|
|
18
|
-
supported: true
|
|
19
|
-
},
|
|
20
|
-
{
|
|
21
|
-
labelKey: 'persistentVolume.cephfs.label',
|
|
22
|
-
value: 'cephfs',
|
|
23
|
-
},
|
|
24
|
-
{
|
|
25
|
-
labelKey: 'persistentVolume.rbd.label',
|
|
26
|
-
value: 'rbd',
|
|
27
|
-
},
|
|
28
|
-
{
|
|
29
|
-
labelKey: 'persistentVolume.csi.label',
|
|
30
|
-
value: 'csi',
|
|
31
|
-
},
|
|
32
|
-
{
|
|
33
|
-
labelKey: 'persistentVolume.fc.label',
|
|
34
|
-
value: 'fc',
|
|
35
|
-
},
|
|
36
|
-
{
|
|
37
|
-
labelKey: 'persistentVolume.flexVolume.label',
|
|
38
|
-
value: 'flexVolume',
|
|
39
|
-
},
|
|
40
|
-
{
|
|
41
|
-
labelKey: 'persistentVolume.flocker.label',
|
|
42
|
-
value: 'flocker',
|
|
43
|
-
},
|
|
44
|
-
{
|
|
45
|
-
labelKey: 'persistentVolume.glusterfs.label',
|
|
46
|
-
value: 'glusterfs',
|
|
47
|
-
},
|
|
48
|
-
{
|
|
49
|
-
labelKey: 'persistentVolume.gcePersistentDisk.label',
|
|
50
|
-
value: 'gcePersistentDisk',
|
|
51
|
-
supported: true
|
|
52
|
-
},
|
|
53
|
-
{
|
|
54
|
-
labelKey: 'persistentVolume.hostPath.label',
|
|
55
|
-
value: 'hostPath',
|
|
56
|
-
supported: true
|
|
57
|
-
},
|
|
58
|
-
{
|
|
59
|
-
labelKey: 'persistentVolume.iscsi.label',
|
|
60
|
-
value: 'iscsi',
|
|
61
|
-
},
|
|
62
|
-
{
|
|
63
|
-
labelKey: 'persistentVolume.local.label',
|
|
64
|
-
value: 'local',
|
|
65
|
-
supported: true
|
|
66
|
-
},
|
|
67
|
-
{
|
|
68
|
-
labelKey: 'persistentVolume.longhorn.label',
|
|
69
|
-
value: 'longhorn',
|
|
70
|
-
supported: true
|
|
71
|
-
},
|
|
72
|
-
{
|
|
73
|
-
labelKey: 'persistentVolume.nfs.label',
|
|
74
|
-
value: 'nfs',
|
|
75
|
-
supported: true
|
|
76
|
-
},
|
|
77
|
-
{
|
|
78
|
-
labelKey: 'persistentVolume.cinder.label',
|
|
79
|
-
value: 'cinder',
|
|
80
|
-
},
|
|
81
|
-
{
|
|
82
|
-
labelKey: 'persistentVolume.photonPersistentDisk.label',
|
|
83
|
-
value: 'photonPersistentDisk',
|
|
84
|
-
},
|
|
85
|
-
{
|
|
86
|
-
labelKey: 'persistentVolume.portworxVolume.label',
|
|
87
|
-
value: 'portworxVolume',
|
|
88
|
-
},
|
|
89
|
-
|
|
90
|
-
{
|
|
91
|
-
labelKey: 'persistentVolume.quobyte.label',
|
|
92
|
-
value: 'quobyte',
|
|
93
|
-
},
|
|
94
|
-
|
|
95
|
-
{
|
|
96
|
-
labelKey: 'persistentVolume.scaleIO.label',
|
|
97
|
-
value: 'scaleIO',
|
|
98
|
-
},
|
|
99
|
-
{
|
|
100
|
-
labelKey: 'persistentVolume.storageos.label',
|
|
101
|
-
value: 'storageos',
|
|
102
|
-
},
|
|
103
|
-
{
|
|
104
|
-
labelKey: 'persistentVolume.vsphereVolume.label',
|
|
105
|
-
value: 'vsphereVolume',
|
|
106
|
-
supported: true
|
|
107
|
-
},
|
|
108
|
-
];
|
|
109
|
-
|
|
110
|
-
export const LONGHORN_DRIVER = 'driver.longhorn.io';
|
|
111
|
-
|
|
112
|
-
export const LONGHORN_PLUGIN = VOLUME_PLUGINS.find((plugin) => plugin.value === 'longhorn');
|
|
113
|
-
|
|
114
5
|
export default class PV extends SteveModel {
|
|
115
6
|
// plugin display value table
|
|
116
7
|
get source() {
|
package/models/pod.js
CHANGED
|
@@ -15,6 +15,36 @@ export const WORKLOAD_PRIORITY = {
|
|
|
15
15
|
};
|
|
16
16
|
|
|
17
17
|
export default class Pod extends WorkloadService {
|
|
18
|
+
_os = undefined;
|
|
19
|
+
|
|
20
|
+
get inStore() {
|
|
21
|
+
return this.$rootGetters['currentProduct'].inStore;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
set os(operatingSystem) {
|
|
25
|
+
this._os = operatingSystem;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
get os() {
|
|
29
|
+
if (this._os) {
|
|
30
|
+
return this._os;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
return this?.node?.status?.nodeInfo?.operatingSystem;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
get node() {
|
|
37
|
+
try {
|
|
38
|
+
const schema = this.$store.getters[`cluster/schemaFor`](NODE);
|
|
39
|
+
|
|
40
|
+
if (schema) {
|
|
41
|
+
this.$dispatch(`find`, { type: NODE, id: this.spec.nodeName });
|
|
42
|
+
}
|
|
43
|
+
} catch {}
|
|
44
|
+
|
|
45
|
+
return this.$getters['byId'](NODE, this.spec.nodeName);
|
|
46
|
+
}
|
|
47
|
+
|
|
18
48
|
get _availableActions() {
|
|
19
49
|
const out = super._availableActions;
|
|
20
50
|
|
|
@@ -9,10 +9,11 @@ import { ucFirst } from '@shell/utils/string';
|
|
|
9
9
|
import { compare } from '@shell/utils/version';
|
|
10
10
|
import { AS, MODE, _VIEW, _YAML } from '@shell/config/query-params';
|
|
11
11
|
import { HARVESTER_NAME as HARVESTER } from '@shell/config/features';
|
|
12
|
+
import { CAPI as CAPI_ANNOTATIONS } from '@shell/config/labels-annotations';
|
|
12
13
|
|
|
13
14
|
/**
|
|
14
15
|
* Class representing Cluster resource.
|
|
15
|
-
* @extends
|
|
16
|
+
* @extends SteveModel
|
|
16
17
|
*/
|
|
17
18
|
export default class ProvCluster extends SteveModel {
|
|
18
19
|
get details() {
|
|
@@ -381,6 +382,13 @@ export default class ProvCluster extends SteveModel {
|
|
|
381
382
|
}
|
|
382
383
|
|
|
383
384
|
get machineProvider() {
|
|
385
|
+
// First check annotation - useful for clusters created by extension providers
|
|
386
|
+
const fromAnnotation = this.annotations?.[CAPI_ANNOTATIONS.UI_CUSTOM_PROVIDER];
|
|
387
|
+
|
|
388
|
+
if (fromAnnotation) {
|
|
389
|
+
return fromAnnotation;
|
|
390
|
+
}
|
|
391
|
+
|
|
384
392
|
if (this.isHarvester) {
|
|
385
393
|
return HARVESTER;
|
|
386
394
|
} else if ( this.isImported ) {
|
|
@@ -5,17 +5,20 @@ import { findBy } from '@shell/utils/array';
|
|
|
5
5
|
import { get } from '@shell/utils/object';
|
|
6
6
|
import { base64Decode } from '@shell/utils/crypto';
|
|
7
7
|
import { ucFirst } from '@shell/utils/string';
|
|
8
|
+
import { STATES_ENUM } from '@shell/plugins/dashboard-store/resource-class';
|
|
8
9
|
|
|
9
10
|
export default class EtcdBackup extends NormanModel {
|
|
10
11
|
/**
|
|
11
12
|
* Restrict actions for snapshots to restore only
|
|
12
13
|
*/
|
|
13
14
|
get _availableActions() {
|
|
15
|
+
const enabled = this.snapshotFile?.status === STATES_ENUM.SUCCESSFUL;
|
|
16
|
+
|
|
14
17
|
return [{
|
|
15
|
-
action:
|
|
16
|
-
enabled
|
|
17
|
-
icon:
|
|
18
|
-
label:
|
|
18
|
+
action: 'promptRestore',
|
|
19
|
+
enabled,
|
|
20
|
+
icon: 'icon icon-fw icon-backup-restore',
|
|
21
|
+
label: 'Restore'
|
|
19
22
|
}];
|
|
20
23
|
}
|
|
21
24
|
|
|
@@ -48,7 +51,7 @@ export default class EtcdBackup extends NormanModel {
|
|
|
48
51
|
}
|
|
49
52
|
|
|
50
53
|
get errorMessage() {
|
|
51
|
-
const inError = get(this, 'snapshotFile.status') ===
|
|
54
|
+
const inError = get(this, 'snapshotFile.status') === STATES_ENUM.FAILED;
|
|
52
55
|
|
|
53
56
|
if (inError) {
|
|
54
57
|
return base64Decode(this.snapshotFile?.message);
|
|
@@ -59,10 +62,10 @@ export default class EtcdBackup extends NormanModel {
|
|
|
59
62
|
|
|
60
63
|
get stateDescription() {
|
|
61
64
|
const trans = this.stateObj?.transitioning || false;
|
|
62
|
-
const error = this.stateObj?.error || this.snapshotFile?.status ===
|
|
65
|
+
const error = this.stateObj?.error || this.snapshotFile?.status === STATES_ENUM.FAILED || false;
|
|
63
66
|
const message = this.stateObj?.message;
|
|
64
67
|
|
|
65
|
-
const fileMessage = this.snapshotFile?.status ===
|
|
68
|
+
const fileMessage = this.snapshotFile?.status === STATES_ENUM.FAILED ? base64Decode(this.snapshotFile?.message) : null;
|
|
66
69
|
|
|
67
70
|
return trans || error ? fileMessage || ucFirst(message) : '';
|
|
68
71
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rancher/shell",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.18",
|
|
4
4
|
"description": "Rancher Dashboard Shell",
|
|
5
5
|
"repository": "https://github.com/rancherlabs/dashboard",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -69,7 +69,7 @@
|
|
|
69
69
|
"d3-selection": "1.4.1",
|
|
70
70
|
"dagre-d3": "0.6.4",
|
|
71
71
|
"dayjs": "1.8.29",
|
|
72
|
-
"diff2html": "
|
|
72
|
+
"diff2html": "3.4.24",
|
|
73
73
|
"dompurify": "2.4.5",
|
|
74
74
|
"eslint": "7.32.0",
|
|
75
75
|
"eslint-config-standard": "16.0.3",
|
package/pages/about.vue
CHANGED
|
@@ -6,6 +6,7 @@ import { MANAGEMENT } from '@shell/config/types';
|
|
|
6
6
|
import { SETTING } from '@shell/config/settings';
|
|
7
7
|
import { getVendor } from '@shell/config/private-label';
|
|
8
8
|
import { downloadFile } from '@shell/utils/download';
|
|
9
|
+
import { mapGetters } from 'vuex';
|
|
9
10
|
|
|
10
11
|
export default {
|
|
11
12
|
layout: 'plain',
|
|
@@ -22,6 +23,7 @@ export default {
|
|
|
22
23
|
};
|
|
23
24
|
},
|
|
24
25
|
computed: {
|
|
26
|
+
...mapGetters(['releaseNotesUrl']),
|
|
25
27
|
rancherVersion() {
|
|
26
28
|
return this.settings.find((s) => s.id === SETTING.VERSION_RANCHER);
|
|
27
29
|
},
|
|
@@ -168,9 +170,13 @@ export default {
|
|
|
168
170
|
</tr>
|
|
169
171
|
</table>
|
|
170
172
|
<p class="pt-20">
|
|
171
|
-
<
|
|
173
|
+
<a
|
|
174
|
+
:href="releaseNotesUrl"
|
|
175
|
+
target="_blank"
|
|
176
|
+
rel="nofollow noopener noreferrer"
|
|
177
|
+
>
|
|
172
178
|
{{ t('about.versions.releaseNotes') }}
|
|
173
|
-
</
|
|
179
|
+
</a>
|
|
174
180
|
</p>
|
|
175
181
|
<template v-if="downloadImageList.length">
|
|
176
182
|
<h3 class="pt-40">
|
package/pages/auth/login.vue
CHANGED
package/pages/auth/logout.vue
CHANGED
|
@@ -11,8 +11,16 @@ export default {
|
|
|
11
11
|
|
|
12
12
|
<template>
|
|
13
13
|
<main class="main-layout">
|
|
14
|
-
<
|
|
15
|
-
|
|
16
|
-
</
|
|
14
|
+
<div>
|
|
15
|
+
<h1 v-t="'logout.message'" />
|
|
16
|
+
</div>
|
|
17
17
|
</main>
|
|
18
18
|
</template>
|
|
19
|
+
<style lang="scss" scoped>
|
|
20
|
+
main > div {
|
|
21
|
+
display: flex;
|
|
22
|
+
align-items: center;
|
|
23
|
+
justify-content: center;
|
|
24
|
+
height: 100vh;
|
|
25
|
+
}
|
|
26
|
+
</style>
|
|
@@ -242,7 +242,7 @@ export default {
|
|
|
242
242
|
},
|
|
243
243
|
|
|
244
244
|
created() {
|
|
245
|
-
const release = this.currentCluster?.status?.version
|
|
245
|
+
const release = this.currentCluster?.status?.version?.gitVersion || '';
|
|
246
246
|
const isRKE2 = release.includes('rke2');
|
|
247
247
|
const version = release.match(/\d+/g);
|
|
248
248
|
|
|
@@ -352,7 +352,10 @@ export default {
|
|
|
352
352
|
<div v-else>
|
|
353
353
|
<header>
|
|
354
354
|
<div class="title">
|
|
355
|
-
<h1
|
|
355
|
+
<h1
|
|
356
|
+
data-testid="charts-header-title"
|
|
357
|
+
class="m-0"
|
|
358
|
+
>
|
|
356
359
|
{{ t('catalog.charts.header') }}
|
|
357
360
|
</h1>
|
|
358
361
|
</div>
|
|
@@ -1251,6 +1251,10 @@ export default {
|
|
|
1251
1251
|
this.steps[0].ready = okRequires && okChart;
|
|
1252
1252
|
},
|
|
1253
1253
|
|
|
1254
|
+
updateStepTwoReady(update) {
|
|
1255
|
+
this.updateStep('helmValues', { ready: update });
|
|
1256
|
+
},
|
|
1257
|
+
|
|
1254
1258
|
getOptionLabel(opt) {
|
|
1255
1259
|
return opt?.chartNameDisplay;
|
|
1256
1260
|
},
|
|
@@ -1567,6 +1571,7 @@ export default {
|
|
|
1567
1571
|
@warn="e=>errors.push(e)"
|
|
1568
1572
|
@register-before-hook="registerBeforeHook"
|
|
1569
1573
|
@register-after-hook="registerAfterHook"
|
|
1574
|
+
@valid="updateStepTwoReady($event)"
|
|
1570
1575
|
/>
|
|
1571
1576
|
</Tabbed>
|
|
1572
1577
|
<template v-else>
|
|
@@ -6,7 +6,7 @@ import { NORMAN } from '@shell/config/types';
|
|
|
6
6
|
import { _VIEW, _EDIT } from '@shell/config/query-params';
|
|
7
7
|
import { exceptionToErrorsArray } from '@shell/utils/error';
|
|
8
8
|
import { NAME } from '@shell/config/product/auth';
|
|
9
|
-
import { BLANK_CLUSTER } from '@shell/store';
|
|
9
|
+
import { BLANK_CLUSTER } from '@shell/store/store-types.js';
|
|
10
10
|
|
|
11
11
|
export default {
|
|
12
12
|
components: {
|
|
@@ -6,7 +6,7 @@ import ResourceTable from '@shell/components/ResourceTable';
|
|
|
6
6
|
import Loading from '@shell/components/Loading';
|
|
7
7
|
import { SUBTYPE_MAPPING, CREATE_VERBS } from '@shell/models/management.cattle.io.roletemplate';
|
|
8
8
|
import { NAME } from '@shell/config/product/auth';
|
|
9
|
-
import { BLANK_CLUSTER } from '@shell/store';
|
|
9
|
+
import { BLANK_CLUSTER } from '@shell/store/store-types.js';
|
|
10
10
|
|
|
11
11
|
const GLOBAL = SUBTYPE_MAPPING.GLOBAL.key;
|
|
12
12
|
const CLUSTER = SUBTYPE_MAPPING.CLUSTER.key;
|
|
@@ -27,7 +27,7 @@ import {
|
|
|
27
27
|
STATE,
|
|
28
28
|
} from '@shell/config/table-headers';
|
|
29
29
|
|
|
30
|
-
import { mapPref,
|
|
30
|
+
import { mapPref, PSP_DEPRECATION_BANNER } from '@shell/store/prefs';
|
|
31
31
|
import { haveV1Monitoring, monitoringStatus } from '@shell/utils/monitoring';
|
|
32
32
|
import Tabbed from '@shell/components/Tabbed';
|
|
33
33
|
import Tab from '@shell/components/Tabbed/Tab';
|
|
@@ -103,7 +103,7 @@ export default {
|
|
|
103
103
|
`Determine etcd metrics`
|
|
104
104
|
);
|
|
105
105
|
|
|
106
|
-
if (this.currentCluster.isLocal) {
|
|
106
|
+
if (this.currentCluster.isLocal && this.$store.getters['management/schemaFor'](MANAGEMENT.NODE)) {
|
|
107
107
|
this.$store.dispatch('management/findAll', { type: MANAGEMENT.NODE });
|
|
108
108
|
}
|
|
109
109
|
}
|
|
@@ -173,7 +173,6 @@ export default {
|
|
|
173
173
|
return this.$store.getters['management/all'](MANAGEMENT.CLUSTER);
|
|
174
174
|
},
|
|
175
175
|
|
|
176
|
-
hideClusterToolsTip: mapPref(CLUSTER_TOOLS_TIP),
|
|
177
176
|
hidePspDeprecationBanner: mapPref(PSP_DEPRECATION_BANNER),
|
|
178
177
|
|
|
179
178
|
hasV1Monitoring() {
|
|
@@ -441,14 +440,6 @@ export default {
|
|
|
441
440
|
:raw="true"
|
|
442
441
|
/>
|
|
443
442
|
</Banner>
|
|
444
|
-
<Banner
|
|
445
|
-
v-if="!hideClusterToolsTip"
|
|
446
|
-
:closable="true"
|
|
447
|
-
class="cluster-tools-tip"
|
|
448
|
-
color="info"
|
|
449
|
-
label-key="cluster.toolsTip"
|
|
450
|
-
@close="hideClusterToolsTip = true"
|
|
451
|
-
/>
|
|
452
443
|
<div
|
|
453
444
|
class="cluster-dashboard-glance"
|
|
454
445
|
>
|
|
@@ -4,7 +4,7 @@ import ColorInput from '@shell/components/form/ColorInput';
|
|
|
4
4
|
import TypeDescription from '@shell/components/TypeDescription';
|
|
5
5
|
|
|
6
6
|
import { Checkbox } from '@components/Form/Checkbox';
|
|
7
|
-
import
|
|
7
|
+
import FileImageSelector from '@shell/components/form/FileImageSelector';
|
|
8
8
|
import SimpleBox from '@shell/components/SimpleBox';
|
|
9
9
|
import Loading from '@shell/components/Loading';
|
|
10
10
|
import AsyncButton from '@shell/components/AsyncButton';
|
|
@@ -23,7 +23,7 @@ export default {
|
|
|
23
23
|
layout: 'authenticated',
|
|
24
24
|
|
|
25
25
|
components: {
|
|
26
|
-
LabeledInput, Checkbox,
|
|
26
|
+
LabeledInput, Checkbox, FileImageSelector, Loading, SimpleBox, AsyncButton, Banner, ColorInput, TypeDescription
|
|
27
27
|
},
|
|
28
28
|
|
|
29
29
|
async fetch() {
|
|
@@ -222,14 +222,15 @@ export default {
|
|
|
222
222
|
>
|
|
223
223
|
<div class="col logo-container span-6">
|
|
224
224
|
<div class="mb-10">
|
|
225
|
-
<
|
|
225
|
+
<FileImageSelector
|
|
226
226
|
:byte-limit="20000"
|
|
227
227
|
:read-as-data-url="true"
|
|
228
228
|
class="role-secondary"
|
|
229
229
|
:label="t('branding.logos.uploadLight')"
|
|
230
230
|
:mode="mode"
|
|
231
|
+
accept="image/jpeg,image/png,image/svg+xml"
|
|
231
232
|
@error="setError"
|
|
232
|
-
@
|
|
233
|
+
@input="updateLogo($event, 'uiLogoLight')"
|
|
233
234
|
/>
|
|
234
235
|
</div>
|
|
235
236
|
<SimpleBox
|
|
@@ -245,14 +246,15 @@ export default {
|
|
|
245
246
|
</div>
|
|
246
247
|
<div class="col logo-container span-6">
|
|
247
248
|
<div class="mb-10">
|
|
248
|
-
<
|
|
249
|
+
<FileImageSelector
|
|
249
250
|
:byte-limit="20000"
|
|
250
251
|
:read-as-data-url="true"
|
|
251
252
|
class="role-secondary"
|
|
252
253
|
:label="t('branding.logos.uploadDark')"
|
|
253
254
|
:mode="mode"
|
|
255
|
+
accept="image/jpeg,image/png,image/svg+xml"
|
|
254
256
|
@error="setError"
|
|
255
|
-
@
|
|
257
|
+
@input="updateLogo($event, 'uiLogoDark')"
|
|
256
258
|
/>
|
|
257
259
|
</div>
|
|
258
260
|
<SimpleBox
|
|
@@ -289,14 +291,15 @@ export default {
|
|
|
289
291
|
>
|
|
290
292
|
<div class="col logo-container span-12">
|
|
291
293
|
<div class="mb-10">
|
|
292
|
-
<
|
|
294
|
+
<FileImageSelector
|
|
293
295
|
:byte-limit="20000"
|
|
294
296
|
:read-as-data-url="true"
|
|
295
297
|
class="role-secondary"
|
|
296
298
|
:label="t('branding.favicon.upload')"
|
|
297
299
|
:mode="mode"
|
|
300
|
+
accept="image/jpeg,image/png,image/svg+xml"
|
|
298
301
|
@error="setError"
|
|
299
|
-
@
|
|
302
|
+
@input="updateLogo($event, 'uiFavicon')"
|
|
300
303
|
/>
|
|
301
304
|
</div>
|
|
302
305
|
<SimpleBox v-if="uiFavicon">
|