@rancher/shell 0.3.13 → 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 (396) hide show
  1. package/assets/images/providers/nutanix.svg +1 -0
  2. package/assets/translations/en-us.yaml +89 -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 +117 -2
  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 -8
  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/app/files/.gitignore +0 -3
  128. package/creators/pkg/files/index.ts +1 -1
  129. package/detail/cis.cattle.io.clusterscan.vue +3 -3
  130. package/detail/fleet.cattle.io.bundle.vue +1 -1
  131. package/detail/helm.cattle.io.projecthelmchart.vue +16 -29
  132. package/detail/management.cattle.io.user.vue +12 -12
  133. package/detail/namespace.vue +4 -4
  134. package/detail/networking.k8s.io.ingress.vue +3 -3
  135. package/detail/node.vue +2 -2
  136. package/detail/provisioning.cattle.io.cluster.vue +9 -10
  137. package/detail/service.vue +1 -1
  138. package/detail/workload/index.vue +3 -3
  139. package/dialog/AddProjectMemberDialog.vue +2 -2
  140. package/dialog/DrainNode.vue +1 -1
  141. package/dialog/GenericPrompt.vue +9 -5
  142. package/dialog/RotateEncryptionKeyDialog.vue +2 -2
  143. package/dialog/ScaleMachineDownDialog.vue +2 -2
  144. package/edit/auth/azuread.vue +3 -3
  145. package/edit/autoscaling.horizontalpodautoscaler/index.vue +5 -5
  146. package/edit/cis.cattle.io.clusterscan.vue +5 -5
  147. package/edit/cloudcredential.vue +4 -4
  148. package/edit/constraints.gatekeeper.sh.constraint/NamespaceList.vue +1 -1
  149. package/edit/constraints.gatekeeper.sh.constraint/index.vue +4 -4
  150. package/edit/fleet.cattle.io.gitrepo.vue +6 -6
  151. package/edit/helm.cattle.io.projecthelmchart.vue +3 -3
  152. package/edit/logging-flow/index.vue +4 -4
  153. package/edit/logging.banzaicloud.io.output/index.vue +3 -3
  154. package/edit/logging.banzaicloud.io.output/providers/elasticsearch.vue +1 -1
  155. package/edit/logging.banzaicloud.io.output/providers/forward.vue +1 -1
  156. package/edit/logging.banzaicloud.io.output/providers/logz.vue +1 -1
  157. package/edit/logging.banzaicloud.io.output/providers/opensearch.vue +1 -1
  158. package/edit/logging.banzaicloud.io.output/providers/redis.vue +1 -1
  159. package/edit/logging.banzaicloud.io.output/providers/splunkHec.vue +1 -1
  160. package/edit/management.cattle.io.clusterroletemplatebinding.vue +1 -1
  161. package/edit/management.cattle.io.podsecurityadmissionconfigurationtemplate.vue +1 -1
  162. package/edit/management.cattle.io.project.vue +3 -3
  163. package/edit/management.cattle.io.projectroletemplatebinding.vue +2 -2
  164. package/edit/management.cattle.io.setting.vue +1 -1
  165. package/edit/management.cattle.io.user.vue +2 -2
  166. package/edit/monitoring.coreos.com.alertmanagerconfig/auth.vue +2 -2
  167. package/edit/monitoring.coreos.com.alertmanagerconfig/index.vue +1 -1
  168. package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +1 -1
  169. package/edit/monitoring.coreos.com.alertmanagerconfig/types/opsgenie.vue +3 -3
  170. package/edit/monitoring.coreos.com.prometheusrule/GroupRules.vue +5 -5
  171. package/edit/monitoring.coreos.com.prometheusrule/duration.js +1 -1
  172. package/edit/monitoring.coreos.com.receiver/auth.vue +2 -2
  173. package/edit/monitoring.coreos.com.receiver/tls.vue +3 -4
  174. package/edit/monitoring.coreos.com.receiver/types/__tests__/email.test.ts +53 -0
  175. package/edit/monitoring.coreos.com.receiver/types/email.vue +2 -0
  176. package/edit/monitoring.coreos.com.receiver/types/opsgenie.vue +3 -3
  177. package/edit/monitoring.coreos.com.receiver/types/webhook.add.vue +1 -1
  178. package/edit/monitoring.coreos.com.route.vue +2 -2
  179. package/edit/namespace.vue +21 -13
  180. package/edit/networking.k8s.io.ingress/Certificate.vue +2 -2
  181. package/edit/networking.k8s.io.ingress/DefaultBackend.vue +2 -2
  182. package/edit/networking.k8s.io.ingress/RulePath.vue +2 -2
  183. package/edit/networking.k8s.io.ingress/Rules.vue +2 -2
  184. package/edit/networking.k8s.io.ingress/index.vue +4 -4
  185. package/edit/networking.k8s.io.networkpolicy/PolicyRuleTarget.vue +3 -3
  186. package/edit/networking.k8s.io.networkpolicy/index.vue +1 -1
  187. package/edit/persistentvolume/index.vue +4 -4
  188. package/edit/persistentvolumeclaim.vue +3 -3
  189. package/edit/provisioning.cattle.io.cluster/RegistryMirrors.vue +1 -1
  190. package/edit/provisioning.cattle.io.cluster/SelectCredential.vue +2 -2
  191. package/edit/provisioning.cattle.io.cluster/import.vue +2 -2
  192. package/edit/provisioning.cattle.io.cluster/index.vue +7 -7
  193. package/edit/provisioning.cattle.io.cluster/rke2.vue +28 -29
  194. package/edit/resources.cattle.io.backup.vue +2 -2
  195. package/edit/resources.cattle.io.restore.vue +3 -3
  196. package/edit/secret/generic.vue +1 -1
  197. package/edit/secret/index.vue +3 -3
  198. package/edit/service.vue +3 -21
  199. package/edit/serviceaccount.vue +2 -2
  200. package/edit/storage.k8s.io.storageclass/index.vue +4 -4
  201. package/edit/storage.k8s.io.storageclass/provisioners/driver.harvesterhci.io.vue +1 -1
  202. package/edit/token.vue +5 -5
  203. package/edit/workload/index.vue +1 -1
  204. package/edit/workload/mixins/workload.js +8 -8
  205. package/edit/workload/storage/ContainerMountPaths.vue +9 -9
  206. package/edit/workload/storage/Mount.vue +2 -2
  207. package/edit/workload/storage/csi/index.vue +1 -1
  208. package/edit/workload/storage/ephemeralVolume/index.vue +1 -1
  209. package/edit/workload/storage/index.vue +6 -6
  210. package/edit/workload/storage/persistentVolumeClaim/persistentvolumeclaim.vue +2 -2
  211. package/initialize/client.js +8 -8
  212. package/initialize/index.js +1 -4
  213. package/layouts/default.vue +38 -11
  214. package/list/catalog.cattle.io.clusterrepo.vue +9 -1
  215. package/list/cis.cattle.io.clusterscan.vue +1 -1
  216. package/list/fleet.cattle.io.cluster.vue +2 -2
  217. package/list/group.principal.vue +1 -1
  218. package/list/helm.cattle.io.projecthelmchart.vue +2 -2
  219. package/list/management.cattle.io.cluster.vue +1 -1
  220. package/list/management.cattle.io.feature.vue +1 -1
  221. package/list/management.cattle.io.user.vue +2 -2
  222. package/list/node.vue +5 -5
  223. package/list/provisioning.cattle.io.cluster.vue +4 -5
  224. package/machine-config/amazonec2.vue +2 -2
  225. package/machine-config/digitalocean.vue +4 -4
  226. package/machine-config/linode.vue +4 -4
  227. package/machine-config/vmwarevsphere.vue +12 -12
  228. package/middleware/authenticated.js +7 -6
  229. package/mixins/brand.js +1 -1
  230. package/mixins/chart.js +6 -6
  231. package/mixins/fetch.client.js +2 -2
  232. package/mixins/form-validation.js +7 -7
  233. package/mixins/resource-fetch-namespaced.js +1 -1
  234. package/mixins/resource-fetch.js +2 -2
  235. package/models/apps.statefulset.js +2 -2
  236. package/models/batch.cronjob.js +1 -1
  237. package/models/catalog.cattle.io.app.js +4 -4
  238. package/models/cis.cattle.io.clusterscan.js +1 -1
  239. package/models/cis.cattle.io.clusterscanbenchmark.js +1 -1
  240. package/models/cis.cattle.io.clusterscanreport.js +1 -1
  241. package/models/cloudcredential.js +1 -1
  242. package/models/cluster/node.js +5 -5
  243. package/models/cluster.x-k8s.io.machinedeployment.js +2 -2
  244. package/models/fleet.cattle.io.gitrepo.js +3 -3
  245. package/models/group.principal.js +4 -4
  246. package/models/helm.cattle.io.projecthelmchart.js +2 -2
  247. package/models/logging.banzaicloud.io.clusterflow.js +2 -2
  248. package/models/logging.banzaicloud.io.flow.js +5 -5
  249. package/models/logging.banzaicloud.io.output.js +2 -2
  250. package/models/management.cattle.io.cluster.js +10 -14
  251. package/models/management.cattle.io.globalrole.js +4 -4
  252. package/models/management.cattle.io.node.js +2 -2
  253. package/models/management.cattle.io.nodepool.js +3 -3
  254. package/models/management.cattle.io.nodetemplate.js +4 -4
  255. package/models/management.cattle.io.project.js +2 -2
  256. package/models/management.cattle.io.roletemplate.js +1 -1
  257. package/models/management.cattle.io.setting.js +1 -1
  258. package/models/management.cattle.io.user.js +5 -5
  259. package/models/monitoring.coreos.com.receiver.js +9 -9
  260. package/models/namespace.js +1 -1
  261. package/models/networking.k8s.io.ingress.js +5 -5
  262. package/models/persistentvolume.js +3 -3
  263. package/models/pod.js +3 -3
  264. package/models/provisioning.cattle.io.cluster.js +39 -27
  265. package/models/rbac.authorization.k8s.io.clusterrole.js +2 -2
  266. package/models/rbac.authorization.k8s.io.role.js +3 -3
  267. package/models/secret.js +1 -1
  268. package/models/service.js +2 -2
  269. package/models/storage.k8s.io.storageclass.js +2 -2
  270. package/models/token.js +1 -1
  271. package/models/workload.js +6 -6
  272. package/models/workload.service.js +5 -21
  273. package/package.json +2 -1
  274. package/pages/about.vue +9 -9
  275. package/pages/account/index.vue +2 -2
  276. package/pages/auth/login.vue +15 -12
  277. package/pages/auth/verify.vue +6 -0
  278. package/pages/c/_cluster/apps/charts/index.vue +4 -4
  279. package/pages/c/_cluster/apps/charts/install.vue +28 -20
  280. package/pages/c/_cluster/auth/roles/index.vue +9 -9
  281. package/pages/c/_cluster/explorer/index.vue +41 -16
  282. package/pages/c/_cluster/explorer/tools/index.vue +8 -8
  283. package/pages/c/_cluster/fleet/GitRepoGraphConfig.js +1 -1
  284. package/pages/c/_cluster/fleet/index.vue +11 -11
  285. package/pages/c/_cluster/monitoring/index.vue +1 -1
  286. package/pages/c/_cluster/settings/links.vue +3 -3
  287. package/pages/c/_cluster/settings/performance.vue +1 -1
  288. package/pages/c/_cluster/uiplugins/CatalogList/CatalogLoadDialog.vue +6 -6
  289. package/pages/c/_cluster/uiplugins/CatalogList/index.vue +3 -3
  290. package/pages/c/_cluster/uiplugins/InstallDialog.vue +3 -3
  291. package/pages/c/_cluster/uiplugins/PluginInfoPanel.vue +1 -1
  292. package/pages/c/_cluster/uiplugins/RemoveUIPlugins.vue +3 -3
  293. package/pages/c/_cluster/uiplugins/SetupUIPlugins.vue +6 -6
  294. package/pages/c/_cluster/uiplugins/UninstallDialog.vue +4 -4
  295. package/pages/c/_cluster/uiplugins/index.vue +22 -19
  296. package/pages/diagnostic.vue +6 -6
  297. package/pages/home.vue +3 -3
  298. package/pages/prefs.vue +2 -2
  299. package/pages/rio/mesh.vue +3 -3
  300. package/pages/support/index.vue +10 -1
  301. package/pkg/auto-import.js +1 -1
  302. package/pkg/tsconfig.json +1 -0
  303. package/pkg/vue.config.js +1 -1
  304. package/plugins/axios.js +1 -1
  305. package/plugins/clean-html-directive.js +1 -1
  306. package/plugins/dashboard-store/__tests__/mutations.spec.js +4 -4
  307. package/plugins/dashboard-store/actions.js +4 -4
  308. package/plugins/dashboard-store/getters.js +1 -1
  309. package/plugins/dashboard-store/index.js +1 -1
  310. package/plugins/dashboard-store/mutations.js +2 -2
  311. package/plugins/dashboard-store/resource-class.js +8 -8
  312. package/plugins/i18n.js +1 -1
  313. package/plugins/plugin.js +5 -1
  314. package/plugins/steve/actions.js +3 -3
  315. package/plugins/steve/getters.js +3 -3
  316. package/plugins/steve/hybrid-class.js +1 -1
  317. package/plugins/steve/mutations.js +1 -1
  318. package/plugins/steve/performanceTesting.js +1 -1
  319. package/plugins/steve/resourceWatcher.js +1 -1
  320. package/plugins/steve/subscribe.js +6 -6
  321. package/plugins/steve/worker/web-worker.basic.js +1 -1
  322. package/promptRemove/management.cattle.io.project.vue +3 -3
  323. package/promptRemove/mixin/roleDeletionCheck.js +4 -4
  324. package/promptRemove/pod.vue +1 -1
  325. package/rancher-components/StringList/StringList.test.ts +80 -0
  326. package/rancher-components/StringList/StringList.vue +577 -0
  327. package/rancher-components/StringList/index.ts +1 -0
  328. package/rancher-components/components/Form/Checkbox/Checkbox.test.ts +2 -2
  329. package/rancher-components/components/Form/Checkbox/Checkbox.vue +1 -1
  330. package/rancher-components/components/Form/Radio/RadioButton.test.ts +1 -1
  331. package/rancher-components/components/Form/Radio/RadioButton.vue +2 -2
  332. package/rancher-components/components/Form/Radio/RadioGroup.vue +2 -2
  333. package/rancher-components/components/Form/TextArea/TextAreaAutoGrow.vue +1 -0
  334. package/rancher-components/components/Form/ToggleSwitch/ToggleSwitch.test.ts +1 -1
  335. package/rancher-components/components/Form/ToggleSwitch/ToggleSwitch.vue +7 -7
  336. package/rancher-components/components/StringList/StringList.test.ts +10 -9
  337. package/rancher-components/components/StringList/StringList.vue +5 -5
  338. package/scripts/extension/helm/charts/ui-plugin-server/Chart.yaml +1 -1
  339. package/store/action-menu.js +4 -4
  340. package/store/auth.js +40 -7
  341. package/store/aws.js +1 -1
  342. package/store/catalog.js +12 -11
  343. package/store/digitalocean.js +4 -4
  344. package/store/features.js +1 -0
  345. package/store/github.js +70 -213
  346. package/store/gitlab.js +159 -0
  347. package/store/growl.js +1 -1
  348. package/store/i18n.js +7 -7
  349. package/store/index.js +63 -22
  350. package/store/linode.js +1 -1
  351. package/store/plugins.js +5 -5
  352. package/store/pnap.js +1 -1
  353. package/store/prefs.js +6 -6
  354. package/store/resource-fetch.js +3 -3
  355. package/store/type-map.js +61 -42
  356. package/store/uiplugins.ts +2 -1
  357. package/store/wm.js +5 -4
  358. package/tsconfig.default.json +10 -0
  359. package/tsconfig.json +2 -9
  360. package/types/shell/index.d.ts +12 -4
  361. package/utils/__tests__/version.test.ts +28 -0
  362. package/utils/alertmanagerconfig.js +4 -4
  363. package/utils/array.ts +4 -4
  364. package/utils/async.ts +1 -1
  365. package/utils/auth.js +3 -3
  366. package/utils/axios.js +5 -5
  367. package/utils/cluster.js +4 -3
  368. package/utils/color.js +10 -0
  369. package/utils/create-yaml.js +4 -4
  370. package/utils/crypto/browserHashUtils.js +1 -1
  371. package/utils/crypto/browserMd5.js +1 -1
  372. package/utils/crypto/browserSha1.js +1 -1
  373. package/utils/crypto/browserSha256.js +1 -1
  374. package/utils/crypto/index.js +3 -3
  375. package/utils/favicon.js +2 -3
  376. package/utils/gatekeeper/util.js +3 -3
  377. package/utils/gc/gc.ts +2 -2
  378. package/utils/git.ts +92 -0
  379. package/utils/grafana.js +4 -4
  380. package/utils/monitoring.js +2 -2
  381. package/utils/nuxt.js +2 -2
  382. package/utils/object.js +5 -5
  383. package/utils/pod-security-admission.ts +1 -1
  384. package/utils/projectAndNamespaceFiltering.utils.ts +1 -1
  385. package/utils/select.js +2 -2
  386. package/utils/selector.js +2 -2
  387. package/utils/settings.ts +17 -2
  388. package/utils/socket.js +30 -6
  389. package/utils/sort.js +1 -1
  390. package/utils/string.js +1 -1
  391. package/utils/url.ts +1 -1
  392. package/utils/validators/formRules/index.ts +3 -3
  393. package/utils/validators/role-template.js +4 -4
  394. package/utils/version.js +14 -1
  395. package/vue.config.js +19 -13
  396. package/components/form/GithubPicker.vue +0 -390
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
@@ -51,7 +51,7 @@ class ProjectAndNamespaceFiltering {
51
51
  }
