@rancher/shell 0.1.0 → 0.1.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 (595) hide show
  1. package/assets/styles/base/_basic.scss +0 -1
  2. package/assets/styles/base/_variables.scss +2 -0
  3. package/assets/styles/global/_labeled-input.scss +6 -1
  4. package/assets/styles/global/_select.scss +9 -0
  5. package/assets/styles/vendor/vue-js-modal.scss +4 -0
  6. package/assets/translations/en-us.yaml +240 -16
  7. package/assets/translations/zh-hans.yaml +335 -111
  8. package/chart/example.vue +1 -1
  9. package/chart/istio.vue +2 -2
  10. package/chart/logging/index.vue +2 -2
  11. package/chart/monitoring/alerting/index.vue +2 -2
  12. package/chart/monitoring/grafana/index.vue +2 -2
  13. package/chart/monitoring/index.vue +2 -2
  14. package/chart/monitoring/prometheus/index.vue +4 -4
  15. package/chart/rancher-alerting-drivers.vue +17 -3
  16. package/chart/rancher-backup/S3.vue +37 -4
  17. package/chart/rancher-backup/index.vue +3 -3
  18. package/cloud-credential/aws.vue +1 -1
  19. package/cloud-credential/azure.vue +1 -1
  20. package/cloud-credential/digitalocean.vue +1 -1
  21. package/cloud-credential/gcp.vue +1 -1
  22. package/cloud-credential/generic.vue +1 -1
  23. package/cloud-credential/harvester.vue +2 -2
  24. package/cloud-credential/linode.vue +1 -1
  25. package/cloud-credential/s3.vue +2 -2
  26. package/cloud-credential/vmwarevsphere.vue +1 -1
  27. package/components/ActionMenu.vue +11 -1
  28. package/components/Alert.vue +1 -1
  29. package/components/AssignTo.vue +2 -2
  30. package/components/AsyncButton.vue +25 -12
  31. package/components/AwsComplianceBanner.vue +44 -0
  32. package/components/BannerGraphic.vue +11 -2
  33. package/components/ChartReadme.vue +10 -2
  34. package/components/CompoundStatusBadge.vue +50 -0
  35. package/components/CopyToClipboardText.vue +25 -4
  36. package/components/CruResource.vue +185 -16
  37. package/components/CruResourceFooter.vue +17 -1
  38. package/components/EtcdInfoBanner.vue +1 -1
  39. package/components/FilterLabel.vue +254 -0
  40. package/components/GlobalRoleBindings.vue +2 -2
  41. package/components/GrafanaDashboard.vue +1 -1
  42. package/components/GrowlManager.vue +20 -9
  43. package/components/HarvesterServiceAddOnConfig.vue +2 -2
  44. package/components/Import.vue +2 -2
  45. package/components/LandingPagePreference.vue +2 -2
  46. package/components/Markdown.vue +44 -12
  47. package/components/ModalWithCard.vue +2 -2
  48. package/components/MoveModal.vue +1 -1
  49. package/components/PercentageBar.vue +1 -1
  50. package/components/PromptChangePassword.vue +1 -1
  51. package/components/PromptModal.vue +13 -2
  52. package/components/PromptRemove.vue +64 -33
  53. package/components/PromptRestore.vue +3 -3
  54. package/components/Questions/Boolean.vue +1 -1
  55. package/components/Questions/Float.vue +1 -1
  56. package/components/Questions/Int.vue +1 -1
  57. package/components/Questions/Reference.vue +1 -1
  58. package/components/Questions/String.vue +1 -1
  59. package/components/RelatedResources.vue +1 -1
  60. package/components/RelatedWorkloadsTable.vue +3 -1
  61. package/components/ResourceDetail/Masthead.vue +27 -9
  62. package/components/ResourceDetail/index.vue +72 -7
  63. package/components/ResourceList/Masthead.vue +22 -0
  64. package/components/ResourceList/ResourceLoadingIndicator.vue +137 -0
  65. package/components/ResourceList/index.vue +42 -7
  66. package/components/ResourceTable.vue +11 -2
  67. package/components/ResourceYaml.vue +7 -1
  68. package/components/SelectIconGrid.vue +14 -1
  69. package/components/SortableTable/THead.vue +1 -1
  70. package/components/SortableTable/debug.js +117 -0
  71. package/components/SortableTable/index.vue +200 -43
  72. package/components/SortableTable/paging.js +2 -12
  73. package/components/SortableTable/selection.js +3 -0
  74. package/components/SortableTable/sorting.js +3 -1
  75. package/components/Tabbed/Tab.vue +25 -4
  76. package/components/Tabbed/index.vue +133 -119
  77. package/components/TypeDescription.vue +1 -1
  78. package/components/VMConsoleBar.vue +1 -1
  79. package/components/Wizard.vue +53 -14
  80. package/components/YamlEditor.vue +10 -0
  81. package/components/__tests__/CopyCode.test.ts +1 -7
  82. package/components/__tests__/CruResource.test.ts +1 -8
  83. package/components/auth/AllowedPrincipals.vue +1 -1
  84. package/components/auth/AuthBanner.vue +2 -1
  85. package/components/auth/AzureWarning.vue +69 -0
  86. package/components/auth/RoleDetailEdit.vue +4 -4
  87. package/components/auth/login/ldap.vue +1 -1
  88. package/components/cards/ApplicationCard.vue +140 -0
  89. package/components/dialog/AddClusterMemberDialog.vue +1 -1
  90. package/components/dialog/AddCustomBadgeDialog.vue +4 -4
  91. package/components/dialog/AddProjectMemberDialog.vue +2 -2
  92. package/components/dialog/AddonConfigConfirmationDialog.vue +1 -1
  93. package/components/dialog/DrainNode.vue +3 -3
  94. package/components/dialog/ForceMachineRemoveDialog.vue +2 -2
  95. package/components/dialog/GenericPrompt.vue +2 -2
  96. package/components/dialog/RollbackWorkloadDialog.vue +2 -2
  97. package/components/dialog/RotateCertificatesDialog.vue +3 -3
  98. package/components/dialog/RotateEncryptionKeyDialog.vue +11 -6
  99. package/components/dialog/SaveAsRKETemplateDialog.vue +3 -3
  100. package/components/dialog/harvester/AddHotplugModal.vue +3 -3
  101. package/components/dialog/harvester/BackupModal.vue +3 -3
  102. package/components/dialog/harvester/CloneTemplate.vue +3 -3
  103. package/components/dialog/harvester/EjectCDROMDialog.vue +3 -3
  104. package/components/dialog/harvester/ExportImageDialog.vue +3 -3
  105. package/components/dialog/harvester/MaintenanceDialog.vue +2 -2
  106. package/components/dialog/harvester/MigrationDialog.vue +2 -2
  107. package/components/dialog/harvester/RestoreDialog.vue +2 -2
  108. package/components/dialog/harvester/SupportBundle.vue +2 -2
  109. package/components/dialog/harvester/UnplugVolume.vue +2 -2
  110. package/components/fleet/FleetBundleResources.vue +1 -1
  111. package/components/fleet/FleetBundles.vue +1 -1
  112. package/components/fleet/FleetResources.vue +5 -3
  113. package/components/fleet/ForceDirectedTreeChart/chartIcons.js +17 -0
  114. package/components/fleet/ForceDirectedTreeChart/index.vue +553 -0
  115. package/components/form/ArrayList.vue +22 -3
  116. package/components/form/BannerSettings.vue +3 -3
  117. package/components/form/ChangePassword.vue +2 -2
  118. package/components/form/Command.vue +28 -9
  119. package/components/form/Error.vue +50 -0
  120. package/components/form/Footer.vue +2 -5
  121. package/components/form/HealthCheck.vue +2 -2
  122. package/components/form/HookOption.vue +2 -2
  123. package/components/form/InputWithSelect.vue +12 -2
  124. package/components/form/KeyValue.vue +5 -2
  125. package/components/form/LabeledSelect.vue +27 -14
  126. package/components/form/Labels.vue +12 -0
  127. package/components/form/MatchExpressions.vue +44 -10
  128. package/components/form/Members/ClusterPermissionsEditor.vue +3 -3
  129. package/components/form/Members/MembershipEditor.vue +10 -1
  130. package/components/form/Members/ProjectMembershipEditor.vue +1 -0
  131. package/components/form/NameNsDescription.vue +202 -79
  132. package/components/form/Networking.vue +1 -1
  133. package/components/form/NodeAffinity.vue +41 -26
  134. package/components/form/NodeScheduling.vue +29 -3
  135. package/components/form/NotificationSettings.vue +2 -2
  136. package/components/form/Password.vue +1 -1
  137. package/components/form/PodAffinity.vue +64 -6
  138. package/components/form/PodSecurity.vue +2 -2
  139. package/components/form/Ports.vue +1 -1
  140. package/components/form/Probe.vue +60 -17
  141. package/components/form/ProjectMemberEditor.vue +3 -3
  142. package/components/form/ResourceQuota/NamespaceRow.vue +46 -2
  143. package/components/form/ResourceQuota/Project.vue +4 -0
  144. package/components/form/ResourceTabs/index.vue +19 -7
  145. package/components/form/RuleSelector.vue +1 -1
  146. package/components/form/Security.vue +56 -14
  147. package/components/form/Select.vue +52 -10
  148. package/components/form/SelectOrCreateAuthSecret.vue +70 -31
  149. package/components/form/ServiceNameSelect.vue +1 -1
  150. package/components/form/ServicePorts.vue +10 -2
  151. package/components/form/ShellInput.vue +1 -1
  152. package/components/form/SimpleSecretSelector.vue +2 -2
  153. package/components/form/Tolerations.vue +1 -1
  154. package/components/form/UnitInput.vue +12 -3
  155. package/components/form/ValueFromResource.vue +1 -1
  156. package/components/form/WorkloadPorts.vue +1 -1
  157. package/components/form/__tests__/Command.test.ts +63 -0
  158. package/components/form/__tests__/Error.test.ts +56 -0
  159. package/components/form/__tests__/MatchExpressions.test.ts +79 -0
  160. package/components/form/__tests__/Probe.test.ts +62 -0
  161. package/components/form/__tests__/Security.test.ts +55 -0
  162. package/components/form/__tests__/UnitInput.test.ts +31 -23
  163. package/components/formatter/BadgeStateFormatter.vue +1 -1
  164. package/components/formatter/Capitalize.vue +7 -0
  165. package/components/formatter/ClusterLink.vue +6 -2
  166. package/components/formatter/ClusterProvider.vue +36 -0
  167. package/components/formatter/DelayedValue.vue +43 -0
  168. package/components/formatter/Endpoints.vue +2 -2
  169. package/components/formatter/HarvesterDiskState.vue +1 -1
  170. package/components/formatter/HarvesterIpAddress.vue +37 -18
  171. package/components/formatter/HarvesterMigrationState.vue +1 -1
  172. package/components/formatter/HarvesterVmState.vue +1 -1
  173. package/components/formatter/LinkDetail.vue +11 -2
  174. package/components/formatter/LinkName.vue +2 -2
  175. package/components/formatter/LiveExpiryBadgeState.vue +1 -1
  176. package/components/formatter/LivePodRestarts.vue +47 -0
  177. package/components/formatter/MachineSummaryGraph.vue +51 -5
  178. package/components/formatter/PodsUsage.vue +5 -3
  179. package/components/formatter/Weight.vue +1 -1
  180. package/components/formatter/WorkloadHealthScale.vue +17 -6
  181. package/components/nav/HarvesterUpgrade.vue +15 -5
  182. package/components/nav/Header.vue +15 -6
  183. package/components/nav/Jump.vue +1 -1
  184. package/components/nav/NamespaceFilter.vue +30 -10
  185. package/components/nav/TopLevelMenu.vue +52 -14
  186. package/components/nav/WindowManager/ContainerLogs.vue +14 -2
  187. package/components/nav/WorkspaceSwitcher.vue +1 -1
  188. package/components/{NovncConsole.vue → novnc/NovncConsole.vue} +0 -0
  189. package/components/novnc/NovncConsoleItem.vue +89 -0
  190. package/components/novnc/NovncConsoleWrapper.vue +243 -0
  191. package/config/labels-annotations.js +6 -2
  192. package/config/product/explorer.js +7 -3
  193. package/config/product/fleet.js +4 -1
  194. package/config/product/manager.js +5 -6
  195. package/config/product/settings.js +12 -1
  196. package/config/query-params.js +2 -0
  197. package/config/roles.ts +5 -0
  198. package/config/settings.js +60 -63
  199. package/config/table-headers.js +47 -18
  200. package/config/types.js +24 -8
  201. package/content/docs/en-us/whats-new.md +25 -0
  202. package/core/plugin.ts +12 -2
  203. package/creators/app/init +7 -1
  204. package/creators/pkg/tsconfig.json +2 -3
  205. package/detail/catalog.cattle.io.app.vue +1 -1
  206. package/detail/cis.cattle.io.clusterscan.vue +1 -1
  207. package/detail/fleet.cattle.io.bundle.vue +73 -21
  208. package/detail/fleet.cattle.io.gitrepo.vue +5 -4
  209. package/detail/harvesterhci.io.host/HarvesterHostBasic.vue +25 -4
  210. package/detail/harvesterhci.io.host/HarvesterHostDisk.vue +2 -2
  211. package/detail/harvesterhci.io.virtualmachinebackup/index.vue +1 -1
  212. package/detail/helm.cattle.io.projecthelmchart.vue +1 -1
  213. package/detail/networking.k8s.io.ingress.vue +10 -2
  214. package/detail/pod.vue +37 -1
  215. package/detail/provisioning.cattle.io.cluster.vue +102 -15
  216. package/detail/workload/index.vue +163 -15
  217. package/edit/auth/azuread.vue +146 -34
  218. package/edit/auth/github.vue +3 -3
  219. package/edit/auth/googleoauth.vue +3 -3
  220. package/edit/auth/ldap/config.vue +15 -7
  221. package/edit/auth/ldap/index.vue +2 -2
  222. package/edit/auth/oidc.vue +3 -3
  223. package/edit/auth/saml.vue +3 -3
  224. package/edit/autoscaling.horizontalpodautoscaler/index.vue +1 -1
  225. package/edit/autoscaling.horizontalpodautoscaler/metric-identifier.vue +1 -1
  226. package/edit/autoscaling.horizontalpodautoscaler/metric-object-reference.vue +1 -1
  227. package/edit/autoscaling.horizontalpodautoscaler/metric-target.vue +1 -1
  228. package/edit/autoscaling.horizontalpodautoscaler/metrics-row.vue +1 -1
  229. package/edit/catalog.cattle.io.clusterrepo.vue +2 -2
  230. package/edit/cis.cattle.io.clusterscan.vue +4 -4
  231. package/edit/cis.cattle.io.clusterscanbenchmark.vue +1 -1
  232. package/edit/constraints.gatekeeper.sh.constraint/index.vue +1 -1
  233. package/edit/fleet.cattle.io.cluster.vue +1 -0
  234. package/edit/fleet.cattle.io.clustergroup.vue +1 -1
  235. package/edit/fleet.cattle.io.gitrepo.vue +290 -157
  236. package/edit/harvesterhci.io.host/HarvesterDisk.vue +4 -5
  237. package/edit/harvesterhci.io.host/index.vue +28 -19
  238. package/edit/harvesterhci.io.keypair.vue +1 -1
  239. package/edit/harvesterhci.io.managedchart/rancher-monitoring.vue +1 -1
  240. package/edit/harvesterhci.io.management.cluster.vue +1 -1
  241. package/edit/harvesterhci.io.networkattachmentdefinition.vue +2 -2
  242. package/edit/harvesterhci.io.setting/additional-ca.vue +1 -1
  243. package/edit/harvesterhci.io.setting/backup-target.vue +1 -1
  244. package/edit/harvesterhci.io.setting/http-proxy.vue +1 -1
  245. package/edit/harvesterhci.io.setting/index.vue +3 -3
  246. package/edit/harvesterhci.io.setting/overcommit-config.vue +4 -1
  247. package/edit/harvesterhci.io.setting/ssl-parameters.vue +1 -1
  248. package/edit/harvesterhci.io.setting/support-bundle-image.vue +1 -1
  249. package/edit/harvesterhci.io.setting/vip-pools.vue +1 -1
  250. package/edit/harvesterhci.io.setting/vm-force-reset-policy.vue +2 -2
  251. package/edit/harvesterhci.io.virtualmachinebackup.vue +2 -2
  252. package/edit/harvesterhci.io.virtualmachineimage.vue +2 -2
  253. package/edit/harvesterhci.io.virtualmachinetemplateversion.vue +26 -18
  254. package/edit/helm.cattle.io.projecthelmchart.vue +3 -3
  255. package/edit/k8s.cni.cncf.io.networkattachmentdefinition.vue +2 -2
  256. package/edit/kubevirt.io.virtualmachine/VirtualMachineAccessCredentials/AccessCredentialsUsers.vue +1 -1
  257. package/edit/kubevirt.io.virtualmachine/VirtualMachineAccessCredentials/index.vue +1 -1
  258. package/edit/kubevirt.io.virtualmachine/VirtualMachineCloudConfig/DataTemplate.vue +1 -0
  259. package/edit/kubevirt.io.virtualmachine/VirtualMachineCloudConfig/index.vue +2 -1
  260. package/edit/kubevirt.io.virtualmachine/VirtualMachineCpuMemory.vue +3 -1
  261. package/edit/kubevirt.io.virtualmachine/VirtualMachineNetwork/__tests__/HarvesterEditNetwork.test.ts +41 -0
  262. package/edit/kubevirt.io.virtualmachine/VirtualMachineNetwork/base.vue +79 -36
  263. package/edit/kubevirt.io.virtualmachine/VirtualMachineReserved.vue +54 -0
  264. package/edit/kubevirt.io.virtualmachine/VirtualMachineSSHKey.vue +1 -1
  265. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/index.vue +2 -3
  266. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/__tests__/HarvesterEditContainer.test.ts +40 -0
  267. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/__tests__/HarvesterEditExisting.test.ts +102 -0
  268. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/__tests__/HarvesterEditVMImage.test.ts +117 -0
  269. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/__tests__/HarvesterEditVolume.test.ts +74 -0
  270. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/container.vue +59 -13
  271. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/existing.vue +72 -16
  272. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/vmImage.vue +74 -14
  273. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/volume.vue +35 -9
  274. package/edit/kubevirt.io.virtualmachine/index.vue +33 -24
  275. package/edit/logging-flow/index.vue +1 -1
  276. package/edit/logging.banzaicloud.io.output/index.vue +1 -1
  277. package/edit/logging.banzaicloud.io.output/providers/awsElasticsearch.vue +1 -1
  278. package/edit/logging.banzaicloud.io.output/providers/azurestorage.vue +1 -1
  279. package/edit/logging.banzaicloud.io.output/providers/cloudwatch.vue +1 -1
  280. package/edit/logging.banzaicloud.io.output/providers/datadog.vue +2 -2
  281. package/edit/logging.banzaicloud.io.output/providers/elasticsearch.vue +2 -2
  282. package/edit/logging.banzaicloud.io.output/providers/file.vue +1 -1
  283. package/edit/logging.banzaicloud.io.output/providers/forward.vue +1 -1
  284. package/edit/logging.banzaicloud.io.output/providers/gcs.vue +2 -2
  285. package/edit/logging.banzaicloud.io.output/providers/gelf.vue +2 -2
  286. package/edit/logging.banzaicloud.io.output/providers/kafka.vue +2 -2
  287. package/edit/logging.banzaicloud.io.output/providers/kinesisStream.vue +1 -1
  288. package/edit/logging.banzaicloud.io.output/providers/logdna.vue +1 -1
  289. package/edit/logging.banzaicloud.io.output/providers/logz.vue +2 -2
  290. package/edit/logging.banzaicloud.io.output/providers/loki.vue +2 -2
  291. package/edit/logging.banzaicloud.io.output/providers/newrelic.vue +1 -1
  292. package/edit/logging.banzaicloud.io.output/providers/s3.vue +2 -2
  293. package/edit/logging.banzaicloud.io.output/providers/splunkHec.vue +2 -2
  294. package/edit/logging.banzaicloud.io.output/providers/sumologic.vue +1 -1
  295. package/edit/logging.banzaicloud.io.output/providers/syslog.vue +2 -2
  296. package/edit/management.cattle.io.clusterroletemplatebinding.vue +2 -0
  297. package/edit/management.cattle.io.node.vue +71 -0
  298. package/edit/management.cattle.io.project.vue +28 -23
  299. package/edit/management.cattle.io.setting.vue +14 -3
  300. package/edit/management.cattle.io.user.vue +1 -1
  301. package/edit/monitoring.coreos.com.alertmanagerconfig/index.vue +4 -4
  302. package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +13 -13
  303. package/edit/monitoring.coreos.com.alertmanagerconfig/routeConfig.vue +18 -10
  304. package/edit/monitoring.coreos.com.alertmanagerconfig/tls.vue +2 -2
  305. package/edit/monitoring.coreos.com.alertmanagerconfig/types/email.vue +12 -7
  306. package/edit/monitoring.coreos.com.alertmanagerconfig/types/opsgenie.vue +12 -7
  307. package/edit/monitoring.coreos.com.alertmanagerconfig/types/pagerduty.vue +20 -11
  308. package/edit/monitoring.coreos.com.alertmanagerconfig/types/slack.vue +13 -8
  309. package/edit/monitoring.coreos.com.alertmanagerconfig/types/webhook.vue +25 -7
  310. package/edit/monitoring.coreos.com.prometheusrule/AlertingRule.vue +2 -2
  311. package/edit/monitoring.coreos.com.prometheusrule/GroupRules.vue +20 -7
  312. package/edit/monitoring.coreos.com.prometheusrule/RecordingRule.vue +1 -1
  313. package/edit/monitoring.coreos.com.prometheusrule/index.vue +19 -8
  314. package/edit/monitoring.coreos.com.receiver/auth.vue +1 -1
  315. package/edit/monitoring.coreos.com.receiver/index.vue +2 -2
  316. package/edit/monitoring.coreos.com.receiver/tls.vue +2 -2
  317. package/edit/monitoring.coreos.com.receiver/types/email.vue +2 -2
  318. package/edit/monitoring.coreos.com.receiver/types/opsgenie.vue +2 -2
  319. package/edit/monitoring.coreos.com.receiver/types/pagerduty.vue +2 -2
  320. package/edit/monitoring.coreos.com.receiver/types/slack.vue +2 -2
  321. package/edit/monitoring.coreos.com.receiver/types/webhook.banner.vue +1 -1
  322. package/edit/monitoring.coreos.com.receiver/types/webhook.vue +3 -3
  323. package/edit/monitoring.coreos.com.route.vue +2 -2
  324. package/edit/namespace.vue +0 -8
  325. package/edit/network.harvesterhci.io.clusternetwork/vlan.vue +1 -1
  326. package/edit/networking.istio.io.destinationrule/LoadBalancer.vue +2 -2
  327. package/edit/networking.istio.io.destinationrule/index.vue +1 -1
  328. package/edit/networking.k8s.io.ingress/Certificate.vue +5 -1
  329. package/edit/networking.k8s.io.ingress/Certificates.vue +5 -0
  330. package/edit/networking.k8s.io.ingress/DefaultBackend.vue +17 -2
  331. package/edit/networking.k8s.io.ingress/IngressClass.vue +63 -0
  332. package/edit/networking.k8s.io.ingress/Rule.vue +42 -6
  333. package/edit/networking.k8s.io.ingress/RulePath.vue +29 -5
  334. package/edit/networking.k8s.io.ingress/Rules.vue +11 -0
  335. package/edit/networking.k8s.io.ingress/index.vue +104 -15
  336. package/edit/networking.k8s.io.networkpolicy/PolicyRulePort.vue +1 -1
  337. package/edit/networking.k8s.io.networkpolicy/PolicyRuleTarget.vue +2 -2
  338. package/edit/networking.k8s.io.networkpolicy/index.vue +2 -2
  339. package/edit/persistentvolume/index.vue +1 -1
  340. package/edit/persistentvolume/plugins/awsElasticBlockStore.vue +2 -2
  341. package/edit/persistentvolume/plugins/azureDisk.vue +2 -2
  342. package/edit/persistentvolume/plugins/azureFile.vue +2 -2
  343. package/edit/persistentvolume/plugins/cephfs.vue +4 -4
  344. package/edit/persistentvolume/plugins/cinder.vue +2 -2
  345. package/edit/persistentvolume/plugins/csi.vue +2 -2
  346. package/edit/persistentvolume/plugins/fc.vue +4 -4
  347. package/edit/persistentvolume/plugins/flexVolume.vue +2 -2
  348. package/edit/persistentvolume/plugins/flocker.vue +1 -1
  349. package/edit/persistentvolume/plugins/gcePersistentDisk.vue +2 -2
  350. package/edit/persistentvolume/plugins/glusterfs.vue +2 -2
  351. package/edit/persistentvolume/plugins/hostPath.vue +1 -1
  352. package/edit/persistentvolume/plugins/iscsi.vue +4 -4
  353. package/edit/persistentvolume/plugins/local.vue +1 -1
  354. package/edit/persistentvolume/plugins/longhorn.vue +2 -2
  355. package/edit/persistentvolume/plugins/nfs.vue +2 -2
  356. package/edit/persistentvolume/plugins/photonPersistentDisk.vue +1 -1
  357. package/edit/persistentvolume/plugins/portworxVolume.vue +2 -2
  358. package/edit/persistentvolume/plugins/quobyte.vue +2 -2
  359. package/edit/persistentvolume/plugins/rbd.vue +4 -4
  360. package/edit/persistentvolume/plugins/scaleIO.vue +2 -2
  361. package/edit/persistentvolume/plugins/storageos.vue +2 -2
  362. package/edit/persistentvolume/plugins/vsphereVolume.vue +1 -1
  363. package/edit/persistentvolumeclaim.vue +24 -8
  364. package/edit/provisioning.cattle.io.cluster/ACE.vue +2 -2
  365. package/edit/provisioning.cattle.io.cluster/CustomCommand.vue +8 -3
  366. package/edit/provisioning.cattle.io.cluster/DrainOptions.vue +2 -2
  367. package/edit/provisioning.cattle.io.cluster/MachinePool.vue +15 -3
  368. package/edit/provisioning.cattle.io.cluster/RegistryConfigs.vue +16 -3
  369. package/edit/provisioning.cattle.io.cluster/S3Config.vue +2 -2
  370. package/edit/provisioning.cattle.io.cluster/SelectCredential.vue +1 -1
  371. package/edit/provisioning.cattle.io.cluster/__tests__/CustomCommand.tests.ts +1 -7
  372. package/edit/provisioning.cattle.io.cluster/import.vue +2 -1
  373. package/edit/provisioning.cattle.io.cluster/index.vue +26 -7
  374. package/edit/provisioning.cattle.io.cluster/rke2.vue +136 -48
  375. package/edit/resources.cattle.io.backup.vue +26 -8
  376. package/edit/resources.cattle.io.restore.vue +3 -3
  377. package/edit/secret/basic.vue +1 -1
  378. package/edit/secret/index.vue +80 -2
  379. package/edit/secret/registry.vue +2 -2
  380. package/edit/secret/ssh.vue +1 -1
  381. package/edit/secret/tls.vue +1 -1
  382. package/edit/service.vue +47 -11
  383. package/edit/serviceaccount.vue +1 -1
  384. package/edit/storage.k8s.io.storageclass/index.vue +1 -1
  385. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/aws-ebs.vue +7 -3
  386. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/azure-disk.vue +1 -1
  387. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/azure-file.vue +1 -1
  388. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/cinder.vue +2 -2
  389. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/gce-pd.vue +2 -2
  390. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/glusterfs.vue +1 -1
  391. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/portworx-volume.vue +1 -1
  392. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/quobyte.vue +1 -1
  393. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/rbd.vue +1 -1
  394. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/scaleio.vue +1 -1
  395. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/storageos.vue +1 -1
  396. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/vsphere-volume.vue +1 -1
  397. package/edit/token.vue +3 -3
  398. package/edit/ui.cattle.io.navlink.vue +2 -2
  399. package/edit/workload/Job.vue +111 -23
  400. package/edit/workload/Upgrading.vue +77 -22
  401. package/edit/workload/__tests__/Job.test.ts +72 -0
  402. package/edit/workload/__tests__/Upgrading.test.ts +60 -0
  403. package/edit/workload/index.vue +13 -1085
  404. package/edit/workload/mixins/workload.js +900 -0
  405. package/edit/workload/storage/Mount.vue +2 -2
  406. package/edit/workload/storage/awsElasticBlockStore.vue +1 -1
  407. package/edit/workload/storage/azureDisk.vue +2 -2
  408. package/edit/workload/storage/azureFile.vue +1 -1
  409. package/edit/workload/storage/ephemeralVolume/index.vue +2 -2
  410. package/edit/workload/storage/gcePersistentDisk.vue +1 -1
  411. package/edit/workload/storage/hostPath.vue +1 -1
  412. package/edit/workload/storage/nfs.vue +2 -2
  413. package/edit/workload/storage/persistentVolumeClaim/index.vue +2 -2
  414. package/edit/workload/storage/persistentVolumeClaim/persistentvolumeclaim.vue +3 -3
  415. package/edit/workload/storage/secret.vue +2 -2
  416. package/edit/workload/storage/vsphereVolume.vue +1 -1
  417. package/edit/workload/types/Deployment.vue +377 -0
  418. package/edit/workload/types/Generic.vue +295 -0
  419. package/layouts/default.vue +26 -7
  420. package/layouts/error.vue +3 -2
  421. package/layouts/home.vue +12 -2
  422. package/layouts/plain.vue +18 -2
  423. package/layouts/unauthenticated.vue +2 -1
  424. package/list/catalog.cattle.io.clusterrepo.vue +1 -1
  425. package/list/fleet.cattle.io.bundle.vue +1 -1
  426. package/list/fleet.cattle.io.cluster.vue +1 -1
  427. package/list/fleet.cattle.io.clusterregistrationtoken.vue +1 -1
  428. package/list/harvesterhci.io.dashboard/HarvesterUpgrade.vue +9 -8
  429. package/list/harvesterhci.io.dashboard/UpgradeInfo.vue +40 -0
  430. package/list/harvesterhci.io.dashboard/index.vue +14 -36
  431. package/list/harvesterhci.io.host/index.vue +24 -12
  432. package/list/harvesterhci.io.networkattachmentdefinition.vue +1 -1
  433. package/list/harvesterhci.io.setting.vue +1 -1
  434. package/list/harvesterhci.io.virtualmachinebackup.vue +1 -1
  435. package/list/harvesterhci.io.virtualmachineimage.vue +36 -3
  436. package/list/harvesterhci.io.virtualmachinetemplateversion.vue +1 -5
  437. package/list/helm.cattle.io.projecthelmchart.vue +1 -1
  438. package/list/kubevirt.io.virtualmachine.vue +4 -2
  439. package/list/management.cattle.io.feature.vue +3 -3
  440. package/list/management.cattle.io.setting.vue +2 -2
  441. package/list/monitoring.coreos.com.alertmanagerconfig.vue +1 -1
  442. package/list/namespace.vue +3 -1
  443. package/list/node.vue +10 -3
  444. package/list/persistentvolumeclaim.vue +42 -0
  445. package/list/provisioning.cattle.io.cluster.vue +22 -20
  446. package/list/workload.vue +31 -6
  447. package/machine-config/amazonec2.vue +37 -12
  448. package/machine-config/azure.vue +3 -3
  449. package/machine-config/digitalocean.vue +2 -2
  450. package/machine-config/generic.vue +1 -1
  451. package/machine-config/harvester.vue +124 -25
  452. package/machine-config/linode.vue +2 -2
  453. package/machine-config/vmwarevsphere.vue +5 -5
  454. package/middleware/authenticated.js +36 -6
  455. package/middleware/unauthenticated.js +22 -0
  456. package/mixins/brand.js +50 -3
  457. package/mixins/browser-tab-visibility.js +37 -0
  458. package/mixins/chart.js +36 -4
  459. package/mixins/{compact-input.js → compact-input.ts} +5 -3
  460. package/mixins/form-validation.js +122 -0
  461. package/mixins/harvester-vm/index.js +134 -90
  462. package/mixins/labeled-form-element.ts +193 -0
  463. package/mixins/resource-fetch.js +173 -0
  464. package/models/cluster.x-k8s.io.machine.js +6 -2
  465. package/models/etcdbackup.js +4 -0
  466. package/models/event.js +4 -0
  467. package/models/fleet.cattle.io.bundle.js +1 -1
  468. package/models/fleet.cattle.io.gitrepo.js +10 -0
  469. package/models/harvester/harvesterhci.io.virtualmachinebackup.js +5 -2
  470. package/models/harvester/harvesterhci.io.virtualmachineimage.js +11 -8
  471. package/models/harvester/harvesterhci.io.virtualmachinetemplateversion.js +11 -2
  472. package/models/harvester/kubevirt.io.virtualmachine.js +2 -2
  473. package/models/harvester/kubevirt.io.virtualmachineinstance.js +1 -1
  474. package/models/harvester/node.js +27 -32
  475. package/models/harvester/persistentvolumeclaim.js +1 -1
  476. package/models/management.cattle.io.cluster.js +17 -11
  477. package/models/management.cattle.io.clusterroletemplatebinding.js +2 -2
  478. package/models/management.cattle.io.globalrole.js +19 -0
  479. package/models/management.cattle.io.node.js +10 -11
  480. package/models/management.cattle.io.project.js +60 -26
  481. package/models/management.cattle.io.roletemplate.js +19 -0
  482. package/models/monitoring.coreos.com.alertmanagerconfig.js +3 -2
  483. package/models/monitoring.coreos.com.prometheusrule.js +9 -0
  484. package/models/namespace.js +9 -1
  485. package/models/networking.k8s.io.ingress.js +17 -5
  486. package/models/persistentvolumeclaim.js +47 -1
  487. package/models/projectroletemplatebinding.js +2 -2
  488. package/models/provisioning.cattle.io.cluster.js +92 -13
  489. package/models/rke.cattle.io.etcdsnapshot.js +4 -0
  490. package/models/service.js +11 -5
  491. package/models/storage.k8s.io.storageclass.js +14 -1
  492. package/models/workload.js +7 -2
  493. package/nuxt.config.js +27 -7
  494. package/package.json +10 -14
  495. package/pages/about.vue +15 -1
  496. package/pages/account/index.vue +1 -1
  497. package/pages/auth/login.vue +17 -5
  498. package/pages/auth/setup.vue +47 -9
  499. package/pages/c/_cluster/_product/_resource/create.vue +1 -1
  500. package/pages/c/_cluster/_product/members/index.vue +6 -1
  501. package/pages/c/_cluster/_product/projectsnamespaces.vue +113 -11
  502. package/pages/c/_cluster/apps/charts/chart.vue +1 -1
  503. package/pages/c/_cluster/apps/charts/index.vue +2 -2
  504. package/pages/c/_cluster/apps/charts/install.vue +197 -19
  505. package/pages/c/_cluster/auth/config/index.vue +1 -1
  506. package/pages/c/_cluster/explorer/EventsTable.vue +1 -15
  507. package/pages/c/_cluster/explorer/index.vue +64 -35
  508. package/pages/c/_cluster/explorer/tools/index.vue +1 -1
  509. package/pages/c/_cluster/fleet/GitRepoGraphConfig.js +249 -0
  510. package/pages/c/_cluster/fleet/index.vue +47 -65
  511. package/pages/c/_cluster/harvester/airgapupgrade/index.vue +7 -4
  512. package/pages/c/_cluster/harvester/console/_uid/vnc.vue +7 -1
  513. package/pages/c/_cluster/monitoring/alertmanagerconfig/_alertmanagerconfigid/receiver.vue +8 -14
  514. package/pages/c/_cluster/monitoring/index.vue +1 -1
  515. package/pages/c/_cluster/monitoring/route-receiver/index.vue +1 -1
  516. package/pages/c/_cluster/settings/banners.vue +2 -2
  517. package/pages/c/_cluster/settings/brand.vue +62 -7
  518. package/pages/c/_cluster/settings/performance.vue +167 -0
  519. package/pages/diagnostic.vue +468 -0
  520. package/pages/fail-whale.vue +17 -5
  521. package/pages/home.vue +36 -22
  522. package/pages/plugins.vue +1 -1
  523. package/pages/prefs.vue +20 -7
  524. package/pages/support/index.vue +51 -9
  525. package/pkg/auto-import.js +1 -1
  526. package/pkg/dynamic-importer.lib.js +8 -0
  527. package/pkg/tsconfig.json +26 -9
  528. package/pkg/vue.config.js +8 -0
  529. package/plugins/console.js +29 -0
  530. package/plugins/dashboard-store/actions.js +171 -28
  531. package/plugins/dashboard-store/getters.js +13 -1
  532. package/plugins/dashboard-store/index.js +5 -1
  533. package/plugins/dashboard-store/mutations.js +72 -22
  534. package/plugins/dashboard-store/resource-class.js +259 -184
  535. package/plugins/i18n.js +9 -3
  536. package/plugins/steve/actions.js +16 -1
  537. package/plugins/steve/getters.js +9 -1
  538. package/plugins/steve/index.js +6 -2
  539. package/plugins/steve/mutations.js +100 -5
  540. package/plugins/steve/norman-class.js +8 -0
  541. package/plugins/steve/performanceTesting.js +5 -0
  542. package/plugins/steve/subscribe.js +144 -12
  543. package/plugins/steve/web-worker.steve-sub-worker.js +129 -0
  544. package/promptRemove/kubevirt.io.virtualmachine.vue +3 -17
  545. package/promptRemove/management.cattle.io.project.vue +128 -0
  546. package/promptRemove/pod.vue +131 -0
  547. package/rancher-components/BadgeState/BadgeState.spec.ts +12 -0
  548. package/{components → rancher-components/BadgeState}/BadgeState.vue +18 -10
  549. package/rancher-components/BadgeState/index.ts +1 -0
  550. package/{components/__tests__ → rancher-components/Banner}/Banner.test.ts +1 -1
  551. package/{components → rancher-components/Banner}/Banner.vue +22 -7
  552. package/rancher-components/Banner/index.ts +1 -0
  553. package/{components → rancher-components/Card}/Card.vue +58 -12
  554. package/rancher-components/Card/index.ts +1 -0
  555. package/{components/form → rancher-components/Form/Checkbox}/Checkbox.vue +118 -25
  556. package/rancher-components/Form/Checkbox/index.ts +1 -0
  557. package/{components/form/__tests__ → rancher-components/Form/LabeledInput}/LabeledInput.test.ts +13 -2
  558. package/rancher-components/Form/LabeledInput/LabeledInput.vue +341 -0
  559. package/rancher-components/Form/LabeledInput/index.ts +1 -0
  560. package/{components/form → rancher-components/Form/Radio}/RadioButton.vue +50 -22
  561. package/{components/form → rancher-components/Form/Radio}/RadioGroup.vue +76 -28
  562. package/rancher-components/Form/Radio/index.ts +2 -0
  563. package/rancher-components/Form/TextArea/TextAreaAutoGrow.vue +169 -0
  564. package/rancher-components/Form/TextArea/index.ts +1 -0
  565. package/rancher-components/Form/index.ts +4 -0
  566. package/{components/form → rancher-components/LabeledTooltip}/LabeledTooltip.vue +32 -11
  567. package/rancher-components/LabeledTooltip/index.ts +1 -0
  568. package/scripts/build-pkg.sh +4 -0
  569. package/scripts/publish-shell.sh +37 -18
  570. package/scripts/test-plugins-build.sh +115 -0
  571. package/store/catalog.js +4 -0
  572. package/store/growl.js +6 -0
  573. package/store/i18n.js +18 -9
  574. package/store/index.js +190 -107
  575. package/store/prefs.js +8 -2
  576. package/store/resource-fetch.js +44 -0
  577. package/store/type-map.js +43 -7
  578. package/store/uiplugins.ts +1 -1
  579. package/utils/favicon.js +40 -0
  580. package/utils/object.js +26 -9
  581. package/utils/promise.js +20 -0
  582. package/utils/socket.js +10 -1
  583. package/utils/string.js +16 -0
  584. package/utils/validators/formRules/__tests__/index.test.ts +928 -0
  585. package/utils/validators/formRules/index.ts +447 -0
  586. package/utils/validators/prometheusrule.js +1 -1
  587. package/utils/validators/vm.js +12 -5
  588. package/utils/width.js +39 -0
  589. package/yarn-error.log +196 -0
  590. package/components/NovncConsoleWrapper.vue +0 -150
  591. package/components/form/Container.vue +0 -143
  592. package/components/form/LabeledInput.vue +0 -245
  593. package/components/form/Scheduling.vue +0 -115
  594. package/components/form/TextAreaAutoGrow.vue +0 -127
  595. package/mixins/labeled-form-element.js +0 -137
