@rancher/shell 0.2.3 → 0.2.4

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 (610) hide show
  1. package/assets/brand/csp/dark/rancher-logo.svg +148 -0
  2. package/assets/brand/csp/favicon.png +0 -0
  3. package/assets/brand/csp/metadata.json +3 -0
  4. package/assets/brand/csp/rancher-logo.svg +130 -0
  5. package/assets/styles/app.scss +2 -1
  6. package/assets/styles/global/_layout.scss +53 -0
  7. package/assets/styles/themes/_csp.scss +25 -0
  8. package/assets/styles/themes/_dark.scss +2 -1
  9. package/assets/styles/themes/_light.scss +2 -1
  10. package/assets/styles/vendor/vue-select.scss +0 -5
  11. package/assets/translations/en-us.yaml +45 -28
  12. package/chart/istio.vue +81 -22
  13. package/chart/logging/index.vue +20 -6
  14. package/chart/monitoring/alerting/index.vue +4 -1
  15. package/chart/monitoring/index.vue +41 -9
  16. package/chart/monitoring/prometheus/index.vue +33 -29
  17. package/chart/monitoring/steps/uninstall-v1.vue +8 -4
  18. package/chart/rancher-backup/S3.vue +43 -8
  19. package/chart/rancher-backup/index.vue +23 -5
  20. package/chart/rancher-gatekeeper.vue +10 -2
  21. package/cloud-credential/aws.vue +8 -2
  22. package/cloud-credential/digitalocean.vue +4 -1
  23. package/cloud-credential/gcp.vue +9 -2
  24. package/cloud-credential/generic.vue +6 -1
  25. package/cloud-credential/harvester.vue +4 -1
  26. package/cloud-credential/linode.vue +4 -1
  27. package/cloud-credential/s3.vue +4 -1
  28. package/components/.DS_Store +0 -0
  29. package/components/ActionDropdown.vue +4 -1
  30. package/components/ActionMenu.vue +17 -4
  31. package/components/AdvancedSection.vue +6 -1
  32. package/components/Alert.vue +5 -1
  33. package/components/AssignTo.vue +24 -6
  34. package/components/AsyncButton.vue +10 -0
  35. package/components/AwsComplianceBanner.vue +4 -1
  36. package/components/BackLink.vue +5 -1
  37. package/components/BannerGraphic.vue +16 -4
  38. package/components/BrandImage.vue +4 -1
  39. package/components/ButtonDropdown.vue +10 -3
  40. package/components/ButtonGroup.vue +17 -4
  41. package/components/Carousel.vue +26 -8
  42. package/components/ChartHeading.vue +5 -1
  43. package/components/ChartReadme.vue +17 -5
  44. package/components/ClusterBadge.vue +5 -1
  45. package/components/ClusterProviderIcon.vue +15 -3
  46. package/components/Collapse.vue +17 -5
  47. package/components/CollapsibleCard.vue +10 -4
  48. package/components/CommunityLinks.vue +32 -9
  49. package/components/CompoundStatusBadge.vue +4 -1
  50. package/components/ContainerResourceLimit.vue +12 -3
  51. package/components/CopyToClipboardText.vue +10 -2
  52. package/components/CountBox.vue +13 -3
  53. package/components/CountGauge.vue +28 -5
  54. package/components/CruResource.vue +88 -23
  55. package/components/CruResourceFooter.vue +1 -1
  56. package/components/DashboardMetrics.vue +12 -3
  57. package/components/DashboardOptions.vue +14 -3
  58. package/components/DetailText.vue +28 -6
  59. package/components/DetailTop.vue +57 -12
  60. package/components/Dialog.vue +17 -5
  61. package/components/EmberPage.vue +23 -5
  62. package/components/EmberPageView.vue +4 -1
  63. package/components/EtcdInfoBanner.vue +5 -1
  64. package/components/ExplorerMembers.vue +7 -9
  65. package/components/ExplorerProjectsNamespaces.vue +42 -10
  66. package/components/FileDiff.vue +5 -1
  67. package/components/FixedBanner.vue +27 -7
  68. package/components/Flag.vue +8 -2
  69. package/components/Glance.vue +11 -2
  70. package/components/GlobalRoleBindings.vue +24 -5
  71. package/components/GradientBox.vue +5 -1
  72. package/components/GrafanaDashboard.vue +19 -5
  73. package/components/GrowlManager.vue +27 -6
  74. package/components/HardwareResourceGauge.vue +8 -2
  75. package/components/HarvesterServiceAddOnConfig.vue +4 -1
  76. package/components/IconMessage.vue +8 -2
  77. package/components/Import.vue +37 -8
  78. package/components/IndentedPanel.vue +4 -1
  79. package/components/InfoBox.vue +8 -2
  80. package/components/KeyValueView.vue +29 -7
  81. package/components/LandingPagePreference.vue +13 -2
  82. package/components/LazyImage.vue +5 -1
  83. package/components/Loading.vue +13 -3
  84. package/components/LocaleSelector.vue +10 -2
  85. package/components/Markdown.vue +5 -1
  86. package/components/MessageLink.vue +19 -4
  87. package/components/ModalWithCard.vue +24 -8
  88. package/components/MoveModal.vue +35 -7
  89. package/components/PercentageBar.vue +9 -2
  90. package/components/ProgressBarMulti.vue +4 -1
  91. package/components/PromptChangePassword.vue +17 -4
  92. package/components/PromptModal.vue +7 -1
  93. package/components/PromptRemove.vue +31 -10
  94. package/components/PromptRestore.vue +35 -10
  95. package/components/Questions/Array.vue +4 -1
  96. package/components/Questions/Boolean.vue +4 -1
  97. package/components/Questions/Enum.vue +4 -1
  98. package/components/Questions/Float.vue +4 -1
  99. package/components/Questions/Int.vue +4 -1
  100. package/components/Questions/QuestionMap.vue +4 -1
  101. package/components/Questions/Reference.vue +8 -2
  102. package/components/Questions/String.vue +4 -1
  103. package/components/Questions/index.vue +10 -2
  104. package/components/Random.vue +11 -3
  105. package/components/RelatedResources.vue +8 -2
  106. package/components/RelatedWorkloadsTable.vue +5 -1
  107. package/components/ResourceCancelModal.vue +15 -3
  108. package/components/ResourceDetail/Masthead.vue +31 -7
  109. package/components/ResourceList/Masthead.vue +6 -4
  110. package/components/ResourceList/ResourceLoadingIndicator.vue +8 -2
  111. package/components/ResourceList/index.vue +11 -8
  112. package/components/ResourceSummary.vue +13 -3
  113. package/components/ResourceTable.vue +59 -11
  114. package/components/ResourceYaml.vue +8 -2
  115. package/components/RoleBindings.vue +20 -3
  116. package/components/SelectIconGrid.vue +29 -7
  117. package/components/SimpleBox.vue +14 -3
  118. package/components/SingleClusterInfo.vue +40 -9
  119. package/components/SortableTable/THead.vue +29 -8
  120. package/components/SortableTable/filtering.js +7 -0
  121. package/components/SortableTable/index.vue +204 -45
  122. package/components/Tabbed/Tab.vue +9 -2
  123. package/components/Tabbed/index.vue +32 -7
  124. package/components/TableSparkLine.vue +4 -1
  125. package/components/Tip.vue +4 -1
  126. package/components/Wizard.vue +105 -23
  127. package/components/YamlEditor.vue +5 -1
  128. package/components/__tests__/.DS_Store +0 -0
  129. package/components/auth/AllowedPrincipals.vue +21 -5
  130. package/components/auth/AuthBanner.vue +21 -5
  131. package/components/auth/AzureWarning.vue +5 -1
  132. package/components/auth/Principal.vue +37 -9
  133. package/components/auth/RoleDetailEdit.vue +34 -10
  134. package/components/auth/SelectPrincipal.vue +20 -3
  135. package/components/auth/login/github.vue +5 -1
  136. package/components/auth/login/ldap.vue +10 -2
  137. package/components/auth/login/oauth.vue +6 -1
  138. package/components/auth/login/oidc.vue +6 -1
  139. package/components/auth/login/saml.vue +6 -1
  140. package/components/fleet/FleetBundles.vue +9 -2
  141. package/components/fleet/FleetClusters.vue +29 -6
  142. package/components/fleet/FleetIntro.vue +5 -2
  143. package/components/fleet/FleetRepos.vue +23 -4
  144. package/components/fleet/FleetStatus.vue +16 -4
  145. package/components/fleet/FleetSummary.vue +10 -2
  146. package/components/fleet/ForceDirectedTreeChart/index.vue +5 -3
  147. package/components/fleet/ResourcesSummary.vue +5 -1
  148. package/components/form/ArrayList.vue +31 -8
  149. package/components/form/ArrayListGrouped.vue +9 -3
  150. package/components/form/ArrayListSelect.vue +6 -1
  151. package/components/form/BannerSettings.vue +8 -2
  152. package/components/form/ChangePassword.vue +50 -10
  153. package/components/form/ColorInput.vue +28 -5
  154. package/components/form/Command.vue +5 -2
  155. package/components/form/EnvVars.vue +4 -1
  156. package/components/form/Error.vue +10 -2
  157. package/components/form/FileImageSelector.vue +1 -1
  158. package/components/form/FileSelector.vue +8 -2
  159. package/components/form/Footer.vue +14 -4
  160. package/components/form/GithubPicker.vue +16 -9
  161. package/components/form/HookOption.vue +5 -1
  162. package/components/form/InputWithSelect.vue +1 -1
  163. package/components/form/KeyValue.vue +81 -19
  164. package/components/form/LabeledSelect.vue +55 -8
  165. package/components/form/Labels.vue +1 -1
  166. package/components/form/LifecycleHooks.vue +10 -2
  167. package/components/form/MatchExpressions.vue +11 -3
  168. package/components/form/Members/ClusterPermissionsEditor.vue +21 -4
  169. package/components/form/Members/MembershipEditor.vue +11 -2
  170. package/components/form/NameNsDescription.vue +16 -10
  171. package/components/form/Networking.vue +3 -3
  172. package/components/form/NodeAffinity.vue +4 -1
  173. package/components/form/NodeScheduling.vue +5 -1
  174. package/components/form/Password.vue +32 -7
  175. package/components/form/PlusMinus.vue +18 -3
  176. package/components/form/PodAffinity.vue +12 -5
  177. package/components/form/PodSecurity.vue +20 -4
  178. package/components/form/Ports.vue +37 -11
  179. package/components/form/Probe.vue +18 -4
  180. package/components/form/ProjectMemberEditor.vue +24 -4
  181. package/components/form/ResourceQuota/NamespaceRow.vue +4 -1
  182. package/components/form/ResourceQuota/Project.vue +7 -1
  183. package/components/form/ResourceQuota/ProjectRow.vue +11 -2
  184. package/components/form/ResourceSelector.vue +145 -0
  185. package/components/form/ResourceTabs/index.vue +38 -7
  186. package/components/form/RuleSelector.vue +15 -4
  187. package/components/form/SecretSelector.vue +4 -1
  188. package/components/form/Security.vue +2 -2
  189. package/components/form/Select.vue +8 -3
  190. package/components/form/SelectOrCreateAuthSecret.vue +43 -9
  191. package/components/form/ServiceNameSelect.vue +2 -2
  192. package/components/form/ServicePorts.vue +58 -17
  193. package/components/form/Tolerations.vue +34 -7
  194. package/components/form/ValueFromResource.vue +10 -2
  195. package/components/form/WorkloadPorts.vue +36 -8
  196. package/components/form/__tests__/MatchExpressions.test.ts +1 -2
  197. package/components/formatter/AppSummaryGraph.vue +24 -6
  198. package/components/formatter/BadgeStateFormatter.vue +4 -1
  199. package/components/formatter/Checked.vue +4 -1
  200. package/components/formatter/ClusterLink.vue +4 -1
  201. package/components/formatter/Date.vue +1 -1
  202. package/components/formatter/DelayedValue.vue +4 -1
  203. package/components/formatter/Endpoints.vue +5 -1
  204. package/components/formatter/ExternalLink.vue +5 -1
  205. package/components/formatter/FleetSummaryGraph.vue +20 -5
  206. package/components/formatter/IconText.vue +4 -1
  207. package/components/formatter/ImagePercentageBar.vue +5 -1
  208. package/components/formatter/IngressFullPath.vue +6 -1
  209. package/components/formatter/IngressTarget.vue +22 -5
  210. package/components/formatter/InternalExternalIP.vue +12 -2
  211. package/components/formatter/KeyValue.vue +5 -1
  212. package/components/formatter/Link.vue +30 -6
  213. package/components/formatter/LinkDetail.vue +4 -1
  214. package/components/formatter/LinkDetailImage.vue +1 -1
  215. package/components/formatter/ListLink.vue +10 -2
  216. package/components/formatter/ListLinkDetail.vue +6 -1
  217. package/components/formatter/LiveDate.vue +13 -3
  218. package/components/formatter/LiveExpiryDate.vue +18 -4
  219. package/components/formatter/LivePodRestarts.vue +4 -1
  220. package/components/formatter/MachineSummaryGraph.vue +25 -6
  221. package/components/formatter/Number.vue +4 -1
  222. package/components/formatter/PodsUsage.vue +4 -1
  223. package/components/formatter/Principal.vue +5 -1
  224. package/components/formatter/PrincipalGroupBindings.vue +4 -1
  225. package/components/formatter/ReceiverIcons.vue +9 -3
  226. package/components/formatter/RunBookLink.vue +6 -1
  227. package/components/formatter/Scale.vue +45 -10
  228. package/components/formatter/ScanResult.vue +4 -1
  229. package/components/formatter/SecretData.vue +5 -2
  230. package/components/formatter/SecretType.vue +4 -1
  231. package/components/formatter/ServiceTargets.vue +16 -4
  232. package/components/formatter/Shortened.vue +8 -2
  233. package/components/formatter/VirtualServiceGateways.vue +8 -2
  234. package/components/formatter/Weight.vue +19 -4
  235. package/components/formatter/WorkloadDetailEndpoints.vue +5 -1
  236. package/components/formatter/WorkloadHealthScale.vue +42 -8
  237. package/components/graph/AspectPreserver.vue +14 -3
  238. package/components/graph/Bar.vue +14 -3
  239. package/components/graph/Circle.vue +36 -7
  240. package/components/graph/HalfCircle.vue +6 -1
  241. package/components/graph/LinePlot.vue +3 -6
  242. package/components/graph/ProgressArc.vue +8 -2
  243. package/components/nav/GlobalLoading.vue +4 -1
  244. package/components/nav/Group.vue +39 -9
  245. package/components/nav/Header.vue +154 -37
  246. package/components/nav/Jump.vue +6 -2
  247. package/components/nav/NamespaceFilter.vue +112 -24
  248. package/components/nav/TopLevelMenu.vue +108 -24
  249. package/components/nav/Type.vue +18 -4
  250. package/components/nav/WindowManager/ChartReadme.vue +4 -1
  251. package/components/nav/WindowManager/ContainerLogs.vue +92 -19
  252. package/components/nav/WindowManager/ContainerShell.vue +26 -6
  253. package/components/nav/WindowManager/Window.vue +8 -2
  254. package/components/nav/WindowManager/index.vue +17 -4
  255. package/config/labels-annotations.js +5 -42
  256. package/config/private-label.js +5 -2
  257. package/config/product/explorer.js +8 -2
  258. package/config/roles.ts +2 -1
  259. package/config/{settings.js → settings.ts} +33 -50
  260. package/config/types.js +2 -0
  261. package/content/docs/en-us/getting-started.md +3 -3
  262. package/content/docs/en-us/whats-new.md +9 -123
  263. package/core/plugins.js +11 -8
  264. package/creators/app/{files/.eslintignore → .eslintignore} +0 -0
  265. package/creators/app/{files/.eslintrc.js → .eslintrc.js} +0 -0
  266. package/creators/app/{files/.vscode → .vscode}/settings.json +0 -0
  267. package/creators/app/{files/babel.config.js → babel.config.js} +0 -0
  268. package/creators/app/init +17 -16
  269. package/creators/app/{files/nuxt.config.js → nuxt.config.js} +0 -0
  270. package/creators/app/package.json +1 -7
  271. package/creators/app/{files/tsconfig.json → tsconfig.json} +1 -2
  272. package/creators/pkg/{files/babel.config.js → babel.config.js} +0 -0
  273. package/creators/pkg/{files/index.ts → index.ts} +0 -0
  274. package/creators/pkg/init +1 -1
  275. package/creators/pkg/nuxt.config.js +6 -0
  276. package/creators/pkg/package-lock.json +37 -0
  277. package/creators/pkg/package.json +1 -1
  278. package/creators/pkg/{files/tsconfig.json → tsconfig.json} +12 -13
  279. package/creators/pkg/{files/vue.config.js → vue.config.js} +0 -0
  280. package/detail/autoscaling.horizontalpodautoscaler/index.vue +12 -3
  281. package/detail/catalog.cattle.io.app.vue +41 -8
  282. package/detail/catalog.cattle.io.clusterrepo.vue +4 -1
  283. package/detail/cis.cattle.io.clusterscan.vue +23 -5
  284. package/detail/configmap.vue +18 -4
  285. package/detail/constraints.gatekeeper.sh.constraint.vue +4 -1
  286. package/detail/fleet.cattle.io.cluster.vue +14 -3
  287. package/detail/fleet.cattle.io.clustergroup.vue +9 -2
  288. package/detail/fleet.cattle.io.gitrepo.vue +16 -3
  289. package/detail/harvesterhci.io.management.cluster.vue +5 -1
  290. package/detail/helm.cattle.io.projecthelmchart.vue +49 -13
  291. package/detail/management.cattle.io.fleetworkspace.vue +19 -4
  292. package/detail/management.cattle.io.roletemplate.vue +4 -1
  293. package/detail/management.cattle.io.user.vue +26 -5
  294. package/detail/namespace.vue +6 -4
  295. package/detail/networking.k8s.io.ingress.vue +16 -3
  296. package/detail/node.vue +83 -18
  297. package/detail/pod.vue +27 -5
  298. package/detail/provisioning.cattle.io.cluster.vue +195 -43
  299. package/detail/secret.vue +78 -19
  300. package/detail/service.vue +9 -2
  301. package/detail/workload/index.vue +81 -17
  302. package/dialog/AddClusterMemberDialog.vue +25 -6
  303. package/dialog/AddCustomBadgeDialog.vue +43 -10
  304. package/dialog/AddProjectMemberDialog.vue +27 -7
  305. package/dialog/AddonConfigConfirmationDialog.vue +17 -4
  306. package/dialog/DiagnosticTimingsDialog.vue +27 -6
  307. package/dialog/DrainNode.vue +46 -11
  308. package/dialog/ForceMachineRemoveDialog.vue +35 -8
  309. package/dialog/GenericPrompt.vue +28 -7
  310. package/dialog/RollbackWorkloadDialog.vue +45 -11
  311. package/dialog/RotateCertificatesDialog.vue +31 -6
  312. package/dialog/RotateEncryptionKeyDialog.vue +41 -10
  313. package/dialog/SaveAsRKETemplateDialog.vue +31 -7
  314. package/dialog/ScaleMachineDownDialog.vue +13 -3
  315. package/edit/__tests__/management.cattle.io.setting.test.ts +87 -0
  316. package/edit/auth/azuread.vue +20 -6
  317. package/edit/auth/github.vue +52 -11
  318. package/edit/auth/googleoauth.vue +81 -17
  319. package/edit/auth/ldap/config.vue +164 -31
  320. package/edit/auth/ldap/index.vue +29 -7
  321. package/edit/auth/oidc.vue +36 -8
  322. package/edit/auth/saml.vue +57 -12
  323. package/edit/autoscaling.horizontalpodautoscaler/external-metric.vue +9 -2
  324. package/edit/autoscaling.horizontalpodautoscaler/index.vue +23 -6
  325. package/edit/autoscaling.horizontalpodautoscaler/metric-target.vue +8 -2
  326. package/edit/autoscaling.horizontalpodautoscaler/metrics-row.vue +16 -4
  327. package/edit/autoscaling.horizontalpodautoscaler/object-metric.vue +13 -3
  328. package/edit/autoscaling.horizontalpodautoscaler/pod-metric.vue +9 -2
  329. package/edit/autoscaling.horizontalpodautoscaler/resource-metric.vue +6 -1
  330. package/edit/catalog.cattle.io.clusterrepo.vue +15 -3
  331. package/edit/cis.cattle.io.clusterscan.vue +53 -11
  332. package/edit/cis.cattle.io.clusterscanbenchmark.vue +15 -3
  333. package/edit/cis.cattle.io.clusterscanprofile.vue +13 -3
  334. package/edit/configmap.vue +5 -1
  335. package/edit/constraints.gatekeeper.sh.constraint/index.vue +40 -9
  336. package/edit/fleet.cattle.io.cluster.vue +6 -2
  337. package/edit/fleet.cattle.io.clustergroup.vue +12 -3
  338. package/edit/fleet.cattle.io.gitrepo.vue +25 -5
  339. package/edit/group.principal.vue +6 -1
  340. package/edit/harvesterhci.io.management.cluster.vue +22 -5
  341. package/edit/k8s.cni.cncf.io.networkattachmentdefinition.vue +11 -2
  342. package/edit/logging-flow/Match.vue +2 -2
  343. package/edit/logging-flow/index.vue +67 -14
  344. package/edit/logging.banzaicloud.io.output/index.vue +37 -8
  345. package/edit/logging.banzaicloud.io.output/providers/awsElasticsearch.vue +7 -2
  346. package/edit/logging.banzaicloud.io.output/providers/azurestorage.vue +19 -4
  347. package/edit/logging.banzaicloud.io.output/providers/cloudwatch.vue +24 -4
  348. package/edit/logging.banzaicloud.io.output/providers/datadog.vue +20 -5
  349. package/edit/logging.banzaicloud.io.output/providers/elasticsearch.vue +21 -5
  350. package/edit/logging.banzaicloud.io.output/providers/file.vue +6 -1
  351. package/edit/logging.banzaicloud.io.output/providers/forward.vue +8 -3
  352. package/edit/logging.banzaicloud.io.output/providers/gcs.vue +25 -5
  353. package/edit/logging.banzaicloud.io.output/providers/gelf.vue +46 -8
  354. package/edit/logging.banzaicloud.io.output/providers/kafka.vue +26 -6
  355. package/edit/logging.banzaicloud.io.output/providers/kinesisStream.vue +7 -2
  356. package/edit/logging.banzaicloud.io.output/providers/logdna.vue +20 -4
  357. package/edit/logging.banzaicloud.io.output/providers/logz.vue +8 -3
  358. package/edit/logging.banzaicloud.io.output/providers/loki.vue +34 -8
  359. package/edit/logging.banzaicloud.io.output/providers/newrelic.vue +1 -1
  360. package/edit/logging.banzaicloud.io.output/providers/s3.vue +25 -5
  361. package/edit/logging.banzaicloud.io.output/providers/splunkHec.vue +33 -7
  362. package/edit/logging.banzaicloud.io.output/providers/syslog.vue +57 -12
  363. package/edit/management.cattle.io.clusterroletemplatebinding.vue +10 -2
  364. package/edit/management.cattle.io.fleetworkspace.vue +17 -4
  365. package/edit/management.cattle.io.project.vue +7 -1
  366. package/edit/management.cattle.io.roletemplate.vue +4 -1
  367. package/edit/management.cattle.io.setting.vue +71 -30
  368. package/edit/management.cattle.io.user.vue +4 -1
  369. package/edit/monitoring.coreos.com.alertmanagerconfig/auth.vue +24 -6
  370. package/edit/monitoring.coreos.com.alertmanagerconfig/index.vue +24 -5
  371. package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +29 -6
  372. package/edit/monitoring.coreos.com.alertmanagerconfig/tls.vue +12 -3
  373. package/edit/monitoring.coreos.com.alertmanagerconfig/types/email.vue +50 -9
  374. package/edit/monitoring.coreos.com.alertmanagerconfig/types/opsgenie.vue +31 -6
  375. package/edit/monitoring.coreos.com.alertmanagerconfig/types/pagerduty.vue +29 -6
  376. package/edit/monitoring.coreos.com.alertmanagerconfig/types/slack.vue +8 -2
  377. package/edit/monitoring.coreos.com.alertmanagerconfig/types/webhook.vue +36 -7
  378. package/edit/monitoring.coreos.com.prometheusrule/AlertingRule.vue +24 -6
  379. package/edit/monitoring.coreos.com.prometheusrule/GroupRules.vue +16 -6
  380. package/edit/monitoring.coreos.com.prometheusrule/index.vue +10 -2
  381. package/edit/monitoring.coreos.com.receiver/auth.vue +36 -7
  382. package/edit/monitoring.coreos.com.receiver/index.vue +53 -11
  383. package/edit/monitoring.coreos.com.receiver/tls.vue +22 -4
  384. package/edit/monitoring.coreos.com.receiver/types/email.vue +48 -8
  385. package/edit/monitoring.coreos.com.receiver/types/opsgenie.vue +32 -6
  386. package/edit/monitoring.coreos.com.receiver/types/pagerduty.vue +22 -4
  387. package/edit/monitoring.coreos.com.receiver/types/slack.vue +4 -1
  388. package/edit/monitoring.coreos.com.receiver/types/webhook.banner.vue +5 -1
  389. package/edit/monitoring.coreos.com.receiver/types/webhook.vue +31 -6
  390. package/edit/monitoring.coreos.com.route.vue +71 -15
  391. package/edit/namespace.vue +35 -7
  392. package/edit/networking.istio.io.destinationrule/LoadBalancer.vue +12 -3
  393. package/edit/networking.istio.io.destinationrule/index.vue +5 -3
  394. package/edit/networking.k8s.io.ingress/Certificate.vue +10 -2
  395. package/edit/networking.k8s.io.ingress/Certificates.vue +6 -1
  396. package/edit/networking.k8s.io.ingress/DefaultBackend.vue +16 -4
  397. package/edit/networking.k8s.io.ingress/Rule.vue +21 -5
  398. package/edit/networking.k8s.io.ingress/RulePath.vue +27 -6
  399. package/edit/networking.k8s.io.ingress/Rules.vue +7 -1
  400. package/edit/networking.k8s.io.ingress/index.vue +52 -9
  401. package/edit/networking.k8s.io.networkpolicy/PolicyRule.vue +20 -4
  402. package/edit/networking.k8s.io.networkpolicy/PolicyRuleTarget.vue +8 -2
  403. package/edit/networking.k8s.io.networkpolicy/index.vue +36 -8
  404. package/edit/node.vue +13 -3
  405. package/edit/persistentvolume/index.vue +48 -8
  406. package/edit/persistentvolume/plugins/awsElasticBlockStore.vue +19 -3
  407. package/edit/persistentvolume/plugins/azureDisk.vue +20 -3
  408. package/edit/persistentvolume/plugins/azureFile.vue +18 -3
  409. package/edit/persistentvolume/plugins/cephfs.vue +35 -6
  410. package/edit/persistentvolume/plugins/cinder.vue +24 -4
  411. package/edit/persistentvolume/plugins/csi.vue +72 -12
  412. package/edit/persistentvolume/plugins/fc.vue +23 -4
  413. package/edit/persistentvolume/plugins/flexVolume.vue +30 -5
  414. package/edit/persistentvolume/plugins/flocker.vue +12 -2
  415. package/edit/persistentvolume/plugins/gcePersistentDisk.vue +19 -3
  416. package/edit/persistentvolume/plugins/glusterfs.vue +12 -2
  417. package/edit/persistentvolume/plugins/hostPath.vue +12 -2
  418. package/edit/persistentvolume/plugins/iscsi.vue +54 -9
  419. package/edit/persistentvolume/plugins/local.vue +6 -1
  420. package/edit/persistentvolume/plugins/longhorn.vue +13 -2
  421. package/edit/persistentvolume/plugins/nfs.vue +12 -2
  422. package/edit/persistentvolume/plugins/photonPersistentDisk.vue +12 -2
  423. package/edit/persistentvolume/plugins/portworxVolume.vue +12 -2
  424. package/edit/persistentvolume/plugins/quobyte.vue +24 -4
  425. package/edit/persistentvolume/plugins/rbd.vue +47 -8
  426. package/edit/persistentvolume/plugins/scaleIO.vue +54 -9
  427. package/edit/persistentvolume/plugins/storageos.vue +30 -5
  428. package/edit/persistentvolume/plugins/vsphereVolume.vue +24 -4
  429. package/edit/persistentvolumeclaim.vue +69 -15
  430. package/edit/policy.poddisruptionbudget.vue +149 -0
  431. package/edit/provisioning.cattle.io.cluster/ACE.vue +6 -1
  432. package/edit/provisioning.cattle.io.cluster/AgentEnv.vue +4 -1
  433. package/edit/provisioning.cattle.io.cluster/CustomCommand.vue +61 -15
  434. package/edit/provisioning.cattle.io.cluster/DrainOptions.vue +24 -4
  435. package/edit/provisioning.cattle.io.cluster/Labels.vue +4 -1
  436. package/edit/provisioning.cattle.io.cluster/MachinePool.vue +31 -8
  437. package/edit/provisioning.cattle.io.cluster/RegistryConfigs.vue +16 -3
  438. package/edit/provisioning.cattle.io.cluster/RegistryMirrors.vue +4 -1
  439. package/edit/provisioning.cattle.io.cluster/S3Config.vue +35 -6
  440. package/edit/provisioning.cattle.io.cluster/SelectCredential.vue +21 -5
  441. package/edit/provisioning.cattle.io.cluster/import.vue +23 -5
  442. package/edit/provisioning.cattle.io.cluster/index.vue +9 -0
  443. package/edit/provisioning.cattle.io.cluster/rke2.vue +203 -64
  444. package/edit/resources.cattle.io.backup.vue +42 -8
  445. package/edit/resources.cattle.io.restore.vue +53 -11
  446. package/edit/secret/basic.vue +12 -2
  447. package/edit/secret/index.vue +29 -7
  448. package/edit/secret/registry.vue +22 -4
  449. package/edit/secret/ssh.vue +10 -2
  450. package/edit/secret/tls.vue +10 -2
  451. package/edit/service.vue +12 -3
  452. package/edit/serviceaccount.vue +6 -3
  453. package/edit/storage.k8s.io.storageclass/index.vue +15 -3
  454. package/edit/storage.k8s.io.storageclass/provisioners/custom.vue +6 -1
  455. package/edit/storage.k8s.io.storageclass/provisioners/driver.longhorn.io.vue +6 -1
  456. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/aws-ebs.vue +20 -3
  457. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/azure-disk.vue +12 -2
  458. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/azure-file.vue +18 -3
  459. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/cinder.vue +13 -2
  460. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/gce-pd.vue +14 -2
  461. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/glusterfs.vue +54 -9
  462. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/portworx-volume.vue +42 -7
  463. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/quobyte.vue +48 -8
  464. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/rbd.vue +66 -11
  465. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/scaleio.vue +48 -8
  466. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/storageos.vue +30 -5
  467. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/vsphere-volume.vue +36 -6
  468. package/edit/token.vue +48 -10
  469. package/edit/workload/Job.vue +20 -5
  470. package/edit/workload/Upgrading.vue +28 -7
  471. package/edit/workload/index.vue +244 -48
  472. package/edit/workload/storage/azureDisk.vue +5 -1
  473. package/edit/workload/storage/azureFile.vue +5 -1
  474. package/edit/workload/storage/csi/driver.longhorn.io.vue +6 -1
  475. package/edit/workload/storage/csi/index.vue +9 -2
  476. package/edit/workload/storage/ephemeralVolume/index.vue +38 -8
  477. package/edit/workload/storage/gcePersistentDisk.vue +10 -2
  478. package/edit/workload/storage/hostPath.vue +18 -3
  479. package/edit/workload/storage/persistentVolumeClaim/index.vue +4 -1
  480. package/edit/workload/storage/persistentVolumeClaim/persistentvolumeclaim.vue +26 -5
  481. package/edit/workload/storage/vsphereVolume.vue +10 -2
  482. package/layouts/blank.vue +1 -1
  483. package/layouts/default.vue +60 -65
  484. package/layouts/error.vue +25 -5
  485. package/layouts/home.vue +17 -4
  486. package/layouts/plain.vue +13 -3
  487. package/layouts/unauthenticated.vue +1 -1
  488. package/list/catalog.cattle.io.app.vue +15 -2
  489. package/list/catalog.cattle.io.clusterrepo.vue +5 -0
  490. package/list/cis.cattle.io.clusterscan.vue +6 -0
  491. package/list/fleet.cattle.io.bundle.vue +14 -2
  492. package/list/fleet.cattle.io.cluster.vue +10 -1
  493. package/list/fleet.cattle.io.clustergroup.vue +14 -2
  494. package/list/fleet.cattle.io.clusterregistrationtoken.vue +11 -3
  495. package/list/fleet.cattle.io.gitrepo.vue +6 -0
  496. package/list/group.principal.vue +11 -1
  497. package/list/harvesterhci.io.management.cluster.vue +25 -6
  498. package/list/helm.cattle.io.projecthelmchart.vue +23 -5
  499. package/list/logging.banzaicloud.io.clusterflow.vue +11 -1
  500. package/list/logging.banzaicloud.io.flow.vue +11 -1
  501. package/list/management.cattle.io.cluster.vue +12 -1
  502. package/list/management.cattle.io.feature.vue +71 -15
  503. package/list/management.cattle.io.setting.vue +44 -10
  504. package/list/management.cattle.io.user.vue +12 -1
  505. package/list/monitoring.coreos.com.alertmanagerconfig.vue +6 -0
  506. package/list/namespace.vue +8 -0
  507. package/list/node.vue +14 -2
  508. package/list/persistentvolume.vue +13 -1
  509. package/list/persistentvolumeclaim.vue +6 -0
  510. package/list/provisioning.cattle.io.cluster.vue +23 -4
  511. package/list/service.vue +6 -0
  512. package/list/ui.cattle.io.navlink.vue +20 -3
  513. package/list/workload.vue +15 -2
  514. package/machine-config/amazonec2.vue +12 -3
  515. package/machine-config/azure.vue +16 -7
  516. package/machine-config/digitalocean.vue +4 -1
  517. package/machine-config/generic.vue +4 -1
  518. package/machine-config/harvester.vue +23 -6
  519. package/machine-config/linode.vue +4 -1
  520. package/machine-config/vmwarevsphere.vue +91 -21
  521. package/mixins/__tests__/create-edit-view.test.ts +19 -0
  522. package/mixins/brand.js +12 -3
  523. package/mixins/form-validation.js +108 -33
  524. package/models/clusterroletemplatebinding.js +2 -5
  525. package/models/management.cattle.io.cluster.js +7 -1
  526. package/models/secret.js +9 -1
  527. package/models/workload.js +3 -3
  528. package/nuxt.config.js +28 -10
  529. package/package.json +2 -2
  530. package/pages/about.vue +41 -9
  531. package/pages/account/index.vue +20 -5
  532. package/pages/auth/login.vue +83 -22
  533. package/pages/auth/logout.vue +1 -1
  534. package/pages/auth/setup.vue +48 -12
  535. package/pages/auth/verify.vue +1 -1
  536. package/pages/c/_cluster/_product/members/index.vue +3 -1
  537. package/pages/c/_cluster/_product/namespaces.vue +4 -1
  538. package/pages/c/_cluster/apps/charts/chart.vue +124 -27
  539. package/pages/c/_cluster/apps/charts/index.vue +35 -8
  540. package/pages/c/_cluster/apps/charts/install.vue +200 -48
  541. package/pages/c/_cluster/auth/config/_id.vue +4 -1
  542. package/pages/c/_cluster/auth/config/index.vue +6 -2
  543. package/pages/c/_cluster/auth/group.principal/assign-edit.vue +10 -5
  544. package/pages/c/_cluster/auth/roles/index.vue +33 -7
  545. package/pages/c/_cluster/explorer/ConfigBadge.vue +4 -1
  546. package/pages/c/_cluster/explorer/index.vue +109 -24
  547. package/pages/c/_cluster/explorer/tools/index.vue +76 -17
  548. package/pages/c/_cluster/explorer/tools/pages/_page.vue +4 -1
  549. package/pages/c/_cluster/fleet/index.vue +9 -2
  550. package/pages/c/_cluster/gatekeeper/index.vue +4 -1
  551. package/pages/c/_cluster/istio/index.vue +20 -8
  552. package/pages/c/_cluster/legacy/pages/_page.vue +4 -1
  553. package/pages/c/_cluster/legacy/project/_page.vue +4 -1
  554. package/pages/c/_cluster/legacy/project/index.vue +4 -1
  555. package/pages/c/_cluster/legacy/project/pipelines.vue +27 -5
  556. package/pages/c/_cluster/logging/index.vue +4 -1
  557. package/pages/c/_cluster/longhorn/index.vue +16 -5
  558. package/pages/c/_cluster/manager/cloudCredential/index.vue +15 -3
  559. package/pages/c/_cluster/monitoring/alertmanagerconfig/_alertmanagerconfigid/receiver.vue +1 -1
  560. package/pages/c/_cluster/monitoring/index.vue +14 -5
  561. package/pages/c/_cluster/monitoring/monitor/index.vue +24 -6
  562. package/pages/c/_cluster/monitoring/route-receiver/index.vue +25 -6
  563. package/pages/c/_cluster/neuvector/index.vue +16 -5
  564. package/pages/c/_cluster/settings/DefaultLinksEditor.vue +25 -7
  565. package/pages/c/_cluster/settings/banners.vue +10 -2
  566. package/pages/c/_cluster/settings/brand.vue +75 -17
  567. package/pages/c/_cluster/settings/links.vue +16 -4
  568. package/pages/c/_cluster/settings/performance.vue +22 -5
  569. package/pages/c/_cluster/uiplugins/DeveloperInstallDialog.vue +19 -4
  570. package/pages/c/_cluster/uiplugins/InstallDialog.vue +14 -3
  571. package/pages/c/_cluster/uiplugins/PluginInfoPanel.vue +54 -12
  572. package/pages/c/_cluster/uiplugins/RemoveUIPlugins.vue +18 -4
  573. package/pages/c/_cluster/uiplugins/SetupUIPlugins.vue +14 -3
  574. package/pages/c/_cluster/uiplugins/UninstallDialog.vue +9 -2
  575. package/pages/c/_cluster/uiplugins/index.vue +149 -34
  576. package/pages/diagnostic.vue +14 -5
  577. package/pages/docs/_doc.vue +22 -5
  578. package/pages/fail-whale.vue +26 -6
  579. package/pages/home.vue +54 -14
  580. package/pages/prefs.vue +65 -22
  581. package/pages/rio/mesh.vue +6 -2
  582. package/pages/support/index.vue +35 -7
  583. package/plugins/steve/subscribe.js +1 -1
  584. package/promptRemove/management.cattle.io.globalrole.vue +9 -3
  585. package/promptRemove/management.cattle.io.project.vue +14 -5
  586. package/promptRemove/management.cattle.io.roletemplate.vue +9 -3
  587. package/promptRemove/pod.vue +15 -3
  588. package/rancher-components/Form/TextArea/TextAreaAutoGrow.vue +1 -0
  589. package/rancher-components/StringList/StringList.test.ts +80 -0
  590. package/rancher-components/StringList/StringList.vue +593 -0
  591. package/rancher-components/StringList/index.ts +1 -0
  592. package/scripts/publish-shell.sh +5 -38
  593. package/scripts/test-plugins-build.sh +5 -9
  594. package/store/prefs.js +1 -1
  595. package/types/form.ts +1 -0
  596. package/types/generic.ts +2 -0
  597. package/types/t.ts +1 -0
  598. package/types/userPreferences.d.ts +14 -0
  599. package/utils/array.ts +21 -0
  600. package/utils/favicon.js +2 -0
  601. package/utils/settings.ts +50 -0
  602. package/utils/validators/formRules/__tests__/index.test.ts +22 -1
  603. package/utils/validators/formRules/index.ts +68 -43
  604. package/creators/update/init +0 -54
  605. package/creators/update/package.json +0 -20
  606. package/creators/update/upgrade +0 -56
  607. package/scripts/record-deps.js +0 -37
  608. package/scripts/typegen.sh +0 -84
  609. package/types/shell/index.d.ts +0 -3046
  610. package/types/vue-shim.d +0 -20
