@rancher/shell 0.3.14 → 0.3.16

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 (400) hide show
  1. package/assets/images/providers/nutanix.svg +1 -0
  2. package/assets/translations/en-us.yaml +84 -3
  3. package/assets/translations/zh-hans.yaml +68 -26
  4. package/chart/gatekeeper.vue +2 -2
  5. package/chart/monitoring/alerting/index.vue +3 -3
  6. package/chart/monitoring/index.vue +2 -2
  7. package/chart/monitoring/prometheus/index.vue +1 -1
  8. package/chart/rancher-backup/index.vue +2 -2
  9. package/cloud-credential/generic.vue +1 -1
  10. package/cloud-credential/harvester.vue +2 -2
  11. package/components/AssignTo.vue +1 -1
  12. package/components/AwsComplianceBanner.vue +1 -1
  13. package/components/BackLink.vue +7 -0
  14. package/components/BannerGraphic.vue +1 -0
  15. package/components/BrandImage.vue +3 -3
  16. package/components/ClusterProviderIcon.vue +1 -1
  17. package/components/CommunityLinks.vue +2 -2
  18. package/components/ConsumptionGauge.vue +17 -2
  19. package/components/CruResource.vue +3 -2
  20. package/components/DashboardMetrics.vue +8 -0
  21. package/components/DetailTop.vue +1 -1
  22. package/components/EmberPage.vue +1 -0
  23. package/components/ExplorerMembers.vue +8 -8
  24. package/components/ExplorerProjectsNamespaces.vue +9 -9
  25. package/components/FixedBanner.vue +1 -1
  26. package/components/GlobalRoleBindings.vue +11 -11
  27. package/components/GrafanaDashboard.vue +14 -2
  28. package/components/GrowlManager.vue +1 -1
  29. package/components/HarvesterServiceAddOnConfig.vue +4 -3
  30. package/components/IconOrSvg.vue +10 -3
  31. package/components/LandingPagePreference.vue +2 -2
  32. package/components/MoveModal.vue +1 -1
  33. package/components/PodSecurityAdmission.vue +3 -3
  34. package/components/ProgressBarMulti.vue +2 -2
  35. package/components/PromptRemove.vue +52 -28
  36. package/components/PromptRestore.vue +3 -3
  37. package/components/Questions/index.vue +5 -5
  38. package/components/RelatedWorkloadsTable.vue +1 -1
  39. package/components/ResourceList/Masthead.vue +1 -1
  40. package/components/ResourceTable.vue +3 -3
  41. package/components/ResourceYaml.vue +1 -1
  42. package/components/RoleBindings.vue +2 -2
  43. package/components/SimpleBox.vue +1 -0
  44. package/components/SingleClusterInfo.vue +1 -1
  45. package/components/SortableTable/actions.js +3 -3
  46. package/components/SortableTable/advanced-filtering.js +7 -7
  47. package/components/SortableTable/filtering.js +1 -1
  48. package/components/SortableTable/index.vue +14 -10
  49. package/components/SortableTable/selection.js +5 -5
  50. package/components/SortableTable/sorting.js +5 -5
  51. package/components/Tabbed/index.vue +7 -7
  52. package/components/TableSparkLine.vue +1 -1
  53. package/components/Wizard.vue +11 -23
  54. package/components/__tests__/Collapse.spec.ts +1 -1
  55. package/components/__tests__/CruResource.test.ts +74 -0
  56. package/components/__tests__/SimpleBox.spec.ts +1 -1
  57. package/components/auth/RoleDetailEdit.vue +7 -3
  58. package/components/auth/SelectPrincipal.vue +3 -3
  59. package/components/fleet/FleetResources.vue +1 -1
  60. package/components/fleet/FleetStatus.vue +4 -4
  61. package/components/fleet/FleetSummary.vue +1 -1
  62. package/components/fleet/ForceDirectedTreeChart/chartIcons.js +1 -1
  63. package/components/fleet/ForceDirectedTreeChart/index.vue +1 -1
  64. package/components/form/ArrayList.vue +11 -3
  65. package/components/form/ArrayListSelect.vue +2 -2
  66. package/components/form/FileSelector.vue +6 -0
  67. package/components/form/GitPicker.vue +528 -0
  68. package/components/form/KeyValue.vue +82 -41
  69. package/components/form/LabeledSelect.vue +2 -2
  70. package/components/form/MatchExpressions.vue +2 -2
  71. package/components/form/Members/ClusterMembershipEditor.vue +1 -2
  72. package/components/form/Members/ClusterPermissionsEditor.vue +6 -5
  73. package/components/form/Members/MembershipEditor.vue +4 -4
  74. package/components/form/Members/ProjectMembershipEditor.vue +1 -2
  75. package/components/form/NameNsDescription.vue +13 -6
  76. package/components/form/Networking.vue +2 -2
  77. package/components/form/NodeScheduling.vue +1 -1
  78. package/components/form/PodAffinity.vue +7 -2
  79. package/components/form/ProjectMemberEditor.vue +4 -4
  80. package/components/form/ResourceQuota/Namespace.vue +2 -2
  81. package/components/form/ResourceQuota/NamespaceRow.vue +2 -2
  82. package/components/form/ResourceQuota/Project.vue +1 -1
  83. package/components/form/ResourceQuota/shared.js +2 -2
  84. package/components/form/ResourceSelector.vue +1 -1
  85. package/components/form/ResourceTabs/index.vue +1 -1
  86. package/components/form/RuleSelector.vue +1 -1
  87. package/components/form/SecretSelector.vue +4 -4
  88. package/components/form/Select.vue +2 -2
  89. package/components/form/SelectOrCreateAuthSecret.vue +3 -3
  90. package/components/form/ServiceNameSelect.vue +1 -1
  91. package/components/form/ServicePorts.vue +1 -1
  92. package/components/form/ShellInput.vue +1 -1
  93. package/components/form/SimpleSecretSelector.vue +4 -4
  94. package/components/form/Taints.vue +1 -1
  95. package/components/form/ValueFromResource.vue +3 -3
  96. package/components/form/WorkloadPorts.vue +8 -7
  97. package/components/form/__tests__/Error.test.ts +1 -1
  98. package/components/form/__tests__/KeyValue.test.ts +21 -0
  99. package/components/formatter/ClusterLink.vue +1 -1
  100. package/components/formatter/ClusterProvider.vue +13 -2
  101. package/components/formatter/Endpoints.vue +1 -1
  102. package/components/formatter/FleetSummaryGraph.vue +2 -2
  103. package/components/formatter/IngressTarget.vue +2 -2
  104. package/components/formatter/PodImages.vue +1 -1
  105. package/components/formatter/PrincipalGroupBindings.vue +1 -1
  106. package/components/formatter/ReceiverIcons.vue +3 -3
  107. package/components/formatter/ServiceType.vue +1 -1
  108. package/components/formatter/WorkloadDetailEndpoints.vue +1 -1
  109. package/components/formatter/WorkloadHealthScale.vue +1 -1
  110. package/components/formatter/__tests__/LiveDate.test.ts +1 -1
  111. package/components/graph/Bar.vue +1 -1
  112. package/components/graph/LinePlot.vue +3 -3
  113. package/components/nav/Group.vue +2 -2
  114. package/components/nav/Header.vue +5 -5
  115. package/components/nav/NamespaceFilter.vue +14 -14
  116. package/components/nav/TopLevelMenu.vue +76 -11
  117. package/components/nav/WindowManager/ContainerLogs.vue +2 -2
  118. package/components/nav/WindowManager/ContainerShell.vue +1 -1
  119. package/components/nav/WorkspaceSwitcher.vue +1 -1
  120. package/config/home-links.js +4 -4
  121. package/config/labels-annotations.js +8 -9
  122. package/config/pod-security-admission.ts +1 -1
  123. package/config/product/auth.js +5 -5
  124. package/config/product/explorer.js +14 -0
  125. package/config/store.js +2 -0
  126. package/config/table-headers.js +13 -13
  127. package/config/uiplugins.js +8 -1
  128. package/core/plugin-routes.ts +3 -2
  129. package/core/plugin.ts +3 -3
  130. package/core/plugins.js +7 -7
  131. package/creators/pkg/files/index.ts +1 -1
  132. package/detail/catalog.cattle.io.clusterrepo.vue +8 -1
  133. package/detail/cis.cattle.io.clusterscan.vue +3 -3
  134. package/detail/fleet.cattle.io.bundle.vue +1 -1
  135. package/detail/helm.cattle.io.projecthelmchart.vue +16 -29
  136. package/detail/management.cattle.io.user.vue +12 -12
  137. package/detail/namespace.vue +4 -4
  138. package/detail/networking.k8s.io.ingress.vue +3 -3
  139. package/detail/node.vue +2 -2
  140. package/detail/provisioning.cattle.io.cluster.vue +9 -10
  141. package/detail/service.vue +1 -1
  142. package/detail/workload/index.vue +3 -3
  143. package/dialog/AddProjectMemberDialog.vue +2 -2
  144. package/dialog/DrainNode.vue +1 -1
  145. package/dialog/GenericPrompt.vue +9 -5
  146. package/dialog/RotateEncryptionKeyDialog.vue +2 -2
  147. package/dialog/ScaleMachineDownDialog.vue +2 -2
  148. package/edit/__tests__/monitoring.coreos.com.prometheusrule.test.ts +56 -0
  149. package/edit/auth/azuread.vue +3 -3
  150. package/edit/autoscaling.horizontalpodautoscaler/index.vue +5 -5
  151. package/edit/cis.cattle.io.clusterscan.vue +5 -5
  152. package/edit/cloudcredential.vue +4 -4
  153. package/edit/constraints.gatekeeper.sh.constraint/NamespaceList.vue +1 -1
  154. package/edit/constraints.gatekeeper.sh.constraint/index.vue +4 -4
  155. package/edit/fleet.cattle.io.gitrepo.vue +6 -6
  156. package/edit/helm.cattle.io.projecthelmchart.vue +3 -3
  157. package/edit/logging-flow/index.vue +4 -4
  158. package/edit/logging.banzaicloud.io.output/index.vue +3 -3
  159. package/edit/logging.banzaicloud.io.output/providers/elasticsearch.vue +1 -1
  160. package/edit/logging.banzaicloud.io.output/providers/forward.vue +1 -1
  161. package/edit/logging.banzaicloud.io.output/providers/logz.vue +1 -1
  162. package/edit/logging.banzaicloud.io.output/providers/opensearch.vue +1 -1
  163. package/edit/logging.banzaicloud.io.output/providers/redis.vue +1 -1
  164. package/edit/logging.banzaicloud.io.output/providers/splunkHec.vue +1 -1
  165. package/edit/management.cattle.io.clusterroletemplatebinding.vue +1 -1
  166. package/edit/management.cattle.io.podsecurityadmissionconfigurationtemplate.vue +1 -1
  167. package/edit/management.cattle.io.project.vue +3 -3
  168. package/edit/management.cattle.io.projectroletemplatebinding.vue +2 -2
  169. package/edit/management.cattle.io.setting.vue +1 -1
  170. package/edit/management.cattle.io.user.vue +2 -2
  171. package/edit/monitoring.coreos.com.alertmanagerconfig/auth.vue +2 -2
  172. package/edit/monitoring.coreos.com.alertmanagerconfig/index.vue +1 -1
  173. package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +1 -1
  174. package/edit/monitoring.coreos.com.alertmanagerconfig/types/opsgenie.vue +3 -3
  175. package/edit/monitoring.coreos.com.prometheusrule/GroupRules.vue +5 -5
  176. package/edit/monitoring.coreos.com.prometheusrule/duration.js +1 -1
  177. package/edit/monitoring.coreos.com.prometheusrule/index.vue +8 -3
  178. package/edit/monitoring.coreos.com.receiver/auth.vue +2 -2
  179. package/edit/monitoring.coreos.com.receiver/tls.vue +3 -4
  180. package/edit/monitoring.coreos.com.receiver/types/__tests__/email.test.ts +53 -0
  181. package/edit/monitoring.coreos.com.receiver/types/email.vue +2 -0
  182. package/edit/monitoring.coreos.com.receiver/types/opsgenie.vue +3 -3
  183. package/edit/monitoring.coreos.com.receiver/types/webhook.add.vue +1 -1
  184. package/edit/monitoring.coreos.com.route.vue +2 -2
  185. package/edit/namespace.vue +21 -13
  186. package/edit/networking.k8s.io.ingress/Certificate.vue +2 -2
  187. package/edit/networking.k8s.io.ingress/DefaultBackend.vue +2 -2
  188. package/edit/networking.k8s.io.ingress/RulePath.vue +2 -2
  189. package/edit/networking.k8s.io.ingress/Rules.vue +2 -2
  190. package/edit/networking.k8s.io.ingress/index.vue +4 -4
  191. package/edit/networking.k8s.io.networkpolicy/PolicyRuleTarget.vue +3 -3
  192. package/edit/networking.k8s.io.networkpolicy/index.vue +1 -1
  193. package/edit/persistentvolume/index.vue +4 -4
  194. package/edit/persistentvolumeclaim.vue +3 -3
  195. package/edit/provisioning.cattle.io.cluster/RegistryMirrors.vue +1 -1
  196. package/edit/provisioning.cattle.io.cluster/SelectCredential.vue +2 -2
  197. package/edit/provisioning.cattle.io.cluster/import.vue +2 -2
  198. package/edit/provisioning.cattle.io.cluster/index.vue +7 -7
  199. package/edit/provisioning.cattle.io.cluster/rke2.vue +28 -29
  200. package/edit/resources.cattle.io.backup.vue +2 -2
  201. package/edit/resources.cattle.io.restore.vue +3 -3
  202. package/edit/secret/generic.vue +1 -1
  203. package/edit/secret/index.vue +3 -3
  204. package/edit/service.vue +3 -21
  205. package/edit/serviceaccount.vue +2 -2
  206. package/edit/storage.k8s.io.storageclass/index.vue +4 -4
  207. package/edit/storage.k8s.io.storageclass/provisioners/driver.harvesterhci.io.vue +1 -1
  208. package/edit/token.vue +5 -5
  209. package/edit/workload/index.vue +1 -1
  210. package/edit/workload/mixins/workload.js +8 -8
  211. package/edit/workload/storage/ContainerMountPaths.vue +9 -9
  212. package/edit/workload/storage/Mount.vue +2 -2
  213. package/edit/workload/storage/csi/index.vue +1 -1
  214. package/edit/workload/storage/ephemeralVolume/index.vue +1 -1
  215. package/edit/workload/storage/index.vue +6 -6
  216. package/edit/workload/storage/persistentVolumeClaim/persistentvolumeclaim.vue +2 -2
  217. package/initialize/client.js +8 -8
  218. package/initialize/index.js +1 -4
  219. package/layouts/default.vue +38 -11
  220. package/list/catalog.cattle.io.clusterrepo.vue +9 -1
  221. package/list/cis.cattle.io.clusterscan.vue +1 -1
  222. package/list/fleet.cattle.io.cluster.vue +2 -2
  223. package/list/group.principal.vue +1 -1
  224. package/list/helm.cattle.io.projecthelmchart.vue +2 -2
  225. package/list/management.cattle.io.cluster.vue +1 -1
  226. package/list/management.cattle.io.feature.vue +1 -1
  227. package/list/management.cattle.io.user.vue +2 -2
  228. package/list/node.vue +5 -5
  229. package/list/provisioning.cattle.io.cluster.vue +4 -5
  230. package/machine-config/amazonec2.vue +2 -2
  231. package/machine-config/digitalocean.vue +4 -4
  232. package/machine-config/linode.vue +4 -4
  233. package/machine-config/vmwarevsphere.vue +12 -12
  234. package/middleware/authenticated.js +7 -6
  235. package/mixins/brand.js +1 -1
  236. package/mixins/chart.js +6 -6
  237. package/mixins/fetch.client.js +2 -2
  238. package/mixins/form-validation.js +7 -7
  239. package/mixins/resource-fetch-namespaced.js +1 -1
  240. package/mixins/resource-fetch.js +2 -2
  241. package/models/apps.statefulset.js +2 -2
  242. package/models/batch.cronjob.js +1 -1
  243. package/models/catalog.cattle.io.app.js +4 -4
  244. package/models/cis.cattle.io.clusterscan.js +1 -1
  245. package/models/cis.cattle.io.clusterscanbenchmark.js +1 -1
  246. package/models/cis.cattle.io.clusterscanreport.js +1 -1
  247. package/models/cloudcredential.js +1 -1
  248. package/models/cluster/node.js +5 -5
  249. package/models/cluster.x-k8s.io.machinedeployment.js +2 -2
  250. package/models/fleet.cattle.io.gitrepo.js +3 -3
  251. package/models/group.principal.js +4 -4
  252. package/models/helm.cattle.io.projecthelmchart.js +2 -2
  253. package/models/logging.banzaicloud.io.clusterflow.js +2 -2
  254. package/models/logging.banzaicloud.io.flow.js +5 -5
  255. package/models/logging.banzaicloud.io.output.js +2 -2
  256. package/models/management.cattle.io.cluster.js +10 -14
  257. package/models/management.cattle.io.globalrole.js +4 -4
  258. package/models/management.cattle.io.node.js +2 -2
  259. package/models/management.cattle.io.nodepool.js +3 -3
  260. package/models/management.cattle.io.nodetemplate.js +4 -4
  261. package/models/management.cattle.io.project.js +2 -2
  262. package/models/management.cattle.io.roletemplate.js +1 -1
  263. package/models/management.cattle.io.setting.js +1 -1
  264. package/models/management.cattle.io.user.js +5 -5
  265. package/models/monitoring.coreos.com.receiver.js +9 -9
  266. package/models/namespace.js +1 -1
  267. package/models/networking.k8s.io.ingress.js +5 -5
  268. package/models/persistentvolume.js +3 -3
  269. package/models/pod.js +3 -3
  270. package/models/provisioning.cattle.io.cluster.js +39 -27
  271. package/models/rbac.authorization.k8s.io.clusterrole.js +2 -2
  272. package/models/rbac.authorization.k8s.io.role.js +3 -3
  273. package/models/secret.js +1 -1
  274. package/models/service.js +2 -2
  275. package/models/storage.k8s.io.storageclass.js +2 -2
  276. package/models/token.js +1 -1
  277. package/models/workload.js +6 -6
  278. package/models/workload.service.js +5 -21
  279. package/package.json +3 -2
  280. package/pages/about.vue +9 -9
  281. package/pages/account/index.vue +2 -2
  282. package/pages/auth/login.vue +25 -12
  283. package/pages/auth/setup.vue +4 -0
  284. package/pages/auth/verify.vue +6 -0
  285. package/pages/c/_cluster/apps/charts/index.vue +4 -4
  286. package/pages/c/_cluster/apps/charts/install.vue +28 -20
  287. package/pages/c/_cluster/auth/roles/index.vue +10 -10
  288. package/pages/c/_cluster/explorer/index.vue +41 -16
  289. package/pages/c/_cluster/explorer/tools/index.vue +8 -8
  290. package/pages/c/_cluster/fleet/GitRepoGraphConfig.js +1 -1
  291. package/pages/c/_cluster/fleet/index.vue +11 -11
  292. package/pages/c/_cluster/monitoring/index.vue +1 -1
  293. package/pages/c/_cluster/settings/links.vue +3 -3
  294. package/pages/c/_cluster/settings/performance.vue +1 -1
  295. package/pages/c/_cluster/uiplugins/CatalogList/CatalogLoadDialog.vue +6 -6
  296. package/pages/c/_cluster/uiplugins/CatalogList/index.vue +3 -3
  297. package/pages/c/_cluster/uiplugins/InstallDialog.vue +3 -3
  298. package/pages/c/_cluster/uiplugins/PluginInfoPanel.vue +1 -1
  299. package/pages/c/_cluster/uiplugins/RemoveUIPlugins.vue +3 -3
  300. package/pages/c/_cluster/uiplugins/SetupUIPlugins.vue +6 -6
  301. package/pages/c/_cluster/uiplugins/UninstallDialog.vue +4 -4
  302. package/pages/c/_cluster/uiplugins/index.vue +22 -19
  303. package/pages/diagnostic.vue +6 -6
  304. package/pages/home.vue +8 -3
  305. package/pages/prefs.vue +2 -2
  306. package/pages/rio/mesh.vue +3 -3
  307. package/pages/support/index.vue +10 -1
  308. package/pkg/auto-import.js +1 -1
  309. package/pkg/tsconfig.json +1 -0
  310. package/pkg/vue.config.js +1 -1
  311. package/plugins/axios.js +1 -1
  312. package/plugins/clean-html-directive.js +1 -1
  313. package/plugins/dashboard-store/__tests__/mutations.spec.js +4 -4
  314. package/plugins/dashboard-store/actions.js +4 -4
  315. package/plugins/dashboard-store/getters.js +1 -1
  316. package/plugins/dashboard-store/index.js +1 -1
  317. package/plugins/dashboard-store/mutations.js +2 -2
  318. package/plugins/dashboard-store/resource-class.js +8 -8
  319. package/plugins/i18n.js +1 -1
  320. package/plugins/plugin.js +5 -1
  321. package/plugins/steve/actions.js +25 -3
  322. package/plugins/steve/getters.js +3 -3
  323. package/plugins/steve/hybrid-class.js +1 -1
  324. package/plugins/steve/mutations.js +1 -1
  325. package/plugins/steve/performanceTesting.js +1 -1
  326. package/plugins/steve/resourceWatcher.js +1 -1
  327. package/plugins/steve/subscribe.js +6 -6
  328. package/plugins/steve/worker/web-worker.basic.js +1 -1
  329. package/promptRemove/management.cattle.io.project.vue +3 -3
  330. package/promptRemove/mixin/roleDeletionCheck.js +4 -4
  331. package/promptRemove/pod.vue +1 -1
  332. package/rancher-components/components/Form/Checkbox/Checkbox.test.ts +2 -2
  333. package/rancher-components/components/Form/Checkbox/Checkbox.vue +1 -1
  334. package/rancher-components/components/Form/Radio/RadioButton.test.ts +1 -1
  335. package/rancher-components/components/Form/Radio/RadioButton.vue +2 -2
  336. package/rancher-components/components/Form/Radio/RadioGroup.vue +2 -2
  337. package/rancher-components/components/Form/TextArea/TextAreaAutoGrow.vue +1 -0
  338. package/rancher-components/components/Form/ToggleSwitch/ToggleSwitch.test.ts +1 -1
  339. package/rancher-components/components/Form/ToggleSwitch/ToggleSwitch.vue +7 -7
  340. package/rancher-components/components/StringList/StringList.test.ts +10 -9
  341. package/rancher-components/components/StringList/StringList.vue +5 -5
  342. package/scripts/extension/helm/charts/ui-plugin-server/Chart.yaml +1 -1
  343. package/store/action-menu.js +4 -4
  344. package/store/auth.js +40 -7
  345. package/store/aws.js +1 -1
  346. package/store/catalog.js +12 -11
  347. package/store/digitalocean.js +4 -4
  348. package/store/features.js +1 -0
  349. package/store/github.js +70 -213
  350. package/store/gitlab.js +159 -0
  351. package/store/growl.js +1 -1
  352. package/store/i18n.js +7 -7
  353. package/store/index.js +63 -22
  354. package/store/linode.js +1 -1
  355. package/store/plugins.js +5 -5
  356. package/store/pnap.js +1 -1
  357. package/store/prefs.js +6 -6
  358. package/store/resource-fetch.js +3 -3
  359. package/store/type-map.js +61 -42
  360. package/store/uiplugins.ts +2 -1
  361. package/store/wm.js +5 -4
  362. package/tsconfig.default.json +10 -0
  363. package/tsconfig.json +2 -9
  364. package/types/shell/index.d.ts +10 -2
  365. package/utils/__tests__/version.test.ts +28 -0
  366. package/utils/alertmanagerconfig.js +4 -4
  367. package/utils/array.ts +4 -4
  368. package/utils/async.ts +1 -1
  369. package/utils/auth.js +3 -3
  370. package/utils/axios.js +5 -5
  371. package/utils/cluster.js +4 -3
  372. package/utils/color.js +10 -0
  373. package/utils/create-yaml.js +4 -4
  374. package/utils/crypto/browserHashUtils.js +1 -1
  375. package/utils/crypto/browserMd5.js +1 -1
  376. package/utils/crypto/browserSha1.js +1 -1
  377. package/utils/crypto/browserSha256.js +1 -1
  378. package/utils/crypto/index.js +3 -3
  379. package/utils/favicon.js +2 -3
  380. package/utils/gatekeeper/util.js +3 -3
  381. package/utils/gc/gc.ts +2 -2
  382. package/utils/git.ts +92 -0
  383. package/utils/grafana.js +4 -4
  384. package/utils/monitoring.js +2 -2
  385. package/utils/nuxt.js +2 -2
  386. package/utils/object.js +5 -5
  387. package/utils/pod-security-admission.ts +1 -1
  388. package/utils/projectAndNamespaceFiltering.utils.ts +1 -1
  389. package/utils/select.js +2 -2
  390. package/utils/selector.js +2 -2
  391. package/utils/settings.ts +17 -2
  392. package/utils/socket.js +30 -6
  393. package/utils/sort.js +1 -1
  394. package/utils/string.js +1 -1
  395. package/utils/url.ts +1 -1
  396. package/utils/validators/formRules/index.ts +3 -3
  397. package/utils/validators/role-template.js +4 -4
  398. package/utils/version.js +14 -1
  399. package/vue.config.js +19 -13
  400. package/components/form/GithubPicker.vue +0 -390
