@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
@@ -0,0 +1,193 @@
1
+ import Vue from 'vue';
2
+ import { _EDIT, _VIEW } from '@shell/config/query-params';
3
+ import { getWidth, setWidth } from '@shell/utils/width';
4
+
5
+ interface LabeledFormElement {
6
+ raised: boolean;
7
+ focused: boolean;
8
+ blurred: number | null;
9
+ }
10
+
11
+ export default Vue.extend({
12
+ inheritAttrs: false,
13
+
14
+ props: {
15
+ mode: {
16
+ type: String,
17
+ default: _EDIT,
18
+ },
19
+
20
+ label: {
21
+ type: String,
22
+ default: null
23
+ },
24
+
25
+ labelKey: {
26
+ type: String,
27
+ default: null
28
+ },
29
+
30
+ placeholderKey: {
31
+ type: String,
32
+ default: null
33
+ },
34
+
35
+ tooltip: {
36
+ type: [String, Object],
37
+ default: null
38
+ },
39
+
40
+ hoverTooltip: {
41
+ type: Boolean,
42
+ default: true,
43
+ },
44
+
45
+ tooltipKey: {
46
+ type: String,
47
+ default: null
48
+ },
49
+
50
+ required: {
51
+ type: Boolean,
52
+ default: false,
53
+ },
54
+
55
+ disabled: {
56
+ type: Boolean,
57
+ default: false,
58
+ },
59
+
60
+ placeholder: {
61
+ type: [String, Number],
62
+ default: ''
63
+ },
64
+
65
+ value: {
66
+ type: [String, Number, Object],
67
+ default: ''
68
+ },
69
+
70
+ options: {
71
+ default: null,
72
+ type: Array
73
+ },
74
+
75
+ searchable: {
76
+ default: false,
77
+ type: Boolean
78
+ },
79
+
80
+ rules: {
81
+ default: () => [],
82
+ type: Array,
83
+ // we only want functions in the rules array
84
+ validator: (rules: any) => rules.every((rule: any) => ['function'].includes(typeof rule))
85
+ }
86
+ },
87
+
88
+ data(): LabeledFormElement {
89
+ return {
90
+ raised: this.mode === _VIEW || !!`${ this.value }`,
91
+ focused: false,
92
+ blurred: null,
93
+ };
94
+ },
95
+
96
+ computed: {
97
+ requiredField(): boolean {
98
+ // using "any" for a type on "rule" here is dirty but the use of the optional chaining operator makes it safe for what we're doing here.
99
+ return (this.required || this.rules.some((rule: any): boolean => rule?.name === 'required'));
100
+ },
101
+ empty(): boolean {
102
+ return !!`${ this.value }`;
103
+ },
104
+
105
+ isView(): boolean {
106
+ return this.mode === _VIEW;
107
+ },
108
+
109
+ isDisabled(): boolean {
110
+ return this.disabled || this.isView;
111
+ },
112
+
113
+ isSearchable(): boolean {
114
+ const { searchable } = this;
115
+ const options = ( this.options || [] );
116
+
117
+ if (searchable || options.length >= 10) {
118
+ return true;
119
+ }
120
+
121
+ return false;
122
+ },
123
+ validationMessage(): string | undefined {
124
+ // we want to grab the required rule passed in if we can but if it's not there then we can just grab it from the formRulesGenerator
125
+ const requiredRule = this.rules.find((rule: any) => rule?.name === 'required');
126
+ const ruleMessages = [];
127
+ const value = this?.value;
128
+
129
+ if (requiredRule && this.blurred && !this.focused) {
130
+ const message = requiredRule(value);
131
+
132
+ if (!!message) {
133
+ return message;
134
+ }
135
+ }
136
+
137
+ for (const rule of this.rules) {
138
+ const message = rule(value);
139
+
140
+ if (!!message && rule.name !== 'required') { // we're catching 'required' above so we can ignore it here
141
+ ruleMessages.push(message);
142
+ }
143
+ }
144
+ if (ruleMessages.length > 0 && (this.blurred || this.focused)) {
145
+ return ruleMessages.join(', ');
146
+ } else {
147
+ return undefined;
148
+ }
149
+ }
150
+ },
151
+
152
+ methods: {
153
+ resizeHandler() {
154
+ // since the DD is positioned there is no way to 'inherit' the size of the input, this calcs the size of the parent and set the dd width if it is smaller. If not let it grow with the regular styles
155
+ this.$nextTick(() => {
156
+ const DD = (this.$refs.select as HTMLElement).querySelector('ul.vs__dropdown-menu');
157
+
158
+ const selectWidth = getWidth(this.$refs.select as Element) || 0;
159
+ const dropWidth = getWidth(DD as Element) || 0;
160
+
161
+ if (dropWidth < selectWidth) {
162
+ setWidth(DD as Element, selectWidth);
163
+ }
164
+ });
165
+ },
166
+ onFocus() {
167
+ this.$emit('on-focus');
168
+
169
+ return this.onFocusLabeled();
170
+ },
171
+
172
+ onFocusLabeled() {
173
+ this.raised = true;
174
+ this.focused = true;
175
+ },
176
+
177
+ onBlur() {
178
+ this.$emit('on-blur');
179
+
180
+ return this.onBlurLabeled();
181
+ },
182
+
183
+ onBlurLabeled() {
184
+ this.focused = false;
185
+
186
+ if ( !this.value ) {
187
+ this.raised = false;
188
+ }
189
+
190
+ this.blurred = Date.now();
191
+ }
192
+ }
193
+ });
@@ -0,0 +1,173 @@
1
+ import { mapGetters } from 'vuex';
2
+ import {
3
+ COUNT, MANAGEMENT, POD, WORKLOAD_TYPES, WORKLOAD, SECRET
4
+ } from '@shell/config/types';
5
+ import { SETTING } from '@shell/config/settings';
6
+
7
+ // Number of pages to fetch when loading incrementally
8
+ const PAGES = 4;
9
+
10
+ // restrict advanced features of manual refresh and incremental loading to these resource types
11
+ export const TYPES_RESTRICTED = [
12
+ SECRET,
13
+ POD,
14
+ WORKLOAD_TYPES.DEPLOYMENT,
15
+ WORKLOAD_TYPES.CRON_JOB,
16
+ WORKLOAD_TYPES.DAEMON_SET,
17
+ WORKLOAD_TYPES.JOB,
18
+ WORKLOAD_TYPES.STATEFUL_SET,
19
+ WORKLOAD_TYPES.REPLICA_SET,
20
+ WORKLOAD_TYPES.REPLICATION_CONTROLLER,
21
+ WORKLOAD
22
+ ];
23
+
24
+ export default {
25
+ data() {
26
+ // fetching the settings related to manual refresh from global settings
27
+ const perfSetting = this.$store.getters['management/byId'](MANAGEMENT.SETTING, SETTING.UI_PERFORMANCE);
28
+ let perfConfig = {};
29
+
30
+ if (perfSetting && perfSetting.value) {
31
+ try {
32
+ perfConfig = JSON.parse(perfSetting.value);
33
+ } catch (e) {
34
+ console.warn('ui-performance setting contains invalid data'); // eslint-disable-line no-console
35
+ }
36
+ }
37
+
38
+ return {
39
+ perfConfig,
40
+ init: false,
41
+ counts: {},
42
+ multipleResources: [],
43
+ // manual refresh vars
44
+ hasManualRefresh: false,
45
+ watch: true,
46
+ isTooManyItemsToAutoUpdate: false,
47
+ force: false,
48
+ // incremental loading vars
49
+ incremental: 0,
50
+ fetchedResourceType: [],
51
+ };
52
+ },
53
+ beforeDestroy() {
54
+ // make sure this only runs once, for the initialized instance
55
+ if (this.init) {
56
+ // clear up the store to make sure we aren't storing anything that might interfere with the next rendered list view
57
+ this.$store.dispatch('resource-fetch/clearData');
58
+
59
+ const inStore = this.$store.getters['currentStore'](COUNT);
60
+
61
+ this.fetchedResourceType.forEach((type) => {
62
+ this.$store.dispatch(`${ inStore }/incrementLoadCounter`, type);
63
+ });
64
+ }
65
+ },
66
+
67
+ computed: { ...mapGetters({ refreshFlag: 'resource-fetch/refreshFlag' }) },
68
+ watch: {
69
+ refreshFlag(neu) {
70
+ // this is where the data assignment will trigger the update of the list view...
71
+ if (this.init && neu) {
72
+ this.$fetch();
73
+ }
74
+ }
75
+ },
76
+ methods: {
77
+ $fetchType(type, multipleResources = []) {
78
+ const inStore = this.$store.getters['currentStore'](COUNT);
79
+
80
+ if (!this.init) {
81
+ this.__gatherResourceFetchData(type, multipleResources);
82
+
83
+ // make sure after init that, if we have a manual refresh, we always set the force = true
84
+ if (!this.watch) {
85
+ this.force = true;
86
+ }
87
+
88
+ if (this.isTooManyItemsToAutoUpdate) {
89
+ this.hasManualRefresh = true;
90
+ }
91
+ }
92
+
93
+ if (!this.fetchedResourceType.includes(type)) {
94
+ this.fetchedResourceType.push(type);
95
+ }
96
+
97
+ return this.$store.dispatch(`${ inStore }/findAll`, {
98
+ type,
99
+ opt: {
100
+ incremental: this.incremental,
101
+ watch: this.watch,
102
+ force: this.force,
103
+ hasManualRefresh: this.hasManualRefresh
104
+ }
105
+ });
106
+ },
107
+ __getCountForResource(resourceName) {
108
+ let resourceCount;
109
+
110
+ if (this.counts[`${ resourceName }`]) {
111
+ resourceCount = this.counts[`${ resourceName }`].summary?.count;
112
+ }
113
+
114
+ return resourceCount || 0;
115
+ },
116
+ __gatherResourceFetchData(type, multipleResources) {
117
+ // flag to prevent a first data update being triggered from the requestData watcher
118
+ this.init = true;
119
+
120
+ // manual refresh settings config
121
+ const manualDataRefreshEnabled = this.perfConfig?.manualRefresh?.enabled;
122
+ const manualDataRefreshThreshold = parseInt(this.perfConfig?.manualRefresh?.threshold || '0', 10);
123
+
124
+ // incremental loading settings config
125
+ const incrementalLoadingEnabled = this.perfConfig?.incrementalLoading?.enabled;
126
+ const incrementalLoadingThreshold = parseInt(this.perfConfig?.incrementalLoading?.threshold || '0', 10);
127
+
128
+ // other vars
129
+ this.multipleResources = multipleResources;
130
+ const resourceName = type;
131
+ const inStore = this.$store.getters['currentStore'](resourceName);
132
+ let resourceCount = 0;
133
+
134
+ // manual refresh vars
135
+ let watch = true;
136
+ let isTooManyItemsToAutoUpdate = false;
137
+
138
+ // incremental loading vars
139
+ let incremental = 0;
140
+
141
+ // get resource counts
142
+ if ( this.$store.getters[`${ inStore }/haveAll`](COUNT) ) {
143
+ this.counts = this.$store.getters[`${ inStore }/all`](COUNT)[0].counts;
144
+
145
+ if (this.multipleResources.length) {
146
+ this.multipleResources.forEach((item) => {
147
+ resourceCount = resourceCount + this.__getCountForResource(item);
148
+ });
149
+ } else {
150
+ resourceCount = this.__getCountForResource(resourceName);
151
+ }
152
+ }
153
+
154
+ // manual refresh check
155
+ if (manualDataRefreshEnabled && resourceCount >= manualDataRefreshThreshold) {
156
+ watch = false;
157
+ isTooManyItemsToAutoUpdate = true;
158
+ }
159
+ // manual refresh check
160
+ if (incrementalLoadingEnabled && incrementalLoadingThreshold > 0 && resourceCount >= incrementalLoadingThreshold) {
161
+ incremental = Math.ceil(resourceCount / PAGES);
162
+ }
163
+
164
+ // pass on the flag that controls the appearance of the manual refresh button on the sortable table
165
+ this.$store.dispatch('resource-fetch/updateIsTooManyItems', isTooManyItemsToAutoUpdate);
166
+
167
+ // set vars on mixin to be used on $fetchType
168
+ this.watch = watch;
169
+ this.isTooManyItemsToAutoUpdate = isTooManyItemsToAutoUpdate;
170
+ this.incremental = incremental;
171
+ },
172
+ },
173
+ };
@@ -1,4 +1,4 @@
1
- import { CAPI, NODE } from '@shell/config/types';
1
+ import { ADDRESSES, CAPI, NODE } from '@shell/config/types';
2
2
  import { CAPI as CAPI_LABELS, MACHINE_ROLES } from '@shell/config/labels-annotations';
