@rancher/shell 1.2.3 → 2.0.1

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 (699) hide show
  1. package/assets/data/aws-regions.json +9 -0
  2. package/assets/images/vendor/openid.svg +18 -0
  3. package/assets/styles/app.scss +1 -2
  4. package/assets/styles/fonts/_icons.scss +3 -3
  5. package/assets/styles/global/_columns.scss +1 -1
  6. package/assets/styles/global/_labeled-input.scss +1 -0
  7. package/assets/styles/global/_layout.scss +99 -0
  8. package/assets/styles/themes/_csp.scss +2 -2
  9. package/assets/styles/themes/_dark.scss +8 -2
  10. package/assets/styles/themes/_light.scss +2 -1
  11. package/assets/styles/themes/_suse.scss +1 -1
  12. package/assets/styles/vendor/vue-select.scss +5 -0
  13. package/assets/translations/en-us.yaml +315 -64
  14. package/assets/translations/zh-hans.yaml +7 -31
  15. package/babel.config.js +8 -2
  16. package/chart/__tests__/S3.test.ts +9 -2
  17. package/chart/gatekeeper.vue +2 -11
  18. package/chart/istio.vue +1 -10
  19. package/chart/logging/index.vue +2 -11
  20. package/chart/monitoring/alerting/index.vue +7 -21
  21. package/chart/monitoring/grafana/index.vue +61 -2
  22. package/chart/monitoring/index.vue +52 -26
  23. package/chart/monitoring/prometheus/index.vue +39 -45
  24. package/chart/rancher-backup/S3.vue +11 -9
  25. package/chart/rancher-backup/index.vue +18 -15
  26. package/cloud-credential/__tests__/harvester.test.ts +18 -0
  27. package/cloud-credential/azure.vue +4 -17
  28. package/cloud-credential/generic.vue +18 -9
  29. package/cloud-credential/harvester.vue +11 -3
  30. package/components/AlertTable.vue +17 -7
  31. package/components/AppModal.vue +167 -0
  32. package/components/AssignTo.vue +7 -4
  33. package/components/AsyncButton.vue +27 -5
  34. package/components/BackLink.vue +4 -4
  35. package/components/BannerGraphic.vue +1 -0
  36. package/components/BrandImage.vue +47 -1
  37. package/components/Carousel.vue +15 -8
  38. package/components/Certificates.vue +161 -0
  39. package/components/ClusterBadge.vue +12 -3
  40. package/components/ClusterIconMenu.vue +55 -12
  41. package/components/ClusterProviderIcon.vue +14 -3
  42. package/components/CodeMirror.vue +111 -17
  43. package/components/CommunityLinks.vue +12 -8
  44. package/components/CopyCode.vue +6 -2
  45. package/components/CopyToClipboard.vue +2 -1
  46. package/components/CopyToClipboardText.vue +14 -9
  47. package/components/CreateDriver.vue +81 -0
  48. package/components/CruResource.vue +52 -27
  49. package/components/DetailTop.vue +2 -2
  50. package/components/Dialog.vue +6 -5
  51. package/components/DisableAuthProviderModal.vue +14 -8
  52. package/components/DraggableZone.vue +2 -2
  53. package/components/EtcdInfoBanner.vue +5 -5
  54. package/components/ExplorerMembers.vue +3 -3
  55. package/components/ExplorerProjectsNamespaces.vue +31 -7
  56. package/components/FixedBanner.vue +48 -36
  57. package/components/GlobalRoleBindings.vue +26 -0
  58. package/components/GrafanaDashboard.vue +6 -4
  59. package/components/IconOrSvg.vue +1 -1
  60. package/components/Import.vue +10 -6
  61. package/components/Inactivity.vue +1 -5
  62. package/components/KeyValueView.vue +14 -10
  63. package/components/Markdown.vue +16 -12
  64. package/components/MessageLink.vue +2 -2
  65. package/components/ModalWithCard.vue +5 -8
  66. package/components/MoveModal.vue +35 -33
  67. package/components/PodSecurityAdmission.vue +3 -3
  68. package/components/PromptChangePassword.vue +33 -33
  69. package/components/PromptModal.vue +11 -21
  70. package/components/PromptRemove.vue +12 -17
  71. package/components/PromptRestore.vue +18 -16
  72. package/components/Questions/__tests__/Boolean.test.ts +9 -19
  73. package/components/Questions/__tests__/Float.test.ts +9 -19
  74. package/components/Questions/__tests__/Int.test.ts +9 -19
  75. package/components/Questions/__tests__/String.test.ts +9 -19
  76. package/components/Questions/__tests__/Yaml.test.ts +9 -20
  77. package/components/Questions/__tests__/utils/questions-defaults.ts +20 -0
  78. package/components/Questions/index.vue +19 -3
  79. package/components/ResourceCancelModal.vue +34 -29
  80. package/components/ResourceDetail/Masthead.vue +48 -16
  81. package/components/ResourceDetail/index.vue +6 -4
  82. package/components/ResourceList/Masthead.vue +10 -9
  83. package/components/ResourceList/index.vue +65 -14
  84. package/components/ResourceTable.vue +87 -21
  85. package/components/ResourceYaml.vue +35 -5
  86. package/components/SelectIconGrid.vue +3 -3
  87. package/components/SideNav.vue +50 -94
  88. package/components/SingleClusterInfo.vue +4 -4
  89. package/components/SortableTable/THead.vue +33 -21
  90. package/components/SortableTable/filtering.js +9 -1
  91. package/components/SortableTable/grouping.js +8 -1
  92. package/components/SortableTable/index.vue +143 -44
  93. package/components/SortableTable/paging.js +36 -7
  94. package/components/SortableTable/selection.js +2 -1
  95. package/components/SortableTable/sorting.js +24 -7
  96. package/components/StatusTable.vue +5 -1
  97. package/components/Tabbed/index.vue +18 -1
  98. package/components/TableDataUserIcon.vue +47 -0
  99. package/components/TypeDescription.vue +1 -0
  100. package/components/Wizard.vue +1 -0
  101. package/components/YamlEditor.vue +1 -0
  102. package/components/__tests__/AppModal.test.ts +98 -0
  103. package/components/__tests__/AsyncButton.test.ts +1 -3
  104. package/components/__tests__/BackLink.test.ts +1 -1
  105. package/components/__tests__/ButtonGroup.test.ts +3 -6
  106. package/components/__tests__/Carousel.test.ts +43 -0
  107. package/components/__tests__/Certificates.test.ts +29 -0
  108. package/components/__tests__/CodeMirror.test.ts +87 -0
  109. package/components/__tests__/CopyCode.test.ts +5 -4
  110. package/components/__tests__/CruResource.test.ts +10 -9
  111. package/components/__tests__/EtcdInfoBanner.test.ts +37 -0
  112. package/components/__tests__/FixedBanner.test.ts +5 -20
  113. package/components/__tests__/NamespaceFilter.test.ts +9 -18
  114. package/components/__tests__/TabTitle.test.ts +129 -0
  115. package/components/auth/AzureWarning.vue +2 -2
  116. package/components/auth/RoleDetailEdit.vue +10 -0
  117. package/components/auth/__tests__/RoleDetailEdit.test.ts +3 -2
  118. package/components/auth/login/oidc.vue +7 -1
  119. package/components/fleet/FleetBundles.vue +5 -11
  120. package/components/fleet/FleetClusters.vue +9 -9
  121. package/components/fleet/FleetIntro.vue +11 -17
  122. package/components/fleet/FleetNoWorkspaces.vue +2 -2
  123. package/components/fleet/FleetRepos.vue +63 -27
  124. package/components/fleet/FleetResources.vue +6 -1
  125. package/components/fleet/FleetStatus.vue +3 -3
  126. package/components/fleet/FleetSummary.vue +35 -30
  127. package/components/fleet/ForceDirectedTreeChart/index.vue +9 -3
  128. package/components/fleet/__tests__/FleetSummary.test.ts +316 -0
  129. package/components/form/ArrayList.vue +22 -18
  130. package/components/form/ArrayListSelect.vue +5 -0
  131. package/components/form/BannerSettings.vue +3 -0
  132. package/components/form/ClusterAppearance.vue +132 -0
  133. package/components/form/ColorInput.vue +1 -0
  134. package/components/form/Error.vue +3 -3
  135. package/components/form/FileSelector.vue +1 -0
  136. package/components/form/Footer.vue +2 -2
  137. package/components/form/GitPicker.vue +83 -38
  138. package/components/form/KeyValue.vue +70 -48
  139. package/components/form/LabeledSelect.vue +145 -41
  140. package/components/form/Labels.vue +3 -1
  141. package/components/form/NameNsDescription.vue +26 -9
  142. package/components/form/Password.vue +3 -1
  143. package/components/form/ResourceLabeledSelect.vue +187 -0
  144. package/components/form/ResourceTabs/index.vue +31 -15
  145. package/components/form/SecretSelector.vue +93 -18
  146. package/components/form/SelectOrCreateAuthSecret.vue +132 -59
  147. package/components/form/SimpleSecretSelector.vue +88 -28
  148. package/components/form/Taints.vue +13 -7
  149. package/components/form/__tests__/BannerSettings.test.ts +53 -0
  150. package/components/form/__tests__/KeyValue.test.ts +120 -11
  151. package/components/form/__tests__/LabeledSelect.test.ts +0 -18
  152. package/components/form/__tests__/{NameNsDescription.ts → NameNsDescription.test.ts} +25 -15
  153. package/components/form/__tests__/Taints.test.ts +70 -0
  154. package/components/form/labeled-select-utils/labeled-select-pagination.ts +151 -0
  155. package/components/form/labeled-select-utils/labeled-select.utils.ts +122 -0
  156. package/components/formatter/AppSummaryGraph.vue +2 -2
  157. package/components/formatter/Checked.vue +11 -3
  158. package/components/formatter/CloudCredPublicData.vue +30 -0
  159. package/components/formatter/ClusterLink.vue +2 -2
  160. package/components/formatter/ClusterProvider.vue +1 -18
  161. package/components/formatter/FleetClusterSummaryGraph.vue +27 -0
  162. package/components/formatter/FleetSummaryGraph.vue +25 -12
  163. package/components/formatter/ImagePercentageBar.vue +0 -4
  164. package/components/formatter/IngressTarget.vue +18 -7
  165. package/components/formatter/Link.vue +2 -2
  166. package/components/formatter/LinkDetail.vue +2 -2
  167. package/components/formatter/LinkDetailImage.vue +2 -2
  168. package/components/formatter/LinkName.vue +2 -2
  169. package/components/formatter/LiveDuration.vue +1 -1
  170. package/components/formatter/PercentageBar.vue +1 -1
  171. package/components/formatter/PrincipalGroupBindings.vue +2 -2
  172. package/components/formatter/SecretType.vue +2 -2
  173. package/components/formatter/VirtualServiceGateways.vue +2 -2
  174. package/components/formatter/WorkloadDetailEndpoints.vue +12 -22
  175. package/components/formatter/__tests__/Checked.test.ts +19 -0
  176. package/components/formatter/__tests__/LinkDetail.test.ts +5 -5
  177. package/components/formatter/__tests__/WorkloadDetailEndpoints.test.ts +81 -0
  178. package/components/nav/Group.vue +9 -7
  179. package/components/nav/Header.vue +85 -46
  180. package/components/nav/Jump.vue +19 -9
  181. package/components/nav/NamespaceFilter.vue +8 -1
  182. package/components/nav/TopLevelMenu.vue +392 -136
  183. package/components/nav/Type.vue +71 -106
  184. package/components/nav/WindowManager/ContainerLogs.vue +120 -19
  185. package/components/nav/WindowManager/ContainerShell.vue +6 -1
  186. package/components/nav/WindowManager/__tests__/ContainerLogs.test.ts +186 -0
  187. package/components/nav/WindowManager/index.vue +11 -10
  188. package/components/nav/__tests__/TopLevelMenu.test.ts +400 -6
  189. package/components/nav/__tests__/Type.test.ts +322 -97
  190. package/components/nuxt/nuxt-child.js +9 -78
  191. package/components/nuxt/nuxt-error.vue +1 -1
  192. package/components/nuxt/nuxt-link.client.js +13 -95
  193. package/{layouts → components/templates}/blank.vue +1 -1
  194. package/{layouts → components/templates}/default.vue +11 -101
  195. package/{layouts → components/templates}/error.vue +13 -26
  196. package/{layouts → components/templates}/home.vue +4 -1
  197. package/{layouts → components/templates}/plain.vue +4 -1
  198. package/{layouts → components/templates}/standalone.vue +1 -5
  199. package/{layouts → components/templates}/unauthenticated.vue +2 -3
  200. package/composables/useCompactInput.test.ts +36 -0
  201. package/composables/useCompactInput.ts +20 -0
  202. package/composables/useLabeledFormElement.test.ts +135 -0
  203. package/composables/useLabeledFormElement.ts +138 -0
  204. package/config/harvester-manager-types.js +2 -0
  205. package/config/home-links.js +2 -1
  206. package/config/labels-annotations.js +2 -1
  207. package/config/middleware.js +0 -6
  208. package/config/pagination-table-headers.js +57 -0
  209. package/config/pod-security-admission.ts +1 -1
  210. package/config/private-label.js +21 -1
  211. package/config/product/auth.js +1 -0
  212. package/config/product/explorer.js +166 -45
  213. package/config/product/fleet.js +6 -1
  214. package/config/product/legacy.js +2 -11
  215. package/config/product/manager.js +51 -25
  216. package/config/query-params.js +2 -0
  217. package/config/roles.ts +23 -0
  218. package/config/router/index.js +23 -0
  219. package/config/router/navigation-guards/attempt-first-login.js +73 -0
  220. package/config/router/navigation-guards/authentication.js +63 -0
  221. package/config/router/navigation-guards/i18n.js +13 -0
  222. package/config/router/navigation-guards/index.js +16 -0
  223. package/config/router/navigation-guards/load-initial-settings.js +15 -0
  224. package/config/router/routes.js +487 -0
  225. package/config/settings.ts +31 -2
  226. package/config/store.js +8 -4
  227. package/config/system-namespaces.js +3 -0
  228. package/config/table-headers.js +66 -1
  229. package/config/types.js +35 -20
  230. package/config/uiplugins.js +10 -5
  231. package/core/plugin-helpers.js +4 -6
  232. package/core/plugin-routes.ts +56 -114
  233. package/core/plugin.ts +18 -11
  234. package/core/plugins-loader.js +7 -9
  235. package/core/plugins.js +289 -285
  236. package/core/types-provisioning.ts +7 -0
  237. package/creators/app/app.package.json +2 -1
  238. package/creators/app/files/.eslintignore +0 -2
  239. package/creators/app/files/.gitlab-ci.yml +14 -0
  240. package/creators/app/files/.vscode/settings.json +0 -1
  241. package/creators/app/init +19 -0
  242. package/creators/pkg/files/.github/workflows/build-extension-catalog.yml +2 -6
  243. package/creators/pkg/files/.github/workflows/build-extension-charts.yml +2 -6
  244. package/creators/pkg/init +32 -0
  245. package/detail/__tests__/provisioning.cattle.io.cluster.test.ts +119 -0
  246. package/detail/__tests__/service.test.ts +62 -0
  247. package/detail/catalog.cattle.io.app.vue +1 -1
  248. package/detail/cis.cattle.io.clusterscan.vue +14 -3
  249. package/detail/fleet.cattle.io.bundle.vue +1 -1
  250. package/detail/fleet.cattle.io.cluster.vue +11 -1
  251. package/detail/fleet.cattle.io.gitrepo.vue +15 -9
  252. package/detail/namespace.vue +2 -2
  253. package/detail/networking.k8s.io.ingress.vue +52 -19
  254. package/detail/node.vue +22 -3
  255. package/detail/provisioning.cattle.io.cluster.vue +31 -13
  256. package/detail/service.vue +1 -1
  257. package/detail/workload/index.vue +1 -0
  258. package/dialog/AddCustomBadgeDialog.vue +318 -161
  259. package/dialog/DeactivateDriverDialog.vue +137 -0
  260. package/dialog/RollbackWorkloadDialog.vue +2 -2
  261. package/dialog/RotateCertificatesDialog.vue +0 -21
  262. package/dialog/ScaleMachineDownDialog.vue +34 -17
  263. package/directives/clean-html.js +15 -0
  264. package/directives/clean-tooltip.js +32 -0
  265. package/directives/focus.js +41 -0
  266. package/directives/int-number.js +21 -0
  267. package/directives/positive-int-number.js +19 -0
  268. package/directives/trim-whitespace.js +19 -0
  269. package/edit/__tests__/fleet.cattle.io.gitrepo.test.ts +3 -2
  270. package/edit/__tests__/kontainerDriver.test.ts +107 -0
  271. package/edit/__tests__/management.cattle.io.clusterroletemplatebinding.test.ts +12 -1
  272. package/edit/__tests__/management.cattle.io.setting.test.ts +2 -1
  273. package/edit/__tests__/monitoring.coreos.com.prometheusrule.test.ts +2 -3
  274. package/edit/__tests__/nodeDriver.test.ts +107 -0
  275. package/edit/__tests__/service.test.ts +85 -0
  276. package/edit/__tests__/ui.cattle.io.navlink.test.ts +3 -1
  277. package/edit/auth/AuthProviderWarningBanners.vue +34 -0
  278. package/edit/auth/__tests__/AuthProviderWarningBanners.test.ts +19 -0
  279. package/edit/auth/__tests__/azuread.test.ts +241 -0
  280. package/edit/auth/__tests__/oidc.test.ts +137 -0
  281. package/edit/auth/azuread.vue +133 -31
  282. package/edit/auth/github.vue +5 -17
  283. package/edit/auth/googleoauth.vue +6 -23
  284. package/edit/auth/ldap/index.vue +5 -17
  285. package/edit/auth/oidc.vue +143 -42
  286. package/edit/auth/saml.vue +5 -14
  287. package/edit/catalog.cattle.io.clusterrepo.vue +177 -9
  288. package/edit/cis.cattle.io.clusterscan.vue +5 -2
  289. package/edit/cis.cattle.io.clusterscanbenchmark.vue +41 -9
  290. package/edit/cloudcredential.vue +28 -4
  291. package/edit/configmap.vue +10 -4
  292. package/edit/fleet.cattle.io.gitrepo.vue +3 -1
  293. package/edit/helm.cattle.io.projecthelmchart.vue +29 -19
  294. package/edit/kontainerDriver.vue +65 -0
  295. package/edit/logging-flow/Match.vue +10 -9
  296. package/edit/logging-flow/index.vue +4 -19
  297. package/edit/logging.banzaicloud.io.output/__tests__/logging.banzaicloud.io.output.test.ts +232 -2
  298. package/edit/logging.banzaicloud.io.output/index.vue +43 -26
  299. package/edit/management.cattle.io.podsecurityadmissionconfigurationtemplate.vue +3 -3
  300. package/edit/management.cattle.io.project.vue +3 -53
  301. package/edit/management.cattle.io.setting.vue +52 -2
  302. package/edit/management.cattle.io.user.vue +2 -1
  303. package/edit/monitoring.coreos.com.alertmanagerconfig/index.vue +10 -7
  304. package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +21 -16
  305. package/edit/monitoring.coreos.com.alertmanagerconfig/types/opsgenie.vue +1 -1
  306. package/edit/monitoring.coreos.com.alertmanagerconfig/types/pagerduty.vue +2 -2
  307. package/edit/monitoring.coreos.com.alertmanagerconfig/types/slack.vue +1 -1
  308. package/edit/monitoring.coreos.com.prometheusrule/AlertingRule.vue +15 -3
  309. package/edit/monitoring.coreos.com.prometheusrule/GroupRules.vue +4 -1
  310. package/edit/monitoring.coreos.com.prometheusrule/RecordingRule.vue +2 -0
  311. package/edit/monitoring.coreos.com.prometheusrule/index.vue +2 -0
  312. package/edit/networking.k8s.io.ingress/Rules.vue +8 -3
  313. package/edit/networking.k8s.io.ingress/index.vue +64 -8
  314. package/edit/networking.k8s.io.networkpolicy/PolicyRule.vue +1 -0
  315. package/edit/networking.k8s.io.networkpolicy/PolicyRuleTarget.vue +6 -2
  316. package/edit/networking.k8s.io.networkpolicy/__tests__/{PolicyRuleTarget.spec.ts → PolicyRuleTarget.test.ts} +46 -7
  317. package/edit/networking.k8s.io.networkpolicy/__tests__/utils/{selectors.ts → selectors.test.ts} +1 -1
  318. package/edit/networking.k8s.io.networkpolicy/index.vue +2 -0
  319. package/edit/nodeDriver.vue +65 -0
  320. package/edit/persistentvolume/index.vue +2 -2
  321. package/edit/provisioning.cattle.io.cluster/SelectCredential.vue +33 -16
  322. package/edit/provisioning.cattle.io.cluster/__tests__/Advanced.test.ts +276 -0
  323. package/edit/provisioning.cattle.io.cluster/__tests__/Basics.test.ts +473 -0
  324. package/edit/provisioning.cattle.io.cluster/__tests__/{CustomCommand.tests.ts → CustomCommand.test.ts} +3 -0
  325. package/edit/provisioning.cattle.io.cluster/__tests__/DirectoryConfig.test.ts +228 -0
  326. package/edit/provisioning.cattle.io.cluster/__tests__/DrainOptions.test.ts +1 -1
  327. package/edit/provisioning.cattle.io.cluster/__tests__/index.test.ts +73 -0
  328. package/edit/provisioning.cattle.io.cluster/__tests__/rke2.test.ts +77 -13
  329. package/edit/provisioning.cattle.io.cluster/__tests__/utils/cluster.ts +391 -0
  330. package/edit/provisioning.cattle.io.cluster/import.vue +4 -4
  331. package/edit/provisioning.cattle.io.cluster/index.vue +126 -51
  332. package/edit/provisioning.cattle.io.cluster/rke2.vue +325 -791
  333. package/edit/provisioning.cattle.io.cluster/tabs/AddOnConfig.vue +137 -0
  334. package/edit/provisioning.cattle.io.cluster/tabs/Advanced.vue +217 -0
  335. package/edit/provisioning.cattle.io.cluster/{Basics.vue → tabs/Basics.vue} +123 -129
  336. package/edit/provisioning.cattle.io.cluster/tabs/DirectoryConfig.vue +132 -0
  337. package/edit/provisioning.cattle.io.cluster/{MachinePool.vue → tabs/MachinePool.vue} +1 -0
  338. package/edit/provisioning.cattle.io.cluster/{S3Config.vue → tabs/etcd/S3Config.vue} +1 -0
  339. package/edit/provisioning.cattle.io.cluster/tabs/etcd/index.vue +135 -0
  340. package/edit/provisioning.cattle.io.cluster/tabs/networking/index.vue +190 -0
  341. package/edit/provisioning.cattle.io.cluster/{RegistryConfigs.vue → tabs/registries/RegistryConfigs.vue} +3 -0
  342. package/edit/provisioning.cattle.io.cluster/tabs/registries/index.vue +148 -0
  343. package/edit/provisioning.cattle.io.cluster/tabs/upgrade/index.vue +76 -0
  344. package/edit/resources.cattle.io.backup.vue +139 -124
  345. package/edit/resources.cattle.io.restore.vue +146 -126
  346. package/edit/service.vue +13 -0
  347. package/edit/serviceaccount.vue +46 -4
  348. package/edit/token.vue +3 -1
  349. package/edit/workload/Upgrading.vue +3 -2
  350. package/edit/workload/__tests__/Job.test.ts +1 -3
  351. package/edit/workload/__tests__/Upgrading.test.ts +2 -2
  352. package/edit/workload/index.vue +2 -1
  353. package/edit/workload/mixins/workload.js +35 -2
  354. package/edit/workload/storage/emptyDir.vue +2 -2
  355. package/initialize/App.vue +75 -0
  356. package/initialize/app-extended.js +128 -0
  357. package/initialize/entry-helpers.js +546 -0
  358. package/initialize/entry.js +32 -0
  359. package/initialize/install-components.js +23 -0
  360. package/initialize/install-directives.js +59 -0
  361. package/initialize/install-plugins.js +123 -0
  362. package/list/__tests__/workload.test.ts +1 -1
  363. package/list/catalog.cattle.io.app.vue +1 -0
  364. package/list/cis.cattle.io.clusterscan.vue +16 -10
  365. package/list/group.principal.vue +2 -2
  366. package/list/management.cattle.io.feature.vue +16 -16
  367. package/list/management.cattle.io.setting.vue +1 -0
  368. package/list/management.cattle.io.user.vue +13 -4
  369. package/list/networking.k8s.io.ingress.vue +36 -0
  370. package/list/node.vue +212 -73
  371. package/list/provisioning.cattle.io.cluster.vue +17 -4
  372. package/list/ui.cattle.io.navlink.vue +2 -2
  373. package/list/workload.vue +22 -0
  374. package/machine-config/__tests__/vmwarevsphere-pool-config-merge.test.ts +30 -0
  375. package/machine-config/__tests__/vmwarevsphere.test.ts +1 -3
  376. package/machine-config/amazonec2.vue +1 -1
  377. package/machine-config/azure.vue +2 -1
  378. package/machine-config/generic.vue +11 -15
  379. package/machine-config/vmwarevsphere-pool-config-merge.ts +25 -0
  380. package/machine-config/vmwarevsphere.vue +31 -27
  381. package/middleware/authenticated.js +23 -399
  382. package/mixins/__tests__/chart.test.ts +48 -6
  383. package/mixins/__tests__/create-edit-view.test.ts +2 -3
  384. package/mixins/auth-config.js +5 -9
  385. package/mixins/brand.js +102 -96
  386. package/mixins/chart.js +27 -13
  387. package/mixins/create-edit-view/index.js +2 -2
  388. package/mixins/fetch.client.js +42 -48
  389. package/mixins/labeled-form-element.ts +27 -2
  390. package/mixins/page-actions.js +7 -5
  391. package/mixins/resource-fetch-api-pagination.js +304 -0
  392. package/mixins/resource-fetch-namespaced.js +1 -1
  393. package/mixins/resource-fetch.js +46 -5
  394. package/models/__tests__/cluster.test.ts +44 -0
  395. package/models/__tests__/fleet.cattle.io.cluster.test.ts +36 -0
  396. package/models/__tests__/management.cattle.io.cluster.test.ts +23 -0
  397. package/models/__tests__/management.cattle.io.node.ts +85 -0
  398. package/models/__tests__/management.cattle.io.nodepool.ts +83 -0
  399. package/models/__tests__/namespace.test.ts +49 -9
  400. package/models/__tests__/provisioning.cattle.io.cluster.test.ts +241 -0
  401. package/models/__tests__/schema.tests.ts +24 -0
  402. package/models/__tests__/secret.test.ts +37 -0
  403. package/models/__tests__/steve-schema.test.ts +73 -0
  404. package/models/__tests__/storage.k8s.io.storageclass.test.ts +22 -0
  405. package/models/__tests__/workload.test.ts +91 -0
  406. package/models/catalog.cattle.io.app.js +8 -0
  407. package/models/catalog.cattle.io.clusterrepo.js +9 -1
  408. package/models/catalog.cattle.io.uiplugin.js +7 -8
  409. package/models/cis.cattle.io.clusterscan.js +29 -8
  410. package/models/cloudcredential.js +9 -1
  411. package/models/cluster/node.js +8 -4
  412. package/models/cluster/schema.js +6 -0
  413. package/models/cluster.js +33 -0
  414. package/models/cluster.x-k8s.io.machine.js +1 -1
  415. package/models/cluster.x-k8s.io.machinedeployment.js +14 -0
  416. package/models/driver.js +63 -0
  417. package/models/fleet.cattle.io.cluster.js +27 -11
  418. package/models/fleet.cattle.io.gitrepo.js +66 -13
  419. package/models/helm.cattle.io.projecthelmchart.js +1 -1
  420. package/models/kontainerdriver.js +85 -0
  421. package/models/management/schema.js +6 -0
  422. package/models/management.cattle.io.authconfig.js +3 -2
  423. package/models/management.cattle.io.cluster.js +16 -7
  424. package/models/management.cattle.io.globalrole.js +2 -0
  425. package/models/management.cattle.io.kontainerdriver.js +1 -0
  426. package/models/management.cattle.io.node.js +18 -14
  427. package/models/management.cattle.io.nodepool.js +17 -0
  428. package/models/management.cattle.io.project.js +0 -36
  429. package/models/management.cattle.io.setting.js +11 -7
  430. package/models/management.cattle.io.user.js +2 -2
  431. package/models/monitoring.coreos.com.receiver.js +3 -1
  432. package/models/monitoring.coreos.com.route.js +1 -1
  433. package/models/namespace.js +1 -1
  434. package/models/networking.k8s.io.ingress.js +2 -1
  435. package/models/nodedriver.js +85 -0
  436. package/models/pod.js +20 -0
  437. package/models/provisioning.cattle.io.cluster.js +125 -10
  438. package/models/schema.js +28 -7
  439. package/models/secret.js +126 -18
  440. package/models/service.js +2 -0
  441. package/models/steve-schema.ts +254 -0
  442. package/models/storage.k8s.io.storageclass.js +1 -1
  443. package/models/workload.js +17 -0
  444. package/models/workload.service.js +18 -0
  445. package/package.json +18 -14
  446. package/pages/about.vue +12 -6
  447. package/pages/account/create-key.vue +0 -1
  448. package/pages/account/index.vue +7 -3
  449. package/pages/auth/login.vue +106 -103
  450. package/pages/auth/logout.vue +2 -4
  451. package/pages/auth/setup.vue +92 -66
  452. package/pages/auth/verify.vue +30 -24
  453. package/pages/c/_cluster/apps/charts/__tests__/install.helper.test.ts +2 -17
  454. package/pages/c/_cluster/apps/charts/chart.vue +54 -9
  455. package/pages/c/_cluster/apps/charts/index.vue +99 -69
  456. package/pages/c/_cluster/apps/charts/install.helpers.js +2 -13
  457. package/pages/c/_cluster/apps/charts/install.vue +12 -11
  458. package/pages/c/_cluster/auth/config/_id.vue +0 -6
  459. package/pages/c/_cluster/auth/config/index.vue +15 -9
  460. package/pages/c/_cluster/auth/roles/index.vue +8 -10
  461. package/pages/c/_cluster/ecm/index.vue +0 -2
  462. package/pages/c/_cluster/explorer/ConfigBadge.vue +13 -8
  463. package/pages/c/_cluster/explorer/EventsTable.vue +18 -0
  464. package/pages/c/_cluster/explorer/__tests__/index.test.ts +181 -0
  465. package/pages/c/_cluster/explorer/index.vue +253 -91
  466. package/pages/c/_cluster/explorer/tools/__tests__/index.test.ts +69 -0
  467. package/pages/c/_cluster/explorer/tools/index.vue +10 -6
  468. package/pages/c/_cluster/fleet/index.vue +89 -94
  469. package/pages/c/_cluster/longhorn/__tests__/longhorn.index.test.ts +89 -0
  470. package/pages/c/_cluster/longhorn/index.vue +52 -17
  471. package/pages/c/_cluster/manager/cloudCredential/index.vue +18 -25
  472. package/pages/c/_cluster/manager/drivers/kontainerDriver/_id.vue +12 -0
  473. package/pages/c/_cluster/manager/drivers/kontainerDriver/create.vue +15 -0
  474. package/pages/c/_cluster/manager/drivers/kontainerDriver/index.vue +91 -0
  475. package/pages/c/_cluster/manager/drivers/nodeDriver/_id.vue +12 -0
  476. package/pages/c/_cluster/manager/drivers/nodeDriver/create.vue +15 -0
  477. package/pages/c/_cluster/manager/drivers/nodeDriver/index.vue +60 -0
  478. package/pages/c/_cluster/manager/jwt.authentication/index.vue +235 -0
  479. package/pages/c/_cluster/manager/pages/_page.vue +4 -5
  480. package/pages/c/_cluster/monitoring/alertmanagerconfig/_alertmanagerconfigid/receiver.vue +4 -0
  481. package/pages/c/_cluster/monitoring/route-receiver/index.vue +2 -2
  482. package/pages/c/_cluster/neuvector/index.vue +1 -0
  483. package/pages/c/_cluster/settings/DefaultLinksEditor.vue +1 -0
  484. package/pages/c/_cluster/settings/banners.vue +86 -10
  485. package/pages/c/_cluster/settings/brand.vue +261 -38
  486. package/pages/c/_cluster/settings/index.vue +4 -6
  487. package/pages/c/_cluster/settings/links.vue +3 -2
  488. package/pages/c/_cluster/settings/performance.vue +71 -3
  489. package/pages/c/_cluster/uiplugins/AddExtensionRepos.vue +5 -2
  490. package/pages/c/_cluster/uiplugins/CatalogList/CatalogLoadDialog.vue +12 -8
  491. package/pages/c/_cluster/uiplugins/CatalogList/CatalogUninstallDialog.vue +9 -6
  492. package/pages/c/_cluster/uiplugins/CatalogList/index.vue +10 -46
  493. package/pages/c/_cluster/uiplugins/DeveloperInstallDialog.vue +11 -5
  494. package/pages/c/_cluster/uiplugins/InstallDialog.vue +55 -19
  495. package/pages/c/_cluster/uiplugins/SetupUIPlugins.vue +36 -301
  496. package/pages/c/_cluster/uiplugins/UninstallDialog.vue +14 -6
  497. package/pages/c/_cluster/uiplugins/__tests__/SetupUIPlugins.test.ts +52 -106
  498. package/pages/c/_cluster/uiplugins/index.vue +38 -54
  499. package/pages/diagnostic.vue +2 -2
  500. package/pages/fail-whale.vue +103 -42
  501. package/pages/home.vue +81 -24
  502. package/pages/prefs.vue +8 -4
  503. package/pages/support/index.vue +14 -10
  504. package/pkg/auto-import.js +1 -1
  505. package/plugins/axios.js +0 -36
  506. package/plugins/back-button.js +3 -5
  507. package/plugins/clean-html-directive.js +5 -30
  508. package/plugins/clean-html.js +53 -0
  509. package/plugins/clean-tooltip-directive.js +6 -31
  510. package/plugins/codemirror-loader.js +1 -1
  511. package/plugins/codemirror.js +41 -9
  512. package/plugins/dashboard-store/__tests__/mutations.test.ts +389 -0
  513. package/plugins/dashboard-store/__tests__/resource-class.test.ts +49 -0
  514. package/plugins/dashboard-store/__tests__/utils/store-mocks.ts +7 -0
  515. package/plugins/dashboard-store/actions.js +132 -25
  516. package/plugins/dashboard-store/classify.js +1 -18
  517. package/plugins/dashboard-store/getters.js +154 -44
  518. package/plugins/dashboard-store/index.js +0 -111
  519. package/plugins/dashboard-store/mutations.js +150 -52
  520. package/plugins/dashboard-store/resource-class.js +77 -127
  521. package/plugins/directives.js +6 -39
  522. package/plugins/ember-cookie.js +13 -0
  523. package/plugins/global-formatters.js +26 -5
  524. package/plugins/i18n.js +89 -55
  525. package/plugins/int-number.js +6 -20
  526. package/plugins/plugin.js +3 -3
  527. package/plugins/positive-int-number.js +6 -17
  528. package/plugins/steve/__tests__/{getters.spec.ts → getters.test.ts} +81 -10
  529. package/plugins/steve/__tests__/mutations.test.ts +49 -0
  530. package/plugins/steve/__tests__/resource-utils.test.ts +159 -0
  531. package/plugins/steve/__tests__/steve-class.test.ts +59 -0
  532. package/plugins/steve/__tests__/subscribe.spec.ts +4 -1
  533. package/plugins/steve/__tests__/utils/mutation.test.helpers.ts +105 -0
  534. package/plugins/steve/__tests__/utils/steve-mocks.ts +31 -0
  535. package/plugins/steve/accept-or-reject-socket-message.ts +103 -0
  536. package/plugins/steve/actions.js +3 -38
  537. package/plugins/steve/getters.js +164 -61
  538. package/plugins/steve/hybrid-class.js +5 -1
  539. package/plugins/steve/mutations.js +24 -3
  540. package/plugins/steve/norman-class.js +142 -2
  541. package/{utils → plugins/steve}/projectAndNamespaceFiltering.utils.ts +28 -10
  542. package/plugins/steve/resource-utils.ts +38 -0
  543. package/plugins/steve/schema.d.ts +22 -0
  544. package/plugins/steve/steve-class.js +22 -0
  545. package/plugins/steve/steve-pagination-utils.ts +368 -0
  546. package/plugins/steve/subscribe.js +17 -76
  547. package/plugins/trim-whitespace.js +6 -34
  548. package/plugins/vue-js-modal.js +1 -1
  549. package/promptRemove/pod.vue +15 -7
  550. package/public/index.html +1 -0
  551. package/rancher-components/Accordion/Accordion.test.ts +45 -0
  552. package/rancher-components/Accordion/Accordion.vue +86 -0
  553. package/rancher-components/Accordion/index.ts +1 -0
  554. package/rancher-components/BadgeState/BadgeState.vue +3 -3
  555. package/rancher-components/Banner/Banner.test.ts +1 -5
  556. package/rancher-components/Banner/Banner.vue +2 -2
  557. package/rancher-components/Card/Card.vue +4 -4
  558. package/rancher-components/Form/Checkbox/Checkbox.vue +4 -3
  559. package/rancher-components/Form/LabeledInput/LabeledInput.test.ts +18 -1
  560. package/rancher-components/Form/LabeledInput/LabeledInput.vue +57 -24
  561. package/rancher-components/Form/Radio/RadioButton.test.ts +1 -3
  562. package/rancher-components/Form/Radio/RadioButton.vue +13 -7
  563. package/rancher-components/Form/Radio/RadioGroup.vue +4 -3
  564. package/rancher-components/Form/TextArea/TextAreaAutoGrow.vue +6 -4
  565. package/rancher-components/Form/ToggleSwitch/ToggleSwitch.vue +7 -4
  566. package/rancher-components/LabeledTooltip/LabeledTooltip.vue +9 -4
  567. package/rancher-components/StringList/StringList.test.ts +270 -0
  568. package/rancher-components/StringList/StringList.vue +65 -26
  569. package/scripts/.gitlab/workflows/build-extension-catalog.gitlab-ci.yml +69 -0
  570. package/scripts/clean +1 -1
  571. package/scripts/extension/bundle +19 -7
  572. package/scripts/extension/helm/charts/ui-plugin-server/templates/_helpers.tpl +11 -0
  573. package/scripts/extension/helm/charts/ui-plugin-server/templates/cr.yaml +2 -0
  574. package/scripts/extension/helm/charts/ui-plugin-server/values.yaml +2 -0
  575. package/scripts/extension/helm/package/Dockerfile +1 -1
  576. package/scripts/extension/helm/scripts/package +11 -3
  577. package/scripts/extension/helm/scripts/patch +27 -0
  578. package/scripts/extension/parse-tag-name +4 -4
  579. package/scripts/extension/publish +25 -14
  580. package/scripts/publish-shell.sh +11 -1
  581. package/scripts/serve-pkgs +0 -2
  582. package/scripts/test-plugins-build.sh +87 -11
  583. package/scripts/vue-migrate.js +683 -0
  584. package/server/har-file.js +183 -0
  585. package/store/__tests__/catalog.test.ts +224 -0
  586. package/store/__tests__/type-map.test.ts +1122 -0
  587. package/store/auth.js +23 -4
  588. package/store/aws.js +53 -6
  589. package/store/catalog.js +22 -6
  590. package/store/cru-resource.ts +26 -0
  591. package/store/customisation.js +35 -0
  592. package/store/features.js +7 -4
  593. package/store/i18n.js +11 -0
  594. package/store/index.js +140 -49
  595. package/store/plugins.js +8 -4
  596. package/store/prefs.js +33 -38
  597. package/store/type-map.js +288 -213
  598. package/store/type-map.utils.ts +226 -0
  599. package/tsconfig.json +34 -9
  600. package/tsconfig.paths.json +21 -0
  601. package/types/components/labeledSelect.ts +50 -0
  602. package/types/resources/settings.d.ts +32 -0
  603. package/types/{userPreferences.d.ts → resources/userPreferences.d.ts} +0 -1
  604. package/types/shell/index.d.ts +1045 -770
  605. package/types/store/dashboard-store.types.ts +42 -0
  606. package/types/store/pagination.types.ts +457 -0
  607. package/types/store/type-map.ts +30 -0
  608. package/types/store/vuex.d.ts +9 -0
  609. package/types/vue-shim.d.ts +51 -0
  610. package/utils/__tests__/cluster.test.ts +20 -18
  611. package/utils/__tests__/create-yaml.test.ts +359 -2
  612. package/utils/__tests__/kontainer.test.ts +180 -0
  613. package/utils/__tests__/pod-security-admission.test.ts +1 -1
  614. package/utils/alertmanagerconfig.js +19 -0
  615. package/utils/array.ts +40 -1
  616. package/utils/async.ts +2 -0
  617. package/utils/auth.js +152 -4
  618. package/utils/axios.js +2 -21
  619. package/utils/azure.js +24 -0
  620. package/utils/banners.js +103 -0
  621. package/utils/clipboard.js +5 -0
  622. package/utils/cluster.js +1 -1
  623. package/utils/config.js +4 -0
  624. package/utils/create-yaml.js +59 -28
  625. package/utils/custom-validators.js +0 -2
  626. package/utils/error.js +41 -1
  627. package/utils/formatter.js +5 -3
  628. package/utils/git.ts +1 -1
  629. package/utils/install-redirect.js +1 -1
  630. package/utils/kontainer.ts +190 -0
  631. package/utils/object.js +24 -0
  632. package/utils/pagination-utils.ts +154 -0
  633. package/utils/pod-security-admission.ts +1 -1
  634. package/utils/router.js +86 -0
  635. package/utils/settings.ts +46 -0
  636. package/utils/time.js +2 -1
  637. package/utils/unit-tests/ChildRenderingRouterLinkStub.ts +36 -0
  638. package/utils/url.ts +1 -1
  639. package/utils/validators/formRules/__tests__/index.test.ts +70 -4
  640. package/utils/validators/formRules/index.ts +15 -9
  641. package/utils/validators/index.js +1 -0
  642. package/utils/validators/setting.js +6 -10
  643. package/utils/version.js +2 -1
  644. package/vue.config.js +377 -401
  645. package/.DS_Store +0 -0
  646. package/assets/images/providers/aks-black.svg +0 -28
  647. package/assets/images/providers/aks.svg +0 -31
  648. package/assets/styles/vendor/vue-js-modal.scss +0 -16
  649. package/components/ChartPsp.vue +0 -76
  650. package/components/EventsTable.vue +0 -67
  651. package/components/TabbedLinks/index.vue +0 -94
  652. package/components/__tests__/ChartPsp.test.ts +0 -75
  653. package/components/formatter/__tests__/ClusterProvider.test.ts +0 -28
  654. package/components/nuxt/nuxt-link.server.js +0 -16
  655. package/components/nuxt/nuxt.js +0 -101
  656. package/config/router.js +0 -408
  657. package/edit/provisioning.cattle.io.cluster/__tests__/Basics.tests.ts +0 -237
  658. package/initialize/App.js +0 -198
  659. package/initialize/client.js +0 -875
  660. package/initialize/index.js +0 -364
  661. package/initialize/layouts.ts +0 -26
  662. package/middleware/i18n.js +0 -10
  663. package/middleware/unauthenticated.js +0 -22
  664. package/mixins/fetch.server.js +0 -73
  665. package/pages/c/_cluster/apps/index.vue +0 -17
  666. package/pages/c/_cluster/auth/index.vue +0 -19
  667. package/pages/c/_cluster/index.vue +0 -17
  668. package/pages/c/_cluster/legacy/index.vue +0 -22
  669. package/pages/c/_cluster/manager/index.vue +0 -22
  670. package/pages/c/_cluster/mcapps/index.vue +0 -21
  671. package/pages/c/_cluster/uiplugins/RemoveUIPlugins.vue +0 -232
  672. package/pages/c/index.vue +0 -9
  673. package/pages/rio/mesh.vue +0 -508
  674. package/plugins/dashboard-store/__tests__/mutations.spec.ts +0 -406
  675. package/plugins/dashboard-store/rehydrate-all.js +0 -44
  676. package/plugins/portal-vue.js +0 -4
  677. package/plugins/portal.js +0 -4
  678. package/plugins/resize.js +0 -5
  679. package/plugins/shortkey.js +0 -4
  680. package/plugins/tooltip.js +0 -4
  681. package/plugins/transitions.js +0 -4
  682. package/plugins/v-select.js +0 -4
  683. package/plugins/vue-clipboard2.js +0 -4
  684. package/tsconfig.default.json +0 -46
  685. package/utils/group.js +0 -70
  686. package/utils/nuxt.js +0 -659
  687. package/utils/router.scrollBehavior.js +0 -80
  688. /package/components/__tests__/{Collapse.spec.ts → Collapse.test.ts} +0 -0
  689. /package/edit/provisioning.cattle.io.cluster/{AgentConfiguration.vue → tabs/AgentConfiguration.vue} +0 -0
  690. /package/edit/provisioning.cattle.io.cluster/{MemberRoles.vue → tabs/MemberRoles.vue} +0 -0
  691. /package/edit/provisioning.cattle.io.cluster/{ACE.vue → tabs/networking/ACE.vue} +0 -0
  692. /package/edit/provisioning.cattle.io.cluster/{RegistryMirrors.vue → tabs/registries/RegistryMirrors.vue} +0 -0
  693. /package/edit/provisioning.cattle.io.cluster/{DrainOptions.vue → tabs/upgrade/DrainOptions.vue} +0 -0
  694. /package/models/__tests__/{node.ts → node.test.ts} +0 -0
  695. /package/plugins/dashboard-store/__tests__/{actions.spec.ts → actions.test.ts} +0 -0
  696. /package/plugins/dashboard-store/__tests__/{getters.spec.ts → getters.test.ts} +0 -0
  697. /package/plugins/steve/__tests__/{header-warnings.spec.ts → header-warnings.test.ts} +0 -0
  698. /package/rancher-components/BadgeState/{BadgeState.spec.ts → BadgeState.test.ts} +0 -0
  699. /package/types/{pod-security-admission.ts → resources/pod-security-admission.ts} +0 -0