@@ -0,0 +1 @@
1
+ <?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="Layer_1" x="0px" y="0px" viewBox="0 0 70.7 48.2" style="enable-background:new 0 0 70.7 48.2;" xml:space="preserve"> <style type="text/css"> .st0{fill:#A8CB3A;} .st1{fill:#174489;} </style> <title>nutanix logo</title> <g> <path id="Fill-1" class="st0" d="M15.6,47.8c-0.2,0.2-0.4,0.3-0.7,0.3H1.1c-0.4,0-0.9-0.2-1-0.6c-0.2-0.5-0.1-1,0.3-1.3L25.5,25 c0.6-0.5,0.6-1.3,0-1.8L0.4,2C0.1,1.7-0.1,1.3,0,0.9C0.1,0.4,0.6,0,1.1,0h13.2c0.3,0,0.5,0.1,0.7,0.3l27.3,23l0.2,0.2 c0.4,0.4,0.4,1,0,1.4l-0.3,0.2L15.6,47.8"></path> <path id="Fill-8" class="st1" d="M46.6,20.2c0.4,0.4,1.1,0.4,1.5,0L70,2c0.3-0.3,0.5-0.7,0.4-1C70.3,0.4,69.8,0,69.3,0H56.1 c-0.3,0-0.5,0.1-0.7,0.3L40,12.8c-0.6,0.5-0.6,1.3,0,1.8L46.6,20.2"></path> <path id="Fill-9" class="st1" d="M46.5,28.1c0.4-0.4,1.1-0.4,1.5,0l22.2,18.2c0.3,0.3,0.5,0.7,0.4,1c-0.1,0.5-0.6,0.9-1.1,0.9H56.3 c-0.3,0-0.5-0.1-0.7-0.3L40.4,35.3c-0.6-0.5-0.6-1.3,0-1.8L46.5,28.1"></path> </g> </svg>
@@ -73,6 +73,7 @@ generic:
73
73
  techPreview: Tech Preview
74
74
  type: Type
75
75
  unknown: Unknown
76
+ upload: Upload
76
77
  provisioning: '—'
77
78
  key: Key
78
79
  value: Value
@@ -117,6 +118,7 @@ locale:
117
118
  none: (None)
118
119
 
119
120
  nav:
121
+ harvesterDashboard: Harvester Dashboard
120
122
  backToRancher: Cluster Manager
121
123
  clusterTools: Cluster Tools
122
124
  kubeconfig:
@@ -179,6 +181,7 @@ nav:
179
181
  multiCluster: Global Apps
180
182
  legacy: Legacy Apps
181
183
  configuration: Configuration
184
+ hci: HCI
182
185
  search:
183
186
  placeholder: Type to search clusters
184
187
  noResults: No matching clusters
@@ -4007,6 +4010,7 @@ plugins:
4007
4010
  host: This Extension is not compatible with this application
4008
4011
  version: This Extension is not compatible with this version of Rancher
4009
4012
  load: An error occurred loading the code for this Extension
4013
+ developerPkg: This Extension has been loaded internally, so we won't load the external version
4010
4014
  success:
4011
4015
  title: Loaded extension {name}
4012
4016
  message: Extension was loaded successfully
@@ -4436,7 +4440,6 @@ rbac:
4436
4440
  members:
4437
4441
  label: Members
4438
4442
  roletemplate:
4439
- label: Roles
4440
4443
  newUserDefault:
4441
4444
  no: No
4442
4445
  tooltip: This does not affect any bindings to the role that already exist.
@@ -5583,8 +5586,8 @@ validation:
5583
5586
  tooLongPrefix: '"{key}" cannot have a prefix longer than {max} characters'
5584
5587
  minLength: '"{key}" must contain more than {min} characters'
5585
5588
  maxLength: '"{key}" must contain less than {max} characters'
5586
- minValue: '"{key}" must be higher than {min}'
5587
- maxValue: '"{key}" must be lower than {max}'
5589
+ minValue: '"{key}" must be equal or higher than {min}'
5590
+ maxValue: '"{key}" must be equal or lower than {max}'
5588
5591
  betweenLengths: '"{key}" must contain between {min} and {max} characters'
5589
5592
  betweenValues: '"{key}" must be between {min} and {max}'
5590
5593
  noSchema: No schema found to validate
@@ -7168,6 +7171,7 @@ resourceQuota:
7168
7171
  resourceType: Resource Type
7169
7172
  helpText: Configure how much of the resources the namespace as a whole can consume.
7170
7173
  helpTextDetail: The amount of resources the namespace as a whole can consume.
7174
+ helpTextHarvester: VMs need to reserve additional memory overhead.
7171
7175
  configMaps: Config Maps
7172
7176
  limitsCpu: CPU Limit
7173
7177
  limitsMemory: Memory Limit
@@ -7319,12 +7323,89 @@ manager:
7319
7323
  label: Node Templates
7320
7324
 
7321
7325
  auth:
7326
+ roleTemplate: Role Templates
7322
7327
  config:
7323
7328
  label: Auth Provider
7324
7329
  vncConsole:
7325
7330
  error:
7326
7331
  message: Web VNC console connection is disconnected
7327
7332
 
7333
+ gitPicker:
7334
+ github:
7335
+ label: GitHub
7336
+ tableHeaders:
7337
+ choose:
7338
+ label: Select
7339
+ sha:
7340
+ label: SHA
7341
+ author:
7342
+ label: Author
7343
+ unknown: Unknown
7344
+ message:
7345
+ label: Message
7346
+ date:
7347
+ label: Date
7348
+ username:
7349
+ label: Username / Organization
7350
+ inputLabel: Username / Organization
7351
+ tooltip: Username / Organization of the Git Repository
7352
+ branch:
7353
+ label: Branch
7354
+ inputLabel: Branch
7355
+ tooltip: Branch to deploy
7356
+ repo:
7357
+ label: Repository
7358
+ inputLabel: Repository
7359
+ tooltip: Branch to deploy from
7360
+ commits:
7361
+ label: Commits
7362
+ tooltip: Commits to deploy from
7363
+ commit:
7364
+ label: Commit
7365
+ inputLabel: Commit
7366
+ commitMessage:
7367
+ label: Commit Message
7368
+ errors:
7369
+ noAccount: No GitHub account or Organization found. Please review your query and try again.
7370
+ noBranch: No branch found. Please review your query and try again."
7371
+ gitlab:
7372
+ label: GitLab
7373
+ tableHeaders:
7374
+ choose:
7375
+ label: Select
7376
+ sha:
7377
+ label: SHA
7378
+ author:
7379
+ label: Author
7380
+ unknown: Unknown
7381
+ message:
7382
+ label: Message
7383
+ date:
7384
+ label: Date
7385
+ username:
7386
+ label: Username / Organization
7387
+ inputLabel: Username / Organization
7388
+ tooltip: Username / Organization of the Git Repository
7389
+ branch:
7390
+ label: Branch
7391
+ inputLabel: Branch
7392
+ tooltip: Branch to deploy
7393
+ repo:
7394
+ label: Repository
7395
+ inputLabel: Repository
7396
+ tooltip: Branch to deploy from
7397
+ commits:
7398
+ label: Commits
7399
+ tooltip: Commits to deploy from
7400
+ commit:
7401
+ label: Commit
7402
+ inputLabel: Commit
7403
+ commitMessage:
7404
+ label: Commit Message
7405
+ errors:
7406
+ noAccount: No GitLab account or Organization found. Please review your query and try again.
7407
+ noBranch: No branch found. Please review your query and try again."
7408
+
7328
7409
  networkAttachmentDefinition:
7329
7410
  tabs:
7330
7411
  config: Config
@@ -117,6 +117,7 @@ locale:
117
117
  none: (None)
118
118
 
119
119
  nav:
120
+ harvesterDashboard: Harvester 仪表板
120
121
  backToRancher: Cluster Manager
121
122
  clusterTools: 集群工具
122
123
  kubeconfig:
@@ -179,6 +180,7 @@ nav:
179
180
  multiCluster: 全局应用
180
181
  legacy: 旧版应用
181
182
  configuration: 配置
183
+ hci: HCI
182
184
  search:
183
185
  placeholder: 输入关键词,搜索集群
184
186
  noResults: 没有匹配的集群
@@ -1282,9 +1284,6 @@ cluster:
1282
1284
  label: KubeconfigContent
1283
1285
  placeholder: '命名空间/名称'
1284
1286
  cluster: 导入的 Harvester 集群
1285
- affinity:
1286
- namespaces:
1287
- placeholder: 例如:default,system,base
1288
1287
  installGuestAgent: 安装访客代理
1289
1288
  description:
1290
1289
  label: 集群描述
@@ -4002,12 +4001,14 @@ plugins:
4002
4001
  builtin: 内置角色
4003
4002
  experimental: 实验功能
4004
4003
  third-party: 第三方
4004
+ image: 镜像
4005
4005
  installing: 正在安装...
4006
4006
  uninstalling: 正在卸载...
4007
4007
  descriptions:
4008
4008
  experimental: 这是实验性扩展
4009
4009
  third-party: 此扩展由第三方提供
4010
4010
  built-in: 这是内置扩展
4011
+ image: 已手动加载此扩展镜像
4011
4012
  error:
4012
4013
  title: 加载扩展时出错
4013
4014
  message: 无法加载扩展代码
@@ -4037,12 +4038,53 @@ plugins:
4037
4038
  available: 没有可用的扩展
4038
4039
  installed: 没有已安装的扩展
4039
4040
  updates: 没有可用于已安装扩展的更新
4041
+ images: 未安装扩展镜像
4040
4042
  loadError: 加载此扩展的代码时出错
4041
4043
  helmError: "通过 Helm 安装扩展时出错"
4042
4044
  manageRepos: 管理仓库
4045
+ manageCharts: 管理扩展 Chart
4046
+ manageCatalog:
4047
+ label: 管理扩展商店
4048
+ title: 扩展
4049
+ subtitle: 应用商店
4050
+ imageLoad:
4051
+ load: 导入扩展商店
4052
+ prompt: 扩展商店包含了打包在镜像中的扩展资产,导入将获取该镜像,并托管一个 Helm 仓库来作为自定义构建扩展的商店。
4053
+ fields:
4054
+ image:
4055
+ label: 商店镜像参考
4056
+ placeholder: "例如:hub.docker.io/example-org/my-image:latest"
4057
+ secrets:
4058
+ banner: "如果托管目录镜像的仓库需要拉取 Secret,则必须在以下命名空间中创建它们:<pre>cattle-ui-plugin-system</pre>"
4059
+ banner: 这将创建 Deployment、Service 和 Helm 仓库来服务扩展 Chart。
4060
+ imageVersion:
4061
+ title: 找不到镜像版本
4062
+ message: 无法通过 {image} 确定镜像版本,默认为 latest
4063
+ error:
4064
+ exists:
4065
+ deployment:
4066
+ title: 部署冲突
4067
+ message: 使用 {image} 镜像的容器已存在
4068
+ service:
4069
+ title: Service 冲突
4070
+ message: 名称为 {svc} 的 Service 已存在
4071
+ repo:
4072
+ title: Helm 仓库冲突
4073
+ message: 名称为 {repo} 的仓库已存在
4074
+ success:
4075
+ title: "导入的扩展商店来自:{name}"
4076
+ message: 已成功导入扩展商店镜像
4077
+ headers:
4078
+ image:
4079
+ name: 镜像
4080
+ label: Deployment 镜像
4081
+ cacheState:
4082
+ name: cacheState
4083
+ label: 缓存状态
4043
4084
  tabs:
4044
4085
  all: 全部
4045
4086
  available: 可用
4087
+ images: 镜像
4046
4088
  installed: 已安装
4047
4089
  updates: 更新
4048
4090
  title: 扩展
@@ -4065,6 +4107,7 @@ plugins:
4065
4107
  label: 卸载
4066
4108
  title: "卸载扩展 {name}"
4067
4109
  prompt: "确定要卸载此扩展吗?"
4110
+ custom: "确定要卸载此扩展镜像吗?此镜像提供的扩展也将被删除。"
4068
4111
  upgradeAvailable: 此扩展有可用的版本更新
4069
4112
  reload: 扩展已更改 - 需要重新加载
4070
4113
  safeMode:
@@ -4599,8 +4642,8 @@ resourceList:
4599
4642
  create: 创建
4600
4643
  createFromYaml: 使用 YAML 文件创建
4601
4644
  createResource: "创建 {resourceName}"
4602
- nsFiltering: "{resource} 太多。<br>请通过选择上面的命名空间进行过滤。"
4603
- nsFilterToolTip: "资源太多,过滤仅限于单一 {mode}。"
4645
+ nsFiltering: "请使用上面的过滤器选择一个或多个命名空间或项目。"
4646
+ nsFilterToolTip: "仅限于过滤项目和命名空间"
4604
4647
  resourceLoadingIndicator:
4605
4648
  loading: 正在加载
4606
4649
 
@@ -4811,20 +4854,13 @@ servicesPage:
4811
4854
  title: 附加配置
4812
4855
  ipam:
4813
4856
  label: IPAM
4814
- healthCheckPort:
4815
- label: 健康检查端口
4816
- healthCheckSuccessThreshold:
4817
- label: 健康检查成功阙值
4818
- description: 如果探针连续检测到某个地址的成功次数达到成功阈值,后端服务器就可以开始转发流量。
4819
- healthCheckFailureThreshold:
4820
- label: 健康检查失败阈值
4821
- description: 如果健康检查失败的数量达到失败阈值,后端服务器将停止转发流量。
4822
- healthCheckPeriod:
4823
- label: 健康检查周期
4824
- healthCheckTimeout:
4825
- label: 健康检查超时
4826
- healthCheckEnabled:
4827
- label: 健康检查
4857
+ useShareIP:
4858
+ label: 使用共享 IP
4859
+ useIpam:
4860
+ label: 使用 IPAM
4861
+ shareIP:
4862
+ label: 共享 IP LB
4863
+
4828
4864
  ips:
4829
4865
  define: 服务端口
4830
4866
  clusterIpHelpText: 集群 IP 地址必须在为 API server 配置的 CIDR 范围内。
@@ -6035,7 +6071,7 @@ workload:
6035
6071
  noExecute: 不执行
6036
6072
  noSchedule: "不调度"
6037
6073
  preferNoSchedule: 倾向于不调度
6038
- labelKey: 标签键
6074
+ labelKey:
6039
6075
  operator: 运算符
6040
6076
  operatorOptions:
6041
6077
  equal: =
@@ -6373,6 +6409,11 @@ typeLabel:
6373
6409
  one { 集群成员 }
6374
6410
  other { 集群成员 }
6375
6411
  }