52
52
 
53
53
  const projectsOrNamespaces = namespaceFilter
54
- .map(f => f.replace(NAMESPACE_FILTER_NS_FULL_PREFIX, '')
54
+ .map((f) => f.replace(NAMESPACE_FILTER_NS_FULL_PREFIX, '')
55
55
  .replace(NAMESPACE_FILTER_P_FULL_PREFIX, ''))
56
56
  .join(',');
57
57
 
package/utils/select.js CHANGED
@@ -3,10 +3,10 @@ export function onClickOption(option, e) {
3
3
  return;
4
4
  }
5
5
 
6
- const getValue = opt => (this.optionKey ? this.get(opt, this.optionKey) : this.getOptionLabel(opt));
6
+ const getValue = (opt) => (this.optionKey ? this.get(opt, this.optionKey) : this.getOptionLabel(opt));
7
7
  const optionValue = getValue(option);
8
8
  const value = this.value || [];
9
- const optionIndex = value.findIndex(option => getValue(option) === optionValue);
9
+ const optionIndex = value.findIndex((option) => getValue(option) === optionValue);
10
10
 
11
11
  if (optionIndex < 0) {
12
12
  return;
package/utils/selector.js CHANGED
@@ -53,7 +53,7 @@ export function parse(labelSelector) {
53
53
  }
54
54
  }
55
55
 
56
- const parts = labelSelector.split(/\s*,\s*/).filter(x => !!x);
56
+ const parts = labelSelector.split(/\s*,\s*/).filter((x) => !!x);
57
57
 
58
58
  for ( let rule of parts ) {
59
59
  rule = rule.trim();
@@ -224,5 +224,5 @@ export function matches(obj, selector, labelKey = 'metadata.labels') {
224
224
  }
225
225
 
226
226
  export function matching(ary, selector, labelKey) {
227
- return ary.filter(obj => matches(obj, selector, labelKey));
227
+ return ary.filter((obj) => matches(obj, selector, labelKey));
228
228
  }
package/utils/settings.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import { MANAGEMENT } from '@shell/config/types';
2
2
  import { Store } from 'vuex';
3
3
  import { DEFAULT_PERF_SETTING, SETTING } from '@shell/config/settings';
4
+ import { GC_PREFERENCES } from 'utils/gc/gc-types';
4
5
 
5
6
  export const fetchOrCreateSetting = async(store: Store<any>, id: string, val: string, save = true): Promise<any> => {
6
7
  let setting;
@@ -27,7 +28,7 @@ export const fetchOrCreateSetting = async(store: Store<any>, id: string, val: st
27
28
  * We fetch all settings - reality is Rancher will have done this already, so there's no overhead in doing
28
29
  * this - but if we fetch a specific setting that does not exist, we will get a 404, which we don't want
29
30
  */
30
- export const fetchSetting = async(store: Store<any>, id: string) => {
31
+ export const fetchSetting = async(store: Store<any>, id: string): Promise<any> => {
31
32
  const all = await store.dispatch('management/findAll', { type: MANAGEMENT.SETTING });
32
33
  const setting = (all || []).find((setting: any) => setting.id === id);
33
34
 
@@ -43,7 +44,21 @@ export const setSetting = async(store: Store<any>, id: string, val: string): Pro
43
44
  return setting;
44
45
  };
45
46
 
46
- export const getPerformanceSetting = (rootGetters: Record<string, (arg0: string, arg1: string) => any>) => {
47
+ export const getPerformanceSetting = (rootGetters: Record<string, (arg0: string, arg1: string) => any>): {
48
+ inactivity: {
49
+ enabled: boolean;
50
+ threshold: number;
51
+ };
52
+ incrementalLoading: {
53
+ enabled: boolean;
54
+ threshold: number;
55
+ };
56
+ manualRefresh: {};
57
+ disableWebsocketNotification: boolean;
58
+ garbageCollection: GC_PREFERENCES;
59
+ forceNsFilterV2: {};
60
+ advancedWorker: {};
61
+ } => {
47
62
  const perfSettingResource = rootGetters['management/byId'](MANAGEMENT.SETTING, SETTING.UI_PERFORMANCE);
48
63
  let perfSetting = {};
49
64
 
package/utils/socket.js CHANGED
@@ -49,6 +49,7 @@ export default class Socket extends EventTarget {
49
49
  disconnectCallBacks = [];
50
50
  disconnectedAt = 0;
51
51
  closingId = 0;
52
+ autoReconnectUrl = null;
52
53
 
53
54
  constructor(url, autoReconnect = true, frameTimeout = null, protocol = null, maxTries = null, idAsTimestamp = false) {
54
55
  super();
@@ -199,6 +200,13 @@ export default class Socket extends EventTarget {
199
200
  this.autoReconnect = autoReconnect;
200
201
  }
201
202
 
203
+ /**
204
+ * Supply an async fn that will provide a new url to reconnect to
205
+ */
206
+ setAutoReconnectUrl(autoReconnectUrl) {
207
+ this.autoReconnectUrl = autoReconnectUrl;
208
+ }
209
+
202
210
  // "Private"
203
211
  _close() {
204
212
  const socket = this.socket;
@@ -329,12 +337,28 @@ export default class Socket extends EventTarget {
329
337
  // dispatch an event which will trigger a growl from steve-plugin sockets warning users that we've given up trying to reconnect
330
338
  this.dispatchEvent(new CustomEvent(EVENT_DISCONNECT_ERROR));
331
339
  } else {
332
- this._log('closed. Attempting to reconnect');
333
- const delay = Math.max(1000, Math.min(1000 * this.tries, 30000));
334
-
335
- this.reconnectTimer = setTimeout(() => {
336
- this.connect();
337
- }, delay);
340
+ const reconnect = () => {
341
+ this._log('closed. Attempting to reconnect');
342
+ const delay = Math.max(1000, Math.min(1000 * this.tries, 30000));
343
+
344
+ this.reconnectTimer = setTimeout(() => {
345
+ this.connect();
346
+ }, delay);
347
+ };
348
+
349
+ if (this.autoReconnectUrl) {
350
+ this.autoReconnectUrl()
351
+ .then((url) => {
352
+ this.setUrl(url);
353
+
354
+ reconnect();
355
+ })
356
+ .catch((e) => {
357
+ console.error('Failed to fetch socket auto reconnect url', e); // eslint-disable-line no-console
358
+ });
359
+ } else {
360
+ reconnect();
361
+ }
338
362
  }
339
363
  } else {
340
364
  this.state = STATE_DISCONNECTED;
package/utils/sort.js CHANGED
@@ -217,7 +217,7 @@ export function sortableNumericSuffix(str) {
217
217
  return str;
218
218
  }
219
219
 
220
- return str.split(splitRegex).map(x => x.match(notNumericRegex) ? strPad(x, 10, '0') : x).join('').trim();
220
+ return str.split(splitRegex).map((x) => x.match(notNumericRegex) ? strPad(x, 10, '0') : x).join('').trim();
221
221
  }
222
222
 
223
223
  export function isNumeric(num) {
package/utils/string.js CHANGED
@@ -272,7 +272,7 @@ const quotedMatch = /[^."']+|"([^"]*)"|'([^']*)'/g;
272
272
  export function splitObjectPath(path) {
273
273
  if ( path.includes('"') || path.includes("'") ) {
274
274
  // Path with quoted section
275
- return path.match(quotedMatch).map(x => x.replace(/['"]/g, ''));
275
+ return path.match(quotedMatch).map((x) => x.replace(/['"]/g, ''));
276
276
  }
277
277
 
278
278
  // Regular path
package/utils/url.ts CHANGED
@@ -48,7 +48,7 @@ export function removeParam(url: string, key: string): string {
48
48
  return stringify(parsed);
49
49
  }
50
50
 
51
- export function parseLinkHeader(str: string) {
51
+ export function parseLinkHeader(str: string): Record<string, string> {
52
52
  const out: { [key: string]: string} = { };
53
53
  const lines = (str || '').split(',');
54
54
 
@@ -53,7 +53,7 @@ export interface ValidationOptions {
53
53
  }
54
54
 
55
55
  // "t" is the function name we use for getting a translated string
56
- export default function(t: Translation, { key = 'Value' }: ValidationOptions) {
56
+ export default function(t: Translation, { key = 'Value' }: ValidationOptions): unknown {
57
57
  // utility validators these validators only get used by other validators
58
58
  const startDot: ValidatorFactory = (label: string): Validator => (val: string) => val?.slice(0, 1) === '.' ? t(`validation.dns.${ label }.startDot`, { key }) : undefined;
59
59
 
@@ -103,7 +103,7 @@ export default function(t: Translation, { key = 'Value' }: ValidationOptions) {
103
103
 
104
104
  if (matchedChars) {
105
105
  return t('validation.chars', {
106
- key, count: matchedChars.length, chars: matchedChars.map(char => char === ' ' ? 'Space' : `"${ char }"`).join(', ')
106
+ key, count: matchedChars.length, chars: matchedChars.map((char) => char === ' ' ? 'Space' : `"${ char }"`).join(', ')
107
107
  });
108
108
  }
109
109
 
@@ -386,7 +386,7 @@ export default function(t: Translation, { key = 'Value' }: ValidationOptions) {
386
386
  };
387
387
 
388
388
  // The existing validator for clusterIp never actually returns an error
389
- const clusterIp: Validator = val => undefined;
389
+ const clusterIp: Validator = (val) => undefined;
390
390
 
391
391
  const backupTarget: Validator = (val) => {
392
392
  const parseValue = JSON.parse(val);
@@ -2,18 +2,18 @@ import { RBAC } from '@shell/config/types';
2
2
  import isEmpty from 'lodash/isEmpty';
3
3
 
4
4
  export function roleTemplateRules(rules = [], getters, errors, validatorArgs = []) {
5
- if (rules.some(rule => isEmpty(rule.verbs))) {
5
+ if (rules.some((rule) => isEmpty(rule.verbs))) {
6
6
  errors.push(getters['i18n/t']('validation.roleTemplate.roleTemplateRules.missingVerb'));
7
7
  }
8
8
 
9
9
  if (validatorArgs[0] === RBAC.ROLE) {
10
- if (rules.some(rule => isEmpty(rule.resources))) {
10
+ if (rules.some((rule) => isEmpty(rule.resources))) {
11
11
  errors.push(getters['i18n/t']('validation.roleTemplate.roleTemplateRules.missingResource'));
12
12
  }
13
- if (rules.some(rule => isEmpty(rule.apiGroups))) {
13
+ if (rules.some((rule) => isEmpty(rule.apiGroups))) {
14
14
  errors.push(getters['i18n/t']('validation.roleTemplate.roleTemplateRules.missingApiGroup'));
15
15
  }
16
- } else if (rules.some(rule => isEmpty(rule.resources) && isEmpty(rule.nonResourceURLs) && isEmpty(rule.apiGroups))) {
16
+ } else if (rules.some((rule) => isEmpty(rule.resources) && isEmpty(rule.nonResourceURLs) && isEmpty(rule.apiGroups))) {
17
17
  errors.push(getters['i18n/t']('validation.roleTemplate.roleTemplateRules.missingOneResource'));
18
18
  }
19
19
  }
package/utils/version.js CHANGED
@@ -17,7 +17,7 @@ export function parse(str) {
17
17
  }
18
18
 
19
19
  export function sortable(str) {
20
- return parse(str).map(x => sortableNumericSuffix(x)).join('.');
20
+ return parse(str).map((x) => sortableNumericSuffix(x)).join('.');
21
21
  }
22
22
 
23
23
  export function compare(in1, in2) {
@@ -125,3 +125,16 @@ export async function markReadReleaseNotes(store) {
125
125
  await store.dispatch('prefs/set', { key: READ_WHATS_NEW, value: getVersionInfo(store).fullVersion });
126
126
  }
127
127
  }
128
+
129
+ export function generateSupportLink(version) {
130
+ const defaultSupportURL = 'https://rancher.com/support-maintenance-terms';
131
+
132
+ if (!version || isDevBuild(version)) {
133
+ return defaultSupportURL;
134
+ }
135
+
136
+ const baseUrl = 'https://www.suse.com/suse-rancher/support-matrix/all-supported-versions/rancher-';
137
+ const formattedVersion = version.split('.').join('-');
138
+
139
+ return baseUrl + formattedVersion;
140
+ }
package/vue.config.js CHANGED
@@ -162,7 +162,7 @@ module.exports = function(dir, _appConfig) {
162
162
  const items = fs.readdirSync(path.relative(dir, './pkg'));
163
163
 
164
164
  // Ignore hidden folders
165
- items.filter(name => !name.startsWith('.')).forEach((name) => {
165
+ items.filter((name) => !name.startsWith('.')).forEach((name) => {
166
166
  const f = require(path.join(dir, 'pkg', name, 'package.json'));
167
167
 
168
168
  // Package file must have rancher field to be a plugin
@@ -200,7 +200,7 @@ module.exports = function(dir, _appConfig) {
200
200
  const pkgImport = new webpack.NormalModuleReplacementPlugin(/^@pkg/, (resource) => {
201
201
  const ctx = resource.context.split('/');
202
202
  // Find 'pkg' folder in the contxt
203
- const index = ctx.findIndex(s => s === 'pkg');
203
+ const index = ctx.findIndex((s) => s === 'pkg');
204
204
 
205
205
  if (index !== -1 && (index + 1) < ctx.length) {
206
206
  const pkg = ctx[index + 1];
@@ -271,6 +271,9 @@ module.exports = function(dir, _appConfig) {
271
271
  }
272
272
  const rancherEnv = process.env.RANCHER_ENV || 'web';
273
273
 
274
+ const loginLocaleSelector = process.env.LOGIN_LOCALE_SELECTOR || 'true';
275
+ const excludeOperatorPkg = process.env.EXCLUDE_OPERATOR_PKG || 'false';
276
+
274
277
  console.log(`API: '${ api }'. Env: '${ rancherEnv }'`); // eslint-disable-line no-console
275
278
  const proxy = {
276
279
  ...appConfig.proxies,
@@ -330,7 +333,7 @@ module.exports = function(dir, _appConfig) {
330
333
 
331
334
  server.websocketProxies.push({
332
335
  upgrade(req, socket, head) {
333
- const path = Object.keys(socketProxies).find(path => req.url.startsWith(path));
336
+ const path = Object.keys(socketProxies).find((path) => req.url.startsWith(path));
334
337
 
335
338
  if (path) {
336
339
  const proxy = socketProxies[path];
@@ -381,6 +384,7 @@ module.exports = function(dir, _appConfig) {
381
384
  config.resolve.alias['@pkg'] = path.join(dir, 'pkg');
382
385
  config.resolve.alias['./node_modules'] = path.join(dir, 'node_modules');
383
386
  config.resolve.alias['@components'] = COMPONENTS_DIR;
387
+ config.resolve.alias['vue$'] = dev ? path.resolve(process.cwd(), 'node_modules', 'vue') : 'vue';
384
388
  config.resolve.modules.push(__dirname);
385
389
  config.plugins.push(virtualModules);
386
390
  config.plugins.push(autoImport);
@@ -389,17 +393,19 @@ module.exports = function(dir, _appConfig) {
389
393
  // DefinePlugin does string replacement within our code. We may want to consider replacing it with something else. In code we'll see something like
390
394
  // process.env.commit even though process and env aren't even defined objects. This could cause people to be mislead.
391
395
  config.plugins.push(new webpack.DefinePlugin({
392
- 'process.client': JSON.stringify(true),
393
- 'process.env.commit': JSON.stringify(commit),
394
- 'process.env.version': JSON.stringify(dashboardVersion),
395
- 'process.env.dev': JSON.stringify(dev),
396
- 'process.env.pl': JSON.stringify(pl),
397
- 'process.env.perfTest': JSON.stringify(perfTest),
398
- 'process.env.rancherEnv': JSON.stringify(rancherEnv),
399
- 'process.env.harvesterPkgUrl': JSON.stringify(process.env.HARVESTER_PKG_URL),
400
- 'process.env.api': JSON.stringify(api),
396
+ 'process.client': JSON.stringify(true),
397
+ 'process.env.commit': JSON.stringify(commit),
398
+ 'process.env.version': JSON.stringify(dashboardVersion),
399
+ 'process.env.dev': JSON.stringify(dev),
400
+ 'process.env.pl': JSON.stringify(pl),
401
+ 'process.env.perfTest': JSON.stringify(perfTest),
402
+ 'process.env.loginLocaleSelector': JSON.stringify(loginLocaleSelector),
403
+ 'process.env.excludeOperatorPkg': JSON.stringify(excludeOperatorPkg),
404
+ 'process.env.rancherEnv': JSON.stringify(rancherEnv),
405
+ 'process.env.harvesterPkgUrl': JSON.stringify(process.env.HARVESTER_PKG_URL),
406
+ 'process.env.api': JSON.stringify(api),
401
407
  // Store the Router Base as env variable that we can use in `shell/config/router.js`
402
- 'process.env.routerBase': JSON.stringify(routerBasePath),
408
+ 'process.env.routerBase': JSON.stringify(routerBasePath),
403
409
 
404
410
  // This is a replacement of the nuxt publicRuntimeConfig
405
411
  'nuxt.publicRuntimeConfig': JSON.stringify({