@@ -32,8 +32,16 @@ export default class CloudCredential extends NormanModel {
32
32
  };
33
33
  }
34
34
 
35
+ get secretName() {
36
+ return this.id.replace(':', '/');
37
+ }
38
+
35
39
  get secret() {
36
- return this.$rootGetters['management/byId'](SECRET, this.id.replace(':', '/'));
40
+ return this.$rootGetters['management/byId'](SECRET, this.secretName);
41
+ }
42
+
43
+ async getSecret() {
44
+ await this.$dispatch('management/find', { type: SECRET, id: this.secretName }, { root: true });
37
45
  }
38
46
 
39
47
  get configKey() {
@@ -187,7 +187,7 @@ export default class ClusterNode extends SteveModel {
187
187
  }
188
188
 
189
189
  get cpuCapacity() {
190
- return parseSi(this.status.allocatable.cpu);
190
+ return parseSi(this.status.allocatable?.cpu);
191
191
  }
192
192
 
193
193
  get cpuUsagePercentage() {
@@ -203,7 +203,7 @@ export default class ClusterNode extends SteveModel {
203
203
  }
204
204
 
205
205
  get ramCapacity() {
206
- return parseSi(this.status.capacity.memory);
206
+ return parseSi(this.status.capacity?.memory);
207
207
  }
208
208
 
209
209
  get ramUsagePercentage() {
@@ -219,7 +219,7 @@ export default class ClusterNode extends SteveModel {
219
219
  }
220
220
 
221
221
  get podUsage() {
222
- return calculatePercentage(this.status.allocatable.pods, this.status.capacity.pods);
222
+ return calculatePercentage(this.status.allocatable?.pods, this.status.capacity?.pods);
223
223
  }
224
224
 
225
225
  get podConsumedUsage() {
@@ -227,7 +227,7 @@ export default class ClusterNode extends SteveModel {
227
227
  }
228
228
 
229
229
  get podCapacity() {
230
- return Number.parseInt(this.status.capacity.pods);
230
+ return Number.parseInt(this.status.capacity?.pods);
231
231
  }
232
232
 
233
233
  get podConsumed() {
@@ -450,6 +450,10 @@ export default class ClusterNode extends SteveModel {
450
450
  get provider() {
451
451
  return this.$rootGetters['currentCluster'].provisioner.toLowerCase();
452
452
  }
453
+
454
+ get displayTaintsAndLabels() {
455
+ return !!this.spec.taints?.length || !!this.customLabelCount;
456
+ }
453
457
  }
454
458
 
455
459
  function calculatePercentage(allocatable, capacity) {
@@ -0,0 +1,6 @@
1
+ import SteveSchema from '../steve-schema';
2
+
3
+ /**
4
+ * This is the steve schema that's used for the cluster store
5
+ */
6
+ export default class ClusterStoreSchema extends SteveSchema { }
@@ -0,0 +1,33 @@
1
+ import NormanModel from '@shell/plugins/steve/norman-class';
2
+
3
+ export const LABEL_CONTAINS_PROTECTED = [
4
+ 'io.cattle.lifecycle',
5
+ 'kubernetes.io',
6
+ 'cattle.io',
7
+ 'k3s.io',
8
+ ];
9
+
10
+ export const ANNOTATIONS_CONTAINS_PROTECTED = [
11
+ 'coreos.com',
12
+ 'cattle.io',
13
+ 'k3s.io',
14
+ 'kubernetes.io',
15
+ 'k3s.io',
16
+ ];
17
+ export default class NormanCluster extends NormanModel {
18
+ get systemLabels() {
19
+ return Object.keys(this.labels || {}).filter((key) => LABEL_CONTAINS_PROTECTED.find((label) => key.includes(label)));
20
+ }
21
+
22
+ get systemAnnotations() {
23
+ return Object.keys(this.annotations || {}).filter((key) => ANNOTATIONS_CONTAINS_PROTECTED.find((annotation) => key.includes(annotation)));
24
+ }
25
+
26
+ get hasSystemLabels() {
27
+ return !!(this.systemLabels || []).length;
28
+ }
29
+
30
+ get hasSystemAnnotations() {
31
+ return !!(this.systemAnnotations || []).length;
32
+ }
33
+ }
@@ -231,7 +231,7 @@ export default class CapiMachine extends SteveModel {
231
231
  return false;
232
232
  }
233
233
 
234
- return notOnlyOfRole(this, this.cluster.machines);
234
+ return notOnlyOfRole(this, this.cluster?.machines);
235
235
  }
236
236
 
237
237
  get roles() {
@@ -7,6 +7,7 @@ import { handleConflict } from '@shell/plugins/dashboard-store/normalize';
7
7
  import { MACHINE_ROLES } from '@shell/config/labels-annotations';
8
8
  import { notOnlyOfRole } from '@shell/models/cluster.x-k8s.io.machine';
9
9
  import { KIND } from '../config/elemental-types';
10
+ import { KIND as HARVESTER_KIND } from '../config/harvester-manager-types';
10
11
 
11
12
  export default class CapiMachineDeployment extends SteveModel {
12
13
  get cluster() {
@@ -69,6 +70,19 @@ export default class CapiMachineDeployment extends SteveModel {
69
70
  return this.template?.providerSize || this.t('node.list.poolDescription.noSize');
70
71
  }
71
72
 
73
+ get providerSummary() {
74
+ if (this.template) {
75
+ switch (this.infrastructureRefKind) {
76
+ case HARVESTER_KIND.MACHINE_TEMPLATE:
77
+ return null;
78
+ default:
79
+ return `${ this.providerDisplay } \u2013 ${ this.providerLocation } / ${ this.providerSize } (${ this.providerName })`;
80
+ }
81
+ }
82
+
83
+ return null;
84
+ }
85
+
72
86
  get desired() {
73
87
  return this.spec?.replicas || 0;
74
88
  }
@@ -0,0 +1,63 @@
1
+ import { DESCRIPTION } from '@shell/config/labels-annotations';
2
+ import NormanModel from '@shell/plugins/steve/norman-class';
3
+ import { KONTAINER_TO_DRIVER } from './management.cattle.io.kontainerdriver';
4
+ import capitalize from 'lodash/capitalize';
5
+
6
+ export default class Driver extends NormanModel {
7
+ get canViewYaml() {
8
+ return false;
9
+ }
10
+
11
+ get driverName() {
12
+ if (!this.builtIn) {
13
+ // if the driver is not built in, there's a good change its a custom one
14
+ // custom drivers have a random id, so shouldn't be used as the type
15
+ // instead use the status.displayName. this will map to the name extracted from the binary
16
+ const driverName = this.status?.displayName?.toLowerCase();
17
+
18
+ if (driverName) {
19
+ // some drivers are built in but don't have the builtIn flag. ensure we pass these through K_TO_D
20
+ return KONTAINER_TO_DRIVER[driverName] || driverName;
21
+ }
22
+ }
23
+
24
+ return KONTAINER_TO_DRIVER[this.id] || this.name || this.id;
25
+ }
26
+
27
+ get nameDisplay() {
28
+ const path = `cluster.provider.${ this.driverName }`;
29
+ const label = capitalize(this.driverName);
30
+
31
+ return this.$rootGetters['i18n/withFallback'](path, label);
32
+ }
33
+
34
+ get description() {
35
+ if (!!this.builtIn || !!this.builtin) {
36
+ return this.$rootGetters['i18n/withFallback']('tableHeaders.builtIn');
37
+ } else {
38
+ return this.url;
39
+ }
40
+ }
41
+
42
+ /**
43
+ * Set description based on the type of model available with private fallback
44
+ */
45
+ set description(value) {
46
+ if (this.annotations) {
47
+ this.annotations[DESCRIPTION] = value;
48
+ }
49
+
50
+ this._description = value;
51
+ }
52
+
53
+ cleanForSave(data, forNew) {
54
+ const val = super.cleanForSave(data, forNew);
55
+
56
+ if (forNew) {
57
+ val.active = true;
58
+ }
59
+ delete val.metadata;
60
+
61
+ return val;
62
+ }
63
+ }
@@ -107,6 +107,10 @@ export default class FleetCluster extends SteveModel {
107
107
  return this.metadata?.labels?.[FLEET_LABELS.CLUSTER_DISPLAY_NAME] || this.metadata?.name || this.id;
108
108
  }
109
109
 
110
+ get name() {
111
+ return this.metadata?.name || this.metadata?.labels?.[FLEET_LABELS.CLUSTER_NAME];
112
+ }
113
+
110
114
  get state() {
111
115
  if (this.spec?.paused === true) {
112
116
  return 'paused';
@@ -115,17 +119,6 @@ export default class FleetCluster extends SteveModel {
115
119
  return this.metadata?.state?.name || 'unknown';
116
120
  }
117
121
 
118
- get nodeInfo() {
119
- const ready = this.status?.agent?.readyNodes || 0;
120
- const unready = this.status?.agent?.nonReadyNodes || 0;
121
-
122
- return {
123
- ready,
124
- unready,
125
- total: ready + unready,
126
- };
127
- }
128
-
129
122
  get repoInfo() {
130
123
  const ready = this.status?.readyGitRepos || 0;
131
124
  const total = this.status?.desiredReadyGitRepos || 0;
@@ -137,6 +130,29 @@ export default class FleetCluster extends SteveModel {
137
130
  };
138
131
  }
139
132
 
133
+ get bundleInfo() {
134
+ const bundlesData = {
135
+ ready: 0,
136
+ total: 0
137
+ };
138
+ const readyBundles = this.status?.display?.readyBundles;
139
+
140
+ if (readyBundles && readyBundles.includes('/')) {
141
+ const dataArr = readyBundles.split('/');
142
+
143
+ if (dataArr.length === 2 && parseInt(dataArr[0]) >= 0 && parseInt(dataArr[1]) >= 0) {
144
+ bundlesData.ready = parseInt(dataArr[0]);
145
+ bundlesData.total = parseInt(dataArr[1]);
146
+
147
+ return bundlesData;
148
+ }
149
+ }
150
+
151
+ bundlesData.noValidData = true;
152
+
153
+ return bundlesData;
154
+ }
155
+
140
156
  get mgmt() {
141
157
  const mgmt = this.$getters['byId'](MANAGEMENT.CLUSTER, this.metadata?.labels?.[FLEET_LABELS.CLUSTER_NAME]);
142
158
 
@@ -7,7 +7,9 @@ import { FLEET as FLEET_ANNOTATIONS } from '@shell/config/labels-annotations';
7
7
  import { addObject, addObjects, findBy, insertAt } from '@shell/utils/array';
8
8
  import { set } from '@shell/utils/object';
9
9
  import SteveModel from '@shell/plugins/steve/steve-class';
10
- import { STATES_ENUM, colorForState, stateDisplay, stateSort } from '@shell/plugins/dashboard-store/resource-class';
10
+ import {
11
+ STATES_ENUM, colorForState, mapStateToEnum, primaryDisplayStatusFromCount, stateDisplay, stateSort
12
+ } from '@shell/plugins/dashboard-store/resource-class';
11
13
  import { NAME } from '@shell/config/product/explorer';
12
14
 
13
15
  function quacksLikeAHash(str) {
@@ -103,6 +105,8 @@ export default class GitRepo extends SteveModel {
103
105
  const groups = workspace?.clusterGroups || [];
104
106
 
105
107
  if (workspace?.id === 'fleet-local') {
108
+ // should we be getting the clusters from workspace.clusters instead of having to rely on the groups,
109
+ // which takes an additional request to be done on the Fleet dashboard screen?
106
110
  const local = findBy(groups, 'id', 'fleet-local/default');
107
111
 
108
112
  if (local) {
@@ -203,17 +207,6 @@ export default class GitRepo extends SteveModel {
203
207
  return hash;
204
208
  }
205
209
 
206
- get clusterInfo() {
207
- const ready = this.status?.readyClusters || 0;
208
- const total = this.status?.desiredReadyClusters || 0;
209
-
210
- return {
211
- ready,
212
- unready: total - ready,
213
- total,
214
- };
215
- }
216
-
217
210
  get targetInfo() {
218
211
  let mode = null;
219
212
  let cluster = null;
@@ -323,6 +316,14 @@ export default class GitRepo extends SteveModel {
323
316
  return 0;
324
317
  }
325
318
 
319
+ get targetClustersReady() {
320
+ if (this.targetClusters && this.targetClusters.length) {
321
+ return this.targetClusters.filter((cluster) => cluster.state === 'active');
322
+ }
323
+
324
+ return 0;
325
+ }
326
+
326
327
  get bundleDeployments() {
327
328
  const bds = this.$getters['all'](FLEET.BUNDLE_DEPLOYMENT);
328
329
 
@@ -384,8 +385,9 @@ export default class GitRepo extends SteveModel {
384
385
  namespace: r.namespace,
385
386
  name: r.name,
386
387
  clusterId: c.id,
388
+ clusterLabel: c.metadata.labels[FLEET_ANNOTATIONS.CLUSTER_NAME],
387
389
  clusterName: c.nameDisplay,
388
- state,
390
+ state: mapStateToEnum(state),
389
391
  stateBackground: color,
390
392
  stateDisplay: display,
391
393
  stateSort: stateSort(color, display),
@@ -401,6 +403,57 @@ export default class GitRepo extends SteveModel {
401
403
  return out;
402
404
  }
403
405
 
406
+ get clusterInfo() {
407
+ const ready = this.status?.readyClusters || 0;
408
+ const total = this.status?.desiredReadyClusters || 0;
409
+
410
+ return {
411
+ ready,
412
+ unready: total - ready,
413
+ total,
414
+ };
415
+ }
416
+
417
+ get clusterResourceStatus() {
418
+ const clusterStatuses = this.resourcesStatuses.reduce((prev, curr) => {
419
+ const { clusterId, clusterLabel } = curr;
420
+
421
+ const state = curr.state;
422
+
423
+ if (!prev[clusterId]) {
424
+ prev[clusterId] = {
425
+ clusterLabel,
426
+ resourceCounts: { [state]: 0, desiredReady: 0 }
427
+
428
+ };
429
+ }
430
+
431
+ if (!prev[clusterId].resourceCounts[state]) {
432
+ prev[clusterId].resourceCounts[state] = 0;
433
+ }
434
+
435
+ prev[clusterId].resourceCounts[state] += 1;
436
+ prev[clusterId].resourceCounts.desiredReady += 1;
437
+
438
+ return prev;
439
+ }, {});
440
+
441
+ const values = Object.keys(clusterStatuses).map((key) => {
442
+ const { clusterLabel, resourceCounts } = clusterStatuses[key];
443
+
444
+ return {
445
+ clusterId: key,
446
+ clusterLabel, // FLEET LABEL
447
+ status: {
448
+ displayStatus: primaryDisplayStatusFromCount(resourceCounts),
449
+ resourceCounts: { ...resourceCounts }
450
+ }
451
+ };
452
+ });
453
+
454
+ return values;
455
+ }
456
+
404
457
  get clustersList() {
405
458
  return this.$getters['all'](FLEET.CLUSTER);
406
459
  }
@@ -22,7 +22,7 @@ export default class ProjectHelmChart extends SteveModel {
22
22
  const clusterId = this.$rootGetters['currentCluster']?.id;
23
23
  const project = this.$rootGetters['management/byId'](MANAGEMENT.PROJECT, `${ clusterId }/${ this.projectId }`);
24
24
 
25
- return project.spec.displayName;
25
+ return project?.spec.displayName;
26
26
  }
27
27
 
28
28
  get namespaces() {
@@ -0,0 +1,85 @@
1
+ import Driver from '@shell/models/driver';
2
+
3
+ export default class KontainerDriver extends Driver {
4
+ get doneRoute() {
5
+ return 'c-cluster-manager-driver-kontainerdriver';
6
+ }
7
+
8
+ get _availableActions() {
9
+ const out = [
10
+ {
11
+ action: 'activate',
12
+ label: this.t('action.activate'),
13
+ icon: 'icon icon-play',
14
+ bulkable: true,
15
+ bulkAction: 'activateBulk',
16
+ enabled: !!this.links.update && !this.active
17
+ },
18
+ {
19
+ action: 'deactivate',
20
+ label: this.t('action.deactivate'),
21
+ icon: 'icon icon-pause',
22
+ bulkable: true,
23
+ bulkAction: 'deactivateBulk',
24
+ enabled: !!this.links.update && !!this.active,
25
+ weight: -1
26
+ },
27
+ { divider: true },
28
+ {
29
+ action: 'viewInApi',
30
+ enabled: true,
31
+ icon: 'icon icon-external-link',
32
+ label: this.t('action.viewInApi'),
33
+ },
34
+ { divider: true },
35
+ {
36
+ action: 'goToEdit',
37
+ label: this.t('action.edit'),
38
+ icon: 'icon icon-edit',
39
+ bulkable: false,
40
+ enabled: !!this.links.update && !this.builtin,
41
+ },
42
+ {
43
+ action: 'promptRemove',
44
+ altAction: 'remove',
45
+ bulkAction: 'promptRemove',
46
+ label: this.t('action.remove'),
47
+ bulkable: true,
48
+ icon: 'icon icon-delete',
49
+ enabled: !!this.links.remove,
50
+ weight: -10,
51
+ }
52
+ ];
53
+
54
+ return out;
55
+ }
56
+
57
+ deactivate(resources = [this]) {
58
+ this.$dispatch('promptModal', {
59
+ componentProps: { drivers: resources, driverType: 'kontainerDrivers' },
60
+ component: 'DeactivateDriverDialog'
61
+ });
62
+ }
63
+
64
+ deactivateBulk(resources) {
65
+ this.$dispatch('promptModal', {
66
+ componentProps: { drivers: resources, driverType: 'kontainerDrivers' },
67
+ component: 'DeactivateDriverDialog'
68
+ });
69
+ }
70
+
71
+ activate() {
72
+ return this.$dispatch('rancher/request', {
73
+ url: `v3/kontainerDrivers/${ escape(this.id) }?action=activate`,
74
+ method: 'post',
75
+ }, { root: true });
76
+ }
77
+
78
+ async activateBulk(resources) {
79
+ await Promise.all(resources.map((resource) => this.$dispatch('rancher/request', {
80
+ url: `v3/kontainerDrivers/${ escape(resource.id) }?action=activate`,
81
+ method: 'post',
82
+ }, { root: true }
83
+ )));
84
+ }
85
+ }
@@ -0,0 +1,6 @@
1
+ import SteveSchema from '../steve-schema';
2
+
3
+ /**
4
+ * This is the steve schema that's used for the management store
5
+ */
6
+ export default class ManagementStoreSchema extends SteveSchema { }
@@ -14,10 +14,11 @@ export const configType = {
14
14
  googleoauth: 'oauth',
15
15
  local: '',
16
16
  github: 'oauth',
17
- keycloakoidc: 'oidc'
17
+ keycloakoidc: 'oidc',
18
+ genericoidc: 'oidc',
18
19
  };
19
20
 
20
- const imageOverrides = { keycloakoidc: 'keycloak' };
21
+ const imageOverrides = { keycloakoidc: 'keycloak', genericoidc: 'openid' };
21
22
 
22
23
  export default class AuthConfig extends SteveModel {
23
24
  get _availableActions() {
@@ -1,4 +1,3 @@
1
- import Vue from 'vue';
2
1
  import { CATALOG, CLUSTER_BADGE } from '@shell/config/labels-annotations';
3
2
  import { NODE, FLEET, MANAGEMENT, CAPI } from '@shell/config/types';
4
3
  import { insertAt, addObject, removeObject } from '@shell/utils/array';
@@ -15,6 +14,7 @@ import HybridModel from '@shell/plugins/steve/hybrid-class';
15
14
  import { LINUX, WINDOWS } from '@shell/store/catalog';
16
15
  import { KONTAINER_TO_DRIVER } from './management.cattle.io.kontainerdriver';
17
16
  import { PINNED_CLUSTERS } from '@shell/store/prefs';
17
+ import { copyTextToClipboard } from '@shell/utils/clipboard';
18
18
 
19
19
  // See translation file cluster.providers for list of providers
20
20
  // If the logo is not named with the provider name, add an override here
@@ -88,6 +88,10 @@ export default class MgmtCluster extends HybridModel {
88
88
  }
89
89
 
90
90
  get provisioner() {
91
+ if (this.status?.provider ) {
92
+ return this.status.provider;
93
+ }
94
+
91
95
  // For imported K3s clusters, this.status.driver is 'k3s.'
92
96
  return this.status?.driver ? this.status.driver : 'imported';
93
97
  }
@@ -295,9 +299,10 @@ export default class MgmtCluster extends HybridModel {
295
299
 
296
300
  // Custom badge to show for the Cluster (if the appropriate annotations are set)
297
301
  get badge() {
298
- const text = this.metadata?.annotations?.[CLUSTER_BADGE.TEXT];
302
+ const icon = this.metadata?.annotations?.[CLUSTER_BADGE.ICON_TEXT];
303
+ const comment = this.metadata?.annotations?.[CLUSTER_BADGE.TEXT];
299
304
 
300
- if (!text) {
305
+ if (!icon && !comment) {
301
306
  return undefined;
302
307
  }
303
308
 
@@ -305,10 +310,10 @@ export default class MgmtCluster extends HybridModel {
305
310
  const iconText = this.metadata?.annotations[CLUSTER_BADGE.ICON_TEXT] || '';
306
311
 
307
312
  return {
308
- text,
313
+ text: comment || undefined,
309
314
  color,
310
315
  textColor: textColor(parseColor(color)),
311
- iconText: iconText.substr(0, 2)
316
+ iconText: iconText.substr(0, 3)
312
317
  };
313
318
  }
314
319
 
@@ -404,9 +409,13 @@ export default class MgmtCluster extends HybridModel {
404
409
  }
405
410
 
406
411
  async copyKubeConfig() {
407
- const config = await this.generateKubeConfig();
412
+ try {
413
+ const config = await this.generateKubeConfig();
408
414
 
409
- Vue.prototype.$copyText(config);
415
+ if (config) {
416
+ await copyTextToClipboard(config);
417
+ }
418
+ } catch {}
410
419
  }
411
420
 
412
421
  async fetchNodeMetrics() {
@@ -37,6 +37,7 @@ export default class GlobalRole extends SteveDescriptionModel {
37
37
  }
38
38
 
39
39
  get nameDisplay() {
40
+ // i18n-uses rbac.globalRoles.role.*.label
40
41
  const path = `rbac.globalRoles.role.${ this.id }.label`;
41
42
  const label = this.displayName || this.metadata?.name || this.id;
42
43
 
@@ -46,6 +47,7 @@ export default class GlobalRole extends SteveDescriptionModel {
46
47
  get descriptionDisplay() {
47
48
  return this.description ||
48
49
  this.metadata?.annotations?.[DESCRIPTION] ||
50
+ // i18n-uses rbac.globalRoles.role.*.description
49
51
  this.$rootGetters['i18n/withFallback'](`rbac.globalRoles.role.${ this.id }.description`, this.t(`rbac.globalRoles.unknownRole.description`));
50
52
  }
51
53
 
@@ -1,6 +1,7 @@
1
1
  import HybridModel from '@shell/plugins/steve/hybrid-class';
2
2
 
3
3
  const HIDDEN = ['rke', 'rancherkubernetesengine'];
4
+
4
5
  const V2 = ['amazoneks', 'googlegke', 'azureaks'];
5
6
  const IMPORTABLE = ['amazoneks', 'googlegke', 'azureaks'];
6
7
 
@@ -8,6 +8,7 @@ import { insertAt } from '@shell/utils/array';
8
8
  import { downloadUrl } from '@shell/utils/download';
9
9
  import findLast from 'lodash/findLast';
10
10
  import HybridModel from '@shell/plugins/steve/hybrid-class';
11
+ import { notOnlyOfRole } from '@shell/models/cluster.x-k8s.io.machine';
11
12
 
12
13
  export default class MgmtNode extends HybridModel {
13
14
  get _availableActions() {
@@ -21,11 +22,12 @@ export default class MgmtNode extends HybridModel {
21
22
  };
22
23
 
23
24
  const scaleDown = {
24
- action: 'scaleDown',
25
- enabled: !!this.canScaleDown,
26
- icon: 'icon icon-minus icon-fw',
27
- label: this.t('node.actions.scaleDown'),
28
- bulkable: true,
25
+ action: 'scaleDown',
26
+ bulkAction: 'scaleDown',
27
+ enabled: !!this.canScaleDown,
28
+ icon: 'icon icon-minus icon-fw',
29
+ label: this.t('node.actions.scaleDown'),
30
+ bulkable: true,
29
31
  };
30
32
 
31
33
  insertAt(out, 0, { divider: true });
@@ -105,12 +107,12 @@ export default class MgmtNode extends HybridModel {
105
107
  }
106
108
  }
107
109
 
108
- async scaleDown(resources) {
109
- const safeResources = Array.isArray(resources) ? resources : [this];
110
-
111
- await Promise.all(safeResources.map((node) => {
112
- return node.norman?.doAction('scaledown');
113
- }));
110
+ async scaleDown(resources = this) {
111
+ this.$dispatch('promptModal', {
112
+ resources,
113
+ component: 'ScaleMachineDownDialog',
114
+ modalWidth: '450px'
115
+ });
114
116
  }
115
117
 
116
118
  get provisioningCluster() {
@@ -166,10 +168,12 @@ export default class MgmtNode extends HybridModel {
166
168
  }
167
169
 
168
170
  get canScaleDown() {
169
- const isInOnlyPool = this.pool?.provisioningCluster?.pools?.length === 1;
170
- const isOnlyNode = this.pool?.nodes?.length === 1;
171
+ if (!this.isEtcd && !this.isControlPlane) {
172
+ return true;
173
+ }
174
+
171
175
  const hasAction = this.norman?.actions?.scaledown;
172
176
 
173
- return hasAction && (!isInOnlyPool || !isOnlyNode);
177
+ return hasAction && notOnlyOfRole(this, this.provisioningCluster?.nodes);
174
178
  }
175
179
  }