@@ -6,12 +6,12 @@ import { mapPref, DIFF } from '@shell/store/prefs';
6
6
  import { mapFeature, MULTI_CLUSTER, LEGACY } from '@shell/store/features';
7
7
  import { mapGetters } from 'vuex';
8
8
 
9
- import Banner from '@shell/components/Banner';
9
+ import { Banner } from '@components/Banner';
10
10
  import ButtonGroup from '@shell/components/ButtonGroup';
11
11
  import ChartReadme from '@shell/components/ChartReadme';
12
- import Checkbox from '@shell/components/form/Checkbox';
12
+ import { Checkbox } from '@components/Form/Checkbox';
13
13
  import LabeledSelect from '@shell/components/form/LabeledSelect';
14
- import LabeledInput from '@shell/components/form/LabeledInput';
14
+ import { LabeledInput } from '@components/Form/LabeledInput';
15
15
  import LazyImage from '@shell/components/LazyImage';
16
16
  import Loading from '@shell/components/Loading';
17
17
  import NameNsDescription from '@shell/components/form/NameNsDescription';
@@ -79,6 +79,16 @@ export default {
79
79
  ],
80
80
 
81
81
  async fetch() {
82
+ /*
83
+ fetchChart is defined in shell/mixins. It first checks the URL
84
+ query for an app name and namespace. It uses those values to check
85
+ for a catalog app resource. If found, it sets the form to edit
86
+ mode. If not, it sets the form to create mode.
87
+
88
+ If the app and app namespace are not provided in the query,
89
+ it checks for target name and namespace values defined in the
90
+ Helm chart itself.
91
+ */
82
92
  await this.fetchChart();
83
93
 
84
94
  this.errors = [];
@@ -93,22 +103,41 @@ export default {
93
103
  id: 'server-url'
94
104
  });
