@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
package/store/wm.js CHANGED
@@ -12,14 +12,15 @@ export const state = function() {
12
12
  };
13
13
 
14
14
  export const getters = {
15
- byId: state => (id) => {
16
- return state.tabs.find(x => x.id === id);
17
- }
15
+ byId: (state) => (id) => {
16
+ return state.tabs.find((x) => x.id === id);
17
+ },
18
+ allTabs: (state) => state.tabs,
18
19
  };
19
20
 
20
21
  export const mutations = {
21
22
  addTab(state, tab) {
22
- const existing = state.tabs.find(x => x.id === tab.id);
23
+ const existing = state.tabs.find((x) => x.id === tab.id);
23
24
 
24
25
  if ( !existing ) {
25
26
  addObject(state.tabs, tab);
@@ -33,4 +33,14 @@
33
33
  "./node_modules/@types"
34
34
  ],
35
35
  },
36
+ "exclude": [
37
+ "node_modules",
38
+ ".nuxt",
39
+ "dist",
40
+ "dist-pkg",
41
+ "shell/creators",
42
+ "shell/scripts",
43
+ "script/standalone",
44
+ "docusaurus"
45
+ ]
36
46
  }
package/tsconfig.json CHANGED
@@ -4,20 +4,13 @@
4
4
  "types": [
5
5
  "@types/node",
6
6
  "@types/jest",
7
+ "@nuxt/types",
7
8
  ]
8
9
  },
9
10
  "exclude": [
10
- "node_modules",
11
- ".nuxt",
12
- "dist",
13
- "dist-pkg",
14
- "cypress",
15
- "shell/creators",
16
- "shell/scripts",
17
11
  "cypress",
18
12
  "./cypress.config.ts",
19
- "docusaurus",
20
- "script/standalone",
13
+ "**/*.test.ts",
21
14
  "**/*.spec.ts"
22
15
  ]
23
16
  }
@@ -2356,6 +2356,7 @@ export const RKE2: any;
2356
2356
  export const UNSUPPORTED_STORAGE_DRIVERS: any;
2357
2357
  export const FLEET: any;
2358
2358
  export const HARVESTER: any;
2359
+ export const HARVESTER_CONTAINER: any;
2359
2360
  export namespace getters {
2360
2361
  function get(state: any, getters: any, rootState: any, rootGetters: any): (name: any) => any;
2361
2362
  }
@@ -2426,7 +2427,7 @@ export default _default;
2426
2427
  // @shell/utils/cluster
2427
2428
 
2428
2429
  declare module '@shell/utils/cluster' {
2429
- export function filterOnlyKubernetesClusters(mgmtClusters: any): any;
2430
+ export function filterOnlyKubernetesClusters(mgmtClusters: any, store: any): any;
2430
2431
  export function isHarvesterCluster(mgmtCluster: any): boolean;
2431
2432
  export function isHarvesterSatisfiesVersion(version?: string): any;
2432
2433
  export function filterHiddenLocalCluster(mgmtClusters: any, store: any): any;
@@ -2460,6 +2461,7 @@ export function colorToRgb(color: any): {
2460
2461
  g: number;
2461
2462
  b: number;
2462
2463
  };
2464
+ export function normalizeHex(hex: any): any;
2463
2465
  }
2464
2466
 
2465
2467
  // @shell/utils/computed
@@ -2638,7 +2640,7 @@ export function setFavIcon(store: any): void;
2638
2640
 
