@rancher/shell 0.3.0 → 0.3.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 (322) hide show
  1. package/assets/styles/global/_button.scss +5 -1
  2. package/assets/styles/global/_columns.scss +4 -0
  3. package/assets/styles/global/_layout.scss +1 -2
  4. package/assets/styles/global/_select.scss +1 -4
  5. package/assets/styles/themes/_dark.scss +4 -4
  6. package/assets/styles/themes/_light.scss +4 -3
  7. package/assets/styles/themes/_suse.scss +1 -1
  8. package/assets/styles/vendor/vue-select.scss +4 -3
  9. package/assets/translations/en-us.yaml +669 -73
  10. package/assets/translations/zh-hans.yaml +547 -165
  11. package/chart/monitoring/steps/uninstall-v1.vue +2 -2
  12. package/cloud-credential/azure.vue +23 -0
  13. package/cloud-credential/harvester.vue +25 -62
  14. package/cloud-credential/pnap.vue +80 -0
  15. package/components/.DS_Store +0 -0
  16. package/components/AdvancedSection.vue +9 -2
  17. package/components/Alert.vue +2 -2
  18. package/components/ButtonDropdown.vue +0 -2
  19. package/components/ButtonGroup.vue +1 -0
  20. package/components/CollapsibleCard.vue +0 -1
  21. package/components/CruResource.vue +41 -4
  22. package/components/DetailTop.vue +58 -3
  23. package/components/DisableAuthProviderModal.vue +106 -0
  24. package/{rancher-components/components/Utils/DraggableZone → components}/DraggableZone.vue +0 -0
  25. package/components/ExplorerMembers.vue +253 -30
  26. package/components/ExplorerProjectsNamespaces.vue +77 -33
  27. package/components/GrowlManager.vue +3 -3
  28. package/components/IconOrSvg.vue +149 -0
  29. package/components/LogItem.vue +69 -0
  30. package/components/PodSecurityAdmission.vue +302 -0
  31. package/components/PromptModal.vue +1 -0
  32. package/components/ResourceDetail/Masthead.vue +54 -2
  33. package/components/ResourceDetail/index.vue +12 -5
  34. package/components/ResourceList/Masthead.vue +11 -1
  35. package/components/ResourceList/ResourceLoadingIndicator.vue +12 -2
  36. package/components/ResourceList/index.vue +53 -12
  37. package/components/ResourceList/resource-list.config.js +7 -0
  38. package/components/ResourceTable.vue +31 -6
  39. package/components/SimpleBox.vue +1 -1
  40. package/components/SortableTable/THead.vue +15 -5
  41. package/components/SortableTable/index.vue +21 -10
  42. package/components/Tabbed/index.vue +20 -15
  43. package/components/__tests__/.DS_Store +0 -0
  44. package/components/__tests__/AsyncButton.test.ts +140 -0
  45. package/components/__tests__/BackLink.test.ts +33 -0
  46. package/components/__tests__/ButtonGroup.test.ts +124 -0
  47. package/components/__tests__/ClusterBadge.test.ts +32 -0
  48. package/components/__tests__/CollapsibleCard.test.ts +64 -0
  49. package/components/__tests__/ConsumptionGauge.test.ts +88 -0
  50. package/components/__tests__/CruResource.test.ts +3 -2
  51. package/components/__tests__/FixedBanner.test.ts +129 -0
  52. package/components/__tests__/GrowlManager.test.ts +147 -0
  53. package/components/__tests__/NamespaceFilter.test.ts +33 -25
  54. package/components/__tests__/PercentageBar.test.ts +32 -0
  55. package/components/__tests__/PodSecurityAdmission.test.ts +398 -0
  56. package/components/auth/AuthBanner.vue +20 -10
  57. package/components/auth/RoleDetailEdit.vue +26 -17
  58. package/components/auth/SelectPrincipal.vue +36 -5
  59. package/components/form/ArrayList.vue +3 -35
  60. package/components/form/ArrayListGrouped.vue +13 -4
  61. package/components/form/ArrayListSelect.vue +5 -5
  62. package/components/form/Error.vue +8 -0
  63. package/components/form/KeyValue.vue +39 -7
  64. package/components/form/LabeledSelect.vue +5 -2
  65. package/components/form/Labels.vue +46 -16
  66. package/components/form/Members/ClusterPermissionsEditor.vue +17 -17
  67. package/components/form/Members/MembershipEditor.vue +12 -12
  68. package/components/form/NameNsDescription.vue +1 -1
  69. package/components/form/NodeScheduling.vue +1 -1
  70. package/components/form/Probe.vue +3 -3
  71. package/components/form/ResourceQuota/Project.vue +6 -6
  72. package/components/form/ResourceTabs/index.vue +1 -6
  73. package/components/form/Security.vue +7 -6
  74. package/components/form/Select.vue +3 -2
  75. package/components/form/SelectOrCreateAuthSecret.vue +22 -29
  76. package/components/form/ServicePorts.vue +8 -0
  77. package/components/form/WorkloadPorts.vue +7 -1
  78. package/components/form/__tests__/ArrayList.test.ts +74 -0
  79. package/components/form/__tests__/ArrayListGrouped.test.ts +6 -4
  80. package/components/formatter/Checked.vue +1 -1
  81. package/components/formatter/ClusterLink.vue +5 -0
  82. package/components/formatter/IconIsDefault.vue +2 -2
  83. package/components/formatter/InternalExternalIP.vue +11 -8
  84. package/components/formatter/LiveDuration.vue +78 -0
  85. package/components/formatter/WorkloadHealthScale.vue +5 -3
  86. package/components/nav/Header.vue +6 -3
  87. package/components/nav/NamespaceFilter.vue +146 -63
  88. package/components/nav/TopLevelMenu.vue +22 -19
  89. package/components/nav/WindowManager/ContainerLogs.vue +83 -126
  90. package/components/nav/WindowManager/ContainerShell.vue +9 -7
  91. package/components/nav/WindowManager/Window.vue +2 -0
  92. package/components/nav/WindowManager/index.vue +10 -0
  93. package/config/elemental-types.js +9 -0
  94. package/config/features.js +2 -0
  95. package/config/home-links.js +4 -1
  96. package/config/pod-security-admission.ts +82 -0
  97. package/config/product/apps.js +1 -1
  98. package/config/product/auth.js +6 -5
  99. package/config/product/explorer.js +6 -6
  100. package/config/product/fleet.js +1 -1
  101. package/config/product/manager.js +6 -2
  102. package/config/secret.js +0 -1
  103. package/config/settings.ts +26 -9
  104. package/config/table-headers.js +22 -11
  105. package/config/types.js +4 -1
  106. package/content/docs/zh-hans/getting-started.md +113 -137
  107. package/content/docs/zh-hans/whats-new.md +8 -46
  108. package/creators/pkg/package-lock.json +37 -0
  109. package/creators/pkg/package.json +1 -1
  110. package/detail/catalog.cattle.io.app.vue +1 -1
  111. package/detail/pod.vue +1 -1
  112. package/detail/provisioning.cattle.io.cluster.vue +35 -9
  113. package/detail/service.vue +2 -9
  114. package/detail/workload/index.vue +0 -1
  115. package/dialog/AddClusterMemberDialog.vue +22 -28
  116. package/dialog/AddProjectMemberDialog.vue +53 -9
  117. package/dialog/DiagnosticTimingsDialog.vue +8 -7
  118. package/dialog/DrainNode.vue +44 -48
  119. package/dialog/ForceMachineRemoveDialog.vue +5 -7
  120. package/dialog/GenericPrompt.vue +15 -20
  121. package/dialog/RollbackWorkloadDialog.vue +15 -46
  122. package/dialog/RotateCertificatesDialog.vue +5 -7
  123. package/dialog/RotateEncryptionKeyDialog.vue +5 -9
  124. package/dialog/SaveAsRKETemplateDialog.vue +5 -13
  125. package/dialog/ScaleMachineDownDialog.vue +1 -1
  126. package/dialog/ScalePoolDownDialog.vue +121 -0
  127. package/edit/__tests__/management.cattle.io.setting.test.ts +3 -3
  128. package/edit/auth/azuread.vue +16 -16
  129. package/edit/auth/github.vue +8 -0
  130. package/edit/auth/googleoauth.vue +10 -1
  131. package/edit/auth/ldap/index.vue +10 -0
  132. package/edit/auth/oidc.vue +10 -0
  133. package/edit/auth/saml.vue +10 -0
  134. package/edit/autoscaling.horizontalpodautoscaler/index.vue +1 -1
  135. package/edit/cloudcredential.vue +3 -7
  136. package/edit/logging-flow/Match.vue +39 -8
  137. package/edit/logging-flow/index.vue +27 -4
  138. package/edit/management.cattle.io.podsecurityadmissionconfigurationtemplate.vue +107 -0
  139. package/edit/management.cattle.io.project.vue +8 -1
  140. package/edit/management.cattle.io.setting.vue +5 -2
  141. package/edit/management.cattle.io.user.vue +7 -1
  142. package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +23 -7
  143. package/edit/monitoring.coreos.com.alertmanagerconfig/types/email.vue +2 -2
  144. package/edit/monitoring.coreos.com.prometheusrule/GroupRules.vue +14 -6
  145. package/edit/namespace.vue +18 -4
  146. package/edit/networking.k8s.io.ingress/Certificate.vue +1 -0
  147. package/edit/networking.k8s.io.ingress/IngressClass.vue +8 -6
  148. package/edit/networking.k8s.io.ingress/RulePath.vue +12 -6
  149. package/edit/networking.k8s.io.ingress/index.vue +8 -6
  150. package/edit/persistentvolume/index.vue +30 -27
  151. package/edit/persistentvolume/plugins/cephfs.vue +29 -29
  152. package/edit/persistentvolume/plugins/csi.vue +102 -62
  153. package/edit/persistentvolume/plugins/fc.vue +19 -19
  154. package/edit/persistentvolume/plugins/iscsi.vue +45 -45
  155. package/edit/persistentvolume/plugins/rbd.vue +39 -39
  156. package/edit/persistentvolumeclaim.vue +78 -75
  157. package/edit/provisioning.cattle.io.cluster/MachinePool.vue +11 -7
  158. package/edit/provisioning.cattle.io.cluster/RegistryConfigs.vue +10 -1
  159. package/edit/provisioning.cattle.io.cluster/RegistryMirrors.vue +87 -27
  160. package/edit/provisioning.cattle.io.cluster/SelectCredential.vue +3 -6
  161. package/edit/provisioning.cattle.io.cluster/__tests__/rke2.test.ts +93 -0
  162. package/edit/provisioning.cattle.io.cluster/import.vue +1 -1
  163. package/edit/provisioning.cattle.io.cluster/index.vue +29 -6
  164. package/edit/provisioning.cattle.io.cluster/rke2.vue +440 -152
  165. package/edit/secret/index.vue +3 -7
  166. package/edit/service.vue +3 -1
  167. package/edit/storage.k8s.io.storageclass/index.vue +100 -16
  168. package/edit/storage.k8s.io.storageclass/provisioners/driver.harvesterhci.io.vue +114 -0
  169. package/edit/workload/__tests__/index.test.ts +98 -0
  170. package/edit/workload/index.vue +58 -8
  171. package/edit/workload/mixins/workload.js +107 -70
  172. package/edit/workload/storage/ContainerMountPaths.vue +0 -10
  173. package/edit/workload/storage/emptyDir.vue +88 -0
  174. package/edit/workload/storage/ephemeralVolume/index.vue +1 -1
  175. package/edit/workload/storage/index.vue +8 -0
  176. package/edit/workload/storage/persistentVolumeClaim/index.vue +1 -1
  177. package/layouts/default.vue +57 -44
  178. package/list/__tests__/workload.test.ts +5 -2
  179. package/list/catalog.cattle.io.app.vue +1 -0
  180. package/list/cis.cattle.io.clusterscan.vue +1 -0
  181. package/list/fleet.cattle.io.bundle.vue +5 -6
  182. package/list/fleet.cattle.io.cluster.vue +6 -3
  183. package/list/fleet.cattle.io.clusterregistrationtoken.vue +5 -6
  184. package/list/fleet.cattle.io.gitrepo.vue +4 -9
  185. package/list/helm.cattle.io.projecthelmchart.vue +1 -5
  186. package/list/logging.banzaicloud.io.clusterflow.vue +4 -1
  187. package/list/logging.banzaicloud.io.flow.vue +6 -5
  188. package/list/management.cattle.io.cluster.vue +1 -0
  189. package/list/management.cattle.io.feature.vue +3 -4
  190. package/list/management.cattle.io.podsecurityadmissionconfigurationtemplate.vue +47 -0
  191. package/list/management.cattle.io.setting.vue +2 -2
  192. package/list/management.cattle.io.user.vue +4 -10
  193. package/list/monitoring.coreos.com.alertmanagerconfig.vue +2 -7
  194. package/list/node.vue +8 -5
  195. package/list/persistentvolume.vue +3 -3
  196. package/list/persistentvolumeclaim.vue +3 -4
  197. package/list/provisioning.cattle.io.cluster.vue +18 -19
  198. package/list/service.vue +6 -14
  199. package/list/workload.vue +43 -38
  200. package/machine-config/azure.vue +429 -60
  201. package/machine-config/pnap.vue +288 -0
  202. package/mixins/auth-config.js +1 -3
  203. package/mixins/browser-tab-visibility.js +8 -14
  204. package/mixins/chart.js +1 -1
  205. package/mixins/create-edit-view/impl.js +4 -0
  206. package/mixins/create-edit-view/index.js +4 -2
  207. package/mixins/resource-fetch-namespaced.js +98 -0
  208. package/mixins/resource-fetch.js +79 -45
  209. package/mixins/resource-manager.js +1 -23
  210. package/models/apps.controllerrevision.js +7 -0
  211. package/models/apps.daemonset.js +18 -0
  212. package/models/apps.deployment.js +44 -0
  213. package/models/apps.replicaset.js +7 -0
  214. package/models/apps.statefulset.js +18 -0
  215. package/models/batch.job.js +7 -14
  216. package/models/cluster/node.js +10 -2
  217. package/models/cluster.x-k8s.io.machine.js +26 -4
  218. package/models/cluster.x-k8s.io.machinedeployment.js +12 -2
  219. package/models/event.js +7 -0
  220. package/models/logging.banzaicloud.io.flow.js +4 -0
  221. package/models/management.cattle.io.cluster.js +1 -1
  222. package/models/management.cattle.io.clusterroletemplatebinding.js +1 -1
  223. package/models/management.cattle.io.globalrole.js +2 -2
  224. package/models/management.cattle.io.node.js +37 -2
  225. package/models/management.cattle.io.podsecurityadmissionconfigurationtemplate.ts +4 -0
  226. package/models/management.cattle.io.project.js +30 -11
  227. package/models/management.cattle.io.setting.js +1 -1
  228. package/models/management.cattle.io.user.js +37 -1
  229. package/models/namespace.js +42 -5
  230. package/models/persistentvolume.js +14 -2
  231. package/models/pod.js +15 -0
  232. package/models/projectroletemplatebinding.js +7 -0
  233. package/models/provisioning.cattle.io.cluster.js +61 -10
  234. package/models/rke-machine.cattle.io.pnapmachinetemplate.js +15 -0
  235. package/models/service.js +14 -13
  236. package/models/storage.k8s.io.storageclass.js +33 -18
  237. package/models/workload.js +38 -7
  238. package/nuxt.config.js +27 -17
  239. package/package.json +7 -7
  240. package/pages/about.vue +14 -2
  241. package/pages/c/_cluster/apps/charts/index.vue +4 -3
  242. package/pages/c/_cluster/apps/charts/install.vue +59 -22
  243. package/pages/c/_cluster/auth/config/_id.vue +6 -0
  244. package/pages/c/_cluster/auth/config/index.vue +8 -6
  245. package/pages/c/_cluster/auth/group.principal/assign-edit.vue +1 -1
  246. package/pages/c/_cluster/auth/roles/index.vue +1 -1
  247. package/pages/c/_cluster/explorer/index.vue +12 -6
  248. package/pages/c/_cluster/longhorn/index.vue +1 -1
  249. package/pages/c/_cluster/monitoring/alertmanagerconfig/_alertmanagerconfigid/receiver.vue +15 -4
  250. package/pages/c/_cluster/monitoring/index.vue +1 -1
  251. package/pages/c/_cluster/neuvector/index.vue +1 -1
  252. package/pages/c/_cluster/settings/performance.vue +48 -2
  253. package/pages/c/_cluster/uiplugins/PluginInfoPanel.vue +34 -1
  254. package/pages/c/_cluster/uiplugins/index.vue +28 -2
  255. package/pages/diagnostic.vue +5 -4
  256. package/pages/home.vue +105 -30
  257. package/pages/prefs.vue +23 -12
  258. package/pages/rio/mesh.vue +1 -1
  259. package/pkg/dynamic-importer.lib.js +8 -0
  260. package/pkg/vue.config.js +4 -0
  261. package/plugins/dashboard-store/__tests__/mutations.spec.js +406 -0
  262. package/plugins/dashboard-store/actions.js +32 -25
  263. package/plugins/dashboard-store/getters.js +50 -33
  264. package/plugins/dashboard-store/mutations.js +134 -28
  265. package/plugins/dashboard-store/resource-class.js +21 -41
  266. package/plugins/steve/actions.js +30 -0
  267. package/plugins/steve/caches/resourceCache.js +60 -0
  268. package/plugins/steve/getters.js +44 -1
  269. package/plugins/steve/mutations.js +97 -36
  270. package/plugins/steve/resourceWatcher.js +277 -0
  271. package/plugins/steve/schema.utils.js +25 -0
  272. package/plugins/steve/subscribe.js +288 -115
  273. package/plugins/steve/worker/index.js +17 -0
  274. package/plugins/steve/worker/web-worker.advanced.js +302 -0
  275. package/plugins/steve/{web-worker.steve-sub-worker.js → worker/web-worker.basic.js} +3 -44
  276. package/rancher-components/Card/Card.vue +3 -3
  277. package/rancher-components/Form/TextArea/TextAreaAutoGrow.vue +1 -0
  278. package/rancher-components/StringList/StringList.test.ts +45 -420
  279. package/rancher-components/StringList/StringList.vue +1 -10
  280. package/rancher-components/components/Banner/Banner.test.ts +44 -0
  281. package/rancher-components/components/Banner/Banner.vue +129 -61
  282. package/rancher-components/components/Form/Checkbox/Checkbox.test.ts +13 -22
  283. package/rancher-components/components/Form/Checkbox/Checkbox.vue +8 -6
  284. package/rancher-components/components/Form/ToggleSwitch/ToggleSwitch.test.ts +9 -9
  285. package/rancher-components/components/LabeledTooltip/LabeledTooltip.vue +0 -1
  286. package/rancher-components/components/StringList/StringList.test.ts +7 -7
  287. package/rancher-components/components/StringList/StringList.vue +21 -15
  288. package/scripts/test-plugins-build.sh +8 -0
  289. package/static/loading-indicator.html +1 -1
  290. package/store/index.js +54 -3
  291. package/store/plugins.js +0 -17
  292. package/store/pnap.js +128 -0
  293. package/store/prefs.js +4 -2
  294. package/store/type-map.js +55 -13
  295. package/types/pod-security-admission.ts +36 -0
  296. package/types/shell/index.d.ts +496 -396
  297. package/utils/__tests__/object.test.ts +17 -1
  298. package/utils/__tests__/pod-security-admission.test.ts +61 -0
  299. package/utils/async.ts +36 -0
  300. package/utils/color.js +45 -0
  301. package/utils/crypto/browserHashUtils.js +18 -0
  302. package/utils/dynamic-importer.js +8 -0
  303. package/utils/install-redirect.js +1 -1
  304. package/utils/object.js +24 -0
  305. package/utils/pod-security-admission.ts +39 -0
  306. package/utils/socket.js +61 -24
  307. package/utils/string.js +2 -0
  308. package/utils/svg-filter.js +301 -0
  309. package/utils/time.js +49 -0
  310. package/utils/validators/cidr.js +4 -0
  311. package/utils/validators/formRules/__tests__/index.test.ts +23 -3
  312. package/utils/validators/formRules/index.ts +14 -0
  313. package/config/product/harvester-manager.js +0 -162
  314. package/edit/harvesterhci.io.management.cluster.vue +0 -153
  315. package/list/harvesterhci.io.management.cluster.vue +0 -241
  316. package/machine-config/harvester.vue +0 -693
  317. package/models/harvesterhci.io.management.cluster.js +0 -228
  318. package/pages/c/_cluster/harvesterManager/index.vue +0 -24
  319. package/rancher-components/Card/Card.test.ts +0 -39
  320. package/rancher-components/Utils/DraggableZone/DraggableZone.vue +0 -181
  321. package/rancher-components/Utils/DraggableZone/index.ts +0 -1
  322. package/rancher-components/components/Utils/DraggableZone/index.ts +0 -1