95
105
 
106
+ /*
107
+ Figure out the namespace where the chart is
108
+ being installed or upgraded.
109
+ */
96
110
  if ( this.existing ) {
111
+ /*
112
+ If the Helm chart is already installed,
113
+ use the existing namespace by default.
114
+ */
115
+
97
116
  this.forceNamespace = this.existing.metadata.namespace;
98
117
  this.nameDisabled = true;
99
118
  } else if (this.$route.query[FROM_CLUSTER] === _FLAGGED) {
119
+ /* For Fleet, use the fleet-default namespace. */
100
120
  this.forceNamespace = DEFAULT_WORKSPACE;
101
121
  } else if ( this.chart?.targetNamespace ) {
122
+ /* If a target namespace is defined in the chart,
123
+ set the target namespace as default. */
102
124
  this.forceNamespace = this.chart.targetNamespace;
103
125
  } else if ( this.query.appNamespace ) {
126
+ /* If a namespace is defined in the URL query,
127
+ use that namespace as default. */
104
128
  this.forceNamespace = this.query.appNamespace;
105
129
  } else {
106
130
  this.forceNamespace = null;
107
131
  }
108
132
 
133
+ /* Check if the app is deprecated. */
109
134
  this.legacyApp = this.existing ? await this.existing.deployedAsLegacy() : false;