6412
+ projectroletemplatebinding: |-
6413
+ {count, plural,
6414
+ one { 项目成员 }
6415
+ other { 项目成员 }
6416
+ }
6376
6417
  management.cattle.io.feature: |-
6377
6418
  {count, plural,
6378
6419
  one { 功能开关 }
@@ -7012,6 +7053,7 @@ performance:
7012
7053
  启用后,资源会更快出现,但可能需要更长的时间来加载整个资源集。此设置仅适用于来自 Kubernetes API 的资源
7013
7054
  checkboxLabel: 启用增量加载
7014
7055
  inputLabel: 资源阈值
7056
+ incompatibleDescription: "增量加载与命名空间/项目过滤不兼容,无法同时启用。"
7015
7057
  manualRefresh:
7016
7058
  label: 手动刷新
7017
7059
  setting: 你可以配置一个阈值,高于该阈值时则启用手动刷新。
@@ -7020,6 +7062,7 @@ performance:
7020
7062
  启用后,列表数据不会自动更新,用户必须手动刷新列表视图。此设置仅适用于来自 Kubernetes API 的资源
7021
7063
  checkboxLabel: 启用列表数据的手动刷新
7022
7064
  inputLabel: 资源阈值
7065
+ incompatibleDescription: "手动刷新与命名空间/项目过滤不兼容,无法同时启用。"
7023
7066
  websocketNotification:
7024
7067
  label: WebSocket 通知
7025
7068
  description: |-
@@ -7047,12 +7090,10 @@ performance:
7047
7090
  description: 资源必须超过此数量才能考虑进行垃圾回收。
7048
7091
  inputLabel: 资源数量
7049
7092
  nsFiltering:
7050
- label: 命名空间过滤
7051
- description: 当列表无法显示太多资源时,用户需要选择一个命名空间并仅提取该命名空间中的资源。
7052
- checkboxLabel: 启用命名空间过滤
7053
- count:
7054
- inputLabel: 资源阈值
7055
- description: 需要按命名空间过滤的阈值
7093
+ label: 要求命名空间/项目过滤
7094
+ description: 用户需要选择命名空间和/或项目。这将限制查看列表时获取的资源数量,有助于在具有大量资源的系统中提高 UI 的响应速度。
7095
+ checkboxLabel: 启用要求命名空间/项目过滤
7096
+ incompatibleDescription: "\"要求命名空间/项目过滤\"与手动刷新和增量加载不兼容,无法同时启用。"
7056
7097
  advancedWorker:
7057
7098
  label: Websocket Web Worker
7058
7099
  description: 推送到 UI 的资源更新来自 WebSocket,并在 UI 线程中处理。启用此选项可在单独的线程中处理 Web Worker 中的集群 WebSocket 更新。这有助于提高 UI 在资源经常变化的系统中的响应能力。
@@ -7147,6 +7188,7 @@ resourceQuota:
7147
7188
  resourceType: 资源类型
7148
7189
  helpText: 配置整个命名空间可用的资源量。
7149
7190
  helpTextDetail: 整个命名空间可以使用的资源量。
7191
+ helpTextHarvester: VM 需要预留额外的内存。
7150
7192
  configMaps: ConfigMaps
7151
7193
  limitsCpu: CPU 限制
7152
7194
  limitsMemory: 内存限制
@@ -25,13 +25,13 @@ export default {
25
25
  ...mapGetters(['currentCluster']),
26
26
  crdValues: {
27
27
  get() {
28
- const crdInfo = this.autoInstallInfo.find(info => info.chart.name.includes('crd'));
28
+ const crdInfo = this.autoInstallInfo.find((info) => info.chart.name.includes('crd'));
29
29
 
30
30
  // values are defaults from the chart; allValues are defaults + anything set on previous install if this is an update/upgrade
31
31
  return crdInfo ? crdInfo.allValues : null;
32
32
  },
33
33
  set(values) {
34
- const crdInfo = this.autoInstallInfo.find(info => info.chart.name.includes('crd'));
34
+ const crdInfo = this.autoInstallInfo.find((info) => info.chart.name.includes('crd'));
35
35
 
36
36
  this.$set(crdInfo, 'allValues', values);
37
37
  }
@@ -47,9 +47,9 @@ export default {
47
47
 
48
48
  return secrets
49
49
  .filter(
50
- sec => sec.metadata.namespace === DEFAULT_MONITORING_NAMESPACE
50
+ (sec) => sec.metadata.namespace === DEFAULT_MONITORING_NAMESPACE
51
51
  )
52
- .map(sec => ({ label: sec.metadata.name, value: sec.metadata.name }));
52
+ .map((sec) => ({ label: sec.metadata.name, value: sec.metadata.name }));
53
53
  },
54
54
 
55
55
  canUseExistingSecret() {
@@ -63,7 +63,7 @@ export default {
63
63
 
64
64
  existingSecret() {
65
65
  return this.secrets.find(
66
- sec => sec?.metadata?.name ===
66
+ (sec) => sec?.metadata?.name ===
67
67
  'alertmanager-rancher-monitoring-alertmanager' &&
68
68
  sec?.metadata?.namespace === DEFAULT_MONITORING_NAMESPACE
69
69
  );
@@ -62,7 +62,7 @@ export default {
62
62
  });
63
63
 
64
64
  await Promise.all(
65
- Object.values(WORKLOAD_TYPES).map(type => this.$store.dispatch('cluster/findAll', { type })
65
+ Object.values(WORKLOAD_TYPES).map((type) => this.$store.dispatch('cluster/findAll', { type })
66
66
  )
67
67
  );
68
68
 
@@ -113,7 +113,7 @@ export default {
113
113
  return this.currentCluster.status.provider.toLowerCase();
114
114
  },
115
115
  workloads() {
116
- return Object.values(WORKLOAD_TYPES).flatMap(type => this.$store.getters['cluster/all'](type)
116
+ return Object.values(WORKLOAD_TYPES).flatMap((type) => this.$store.getters['cluster/all'](type)
117
117
  );
118
118
  },
119
119
  },
@@ -88,7 +88,7 @@ export default {
88
88
  workloads = workloads.filter((workload) => {
89
89
  if (
90
90
  !isEmpty(workload?.spec?.template?.spec?.containers) &&
91
- (workload.spec.template.spec.containers.find(c => c.image.includes('quay.io/coreos/prometheus-operator') ||
91
+ (workload.spec.template.spec.containers.find((c) => c.image.includes('quay.io/coreos/prometheus-operator') ||
92
92
  c.image.includes('rancher/coreos-prometheus-operator'))
93
93
  )
94
94
  ) {
@@ -67,11 +67,11 @@ export default {
67
67
 
68
68
  computed: {
69
69
  defaultStorageClass() {
70
- return this.storageClasses.filter(sc => sc.metadata.annotations[STORAGE.DEFAULT_STORAGE_CLASS] && sc.metadata.annotations[STORAGE.DEFAULT_STORAGE_CLASS] !== 'false' )[0] || '';
70
+ return this.storageClasses.filter((sc) => sc.metadata.annotations[STORAGE.DEFAULT_STORAGE_CLASS] && sc.metadata.annotations[STORAGE.DEFAULT_STORAGE_CLASS] !== 'false' )[0] || '';
71
71
  },
72
72
 
73
73
  availablePVs() {
74
- return this.persistentVolumes.filter(pv => pv.status.phase.toLowerCase() !== 'bound');
74
+ return this.persistentVolumes.filter((pv) => pv.status.phase.toLowerCase() !== 'bound');
75
75
  },
76
76
 
77
77
  radioOptions() {
@@ -33,7 +33,7 @@ export default {
33
33
  for ( const k of keyOptions ) {
34
34
  const sk = simplify(k);
35
35
 
36
- if ( normanSchema || likelyFields.includes(sk) || iffyFields.includes(sk) ) {
36
+ if ( normanSchema?.resourceFields || likelyFields.includes(sk) || iffyFields.includes(sk) ) {
37
37
  keys.push(k);
38
38
  }
39
39
  }
@@ -26,7 +26,7 @@ export default {
26
26
 
27
27
  computed: {
28
28
  clusterOptions() {
29
- return this.clusters.filter(c => c.status?.provider === VIRTUAL_HARVESTER_PROVIDER).map( (cluster) => {
29
+ return this.clusters.filter((c) => c.status?.provider === VIRTUAL_HARVESTER_PROVIDER).map( (cluster) => {
30
30
  return {
31
31
  value: cluster.id,
32
32
  label: cluster.nameDisplay
@@ -45,7 +45,7 @@ export default {
45
45
  set(this.value, 'harvestercredentialConfig.clusterId', neu);
46
46
  }
47
47
 
48
- const currentCluster = this.$store.getters['management/all'](MANAGEMENT.CLUSTER).find(x => x.id === neu);
48
+ const currentCluster = this.$store.getters['management/all'](MANAGEMENT.CLUSTER).find((x) => x.id === neu);
49
49
 
50
50
  this.$nuxt.$loading.start();
51
51
 
@@ -34,7 +34,7 @@ export default {
34
34
  ...mapGetters(['workspace']),
35
35
 
36
36
  workspaceOptions() {
37
- const out = this.allWorkspaces.map(x => x.metadata?.name).filter(x => !!x && x !== 'fleet-local');
37
+ const out = this.allWorkspaces.map((x) => x.metadata?.name).filter((x) => !!x && x !== 'fleet-local');
38
38
 
39
39
  return out;
40
40
  },
@@ -17,7 +17,7 @@ export default {
17
17
  // The notification will always come from the csp-adapter component & there will be no more than one
18
18
  // Backend will remove the notification when its no longer relevant
19
19
  awsNotification() {
20
- return this.notifications.find(notification => notification.componentName === 'csp-adapter');
20
+ return this.notifications.find((notification) => notification.componentName === 'csp-adapter');
21
21
  }
22
22
  }
23
23
  };
@@ -16,6 +16,13 @@ export default {
16
16
  >
17
17
  <i class="icon icon-chevron-left" /> {{ t('generic.back') }}
18
18
  </nuxt-link>
19
+ <nuxt-link
20
+ v-else
21
+ to="/"
22
+ class="back-link"
23
+ >
24
+ <i class="icon icon-chevron-left" /> {{ t('nav.home') }}
25
+ </nuxt-link>
19
26
  </template>
20
27
 
21
28
  <style lang="scss" scoped>
@@ -53,6 +53,7 @@ export default {
53
53
  <div
54
54
  v-if="pref"
55
55
  class="close-button"
56
+ data-testid="graphic-banner-close"
56
57
  @click="hide()"
57
58
  >
58
59
  <i class="icon icon-close" />
@@ -21,19 +21,19 @@ export default {
21
21
  ...mapGetters({ theme: 'prefs/theme' }),
22
22
 
23
23
  brand() {
24
- const setting = this.managementSettings.filter(setting => setting.id === SETTING.BRAND)[0] || {};
24
+ const setting = this.managementSettings.filter((setting) => setting.id === SETTING.BRAND)[0] || {};
25
25
 
26
26
  return setting.value;
27
27
  },
28
28
 
29
29
  uiLogoLight() {
30
- const setting = this.managementSettings.filter(setting => setting.id === SETTING.LOGO_LIGHT)[0] || {};
30
+ const setting = this.managementSettings.filter((setting) => setting.id === SETTING.LOGO_LIGHT)[0] || {};
31
31
 
32
32
  return setting.value;
33
33
  },
34
34
 
35
35
  uiLogoDark() {
36
- const setting = this.managementSettings.filter(setting => setting.id === SETTING.LOGO_DARK)[0] || {};
36
+ const setting = this.managementSettings.filter((setting) => setting.id === SETTING.LOGO_DARK)[0] || {};
37
37
 
38
38
  return setting.value;
39
39
  },
@@ -33,7 +33,7 @@ export default {
33
33
  {{ cluster.badge.iconText }}
34
34
  </div>
35
35
  <!-- eslint-disable -->
36
- <svg v-else-if="cluster.isLocal" class="cluster-local-logo" version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 100 100" style="enable-background:new 0 0 100 100;" xml:space="preserve">
36
+ <svg v-else-if="cluster.isLocal && !cluster.isHarvester" class="cluster-local-logo" version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 100 100" style="enable-background:new 0 0 100 100;" xml:space="preserve">
37
37
  <g>
38
38
  <g>
39
39
  <path class="rancher-icon-fill" d="M26.0862026,44.4953918H8.6165142c-5.5818157,0-9.3979139-4.6252708-8.4802637-10.1311035l2.858391-17.210701
@@ -28,7 +28,7 @@ export default {
28
28
  mixins: [Closeable],
29
29
 
30
30
  async fetch() {
31
- this.links = await fetchLinks(this.$store, this.hasSupport, this.isSupportPage, str => this.t(str));
31
+ this.links = await fetchLinks(this.$store, this.hasSupport, this.isSupportPage, (str) => this.t(str));
32
32
  },
33
33
 
34
34
  data() {
@@ -72,7 +72,7 @@ export default {
72
72
  }
73
73
 
74
74
  if (this.links.defaults) {
75
- all.push(...this.links.defaults.filter(link => link.enabled));
75
+ all.push(...this.links.defaults.filter((link) => link.enabled));
76
76
  }
77
77
 
78
78
  return all;
@@ -41,7 +41,7 @@ export default {
41
41
  */
42
42
  numberFormatter: {
43
43
  type: Function,
44
- default: value => Number.isInteger(value) ? value : value.toFixed(2)
44
+ default: (value) => Number.isInteger(value) ? value : value.toFixed(2)
45
45
  },
46
46
 
47
47
  /**
@@ -106,7 +106,10 @@ export default {
106
106
  {{ resourceName }}
107
107
  </h4>
108
108
  <span v-else>{{ t('node.detail.glance.consumptionGauge.used') }}</span>
109
- <span>{{ t('node.detail.glance.consumptionGauge.amount', amountTemplateValues) }} <span class="ml-10 percentage">/&nbsp;{{ formattedPercentage }}</span></span>
109
+ <span class="numbers-stats">
110
+ {{ t('node.detail.glance.consumptionGauge.amount', amountTemplateValues) }}
111
+ <span class="percentage"><i>/&nbsp;</i>{{ formattedPercentage }}</span>
112
+ </span>
110
113
  </slot>
111
114
  </div>
112
115
  <div class="mt-10">
@@ -125,8 +128,20 @@ export default {
125
128
  flex-direction: row;
126
129
  justify-content: space-between;
127
130
 
131
+ &-stats {
132
+ display: flex;
133
+ flex-direction: row;
134
+ align-items: center;
135
+ gap: 10px;
136
+ align-self: baseline;
137
+
138
+ }
139
+
128
140
  .percentage {
129
141
  font-weight: bold;
142
+ i {
143
+ margin-right: 10px;
144
+ }
130
145
  }
131
146
  }
132
147
  }
@@ -184,7 +184,7 @@ export default {
184
184
  const { validationPassed, showAsForm, steps } = this;
185
185
 
186
186
  if (showAsForm && steps?.length) {
187
- return validationPassed && this.steps.every(step => step.ready);
187
+ return validationPassed && this.steps.every((step) => step.ready);
188
188
  }
189
189
 
190
190
  // Don't apply validation rules if the form is not shown.
@@ -288,7 +288,7 @@ export default {
288
288
  closeError(index) {
289
289
  const errors = this.errors.filter((_, i) => i !== index);
290
290
 
291
- this.$emit('error', errors);
291
+ this.$emit('error', errors, this.errors[index]);
292
292
  },
293
293
 
294
294
  emitOrRoute() {
@@ -412,6 +412,7 @@ export default {
412
412
  </p>
413
413
  <form
414
414
  :is="(isView? 'div' : 'form')"
415
+ data-testid="cru-form"
415
416
  class="create-resource-container cru__form"
416
417
  @submit.prevent
417
418
  @keydown.enter="onPressEnter($event)"
@@ -26,6 +26,12 @@ export default {
26
26
  type: Boolean,
27
27
  default: true,
28
28
  },
29
+ // change the grafana url prefix for local clusters in certain monitoring versions
30
+ // project monitoring (projectHelmCharts) supply a grafana url that never needs to be modified in this way
31
+ modifyPrefix: {
32
+ type: Boolean,
33
+ default: true
34
+ }
29
35
  },
30
36
  data() {
31
37
  return {
@@ -74,6 +80,7 @@ export default {
74
80
  :range="graphOptions.range"
75
81
  :url="detailUrl"
76
82
  :vars="vars"
83
+ :modify-prefix="modifyPrefix"
77
84
  />
78
85
  <GrafanaDashboard
79
86
  v-else
@@ -85,6 +92,7 @@ export default {
85
92
  :range="graphOptions.range"
86
93
  :url="summaryUrl"
87
94
  :vars="vars"
95
+ :modify-prefix="modifyPrefix"
88
96
  />
89
97
  </div>
90
98
  </div>
@@ -72,7 +72,7 @@ export default {
72
72
  const items = [
73
73
  ...(this.moreDetails || []),
74
74
  ...(this.value?.details || []),
75
- ].filter(x => x.separator || (!!`${ x.content }` && x.content !== undefined && x.content !== null));
75
+ ].filter((x) => x.separator || (!!`${ x.content }` && x.content !== undefined && x.content !== null));
76
76
 
77
77
  const groups = [];
78
78
  let currentGroup = [];