@rancher/shell 0.3.14 → 0.3.15

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 (397) hide show
  1. package/assets/images/providers/nutanix.svg +1 -0
  2. package/assets/translations/en-us.yaml +83 -2
  3. package/chart/gatekeeper.vue +2 -2
  4. package/chart/monitoring/alerting/index.vue +3 -3
  5. package/chart/monitoring/index.vue +2 -2
  6. package/chart/monitoring/prometheus/index.vue +1 -1
  7. package/chart/rancher-backup/index.vue +2 -2
  8. package/cloud-credential/harvester.vue +2 -2
  9. package/components/AssignTo.vue +1 -1
  10. package/components/AwsComplianceBanner.vue +1 -1
  11. package/components/BackLink.vue +7 -0
  12. package/components/BrandImage.vue +3 -3
  13. package/components/ClusterProviderIcon.vue +1 -1
  14. package/components/CommunityLinks.vue +2 -2
  15. package/components/ConsumptionGauge.vue +17 -2
  16. package/components/CruResource.vue +2 -1
  17. package/components/DashboardMetrics.vue +8 -0
  18. package/components/DetailTop.vue +1 -1
  19. package/components/ExplorerMembers.vue +8 -8
  20. package/components/ExplorerProjectsNamespaces.vue +9 -9
  21. package/components/FixedBanner.vue +1 -1
  22. package/components/GlobalRoleBindings.vue +11 -11
  23. package/components/GrafanaDashboard.vue +7 -1
  24. package/components/GrowlManager.vue +1 -1
  25. package/components/HarvesterServiceAddOnConfig.vue +4 -3
  26. package/components/IconOrSvg.vue +10 -3
  27. package/components/LandingPagePreference.vue +2 -2
  28. package/components/MoveModal.vue +1 -1
  29. package/components/PodSecurityAdmission.vue +3 -3
  30. package/components/ProgressBarMulti.vue +2 -2
  31. package/components/PromptRemove.vue +52 -28
  32. package/components/PromptRestore.vue +3 -3
  33. package/components/Questions/index.vue +5 -5
  34. package/components/RelatedWorkloadsTable.vue +1 -1
  35. package/components/ResourceList/Masthead.vue +1 -1
  36. package/components/ResourceTable.vue +3 -3
  37. package/components/ResourceYaml.vue +1 -1
  38. package/components/RoleBindings.vue +2 -2
  39. package/components/SingleClusterInfo.vue +1 -1
  40. package/components/SortableTable/actions.js +3 -3
  41. package/components/SortableTable/advanced-filtering.js +7 -7
  42. package/components/SortableTable/filtering.js +1 -1
  43. package/components/SortableTable/index.vue +9 -9
  44. package/components/SortableTable/selection.js +5 -5
  45. package/components/SortableTable/sorting.js +5 -5
  46. package/components/Tabbed/index.vue +7 -7
  47. package/components/TableSparkLine.vue +1 -1
  48. package/components/Wizard.vue +11 -23
  49. package/components/__tests__/Collapse.spec.ts +1 -1
  50. package/components/__tests__/CruResource.test.ts +74 -0
  51. package/components/__tests__/SimpleBox.spec.ts +1 -1
  52. package/components/auth/RoleDetailEdit.vue +7 -3
  53. package/components/auth/SelectPrincipal.vue +3 -3
  54. package/components/fleet/FleetResources.vue +1 -1
  55. package/components/fleet/FleetStatus.vue +4 -4
  56. package/components/fleet/FleetSummary.vue +1 -1
  57. package/components/fleet/ForceDirectedTreeChart/chartIcons.js +1 -1
  58. package/components/fleet/ForceDirectedTreeChart/index.vue +1 -1
  59. package/components/form/ArrayList.vue +11 -3
  60. package/components/form/ArrayListSelect.vue +2 -2
  61. package/components/form/FileSelector.vue +6 -0
  62. package/components/form/GitPicker.vue +528 -0
  63. package/components/form/KeyValue.vue +82 -41
  64. package/components/form/LabeledSelect.vue +2 -2
  65. package/components/form/MatchExpressions.vue +2 -2
  66. package/components/form/Members/ClusterMembershipEditor.vue +1 -2
  67. package/components/form/Members/ClusterPermissionsEditor.vue +6 -5
  68. package/components/form/Members/MembershipEditor.vue +4 -4
  69. package/components/form/Members/ProjectMembershipEditor.vue +1 -2
  70. package/components/form/NameNsDescription.vue +13 -6
  71. package/components/form/Networking.vue +2 -2
  72. package/components/form/NodeScheduling.vue +1 -1
  73. package/components/form/PodAffinity.vue +1 -1
  74. package/components/form/ProjectMemberEditor.vue +4 -4
  75. package/components/form/ResourceQuota/Namespace.vue +2 -2
  76. package/components/form/ResourceQuota/NamespaceRow.vue +2 -2
  77. package/components/form/ResourceQuota/Project.vue +1 -1
  78. package/components/form/ResourceQuota/shared.js +2 -2
  79. package/components/form/ResourceSelector.vue +1 -1
  80. package/components/form/ResourceTabs/index.vue +1 -1
  81. package/components/form/RuleSelector.vue +1 -1
  82. package/components/form/SecretSelector.vue +4 -4
  83. package/components/form/Select.vue +2 -2
  84. package/components/form/SelectOrCreateAuthSecret.vue +3 -3
  85. package/components/form/ServiceNameSelect.vue +1 -1
  86. package/components/form/ServicePorts.vue +1 -1
  87. package/components/form/ShellInput.vue +1 -1
  88. package/components/form/SimpleSecretSelector.vue +4 -4
  89. package/components/form/Taints.vue +1 -1
  90. package/components/form/ValueFromResource.vue +3 -3
  91. package/components/form/WorkloadPorts.vue +8 -7
  92. package/components/form/__tests__/Error.test.ts +1 -1
  93. package/components/form/__tests__/KeyValue.test.ts +21 -0
  94. package/components/formatter/ClusterLink.vue +1 -1
  95. package/components/formatter/ClusterProvider.vue +13 -2
  96. package/components/formatter/Endpoints.vue +1 -1
  97. package/components/formatter/FleetSummaryGraph.vue +2 -2
  98. package/components/formatter/IngressTarget.vue +2 -2
  99. package/components/formatter/PodImages.vue +1 -1
  100. package/components/formatter/PrincipalGroupBindings.vue +1 -1
  101. package/components/formatter/ReceiverIcons.vue +3 -3
  102. package/components/formatter/ServiceType.vue +1 -1
  103. package/components/formatter/WorkloadDetailEndpoints.vue +1 -1
  104. package/components/formatter/WorkloadHealthScale.vue +1 -1
  105. package/components/formatter/__tests__/LiveDate.test.ts +1 -1
  106. package/components/graph/Bar.vue +1 -1
  107. package/components/graph/LinePlot.vue +3 -3
  108. package/components/nav/Group.vue +2 -2
  109. package/components/nav/Header.vue +5 -5
  110. package/components/nav/NamespaceFilter.vue +14 -14
  111. package/components/nav/TopLevelMenu.vue +76 -11
  112. package/components/nav/WindowManager/ContainerLogs.vue +2 -2
  113. package/components/nav/WindowManager/ContainerShell.vue +1 -1
  114. package/components/nav/WorkspaceSwitcher.vue +1 -1
  115. package/config/home-links.js +4 -4
  116. package/config/labels-annotations.js +8 -9
  117. package/config/pod-security-admission.ts +1 -1
  118. package/config/product/auth.js +4 -4
  119. package/config/product/explorer.js +14 -0
  120. package/config/router.js +5 -0
  121. package/config/store.js +2 -0
  122. package/config/table-headers.js +13 -13
  123. package/config/uiplugins.js +8 -1
  124. package/core/plugin-routes.ts +3 -2
  125. package/core/plugin.ts +3 -3
  126. package/core/plugins.js +7 -7
  127. package/creators/pkg/files/index.ts +1 -1
  128. package/detail/cis.cattle.io.clusterscan.vue +3 -3
  129. package/detail/fleet.cattle.io.bundle.vue +1 -1
  130. package/detail/helm.cattle.io.projecthelmchart.vue +16 -29
  131. package/detail/management.cattle.io.user.vue +12 -12
  132. package/detail/namespace.vue +4 -4
  133. package/detail/networking.k8s.io.ingress.vue +3 -3
  134. package/detail/node.vue +2 -2
  135. package/detail/provisioning.cattle.io.cluster.vue +9 -10
  136. package/detail/service.vue +1 -1
  137. package/detail/workload/index.vue +3 -3
  138. package/dialog/AddProjectMemberDialog.vue +2 -2
  139. package/dialog/DrainNode.vue +1 -1
  140. package/dialog/GenericPrompt.vue +9 -5
  141. package/dialog/RotateEncryptionKeyDialog.vue +2 -2
  142. package/dialog/ScaleMachineDownDialog.vue +2 -2
  143. package/edit/auth/azuread.vue +3 -3
  144. package/edit/autoscaling.horizontalpodautoscaler/index.vue +5 -5
  145. package/edit/cis.cattle.io.clusterscan.vue +5 -5
  146. package/edit/cloudcredential.vue +4 -4
  147. package/edit/constraints.gatekeeper.sh.constraint/NamespaceList.vue +1 -1
  148. package/edit/constraints.gatekeeper.sh.constraint/index.vue +4 -4
  149. package/edit/fleet.cattle.io.gitrepo.vue +6 -6
  150. package/edit/helm.cattle.io.projecthelmchart.vue +3 -3
  151. package/edit/logging-flow/index.vue +4 -4
  152. package/edit/logging.banzaicloud.io.output/index.vue +3 -3
  153. package/edit/logging.banzaicloud.io.output/providers/elasticsearch.vue +1 -1
  154. package/edit/logging.banzaicloud.io.output/providers/forward.vue +1 -1
  155. package/edit/logging.banzaicloud.io.output/providers/logz.vue +1 -1
  156. package/edit/logging.banzaicloud.io.output/providers/opensearch.vue +1 -1
  157. package/edit/logging.banzaicloud.io.output/providers/redis.vue +1 -1
  158. package/edit/logging.banzaicloud.io.output/providers/splunkHec.vue +1 -1
  159. package/edit/management.cattle.io.clusterroletemplatebinding.vue +1 -1
  160. package/edit/management.cattle.io.podsecurityadmissionconfigurationtemplate.vue +1 -1
  161. package/edit/management.cattle.io.project.vue +3 -3
  162. package/edit/management.cattle.io.projectroletemplatebinding.vue +2 -2
  163. package/edit/management.cattle.io.setting.vue +1 -1
  164. package/edit/management.cattle.io.user.vue +2 -2
  165. package/edit/monitoring.coreos.com.alertmanagerconfig/auth.vue +2 -2
  166. package/edit/monitoring.coreos.com.alertmanagerconfig/index.vue +1 -1
  167. package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +1 -1
  168. package/edit/monitoring.coreos.com.alertmanagerconfig/types/opsgenie.vue +3 -3
  169. package/edit/monitoring.coreos.com.prometheusrule/GroupRules.vue +5 -5
  170. package/edit/monitoring.coreos.com.prometheusrule/duration.js +1 -1
  171. package/edit/monitoring.coreos.com.receiver/auth.vue +2 -2
  172. package/edit/monitoring.coreos.com.receiver/tls.vue +3 -4
  173. package/edit/monitoring.coreos.com.receiver/types/__tests__/email.test.ts +53 -0
  174. package/edit/monitoring.coreos.com.receiver/types/email.vue +2 -0
  175. package/edit/monitoring.coreos.com.receiver/types/opsgenie.vue +3 -3
  176. package/edit/monitoring.coreos.com.receiver/types/webhook.add.vue +1 -1
  177. package/edit/monitoring.coreos.com.route.vue +2 -2
  178. package/edit/namespace.vue +21 -13
  179. package/edit/networking.k8s.io.ingress/Certificate.vue +2 -2
  180. package/edit/networking.k8s.io.ingress/DefaultBackend.vue +2 -2
  181. package/edit/networking.k8s.io.ingress/RulePath.vue +2 -2
  182. package/edit/networking.k8s.io.ingress/Rules.vue +2 -2
  183. package/edit/networking.k8s.io.ingress/index.vue +4 -4
  184. package/edit/networking.k8s.io.networkpolicy/PolicyRuleTarget.vue +3 -3
  185. package/edit/networking.k8s.io.networkpolicy/index.vue +1 -1
  186. package/edit/persistentvolume/index.vue +4 -4
  187. package/edit/persistentvolumeclaim.vue +3 -3
  188. package/edit/provisioning.cattle.io.cluster/RegistryMirrors.vue +1 -1
  189. package/edit/provisioning.cattle.io.cluster/SelectCredential.vue +2 -2
  190. package/edit/provisioning.cattle.io.cluster/import.vue +2 -2
  191. package/edit/provisioning.cattle.io.cluster/index.vue +7 -7
  192. package/edit/provisioning.cattle.io.cluster/rke2.vue +28 -29
  193. package/edit/resources.cattle.io.backup.vue +2 -2
  194. package/edit/resources.cattle.io.restore.vue +3 -3
  195. package/edit/secret/generic.vue +1 -1
  196. package/edit/secret/index.vue +3 -3
  197. package/edit/service.vue +3 -21
  198. package/edit/serviceaccount.vue +2 -2
  199. package/edit/storage.k8s.io.storageclass/index.vue +4 -4
  200. package/edit/storage.k8s.io.storageclass/provisioners/driver.harvesterhci.io.vue +1 -1
  201. package/edit/token.vue +5 -5
  202. package/edit/workload/index.vue +1 -1
  203. package/edit/workload/mixins/workload.js +8 -8
  204. package/edit/workload/storage/ContainerMountPaths.vue +9 -9
  205. package/edit/workload/storage/Mount.vue +2 -2
  206. package/edit/workload/storage/csi/index.vue +1 -1
  207. package/edit/workload/storage/ephemeralVolume/index.vue +1 -1
  208. package/edit/workload/storage/index.vue +6 -6
  209. package/edit/workload/storage/persistentVolumeClaim/persistentvolumeclaim.vue +2 -2
  210. package/initialize/client.js +8 -8
  211. package/initialize/index.js +1 -4
  212. package/layouts/default.vue +38 -11
  213. package/list/catalog.cattle.io.clusterrepo.vue +9 -1
  214. package/list/cis.cattle.io.clusterscan.vue +1 -1
  215. package/list/fleet.cattle.io.cluster.vue +2 -2
  216. package/list/group.principal.vue +1 -1
  217. package/list/helm.cattle.io.projecthelmchart.vue +2 -2
  218. package/list/management.cattle.io.cluster.vue +1 -1
  219. package/list/management.cattle.io.feature.vue +1 -1
  220. package/list/management.cattle.io.user.vue +2 -2
  221. package/list/node.vue +5 -5
  222. package/list/provisioning.cattle.io.cluster.vue +4 -5
  223. package/machine-config/amazonec2.vue +2 -2
  224. package/machine-config/digitalocean.vue +4 -4
  225. package/machine-config/linode.vue +4 -4
  226. package/machine-config/vmwarevsphere.vue +12 -12
  227. package/middleware/authenticated.js +7 -6
  228. package/mixins/brand.js +1 -1
  229. package/mixins/chart.js +6 -6
  230. package/mixins/fetch.client.js +2 -2
  231. package/mixins/form-validation.js +7 -7
  232. package/mixins/resource-fetch-namespaced.js +1 -1
  233. package/mixins/resource-fetch.js +2 -2
  234. package/models/apps.statefulset.js +2 -2
  235. package/models/batch.cronjob.js +1 -1
  236. package/models/catalog.cattle.io.app.js +4 -4
  237. package/models/cis.cattle.io.clusterscan.js +1 -1
  238. package/models/cis.cattle.io.clusterscanbenchmark.js +1 -1
  239. package/models/cis.cattle.io.clusterscanreport.js +1 -1
  240. package/models/cloudcredential.js +1 -1
  241. package/models/cluster/node.js +5 -5
  242. package/models/cluster.x-k8s.io.machinedeployment.js +2 -2
  243. package/models/fleet.cattle.io.gitrepo.js +3 -3
  244. package/models/group.principal.js +4 -4
  245. package/models/helm.cattle.io.projecthelmchart.js +2 -2
  246. package/models/logging.banzaicloud.io.clusterflow.js +2 -2
  247. package/models/logging.banzaicloud.io.flow.js +5 -5
  248. package/models/logging.banzaicloud.io.output.js +2 -2
  249. package/models/management.cattle.io.cluster.js +10 -14
  250. package/models/management.cattle.io.globalrole.js +4 -4
  251. package/models/management.cattle.io.node.js +2 -2
  252. package/models/management.cattle.io.nodepool.js +3 -3
  253. package/models/management.cattle.io.nodetemplate.js +4 -4
  254. package/models/management.cattle.io.project.js +2 -2
  255. package/models/management.cattle.io.roletemplate.js +1 -1
  256. package/models/management.cattle.io.setting.js +1 -1
  257. package/models/management.cattle.io.user.js +5 -5
  258. package/models/monitoring.coreos.com.receiver.js +9 -9
  259. package/models/namespace.js +1 -1
  260. package/models/networking.k8s.io.ingress.js +5 -5
  261. package/models/persistentvolume.js +3 -3
  262. package/models/pod.js +3 -3
  263. package/models/provisioning.cattle.io.cluster.js +39 -27
  264. package/models/rbac.authorization.k8s.io.clusterrole.js +2 -2
  265. package/models/rbac.authorization.k8s.io.role.js +3 -3
  266. package/models/secret.js +1 -1
  267. package/models/service.js +2 -2
  268. package/models/storage.k8s.io.storageclass.js +2 -2
  269. package/models/token.js +1 -1
  270. package/models/workload.js +6 -6
  271. package/models/workload.service.js +5 -21
  272. package/package.json +2 -1
  273. package/pages/about.vue +9 -9
  274. package/pages/account/index.vue +2 -2
  275. package/pages/auth/login.vue +15 -12
  276. package/pages/auth/verify.vue +6 -0
  277. package/pages/c/_cluster/apps/charts/index.vue +4 -4
  278. package/pages/c/_cluster/apps/charts/install.vue +28 -20
  279. package/pages/c/_cluster/auth/roles/index.vue +9 -9
  280. package/pages/c/_cluster/explorer/index.vue +41 -16
  281. package/pages/c/_cluster/explorer/tools/index.vue +8 -8
  282. package/pages/c/_cluster/fleet/GitRepoGraphConfig.js +1 -1
  283. package/pages/c/_cluster/fleet/index.vue +11 -11
  284. package/pages/c/_cluster/monitoring/index.vue +1 -1
  285. package/pages/c/_cluster/settings/links.vue +3 -3
  286. package/pages/c/_cluster/settings/performance.vue +1 -1
  287. package/pages/c/_cluster/uiplugins/CatalogList/CatalogLoadDialog.vue +6 -6
  288. package/pages/c/_cluster/uiplugins/CatalogList/index.vue +3 -3
  289. package/pages/c/_cluster/uiplugins/InstallDialog.vue +3 -3
  290. package/pages/c/_cluster/uiplugins/PluginInfoPanel.vue +1 -1
  291. package/pages/c/_cluster/uiplugins/RemoveUIPlugins.vue +3 -3
  292. package/pages/c/_cluster/uiplugins/SetupUIPlugins.vue +6 -6
  293. package/pages/c/_cluster/uiplugins/UninstallDialog.vue +4 -4
  294. package/pages/c/_cluster/uiplugins/index.vue +22 -19
  295. package/pages/diagnostic.vue +6 -6
  296. package/pages/home.vue +3 -3
  297. package/pages/prefs.vue +2 -2
  298. package/pages/rio/mesh.vue +3 -3
  299. package/pages/support/index.vue +10 -1
  300. package/pkg/auto-import.js +1 -1
  301. package/pkg/tsconfig.json +1 -0
  302. package/pkg/vue.config.js +1 -1
  303. package/plugins/axios.js +1 -1
  304. package/plugins/clean-html-directive.js +1 -1
  305. package/plugins/dashboard-store/__tests__/mutations.spec.js +4 -4
  306. package/plugins/dashboard-store/actions.js +4 -4
  307. package/plugins/dashboard-store/getters.js +1 -1
  308. package/plugins/dashboard-store/index.js +1 -1
  309. package/plugins/dashboard-store/mutations.js +2 -2
  310. package/plugins/dashboard-store/resource-class.js +8 -8
  311. package/plugins/i18n.js +1 -1
  312. package/plugins/plugin.js +5 -1
  313. package/plugins/steve/actions.js +3 -3
  314. package/plugins/steve/getters.js +3 -3
  315. package/plugins/steve/hybrid-class.js +1 -1
  316. package/plugins/steve/mutations.js +1 -1
  317. package/plugins/steve/performanceTesting.js +1 -1
  318. package/plugins/steve/resourceWatcher.js +1 -1
  319. package/plugins/steve/subscribe.js +6 -6
  320. package/plugins/steve/worker/web-worker.basic.js +1 -1
  321. package/promptRemove/management.cattle.io.project.vue +3 -3
  322. package/promptRemove/mixin/roleDeletionCheck.js +4 -4
  323. package/promptRemove/pod.vue +1 -1
  324. package/rancher-components/StringList/StringList.vue +34 -50
  325. package/rancher-components/components/Form/Checkbox/Checkbox.test.ts +2 -2
  326. package/rancher-components/components/Form/Checkbox/Checkbox.vue +1 -1
  327. package/rancher-components/components/Form/Radio/RadioButton.test.ts +1 -1
  328. package/rancher-components/components/Form/Radio/RadioButton.vue +2 -2
  329. package/rancher-components/components/Form/Radio/RadioGroup.vue +2 -2
  330. package/rancher-components/components/Form/TextArea/TextAreaAutoGrow.vue +1 -0
  331. package/rancher-components/components/Form/ToggleSwitch/ToggleSwitch.test.ts +1 -1
  332. package/rancher-components/components/Form/ToggleSwitch/ToggleSwitch.vue +7 -7
  333. package/rancher-components/components/StringList/StringList.test.ts +10 -9
  334. package/rancher-components/components/StringList/StringList.vue +5 -5
  335. package/scripts/extension/helm/charts/ui-plugin-server/Chart.yaml +1 -1
  336. package/store/action-menu.js +4 -4
  337. package/store/auth.js +40 -7
  338. package/store/aws.js +1 -1
  339. package/store/catalog.js +12 -11
  340. package/store/digitalocean.js +4 -4
  341. package/store/features.js +1 -0
  342. package/store/github.js +70 -213
  343. package/store/gitlab.js +159 -0
  344. package/store/growl.js +1 -1
  345. package/store/i18n.js +7 -7
  346. package/store/index.js +63 -22
  347. package/store/linode.js +1 -1
  348. package/store/plugins.js +5 -5
  349. package/store/pnap.js +1 -1
  350. package/store/prefs.js +6 -6
  351. package/store/resource-fetch.js +3 -3
  352. package/store/type-map.js +61 -42
  353. package/store/uiplugins.ts +2 -1
  354. package/store/wm.js +5 -4
  355. package/tsconfig.default.json +10 -0
  356. package/tsconfig.json +2 -9
  357. package/types/shell/index.d.ts +21 -13
  358. package/utils/__tests__/version.test.ts +28 -0
  359. package/utils/alertmanagerconfig.js +4 -4
  360. package/utils/array.ts +4 -4
  361. package/utils/async.ts +1 -1
  362. package/utils/auth.js +3 -3
  363. package/utils/axios.js +5 -5
  364. package/utils/cluster.js +4 -3
  365. package/utils/color.js +10 -0
  366. package/utils/create-yaml.js +4 -4
  367. package/utils/crypto/browserHashUtils.js +1 -1
  368. package/utils/crypto/browserMd5.js +1 -1
  369. package/utils/crypto/browserSha1.js +1 -1
  370. package/utils/crypto/browserSha256.js +1 -1
  371. package/utils/crypto/index.js +3 -3
  372. package/utils/favicon.js +2 -3
  373. package/utils/gatekeeper/util.js +3 -3
  374. package/utils/gc/gc.ts +2 -2
  375. package/utils/git.ts +92 -0
  376. package/utils/grafana.js +4 -4
  377. package/utils/monitoring.js +2 -2
  378. package/utils/nuxt.js +2 -2
  379. package/utils/object.js +5 -5
  380. package/utils/pod-security-admission.ts +1 -1
  381. package/utils/projectAndNamespaceFiltering.utils.ts +1 -1
  382. package/utils/select.js +2 -2
  383. package/utils/selector.js +2 -2
  384. package/utils/settings.ts +17 -2
  385. package/utils/socket.js +30 -6
  386. package/utils/sort.js +1 -1
  387. package/utils/string.js +1 -1
  388. package/utils/url.ts +1 -1
  389. package/utils/validators/formRules/index.ts +3 -3
  390. package/utils/validators/role-template.js +4 -4
  391. package/utils/version.js +14 -1
  392. package/vue.config.js +19 -13
  393. package/components/.DS_Store +0 -0
  394. package/components/__tests__/.DS_Store +0 -0
  395. package/components/form/GithubPicker.vue +0 -390
  396. package/creators/pkg/package-lock.json +0 -37
  397. package/yarn-error.log +0 -196