3
3
  import { NAME as EXPLORER } from '@shell/config/product/explorer';
4
4
  import { listNodeRoles } from '@shell/models/cluster/node';
@@ -239,6 +239,10 @@ export default class CapiMachine extends SteveModel {
239
239
  }
240
240
 
241
241
  get isRunning() {
242
- return this.status.phase === 'Running';
242
+ return this.status?.phase === 'Running';
243
+ }
244
+
245
+ get ipaddress() {
246
+ return this.status?.addresses?.find(({ type }) => type === ADDRESSES.INTERNAL_IP)?.address || '-';
243
247
  }
244
248
  }
@@ -37,4 +37,8 @@ export default class Rke1EtcdBackup extends NormanModel {
37
37
  get nameDisplay() {
38
38
  return this.name;
39
39
  }
40
+
41
+ get backupLocation() {
42
+ return !!this.backupConfig.s3BackupConfig ? this.t('cluster.snapshot.rke1.s3') : this.t('cluster.snapshot.rke1.local');
43
+ }
40
44
  }
package/models/event.js CHANGED
@@ -20,4 +20,8 @@ export default class K8sEvent extends SteveModel {
20
20
  get timestamp() {
21
21
  return this.lastTimestamp || this.metadata?.creationTimestamp;
22
22
  }
23
+
24
+ get eventType() {
25
+ return this._type;
26
+ }
23
27
  }
