@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
@@ -2,12 +2,12 @@
2
2
  import Loading from '@shell/components/Loading';
3
3
  import CreateEditView from '@shell/mixins/create-edit-view';
4
4
  import { stringify, exceptionToErrorsArray } from '@shell/utils/error';
5
- import Banner from '@shell/components/Banner';
5
+ import { Banner } from '@components/Banner';
6
6
  import merge from 'lodash/merge';
7
7
  import isEmpty from 'lodash/isEmpty';
8
8
  import LabeledSelect from '@shell/components/form/LabeledSelect';
9
- import LabeledInput from '@shell/components/form/LabeledInput';
10
- import Checkbox from '@shell/components/form/Checkbox';
9
+ import { LabeledInput } from '@components/Form/LabeledInput';
10
+ import { Checkbox } from '@components/Form/Checkbox';
11
11
  import ArrayList from '@shell/components/form/ArrayList';
12
12
  import { randomStr } from '@shell/utils/string';
13
13
  import { addParam, addParams } from '@shell/utils/url';
@@ -3,11 +3,11 @@ import Loading from '@shell/components/Loading';
3
3
  import CreateEditView from '@shell/mixins/create-edit-view';
4
4
  import LabeledSelect from '@shell/components/form/LabeledSelect';
5
5
  import ArrayList from '@shell/components/form/ArrayList';
6
- import Checkbox from '@shell/components/form/Checkbox';
6
+ import { Checkbox } from '@components/Form/Checkbox';
7
7
  import { NORMAN } from '@shell/config/types';
8
8
  import { stringify, exceptionToErrorsArray } from '@shell/utils/error';
9
9
  import { _CREATE } from '@shell/config/query-params';
10
- import Banner from '@shell/components/Banner';
10
+ import { Banner } from '@components/Banner';
11
11
 