@@ -4,32 +4,54 @@ import formRulesGenerator from '@shell/utils/validators/formRules/index';
4
4
  export default {
5
5
  data() {
6
6
  return {
7
- fvFormRuleSets: [
8
- /* fvFormRuleSets define the validation rules for the entire form. These should almost always be overridden in the form-component using the mixin
9
- example:
10
- {
11
- path: 'container.image', // required: defines the path of the value to be tested against it's rules. Looks for the relevant path in `this.value` unless an is passed in via rootObject
12
- rootObject: { container: { image: 'name' } } // optional: redirects the path to the object passed here,
13
- rules: ['noSpaces', 'noPeriods'], // required: array of strings that match which validator functions to run against the value of the field defined by the path (and optionally the rulesets rootObject),
14
- translationKey: 'Image Name', // optional: defines the displaykey, overrides displaykeys that may otherwise be passed into the translation
15
- }
16
- */
17
- ],
18
- fvReportedValidationPaths: [
19
- // an array of strings that track which ruleset paths have been bound to a field for error reporting
20
- // tracked in a seperate array from the actual rulesets since we want the option of keeping track of modelValidationRules without mutating the model itself
21
- // you may place a path in here manually as part of your form's data props...
22
- // ... or you may place a path in here programitcally by using the "fvGetAndReportPathRules" method
23
- ]
7
+ /**
8
+ * Define the validation rules for the entire form.
9
+ * These should almost always be overridden in the form-component using the mixin
10
+ *
11
+ * path (required): defines the path of the value to be tested against it's rules. Looks for the relevant path in `this.value` unless an is passed in via rootObject
12
+ * rules (required): array of strings that match which validator functions to run against the value of the field defined by the path (and optionally the rulesets rootObject),
13
+ * rootObject (optional): redirects the path to the object passed here,
14
+ * translationKey (optional): defines the displaykey, overrides displaykeys that may otherwise be passed into the translation
15
+ *
16
+ * NOTE: path of type 'value.value' will be only 'value'
17
+ *
18
+ * Example:
19
+ * {
20
+ * path: 'container.image',
21
+ * rules: ['noSpaces', 'noPeriods'],
22
+ * rootObject: { container: { image: 'name' } },
23
+ * translationKey: 'Image Name',
24
+ * }
25
+ */
26
+ fvFormRuleSets: [],
27
+ /**
28
+ * An array of strings that track which ruleset paths have been bound to a field for error
29
+ * reporting tracked in a separate array from the actual rulesets since we want the option
30
+ * of keeping track of modelValidationRules without mutating the model itself you may place
31
+ * a path in here manually as part of your form's data props or you may place a path in
32
+ * here programmatically by using the "fvGetAndReportPathRules" method
33
+ */
34
+ fvReportedValidationPaths: []
24
35
  };
25
36
  },
26
37
 
27
38
  methods: {
28
- // returns an array of validator functions based off path property of the ruleset, use this if you want the array but you don't want the form to track that the rules have been bound to a field
39
+ /**
40
+ * Returns an array of validator functions based off path property of the ruleset, use this if you want
41
+ * the array but you don't want the form to track that the rules have been bound to a field
42
+ * @param {*} path
43
+ * @returns
44
+ */
29
45
  fvGetPathRules(path) {
30
46
  return this.fvRulesets.find(ruleset => ruleset.path === path)?.rules || [];
31
47
  },
32
- // returns an array of validator functions and pushes the path of the relevant ruleset into fvReportedValidationPaths so that we know any error messages are handled by the field using it
48
+
49
+ /**
50
+ * Returns an array of validator functions and pushes the path of the relevant ruleset into
51
+ * fvReportedValidationPaths so that we know any error messages are handled by the field using it
52
+ * @param {*} path
53
+ * @returns
54
+ */
33
55
  fvGetAndReportPathRules(path) {
34
56
  const rules = this.fvGetPathRules(path);
35
57
 
@@ -39,8 +61,16 @@ export default {
39
61
 
40
62
  return rules;
41
63
  },
42
- fvGetPathValues(path) { // validates that the path is one that belongs to a ruleset (either a formRuleset or from the modelValidationRules) and returns its value(s) in an array
43
- // returns even single values as an array to simplify validation logic since some fields may have multiple values
64
+
65
+ /**
66
+ * Validates that the path is one that belongs to a ruleset (either a formRuleset or from the
67
+ * modelValidationRules) and returns its value(s) in an array
68
+ * @param {*} path
69
+ * @returns
70
+ */
71
+ fvGetPathValues(path) { //
72
+ // returns even single values as an array to simplify validation logic since
73
+ // some fields may have multiple values
44
74
  const relevantRuleset = this.fvRulesets.find(ruleset => ruleset.path === path);
45
75
 
46
76
  if (!relevantRuleset) {
@@ -49,11 +79,26 @@ export default {
49
79
 
50
80
  return getAllValues(relevantRuleset?.rootObject || this.value, relevantRuleset?.path);
51
81
  },
52
- fvGetPathErrors(paths = []) { // gets errors from multiple paths, usually used externally to check a single path but used within the mixin to check all paths for errors
82
+
83
+ fvGetValues(val, idx, arr) {
84
+ return (arr.length > 1 &&
85
+ typeof val === 'object' &&
86
+ !Array.isArray(val) &&
87
+ val !== null ? { ...val, idx } : val
88
+ );
89
+ },
90
+
91
+ /**
92
+ * Gets errors from multiple paths, usually used externally to check a single path but used
93
+ * within the mixin to check all paths for errors
94
+ * @param {*} paths
95
+ * @returns
96
+ */
97
+ fvGetPathErrors(paths = []) {
53
98
  const messages = paths.reduce((acc, path) => {
54
99
  const pathErrors = [];
55
100
  const relevantRules = this.fvGetPathRules(path);
56
- const relevantValues = this.fvGetPathValues(path).map((val, idx, arr) => (arr.length > 1 && typeof val === 'object' && !Array.isArray(val) && val !== null ? { ...val, idx } : val));
101
+ const relevantValues = this.fvGetPathValues(path).map(this.fvGetValues);
57
102
 
58
103
  relevantRules.forEach((rule) => {
59
104
  relevantValues.forEach((value) => {
@@ -61,26 +106,41 @@ export default {
61
106
  });
62
107
  });
63
108
 
64
- return [...acc, ...pathErrors].filter(error => !!error);
109
+ return [...acc, ...pathErrors].filter(Boolean);
65
110
  }, []);
66
111
 
67
112
  return messages;
68
113
  },
69
114
  },
115
+
70
116
  computed: {
71
- // fvExtraRules allows you to create rules that might be specific to a form inside of that form component and pass them into the mixin's logic. fvExtraRules needs to return an object with a validation rule function in each key.
72
- // This is a computed property as returning functions in the data props is not considered a best practice
117
+ /**
118
+ * fvExtraRules allows you to create rules that might be specific to a form inside of
119
+ * that form component and pass them into the mixin's logic.
120
+ * fvExtraRules needs to return an object with a validation rule function in each key.
121
+ * This is a computed property as returning functions in the data props is not considered
122
+ * a best practice
123
+ * @returns
124
+ */
73
125
  fvExtraRules() {
74
126
  return {};
75
127
  },
76
- // rulesets is a combination of the rules defined in the fvFormRuleSets array and the modelValidationRules in the model. Theoretically, a form could just use the rulesets defined in the model however in practice this can be limiting
128
+
129
+ /**
130
+ * Rulesets is a combination of the rules defined in the fvFormRuleSets array and the
131
+ * modelValidationRules in the model. Theoretically, a form could just use the rulesets
132
+ * defined in the model however in practice this can be limiting
133
+ * @returns
134
+ */
77
135
  fvRulesets() {
78
136
  const nullValidator = () => undefined;
79
137
 
80
138
  return [
81
139
  ...this.fvFormRuleSets.map((ruleset) => {
82
140
  const formRules = {
83
- ...formRulesGenerator(this.$store.getters['i18n/t'], { displayKey: ruleset?.translationKey ? this.$store.getters['i18n/t'](ruleset.translationKey) : 'Value' }),
141
+ ...formRulesGenerator(
142
+ this.$store.getters['i18n/t'],
143
+ { displayKey: ruleset?.translationKey ? this.$store.getters['i18n/t'](ruleset.translationKey) : 'Value' }),
84
144
  ...this.fvExtraRules
85
145
  };
86
146
 
@@ -96,25 +156,40 @@ export default {
96
156
  }))
97
157
  ];
98
158
  },
99
- fvUnreportedValidationErrors() { // if either the fvFormRuleSets or the modelValidationRules throw an error and the associated path isn't in the reportValidationPaths then it'll show up here.
100
- // useful for throwing unreported errors into a generic banner
159
+
160
+ /**
161
+ * If either the fvFormRuleSets or the modelValidationRules throw an error and the associated path
162
+ * isn't in the reportValidationPaths then it'll show up here.
163
+ * Useful for throwing unreported errors into a generic banner
164
+ * @returns
165
+ */
166
+ fvUnreportedValidationErrors() { //
101
167
  const paths = this.fvRulesets
102
168
  .filter(ruleset => !!ruleset.formValidationRule && !this.fvReportedValidationPaths.includes(ruleset.path))
103
169
  .map(ruleset => ruleset.path);
104
170
 
105
171
  const formErrors = this.fvGetPathErrors(paths);
106
172
 
107
- const modelErrors = this.value.customValidationErrors(this.value, this.fvReportedValidationPaths); // the model already has a means of producing errors, not reinventing the wheel... yet...
173
+ // the model already has a means of producing errors, not reinventing the wheel... yet...
174
+ const modelErrors = this.value.customValidationErrors ? this.value.customValidationErrors(this.value, this.fvReportedValidationPaths) : [];
108
175
 
109
176
  return [...formErrors, ...modelErrors, ...(this.errors || [])];
110
177
  },
111
- fvValidationErrors() { // checks for any and all errors, regardless of being bound, from the model, or from the form
178
+
179
+ /**
180
+ * Checks for any and all errors, regardless of being bound, from the model, or from the form
181
+ * @returns
182
+ */
183
+ fvValidationErrors() {
112
184
  const paths = this.fvRulesets.filter(ruleset => !!ruleset.formValidationRule).map(ruleset => ruleset.path);
113
185
  const formErrors = this.fvGetPathErrors(paths);
114
- const modelErrors = this.value.customValidationErrors(this.value); // the model already has a means of producing errors, not reinventing the wheel... yet...
186
+
187
+ // the model already has a means of producing errors, not reinventing the wheel... yet...
188
+ const modelErrors = this.value.customValidationErrors ? this.value.customValidationErrors(this.value) : [];
115
189
 
116
190
  return [...formErrors, ...modelErrors];
117
191
  },
192
+
118
193
  fvFormIsValid() {
119
194
  return this.fvValidationErrors.length === 0;
120
195
  }
@@ -18,10 +18,7 @@ export default class CRTB extends NormanModel {
18
18
  return this.$rootGetters['management/byId'](MANAGEMENT.ROLE_TEMPLATE, this.roleTemplateId);
19
19
  }
20
20
 
21
- get steve() {
22
- return this.$dispatch(`management/find`, {
23
- type: MANAGEMENT.CLUSTER_ROLE_TEMPLATE_BINDING,
24
- id: this.id?.replace(':', '/')
25
- }, { root: true });
21
+ get clusterroletemplatebinding() {
22
+ return this.$rootGetters[`management/byId`](MANAGEMENT.CLUSTER_ROLE_TEMPLATE_BINDING, this.id?.replace(':', '/'));
26
23
  }
27
24
  }
@@ -247,6 +247,12 @@ export default class MgmtCluster extends HybridModel {
247
247
  return isHarvesterCluster(this);
248
248
  }
249
249
 
250
+ get isHostedKubernetesProvider() {
251
+ const providers = ['AKS', 'EKS', 'GKE'];
252
+
253
+ return providers.includes(this.provisioner);
254
+ }
255
+
250
256
  get providerLogo() {
251
257
  const provider = this.status?.provider || 'kubernetes';
252
258
  // Only interested in the part before the period
@@ -437,7 +443,7 @@ export default class MgmtCluster extends HybridModel {
437
443
  // RKE2 cluster IDs include the name - fleet-default/cluster-name - whereas an RKE1
438
444
  // cluster has the less human readable management cluster ID in it: fleet-default/c-khk48
439
445
 
440
- const verb = this.isLocal || isRKE1 ? 'to' : 'from';
446
+ const verb = this.isLocal || isRKE1 || this.isHostedKubernetesProvider ? 'to' : 'from';
441
447
  const from = `${ verb }Type`;
442
448
  const id = `${ verb }Id`;
443
449
 
package/models/secret.js CHANGED
@@ -249,12 +249,20 @@ export default class Secret extends SteveModel {
249
249
  get certInfo() {
250
250
  const pem = base64Decode(this.data['tls.crt']);
251
251
  let issuer, notAfter, cn, sans, x;
252
+ const END_MARKER = '-----END CERTIFICATE-----';
252
253
 
253
254
  if (pem) {
255
+ const certs = pem.split(END_MARKER);
256
+ let first = pem;
257
+
258
+ if (certs.length > 1) {
259
+ first = `${ certs[0] }${ END_MARKER }`;
260
+ }
261
+
254
262
  try {
255
263
  x = new r.X509();
256
264
 
257
- x.readCertPEM(pem);
265
+ x.readCertPEM(first);
258
266
  const issuerString = x.getIssuerString();
259
267
 
260
268
  issuer = issuerString.slice(issuerString.indexOf('CN=') + 3);
@@ -499,7 +499,7 @@ export default class Workload extends WorkloadService {
499
499
  return ports;
500
500
  }
501
501
 
502
- get showAsWorkload() {
502
+ get ownedByWorkload() {
503
503
  const types = Object.values(WORKLOAD_TYPES);
504
504
 
505
505
  if (this.metadata?.ownerReferences) {
@@ -507,12 +507,12 @@ export default class Workload extends WorkloadService {
507
507
  const have = (`${ owner.apiVersion.replace(/\/.*/, '') }.${ owner.kind }`).toLowerCase();
508
508
 
509
509
  if ( types.includes(have) ) {
510
- return false;
510
+ return true;
511
511
  }
512
512
  }
513
513
  }
514
514
 
515
- return true;
515
+ return false;
516
516
  }
517
517
 
518
518
  get isFromNorman() {
package/nuxt.config.js CHANGED
@@ -33,6 +33,13 @@ const pl = process.env.PL || STANDARD;
33
33
  const commit = process.env.COMMIT || 'head';
34
34
  const perfTest = (process.env.PERF_TEST === 'true'); // Enable performance testing when in dev
35
35
 
36
+ // Allow skipping of eslint check
37
+ // 0 = Skip browser and console checks
38
+ // 1 = Skip browser check
39
+ // 2 = Do not skip any checks
40
+ const skipEsLintCheckStr = (process.env.SKIP_ESLINT || '');
41
+ const skipEsLintCheck = parseInt(skipEsLintCheckStr, 10) || 2;
42
+
36
43
  // ===============================================================================================
37
44
  // Nuxt configuration
38
45
  // ===============================================================================================
@@ -56,7 +63,10 @@ export default function(dir, _appConfig) {
56
63
  NUXT_SHELL = '~~/shell';
57
64
  COMPONENTS_DIR = path.join(dir, 'pkg', 'rancher-components', 'src', 'components');
58
65
 
59
- typescript = { typeCheck: { eslint: { files: './shell/**/*.{ts,js,vue}' } } };
66
+ // Skip eslint check that runs as part of nuxt build in the console
67
+ if (skipEsLintCheck > 0) {
68
+ typescript = { typeCheck: { eslint: { files: './shell/**/*.{ts,js,vue}' } } };
69
+ }
60
70
  }
61
71
 
62
72
  // ===============================================================================================
@@ -259,6 +269,22 @@ export default function(dir, _appConfig) {
259
269
 
260
270
  console.log(`API: '${ api }'. Env: '${ rancherEnv }'`); // eslint-disable-line no-console
261
271
 
272
+ // Nuxt modules
273
+ let nuxtModules = [
274
+ '@nuxtjs/proxy',
275
+ '@nuxtjs/axios',
276
+ '@nuxtjs/eslint-module',
277
+ '@nuxtjs/webpack-profile',
278
+ 'cookie-universal-nuxt',
279
+ 'portal-vue/nuxt',
280
+ path.join(NUXT_SHELL, 'plugins/dashboard-store/rehydrate-all'),
281
+ ];
282
+
283
+ // Remove es-lint nuxt module if env var configures this
284
+ if (skipEsLintCheck < 2) {
285
+ nuxtModules = nuxtModules.filter(s => !s.includes('eslint-module'));
286
+ }
287
+
262
288
  const config = {
263
289
  dev,
264
290
 
@@ -545,15 +571,7 @@ export default function(dir, _appConfig) {
545
571
  },
546
572
 
547
573
  // Nuxt modules
548
- modules: [
549
- '@nuxtjs/proxy',
550
- '@nuxtjs/axios',
551
- '@nuxtjs/eslint-module',
552
- '@nuxtjs/webpack-profile',
553
- 'cookie-universal-nuxt',
554
- 'portal-vue/nuxt',
555
- path.join(NUXT_SHELL, 'plugins/dashboard-store/rehydrate-all'),
556
- ],
574
+ modules: nuxtModules,
557
575
 
558
576
  // Vue plugins
559
577
  plugins: [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rancher/shell",
3
- "version": "0.2.3",
3
+ "version": "0.2.4",
4
4
  "description": "Rancher Dashboard Shell",
5
5
  "repository": "https://github.com/rancherlabs/dashboard",
6
6
  "license": "Apache-2.0",
@@ -113,7 +113,7 @@
113
113
  "nyc": "15.1.0",
114
114
  "papaparse": "5.3.0",
115
115
  "portal-vue": "2.1.7",
116
- "rancher-icons": "rancher/icons#v2.0.3",
116
+ "rancher-icons": "rancher/icons#v2.0.8",
117
117
  "require-extension-hooks": "0.3.3",
118
118
  "require-extension-hooks-babel": "1.0.0",
119
119
  "require-extension-hooks-vue": "3.0.0",
package/pages/about.vue CHANGED
@@ -88,7 +88,10 @@ export default {
88
88
 
89
89
  <template>
90
90
  <Loading v-if="!settings" />
91
- <div v-else class="about">
91
+ <div
92
+ v-else
93
+ class="about"
94
+ >
92
95
  <BackLink :link="backLink" />
93
96
  <div class="title-block mt-20 mb-40">
94
97
  <h1 v-t="'about.title'" />
@@ -109,28 +112,44 @@ export default {
109
112
  </thead>
110
113
  <tr v-if="rancherVersion">
111
114
  <td>
112
- <a href="https://github.com/rancher/rancher" target="_blank" rel="nofollow noopener noreferrer">
115
+ <a
116
+ href="https://github.com/rancher/rancher"
117
+ target="_blank"
118
+ rel="nofollow noopener noreferrer"
119
+ >
113
120
  {{ appName }}
114
121
  </a>
115
122
  </td><td>{{ rancherVersion.value }}</td>
116
123
  </tr>
117
124
  <tr v-if="cliVersion">
118
125
  <td>
119
- <a href="https://github.com/rancher/cli" target="_blank" rel="nofollow noopener noreferrer">
126
+ <a
127
+ href="https://github.com/rancher/cli"
128
+ target="_blank"
129
+ rel="nofollow noopener noreferrer"
130
+ >
120
131
  {{ appName }} {{ t("about.versions.cli") }}
121
132
  </a>
122
133
  </td><td>{{ cliVersion.value }}</td>
123
134
  </tr>
124
135
  <tr v-if="helmVersion">
125
136
  <td>
126
- <a href="https://github.com/rancher/helm" target="_blank" rel="nofollow noopener noreferrer">
137
+ <a
138
+ href="https://github.com/rancher/helm"
139
+ target="_blank"
140
+ rel="nofollow noopener noreferrer"
141
+ >
127
142
  {{ t("about.versions.helm") }}
128
143
  </a>
129
144
  </td><td>{{ helmVersion.value }}</td>
130
145
  </tr>
131
146
  <tr v-if="dockerMachineVersion">
132
147
  <td>
133
- <a href="https://github.com/rancher/machine" target="_blank" rel="nofollow noopener noreferrer">
148
+ <a
149
+ href="https://github.com/rancher/machine"
150
+ target="_blank"
151
+ rel="nofollow noopener noreferrer"
152
+ >
134
153
  {{ t("about.versions.machine") }}
135
154
  </a>
136
155
  </td><td>{{ dockerMachineVersion.value }}</td>
@@ -146,14 +165,20 @@ export default {
146
165
  {{ t('about.downloadImageList.title') }}
147
166
  </h3>
148
167
  <table>
149
- <tr v-for="d in downloadImageList" :key="d.icon">
168
+ <tr
169
+ v-for="d in downloadImageList"
170
+ :key="d.icon"
171
+ >
150
172
  <td>
151
173
  <div class="os">
152
174
  <i :class="`icon ${d.icon} mr-5`" /> {{ t(d.label) }}
153
175
  </div>
154
176
  </td>
155
177
  <td>
156
- <a v-if="d.imageList" @click="d.imageList">
178
+ <a
179
+ v-if="d.imageList"
180
+ @click="d.imageList"
181
+ >
157
182
  {{ t('asyncButton.download.action') }}
158
183
  </a>
159
184
  </td>
@@ -165,14 +190,21 @@ export default {
165
190
  {{ t('about.downloadCLI.title') }}
166
191
  </h3>
167
192
  <table>
168
- <tr v-for="d in downloadCli" :key="d.icon" class="link">
193
+ <tr
194
+ v-for="d in downloadCli"
195
+ :key="d.icon"
196
+ class="link"
197
+ >
169
198
  <td>
170
199
  <div class="os">
171
200
  <i :class="`icon ${d.icon} mr-5`" /> {{ t(d.label) }}
172
201
  </div>
173
202
  </td>
174
203
  <td>
175
- <a v-if="d.cliLink" :href="d.cliLink">{{ d.cliFile }}</a>
204
+ <a
205
+ v-if="d.cliLink"
206
+ :href="d.cliLink"
207
+ >{{ d.cliFile }}</a>
176
208
  </td>
177
209
  </tr>
178
210
  </table>
@@ -148,7 +148,12 @@ export default {
148
148
 
149
149
  <h2 v-t="'accountAndKeys.account.title'" />
150
150
  <div class="account">
151
- <Principal :key="principal.id" :value="principal.id" :use-muted="false" :show-labels="true" />
151
+ <Principal
152
+ :key="principal.id"
153
+ :value="principal.id"
154
+ :use-muted="false"
155
+ :show-labels="true"
156
+ />
152
157
  <div>
153
158
  <button
154
159
  v-if="canChangePassword"
@@ -162,7 +167,7 @@ export default {
162
167
  </div>
163
168
  <PromptChangePassword ref="promptChangePassword" />
164
169
 
165
- <hr />
170
+ <hr>
166
171
  <div class="keys-header">
167
172
  <div>
168
173
  <h2 v-t="'accountAndKeys.apiKeys.title'" />
@@ -171,11 +176,18 @@ export default {
171
176
  <CopyToClipboardText :text="apiUrl" />
172
177
  </div>
173
178
  </div>
174
- <button v-if="apiKeySchema" class="btn role-primary add mb-20" @click="addKey">
179
+ <button
180
+ v-if="apiKeySchema"
181
+ class="btn role-primary add mb-20"
182
+ @click="addKey"
183
+ >
175
184
  {{ t('accountAndKeys.apiKeys.add.label') }}
176
185
  </button>
177
186
  </div>
178
- <div v-if="apiKeySchema" class="keys">
187
+ <div
188
+ v-if="apiKeySchema"
189
+ class="keys"
190
+ >
179
191
  <ResourceTable
180
192
  :schema="apiKeySchema"
181
193
  :rows="apiKeys"
@@ -187,7 +199,10 @@ export default {
187
199
  />
188
200
  </div>
189
201
  <div v-else>
190
- <Banner color="warning" :label="t('accountAndKeys.apiKeys.notAllowed')" />
202
+ <Banner
203
+ color="warning"
204
+ :label="t('accountAndKeys.apiKeys.notAllowed')"
205
+ />
191
206
  </div>
192
207
  </div>
193
208
  </template>