@@ -91,7 +91,7 @@ export default class FleetBundle extends SteveModel {
91
91
  }
92
92
 
93
93
  get stateObj() {
94
- const errorState = this.status.conditions.find((item) => {
94
+ const errorState = this.status?.conditions?.find((item) => {
95
95
  const { error, message } = item;
96
96
  const errState = !!error;
97
97
 
@@ -312,4 +312,14 @@ export default class GitRepo extends SteveModel {
312
312
 
313
313
  return 0;
314
314
  }
315
+
316
+ get bundleDeployments() {
317
+ const bds = this.$getters['all'](FLEET.BUNDLE_DEPLOYMENT);
318
+
319
+ return bds.filter(bd => bd.metadata?.labels?.['fleet.cattle.io/repo-name'] === this.name);
320
+ }
321
+
322
+ get clustersList() {
323
+ return this.$getters['all'](FLEET.CLUSTER);
324
+ }
315
325
  }
@@ -3,10 +3,13 @@ import { get } from '@shell/utils/object';
3
3
  import { findBy } from '@shell/utils/array';
4
4
  import { colorForState } from '@shell/plugins/dashboard-store/resource-class';
5
5
  import SteveModel from '@shell/plugins/steve/steve-class';
6
+ import { _CREATE } from '@shell/config/query-params';
6
7
 
7
8
  export default class HciVmBackup extends SteveModel {
8
- detailPageHeaderActionOverride() {
9
- return this.t('harvester.backup.title');
9
+ detailPageHeaderActionOverride(realMode) {
10
+ if (realMode === _CREATE) {
11
+ return this.t('harvester.backup.title');
12
+ }
10
13
  }
11
14
 
12
15
  get _availableActions() {
@@ -10,6 +10,7 @@ import { formatSi } from '@shell/utils/units';
10
10
  import { ucFirst } from '@shell/utils/string';
11
11
  import { stateDisplay, colorForState } from '@shell/plugins/dashboard-store/resource-class';
12
12
  import SteveModel from '@shell/plugins/steve/steve-class';
13
+ import { _CLONE } from '@shell/config/query-params';
13
14
 
14
15
  export function isReady() {
15
16
  function getStatusConditionOfType(type, defaultValue = []) {
@@ -55,7 +56,9 @@ export default class HciVmImage extends SteveModel {
55
56
  }
56
57
 
57
58
  applyDefaults(resources = this, realMode) {
58
- Vue.set(this.metadata, 'labels', { [HCI_ANNOTATIONS.OS_TYPE]: '', [HCI_ANNOTATIONS.IMAGE_SUFFIX]: '' });
59
+ if (realMode !== _CLONE) {
60
+ Vue.set(this.metadata, 'labels', { [HCI_ANNOTATIONS.OS_TYPE]: '', [HCI_ANNOTATIONS.IMAGE_SUFFIX]: '' });
61
+ }
59
62
  }
60
63
 
61
64
  createFromImage() {
@@ -68,6 +71,12 @@ export default class HciVmImage extends SteveModel {
68
71
  });
69
72
  }
70
73
 
74
+ cleanForNew() {
75
+ this.$dispatch(`cleanForNew`, this);
76
+
77
+ delete this.spec.displayName;
78
+ }
79
+
71
80
  get nameDisplay() {
72
81
  return this.spec?.displayName;
73
82
  }
@@ -238,13 +247,7 @@ export default class HciVmImage extends SteveModel {
238
247
  required: true,
239
248
  minLength: 1,
240
249
  maxLength: 63,
241
- translationKey: 'generic.name'
242
- },
243
- {
244
- nullable: false,
245
- path: 'spec.displayName',
246
- required: true,
247
- translationKey: 'generic.name'
250
+ translationKey: 'generic.name',
248
251
  },
249
252
  ...out
250
253
  ];
@@ -90,8 +90,9 @@ export default class HciVmTemplateVersion extends SteveModel {
90
90
  },
91
91
  features: { acpi: { enabled: true } },
92
92
  },
93
- hostname: '',
94
- networks: [{
93
+ evictionStrategy: 'LiveMigrate',
94
+ hostname: '',
95
+ networks: [{
95
96
  name: 'default',
96
97
  pod: {}
97
98
  }],
@@ -105,6 +106,10 @@ export default class HciVmTemplateVersion extends SteveModel {
105
106
  Vue.set(this, 'spec', spec);
106
107
  }
107
108
 
109
+ get canDelete() {
110
+ return this.hasLink('remove') && this.$rootGetters['type-map/optionsFor'](this.type).isRemovable && !this.isDefaultVersion;
111
+ }
112
+
108
113
  get template() {
109
114
  return this.$rootGetters['harvester/all'](HCI.VM_TEMPLATE).find((T) => {
110
115
  return T.id === this.spec.templateId;
@@ -185,6 +190,10 @@ export default class HciVmTemplateVersion extends SteveModel {
185
190
  return template?.status?.defaultVersion;
186
191
  }
187
192
 
193
+ get isDefaultVersion() {
194
+ return this.defaultVersion === this?.status?.version;
195
+ }
196
+
188
197
  get customValidationRules() {
189
198
  const rules = [
190
199
  // {
@@ -224,7 +224,7 @@ export default class VirtVm extends SteveModel {
224
224
  }
225
225
 
226
226
  cleanForNew() {
227
- this.cleanForNew();
227
+ this.$dispatch(`cleanForNew`, this);
228
228
 
229
229
  this.spec.template.spec.hostname = '';
230
230
  const interfaces = this.spec.template.spec.domain.devices?.interfaces || [];
@@ -498,7 +498,7 @@ export default class VirtVm extends SteveModel {
498
498
  }
499
499
 
500
500
  get isBeingStopped() {
501
- if (this && !this.isVMExpectedRunning && this.isVMCreated && this.vmi?.isTerminated) {
501
+ if (this && !this.isVMExpectedRunning && this.isVMCreated && this.vmi?.status?.phase !== VMIPhase.Succeeded) {
502
502
  return { status: STOPPING };
503
503
  }
504
504
 
@@ -106,7 +106,7 @@ export default class VirtVmInstance extends SteveModel {
106
106
  get isTerminated() {
107
107
  const conditions = this?.status?.conditions || [];
108
108
 
109
- return conditions.filter(cond => cond.type === 'Ready')?.status === 'False';
109
+ return conditions.find(cond => cond.type === 'Ready')?.status === 'False';
110
110
  }
111
111
 
112
112
  get getVMIApiPath() {
@@ -7,6 +7,11 @@ import { colorForState, stateDisplay } from '@shell/plugins/dashboard-store/reso
7
7
  import SteveModel from '@shell/plugins/steve/steve-class';
8
8
  import { parseSi } from '@shell/utils/units';
9
9
 
10
+ const ALLOW_SYSTEM_LABEL_KEYS = [
11
+ 'topology.kubernetes.io/zone',
12
+ 'topology.kubernetes.io/region',
13
+ ];
14
+
10
15
  export default class HciNode extends SteveModel {
11
16
  get _availableActions() {
12
17
  const cordon = {
@@ -57,9 +62,19 @@ export default class HciNode extends SteveModel {
57
62
  get filteredSystemLabels() {
58
63
  const reg = /(k3s|kubernetes|kubevirt|harvesterhci|k3os)+\.io/;
59
64
 
60
- return pickBy(this.labels, (value, key) => {
65
+ const labels = pickBy(this.labels, (value, key) => {
61
66
  return !reg.test(key);
62
67
  });
68
+
69
+ ALLOW_SYSTEM_LABEL_KEYS.map((key) => {
70
+ const value = this?.metadata?.labels?.[key];
71
+
72
+ if (value) {
73
+ labels[key] = value;
74
+ }
75
+ });
76
+
77
+ return labels;
63
78
  }
64
79
 
65
80
  get nameDisplay() {
@@ -72,7 +87,7 @@ export default class HciNode extends SteveModel {
72
87
  }
73
88
 
74
89
  if (this.isMaintenance) {
75
- return 'Maintenance mode';
90
+ return 'Maintenance';
76
91
  }
77
92
 
78
93
  if (this.isCordoned ) {
@@ -216,40 +231,20 @@ export default class HciNode extends SteveModel {
216
231
  return pods.filter(p => p?.spec?.nodeName === this.id && p?.metadata?.name !== 'removing');
217
232
  }
218
233
 
219
- get cpuReserved() {
220
- const out = this.pods.reduce((sum, pod) => {
221
- const containers = pod?.spec?.containers || [];
222
-
223
- const containerCpuReserved = containers.reduce((sum, c) => {
224
- sum += parseSi(c?.resources?.requests?.cpu || '0m');
225
-
226
- return sum;
227
- }, 0);
228
-
229
- sum += containerCpuReserved;
230
-
231
- return sum;
232
- }, 0);
234
+ get reserved() {
235
+ try {
236
+ return JSON.parse(this.metadata.annotations[HCI_ANNOTATIONS.HOST_REQUEST] || '{}');
237
+ } catch {
238
+ return {};
239
+ }
240
+ }
233
241
 
234
- return out;
242
+ get cpuReserved() {
243
+ return parseSi(this.reserved.cpu || '0');
235
244
  }
236
245
 
237
246
  get memoryReserved() {
238
- const out = this.pods.reduce((sum, pod) => {
239
- const containers = pod?.spec?.containers || [];
240
-
241
- const containerMemoryReserved = containers.reduce((sum, c) => {
242
- sum += parseSi(c?.resources?.requests?.memory || '0m', { increment: 1024 });
243
-
244
- return sum;
245
- }, 0);
246
-
247
- sum += containerMemoryReserved;
248
-
249
- return sum;
250
- }, 0);
251
-
252
- return out;
247
+ return parseSi(this.reserved.memory || '0');
253
248
  }
254
249
 
255
250
  get canDelete() {
@@ -51,7 +51,7 @@ export default class HciPv extends SteveModel {
51
51
  }
52
52
 
53
53
  cleanForNew() {
54
- this.cleanForNew();
54
+ this.$dispatch(`cleanForNew`, this);
55
55
 
56
56
  delete this.metadata.finalizers;
57
57
  const keys = [HCI_ANNOTATIONS.IMAGE_ID, DESCRIPTION];