@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.
Files changed (130) hide show
  1. package/assets/brand/harvester/favicon.png +0 -0
  2. package/assets/brand/harvester/metadata.json +3 -0
  3. package/assets/images/pl/harvester.svg +1 -0
  4. package/assets/translations/en-us.yaml +37 -15
  5. package/assets/translations/zh-hans.yaml +2 -5
  6. package/components/BrandImage.vue +5 -1
  7. package/components/CopyToClipboardText.vue +2 -0
  8. package/components/CruResourceFooter.vue +1 -0
  9. package/components/DetailTop.vue +1 -1
  10. package/components/EmberPage.vue +0 -8
  11. package/components/ExplorerMembers.vue +5 -1
  12. package/components/ExplorerProjectsNamespaces.vue +39 -15
  13. package/components/HardwareResourceGauge.vue +12 -2
  14. package/components/InputOrDisplay.vue +6 -2
  15. package/components/LandingPagePreference.vue +2 -2
  16. package/components/MessageLink.vue +1 -1
  17. package/components/ResourceDetail/Masthead.vue +22 -1
  18. package/components/ResourceDetail/index.vue +2 -8
  19. package/components/ResourceTable.vue +40 -7
  20. package/components/ResourceYaml.vue +1 -1
  21. package/components/SideNav.vue +1 -1
  22. package/components/SortableTable/actions.js +1 -1
  23. package/components/SortableTable/index.vue +17 -1
  24. package/components/SortableTable/selection.js +1 -1
  25. package/components/SortableTable/sorting.js +11 -3
  26. package/components/TableDataUserIcon.vue +1 -1
  27. package/components/fleet/FleetClusters.vue +0 -3
  28. package/components/fleet/FleetRepos.vue +0 -7
  29. package/components/form/ArrayList.vue +5 -1
  30. package/components/form/ArrayListSelect.vue +5 -1
  31. package/components/form/HookOption.vue +31 -29
  32. package/components/form/KeyValue.vue +1 -1
  33. package/components/form/LabeledSelect.vue +26 -7
  34. package/components/form/LifecycleHooks.vue +2 -2
  35. package/components/form/Password.vue +7 -1
  36. package/components/form/UnitInput.vue +10 -1
  37. package/components/form/__tests__/UnitInput.test.ts +1 -0
  38. package/components/formatter/ClusterProvider.vue +3 -3
  39. package/components/formatter/ImagePercentageBar.vue +1 -1
  40. package/components/formatter/SecretData.vue +1 -1
  41. package/components/formatter/Si.vue +5 -1
  42. package/components/formatter/Translate.vue +1 -1
  43. package/components/nav/Header.vue +38 -17
  44. package/components/nav/NamespaceFilter.vue +5 -8
  45. package/components/nav/TopLevelMenu.vue +11 -51
  46. package/components/nav/WorkspaceSwitcher.vue +0 -1
  47. package/config/labels-annotations.js +2 -0
  48. package/config/private-label.js +2 -1
  49. package/config/router/routes.js +2 -26
  50. package/config/settings.ts +5 -0
  51. package/config/table-headers.js +15 -0
  52. package/config/types.js +3 -0
  53. package/config/version.js +2 -0
  54. package/detail/catalog.cattle.io.app.vue +17 -4
  55. package/detail/fleet.cattle.io.bundle.vue +5 -68
  56. package/detail/fleet.cattle.io.cluster.vue +11 -9
  57. package/detail/fleet.cattle.io.gitrepo.vue +3 -2
  58. package/directives/clean-tooltip.js +4 -4
  59. package/edit/cis.cattle.io.clusterscan.vue +4 -3
  60. package/edit/fleet.cattle.io.gitrepo.vue +11 -8
  61. package/edit/logging-flow/Match.vue +75 -42
  62. package/edit/logging-flow/index.vue +89 -10
  63. package/edit/logging.banzaicloud.io.output/index.vue +2 -2
  64. package/edit/management.cattle.io.project.vue +4 -3
  65. package/edit/monitoring.coreos.com.prometheusrule/AlertingRule.vue +5 -5
  66. package/edit/monitoring.coreos.com.prometheusrule/index.vue +1 -1
  67. package/edit/namespace.vue +1 -1
  68. package/edit/provisioning.cattle.io.cluster/__tests__/Advanced.test.ts +26 -0
  69. package/edit/provisioning.cattle.io.cluster/__tests__/DirectoryConfig.test.ts +63 -149
  70. package/edit/provisioning.cattle.io.cluster/index.vue +2 -1
  71. package/edit/provisioning.cattle.io.cluster/rke2.vue +4 -4
  72. package/edit/provisioning.cattle.io.cluster/tabs/Advanced.vue +7 -2
  73. package/edit/provisioning.cattle.io.cluster/tabs/DirectoryConfig.vue +108 -35
  74. package/edit/provisioning.cattle.io.cluster/tabs/MachinePool.vue +1 -1
  75. package/edit/provisioning.cattle.io.cluster/tabs/registries/RegistryConfigs.vue +1 -1
  76. package/edit/provisioning.cattle.io.cluster/tabs/registries/RegistryMirrors.vue +1 -1
  77. package/edit/workload/mixins/workload.js +1 -1
  78. package/list/harvesterhci.io.management.cluster.vue +244 -0
  79. package/list/namespace.vue +16 -4
  80. package/mixins/browser-tab-visibility.js +1 -1
  81. package/mixins/chart.js +6 -2
  82. package/mixins/metric-poller.js +1 -1
  83. package/mixins/resource-fetch.js +1 -1
  84. package/models/__tests__/management.cattle.io.cluster.test.ts +45 -3
  85. package/models/__tests__/provisioning.cattle.io.cluster.test.ts +0 -86
  86. package/models/catalog.cattle.io.app.js +108 -21
  87. package/models/cloudcredential.js +4 -4
  88. package/models/fleet.cattle.io.bundle.js +3 -1
  89. package/models/fleet.cattle.io.gitrepo.js +51 -63
  90. package/models/k8s.cni.cncf.io.networkattachmentdefinition.js +88 -0
  91. package/models/management.cattle.io.cluster.js +39 -7
  92. package/models/management.cattle.io.project.js +4 -0
  93. package/models/management.cattle.io.setting.js +25 -0
  94. package/models/provisioning.cattle.io.cluster.js +6 -16
  95. package/models/storage.k8s.io.storageclass.js +15 -4
  96. package/models/workload.js +1 -1
  97. package/package.json +5 -5
  98. package/pages/auth/login.vue +3 -2
  99. package/pages/auth/logout.vue +7 -9
  100. package/pages/auth/setup.vue +4 -1
  101. package/pages/c/_cluster/apps/charts/install.vue +11 -3
  102. package/pages/c/_cluster/explorer/__tests__/index.test.ts +1 -1
  103. package/pages/c/_cluster/explorer/index.vue +1 -2
  104. package/pages/c/_cluster/fleet/index.vue +13 -9
  105. package/pages/c/_cluster/settings/brand.vue +4 -1
  106. package/pages/c/_cluster/uiplugins/index.vue +4 -2
  107. package/pages/diagnostic.vue +1 -0
  108. package/pages/prefs.vue +22 -10
  109. package/plugins/dashboard-store/resource-class.js +11 -3
  110. package/plugins/steve/mutations.js +4 -1
  111. package/plugins/steve/steve-pagination-utils.ts +1 -1
  112. package/plugins/steve/subscribe.js +3 -4
  113. package/rancher-components/Form/LabeledInput/LabeledInput.vue +7 -2
  114. package/store/features.js +1 -0
  115. package/store/i18n.js +5 -1
  116. package/store/prefs.js +8 -0
  117. package/types/resources/fleet.d.ts +40 -0
  118. package/types/shell/index.d.ts +442 -396
  119. package/utils/__tests__/object.test.ts +152 -1
  120. package/utils/auth.js +1 -1
  121. package/utils/create-yaml.js +1 -1
  122. package/utils/favicon.js +2 -0
  123. package/utils/fleet.ts +159 -0
  124. package/utils/gc/gc.ts +1 -1
  125. package/utils/object.js +37 -0
  126. package/utils/string.js +9 -0
  127. package/utils/v-sphere.ts +31 -0
  128. package/utils/validators/cron-schedule.js +1 -1
  129. package/utils/validators/formRules/index.ts +2 -2
  130. 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, MANAGEMENT } from '@shell/config/types';
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 { authProvidersInfo, parseAuthProvidersInfo } from '@shell/utils/auth';
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
- authProvidersInfo(this.$store);
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
- authProviderEnabled() {
93
- const authProviders = this.$store.getters['management/all'](MANAGEMENT.AUTH_CONFIG);
94
- const authInfo = parseAuthProvidersInfo(authProviders);
95
+ samlAuthProviderEnabled() {
96
+ const publicAuthProviders = this.$store.getters['rancher/all']('authProvider');
95
97
 
96
- return authInfo.enabled?.[0] || {};
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 configType === 'saml' && logoutAllSupported && logoutAllEnabled && !logoutAllForced;
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.authProviderEnabled },
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="showTopLevelMenu" />
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
- {{ t(isSingleProduct.productNameKey) }}
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(--link);
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: $glass-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: $dropdown-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: $dropdown-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
  />
@@ -92,7 +92,6 @@ export default {
92
92
  ref="select"
93
93
  v-model:value="value"
94
94
  label="label"
95
- :append-to-body="false"
96
95
  :options="options"
97
96
  :clearable="false"
98
97
  :reduce="(opt) => opt.value"
@@ -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
 
@@ -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 = 'https://ranchermanager.docs.rancher.com/v2.9';
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';
@@ -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-pages-page',
231
+ name: 'c-cluster-legacy-project',
233
232
  params: {
234
233
  ...(to?.params || {}),
235
- cluster: 'local',
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')),
@@ -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
  /**
@@ -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
@@ -25,3 +25,5 @@ export function setKubeVersionData(v) {
25
25
  // Remove any properties on 'v' we don't want
26
26
  _kubeVersionData = JSON.parse(JSON.stringify(v));
27
27
  }
28
+
29
+ export const CURRENT_RANCHER_VERSION = '2.10';
@@ -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 '~shell/utils/sort';
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
- await this.$store.dispatch('catalog/load');
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
- this.allOperations = await this.$store.dispatch('cluster/findAll', { type: CATALOG.OPERATION });
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?.spec?.chart?.values || {}), this.value?.spec?.values || {});
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