@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
package/pages/prefs.vue CHANGED
@@ -4,7 +4,7 @@ import { mapGetters } from 'vuex';
4
4
  import BackLink from '@shell/components/BackLink';
5
5
  import BackRoute from '@shell/mixins/back-link';
6
6
  import ButtonGroup from '@shell/components/ButtonGroup';
7
- import Checkbox from '@shell/components/form/Checkbox';
7
+ import { Checkbox } from '@components/Form/Checkbox';
8
8
  import LandingPagePreference from '@shell/components/LandingPagePreference';
9
9
  import {
10
10
  mapPref, THEME, KEYMAP, DEV, DATE_FORMAT, TIME_FORMAT, ROWS_PER_PAGE, HIDE_DESC, SHOW_PRE_RELEASE, MENU_MAX_CLUSTERS
@@ -203,14 +203,22 @@ export default {
203
203
 
204
204
  <hr />
205
205
  <div class="row">
206
- <div class="col span-8">
207
- <h4 v-t="'prefs.keymap.label'" />
208
- <ButtonGroup v-model="keymap" :options="keymapOptions" />
209
- </div>
210
- <div class="col span-4">
206
+ <div class="col prefs-advanced">
211
207
  <h4 v-t="'prefs.advanced'" />
212
208
  <Checkbox v-model="dev" :label="t('prefs.dev.label', {}, true)" />
213
- <Checkbox v-if="!isSingleProduct" v-model="hideDescriptions" :label="t('prefs.hideDesc.label')" />
209
+ <p class="wrap-text">
210
+ {{ t('prefs.advancedTooltip', {}, raw=true) }}
211
+ </p>
212
+ <br>
213
+ <Checkbox v-if="!isSingleProduct" v-model="hideDescriptions" :label="t('prefs.hideDesc.label')" class="mt-10" />
214
+ </div>
215
+ </div>
216
+
217
+ <hr />
218
+ <div class="row">
219
+ <div class="col span-12">
220
+ <h4 v-t="'prefs.keymap.label'" />
221
+ <ButtonGroup v-model="keymap" :options="keymapOptions" />
214
222
  </div>
215
223
  </div>
216
224
 
@@ -230,4 +238,9 @@ export default {
230
238
  hr {
231
239
  margin: 20px 0;
232
240
  }
241
+ .wrap-text {
242
+ overflow-wrap: break-word;
243
+ max-width: 80vw;
244
+ color: var(--input-label);
245
+ }
233
246
  </style>
@@ -3,11 +3,13 @@ import { options } from '@shell/config/footer';
3
3
  import BannerGraphic from '@shell/components/BannerGraphic';
4
4
  import AsyncButton from '@shell/components/AsyncButton';
5
5
  import IndentedPanel from '@shell/components/IndentedPanel';
6
- import Card from '@shell/components/Card';
6
+ import { Card } from '@components/Card';
7
7
  import CommunityLinks from '@shell/components/CommunityLinks';
8
- import { MANAGEMENT } from '@shell/config/types';
8
+ import { CATALOG, MANAGEMENT } from '@shell/config/types';
9
9
  import { getVendor, setBrand } from '@shell/config/private-label';
10
10
  import { SETTING } from '@shell/config/settings';
11
+ import { findBy } from '@shell/utils/array';
12
+ import { addParam } from '@shell/utils/url';
11
13
 
12
14
  const KEY_REGEX = /^[0-9a-fA-F]{16}$/;
13
15
 
@@ -45,21 +47,26 @@ export default {
45
47
  return setting;
46
48
  };
47
49
 
50
+ if ( this.$store.getters['management/canList'](CATALOG.APP) ) {
51
+ this.apps = await this.$store.dispatch('management/findAll', { type: CATALOG.APP });
52
+ }
48
53
  this.supportSetting = await fetchOrCreateSetting('has-support', 'false');
49
54
  this.brandSetting = await fetchOrCreateSetting(SETTING.BRAND, '');
50
55
  this.communitySetting = await fetchOrCreateSetting(SETTING.COMMUNITY_LINKS, 'true');
51
-
56
+ this.serverUrlSetting = await fetchOrCreateSetting(SETTING.SERVER_URL, '');
52
57
  this.uiIssuesSetting = await this.$store.dispatch('management/find', { type: MANAGEMENT.SETTING, id: SETTING.ISSUES });
53
58
  },
54
59
 
55
60
  data() {
56
61
  return {
62
+ apps: [],
57
63
  vendor: getVendor(),
58
64
  supportKey: '',
59
65
  supportSetting: null,
60
66
  brandSetting: null,
61
67
  uiIssuesSetting: null,
62
- communitySetting: null,
68
+ communitySetting: null,
69
+ serverSetting: null,
63
70
  promos: [
64
71
  'support.promos.one',
65
72
  'support.promos.two',
@@ -70,8 +77,34 @@ export default {
70
77
  },
71
78
 
72
79
  computed: {
80
+ cspAdapter() {
81
+ return findBy(this.apps, 'metadata.name', 'rancher-csp-adapter' );
82
+ },
83
+
84
+ hasAWSSupport() {
85
+ return !!this.cspAdapter;
86
+ },
87
+
88
+ serverUrl() {
89
+ if (process.client) {
90
+ // Client-side rendered: use the current window location
91
+ return window.location.origin;
92
+ }
93
+
94
+ // Server-side rendered
95
+ return this.serverSetting?.value || '';
96
+ },
97
+
98
+ supportConfigLink() {
99
+ if (!this.cspAdapter) {
100
+ return false;
101
+ }
102
+
103
+ return `${ this.serverUrl }/v1/generateSUSERancherSupportConfig`;
104
+ },
105
+
73
106
  hasSupport() {
74
- return this.supportSetting?.value && this.supportSetting?.value !== 'false';
107
+ return (this.supportSetting?.value && this.supportSetting?.value !== 'false') || this.hasAWSSupport;
75
108
  },
76
109
 
77
110
  options() {
@@ -85,6 +118,10 @@ export default {
85
118
  validSupportKey() {
86
119
  return !!this.supportKey.match(KEY_REGEX);
87
120
  },
121
+
122
+ sccLink() {
123
+ return this.hasAWSSupport ? addParam('https://scc.suse.com', 'from_marketplace', '1') : 'https://scc.suse.com';
124
+ }
88
125
  },
89
126
 
90
127
  methods: {
@@ -126,7 +163,7 @@ export default {
126
163
  if (input) {
127
164
  input.focus();
128
165
  }
129
- }
166
+ },
130
167
  }
131
168
  };
132
169
  </script>
@@ -141,9 +178,14 @@ export default {
141
178
  <h2>{{ t('support.suse.access.title') }}</h2>
142
179
  <div>
143
180
  <p class="pb-10">
144
- {{ t('support.suse.access.text') }}
181
+ {{ hasAWSSupport ? t("support.suse.access.aws.text") : t("support.suse.access.text") }}
145
182
  </p>
146
- <a href="https://scc.suse.com" target="_blank" rel="noopener noreferrer nofollow">{{ t('support.suse.access.action') }} <i class="icon icon-external-link" /></a>
183
+ <a v-if="hasAWSSupport" class="mr-5 btn role-secondary btn-sm" :href="supportConfigLink">
184
+ {{ t('support.suse.access.aws.generateConfig') }}
185
+ </a>
186
+ <a :href="sccLink" target="_blank" rel="noopener noreferrer nofollow">
187
+ {{ t('support.suse.access.action') }} <i class="icon icon-external-link" />
188
+ </a>
147
189
  </div>
148
190
  </div>
149
191
  <div class="boxes">
@@ -165,7 +207,7 @@ export default {
165
207
  {{ t('support.subscription.addSubscription') }}
166
208
  </button>
167
209
  </div>
168
- <div v-if="hasSupport" class="register row">
210
+ <div v-if="hasSupport && !hasAWSSupport" class="register row">
169
211
  <a class="remove-link" @click="showDialog(true)">
170
212
  {{ t('support.subscription.removeSubscription') }}
171
213
  </a>
@@ -1,6 +1,6 @@
1
1
  const fs = require('fs');
2
2
  const path = require('path');
3
- const contextFolders = ['chart', 'cloud-credential', 'content', 'detail', 'edit', 'list', 'machine-config', 'models', 'promptRemove', 'l10n', 'windowComponents'];
3
+ const contextFolders = ['chart', 'cloud-credential', 'content', 'detail', 'edit', 'list', 'machine-config', 'models', 'promptRemove', 'l10n', 'windowComponents', 'formatters'];
4
4
  const contextMap = contextFolders.reduce((map, obj) => {
5
5
  map[obj] = true;
6
6
 
@@ -60,3 +60,11 @@ export function resolveEdit(key) {
60
60
  export function resolveDetail(key) {
61
61
  return undefined;
62
62
  }
63
+
64
+ export function importWindowComponent(name) {
65
+ return () => undefined;
66
+ }
67
+
68
+ export function resolveWindowComponent(key) {
69
+ return undefined;
70
+ }
package/pkg/tsconfig.json CHANGED
@@ -15,7 +15,10 @@
15
15
  "preserveSymlinks": true,
16
16
  "types": [
17
17
  "node",
18
- "webpack-env"
18
+ "webpack-env",
19
+ "@types/node",
20
+ "@types/jest",
21
+ "@nuxt/types"
19
22
  ],
20
23
  "lib": [
21
24
  "esnext",
@@ -25,25 +28,39 @@
25
28
  ],
26
29
  "paths": {
27
30
  "@shell/core/*": [
28
- "../../shell/core/*"
31
+ "../../node_modules/@rancher/shell/core/*"
29
32
  ],
30
33
  "@shell/config/*": [
31
- "../../shell/config/*"
34
+ "../../node_modules/@rancher/shell/config/*"
32
35
  ],
33
36
  "@shell/store/*": [
34
- "../../shell/store/*"
37
+ "../../node_modules/@rancher/shell/store/*"
38
+ ],
39
+ "@shell/plugins/*": [
40
+ "../../node_modules/@rancher/shell/plugins/*"
41
+ ],
42
+ "@shell/utils/*": [
43
+ "../../node_modules/@rancher/shell/utils/*"
44
+ ],
45
+ "@shell/models/*": [
46
+ "../../node_modules/@rancher/shell/models/*"
47
+ ],
48
+ "@shell/mixins/*": [
49
+ "../../node_modules/@rancher/shell/mixins/*"
50
+ ],
51
+ "@pkg/*": [
52
+ "./*"
35
53
  ]
36
- },
54
+ }
37
55
  },
38
56
  "include": [
39
57
  "**/*.ts",
40
58
  "**/*.tsx",
41
59
  "**/*.vue",
42
- "../../shell/types/*.d.ts",
43
- "../../shell/core/*.ts",
44
- "../../shell/config/**/*.js",
60
+ "../../node_modules/@rancher/shell/types/*.d.ts",
61
+ "../../node_modules/@rancher/shell/core/types.ts"
45
62
  ],
46
63
  "exclude": [
47
64
  "node_modules"
48
65
  ]
49
- }
66
+ }
package/pkg/vue.config.js CHANGED
@@ -1,3 +1,4 @@
1
+ const fs = require('fs');
1
2
  const path = require('path');
2
3
  const webpack = require('webpack');
3
4
  const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
@@ -8,6 +9,11 @@ module.exports = function(dir) {
8
9
  const maindir = path.resolve(dir, '..', '..');
9
10
  // The shell code must be sym-linked into the .shell folder
10
11
  const SHELL = path.join(dir, '.shell');
12
+ let COMPONENTS_DIR = path.join(SHELL, 'rancher-components');
13
+
14
+ if (fs.existsSync(path.join(maindir, 'shell'))) {
15
+ COMPONENTS_DIR = path.join(maindir, 'pkg', 'rancher-components', 'src', 'components');
16
+ }
11
17
 
12
18
  return {
13
19
  css: {
@@ -33,6 +39,8 @@ module.exports = function(dir) {
33
39
  // Alias updates
34
40
  config.resolve.alias['@shell'] = path.join(dir, '.shell');
35
41
  config.resolve.alias['~shell'] = path.join(dir, '.shell');
42
+ // This should be udpated once we move to rancher-components as a dependency
43
+ config.resolve.alias['@components'] = COMPONENTS_DIR;
36
44
  config.resolve.alias['./node_modules'] = path.join(maindir, 'node_modules');
37
45
  config.resolve.alias['@pkg'] = dir;
38
46
  config.resolve.alias['~pkg'] = dir;
@@ -0,0 +1,29 @@
1
+ /* eslint-disable no-console */
2
+ export default (context) => {
3
+ const logTypes = ['log', 'error', 'info', 'warn'];
4
+ const MAX_LOGS_STORED = 400;
5
+
6
+ console.logLog = console.log.bind(console);
7
+ console.errorLog = console.error.bind(console);
8
+ console.infoLog = console.info.bind(console);
9
+ console.warnLog = console.warn.bind(console);
10
+ console.logs = [];
11
+
12
+ logTypes.forEach((type) => {
13
+ console[type] = function() {
14
+ const dataLogged = {
15
+ type,
16
+ dateTimeUtc: new Date().toUTCString(),
17
+ timestamp: Date.now(),
18
+ data: Array.from(arguments)
19
+ };
20
+
21
+ if (console.logs.length >= MAX_LOGS_STORED) {
22
+ console.logs.shift();
23
+ }
24
+
25
+ console.logs.push(dataLogged);
26
+ console[`${ type }Log`].apply(console, arguments);
27
+ };
28
+ });
29
+ };
@@ -34,45 +34,97 @@ export async function handleSpoofedRequest(rootGetters, schemaStore, opt, produc
34
34
  }
35
35
  }
36
36
 
37
+ export async function loadSchemas(ctx, watch = true) {
38
+ const {
39
+ getters, dispatch, commit, rootGetters
40
+ } = ctx;
41
+ const res = await dispatch('findAll', { type: SCHEMA, opt: { url: 'schemas', load: false } });
42
+ const spoofedTypes = rootGetters['type-map/allSpoofedSchemas'] ;
43
+
44
+ if (Array.isArray(res.data)) {
45
+ res.data = res.data.concat(spoofedTypes);
46
+ } else if (Array.isArray(res)) {
47
+ res.data = res.concat(spoofedTypes);
48
+ }
49
+
50
+ res.data.forEach((schema) => {
51
+ schema._id = normalizeType(schema.id);
52
+ schema._group = normalizeType(schema.attributes?.group);
53
+ });
54
+
55
+ commit('loadAll', {
56
+ ctx,
57
+ type: SCHEMA,
58
+ data: res.data
59
+ });
60
+
61
+ if ( watch !== false ) {
62
+ dispatch('watch', {
63
+ type: SCHEMA,
64
+ revision: res.revision
65
+ });
66
+ }
67
+
68
+ const all = getters.all(SCHEMA);
69
+
70
+ return all;
71
+ }
72
+
37
73
  export default {
38
74
  request() {
39
75
  throw new Error('Not Implemented');
40
76
  },
41
77
 
42
- async loadSchemas(ctx, watch = true) {
43
- const {
44
- getters, dispatch, commit, rootGetters
45
- } = ctx;
46
- const res = await dispatch('findAll', { type: SCHEMA, opt: { url: 'schemas', load: false } });
47
- const spoofedTypes = rootGetters['type-map/allSpoofedSchemas'] ;
78
+ loadSchemas,
48
79
 
49
- if (Array.isArray(res.data)) {
50
- res.data = res.data.concat(spoofedTypes);
51
- } else if (Array.isArray(res)) {
52
- res.data = res.concat(spoofedTypes);
53
- }
80
+ // Load a page of data for a given type
81
+ // Used for incremental loading when enabled
82
+ async loadDataPage(ctx, { type, opt }) {
83
+ const { getters, commit, dispatch } = ctx;
54
84
 
55
- res.data.forEach((schema) => {
56
- schema._id = normalizeType(schema.id);
57
- schema._group = normalizeType(schema.attributes?.group);
58
- });
85
+ type = getters.normalizeType(type);
59
86
 
60
- commit('loadAll', {
61
- ctx,
62
- type: SCHEMA,
63
- data: res.data
64
- });
87
+ const loadCount = getters['loadCounter'](type);
65
88
 
66
- if ( watch !== false ) {
67
- dispatch('watch', {
68
- type: SCHEMA,
69
- revision: res.revision
89
+ try {
90
+ const res = await dispatch('request', { opt, type });
91
+
92
+ const newLoadCount = getters['loadCounter'](type);
93
+
94
+ // Load count changed, so we changed page or started a new load
95
+ // after this page load was started, so don't continue with incremental load
96
+ if (loadCount !== newLoadCount) {
97
+ return;
98
+ }
99
+
100
+ commit('loadAdd', {
101
+ ctx,
102
+ type,
103
+ data: res.data,
70
104
  });
71
- }
72
105
 
73
- const all = getters.all(SCHEMA);
106
+ if (res.pagination?.next) {
107
+ dispatch('loadDataPage', {
108
+ type,
109
+ opt: {
110
+ ...opt,
111
+ url: res.pagination?.next
112
+ }
113
+ });
114
+ } else {
115
+ // We have everything!
116
+ if (opt.hasManualRefresh) {
117
+ dispatch('resource-fetch/updateManualRefreshIsLoading', false, { root: true });
118
+ }
119
+ commit('setHaveAll', { type });
120
+ }
121
+ } catch (e) {
122
+ if (opt.hasManualRefresh) {
123
+ dispatch('resource-fetch/updateManualRefreshIsLoading', false, { root: true });
124
+ }
74
125
 
75
- return all;
126
+ return Promise.reject(e);
127
+ }
76
128
  },
77
129
 
78
130
  async findAll(ctx, { type, opt }) {
@@ -88,6 +140,18 @@ export default {
88
140
  }
89
141
 
90
142
  if ( opt.force !== true && getters['haveAll'](type) ) {
143
+ const args = {
144
+ type,
145
+ revision: '',
146
+ namespace: opt.watchNamespace
147
+ };
148
+
149
+ // if we are coming from a resource that wasn't watched
150
+ // but for which we have results already, just return the results but start watching it
151
+ if (opt.watch !== false && !getters.watchStarted(args)) {
152
+ dispatch('watch', args);
153
+ }
154
+
91
155
  return getters.all(type);
92
156
  }
93
157
 
@@ -113,6 +177,39 @@ export default {
113
177
  opt.stream = opt.stream !== false && load !== _NONE;
114
178
  opt.depaginate = typeOptions?.depaginate;
115
179
 
180
+ let skipHaveAll = false;
181
+
182
+ // if it's incremental loading, we do two parallel requests
183
+ // on for a limit of 100, to quickly show data
184
+ // another one with 1st page of the subset of the resource we are fetching
185
+ // the default is 4 pages, but it can be changed on mixin/resource-fetch.js
186
+ if (opt.incremental) {
187
+ commit('incrementLoadCounter', type);
188
+
189
+ if (opt.hasManualRefresh) {
190
+ dispatch('resource-fetch/updateManualRefreshIsLoading', true, { root: true });
191
+ }
192
+
193
+ const pageFetchOpts = {
194
+ ...opt,
195
+ url: `${ opt.url }?limit=${ opt.incremental }`
196
+ };
197
+
198
+ // this is where we "hijack" the limit for the dispatch('request') some lines below
199
+ // and therefore have 2 initial requests in parallel
200
+ opt.url = `${ opt.url }?limit=100`;
201
+ skipHaveAll = true;
202
+
203
+ // since we are forcing a request, clear the haveAll
204
+ // needed for the resource-fetch mixin, otherwise the incremental indicator
205
+ // won't pop-up again when manual refreshing
206
+ if (opt.force) {
207
+ commit('forgetType', type);
208
+ }
209
+
210
+ dispatch('loadDataPage', { type, opt: pageFetchOpts });
211
+ }
212
+
116
213
  let streamStarted = false;
117
214
  let out;
118
215
 
@@ -139,6 +236,10 @@ export default {
139
236
  };
140
237
 
141
238
  try {
239
+ if (!opt.incremental && opt.hasManualRefresh) {
240
+ dispatch('resource-fetch/updateManualRefreshIsLoading', true, { root: true });
241
+ }
242
+
142
243
  const res = await dispatch('request', { opt, type });
143
244
 
144
245
  if ( streamStarted ) {
@@ -156,10 +257,18 @@ export default {
156
257
  out = res;
157
258
  }
158
259
  } catch (e) {
260
+ if (!opt.incremental && opt.hasManualRefresh) {
261
+ dispatch('resource-fetch/updateManualRefreshIsLoading', false, { root: true });
262
+ }
263
+
159
264
  return Promise.reject(e);
160
265
  }
161
266
 
162
267
  if ( load === _NONE ) {
268
+ if (!opt.incremental && opt.hasManualRefresh) {
269
+ dispatch('resource-fetch/updateManualRefreshIsLoading', false, { root: true });
270
+ }
271
+
163
272
  return out;
164
273
  } else if ( out.data ) {
165
274
  if ( load === _MULTI ) {
@@ -187,7 +296,8 @@ export default {
187
296
  commit('loadAll', {
188
297
  ctx,
189
298
  type,
190
- data: out.data
299
+ data: out.data,
300
+ skipHaveAll
191
301
  });
192
302
  }
193
303
  }
@@ -202,6 +312,10 @@ export default {
202
312
 
203
313
  const all = getters.all(type);
204
314
 
315
+ if (!opt.incremental && opt.hasManualRefresh) {
316
+ dispatch('resource-fetch/updateManualRefreshIsLoading', false, { root: true });
317
+ }
318
+
205
319
  return all;
206
320
  },
207
321
 
@@ -383,6 +497,27 @@ export default {
383
497
  return classify(ctx, resource.toJSON(), true);
384
498
  },
385
499
 
500
+ // Forget a type in the store
501
+ // Remove all entries for that type and stop watching it
502
+ forgetType({ commit, getters, dispatch }, type) {
503
+ const obj = {
504
+ type,
505
+ stop: true, // Stops the watch on a type
506
+ };
507
+
508
+ if (getters['schemaFor'](type) && getters['watchStarted'](obj)) {
509
+ // Set that we don't want to watch this type
510
+ // Otherwise, the dispatch to unwatch below will just cause a re-watch when we
511
+ // detect the stop message from the backend over the web socket
512
+ commit('setWatchStopped', obj);
513
+ dispatch('watch', obj); // Ask the backend to stop watching the type
514
+ // Make sure anything in the pending queue for the type is removed, since we've now removed the type
515
+ commit('clearFromQueue', type);
516
+ }
517
+
518
+ commit('forgetType', type);
519
+ },
520
+
386
521
  promptRemove({ commit, state }, resources ) {
387
522
  commit('action-menu/togglePromptRemove', resources, { root: true });
388
523
  },
@@ -407,6 +542,10 @@ export default {
407
542
  throw new Error('Not Implemented');
408
543
  },
409
544
 
545
+ createNamespace(ctx, resource) {
546
+ throw new Error('Not Implemented');
547
+ },
548
+
410
549
  cleanForDiff(ctx, resource) {
411
550
  throw new Error('Not Implemented');
412
551
  },
@@ -439,5 +578,9 @@ export default {
439
578
  console.warn(`Schema for ${ type } still unavailable... loading schemas again...`); // eslint-disable-line no-console
440
579
  await dispatch('loadSchemas', true);
441
580
  }
581
+ },
582
+
583
+ incrementLoadCounter({ commit }, resource) {
584
+ commit('incrementLoadCounter', resource);
442
585
  }
443
586
  };
@@ -282,6 +282,18 @@ export default {
282
282
 
283
283
  isClusterStore: (state) => {
284
284
  return state.config.isClusterStore;
285
- }
285
+ },
286
+
287
+ // Increment the load counter for a resource type
288
+ // This is used for incremental loading do detect when a page changes occur of the a reload happend
289
+ // While a previous incremental loading operation is still in progress
290
+ loadCounter: (state, getters) => (type) => {
291
+ type = getters.normalizeType(type);
286
292
 
293
+ if (!!state.types[type]) {
294
+ return state.types[type].loadCounter;
295
+ }
296
+
297
+ return 0;
298
+ }
287
299
  };
@@ -29,7 +29,7 @@ export const coreStoreState = (namespace, baseUrl, isClusterStore) => ({
29
29
  types: {},
30
30
  });
31
31
 
32
- export default (vuexModule, config) => {
32
+ export default (vuexModule, config, init) => {
33
33
  const namespace = config.namespace || '';
34
34
 
35
35
  return function(store) {
@@ -61,6 +61,10 @@ export default (vuexModule, config) => {
61
61
  }
62
62
  });
63
63
 
64
+ if (init) {
65
+ init(store, ctx);
66
+ }
67
+
64
68
  // Turn all the objects in the store from the server into proxies
65
69
  const state = fromServer?.state?.[namespace];
66
70