135
+
136
+ /* Check if the app is a multicluster deprecated app.
137
+ (Multicluster apps were replaced by Fleet.) */
110
138
  this.mcapp = this.existing ? await this.existing.deployedAsMultiCluster() : false;
111
139
 
140
+ /* The form state is intialized as a chartInstallAction resource. */
112
141
  this.value = await this.$store.dispatch('cluster/create', {
113
142
  type: 'chartInstallAction',
114
143
  metadata: {
@@ -117,8 +146,19 @@ export default {
117
146
  }
118
147
  });
119
148
 
149
+ /* Logic for when the Helm chart is not already installed */
120
150
  if ( !this.existing) {
151
+ /*
152
+ The target name is used for Git repos for Fleet.
153
+ The target name indicates the name of the cluster
154
+ group that the chart is meant to be installed in.
155
+ */
121
156
  if ( this.chart?.targetName ) {
157
+ /*
158
+ Set the name of the chartInstallAction
159
+ to the name of the cluster group
160
+ where the chart should be installed.
161
+ */
122
162
  this.value.metadata.name = this.chart.targetName;
123
163
  this.nameDisabled = true;
124
164
  } else if ( this.query.appName ) {
@@ -130,11 +170,21 @@ export default {
130
170
  if ( this.query.description ) {
131
171
  this.customCmdOpts.description = this.query.description;
132
172
  }
133
- }
173
+ } /* End of logic for when chart is already installed */
134
174
 
175
+ /*
176
+ Logic for what to do if the user is installing
177
+ the Helm chart for the first time and a default
178
+ namespace has been set.
179
+ */
135
180
  if (this.forceNamespace && !this.existing) {
136
181
  let ns;
137
182
 
183
+ /*
184
+ Before moving forward, check to make sure the
185
+ default namespace exists and the logged-in user
186
+ has permission to see it.
187
+ */
138
188
  try {
139
189
  ns = await this.$store.dispatch('cluster/find', { type: NAMESPACE, id: this.forceNamespace });
140
190
  const project = ns.metadata.annotations?.[PROJECT];
@@ -145,42 +195,96 @@ export default {
145
195
  } catch {}
146
196
  }
147
197
 
198
+ /* If no chart by the given app name and namespace
199
+ can be found, or if no version is found, do nothing. */
148
200
  if ( !this.chart || !this.query.versionName) {
149
201
  return;
150
202
  }
151
203
 
152
204
  if ( this.version && process.client ) {
205
+ /*
206
+ Check if the Helm chart has provided the name
207
+ of a Vue component to use for configuring
208
+ chart values. If so, load that component.
209
+
210
+ This will set this.valuesComponent,
211
+ this.componentHasTabs and this.showValuesComponent.
212
+ */
153
213
  await this.loadValuesComponent();
154
214
  }
155
215
 
216
+ /*
217
+ Check if the Helm chart has indicated
218
+ that the user should fill out the chart values
219
+ through a wizard-style workflow. If so, load
220
+ the chart steps.
221
+ */
156
222
  await this.loadChartSteps();
157
223
 
224
+ /*
225
+ this.loadedVersion will only be true if you select a non-defalut
226
+ option from the "Version" dropdown menu in Apps & Marketplace
227
+ when updating a previously installed app.
228
+ */
158
229
  if ( !this.loadedVersion || this.loadedVersion !== this.version.key ) {
159
230
  let userValues;
160
231
 
232
+ /*
233
+ When you select a version, a new chart is loaded. Then
234
+ Rancher anticipates that you probably want to port all of your
235
+ previously customized, non-default values from the old chart
236
+ version to the new chart version, so it applies the previous
237
+ chart's customization to the new chart values before
238
+ you see the values form on the next page in the workflow.
239
+ */
161
240
  if ( this.loadedVersion ) {
162
- // If changing charts once the page is loaded, diff from the chart you were
163
- // previously on to get the actual customization, then apply onto the new chart values.
164
-
165
241
  if ( this.showingYaml ) {
166
242
  this.applyYamlToValues();
167
243
  }
168
-
244
+ /*
245
+ this.loadedVersionValues is taken from versionInfo,
246
+ which contains everything there is to know about a specific
247
+ version of a Helm chart, including all chart values,
248
+ chart metadata, a short app README and a more
249
+ version-specific README called the chart README.
250
+
251
+ Here we assume that any difference between the values in
252
+ two different Helm chart versions is a "user value," or
253
+ a user-selected customization.
254
+ */
169
255
  userValues = diff(this.loadedVersionValues, this.chartValues);
170
256
  } else if ( this.existing ) {
171
- // For an existing app, use the values from the previous install
257
+ /* For an already installed app, use the values from the previous install. */
172
258
  userValues = clone(this.existing.spec?.values || {});
173
- // For an existing app, use the values from the previous install
174
259
  } else {
175
- // For an new app, start empty
260
+ /* For an new app, start empty. */
176
261
  userValues = {};
177
262
  }
178
263
 
264
+ /*
265
+ Remove global values if they are identical to
266
+ the currently available information about the cluster
267
+ and Rancher settings.
268
+
269
+ Immediately before the Helm chart is installed or
270
+ upgraded, the global values are re-added.
271
+ */
179
272
  this.removeGlobalValuesFrom(userValues);
273
+
274
+ /*
275
+ The merge() method is used to merge two or more objects
276
+ starting with the left-most to the right-most to create a
277
+ parent mapping object. When two keys are the same, the
278
+ generated object will have value for the rightmost key.
279
+ In this case, any values in userValues override any
280
+ matching values in versionInfo.
281
+ */
180
282
  this.chartValues = merge(merge({}, this.versionInfo?.values || {}), userValues);
283
+
284
+ /* Serializes an object as a YAML document */
181
285
  this.valuesYaml = saferDump(this.chartValues);
182
286
 
183
- // For YAML diff
287
+ /* For YAML diff */
184
288
  if ( !this.loadedVersion ) {
185
289
  this.originalYamlValues = this.valuesYaml;
186
290
  }
@@ -188,16 +292,18 @@ export default {
188
292
  this.loadedVersionValues = this.versionInfo?.values || {};
189
293
  this.loadedVersion = this.version?.key;
190
294
  }
191
-
295
+ /* Check if chart exists and if required values exist */
192
296
  this.updateStepOneReady();
193
297
 
194
298
  this.preFormYamlOption = this.valuesComponent || this.hasQuestions ? VALUES_STATE.FORM : VALUES_STATE.YAML;
195
299
 
196
- // Look for annotation to say this app is a legacy migrated app (we look in either place for now)
300
+ /* Look for annotation to say this app is a legacy migrated app (we look in either place for now) */
197
301
  this.migratedApp = (this.existing?.spec?.chart?.metadata?.annotations?.[CATALOG_ANNOTATIONS.MIGRATED] === 'true');
198
302
  },
199
303
 
200
304
  data() {
305
+ /* Helm CLI options that are not persisted on the back end,
306
+ but are used for the final install/upgrade operation. */
201
307
  const defaultCmdOpts = {
202
308
  cleanupOnFail: false,
203
309
  crds: true,
@@ -511,6 +617,7 @@ export default {
511
617
  },
512
618
 
513
619
  legacyEnabled() {
620
+ // Check for the legacy feature flag in the settings
514
621
  return this.features(LEGACY);
515
622
  },
516
623
 
@@ -623,8 +730,12 @@ export default {
623
730
  },
624
731
 
625
732
  async mounted() {
733
+ // Load a Vue component named in the Helm chart
734
+ // for editing values
626
735
  await this.loadValuesComponent();
627
736
 
737
+ // Load Helm chart info used for showing
738
+ // wizard steps
628
739
  await this.loadChartSteps();
629
740
 
630
741
  window.scrollTop = 0;
@@ -650,9 +761,12 @@ export default {
650
761
  },
651
762
 
652
763
  async loadValuesComponent() {
653
- // TODO: Remove RELEASE_NAME. This is only in until the component annotation is added to the OPA Gatekeeper chart
764
+ // TODO: Remove RELEASE_NAME. This is only in until the component annotation is added to the OPA Gatekeeper chart.
765
+
766
+ // The const component is a string, for example, 'monitoring'.
654
767
  const component = this.version?.annotations?.[CATALOG_ANNOTATIONS.COMPONENT] || this.version?.annotations?.[CATALOG_ANNOTATIONS.RELEASE_NAME];
655
768
 
769
+ // Load a values component for the UI if it is named in the Helm chart.
656
770
  if ( component ) {
657
771
  if ( this.$store.getters['catalog/haveComponent'](component) ) {
658
772
  this.valuesComponent = this.$store.getters['catalog/importComponent'](component);
@@ -887,7 +1001,13 @@ export default {
887
1001
  return { errors: [] };
888
1002
  },
889
1003
 
1004
+ /*
1005
+ actionInput determines what values Rancher finally sends
1006
+ to the backend when installing or upgrading the app. It
1007
+ injects Rancher-specific values into the chart values.
1008
+ */
890
1009
  actionInput(isUpgrade) {
1010
+ /* Default values defined in the Helm chart itself */
891
1011
  const fromChart = this.versionInfo?.values || {};
892
1012
 
893
1013
  const errors = [];
@@ -898,14 +1018,27 @@ export default {
898
1018
  errors.push(...yamlErrors);
899
1019
  }
900
1020
 
901
- // Only save the values that differ from the chart's standard values.yaml
1021
+ /*
1022
+ Only save the values that differ from the chart's standard values.yaml.
1023
+ chartValues is created by applying the user's customized onto
1024
+ the default chart values.
1025
+ */
902
1026
  const values = diff(fromChart, this.chartValues);
903
1027
 
904
- // Add our special blend of 11 herbs and global values
1028
+ /*
1029
+ Refer to the developer docs at docs/developer/helm-chart-apps.md
1030
+ for details on what values are injected and where they come from.
1031
+ */
905
1032
  this.addGlobalValuesTo(values);
906
1033
 
907
1034
  const form = JSON.parse(JSON.stringify(this.value));
1035
+
1036
+ /*
1037
+ Migrated annotations are required to allow a deprecated legacy app to be
1038
+ upgraded.
1039
+ */
908
1040
  const migratedAnnotations = this.migratedApp ? { [CATALOG_ANNOTATIONS.MIGRATED]: 'true' } : {};
1041
+
909
1042
  const chart = {
910
1043
  chartName: this.chart.chartName,
911
1044
  version: this.version?.version || this.query.versionName,
@@ -923,6 +1056,10 @@ export default {
923
1056
  chart.resetValues = this.cmdOptions.resetValues;
924
1057
  }
925
1058
 
1059
+ /*
1060
+ Configure Helm CLI options for doing the install or
1061
+ upgrade operation.
1062
+ */
926
1063
  const out = {
927
1064
  charts: [chart],
928
1065
  noHooks: this.cmdOptions.hooks === false,
@@ -932,6 +1069,10 @@ export default {
932
1069
  projectId: this.project,
933
1070
  };
934
1071
 
1072
+ /*
1073
+ Configure Helm CLI options that are specific to
1074
+ installs or specific to upgrades.
1075
+ */
935
1076
  if ( isUpgrade ) {
936
1077
  out.force = this.cmdOptions.force === true;
937
1078
  out.historyMax = this.cmdOptions.historyMax;
@@ -943,6 +1084,11 @@ export default {
943
1084
 
944
1085
  const more = [];
945
1086
 
1087
+ /*
1088
+ An example value for auto is ["rancher-monitoring-crd=match"].
1089
+ It is an array of chart names that lets Rancher know of other
1090
+ charts that should be auto-installed at the same time.
1091
+ */
946
1092
  let auto = (this.version?.annotations?.[CATALOG_ANNOTATIONS.AUTO_INSTALL] || '').split(/\s*,\s*/).filter(x => !!x).reverse();
947
1093
 
948
1094
  for ( const constraint of auto ) {
@@ -953,6 +1099,33 @@ export default {
953
1099
  chartVersion: this.version.version,
954
1100
  });
955
1101
 
1102
+ /*
1103
+ An example return value for "provider":
1104
+ [
1105
+ {
1106
+ "name": "rancher-monitoring-crd",
1107
+ "version": "100.1.3+up19.0.3",
1108
+ "description": "Installs the CRDs for rancher-monitoring.",
1109
+ "apiVersion": "v1",
1110
+ "annotations": {
1111
+ "catalog.cattle.io/certified": "rancher",
1112
+ "catalog.cattle.io/hidden": "true",
1113
+ "catalog.cattle.io/namespace": "cattle-monitoring-system",
1114
+ "catalog.cattle.io/release-name": "rancher-monitoring-crd"
1115
+ },
1116
+ "type": "application",
1117
+ "urls": [
1118
+ "https://192.168.0.18:8005/k8s/clusters/c-m-hhpg69fv/v1/catalog.cattle.io.clusterrepos/rancher-charts?chartName=rancher-monitoring-crd&link=chart&version=100.1.3%2Bup19.0.3"
1119
+ ],
1120
+ "created": "2022-04-27T10:04:18.343124-07:00",
1121
+ "digest": "ecf07ba23a9cdaa7ffbbb14345d94ea1240b7f3b8e0ce9be4640e3e585c484e2",
1122
+ "key": "cluster/rancher-charts/rancher-monitoring-crd/100.1.3+up19.0.3",
1123
+ "repoType": "cluster",
1124
+ "repoName": "rancher-charts"
1125
+ }
1126
+ ]
1127
+ */
1128
+
956
1129
  if ( provider ) {
957
1130
  more.push(provider);
958
1131
  } else {
@@ -976,8 +1149,12 @@ export default {
976
1149
  }
977
1150
  }
978
1151
 
979
- // 'more' contains the values for the CRD chart, which needs the same
980
- // global and cattle values as the chart.
1152
+ /*
1153
+ 'more' contains the values for the CRD chart, which needs the same
1154
+ global and cattle values as the chart. It could also contain additional
1155
+ charts that may not be CRD charts but are also meant to be installed at
1156
+ the same time.
1157
+ */
981
1158
  for ( const dependency of more ) {
982
1159
  out.charts.unshift({
983
1160
  chartName: dependency.name,
@@ -1416,6 +1593,7 @@ export default {
1416
1593
  border: $padding solid white;
1417
1594
  border-radius: calc( 3 * var(--border-radius));
1418
1595
  position: relative;
1596
+ margin-bottom: 15px
1419
1597
  }
1420
1598
 
1421
1599
  .logo {
@@ -4,7 +4,7 @@ import SelectIconGrid from '@shell/components/SelectIconGrid';
4
4
  import { sortBy } from '@shell/utils/sort';
5
5
  import { MODE, _EDIT } from '@shell/config/query-params';
6
6
  import { authProvidersInfo } from '@shell/utils/auth';
7
- import Banner from '@shell/components/Banner';
7
+ import { Banner } from '@components/Banner';
8
8
 
9
9
  export default {
10
10
  components: { SelectIconGrid, Banner },
@@ -50,12 +50,8 @@ export default {
50
50
  </script>
51
51
 
52
52
  <template>
53
- <div v-if="$fetchState.pending" class="events-loading">
54
- <i class="icon icon-spin icon-spinner icon-lg" />
55
- <div v-html="t('generic.loading', {}, true)" />
56
- </div>
57
53
  <SortableTable
58
- v-else
54
+ :loading="$fetchState.pending"
59
55
  :rows="events"
60
56
  :headers="eventHeaders"
61
57
  key-field="id"
@@ -76,13 +72,3 @@ export default {
76
72
  </template>
77
73
  </SortableTable>
78
74
  </template>
79
- <style lang="scss" scoped>
80
- .events-loading {
81
- align-items: center;
82
- display: flex;
83
-
84
- > i {
85
- margin-right: 5px;
86
- }
87
- }
88
- </style>
@@ -1,10 +1,9 @@
1
1
  <script>
2
- import Loading from '@shell/components/Loading';
3
2
  import DashboardMetrics from '@shell/components/DashboardMetrics';
4
3
  import { mapGetters } from 'vuex';
5
- import { allHash } from '@shell/utils/promise';
4
+ import { setPromiseResult } from '@shell/utils/promise';
6
5
  import AlertTable from '@shell/components/AlertTable';
7
- import Banner from '@shell/components/Banner';
6
+ import { Banner } from '@components/Banner';
8
7
  import { parseSi, createMemoryValues } from '@shell/utils/units';
9
8
  import {
10
9
  NAME,
@@ -12,6 +11,8 @@ import {
12
11
  STATE,
13
12
  } from '@shell/config/table-headers';
14
13
  import {
14
+ ENDPOINTS,
15
+ EVENT,
15
16
  NAMESPACE,
16
17
  INGRESS,
17
18
  MANAGEMENT,
@@ -24,7 +25,6 @@ import {
24
25
  CATALOG,
25
26
  POD,
26
27
  } from '@shell/config/types';
27
- import { findBy } from '@shell/utils/array';
28
28
  import { mapPref, CLUSTER_TOOLS_TIP } from '@shell/store/prefs';
29
29
  import { haveV1Monitoring, monitoringStatus } from '@shell/utils/monitoring';
30
30
  import Tabbed from '@shell/components/Tabbed';
@@ -62,7 +62,6 @@ export default {
62
62
  EtcdInfoBanner,
63
63
  DashboardMetrics,
64
64
  HardwareResourceGauge,
65
- Loading,
66
65
  ResourceSummary,
67
66
  Tab,
68
67
  Tabbed,
@@ -75,25 +74,30 @@ export default {
75
74
 
76
75
  mixins: [metricPoller],
77
76
 
78
- async fetch() {
79
- const hash = { nodes: fetchClusterResources(this.$store, NODE) };
80
-
81
- if ( this.$store.getters['management/canList'](MANAGEMENT.NODE_TEMPLATE) ) {
82
- hash.nodeTemplates = this.$store.dispatch('management/findAll', { type: MANAGEMENT.NODE_TEMPLATE });
83
- }
84
-
85
- if ( this.$store.getters['management/canList'](MANAGEMENT.NODE_POOL) ) {
86
- hash.rke1NodePools = this.$store.dispatch('management/findAll', { type: MANAGEMENT.NODE_POOL });
87
- }
88
-
89
- this.showClusterMetrics = await allDashboardsExist(this.$store, this.currentCluster.id, [CLUSTER_METRICS_DETAIL_URL, CLUSTER_METRICS_SUMMARY_URL]);
90
- this.showK8sMetrics = await allDashboardsExist(this.$store, this.currentCluster.id, [K8S_METRICS_DETAIL_URL, K8S_METRICS_SUMMARY_URL]);
91
- this.showEtcdMetrics = this.isRKE && await allDashboardsExist(this.$store, this.currentCluster.id, [ETCD_METRICS_DETAIL_URL, ETCD_METRICS_SUMMARY_URL]);
92
-
93
- const res = await allHash(hash);
94
-
95
- for ( const k in res ) {
96
- this[k] = res[k];
77
+ fetch() {
78
+ fetchClusterResources(this.$store, NODE);
79
+
80
+ setPromiseResult(
81
+ allDashboardsExist(this.$store, this.currentCluster.id, [CLUSTER_METRICS_DETAIL_URL, CLUSTER_METRICS_SUMMARY_URL]),
82
+ this,
83
+ 'showClusterMetrics',
84
+ `Determine cluster metrics`
85
+ );
86
+ setPromiseResult(
87
+ allDashboardsExist(this.$store, this.currentCluster.id, [K8S_METRICS_DETAIL_URL, K8S_METRICS_SUMMARY_URL]),
88
+ this,
89
+ 'showK8sMetrics',
90
+ `Determine k8s metrics`
91
+ );
92
+ setPromiseResult(
93
+ allDashboardsExist(this.$store, this.currentCluster.id, [ETCD_METRICS_DETAIL_URL, ETCD_METRICS_SUMMARY_URL]),
94
+ this,
95
+ 'showEtcdMetrics',
96
+ `Determine etcd metrics`
97
+ );
98
+
99
+ if (this.currentCluster.isLocal) {
100
+ this.$store.dispatch('management/findAll', { type: MANAGEMENT.NODE });
97
101
  }
98
102
  },
99
103
 
@@ -110,8 +114,6 @@ export default {
110
114
  constraints: [],
111
115
  events: [],
112
116
  nodeMetrics: [],
113
- nodeTemplates: [],
114
- nodes: [],
115
117
  showClusterMetrics: false,
116
118
  showK8sMetrics: false,
117
119
  showEtcdMetrics: false,
@@ -121,14 +123,33 @@ export default {
121
123
  K8S_METRICS_SUMMARY_URL,
122
124
  ETCD_METRICS_DETAIL_URL,
123
125
  ETCD_METRICS_SUMMARY_URL,
124
- clusterCounts
126
+ clusterCounts,
127
+ selectedTab: 'cluster-events',
125
128
  };
126
129
  },
127
130
 
131
+ beforeDestroy() {
132
+ // Remove the data and stop watching resources that were fetched in this page
133
+ // Events in particular can lead to change messages having to be processed when we are no longer interested in events
134
+ this.$store.dispatch('cluster/forgetType', EVENT);
135
+ this.$store.dispatch('cluster/forgetType', NODE);
136
+ this.$store.dispatch('cluster/forgetType', ENDPOINTS); // Used by AlertTable to get alerts when v2 monitoring is installed
137
+ this.$store.dispatch('cluster/forgetType', METRIC.NODE);
138
+ this.$store.dispatch('cluster/forgetType', MANAGEMENT.NODE);
139
+ },
140
+
128
141
  computed: {
129
142
  ...mapGetters(['currentCluster']),
130
143
  ...monitoringStatus(),
131
144
 
145
+ nodes() {
146
+ return this.$store.getters['cluster/all'](NODE);
147
+ },
148
+
149
+ mgmtNodes() {
150
+ return this.$store.getters['management/all'](MANAGEMENT.CLUSTER);
151
+ },
152
+
132
153
  hideClusterToolsTip: mapPref(CLUSTER_TOOLS_TIP),
133
154
 
134
155
  hasV1Monitoring() {
@@ -239,9 +260,8 @@ export default {
239
260
 
240
261
  return acc;
241
262
  }, {});
242
- const managementNodes = this.$store.getters['management/all'](MANAGEMENT.NODE);
243
263
 
244
- checkNodes = managementNodes.filter((n) => {
264
+ checkNodes = this.mgmtNodes.filter((n) => {
245
265
  const nodeName = n.metadata?.labels?.['management.cattle.io/nodename'] || n.id;
246
266
 
247
267
  return !!nodeNames[nodeName];
@@ -297,8 +317,13 @@ export default {
297
317
  hasMetricsTabs() {
298
318
  return this.showClusterMetrics || this.showK8sMetrics || this.showEtcdMetrics;
299
319
  },
320
+
300
321
  hasBadge() {
301
322
  return !!this.currentCluster?.badge;
323
+ },
324
+
325
+ hasDescription() {
326
+ return !!this.currentCluster?.spec?.description;
302
327
  }
303
328
  },
304
329
 
@@ -328,24 +353,28 @@ export default {
328
353
  });
329
354
  },
330
355
 
356
+ // Used by metric-poller mixin
331
357
  async loadMetrics() {
332
358
  this.nodeMetrics = await fetchClusterResources(this.$store, METRIC.NODE, { force: true } );
333
359
  },
334
- findBy,
360
+
361
+ // Events/Alerts tab changed
362
+ tabChange(neu) {
363
+ this.selectedTab = neu?.selectedName;
364
+ }
335
365
  },
336
366
  };
337
367
  </script>
338
368
 
339
369
  <template>
340
- <Loading v-if="$fetchState.pending" />
341
- <section v-else class="dashboard">
370
+ <section class="dashboard">
342
371
  <header>
343
372
  <div class="title">
344
373
  <h1>
345
374
  <t k="clusterIndexPage.header" />
346
375
  </h1>
347
376
  <div>
348
- <span v-if="currentCluster.spec.description">{{ currentCluster.spec.description }}</span>
377
+ <span v-if="hasDescription">{{ currentCluster.spec.description }}</span>
349
378
  </div>
350
379
  </div>
351
380
  </header>
@@ -415,12 +444,12 @@ export default {
415
444
  </div>
416
445
 
417
446
  <div class="mt-30">
418
- <Tabbed>
447
+ <Tabbed @changed="tabChange">
419
448
  <Tab name="cluster-events" :label="t('clusterIndexPage.sections.events.label')" :weight="2">
420
449
  <EventsTable />
421
450
  </Tab>
422
451
  <Tab v-if="hasMonitoring" name="cluster-alerts" :label="t('clusterIndexPage.sections.alerts.label')" :weight="1">
423
- <AlertTable />
452
+ <AlertTable v-if="selectedTab === 'cluster-alerts'" />
424
453
  </Tab>
425
454
  </Tabbed>
426
455
  </div>
@@ -82,7 +82,7 @@ export default {
82
82
  },
83
83
 
84
84
  namespaces() {
85
- return this.$store.getters['namespaces']();
85
+ return this.$store.getters['activeNamespaceCache'];
86
86
  },
87
87
 
88
88
  rancherCatalog() {