@@ -95,9 +95,12 @@ export default {
95
95
  this.errors = [];
96
96
 
97
97
  // If the chart doesn't contain system `systemDefaultRegistry` properties there's no point applying them
98
- this.clusterRegistry = await this.getClusterRegistry();
99
- this.globalRegistry = await this.getGlobalRegistry();
100
- this.defaultRegistrySetting = this.clusterRegistry || this.globalRegistry;
98
+ if (this.showCustomRegistry) {
99
+ // Note: Cluster scoped registry is only supported for node driver clusters
100
+ this.clusterRegistry = await this.getClusterRegistry();
101
+ this.globalRegistry = await this.getGlobalRegistry();
102
+ this.defaultRegistrySetting = this.clusterRegistry || this.globalRegistry;
103
+ }
101
104
 
102
105
  this.serverUrlSetting = await this.$store.dispatch('management/find', {
103
106
  type: MANAGEMENT.SETTING,
@@ -282,13 +285,20 @@ export default {
282
285
  */
283
286
  this.chartValues = merge(merge({}, this.versionInfo?.values || {}), userValues);
284
287
 
285
- const existingRegistry = this.chartValues?.global?.systemDefaultRegistry || this.chartValues?.global?.cattle?.systemDefaultRegistry;
288
+ if (this.showCustomRegistry) {
289
+ /**
290
+ * The input to configure the registry should never be
291
+ * shown for third-party charts, which don't have Rancher
292
+ * global values.
293
+ */
294
+ const existingRegistry = this.chartValues?.global?.systemDefaultRegistry || this.chartValues?.global?.cattle?.systemDefaultRegistry;
286
295
 
287
- delete this.chartValues?.global?.systemDefaultRegistry;
288
- delete this.chartValues?.global?.cattle?.systemDefaultRegistry;
296
+ delete this.chartValues?.global?.systemDefaultRegistry;
297
+ delete this.chartValues?.global?.cattle?.systemDefaultRegistry;
289
298
 
290
- this.customRegistrySetting = existingRegistry || this.defaultRegistrySetting;
291
- this.showCustomRegistryInput = !!this.customRegistrySetting;
299
+ this.customRegistrySetting = existingRegistry || this.defaultRegistrySetting;
300
+ this.showCustomRegistryInput = !!this.customRegistrySetting;
301
+ }
292
302
 
293
303
  /* Serializes an object as a YAML document */
294
304
  this.valuesYaml = saferDump(this.chartValues);
@@ -522,6 +532,10 @@ export default {
522
532
  return this.formYamlOption === VALUES_STATE.YAML || ( !this.valuesComponent && !this.hasQuestions );
523
533
  },
524
534
 
535
+ showingYamlDiff() {
536
+ return this.formYamlOption === VALUES_STATE.DIFF;
537
+ },
538
+
525
539
  formYamlOptions() {
526
540
  const options = [];
527
541
 
@@ -660,6 +674,22 @@ export default {
660
674
  return null;
661
675
  },
662
676
 
677
+ /**
678
+ * Check if the chart contains `systemDefaultRegistry` properties.
679
+ * If not we shouldn't apply the setting, because if the option
680
+ * is exposed for third-party Helm charts, it confuses users because
681
+ * it shows a private registry setting that is never used
682
+ * by the chart they are installing. If not hidden, the setting
683
+ * does nothing, and if the user changes it, it will look like
684
+ * there is a bug in the UI when it doesn't work, because UI is
685
+ * exposing a feature that the chart does not have.
686
+ */
687
+ showCustomRegistry() {
688
+ const global = this.versionInfo?.values?.global || {};
689
+
690
+ return global.systemDefaultRegistry !== undefined || global.cattle?.systemDefaultRegistry !== undefined;
691
+ },
692
+
663
693
  },
664
694
 
665
695
  watch: {
@@ -763,7 +793,7 @@ export default {
763
793
 
764
794
  if (hasPermissionToSeeProvCluster) {
765
795
  const mgmCluster = this.$store.getters['currentCluster'];
766
- const provCluster = mgmCluster ? await this.$store.dispatch('management/find', {
796
+ const provCluster = mgmCluster?.provClusterId ? await this.$store.dispatch('management/find', {
767
797
  type: CAPI.RANCHER_CLUSTER,
768
798
  id: mgmCluster.provClusterId
769
799
  }) : {};
@@ -976,8 +1006,11 @@ export default {
976
1006
 
977
1007
  setIfNotSet(cattle, 'clusterId', cluster?.id);
978
1008
  setIfNotSet(cattle, 'clusterName', cluster?.nameDisplay);
979
- set(cattle, 'systemDefaultRegistry', this.customRegistrySetting);
980
- set(global, 'systemDefaultRegistry', this.customRegistrySetting);
1009
+
1010
+ if (this.showCustomRegistry) {
1011
+ set(cattle, 'systemDefaultRegistry', this.customRegistrySetting);
1012
+ set(global, 'systemDefaultRegistry', this.customRegistrySetting);
1013
+ }
981
1014
 
982
1015
  setIfNotSet(global, 'cattle.systemProjectId', systemProjectId);
983
1016
  setIfNotSet(cattle, 'url', serverUrl);
@@ -1062,7 +1095,7 @@ export default {
1062
1095
 
1063
1096
  const errors = [];
1064
1097
 
1065
- if ( this.showingYaml ) {
1098
+ if ( this.showingYaml || this.showingYamlDiff ) {
1066
1099
  const { errors: yamlErrors } = this.applyYamlToValues();
1067
1100
 
1068
1101
  errors.push(...yamlErrors);
@@ -1316,13 +1349,15 @@ export default {
1316
1349
  color="info"
1317
1350
  class="description"
1318
1351
  >
1319
- <span>{{ step1Description }}</span>
1320
- <span
1321
- v-if="namespaceNewAllowed"
1322
- class="mt-10"
1323
- >
1324
- {{ t('catalog.install.steps.basics.nsCreationDescription', {}, true) }}
1325
- </span>
1352
+ <div>
1353
+ <span>{{ step1Description }}</span>
1354
+ <span
1355
+ v-if="namespaceNewAllowed"
1356
+ class="mt-10"
1357
+ >
1358
+ {{ t('catalog.install.steps.basics.nsCreationDescription', {}, true) }}
1359
+ </span>
1360
+ </div>
1326
1361
  </Banner>
1327
1362
  <div
1328
1363
  v-if="requires.length || warnings.length"
@@ -1417,6 +1452,7 @@ export default {
1417
1452
  />
1418
1453
 
1419
1454
  <Checkbox
1455
+ v-if="showCustomRegistry"
1420
1456
  v-model="showCustomRegistryInput"
1421
1457
  class="mb-20"
1422
1458
  :label="t('catalog.chart.registry.custom.checkBoxLabel')"
@@ -1440,10 +1476,11 @@ export default {
1440
1476
  &nbsp;
1441
1477
  </div>
1442
1478
  <Banner
1443
- v-if="isNamespaceNew"
1479
+ v-if="isNamespaceNew && value.metadata.namespace.length"
1444
1480
  color="info"
1445
- v-html="t('catalog.install.steps.basics.createNamespace', {namespace: value.metadata.namespace}, true) "
1446
- />
1481
+ >
1482
+ <div v-html="t('catalog.install.steps.basics.createNamespace', {namespace: value.metadata.namespace}, true) " />
1483
+ </Banner>
1447
1484
  </div>
1448
1485
  </template>
1449
1486
  <template #clusterTplVersion>
@@ -19,6 +19,12 @@ export default {
19
19
  // Ensure we re-evaluate the redirect in case this auth provider has been disabled
20
20
  const authProvs = await authProvidersInfo(this.$store);
21
21
 
22
+ // Nuxt does not remove it's loading indicator - if we are not changing route, then hide it
23
+ // https://nuxtjs.org/docs/features/loading/
24
+ if (authProvs.enabledLocation) {
25
+ this.$nuxt.$loading.finish();
26
+ }
27
+
22
28
  next(!authProvs.enabledLocation);
23
29
  } else {
24
30
  next();
@@ -91,12 +91,14 @@ export default {
91
91
  :label="t('authConfig.noneEnabled')"
92
92
  color="info"
93
93
  >
94
- {{ t('authConfig.localEnabled') }}
95
- <nuxt-link :to="localUsersRoute">
96
- {{ t('authConfig.manageLocal') }}
97
- </nuxt-link>
98
- <br>
99
- {{ t('authConfig.noneEnabled') }}
94
+ <div>
95
+ {{ t('authConfig.localEnabled') }}
96
+ <nuxt-link :to="localUsersRoute">
97
+ {{ t('authConfig.manageLocal') }}
98
+ </nuxt-link>
99
+ <br>
100
+ {{ t('authConfig.noneEnabled') }}
101
+ </div>
100
102
  </Banner>
101
103
  <SelectIconGrid
102
104
  :rows="rows"
@@ -78,7 +78,7 @@ export default {
78
78
  <div>
79
79
  <div>
80
80
  <div class="masthead">
81
- <header class="header-layout">
81
+ <header>
82
82
  <div class="title">
83
83
  <h1 class="m-0">
84
84
  {{ t('authGroups.assignEdit.assignTitle') }}
@@ -156,7 +156,7 @@ export default {
156
156
  <template>
157
157
  <Loading v-if="!globalRoles || !roleTemplates" />
158
158
  <div v-else>
159
- <header class="header-layout">
159
+ <header>
160
160
  <div class="title">
161
161
  <h1 class="m-0">
162
162
  {{ t('rbac.roletemplate.label') }}
@@ -247,9 +247,12 @@ export default {
247
247
  },
248
248
 
249
249
  cpuReserved() {
250
+ const total = parseSi(this.currentCluster?.status?.allocatable?.cpu);
251
+
250
252
  return {
251
- total: parseSi(this.currentCluster?.status?.allocatable?.cpu),
252
- useful: parseSi(this.currentCluster?.status?.requested?.cpu)
253
+ total,
254
+ useful: parseSi(this.currentCluster?.status?.requested?.cpu),
255
+ units: this.t('clusterIndexPage.hardwareResourceGauge.units.cores', { count: total })
253
256
  };
254
257
  },
255
258
 
@@ -308,9 +311,12 @@ export default {
308
311
  },
309
312
 
310
313
  cpuUsed() {
314
+ const total = parseSi(this.currentCluster?.status?.capacity?.cpu);
315
+
311
316
  return {
312
- total: parseSi(this.currentCluster?.status?.capacity?.cpu),
313
- useful: this.metricAggregations?.cpu
317
+ total,
318
+ useful: this.metricAggregations?.cpu,
319
+ units: this.t('clusterIndexPage.hardwareResourceGauge.units.cores', { count: total })
314
320
  };
315
321
  },
316
322
 
@@ -394,7 +400,7 @@ export default {
394
400
 
395
401
  <template>
396
402
  <section class="dashboard">
397
- <header class="header-layout">
403
+ <header>
398
404
  <div class="title">
399
405
  <h1>
400
406
  <t k="clusterIndexPage.header" />
@@ -504,6 +510,7 @@ export default {
504
510
  :name="t('clusterIndexPage.hardwareResourceGauge.cores')"
505
511
  :reserved="cpuReserved"
506
512
  :used="cpuUsed"
513
+ :units="cpuReserved.units"
507
514
  />
508
515
  <HardwareResourceGauge
509
516
  :name="t('clusterIndexPage.hardwareResourceGauge.ram')"
@@ -712,7 +719,6 @@ export default {
712
719
 
713
720
  > I {
714
721
  text-align: center;
715
- font-size: 20px;
716
722
  padding: 5px 10px;
717
723
  border-right: 1px solid var(--border);
718
724
  }
@@ -39,7 +39,7 @@ export default {
39
39
 
40
40
  <template>
41
41
  <section>
42
- <header class="header-layout row">
42
+ <header class="row">
43
43
  <div class="col span-12">
44
44
  <h1>
45
45
  <t k="longhorn.overview.title" />
@@ -156,7 +156,7 @@ export default {
156
156
  // being saved. Therefore we take the save from the
157
157
  // AlertmanagerConfig resource and pass it into the
158
158
  // receiver config form.
159
- saveOverride(buttonDone) {
159
+ async saveOverride(buttonDone) {
160
160
  if (this.alertmanagerConfigResource.yamlError) {
161
161
  this.alertmanagerConfigResource.errors = this.alertmanagerConfigResource.errors || [];
162
162
  this.alertmanagerConfigResource.errors.push(this.alertmanagerConfigResource.yamlError);
@@ -166,8 +166,18 @@ export default {
166
166
  return;
167
167
  }
168
168
 
169
- this.alertmanagerConfigResource.save(...arguments);
170
- this.redirectToAlertmanagerConfigDetail();
169
+ try {
170
+ await this.alertmanagerConfigResource.save(...arguments);
171
+
172
+ buttonDone(true);
173
+
174
+ this.redirectToAlertmanagerConfigDetail();
175
+ } catch (e) {
176
+ const msg = e?.message ? e.message : this.t('monitoring.alertmanagerConfig.error');
177
+
178
+ this.$refs.config.setError(msg);
179
+ buttonDone(false);
180
+ }
171
181
  },
172
182
  handleButtonGroupClick(event) {
173
183
  if (event === this.yaml) {
@@ -226,7 +236,7 @@ export default {
226
236
 
227
237
  <template>
228
238
  <div>
229
- <header class="header-layout header">
239
+ <header class="header">
230
240
  <div class="title">
231
241
  <div class="primaryheader">
232
242
  <h1>
@@ -271,6 +281,7 @@ export default {
271
281
  />
272
282
  <ReceiverConfig
273
283
  v-if="(currentView === config || currentView === detail) && alertmanagerConfigResource"
284
+ ref="config"
274
285
  :value="receiverValue"
275
286
  :mode="mode"
276
287
  :alertmanager-config-id="alertmanagerConfigId"
@@ -140,7 +140,7 @@ export default {
140
140
 
141
141
  <template>
142
142
  <section>
143
- <header class="header-layout row">
143
+ <header class="row">
144
144
  <div class="col span-12">
145
145
  <h1>
146
146
  <t k="monitoring.overview.title" />
@@ -37,7 +37,7 @@ export default {
37
37
 
38
38
  <template>
39
39
  <section>
40
- <header class="header-layout row">
40
+ <header class="row">
41
41
  <div class="col span-12">
42
42
  <h1>
43
43
  <t k="neuvector.overview.title" />
@@ -133,7 +133,7 @@ export default {
133
133
  <p>{{ t('performance.manualRefresh.description') }}</p>
134
134
  <Banner
135
135
  color="error"
136
- label-key="performance.manualRefresh.banner"
136
+ label-key="performance.experimental"
137
137
  />
138
138
  <Checkbox
139
139
  v-model="value.manualRefresh.enabled"
@@ -163,7 +163,7 @@ export default {
163
163
  <p>{{ t('performance.gc.description') }}</p>
164
164
  <Banner
165
165
  color="error"
166
- label-key="performance.gc.banner"
166
+ label-key="performance.experimental"
167
167
  />
168
168
  <Checkbox
169
169
  v-model="value.garbageCollection.enabled"
@@ -237,6 +237,52 @@ export default {
237
237
  </div>
238
238
  </div>
239
239
  </div>
240
+ <!-- Force NS filter -->
241
+ <div class="mt-40">
242
+ <h2>{{ t('performance.nsFiltering.label') }}</h2>
243
+ <p>{{ t('performance.nsFiltering.description') }}</p>
244
+ <Banner
245
+ color="error"
246
+ label-key="performance.experimental"
247
+ />
248
+ <Checkbox
249
+ v-model="value.forceNsFilter.enabled"
250
+ :mode="mode"
251
+ :label="t('performance.nsFiltering.checkboxLabel')"
252
+ class="mt-10 mb-20"
253
+ :primary="true"
254
+ />
255
+ <div class="ml-20">
256
+ <p :class="{ 'text-muted': !value.forceNsFilter.enabled }">
257
+ {{ t('performance.nsFiltering.count.description') }}
258
+ </p>
259
+ <LabeledInput
260
+ v-model="value.forceNsFilter.threshold"
261
+ :mode="mode"
262
+ :label="t('performance.nsFiltering.count.inputLabel')"
263
+ :disabled="!value.forceNsFilter.enabled"
264
+ class="input"
265
+ type="number"
266
+ min="0"
267
+ />
268
+ </div>
269
+ </div>
270
+ <!-- Advanced Websocket Worker -->
271
+ <div class="mt-40">
272
+ <h2>{{ t('performance.advancedWorker.label') }}</h2>
273
+ <p>{{ t('performance.advancedWorker.description') }}</p>
274
+ <Banner
275
+ color="error"
276
+ label-key="performance.experimental"
277
+ />
278
+ <Checkbox
279
+ v-model="value.advancedWorker.enabled"
280
+ :mode="mode"
281
+ :label="t('performance.advancedWorker.checkboxLabel')"
282
+ class="mt-10 mb-20"
283
+ :primary="true"
284
+ />
285
+ </div>
240
286
  </div>
241
287
  </div>
242
288
  <template v-for="err in errors">
@@ -1,4 +1,5 @@
1
1
  <script>
2
+ import { mapGetters } from 'vuex';
2
3
  import ChartReadme from '@shell/components/ChartReadme';
3
4
  import { Banner } from '@components/Banner';
4
5
  import LazyImage from '@shell/components/LazyImage';
@@ -34,6 +35,18 @@ export default {
34
35
  };
35
36
  },
36
37
 
38
+ computed: {
39
+ ...mapGetters({ theme: 'prefs/theme' }),
40
+
41
+ applyDarkModeBg() {
42
+ if (this.theme === 'dark') {
43
+ return { 'dark-mode': true };
44
+ }
45
+
46
+ return {};
47
+ },
48
+ },
49
+
37
50
  methods: {
38
51
  show(info) {
39
52
  this.info = info;
@@ -111,7 +124,10 @@ export default {
111
124
  class="plugin-info-content"
112
125
  >
113
126
  <div class="plugin-header">
114
- <div class="plugin-icon">
127
+ <div
128
+ class="plugin-icon"
129
+ :class="applyDarkModeBg"
130
+ >
115
131
  <LazyImage
116
132
  v-if="info.icon"
117
133
  :initial-src="defaultIcon"
@@ -254,6 +270,10 @@ export default {
254
270
 
255
271
  transition: right .5s ease;
256
272
 
273
+ &__header {
274
+ text-transform: capitalize;
275
+ }
276
+
257
277
  .plugin-info-content {
258
278
  display: flex;
259
279
  flex-direction: column;
@@ -285,10 +305,23 @@ export default {
285
305
  font-size: 40px;
286
306
  margin-right:10px;
287
307
  color: #888;
308
+ width: 44px;
309
+ height: 44px;
310
+
311
+ &.dark-mode {
312
+ border-radius: calc(2 * var(--border-radius));
313
+ overflow: hidden;
314
+ background-color: white;
315
+ }
288
316
 
289
317
  .plugin-icon-img {
290
318
  height: 40px;
291
319
  width: 40px;
320
+ -o-object-fit: contain;
321
+ object-fit: contain;
322
+ position: relative;
323
+ top: 2px;
324
+ left: 2px;
292
325
  }
293
326
  }
294
327
 
@@ -103,6 +103,15 @@ export default {
103
103
 
104
104
  ...mapGetters({ uiplugins: 'uiplugins/plugins' }),
105
105
  ...mapGetters({ uiErrors: 'uiplugins/errors' }),
106
+ ...mapGetters({ theme: 'prefs/theme' }),
107
+
108
+ applyDarkModeBg() {
109
+ if (this.theme === 'dark') {
110
+ return { 'dark-mode': true };
111
+ }
112
+
113
+ return {};
114
+ },
106
115
 
107
116
  menuActions() {
108
117
  const menuActions = [];
@@ -599,7 +608,10 @@ export default {
599
608
  class="plugin"
600
609
  @click="showPluginDetail(plugin)"
601
610
  >
602
- <div class="plugin-icon">
611
+ <div
612
+ class="plugin-icon"
613
+ :class="applyDarkModeBg"
614
+ >
603
615
  <LazyImage
604
616
  v-if="plugin.icon"
605
617
  :initial-src="defaultIcon"
@@ -781,7 +793,7 @@ export default {
781
793
 
782
794
  > i {
783
795
  color: var(--success);
784
- font-size: 20px;
796
+ font-size: 14px;
785
797
  font-weight: bold;
786
798
  }
787
799
 
@@ -841,10 +853,23 @@ export default {
841
853
  font-size: 40px;
842
854
  margin-right:10px;
843
855
  color: #888;
856
+ width: 44px;
857
+ height: 44px;
858
+
859
+ &.dark-mode {
860
+ border-radius: calc(2 * var(--border-radius));
861
+ overflow: hidden;
862
+ background-color: white;
863
+ }
844
864
 
845
865
  .plugin-icon-img {
846
866
  height: 40px;
847
867
  width: 40px;
868
+ -o-object-fit: contain;
869
+ object-fit: contain;
870
+ position: relative;
871
+ top: 2px;
872
+ left: 2px;
848
873
  }
849
874
  }
850
875
 
@@ -875,6 +900,7 @@ export default {
875
900
  font-size: 16px;
876
901
  font-weight: bold;
877
902
  margin-bottom: 5px;
903
+ text-transform: capitalize;
878
904
  }
879
905
 
880
906
  .plugin-badges {
@@ -284,12 +284,13 @@ export default {
284
284
  },
285
285
 
286
286
  promptDownload(btnCb) {
287
- const resources = [{ downloadData: this.downloadData, gatherResponseTimes: this.gatherResponseTimes }];
288
-
289
287
  if ( !this.responseTimes ) {
290
288
  this.$store.dispatch('management/promptModal', {
291
- component: 'DiagnosticTimingsDialog',
292
- resources
289
+ component: 'DiagnosticTimingsDialog',
290
+ componentProps: {
291
+ downloadData: this.downloadData,
292
+ gatherResponseTimes: this.gatherResponseTimes
293
+ }
293
294
  })
294
295
  .then(() => btnCb(true))
295
296
  .catch(() => btnCb(false));