@@ -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
@@ -5583,8 +5587,8 @@ validation:
5583
5587
  tooLongPrefix: '"{key}" cannot have a prefix longer than {max} characters'
5584
5588
  minLength: '"{key}" must contain more than {min} characters'
5585
5589
  maxLength: '"{key}" must contain less than {max} characters'
5586
- minValue: '"{key}" must be higher than {min}'
5587
- maxValue: '"{key}" must be lower than {max}'
5590
+ minValue: '"{key}" must be equal or higher than {min}'
5591
+ maxValue: '"{key}" must be equal or lower than {max}'
5588
5592
  betweenLengths: '"{key}" must contain between {min} and {max} characters'
5589
5593
  betweenValues: '"{key}" must be between {min} and {max}'
5590
5594
  noSchema: No schema found to validate
@@ -7168,6 +7172,7 @@ resourceQuota:
7168
7172
  resourceType: Resource Type
7169
7173
  helpText: Configure how much of the resources the namespace as a whole can consume.
7170
7174
  helpTextDetail: The amount of resources the namespace as a whole can consume.
7175
+ helpTextHarvester: VMs need to reserve additional memory overhead.
7171
7176
  configMaps: Config Maps
7172
7177
  limitsCpu: CPU Limit
7173
7178
  limitsMemory: Memory Limit