2639
2641
  declare module '@shell/utils/grafana' {
2640
2642
  export function getClusterPrefix(monitoringVersion: any, clusterId: any): string;
2641
- export function computeDashboardUrl(monitoringVersion: any, embedUrl: any, clusterId: any, params: any): string;
2643
+ export function computeDashboardUrl(monitoringVersion: any, embedUrl: any, clusterId: any, params: any, modifyPrefix?: boolean): any;
2642
2644
  export function dashboardExists(monitoringVersion: any, store: any, clusterId: any, embedUrl: any, storeName?: string): Promise<boolean>;
2643
2645
  export function allDashboardsExist(store: any, clusterId: any, embeddedUrls: any, storeName?: string): Promise<boolean>;
2644
2646
  export function queryGrafana(monitoringVersion: any, dispatch: any, clusterId: any, query: any, range: any, step: any): any;
@@ -3011,6 +3013,7 @@ export default class Socket extends Socket_base {
3011
3013
  disconnectCallBacks: any[];
3012
3014
  disconnectedAt: number;
3013
3015
  closingId: number;
3016
+ autoReconnectUrl: any;
3014
3017
  setUrl(url: any): void;
3015
3018
  connect(metadata?: {}): void;
3016
3019
  send(data: any): boolean;
@@ -3020,6 +3023,10 @@ export default class Socket extends Socket_base {
3020
3023
  getId(): any;
3021
3024
  isConnected(): boolean;
3022
3025
  setAutoReconnect(autoReconnect: any): void;
3026
+ /**
3027
+ * Supply an async fn that will provide a new url to reconnect to
3028
+ */
3029
+ setAutoReconnectUrl(autoReconnectUrl: any): void;
3023
3030
  _close(): void;
3024
3031
  _opened(): void;
3025
3032
  _onmessage(event: any): void;
@@ -3313,6 +3320,7 @@ export function seenReleaseNotes(store: any): boolean;
3313
3320
  export function markSeenReleaseNotes(store: any): Promise<void>;
3314
3321
  export function readReleaseNotes(store: any): boolean;
3315
3322
  export function markReadReleaseNotes(store: any): Promise<void>;
3323
+ export function generateSupportLink(version: any): string;
3316
3324
  }
3317
3325
 
3318
3326
  // @shell/utils/width
@@ -0,0 +1,28 @@
1
+ import { generateSupportLink } from '@shell/utils/version';
2
+
3
+ describe('fx: generateSupportLink', () => {
4
+ it('should generate support link corresponding to the installed Rancher version', () => {
5
+ const version = 'v2.7.5';
6
+ const expectation = 'https://www.suse.com/suse-rancher/support-matrix/all-supported-versions/rancher-v2-7-5';
7
+
8
+ const result = generateSupportLink(version);
9
+
10
+ expect(result).toStrictEqual(expectation);
11
+ });
12
+
13
+ const latestVersionSupportURL = 'https://rancher.com/support-maintenance-terms';
14
+ const testCases = [
15
+ ['v2.7-0bcf068e1237acafd4aca01385c7c6b432e22fd7-head', latestVersionSupportURL],
16
+ ['v2.7.5-rc4', latestVersionSupportURL],
17
+ [undefined, latestVersionSupportURL],
18
+ ];
19
+
20
+ it.each(testCases)(
21
+ 'should generate support link corresponding to the latest Rancher version when version is unknown or for dev build',
22
+ (version, expected) => {
23
+ const result = generateSupportLink(version);
24
+
25
+ expect(result).toBe(expected);
26
+ }
27
+ );
28
+ });
@@ -71,7 +71,7 @@ export async function updateConfig(dispatch, path, type, updateFn) {
71
71
  set(config, path, newValue);
72
72
 
73
73
  const routes = config.route.routes;
74
- const rootIndex = routes.findIndex(route => route.name === ROOT_NAME);
74
+ const rootIndex = routes.findIndex((route) => route.name === ROOT_NAME);
75
75
 
76
76
  routes.forEach((route) => {
77
77
  if (route.name) {
@@ -97,8 +97,8 @@ export async function getAllReceivers(dispatch) {
97
97
  try {
98
98
  const { config, secret } = await loadConfig(dispatch);
99
99
  const receivers = config.receivers || [];
100
- const receiversWithName = receivers.filter(receiver => receiver.name);
101
- const mapped = receiversWithName.map(receiver => dispatch('cluster/create', {
100
+ const receiversWithName = receivers.filter((receiver) => receiver.name);
101
+ const mapped = receiversWithName.map((receiver) => dispatch('cluster/create', {
102
102
  id: receiver.name,
103
103
  spec: receiver,
104
104
  type: MONITORING.SPOOFED.RECEIVER,
@@ -123,7 +123,7 @@ export async function getAllRoutes(dispatch) {
123
123
 
124
124
  routes.push(config.route);
125
125
 
126
- const mapped = routes.map(route => dispatch('cluster/create', {
126
+ const mapped = routes.map((route) => dispatch('cluster/create', {
127
127
  id: route.name,
128
128
  spec: route,
129
129
  type: MONITORING.SPOOFED.ROUTE,
package/utils/array.ts CHANGED
@@ -160,7 +160,7 @@ export function findStringIndex(items: string[], item: string, trim = true): num
160
160
  }
161
161
 
162
162
  export function hasDuplicatedStrings(items: string[], caseSensitive = true): boolean {
163
- const normalizedItems = items.map(i => (caseSensitive ? i : i.toLowerCase()).trim());
163
+ const normalizedItems = items.map((i) => (caseSensitive ? i : i.toLowerCase()).trim());
164
164
 
165
165
  for (let i = 0; i < items.length; i++) {
166
166
  const index = findStringIndex(
@@ -188,14 +188,14 @@ export function uniq<T>(ary: T[]): T[] {
188
188
  return out;
189
189
  }
190
190
 
191
- export function concatStrings(a: string[], b: string[]) {
192
- return [...a.map(aa => b.map(bb => aa.concat(bb)))].reduce((acc, arr) => [...arr, ...acc], []);
191
+ export function concatStrings(a: string[], b: string[]): string[] {
192
+ return [...a.map((aa) => b.map((bb) => aa.concat(bb)))].reduce((acc, arr) => [...arr, ...acc], []);
193
193
  }
194
194
 
195
195
  interface KubeResource { metadata: { labels: { [name: string]: string} } } // Migrate to central kube types resource when those are brought in
196
196
  export function getUniqueLabelKeys<T extends KubeResource>(aryResources: T[]): string[] {
197
197
  const uniqueObj = aryResources.reduce((res, r) => {
198
- Object.keys(r.metadata.labels).forEach(l => (res[l] = true));
198
+ Object.keys(r.metadata.labels).forEach((l) => (res[l] = true));
199
199
 
200
200
  return res;
201
201
  }, {} as {[label: string]: boolean});
package/utils/async.ts CHANGED
@@ -1,4 +1,4 @@
1
- export const waitFor = (testFn: Function, msg = '', timeoutMs = 3000000, intervalMs = 500, log = false) => {
1
+ export const waitFor = (testFn: Function, msg = '', timeoutMs = 3000000, intervalMs = 500, log = false): Promise<unknown> => {
2
2
  gatedLog('Starting wait for', msg);
3
3
 
4
4
  return new Promise((resolve, reject) => {
package/utils/auth.js CHANGED
@@ -63,10 +63,10 @@ export function returnTo(opt, vm) {
63
63
  */
64
64
  export const authProvidersInfo = async(store) => {
65
65
  const rows = await store.dispatch(`management/findAll`, { type: MANAGEMENT.AUTH_CONFIG });
66
- const nonLocal = rows.filter(x => x.name !== 'local');
66
+ const nonLocal = rows.filter((x) => x.name !== 'local');
67
67
  // Generic OIDC is returned via API but not supported (and will be removed or fixed in future)
68
- const supportedNonLocal = nonLocal.filter(x => x.id !== 'oidc');
69
- const enabled = nonLocal.filter(x => x.enabled === true );
68
+ const supportedNonLocal = nonLocal.filter((x) => x.id !== 'oidc');
69
+ const enabled = nonLocal.filter((x) => x.enabled === true );
70
70
 
71
71
  const enabledLocation = enabled.length === 1 ? {
72
72
  name: 'c-cluster-auth-config-id',
package/utils/axios.js CHANGED
@@ -23,16 +23,16 @@ const axiosExtra = {
23
23
  this.setHeader('Authorization', value, scopes);
24
24
  },
25
25
  onRequest(fn) {
26
- this.interceptors.request.use(config => fn(config) || config);
26
+ this.interceptors.request.use((config) => fn(config) || config);
27
27
  },
28
28
  onResponse(fn) {
29
- this.interceptors.response.use(response => fn(response) || response);
29
+ this.interceptors.response.use((response) => fn(response) || response);
30
30
  },
31
31
  onRequestError(fn) {
32
- this.interceptors.request.use(undefined, error => fn(error) || Promise.reject(error));
32
+ this.interceptors.request.use(undefined, (error) => fn(error) || Promise.reject(error));
33
33
  },
34
34
  onResponseError(fn) {
35
- this.interceptors.response.use(undefined, error => fn(error) || Promise.reject(error));
35
+ this.interceptors.response.use(undefined, (error) => fn(error) || Promise.reject(error));
36
36
  },
37
37
  onError(fn) {
38
38
  this.onRequestError(fn);
@@ -46,7 +46,7 @@ const axiosExtra = {
46
46
  // Request helpers ($get, $post, ...)
47
47
  for (const method of ['request', 'delete', 'get', 'head', 'options', 'post', 'put', 'patch']) {
48
48
  axiosExtra[`$${ method }`] = function() {
49
- return this[method].apply(this, arguments).then(res => res && res.data);
49
+ return this[method].apply(this, arguments).then((res) => res && res.data);
50
50
  };
51
51
  }
52
52
 
package/utils/cluster.js CHANGED
@@ -4,10 +4,11 @@ import { MANAGEMENT, VIRTUAL_HARVESTER_PROVIDER } from '@shell/config/types';
4
4
  import { SETTING } from '@shell/config/settings';
5
5
 
6
6
  // Filter out any clusters that are not Kubernetes Clusters
7
- // Currently this removes Harvester clusters
8
- export function filterOnlyKubernetesClusters(mgmtClusters) {
7
+ export function filterOnlyKubernetesClusters(mgmtClusters, store) {
8
+ const openHarvesterContainerWorkload = store.getters['features/get']('harvester-baremetal-container-workload');
9
+
9
10
  return mgmtClusters.filter((c) => {
10
- return !c.isHarvester;
11
+ return openHarvesterContainerWorkload ? true : !c.isHarvester;
11
12
  });
12
13
  }
13
14
 
package/utils/color.js CHANGED
@@ -135,3 +135,13 @@ export function colorToRgb(color) {
135
135
  r: 0, g: 0, b: 0
136
136
  };
137
137
  }
138
+
139
+ export function normalizeHex(hex) {
140
+ if (hex.includes('#') && hex.length === 4) {
141
+ return `#${ hex[1] }${ hex[1] }${ hex[2] }${ hex[2] }${ hex[3] }${ hex[3] }`;
142
+ } else if (!hex.includes('#') && hex.length === 3) {
143
+ return `${ hex[0] }${ hex[0] }${ hex[1] }${ hex[1] }${ hex[2] }${ hex[2] }`;
144
+ }
145
+
146
+ return hex;
147
+ }
@@ -174,7 +174,7 @@ export function createYaml(
174
174
  // do not include commented fields if already defined in data
175
175
  removeObjects(commentFields, regularFields);
176
176
 
177
- const regular = regularFields.map(k => stringifyField(k));
177
+ const regular = regularFields.map((k) => stringifyField(k));
178
178
  const comments = commentFields.map((k) => {
179
179
  // Don't add a namespace comment for types that aren't namespaced.
180
180
  if ( path === 'metadata' && k === 'namespace' ) {
@@ -189,7 +189,7 @@ export function createYaml(
189
189
  });
190
190
 
191
191
  const out = [...regular, ...comments]
192
- .filter(x => x !== null)
192
+ .filter((x) => x !== null)
193
193
  .join('\n')
194
194
  .trim();
195
195
 
@@ -359,7 +359,7 @@ export function createYaml(
359
359
  }
360
360
 
361
361
  function comment(lines) {
362
- return (lines || '').split('\n').map(x => `#${ x.replace(/#/g, '') }`).join('\n');
362
+ return (lines || '').split('\n').map((x) => `#${ x.replace(/#/g, '') }`).join('\n');
363
363
  }
364
364
 
365
365
  function indent(lines, depth = 1) {
@@ -460,7 +460,7 @@ export function dumpBlock(data, options = {}) {
460
460
 
461
461
  let out = parsed;
462
462
 
463
- const blockFields = Object.keys(data).filter(k => data[k].includes('\n'));
463
+ const blockFields = Object.keys(data).filter((k) => data[k].includes('\n'));
464
464
 
465
465
  if (blockFields.length) {
466
466
  for (const key of blockFields) {
@@ -34,7 +34,7 @@ export function isEmptyData(data) {
34
34
  */
35
35
  export function convertToBuffer(data) {
36
36
  if (typeof data === 'string') {
37
- // eslint-disable-next-line node/no-deprecated-api, unicorn/no-new-buffer
37
+ // eslint-disable-next-line node/no-deprecated-api
38
38
  data = new Buffer(data, 'utf8');
39
39
  }
40
40
 
@@ -80,7 +80,7 @@ Md5.prototype.digest = function(encoding) {
80
80
  out.setUint32(i * 4, this.state[i], true);
81
81
  }
82
82
 
83
- // eslint-disable-next-line node/no-deprecated-api, unicorn/no-new-buffer
83
+ // eslint-disable-next-line node/no-deprecated-api
84
84
  const buff = new Buffer(out.buffer, out.byteOffset, out.byteLength);
85
85
 
86
86
  return encoding ? buff.toString(encoding) : buff;
@@ -81,7 +81,7 @@ Sha1.prototype.digest = function(encoding) {
81
81
  }
82
82
  // The value in state is little-endian rather than big-endian, so flip
83
83
  // each word into a new Uint8Array
84
- // eslint-disable-next-line node/no-deprecated-api, unicorn/no-new-buffer
84
+ // eslint-disable-next-line node/no-deprecated-api
85
85
  const out = new Buffer(DIGEST_LENGTH);
86
86
  const outView = new DataView(out.buffer);
87
87
 
@@ -162,7 +162,7 @@ Sha256.prototype.digest = function(encoding) {
162
162
  }
163
163
  // The value in state is little-endian rather than big-endian, so flip
164
164
  // each word into a new Uint8Array
165
- // eslint-disable-next-line node/no-deprecated-api, unicorn/no-new-buffer
165
+ // eslint-disable-next-line node/no-deprecated-api
166
166
  const out = new Buffer(DIGEST_LENGTH);
167
167
 
168
168
  for (let i = 0; i < 8; i++) {
@@ -1,4 +1,4 @@
1
- /* eslint-disable node/no-deprecated-api, unicorn/no-new-buffer */
1
+ /* eslint-disable node/no-deprecated-api */
2
2
  import { Buffer } from 'buffer';
3
3
  import Md5 from './browserMd5';
4
4
  import Sha256 from './browserSha256';
@@ -26,7 +26,7 @@ export function base64Encode(string, alphabet = NORMAL) {
26
26
  '/': '_',
27
27
  };
28
28
 
29
- return buf.toString('base64').replace(/[+/]|=+$/g, char => m[char] || '');
29
+ return buf.toString('base64').replace(/[+/]|=+$/g, (char) => m[char] || '');
30
30
  }
31
31
 
32
32
  return buf.toString('base64');
@@ -45,7 +45,7 @@ export function base64DecodeToBuffer(string) {
45
45
  }
46
46
 
47
47
  export function base64Decode(string) {
48
- return !string ? string : base64DecodeToBuffer(string.replace(/[-_]/g, char => char === '-' ? '+' : '/')).toString();
48
+ return !string ? string : base64DecodeToBuffer(string.replace(/[-_]/g, (char) => char === '-' ? '+' : '/')).toString();
49
49
  }
50
50
 
51
51
  export function md5(data, digest, callback) {
package/utils/favicon.js CHANGED
@@ -8,10 +8,9 @@ export function haveSetFavIcon() {
8
8
  }
9
9
 
10
10
  export function setFavIcon(store) {
11
- const app = store.app;
12
11
  const res = store.getters['management/byId'](MANAGEMENT.SETTING, SETTING.FAVICON);
13
12
  const brandSetting = store.getters['management/byId'](MANAGEMENT.SETTING, SETTING.BRAND);
14
- const link = findIconLink(app.head.link);
13
+ const link = findIconLink(document.head.getElementsByTagName('link'));
15
14
 
16
15
  if (link) {
17
16
  let brandImage;
@@ -37,7 +36,7 @@ function findIconLink(links) {
37
36
  for (let i = 0; i < links.length; i++) {
38
37
  const link = links[i];
39
38
 
40
- if (link.rel === 'icon') {
39
+ if (link.rel?.includes('icon')) {
41
40
  return link;
42
41
  }
43
42
  }
@@ -2,7 +2,7 @@ import { GATEKEEPER, SCHEMA } from '@shell/config/types';
2
2
 
3
3
  export async function findAllConstraints(store) {
4
4
  const constraintTypes = await findAllConstraintTypes(store);
5
- const nestedConstraints = constraintTypes.map(ct => store.dispatch('cluster/findAll', { type: ct, opt: { force: true } }));
5
+ const nestedConstraints = constraintTypes.map((ct) => store.dispatch('cluster/findAll', { type: ct, opt: { force: true } }));
6
6
 
7
7
  return (await Promise.all(nestedConstraints)).flat();
8
8
  }
@@ -30,6 +30,6 @@ export function findTemplateType(schemas) {
30
30
 
31
31
  function findConstraintTypes(schemas) {
32
32
  return schemas
33
- .filter(schema => schema?.attributes?.group === 'constraints.gatekeeper.sh')
34
- .map(schema => schema.id);
33
+ .filter((schema) => schema?.attributes?.group === 'constraints.gatekeeper.sh')
34
+ .map((schema) => schema.id);
35
35
  }
package/utils/gc/gc.ts CHANGED
@@ -12,7 +12,7 @@ class GarbageCollect {
12
12
 
13
13
  private cachedGcPrefs: GC_PREFERENCES = GC_DEFAULTS;
14
14
 
15
- private cachedGcPrefsStamp: string = '';
15
+ private cachedGcPrefsStamp = '';
16
16
 
17
17
  private debugLog = (...args: any) => {
18
18
  if (GarbageCollect.ENABLE_DEBUG_LOGGING) {
@@ -60,7 +60,7 @@ class GarbageCollect {
60
60
  /**
61
61
  * Track when a logged in route changes.
62
62
  */
63
- private lastRouteChange: number = 0;
63
+ private lastRouteChange = 0;
64
64
 
65
65
  // ------------- GC Enabled ---------------------
66
66
 
package/utils/git.ts ADDED
@@ -0,0 +1,92 @@
1
+ interface Repo {
2
+ owner: any,
3
+ description: string,
4
+ // eslint-disable-next-line camelcase
5
+ created_at: string,
6
+ // eslint-disable-next-line camelcase
7
+ updated_at: string,
8
+ htmlUrl: string,
9
+ name: string,
10
+ }
11
+
12
+ interface Commit {
13
+ message: string,
14
+ htmlUrl: string,
15
+ sha?: string,
16
+ commitId: string,
17
+ author: object,
18
+ isChecked: false,
19
+ date: string
20
+ }
21
+
22
+ type Utils = Record<string, {
23
+ normalize: {
24
+ repo: (data: object) => Repo,
25
+ commit: (data: object) => Commit
26
+ }
27
+ }>
28
+
29
+ function getShortHash(commit: string) {
30
+ return !!commit ? commit.slice(0, 7) : undefined;
31
+ }
32
+
33
+ export const GitUtils: Utils = {
34
+ github: {
35
+ normalize: {
36
+ repo: (data: any) => ({
37
+ owner: {
38
+ name: data.owner?.login,
39
+ htmlUrl: data.owner?.html_url,
40
+ avatarUrl: data.owner?.avatar_url
41
+ },
42
+ description: data.description,
43
+ created_at: data.created_at,
44
+ updated_at: data.updated_at,
45
+ htmlUrl: data.html_url,
46
+ name: data.name
47
+ }),
48
+ commit: (data: any) => ({
49
+ message: data.commit?.message,
50
+ htmlUrl: data.html_url,
51
+ sha: getShortHash(data.sha),
52
+ commitId: data.sha,
53
+ author: {
54
+ name: data.author?.login,
55
+ avatarUrl: data.author?.avatar_url,
56
+ htmlUrl: data.author?.htmlUrl
57
+ },
58
+ isChecked: false,
59
+ date: data.commit?.committer.date
60
+ }),
61
+ },
62
+ },
63
+ gitlab: {
64
+ normalize: {
65
+ repo: (data: any) => ({
66
+ owner: {
67
+ name: data.namespace.name,
68
+ htmlUrl: data.namespace.web_url,
69
+ avatarUrl: data.namespace.avatar_url
70
+ },
71
+ description: data.description,
72
+ created_at: data.created_at,
73
+ updated_at: data.last_activity_at,
74
+ htmlUrl: data.web_url,
75
+ name: data.name
76
+ }),
77
+ commit: (data: any) => ({
78
+ message: data.message,
79
+ htmlUrl: data.web_url,
80
+ sha: data.short_id,
81
+ commitId: data.id,
82
+ author: {
83
+ name: data.author_name,
84
+ avatarUrl: data.avatar_url,
85
+ htmlUrl: data.web_url
86
+ },
87
+ isChecked: false,
88
+ date: data.committed_date
89
+ }),
90
+ },
91
+ }
92
+ };
package/utils/grafana.js CHANGED
@@ -14,10 +14,10 @@ export function getClusterPrefix(monitoringVersion, clusterId) {
14
14
  return clusterId === 'local' ? '' : `/k8s/clusters/${ clusterId }`;
15
15
  }
16
16
 
17
- export function computeDashboardUrl(monitoringVersion, embedUrl, clusterId, params) {
17
+ export function computeDashboardUrl(monitoringVersion, embedUrl, clusterId, params, modifyPrefix = true) {
18
18
  const url = parseUrl(embedUrl);
19
19
 
20
- let newUrl = `${ getClusterPrefix(monitoringVersion, clusterId) }${ url.path }`;
20
+ let newUrl = modifyPrefix ? `${ getClusterPrefix(monitoringVersion, clusterId) }${ url.path }` : url.path;
21
21
 
22
22
  if (url.query.viewPanel) {
23
23
  newUrl = addParam(newUrl, 'viewPanel', url.query.viewPanel);
@@ -64,9 +64,9 @@ export async function allDashboardsExist(store, clusterId, embeddedUrls, storeNa
64
64
 
65
65
  const monitoringVersion = res?.currentVersion;
66
66
 
67
- const existPromises = embeddedUrls.map(url => dashboardExists(monitoringVersion, store, clusterId, url, storeName));
67
+ const existPromises = embeddedUrls.map((url) => dashboardExists(monitoringVersion, store, clusterId, url, storeName));
68
68
 
69
- return (await Promise.all(existPromises)).every(exists => exists);
69
+ return (await Promise.all(existPromises)).every((exists) => exists);
70
70
  }
71
71
 
72
72
  export function queryGrafana(monitoringVersion, dispatch, clusterId, query, range, step) {
@@ -46,7 +46,7 @@ const CATTLE_MONITORING_NAMESPACE = 'cattle-monitoring-system';
46
46
 
47
47
  export async function haveV1MonitoringWorkloads(store) {
48
48
  const workloadsByType = await Promise.all(
49
- Object.values(WORKLOAD_TYPES).map(type => store.dispatch('cluster/findAll', { type })
49
+ Object.values(WORKLOAD_TYPES).map((type) => store.dispatch('cluster/findAll', { type })
50
50
  )
51
51
  );
52
52
  const workloads = workloadsByType.flat();
@@ -55,7 +55,7 @@ export async function haveV1MonitoringWorkloads(store) {
55
55
  const workload = workloads[i];
56
56
 
57
57
  if (!isEmpty(workload?.spec?.template?.spec?.containers) &&
58
- workload.spec.template.spec.containers.find(c => c.image?.includes('quay.io/coreos/prometheus-operator') ||
58
+ workload.spec.template.spec.containers.find((c) => c.image?.includes('quay.io/coreos/prometheus-operator') ||
59
59
  c.image?.includes('rancher/coreos-prometheus-operator')) &&
60
60
  workload?.metadata?.namespace !== CATTLE_MONITORING_NAMESPACE) {
61
61
  return Promise.resolve(true);
package/utils/nuxt.js CHANGED
@@ -31,7 +31,7 @@ export function globalHandleError(error) {
31
31
  }
32
32
 
33
33
  export function interopDefault(promise) {
34
- return promise.then(m => m.default || m);
34
+ return promise.then((m) => m.default || m);
35
35
  }
36
36
 
37
37
  export function hasFetch(vm) {
@@ -276,7 +276,7 @@ export async function setContext(app, context) {
276
276
  }
277
277
  };
278
278
  if (process.server) {
279
- app.context.beforeNuxtRender = fn => context.beforeRenderFns.push(fn);
279
+ app.context.beforeNuxtRender = (fn) => context.beforeRenderFns.push(fn);
280
280
  }
281
281
  if (process.client) {
282
282
  app.context.nuxtState = window.__NUXT__;
package/utils/object.js CHANGED
@@ -43,7 +43,7 @@ export function getAllValues(obj, path) {
43
43
  keysInOrder.forEach((currentKey) => {
44
44
  currentValue = currentValue.map((indexValue) => {
45
45
  if (Array.isArray(indexValue)) {
46
- return indexValue.map(arr => arr[currentKey]).flat();
46
+ return indexValue.map((arr) => arr[currentKey]).flat();
47
47
  } else if (indexValue) {
48
48
  return indexValue[currentKey];
49
49
  } else {
@@ -52,7 +52,7 @@ export function getAllValues(obj, path) {
52
52
  }).flat();
53
53
  });
54
54
 
55
- return currentValue.filter(val => val !== null);
55
+ return currentValue.filter((val) => val !== null);
56
56
  }
57
57
 
58
58
  export function get(obj, path) {
@@ -131,7 +131,7 @@ export function isSimpleKeyValue(obj) {
131
131
  return obj !== null &&
132
132
  !Array.isArray(obj) &&
133
133
  typeof obj === 'object' &&
134
- Object.values(obj || {}).every(v => typeof v !== 'object');
134
+ Object.values(obj || {}).every((v) => typeof v !== 'object');
135
135
  }
136
136
 
137
137
  /*
@@ -174,7 +174,7 @@ export function definedKeys(obj) {
174
174
  if ( Array.isArray(val) ) {
175
175
  return key;
176
176
  } else if ( isObject(val) ) {
177
- return ( definedKeys(val) || [] ).map(subkey => `${ key }.${ subkey }`);
177
+ return ( definedKeys(val) || [] ).map((subkey) => `${ key }.${ subkey }`);
178
178
  } else {
179
179
  return key;
180
180
  }
@@ -375,5 +375,5 @@ export function pickBy(obj = {}, predicate = (value, key) => false) {
375
375
  * @returns
376
376
  */
377
377
  export const toDictionary = (array, callback) => Object.assign(
378
- {}, ...array.map(item => ({ [item]: callback(item) }))
378
+ {}, ...array.map((item) => ({ [item]: callback(item) }))
379
379
  );
@@ -7,7 +7,7 @@ import { PSA } from '@shell/types/pod-security-admission';
7
7
  * Return PSA labels present in the resource
8
8
  * @returns string[]
9
9
  */
10
- export const getPSALabels = (resource: PSA): string[] => filter(keys(resource?.metadata?.labels), key => PSALabelsNamespaces.includes(key));
10
+ export const getPSALabels = (resource: PSA): string[] => filter(keys(resource?.metadata?.labels), (key) => PSALabelsNamespaces.includes(key));
11
11
 
12
12
  /**
13
13
  * Return boolean value if the label is a PSA label