12
12
  export default {
13
13
  components: {
@@ -1,6 +1,6 @@
1
1
  <script>
2
2
  import Loading from '@shell/components/Loading';
3
- import Banner from '@shell/components/Banner';
3
+ import { Banner } from '@components/Banner';
4
4
  import CreateEditView from '@shell/mixins/create-edit-view';
5
5
  import { exceptionToErrorsArray, stringify } from '@shell/utils/error';
6
6
  import Questions from '@shell/components/Questions';
@@ -1,20 +1,23 @@
1
1
  <script>
2
2
  import isEmpty from 'lodash/isEmpty';
3
+ import NodeAffinity from '@shell/components/form/NodeAffinity';
4
+ // import PodAffinity from '@shell/components/form/PodAffinity';
3
5
  import Loading from '@shell/components/Loading';
4
6
  import CreateEditView from '@shell/mixins/create-edit-view';
5
7
  import LabeledSelect from '@shell/components/form/LabeledSelect';
6
- import LabeledInput from '@shell/components/form/LabeledInput';
8
+ import { LabeledInput } from '@components/Form/LabeledInput';
7
9
  import UnitInput from '@shell/components/form/UnitInput';
8
10
  import YamlEditor from '@shell/components/YamlEditor';
9
- import Banner from '@shell/components/Banner';
11
+ import { Banner } from '@components/Banner';
10
12
 
11
13
  import { get } from '@shell/utils/object';
12
14
  import { mapGetters } from 'vuex';
13
15
  import {
14
- HCI, NAMESPACE, MANAGEMENT, CONFIG_MAP, NORMAN
16
+ HCI, NAMESPACE, MANAGEMENT, CONFIG_MAP, NORMAN, NODE
15
17
  } from '@shell/config/types';
16
18
  import { base64Decode, base64Encode } from '@shell/utils/crypto';
17
19
  import { allHashSettled } from '@shell/utils/promise';
20
+ import { podAffinity as podAffinityValidator } from '@shell/utils/validators/pod-affinity';
18
21
  import { stringify, exceptionToErrorsArray } from '@shell/utils/error';
19
22
  import { HCI as HCI_ANNOTATIONS } from '@shell/config/labels-annotations';
20
23
  import { isReady } from '@shell/models/harvester/harvesterhci.io.virtualmachineimage';
@@ -23,7 +26,7 @@ export default {
23
26
  name: 'ConfigComponentHarvester',
24
27
 
25
28
  components: {
26
- Loading, LabeledSelect, LabeledInput, UnitInput, Banner, YamlEditor
29
+ Loading, LabeledSelect, LabeledInput, UnitInput, Banner, YamlEditor, NodeAffinity
27
30
  },
28
31
 
29
32
  mixins: [CreateEditView],
@@ -43,6 +46,16 @@ export default {
43
46
  type: Boolean,
44
47
  default: false
45
48
  },
49
+
50
+ poolIndex: {
51
+ type: Number,
52
+ required: true,
53
+ },
54
+
55
+ machinePools: {
56
+ type: Array,
57
+ default: () => []
58
+ },
46
59
  },
47
60
 
48
61
  async fetch() {
@@ -60,7 +73,7 @@ export default {
60
73
 
61
74
  if (clusterId && isImportCluster) {
62
75
  const res = await allHashSettled({
63
- namespaces: this.$store.dispatch('cluster/request', { url: `${ url }/${ NAMESPACE }s` }),
76
+ namespaces: this.$store.dispatch('harvester/findAll', { type: NAMESPACE, opt: { url: `${ url }/${ NAMESPACE }s` } }),
64
77
  images: this.$store.dispatch('cluster/request', { url: `${ url }/${ HCI.IMAGE }s` }),
65
78
  configMaps: this.$store.dispatch('cluster/request', { url: `${ url }/${ CONFIG_MAP }s` }),
66
79
  networks: this.$store.dispatch('cluster/request', { url: `${ url }/k8s.cni.cncf.io.network-attachment-definitions` }),
@@ -107,7 +120,6 @@ export default {
107
120
  this.userDataOptions = userDataOptions;
108
121
  this.networkDataOptions = networkDataOptions;
109
122
  this.images = res.images.value?.data;
110
-
111
123
  this.networkOptions = (res.networks.value?.data || []).map( (O) => {
112
124
  let value;
113
125
  let label;
@@ -127,19 +139,26 @@ export default {
127
139
  };
128
140
  });
129
141
 
130
- (res.namespaces.value?.data || []).forEach(async(namespace) => {
131
- const proxyNamespace = await this.$store.dispatch('cluster/create', namespace);
132
-
133
- if (!proxyNamespace.isSystem) {
142
+ (res.namespaces.value || []).forEach((namespace) => {
143
+ if (!namespace.isSystem) {
134
144
  const value = namespace.metadata.name;
135
145
  const label = namespace.metadata.name;
136
146
 
147
+ this.namespaces.push(namespace);
137
148
  this.namespaceOptions.push({
138
149
  label,
139
150
  value
140
151
  });
141
152
  }
142
153
  });
154
+
155
+ try {
156
+ const { data: nodes } = await this.$store.dispatch('cluster/request', { url: `${ url }/${ NODE }s` });
157
+
158
+ this.allNodeObjects = nodes;
159
+ } catch (err) {
160
+ this.allNodeObjects = [];
161
+ }
143
162
  }
144
163
 
145
164
  if (isEmpty(this.value.cpuCount)) {
@@ -159,9 +178,14 @@ export default {
159
178
  },
160
179
 
161
180
  data() {
181
+ let vmAffinity = { affinity: {} };
162
182
  let userData = '';
163
183
  let networkData = '';
164
184
 
185
+ if (this.value.vmAffinity) {
186
+ vmAffinity = { affinity: JSON.parse(base64Decode(this.value.vmAffinity)) };
187
+ }
188
+
165
189
  if (this.value.userData) {
166
190
  userData = base64Decode(this.value.userData);
167
191
  }
@@ -173,13 +197,16 @@ export default {
173
197
  return {
174
198
  credential: null,
175
199
  isImportCluster: false,
200
+ vmAffinity,
176
201
  userData,
177
202
  networkData,
178
203
  images: [],
204
+ namespaces: [],
179
205
  namespaceOptions: [],
180
206
  networkOptions: [],
181
207
  userDataOptions: [],
182
208
  networkDataOptions: [],
209
+ allNodeObjects: [],
183
210
  cpuCount: ''
184
211
  };
185
212
  },
@@ -191,18 +218,27 @@ export default {
191
218
  return this.disabled || !!(this.isEdit && this.value.id);
192
219
  },
193
220
 
194
- imageOptions() {
195
- return (this.images || []).filter( (O) => {
196
- return !O.spec.url.endsWith('.iso') && isReady.call(O);
197
- }).map( (O) => {
198
- const value = O.id;
199
- const label = `${ O.spec.displayName } (${ value })`;
200
-
201
- return {
202
- label,
203
- value
204
- };
205
- });
221
+ imageOptions: {
222
+ get() {
223
+ return (this.images || []).filter( (O) => {
224
+ return !O.spec.url.endsWith('.iso') && isReady.call(O);
225
+ }).sort((a, b) => a.metadata.creationTimestamp > b.metadata.creationTimestamp ? -1 : 1).map( (O) => {
226
+ const value = O.id;
227
+ const label = `${ O.spec.displayName } (${ value })`;
228
+
229
+ return {
230
+ label,
231
+ value
232
+ };
233
+ });
234
+ },
235
+ set(neu) {
236
+ this.images = neu;
237
+ }
238
+ },
239
+
240
+ namespaceDisabled() {
241
+ return this.disabledEdit || this.poolIndex > 0;
206
242
  },
207
243
  },
208
244
 
@@ -211,10 +247,13 @@ export default {
211
247
  if (!this.isEdit) {
212
248
  this.imageOptions = [];
213
249
  this.networkOptions = [];
250
+ this.namespaces = [];
214
251
  this.namespaceOptions = [];
252
+ this.vmAffinity = { affinity: {} };
215
253
  this.value.imageName = '';
216
254
  this.value.networkName = '';
217
255
  this.value.vmNamespace = '';
256
+ this.value.vmAffinity = '';
218
257
  }
219
258
 
220
259
  this.$fetch();
@@ -229,6 +268,17 @@ export default {
229
268
  this.$refs.userDataYamlEditor.refresh();
230
269
  this.value.userData = base64Encode(neu);
231
270
  },
271
+
272
+ machinePools: {
273
+ handler(pools) {
274
+ const vmNamespace = pools[0].config.vmNamespace;
275
+
276
+ if (this.poolIndex > 0 && this.value.vmNamespace !== vmNamespace) {
277
+ this.value.vmNamespace = vmNamespace;
278
+ }
279
+ },
280
+ deep: true,
281
+ }
232
282
  },
233
283
 
234
284
  methods: {
@@ -279,6 +329,8 @@ export default {
279
329
  errors.push(message);
280
330
  }
281
331
 
332
+ podAffinityValidator(this.vmAffinity.affinity, this.$store.getters, errors);
333
+
282
334
  return { errors };
283
335
  },
284
336
 
@@ -307,6 +359,30 @@ export default {
307
359
  } catch (e) {
308
360
  this.errors = exceptionToErrorsArray(e);
309
361
  }
362
+ },
363
+
364
+ updateScheduling(neu) {
365
+ const { affinity } = neu;
366
+
367
+ if (!affinity.nodeAffinity && !affinity.podAffinity && !affinity.podAntiAffinity) {
368
+ this.value.vmAffinity = '';
369
+ this.vmAffinity = { affinity: {} };
370
+
371
+ return;
372
+ }
373
+
374
+ this.value.vmAffinity = base64Encode(JSON.stringify(affinity));
375
+ this.vmAffinity = neu;
376
+ },
377
+
378
+ updateNodeScheduling(nodeAffinity) {
379
+ if (!this.vmAffinity.affinity) {
380
+ Object.assign(this.vmAffinity, { affinity: { nodeAffinity } });
381
+ } else {
382
+ Object.assign(this.vmAffinity.affinity, { nodeAffinity });
383
+ }
384
+
385
+ this.updateScheduling(this.vmAffinity);
310
386
  }
311
387
  },
312
388
  };
@@ -369,7 +445,7 @@ export default {
369
445
  :options="namespaceOptions"
370
446
  :searchable="true"
371
447
  :required="true"
372
- :disabled="disabledEdit"
448
+ :disabled="namespaceDisabled"
373
449
  label-key="cluster.credential.harvester.namespace"
374
450
  :placeholder="t('cluster.harvester.machinePool.namespace.placeholder')"
375
451
  />
@@ -380,7 +456,7 @@ export default {
380
456
  label-key="cluster.credential.harvester.namespace"
381
457
  :required="true"
382
458
  :mode="mode"
383
- :disabled="disabledEdit"
459
+ :disabled="namespaceDisabled"
384
460
  :placeholder="t('cluster.harvester.machinePool.namespace.placeholder')"
385
461
  />
386
462
  </div>
@@ -393,6 +469,7 @@ export default {
393
469
  :mode="mode"
394
470
  :options="imageOptions"
395
471
  :required="true"
472
+ :searchable="true"
396
473
  :disabled="disabledEdit"
397
474
  label-key="cluster.credential.harvester.image"
398
475
  :placeholder="t('cluster.harvester.machinePool.image.placeholder')"
@@ -452,7 +529,29 @@ export default {
452
529
  </div>
453
530
 
454
531
  <portal :to="'advanced-'+uuid">
455
- <h3>{{ t("cluster.credential.harvester.userData.title") }}</h3>
532
+ <h3 class="mt-20">
533
+ {{ t("workload.container.titles.nodeScheduling") }}
534
+ </h3>
535
+ <NodeAffinity
536
+ :mode="mode"
537
+ :value="vmAffinity.affinity.nodeAffinity"
538
+ @input="updateNodeScheduling"
539
+ />
540
+
541
+ <!-- <h3 class="mt-20">
542
+ {{ t("workload.container.titles.podScheduling") }}
543
+ </h3>
544
+ <PodAffinity
545
+ :mode="mode"
546
+ :value="vmAffinity"
547
+ :nodes="allNodeObjects"
548
+ :namespaces="namespaces"
549
+ @update="updateScheduling"
550
+ /> -->
551
+
552
+ <h3 class="mt-20">
553
+ {{ t("cluster.credential.harvester.userData.title") }}
554
+ </h3>
456
555
  <div>
457
556
  <LabeledSelect
458
557
  v-if="isImportCluster && isCreate"
@@ -4,9 +4,9 @@ import { exceptionToErrorsArray, stringify } from '@shell/utils/error';
4
4
  import { _CREATE } from '@shell/config/query-params';
5
5
  import CreateEditView from '@shell/mixins/create-edit-view';
6
6
  import Loading from '@shell/components/Loading';
7
- import Banner from '@shell/components/Banner';
7
+ import { Banner } from '@components/Banner';
8
8
  import LabeledSelect from '@shell/components/form/LabeledSelect';
9
- import Checkbox from '@shell/components/form/Checkbox';
9
+ import { Checkbox } from '@components/Form/Checkbox';
10
10
 
11
11
  export default {
12
12
  components: {
@@ -2,14 +2,14 @@
2
2
  import Loading from '@shell/components/Loading';
3
3
  import CreateEditView from '@shell/mixins/create-edit-view';
4
4
  import LabeledSelect from '@shell/components/form/LabeledSelect';
5
- // import Checkbox from '@shell/components/form/Checkbox';
5
+ // import { Checkbox } from '@components/Form/Checkbox';
6
6
  import { exceptionToErrorsArray, stringify } from '@shell/utils/error';
7
- import Banner from '@shell/components/Banner';
7
+ import { Banner } from '@components/Banner';
8
8
  import UnitInput from '@shell/components/form/UnitInput';
9
- import Card from '@shell/components/Card';
10
- import RadioGroup from '@shell/components/form/RadioGroup';
9
+ import { Card } from '@components/Card';
10
+ import { RadioGroup } from '@components/Form/Radio';
11
11
  import KeyValue from '@shell/components/form/KeyValue';
12
- import LabeledInput from '@shell/components/form/LabeledInput';
12
+ import { LabeledInput } from '@components/Form/LabeledInput';
13
13
  import ArrayListSelect from '@shell/components/form/ArrayListSelect';
14
14
  import YamlEditor from '@shell/components/YamlEditor';
15
15
  import { get, set } from '@shell/utils/object';
@@ -4,15 +4,17 @@ import {
4
4
  SETUP, TIMED_OUT, UPGRADED, _FLAGGED, _UNFLAG
5
5
  } from '@shell/config/query-params';
6
6
  import { SETTING } from '@shell/config/settings';
7
- import { MANAGEMENT, NORMAN } from '@shell/config/types';
7
+ import { MANAGEMENT, NORMAN, DEFAULT_WORKSPACE } from '@shell/config/types';
8
8
  import { _ALL_IF_AUTHED } from '@shell/plugins/dashboard-store/actions';
9
9
  import { applyProducts } from '@shell/store/type-map';
10
10
  import { findBy } from '@shell/utils/array';
11
11
  import { ClusterNotFoundError } from '@shell/utils/error';
12
12
  import { get } from '@shell/utils/object';
13
- import { AFTER_LOGIN_ROUTE } from '@shell/store/prefs';
13
+ import { AFTER_LOGIN_ROUTE, WORKSPACE } from '@shell/store/prefs';
14
14
  import { NAME as VIRTUAL } from '@shell/config/product/harvester';
15
15
  import { BACK_TO } from '@shell/config/local-storage';
16
+ import { setFavIcon, haveSetFavIcon } from '@shell/utils/favicon';
17
+ import { NAME as FLEET_NAME } from '@shell/config/product/fleet.js';
16
18
 
17
19
  const getPackageFromRoute = (route) => {
18
20
  if (!route?.meta) {
@@ -26,7 +28,7 @@ const getPackageFromRoute = (route) => {
26
28
 
27
29
  let beforeEachSetup = false;
28
30
 
29
- function setProduct(store, to) {
31
+ function getProduct(to) {
30
32
  let product = to.params?.product;
31
33
 
32
34
  if ( !product ) {
@@ -37,6 +39,12 @@ function setProduct(store, to) {
37
39
  }
38
40
  }
39
41
 
42
+ return product;
43
+ }
44
+
45
+ function setProduct(store, to) {
46
+ let product = getProduct(to);
47
+
40
48
  if ( !product ) {
41
49
  product = EXPLORER;
42
50
  }
@@ -106,6 +114,11 @@ export default async function({
106
114
  }
107
115
  });
108
116
 
117
+ // Set the favicon - use custom one from store if set
118
+ if (!haveSetFavIcon()) {
119
+ setFavIcon(store);
120
+ }
121
+
109
122
  const res = store.getters['management/byId'](MANAGEMENT.SETTING, SETTING.FIRST_LOGIN);
110
123
  const plSetting = store.getters['management/byId'](MANAGEMENT.SETTING, SETTING.PL);
111
124
 
@@ -176,7 +189,9 @@ export default async function({
176
189
  }
177
190
 
178
191
  if ( store.getters['auth/enabled'] !== false && !store.getters['auth/loggedIn'] ) {
192
+ // `await` so we have one successfully request whilst possibly logged in (ensures fromHeader is populated from `x-api-cattle-auth`)
179
193
  await store.dispatch('auth/getUser');
194
+
180
195
  const v3User = store.getters['auth/v3User'] || {};
181
196
 
182
197
  if (v3User?.mustChangePassword) {
@@ -239,6 +254,7 @@ export default async function({
239
254
  beforeEachSetup = true;
240
255
 
241
256
  store.app.router.beforeEach((to, from, next) => {
257
+ // NOTE - This beforeEach runs AFTER this middleware. So anything in this middleware that requires it must set it manually
242
258
  setProduct(store, to);
243
259
  next();
244
260
  });
@@ -260,10 +276,10 @@ export default async function({
260
276
  let clusterId = get(route, 'params.cluster');
261
277
 
262
278
  const pkg = getPackageFromRoute(route);
263
- const product = route?.params?.product;
279
+ const product = getProduct(route);
264
280
 
265
281
  const oldPkg = getPackageFromRoute(from);
266
- const oldProduct = from?.params?.product;
282
+ const oldProduct = getProduct(from);
267
283
 
268
284
  // Leave an old pkg where we weren't before?
269
285
  const oldPkgPlugin = oldPkg ? Object.values($plugin.getPlugins()).find(p => p.name === oldPkg) : null;
@@ -286,7 +302,7 @@ export default async function({
286
302
  // Entering a new package where we weren't before?
287
303
  const newPkgPlugin = pkg ? Object.values($plugin.getPlugins()).find(p => p.name === pkg) : null;
288
304
 
289
- // Note - We can't block on oldPkg !== newPkg because on a fresh load the `from` route equals the to `route`
305
+ // Note - We can't block on oldPkg !== newPkg because on a fresh load the `from` route equals the `to` route
290
306
  if (pkg && (oldPkg !== pkg || from.fullPath === route.fullPath)) {
291
307
  // Execute mandatory store actions
292
308
  await Promise.all(always);
@@ -300,7 +316,19 @@ export default async function({
300
316
  });
301
317
  }
302
318
 
319
+ // Ensure that the activeNamespaceCache is updated given the change of context either from or to a place where it uses workspaces
320
+ // When fleet moves to it's own package this should be moved to pkg onEnter/onLeave
321
+ if ((oldProduct === FLEET_NAME || product === FLEET_NAME) && oldProduct !== product) {
322
+ // See note above for store.app.router.beforeEach, need to setProduct manually, for the moment do this in a targeted way
323
+ setProduct(store, route);
324
+ store.commit('updateWorkspace', {
325
+ value: store.getters['prefs/get'](WORKSPACE) || DEFAULT_WORKSPACE,
326
+ getters: store.getters
327
+ });
328
+ }
329
+
303
330
  if (product === VIRTUAL || route.name === `c-cluster-${ VIRTUAL }` || route.name?.startsWith(`c-cluster-${ VIRTUAL }-`)) {
331
+ setProduct(store, route);
304
332
  const res = [
305
333
  ...always,
306
334
  store.dispatch('loadVirtual', {
@@ -319,6 +347,7 @@ export default async function({
319
347
  id: clusterId,
320
348
  oldPkg: oldPkgPlugin,
321
349
  newPkg: newPkgPlugin,
350
+ product,
322
351
  oldProduct,
323
352
  })]);
324
353
 
@@ -355,6 +384,7 @@ export default async function({
355
384
  }
356
385
 
357
386
  async function findMe(store) {
387
+ // First thing we do in loadManagement is fetch principals anyway.... so don't ?me=true here
358
388
  const principals = await store.dispatch('rancher/findAll', {
359
389
  type: NORMAN.PRINCIPAL,
360
390
  opt: {
@@ -0,0 +1,22 @@
1
+ import { setFavIcon, haveSetFavIcon } from '@shell/utils/favicon';
2
+ import { MANAGEMENT } from '@shell/config/types';
3
+ import { _ALL_IF_AUTHED } from '@shell/plugins/dashboard-store/actions';
4
+
5
+ export default async function({ store }) {
6
+ if (haveSetFavIcon()) {
7
+ return;
8
+ }
9
+
10
+ try {
11
+ // Load settings, which will either be just the public ones if not logged in, or all if you are
12
+ await store.dispatch('management/findAll', {
13
+ type: MANAGEMENT.SETTING,
14
+ opt: {
15
+ load: _ALL_IF_AUTHED, url: `/v1/${ MANAGEMENT.SETTING }`, redirectUnauthorized: false
16
+ }
17
+ });
18
+
19
+ // Set the favicon - use custom one from store if set
20
+ setFavIcon(store);
21
+ } catch (e) {}
22
+ }
package/mixins/brand.js CHANGED
@@ -1,4 +1,4 @@
1
- import { MANAGEMENT } from '@shell/config/types';
1
+ import { CATALOG, MANAGEMENT } from '@shell/config/types';
2
2
  import { getVendor } from '@shell/config/private-label';
3
3
  import { SETTING } from '@shell/config/settings';
4
4
  import { findBy } from '@shell/utils/array';
@@ -6,14 +6,23 @@ import { createCssVars } from '@shell/utils/color';
6
6
 
7
7
  export default {
8
8
  async fetch() {
9
- this.globalSettings = await this.$store.getters['management/all'](MANAGEMENT.SETTING);
9
+ // For the login page, the schemas won't be loaded - we don't need the apps in this case
10
+ try {
11
+ if (this.$store.getters['management/canList'](CATALOG.APP)) {
12
+ this.apps = await this.$store.dispatch('management/findAll', { type: CATALOG.APP });
13
+ }
14
+ } catch (e) {}
10
15
  },
11
16
 
12
17
  data() {
13
- return { globalSettings: [], brandCookie: null };
18
+ return { apps: [] };
14
19
  },
15
20
 
16
21
  computed: {
22
+ globalSettings() {
23
+ return this.$store.getters['management/all'](MANAGEMENT.SETTING);
24
+ },
25
+
17
26
  brand() {
18
27
  const setting = findBy(this.globalSettings, 'id', SETTING.BRAND);
19
28
 
@@ -33,7 +42,18 @@ export default {
33
42
  },
34
43
 
35
44
  theme() {
45
+ const setting = findBy(this.globalSettings, 'id', SETTING.THEME);
46
+
47
+ // This handles cases where the settings update after the page loads (like on log out)
48
+ if (setting?.value) {
49
+ return setting?.value;
50
+ }
51
+
36
52
  return this.$store.getters['prefs/theme'];
53
+ },
54
+
55
+ cspAdapter() {
56
+ return findBy(this.apps, 'metadata.name', 'rancher-csp-adapter' );
37
57
  }
38
58
  },
39
59
 
@@ -60,6 +80,33 @@ export default {
60
80
  this.setCustomColor(this.linkColor, 'link');
61
81
  }
62
82
  },
83
+
84
+ cspAdapter(neu) {
85
+ if (neu && !this.brand) {
86
+ const brandSetting = findBy(this.globalSettings, 'id', SETTING.BRAND);
87
+
88
+ if (brandSetting) {
89
+ brandSetting.value = 'suse';
90
+ brandSetting.save();
91
+ } else {
92
+ const schema = this.$store.getters['management/schemaFor'](MANAGEMENT.SETTING);
93
+ const url = schema?.linkFor('collection');
94
+
95
+ if (url) {
96
+ this.$store.dispatch('management/create', {
97
+ type: MANAGEMENT.SETTING, metadata: { name: SETTING.BRAND }, value: 'suse', default: ''
98
+ }).then(setting => setting.save());
99
+ }
100
+ }
101
+ } else if (!neu) {
102
+ const brandSetting = findBy(this.globalSettings, 'id', SETTING.BRAND);
103
+
104
+ if (brandSetting) {
105
+ brandSetting.value = '';
106
+ brandSetting.save();
107
+ }
108
+ }
109
+ }
63
110
  },
64
111
  methods: {
65
112
  setCustomColor(color, name = 'primary') {
@@ -0,0 +1,37 @@
1
+ import { NORMAN } from '@shell/config/types';
2
+ import { mapGetters } from 'vuex';
3
+
4
+ export default {
5
+ computed: { ...mapGetters(['isSingleProduct']) },
6
+ methods: {
7
+ setTabVisibilityListener(isAdd) {
8
+ const method = isAdd ? 'addEventListener' : 'removeEventListener';
9
+
10
+ document[method]('visibilitychange', this.visibilityChange, true);
11
+ },
12
+
13
+ async visibilityChange() {
14
+ if (!document.hidden) {
15
+ await this.$store.dispatch('rancher/findAll', {
16
+ type: NORMAN.USER,
17
+ opt: {
18
+ url: '/v3/users',
19
+ filter: { me: true },
20
+ force: true
21
+ }
22
+ });
23
+ }
24
+ },
25
+ },
26
+
27
+ mounted() {
28
+ if ((!this.isSingleProduct || this.isSingleProduct?.enableSessionCheck) && this.$config.rancherEnv !== 'desktop') {
29
+ this.setTabVisibilityListener(true);
30
+ }
31
+ },
32
+ beforeDestroy() {
33
+ if ((!this.isSingleProduct || this.isSingleProduct?.enableSessionCheck) && this.$config.rancherEnv !== 'desktop') {
34
+ this.setTabVisibilityListener(false);
35
+ }
36
+ },
37
+ };