@@ -7325,6 +7330,82 @@ 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
@@ -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() {
@@ -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>
@@ -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.
@@ -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 = [];
@@ -70,7 +70,7 @@ export default {
70
70
  }
71
71
 
72
72
  this.$store.dispatch('management/findAll', { type: MANAGEMENT.PROJECT })
73
- .then(projects => this.$set(this, 'projects', projects));
73
+ .then((projects) => this.$set(this, 'projects', projects));
74
74
 
75
75
  const hydration = {
76
76
  normanPrincipals: this.$store.dispatch('rancher/findAll', { type: NORMAN.PRINCIPAL }),
@@ -123,11 +123,11 @@ export default {
123
123
  computed: {
124
124
  ...mapGetters(['currentCluster']),
125
125
  clusterRoleTemplateBindings() {
126
- return this.normanClusterRoleTemplateBindings.map(b => b.clusterroletemplatebinding) ;
126
+ return this.normanClusterRoleTemplateBindings.map((b) => b.clusterroletemplatebinding) ;
127
127
  },
128
128
  filteredClusterRoleTemplateBindings() {
129
129
  return this.clusterRoleTemplateBindings.filter(
130
- b => b?.clusterName === this.$store.getters['currentCluster'].id
130
+ (b) => b?.clusterName === this.$store.getters['currentCluster'].id
131
131
  );
132
132
  },
133
133
  filteredProjects() {
@@ -222,10 +222,10 @@ export default {
222
222
  return this.$store.getters['currentCluster'].isLocal;
223
223
  },
224
224
  canEditProjectMembers() {
225
- return this.normanProjectRTBSchema?.collectionMethods.find(x => x.toLowerCase() === 'post');
225
+ return this.normanProjectRTBSchema?.collectionMethods.find((x) => x.toLowerCase() === 'post');
226
226
  },
227
227
  canEditClusterMembers() {
228
- return this.normanClusterRTBSchema?.collectionMethods.find(x => x.toLowerCase() === 'post');
228
+ return this.normanClusterRTBSchema?.collectionMethods.find((x) => x.toLowerCase() === 'post');
229
229
  },
230
230
  },
231
231
  methods: {
@@ -250,12 +250,12 @@ export default {
250
250
  },
251
251
 
252
252
  getProjectRoleBinding(row, role) {
253
- // Each row is a combination of user/group and project
254
- // So find the specfic roleBindingTemplate corresponding to the specific role + project
253
+ // Each row is a combination of project, role and user/group
254
+ // So find the specfic roleBindingTemplate corresponding to the specific project, role + user/group
255
255
  const userOrGroupKey = row.userId ? 'userId' : 'groupPrincipalId';
256
256
 
257
257
  return this.projectRoleTemplateBindings.find((r) => {
258
- return r.roleTemplateId === role.id && r[userOrGroupKey] === row[userOrGroupKey];
258
+ return r.projectId === row.projectId && r.roleTemplateId === role.id && r[userOrGroupKey] === row[userOrGroupKey];
259
259
  });
260
260
  },
261
261
 
@@ -1,6 +1,6 @@
1
1
  <script>
2
2
  import { mapGetters } from 'vuex';
3
- import ResourceTable from '@shell/components/ResourceTable';
3
+ import ResourceTable, { defaultTableSortGenerationFn } from '@shell/components/ResourceTable';
4
4
  import { STATE, AGE, NAME } from '@shell/config/table-headers';
5
5
  import { uniq } from '@shell/utils/array';
6
6
  import { MANAGEMENT, NAMESPACE, VIRTUAL_TYPES } from '@shell/config/types';
@@ -8,7 +8,7 @@ import { PROJECT_ID, FLAT_VIEW } from '@shell/config/query-params';
8
8
  import Masthead from '@shell/components/ResourceList/Masthead';
9
9
  import { mapPref, GROUP_RESOURCES, ALL_NAMESPACES } from '@shell/store/prefs';
10
10
  import MoveModal from '@shell/components/MoveModal';
11
- import { defaultTableSortGenerationFn } from '@shell/components/ResourceTable.vue';
11
+
12
12
  import { NAMESPACE_FILTER_ALL_ORPHANS } from '@shell/utils/namespace-filter';
13
13
  import ResourceFetch from '@shell/mixins/resource-fetch';
14
14
  import DOMPurify from 'dompurify';
@@ -97,12 +97,12 @@ export default {
97
97
  NAME,
98
98
  this.groupPreference === 'none' ? project : null,
99
99
  AGE
100
- ].filter(h => h);
100
+ ].filter((h) => h);
101
101
  },
102
102
  projectIdsWithNamespaces() {
103
103
  const ids = this.rows
104
- .map(row => row.projectId)
105
- .filter(id => id);
104
+ .map((row) => row.projectId)
105
+ .filter((id) => id);
106
106
 
107
107
  return uniq(ids);
108
108
  },
@@ -117,13 +117,13 @@ export default {
117
117
  return this.$store.getters[`${ this.currentProduct.inStore }/filterProject`];
118
118
  }
119
119
 
120
- const clustersInProjects = projectsInAllClusters.filter(project => project.spec.clusterName === clusterId);
120
+ const clustersInProjects = projectsInAllClusters.filter((project) => project.spec.clusterName === clusterId);
121
121
 
122
122
  return clustersInProjects;
123
123
  },
124
124
  projectsWithoutNamespaces() {
125
125
  return this.activeProjects.filter((project) => {
126
- return !this.projectIdsWithNamespaces.find(item => project?.id?.endsWith(`/${ item }`));
126
+ return !this.projectIdsWithNamespaces.find((item) => project?.id?.endsWith(`/${ item }`));
127
127
  });
128
128
  },
129
129
  // We're using this because we need to show projects as groups even if the project doesn't have any namespaces.
@@ -226,7 +226,7 @@ export default {
226
226
  return false;
227
227
  }
228
228
 
229
- const someNamespacesAreNotInProject = !this.rows.some(row => !row.project);
229
+ const someNamespacesAreNotInProject = !this.rows.some((row) => !row.project);
230
230
 
231
231
  // Hide the "Not in a Project" group if the user is filtering
232
232
  // for specific namespaces or projects.
@@ -250,7 +250,7 @@ export default {
250
250
  const dictionary = row.psaTooltipsDescription;
251
251
  const list = Object.values(dictionary)
252
252
  .sort()
253
- .map(text => `<li>${ text }</li>`).join('');
253
+ .map((text) => `<li>${ text }</li>`).join('');
254
254
  const title = `<p>${ this.t('podSecurityAdmission.name') }: </p>`;
255
255
 
256
256
  return `${ title }<ul class="psa-tooltip">${ list }</ul>`;
@@ -41,7 +41,7 @@ export default {
41
41
  handleLineBreaksConsentText(banner) {
42
42
  if (banner.text?.length) {
43
43
  // split text by newline char
44
- const textArray = banner.text.split(/\\n/).filter(element => element);
44
+ const textArray = banner.text.split(/\\n/).filter((element) => element);
45
45
 
46
46
  if (textArray.length > 1) {
47
47
  textArray.forEach((str, i) => {
@@ -120,7 +120,7 @@ export default {
120
120
  },
121
121
  methods: {
122
122
  getRoleType(role) {
123
- if (this.globalPermissions.find(p => p === role.id)) {
123
+ if (this.globalPermissions.find((p) => p === role.id)) {
124
124
  return 'global';
125
125
  } else if (role.builtin) {
126
126
  return 'builtin';
@@ -159,7 +159,7 @@ export default {
159
159
 
160
160
  Object.values(this.sortedRoles).forEach((roles) => {
161
161
  roles.forEach((mappedRole) => {
162
- const boundRole = boundRoles.find(boundRole => boundRole.globalRoleName === mappedRole.id);
162
+ const boundRole = boundRoles.find((boundRole) => boundRole.globalRoleName === mappedRole.id);
163
163
 
164
164
  if (!!boundRole) {
165
165
  this.selectedRoles.push(mappedRole.id);
@@ -184,10 +184,10 @@ export default {
184
184
  },
185
185
  checkboxChanged() {
186
186
  const addRoles = this.selectedRoles
187
- .filter(selected => !this.startingSelectedRoles.find(startingRole => startingRole.roleId === selected));
187
+ .filter((selected) => !this.startingSelectedRoles.find((startingRole) => startingRole.roleId === selected));
188
188
  const removeBindings = this.startingSelectedRoles
189
- .filter(startingRole => !this.selectedRoles.find(selected => selected === startingRole.roleId))
190
- .map(startingRole => startingRole.bindingId);
189
+ .filter((startingRole) => !this.selectedRoles.find((selected) => selected === startingRole.roleId))
190
+ .map((startingRole) => startingRole.bindingId);
191
191
 
192
192
  this.roleChanges = {
193
193
  initialRoles: this.startingSelectedRoles,
@@ -210,22 +210,22 @@ export default {
210
210
  } else {
211
211
  requestOptions.userName = userId || this.userId;
212
212
  }
213
- const newBindings = await Promise.all(this.roleChanges.addRoles.map(role => this.$store.dispatch(`management/create`, {
213
+ const newBindings = await Promise.all(this.roleChanges.addRoles.map((role) => this.$store.dispatch(`management/create`, {
214
214
  ...requestOptions,
215
215
  globalRoleName: role,
216
216
  })));
217
217
 
218
218
  // Save all changes (and ensure user isn't logged out if they don't have permissions to make a change)
219
- await Promise.all(newBindings.map(newBinding => newBinding.save({ redirectUnauthorized: false })));
219
+ await Promise.all(newBindings.map((newBinding) => newBinding.save({ redirectUnauthorized: false })));
220
220
  },
221
221
  async saveRemovedRoles() {
222
- const existingBindings = await Promise.all(this.roleChanges.removeBindings.map(bindingId => this.$store.dispatch('management/find', {
222
+ const existingBindings = await Promise.all(this.roleChanges.removeBindings.map((bindingId) => this.$store.dispatch('management/find', {
223
223
  type: MANAGEMENT.GLOBAL_ROLE_BINDING,
224
224
  id: bindingId
225
225
  })));
226
226
 
227
227
  // Save all changes (and ensure user isn't logged out if they don't have permissions to make a change)
228
- await Promise.all(existingBindings.map(existingBinding => existingBinding.remove({ redirectUnauthorized: false })));
228
+ await Promise.all(existingBindings.map((existingBinding) => existingBinding.remove({ redirectUnauthorized: false })));
229
229
  },
230
230
  /**
231
231
  * userId is optional, used when a user has just been created
@@ -250,7 +250,7 @@ export default {
250
250
  });
251
251
  });
252
252
 
253
- return allRolesRules.some(rule => this.isRuleValid(rule));
253
+ return allRolesRules.some((rule) => this.isRuleValid(rule));
254
254
  },
255
255
  isRuleValid(rule) {
256
256
  // Brought over from Ember
@@ -281,7 +281,7 @@ export default {
281
281
 
282
282
  if (isArray(verbs) && verbs.length > 1) {
283
283
  // console.log(`verbsRequiredForLogin status 1: `, restrictedTarget.every(rt => verbs.includes(rt)), verbs);
284
- return restrictedTarget.every(rt => verbs.includes(rt));
284
+ return restrictedTarget.every((rt) => verbs.includes(rt));
285
285
  }
286
286
 
287
287
  // console.log(`verbsRequiredForLogin status 2: `, verbsRequiredForLogin.includes(verbs[0]), verbsRequiredForLogin, verbs);
@@ -23,6 +23,12 @@ export default {
23
23
  type: String,
24
24
  default: null
25
25
  },
26
+ // change the grafana url prefix for local clusters in certain monitoring versions
27
+ // project monitoring (projectHelmCharts) supply a grafana url that never needs to be modified in this way
28
+ modifyPrefix: {
29
+ type: Boolean,
30
+ default: true
31
+ },
26
32
  backgroundColor: {
27
33
  type: String,
28
34
  default: '#1b1c21'
@@ -138,7 +144,7 @@ export default {
138
144
  const clusterId = this.$store.getters['currentCluster'].id;
139
145
  const params = this.computeParams();
140
146
 
141
- return computeDashboardUrl(this.monitoringVersion, embedUrl, clusterId, params);
147
+ return computeDashboardUrl(this.monitoringVersion, embedUrl, clusterId, params, this.modifyPrefix);
142
148
  },
143
149
  computeParams() {
144
150
  const params = {};