@rancher/shell 3.0.0-rc.9 → 3.0.1-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/brand/harvester/favicon.png +0 -0
- package/assets/brand/harvester/metadata.json +3 -0
- package/assets/images/pl/harvester.svg +1 -0
- package/assets/translations/en-us.yaml +37 -15
- package/assets/translations/zh-hans.yaml +2 -5
- package/components/BrandImage.vue +5 -1
- package/components/CopyToClipboardText.vue +2 -0
- package/components/CruResourceFooter.vue +1 -0
- package/components/DetailTop.vue +1 -1
- package/components/EmberPage.vue +0 -8
- package/components/ExplorerMembers.vue +5 -1
- package/components/ExplorerProjectsNamespaces.vue +39 -15
- package/components/HardwareResourceGauge.vue +12 -2
- package/components/InputOrDisplay.vue +6 -2
- package/components/LandingPagePreference.vue +2 -2
- package/components/MessageLink.vue +1 -1
- package/components/ResourceDetail/Masthead.vue +22 -1
- package/components/ResourceDetail/index.vue +2 -8
- package/components/ResourceTable.vue +40 -7
- package/components/ResourceYaml.vue +1 -1
- package/components/SideNav.vue +1 -1
- package/components/SortableTable/actions.js +1 -1
- package/components/SortableTable/index.vue +17 -1
- package/components/SortableTable/selection.js +1 -1
- package/components/SortableTable/sorting.js +11 -3
- package/components/TableDataUserIcon.vue +1 -1
- package/components/fleet/FleetClusters.vue +0 -3
- package/components/fleet/FleetRepos.vue +0 -7
- package/components/form/ArrayList.vue +5 -1
- package/components/form/ArrayListSelect.vue +5 -1
- package/components/form/HookOption.vue +31 -29
- package/components/form/KeyValue.vue +1 -1
- package/components/form/LabeledSelect.vue +26 -7
- package/components/form/LifecycleHooks.vue +2 -2
- package/components/form/Password.vue +7 -1
- package/components/form/UnitInput.vue +10 -1
- package/components/form/__tests__/UnitInput.test.ts +1 -0
- package/components/formatter/ClusterProvider.vue +3 -3
- package/components/formatter/ImagePercentageBar.vue +1 -1
- package/components/formatter/SecretData.vue +1 -1
- package/components/formatter/Si.vue +5 -1
- package/components/formatter/Translate.vue +1 -1
- package/components/nav/Header.vue +38 -17
- package/components/nav/NamespaceFilter.vue +5 -8
- package/components/nav/TopLevelMenu.vue +11 -51
- package/components/nav/WorkspaceSwitcher.vue +0 -1
- package/config/labels-annotations.js +2 -0
- package/config/private-label.js +2 -1
- package/config/router/routes.js +2 -26
- package/config/settings.ts +5 -0
- package/config/table-headers.js +15 -0
- package/config/types.js +3 -0
- package/config/version.js +2 -0
- package/detail/catalog.cattle.io.app.vue +17 -4
- package/detail/fleet.cattle.io.bundle.vue +5 -68
- package/detail/fleet.cattle.io.cluster.vue +11 -9
- package/detail/fleet.cattle.io.gitrepo.vue +3 -2
- package/directives/clean-tooltip.js +4 -4
- package/edit/cis.cattle.io.clusterscan.vue +4 -3
- package/edit/fleet.cattle.io.gitrepo.vue +11 -8
- package/edit/logging-flow/Match.vue +75 -42
- package/edit/logging-flow/index.vue +89 -10
- package/edit/logging.banzaicloud.io.output/index.vue +2 -2
- package/edit/management.cattle.io.project.vue +4 -3
- package/edit/monitoring.coreos.com.prometheusrule/AlertingRule.vue +5 -5
- package/edit/monitoring.coreos.com.prometheusrule/index.vue +1 -1
- package/edit/namespace.vue +1 -1
- package/edit/provisioning.cattle.io.cluster/__tests__/Advanced.test.ts +26 -0
- package/edit/provisioning.cattle.io.cluster/__tests__/DirectoryConfig.test.ts +63 -149
- package/edit/provisioning.cattle.io.cluster/index.vue +2 -1
- package/edit/provisioning.cattle.io.cluster/rke2.vue +4 -4
- package/edit/provisioning.cattle.io.cluster/tabs/Advanced.vue +7 -2
- package/edit/provisioning.cattle.io.cluster/tabs/DirectoryConfig.vue +108 -35
- package/edit/provisioning.cattle.io.cluster/tabs/MachinePool.vue +1 -1
- package/edit/provisioning.cattle.io.cluster/tabs/registries/RegistryConfigs.vue +1 -1
- package/edit/provisioning.cattle.io.cluster/tabs/registries/RegistryMirrors.vue +1 -1
- package/edit/workload/mixins/workload.js +1 -1
- package/list/harvesterhci.io.management.cluster.vue +244 -0
- package/list/namespace.vue +16 -4
- package/mixins/browser-tab-visibility.js +1 -1
- package/mixins/chart.js +6 -2
- package/mixins/metric-poller.js +1 -1
- package/mixins/resource-fetch.js +1 -1
- package/models/__tests__/management.cattle.io.cluster.test.ts +45 -3
- package/models/__tests__/provisioning.cattle.io.cluster.test.ts +0 -86
- package/models/catalog.cattle.io.app.js +108 -21
- package/models/cloudcredential.js +4 -4
- package/models/fleet.cattle.io.bundle.js +3 -1
- package/models/fleet.cattle.io.gitrepo.js +51 -63
- package/models/k8s.cni.cncf.io.networkattachmentdefinition.js +88 -0
- package/models/management.cattle.io.cluster.js +39 -7
- package/models/management.cattle.io.project.js +4 -0
- package/models/management.cattle.io.setting.js +25 -0
- package/models/provisioning.cattle.io.cluster.js +6 -16
- package/models/storage.k8s.io.storageclass.js +15 -4
- package/models/workload.js +1 -1
- package/package.json +5 -5
- package/pages/auth/login.vue +3 -2
- package/pages/auth/logout.vue +7 -9
- package/pages/auth/setup.vue +4 -1
- package/pages/c/_cluster/apps/charts/install.vue +11 -3
- package/pages/c/_cluster/explorer/__tests__/index.test.ts +1 -1
- package/pages/c/_cluster/explorer/index.vue +1 -2
- package/pages/c/_cluster/fleet/index.vue +13 -9
- package/pages/c/_cluster/settings/brand.vue +4 -1
- package/pages/c/_cluster/uiplugins/index.vue +4 -2
- package/pages/diagnostic.vue +1 -0
- package/pages/prefs.vue +22 -10
- package/plugins/dashboard-store/resource-class.js +11 -3
- package/plugins/steve/mutations.js +4 -1
- package/plugins/steve/steve-pagination-utils.ts +1 -1
- package/plugins/steve/subscribe.js +3 -4
- package/rancher-components/Form/LabeledInput/LabeledInput.vue +7 -2
- package/store/features.js +1 -0
- package/store/i18n.js +5 -1
- package/store/prefs.js +8 -0
- package/types/resources/fleet.d.ts +40 -0
- package/types/shell/index.d.ts +442 -396
- package/utils/__tests__/object.test.ts +152 -1
- package/utils/auth.js +1 -1
- package/utils/create-yaml.js +1 -1
- package/utils/favicon.js +2 -0
- package/utils/fleet.ts +159 -0
- package/utils/gc/gc.ts +1 -1
- package/utils/object.js +37 -0
- package/utils/string.js +9 -0
- package/utils/v-sphere.ts +31 -0
- package/utils/validators/cron-schedule.js +1 -1
- package/utils/validators/formRules/index.ts +2 -2
- package/config/product/multi-cluster-apps.js +0 -61
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
<script>
|
|
2
2
|
import { mapGetters } from 'vuex';
|
|
3
3
|
import debounce from 'lodash/debounce';
|
|
4
|
-
import { NORMAN, STEVE
|
|
4
|
+
import { MANAGEMENT, NORMAN, STEVE } from '@shell/config/types';
|
|
5
|
+
import { HARVESTER_NAME as HARVESTER } from '@shell/config/features';
|
|
5
6
|
import { ucFirst } from '@shell/utils/string';
|
|
6
7
|
import { isAlternate, isMac } from '@shell/utils/platform';
|
|
7
8
|
import Import from '@shell/components/Import';
|
|
8
9
|
import BrandImage from '@shell/components/BrandImage';
|
|
9
|
-
import { getProduct } from '@shell/config/private-label';
|
|
10
|
+
import { getProduct, getVendor } from '@shell/config/private-label';
|
|
10
11
|
import ClusterProviderIcon from '@shell/components/ClusterProviderIcon';
|
|
11
12
|
import ClusterBadge from '@shell/components/ClusterBadge';
|
|
12
13
|
import AppModal from '@shell/components/AppModal';
|
|
@@ -14,13 +15,14 @@ import { LOGGED_OUT, IS_SSO } from '@shell/config/query-params';
|
|
|
14
15
|
import NamespaceFilter from './NamespaceFilter';
|
|
15
16
|
import WorkspaceSwitcher from './WorkspaceSwitcher';
|
|
16
17
|
import TopLevelMenu from './TopLevelMenu';
|
|
18
|
+
|
|
17
19
|
import Jump from './Jump';
|
|
18
20
|
import { allHash } from '@shell/utils/promise';
|
|
19
21
|
import { ActionLocation, ExtensionPoint } from '@shell/core/types';
|
|
20
22
|
import { getApplicableExtensionEnhancements } from '@shell/core/plugin-helpers';
|
|
21
23
|
import IconOrSvg from '@shell/components/IconOrSvg';
|
|
22
24
|
import { wait } from '@shell/utils/async';
|
|
23
|
-
import {
|
|
25
|
+
import { configType } from '@shell/models/management.cattle.io.authconfig';
|
|
24
26
|
import HeaderPageActionMenu from './HeaderPageActionMenu.vue';
|
|
25
27
|
|
|
26
28
|
export default {
|
|
@@ -48,7 +50,7 @@ export default {
|
|
|
48
50
|
|
|
49
51
|
fetch() {
|
|
50
52
|
// fetch needed data to check if any auth provider is enabled
|
|
51
|
-
|
|
53
|
+
this.$store.dispatch('auth/getAuthProviders');
|
|
52
54
|
},
|
|
53
55
|
|
|
54
56
|
data() {
|
|
@@ -86,14 +88,14 @@ export default {
|
|
|
86
88
|
'pageActions',
|
|
87
89
|
'isSingleProduct',
|
|
88
90
|
'isRancherInHarvester',
|
|
89
|
-
'showTopLevelMenu'
|
|
91
|
+
'showTopLevelMenu',
|
|
92
|
+
'isMultiCluster'
|
|
90
93
|
]),
|
|
91
94
|
|
|
92
|
-
|
|
93
|
-
const
|
|
94
|
-
const authInfo = parseAuthProvidersInfo(authProviders);
|
|
95
|
+
samlAuthProviderEnabled() {
|
|
96
|
+
const publicAuthProviders = this.$store.getters['rancher/all']('authProvider');
|
|
95
97
|
|
|
96
|
-
return
|
|
98
|
+
return publicAuthProviders.find((authProvider) => configType[authProvider.id] === 'saml') || {};
|
|
97
99
|
},
|
|
98
100
|
|
|
99
101
|
shouldShowSloLogoutModal() {
|
|
@@ -102,17 +104,21 @@ export default {
|
|
|
102
104
|
return false;
|
|
103
105
|
}
|
|
104
106
|
|
|
105
|
-
const {
|
|
106
|
-
logoutAllSupported, logoutAllEnabled, logoutAllForced, configType
|
|
107
|
-
} = this.authProviderEnabled;
|
|
107
|
+
const { logoutAllSupported, logoutAllEnabled, logoutAllForced } = this.samlAuthProviderEnabled;
|
|
108
108
|
|
|
109
|
-
return
|
|
109
|
+
return logoutAllSupported && logoutAllEnabled && !logoutAllForced;
|
|
110
110
|
},
|
|
111
111
|
|
|
112
112
|
appName() {
|
|
113
113
|
return getProduct();
|
|
114
114
|
},
|
|
115
115
|
|
|
116
|
+
vendor() {
|
|
117
|
+
this.$store.getters['management/all'](MANAGEMENT.SETTING)?.find((setting) => setting.id === 'ui-pl');
|
|
118
|
+
|
|
119
|
+
return getVendor();
|
|
120
|
+
},
|
|
121
|
+
|
|
116
122
|
authEnabled() {
|
|
117
123
|
return this.$store.getters['auth/enabled'];
|
|
118
124
|
},
|
|
@@ -222,6 +228,9 @@ export default {
|
|
|
222
228
|
};
|
|
223
229
|
},
|
|
224
230
|
|
|
231
|
+
isHarvester() {
|
|
232
|
+
return this.$store.getters['currentProduct'].inStore === HARVESTER;
|
|
233
|
+
},
|
|
225
234
|
},
|
|
226
235
|
|
|
227
236
|
watch: {
|
|
@@ -260,7 +269,7 @@ export default {
|
|
|
260
269
|
showSloModal() {
|
|
261
270
|
this.$store.dispatch('management/promptModal', {
|
|
262
271
|
component: 'SloDialog',
|
|
263
|
-
componentProps: { authProvider: this.
|
|
272
|
+
componentProps: { authProvider: this.samlAuthProviderEnabled },
|
|
264
273
|
modalWidth: '500px'
|
|
265
274
|
});
|
|
266
275
|
},
|
|
@@ -382,7 +391,7 @@ export default {
|
|
|
382
391
|
data-testid="header"
|
|
383
392
|
>
|
|
384
393
|
<div>
|
|
385
|
-
<TopLevelMenu v-if="
|
|
394
|
+
<TopLevelMenu v-if="isRancherInHarvester || isMultiCluster || !isSingleProduct" />
|
|
386
395
|
</div>
|
|
387
396
|
<div
|
|
388
397
|
class="menu-spacer"
|
|
@@ -392,7 +401,14 @@ export default {
|
|
|
392
401
|
v-if="isSingleProduct && !isRancherInHarvester"
|
|
393
402
|
:to="singleProductLogoRoute"
|
|
394
403
|
>
|
|
404
|
+
<BrandImage
|
|
405
|
+
v-if="isSingleProduct.supportCustomLogo && isHarvester"
|
|
406
|
+
class="side-menu-logo"
|
|
407
|
+
file-name="harvester.svg"
|
|
408
|
+
:support-custom-logo="true"
|
|
409
|
+
/>
|
|
395
410
|
<img
|
|
411
|
+
v-else
|
|
396
412
|
class="side-menu-logo"
|
|
397
413
|
:src="isSingleProduct.logo"
|
|
398
414
|
>
|
|
@@ -412,7 +428,12 @@ export default {
|
|
|
412
428
|
v-if="isSingleProduct && !isRancherInHarvester"
|
|
413
429
|
class="product-name"
|
|
414
430
|
>
|
|
415
|
-
|
|
431
|
+
<template v-if="isSingleProduct.supportCustomLogo">
|
|
432
|
+
{{ vendor }}
|
|
433
|
+
</template>
|
|
434
|
+
<template v-else>
|
|
435
|
+
{{ t(isSingleProduct.productNameKey) }}
|
|
436
|
+
</template>
|
|
416
437
|
</div>
|
|
417
438
|
<template v-else>
|
|
418
439
|
<ClusterProviderIcon
|
|
@@ -1118,7 +1139,7 @@ export default {
|
|
|
1118
1139
|
display: flex;
|
|
1119
1140
|
justify-content: space-between;
|
|
1120
1141
|
padding: 10px;
|
|
1121
|
-
color: var(--
|
|
1142
|
+
color: var(--popover-text);
|
|
1122
1143
|
}
|
|
1123
1144
|
|
|
1124
1145
|
div.menu-separator {
|
|
@@ -140,9 +140,11 @@ export default {
|
|
|
140
140
|
options() {
|
|
141
141
|
const t = this.$store.getters['i18n/t'];
|
|
142
142
|
let out = [];
|
|
143
|
+
const inStore = this.$store.getters['currentStore'](NAMESPACE);
|
|
143
144
|
|
|
144
145
|
const params = { ...this.$route.params };
|
|
145
146
|
const resource = params.resource;
|
|
147
|
+
|
|
146
148
|
// Sometimes, different pages may have different namespaces to filter
|
|
147
149
|
const notFilterNamespaces = this.$store.getters[`type-map/optionsFor`](resource).notFilterNamespace || [];
|
|
148
150
|
|
|
@@ -198,8 +200,6 @@ export default {
|
|
|
198
200
|
divider(out);
|
|
199
201
|
}
|
|
200
202
|
|
|
201
|
-
const inStore = this.$store.getters['currentStore'](NAMESPACE);
|
|
202
|
-
|
|
203
203
|
if (!inStore) {
|
|
204
204
|
return out;
|
|
205
205
|
}
|
|
@@ -893,9 +893,6 @@ export default {
|
|
|
893
893
|
width: 280px;
|
|
894
894
|
display: inline-block;
|
|
895
895
|
|
|
896
|
-
$glass-z-index: 2;
|
|
897
|
-
$dropdown-z-index: 1000;
|
|
898
|
-
|
|
899
896
|
.ns-glass {
|
|
900
897
|
height: 100vh;
|
|
901
898
|
left: 0;
|
|
@@ -903,7 +900,7 @@ export default {
|
|
|
903
900
|
position: absolute;
|
|
904
901
|
top: 0;
|
|
905
902
|
width: 100vw;
|
|
906
|
-
z-index:
|
|
903
|
+
z-index: z-index('overContent');
|
|
907
904
|
}
|
|
908
905
|
|
|
909
906
|
.ns-controls {
|
|
@@ -955,7 +952,7 @@ export default {
|
|
|
955
952
|
margin-top: -1px;
|
|
956
953
|
padding-bottom: 10px;
|
|
957
954
|
position: relative;
|
|
958
|
-
z-index:
|
|
955
|
+
z-index: z-index('dropdownOverlay');
|
|
959
956
|
|
|
960
957
|
.ns-options {
|
|
961
958
|
max-height: 50vh;
|
|
@@ -1067,7 +1064,7 @@ export default {
|
|
|
1067
1064
|
height: 40px;
|
|
1068
1065
|
padding: 0 10px;
|
|
1069
1066
|
position: relative;
|
|
1070
|
-
z-index:
|
|
1067
|
+
z-index: z-index('dropdownOverlay');
|
|
1071
1068
|
|
|
1072
1069
|
&.ns-open {
|
|
1073
1070
|
border-bottom-left-radius: 0;
|
|
@@ -10,7 +10,6 @@ import { sortBy } from '@shell/utils/sort';
|
|
|
10
10
|
import { ucFirst } from '@shell/utils/string';
|
|
11
11
|
import { KEY } from '@shell/utils/platform';
|
|
12
12
|
import { getVersionInfo } from '@shell/utils/version';
|
|
13
|
-
import { LEGACY } from '@shell/store/features';
|
|
14
13
|
import { SETTING } from '@shell/config/settings';
|
|
15
14
|
import { filterOnlyKubernetesClusters, filterHiddenLocalCluster } from '@shell/utils/cluster';
|
|
16
15
|
import { getProductFromRoute } from '@shell/utils/router';
|
|
@@ -68,10 +67,6 @@ export default {
|
|
|
68
67
|
};
|
|
69
68
|
},
|
|
70
69
|
|
|
71
|
-
legacyEnabled() {
|
|
72
|
-
return this.features(LEGACY);
|
|
73
|
-
},
|
|
74
|
-
|
|
75
70
|
showClusterSearch() {
|
|
76
71
|
return this.clusters.length > this.maxClustersToShow;
|
|
77
72
|
},
|
|
@@ -255,12 +250,6 @@ export default {
|
|
|
255
250
|
});
|
|
256
251
|
},
|
|
257
252
|
|
|
258
|
-
legacyApps() {
|
|
259
|
-
const options = this.options;
|
|
260
|
-
|
|
261
|
-
return options.filter((opt) => opt.inStore === 'management' && opt.category === 'legacy');
|
|
262
|
-
},
|
|
263
|
-
|
|
264
253
|
configurationApps() {
|
|
265
254
|
const options = this.options;
|
|
266
255
|
|
|
@@ -347,7 +336,6 @@ export default {
|
|
|
347
336
|
const appBar = {
|
|
348
337
|
hciApps: this.hciApps,
|
|
349
338
|
multiClusterApps: this.multiClusterApps,
|
|
350
|
-
legacyApps: this.legacyApps,
|
|
351
339
|
configurationApps: this.configurationApps,
|
|
352
340
|
pinFiltered: this.pinFiltered,
|
|
353
341
|
clustersFiltered: this.clustersFiltered,
|
|
@@ -558,7 +546,7 @@ export default {
|
|
|
558
546
|
:to="{ name: 'home' }"
|
|
559
547
|
>
|
|
560
548
|
<svg
|
|
561
|
-
v-tooltip="getTooltipConfig(t('nav.home'))"
|
|
549
|
+
v-clean-tooltip="getTooltipConfig(t('nav.home'))"
|
|
562
550
|
xmlns="http://www.w3.org/2000/svg"
|
|
563
551
|
height="24"
|
|
564
552
|
viewBox="0 0 24 24"
|
|
@@ -672,13 +660,13 @@ export default {
|
|
|
672
660
|
@shortkey="handleKeyComboClick"
|
|
673
661
|
>
|
|
674
662
|
<ClusterIconMenu
|
|
675
|
-
v-tooltip="getTooltipConfig(c, true)"
|
|
663
|
+
v-clean-tooltip="getTooltipConfig(c, true)"
|
|
676
664
|
:cluster="c"
|
|
677
665
|
:route-combo="routeCombo"
|
|
678
666
|
class="rancher-provider-icon"
|
|
679
667
|
/>
|
|
680
668
|
<div
|
|
681
|
-
v-tooltip="getTooltipConfig(c)"
|
|
669
|
+
v-clean-tooltip="getTooltipConfig(c)"
|
|
682
670
|
class="cluster-name"
|
|
683
671
|
>
|
|
684
672
|
<p>{{ c.label }}</p>
|
|
@@ -699,12 +687,12 @@ export default {
|
|
|
699
687
|
:data-testid="`pinned-menu-cluster-disabled-${ c.id }`"
|
|
700
688
|
>
|
|
701
689
|
<ClusterIconMenu
|
|
702
|
-
v-tooltip="getTooltipConfig(c, true)"
|
|
690
|
+
v-clean-tooltip="getTooltipConfig(c, true)"
|
|
703
691
|
:cluster="c"
|
|
704
692
|
class="rancher-provider-icon"
|
|
705
693
|
/>
|
|
706
694
|
<div
|
|
707
|
-
v-tooltip="getTooltipConfig(c)"
|
|
695
|
+
v-clean-tooltip="getTooltipConfig(c)"
|
|
708
696
|
class="cluster-name"
|
|
709
697
|
>
|
|
710
698
|
<p>{{ c.label }}</p>
|
|
@@ -747,13 +735,13 @@ export default {
|
|
|
747
735
|
@shortkey="handleKeyComboClick"
|
|
748
736
|
>
|
|
749
737
|
<ClusterIconMenu
|
|
750
|
-
v-tooltip="getTooltipConfig(c, true)"
|
|
738
|
+
v-clean-tooltip="getTooltipConfig(c, true)"
|
|
751
739
|
:cluster="c"
|
|
752
740
|
:route-combo="routeCombo"
|
|
753
741
|
class="rancher-provider-icon"
|
|
754
742
|
/>
|
|
755
743
|
<div
|
|
756
|
-
v-tooltip="getTooltipConfig(c)"
|
|
744
|
+
v-clean-tooltip="getTooltipConfig(c)"
|
|
757
745
|
class="cluster-name"
|
|
758
746
|
>
|
|
759
747
|
<!-- HERE LOCAL CLUSTER! -->
|
|
@@ -776,12 +764,12 @@ export default {
|
|
|
776
764
|
:data-testid="`menu-cluster-disabled-${ c.id }`"
|
|
777
765
|
>
|
|
778
766
|
<ClusterIconMenu
|
|
779
|
-
v-tooltip="getTooltipConfig(c, true)"
|
|
767
|
+
v-clean-tooltip="getTooltipConfig(c, true)"
|
|
780
768
|
:cluster="c"
|
|
781
769
|
class="rancher-provider-icon"
|
|
782
770
|
/>
|
|
783
771
|
<div
|
|
784
|
-
v-tooltip="getTooltipConfig(c)"
|
|
772
|
+
v-clean-tooltip="getTooltipConfig(c)"
|
|
785
773
|
class="cluster-name"
|
|
786
774
|
>
|
|
787
775
|
<p>{{ c.label }}</p>
|
|
@@ -848,7 +836,7 @@ export default {
|
|
|
848
836
|
:to="a.to"
|
|
849
837
|
>
|
|
850
838
|
<IconOrSvg
|
|
851
|
-
v-tooltip="getTooltipConfig(a.label)"
|
|
839
|
+
v-clean-tooltip="getTooltipConfig(a.label)"
|
|
852
840
|
:icon="a.icon"
|
|
853
841
|
:src="a.svg"
|
|
854
842
|
/>
|
|
@@ -856,34 +844,6 @@ export default {
|
|
|
856
844
|
</router-link>
|
|
857
845
|
</div>
|
|
858
846
|
</template>
|
|
859
|
-
<template v-if="legacyEnabled">
|
|
860
|
-
<div
|
|
861
|
-
class="category-title"
|
|
862
|
-
>
|
|
863
|
-
<hr>
|
|
864
|
-
<span>
|
|
865
|
-
{{ t('nav.categories.legacy') }}
|
|
866
|
-
</span>
|
|
867
|
-
</div>
|
|
868
|
-
<div
|
|
869
|
-
v-for="(a, i) in appBar.legacyApps"
|
|
870
|
-
:key="i"
|
|
871
|
-
@click="hide()"
|
|
872
|
-
>
|
|
873
|
-
<router-link
|
|
874
|
-
class="option"
|
|
875
|
-
:class="{'active-menu-link': a.isMenuActive }"
|
|
876
|
-
:to="a.to"
|
|
877
|
-
>
|
|
878
|
-
<IconOrSvg
|
|
879
|
-
v-tooltip="getTooltipConfig(a.label)"
|
|
880
|
-
:icon="a.icon"
|
|
881
|
-
:src="a.svg"
|
|
882
|
-
/>
|
|
883
|
-
<div>{{ a.label }}</div>
|
|
884
|
-
</router-link>
|
|
885
|
-
</div>
|
|
886
|
-
</template>
|
|
887
847
|
|
|
888
848
|
<!-- App menu -->
|
|
889
849
|
<template v-if="configurationApps.length">
|
|
@@ -906,7 +866,7 @@ export default {
|
|
|
906
866
|
:to="a.to"
|
|
907
867
|
>
|
|
908
868
|
<IconOrSvg
|
|
909
|
-
v-tooltip="getTooltipConfig(a.label)"
|
|
869
|
+
v-clean-tooltip="getTooltipConfig(a.label)"
|
|
910
870
|
:icon="a.icon"
|
|
911
871
|
:src="a.svg"
|
|
912
872
|
/>
|
|
@@ -113,6 +113,7 @@ export const FLEET = {
|
|
|
113
113
|
CLUSTER_NAME: 'management.cattle.io/cluster-name',
|
|
114
114
|
BUNDLE_ID: 'fleet.cattle.io/bundle-id',
|
|
115
115
|
MANAGED: 'fleet.cattle.io/managed',
|
|
116
|
+
CLUSTER_NAMESPACE: 'fleet.cattle.io/cluster-namespace',
|
|
116
117
|
CLUSTER: 'fleet.cattle.io/cluster'
|
|
117
118
|
};
|
|
118
119
|
|
|
@@ -145,6 +146,7 @@ export const HCI = {
|
|
|
145
146
|
NETWORK_ROUTE: 'network.harvesterhci.io/route',
|
|
146
147
|
IMAGE_NAME: 'harvesterhci.io/image-name',
|
|
147
148
|
NETWORK_TYPE: 'network.harvesterhci.io/type',
|
|
149
|
+
CLUSTER_NETWORK: 'network.harvesterhci.io/clusternetwork',
|
|
148
150
|
PRIMARY_SERVICE: 'cloudprovider.harvesterhci.io/primary-service',
|
|
149
151
|
};
|
|
150
152
|
|
package/config/private-label.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { SETTING } from './settings';
|
|
2
|
+
import { CURRENT_RANCHER_VERSION } from './version';
|
|
2
3
|
|
|
3
4
|
export const ANY = 0;
|
|
4
5
|
export const STANDARD = 1;
|
|
5
6
|
export const CUSTOM = 2;
|
|
6
|
-
export const DOCS_BASE =
|
|
7
|
+
export const DOCS_BASE = `https://ranchermanager.docs.rancher.com/v${ CURRENT_RANCHER_VERSION }`;
|
|
7
8
|
|
|
8
9
|
const STANDARD_VENDOR = 'Rancher';
|
|
9
10
|
const STANDARD_PRODUCT = 'Explorer';
|
package/config/router/routes.js
CHANGED
|
@@ -2,7 +2,6 @@ import { NAME as APPS } from '@shell/config/product/apps';
|
|
|
2
2
|
import { NAME as EXPLORER } from '@shell/config/product/explorer';
|
|
3
3
|
import { NAME as MANAGER } from '@shell/config/product/manager';
|
|
4
4
|
import { CAPI, MANAGEMENT, BACKUP_RESTORE, CIS } from '@shell/config/types';
|
|
5
|
-
import { NAME as MCAPPS, NAME as LEGACY } from '@shell/config/product/multi-cluster-apps';
|
|
6
5
|
import { NAME as AUTH } from '@shell/config/product/auth';
|
|
7
6
|
|
|
8
7
|
// All these imports are related to the install-redirect.js navigation guard.
|
|
@@ -229,12 +228,10 @@ export default [
|
|
|
229
228
|
path: '/c/:cluster/legacy',
|
|
230
229
|
redirect(to) {
|
|
231
230
|
return {
|
|
232
|
-
name: 'c-cluster-legacy-
|
|
231
|
+
name: 'c-cluster-legacy-project',
|
|
233
232
|
params: {
|
|
234
233
|
...(to?.params || {}),
|
|
235
|
-
|
|
236
|
-
product: LEGACY,
|
|
237
|
-
page: 'alerts'
|
|
234
|
+
product: EXPLORER,
|
|
238
235
|
}
|
|
239
236
|
};
|
|
240
237
|
},
|
|
@@ -262,19 +259,6 @@ export default [
|
|
|
262
259
|
};
|
|
263
260
|
},
|
|
264
261
|
name: 'c-cluster-manager'
|
|
265
|
-
}, {
|
|
266
|
-
path: '/c/:cluster/mcapps',
|
|
267
|
-
redirect(to) {
|
|
268
|
-
return {
|
|
269
|
-
name: 'c-cluster-mcapps-pages-page',
|
|
270
|
-
params: {
|
|
271
|
-
...(to?.params || {}),
|
|
272
|
-
product: MCAPPS,
|
|
273
|
-
page: 'catalogs'
|
|
274
|
-
}
|
|
275
|
-
};
|
|
276
|
-
},
|
|
277
|
-
name: 'c-cluster-mcapps'
|
|
278
262
|
}, {
|
|
279
263
|
path: '/c/:cluster/monitoring',
|
|
280
264
|
component: () => interopDefault(import('@shell/pages/c/_cluster/monitoring/index.vue')),
|
|
@@ -381,10 +365,6 @@ export default [
|
|
|
381
365
|
path: '/c/:cluster/auth/user.retention',
|
|
382
366
|
component: () => interopDefault(import('@shell/pages/c/_cluster/auth/user.retention/index.vue')),
|
|
383
367
|
name: 'c-cluster-auth-user.retention'
|
|
384
|
-
}, {
|
|
385
|
-
path: '/c/:cluster/legacy/project/pipelines',
|
|
386
|
-
component: () => interopDefault(import('@shell/pages/c/_cluster/legacy/project/pipelines.vue')),
|
|
387
|
-
name: 'c-cluster-legacy-project-pipelines'
|
|
388
368
|
}, {
|
|
389
369
|
path: '/c/:cluster/manager/cloudCredential/create',
|
|
390
370
|
component: () => interopDefault(import('@shell/pages/c/_cluster/manager/cloudCredential/create.vue')),
|
|
@@ -437,10 +417,6 @@ export default [
|
|
|
437
417
|
path: '/c/:cluster/manager/pages/:page?',
|
|
438
418
|
component: () => interopDefault(import('@shell/pages/c/_cluster/manager/pages/_page.vue')),
|
|
439
419
|
name: 'c-cluster-manager-pages-page'
|
|
440
|
-
}, {
|
|
441
|
-
path: '/c/:cluster/mcapps/pages/:page?',
|
|
442
|
-
component: () => interopDefault(import('@shell/pages/c/_cluster/mcapps/pages/_page.vue')),
|
|
443
|
-
name: 'c-cluster-mcapps-pages-page'
|
|
444
420
|
}, {
|
|
445
421
|
path: '/c/:cluster/monitoring/alertmanagerconfig/:alertmanagerconfigid',
|
|
446
422
|
component: () => interopDefault(import('@shell/pages/c/_cluster/monitoring/alertmanagerconfig/_alertmanagerconfigid/index.vue')),
|
package/config/settings.ts
CHANGED
|
@@ -108,6 +108,7 @@ export const SETTING = {
|
|
|
108
108
|
USER_LAST_LOGIN_DEFAULT: 'user-last-login-default',
|
|
109
109
|
DISABLE_INACTIVE_USER_AFTER: 'disable-inactive-user-after',
|
|
110
110
|
DELETE_INACTIVE_USER_AFTER: 'delete-inactive-user-after',
|
|
111
|
+
K3S_UPGRADER_UNINSTALL_CONCURRENCY: 'k3s-based-upgrader-uninstall-concurrency'
|
|
111
112
|
} as const;
|
|
112
113
|
|
|
113
114
|
// These are the settings that are allowed to be edited via the UI
|
|
@@ -165,6 +166,10 @@ export const ALLOWED_SETTINGS: GlobalSetting = {
|
|
|
165
166
|
options: ['strict', 'system-store'],
|
|
166
167
|
warning: 'agent-tls-mode'
|
|
167
168
|
},
|
|
169
|
+
[SETTING.K3S_UPGRADER_UNINSTALL_CONCURRENCY]: {
|
|
170
|
+
kind: 'integer',
|
|
171
|
+
ruleSet: [{ name: 'minValue', factoryArg: 1 }]
|
|
172
|
+
}
|
|
168
173
|
};
|
|
169
174
|
|
|
170
175
|
/**
|
package/config/table-headers.js
CHANGED
|
@@ -267,6 +267,21 @@ export const DESCRIPTION = {
|
|
|
267
267
|
width: 300,
|
|
268
268
|
};
|
|
269
269
|
|
|
270
|
+
export const NS_SNAPSHOT_QUOTA = {
|
|
271
|
+
name: 'NamespaceSnapshotQuota',
|
|
272
|
+
labelKey: 'harvester.tableHeaders.totalSnapshotQuota',
|
|
273
|
+
value: 'snapshotSizeQuota',
|
|
274
|
+
sort: 'snapshotSizeQuota',
|
|
275
|
+
align: 'center',
|
|
276
|
+
formatter: 'Si',
|
|
277
|
+
formatterOpts: {
|
|
278
|
+
opts: {
|
|
279
|
+
increment: 1024, addSuffix: true, suffix: 'i',
|
|
280
|
+
},
|
|
281
|
+
needParseSi: false
|
|
282
|
+
},
|
|
283
|
+
};
|
|
284
|
+
|
|
270
285
|
export const DURATION = {
|
|
271
286
|
name: 'duration',
|
|
272
287
|
labelKey: 'tableHeaders.duration',
|
package/config/types.js
CHANGED
|
@@ -172,6 +172,8 @@ export const LONGHORN = {
|
|
|
172
172
|
};
|
|
173
173
|
|
|
174
174
|
export const LONGHORN_DRIVER = 'driver.longhorn.io';
|
|
175
|
+
export const LONGHORN_VERSION_V1 = 'LonghornV1';
|
|
176
|
+
export const LONGHORN_VERSION_V2 = 'LonghornV2';
|
|
175
177
|
|
|
176
178
|
export const SNAPSHOT = 'rke.cattle.io.etcdsnapshot';
|
|
177
179
|
|
|
@@ -313,6 +315,7 @@ export const HCI = {
|
|
|
313
315
|
IMAGE: 'harvesterhci.io.virtualmachineimage',
|
|
314
316
|
VGPU_DEVICE: 'devices.harvesterhci.io.vgpudevice',
|
|
315
317
|
SETTING: 'harvesterhci.io.setting',
|
|
318
|
+
RESOURCE_QUOTA: 'harvesterhci.io.resourcequota',
|
|
316
319
|
HARVESTER_CONFIG: 'rke-machine-config.cattle.io.harvesterconfig',
|
|
317
320
|
};
|
|
318
321
|
|
package/config/version.js
CHANGED
|
@@ -9,7 +9,8 @@ import RelatedResources from '@shell/components/RelatedResources';
|
|
|
9
9
|
import jsyaml from 'js-yaml';
|
|
10
10
|
import merge from 'lodash/merge';
|
|
11
11
|
import { CATALOG } from '@shell/config/types';
|
|
12
|
-
import { sortBy } from '
|
|
12
|
+
import { sortBy } from '@shell/utils/sort';
|
|
13
|
+
import { allHash } from '@shell/utils/promise';
|
|
13
14
|
|
|
14
15
|
export default {
|
|
15
16
|
name: 'DetailRelease',
|
|
@@ -30,9 +31,15 @@ export default {
|
|
|
30
31
|
},
|
|
31
32
|
|
|
32
33
|
async fetch() {
|
|
33
|
-
|
|
34
|
+
const promises = {
|
|
35
|
+
catalog: this.$store.dispatch('catalog/load'),
|
|
36
|
+
allOperations: this.$store.dispatch('cluster/findAll', { type: CATALOG.OPERATION }),
|
|
37
|
+
secrets: this.value.fetchValues(true),
|
|
38
|
+
};
|
|
34
39
|
|
|
35
|
-
|
|
40
|
+
const res = await allHash(promises);
|
|
41
|
+
|
|
42
|
+
this.allOperations = res.allOperations;
|
|
36
43
|
},
|
|
37
44
|
|
|
38
45
|
computed: {
|
|
@@ -45,7 +52,7 @@ export default {
|
|
|
45
52
|
},
|
|
46
53
|
|
|
47
54
|
valuesYaml() {
|
|
48
|
-
const combined = merge(merge({}, this.value?.
|
|
55
|
+
const combined = merge(merge({}, this.value?.chartValues || {}), this.value?.values || {});
|
|
49
56
|
|
|
50
57
|
return jsyaml.dump(combined);
|
|
51
58
|
},
|
|
@@ -95,6 +102,12 @@ export default {
|
|
|
95
102
|
}
|
|
96
103
|
},
|
|
97
104
|
},
|
|
105
|
+
|
|
106
|
+
watch: {
|
|
107
|
+
'value.secretId'(neu, old) {
|
|
108
|
+
this.value.fetchValues(true);
|
|
109
|
+
}
|
|
110
|
+
},
|
|
98
111
|
};
|
|
99
112
|
</script>
|
|
100
113
|
|