@rancher/shell 0.2.5 → 0.3.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 (635) hide show
  1. package/assets/styles/global/_button.scss +5 -1
  2. package/assets/styles/global/_columns.scss +4 -0
  3. package/assets/styles/global/_layout.scss +1 -2
  4. package/assets/styles/global/_select.scss +1 -4
  5. package/assets/styles/themes/_dark.scss +8 -4
  6. package/assets/styles/themes/_light.scss +9 -3
  7. package/assets/styles/themes/_suse.scss +1 -1
  8. package/assets/styles/vendor/vue-select.scss +4 -3
  9. package/assets/translations/en-us.yaml +682 -74
  10. package/assets/translations/zh-hans.yaml +554 -170
  11. package/chart/istio.vue +1 -1
  12. package/chart/monitoring/grafana/index.vue +1 -1
  13. package/chart/monitoring/index.vue +1 -1
  14. package/chart/monitoring/prometheus/index.vue +4 -4
  15. package/chart/monitoring/steps/uninstall-v1.vue +2 -2
  16. package/cloud-credential/azure.vue +23 -0
  17. package/cloud-credential/harvester.vue +25 -62
  18. package/cloud-credential/pnap.vue +80 -0
  19. package/components/AdvancedSection.vue +9 -2
  20. package/components/Alert.vue +2 -2
  21. package/components/AlertTable.vue +1 -1
  22. package/components/AssignTo.vue +1 -1
  23. package/components/AsyncButton.vue +2 -2
  24. package/components/BrandImage.vue +1 -1
  25. package/components/ButtonDropdown.vue +0 -2
  26. package/components/ButtonGroup.vue +2 -1
  27. package/components/ClusterProviderIcon.vue +2 -2
  28. package/components/Collapse.vue +6 -2
  29. package/components/CollapsibleCard.vue +2 -3
  30. package/components/ConsumptionGauge.vue +4 -4
  31. package/components/ContainerResourceLimit.vue +1 -1
  32. package/components/CountBox.vue +1 -1
  33. package/components/CountGauge.vue +1 -1
  34. package/components/CruResource.vue +43 -5
  35. package/components/DashboardMetrics.vue +2 -2
  36. package/components/DetailTop.vue +58 -3
  37. package/components/DisableAuthProviderModal.vue +106 -0
  38. package/components/DraggableZone.vue +181 -0
  39. package/components/ExplorerMembers.vue +253 -30
  40. package/components/ExplorerProjectsNamespaces.vue +82 -38
  41. package/components/FixedBanner.vue +6 -6
  42. package/components/GlobalRoleBindings.vue +6 -6
  43. package/components/GradientBox.vue +2 -2
  44. package/components/GrowlManager.vue +3 -3
  45. package/components/IconMessage.vue +4 -4
  46. package/components/IconOrSvg.vue +149 -0
  47. package/components/Import.vue +5 -5
  48. package/components/InputOrDisplay.vue +1 -1
  49. package/components/KeyValueView.vue +1 -1
  50. package/components/LabelValue.vue +1 -1
  51. package/components/LogItem.vue +69 -0
  52. package/components/ModalWithCard.vue +1 -1
  53. package/components/MoveModal.vue +1 -1
  54. package/components/PercentageBar.vue +2 -2
  55. package/components/PodSecurityAdmission.vue +302 -0
  56. package/components/PromptChangePassword.vue +1 -1
  57. package/components/PromptModal.vue +2 -1
  58. package/components/PromptRemove.vue +2 -2
  59. package/components/PromptRestore.vue +13 -13
  60. package/components/Questions/Question.js +1 -1
  61. package/components/ResourceCancelModal.vue +3 -3
  62. package/components/ResourceDetail/Masthead.vue +55 -3
  63. package/components/ResourceDetail/index.vue +12 -5
  64. package/components/ResourceList/Masthead.vue +12 -2
  65. package/components/ResourceList/ResourceLoadingIndicator.vue +12 -2
  66. package/components/ResourceList/index.vue +53 -12
  67. package/components/ResourceList/resource-list.config.js +7 -0
  68. package/components/ResourceSummary.vue +4 -4
  69. package/components/ResourceTable.vue +31 -6
  70. package/components/RoleBindings.vue +19 -19
  71. package/components/SimpleBox.vue +6 -2
  72. package/components/SingleClusterInfo.vue +5 -5
  73. package/components/SortableTable/THead.vue +20 -6
  74. package/components/SortableTable/actions.js +4 -2
  75. package/components/SortableTable/index.vue +30 -19
  76. package/components/SortableTable/selection.js +2 -2
  77. package/components/Tabbed/index.vue +20 -15
  78. package/components/TableSparkLine.vue +1 -1
  79. package/components/TypeDescription.vue +1 -1
  80. package/components/Wizard.vue +1 -1
  81. package/components/YamlEditor.vue +6 -6
  82. package/components/__tests__/ApplicationCard.test.ts +27 -0
  83. package/components/__tests__/AsyncButton.test.ts +140 -0
  84. package/components/__tests__/BackLink.test.ts +33 -0
  85. package/components/__tests__/ButtonGroup.test.ts +124 -0
  86. package/components/__tests__/ClusterBadge.test.ts +32 -0
  87. package/components/__tests__/Collapse.spec.ts +44 -0
  88. package/components/__tests__/CollapsibleCard.test.ts +64 -0
  89. package/components/__tests__/ConsumptionGauge.test.ts +88 -0
  90. package/components/__tests__/CruResource.test.ts +6 -5
  91. package/components/__tests__/FixedBanner.test.ts +129 -0
  92. package/components/__tests__/GrowlManager.test.ts +147 -0
  93. package/components/__tests__/NamespaceFilter.test.ts +221 -0
  94. package/components/__tests__/PercentageBar.test.ts +32 -0
  95. package/components/__tests__/PodSecurityAdmission.test.ts +398 -0
  96. package/components/__tests__/SimpleBox.spec.ts +28 -0
  97. package/components/auth/AuthBanner.vue +20 -10
  98. package/components/auth/RoleDetailEdit.vue +41 -30
  99. package/components/auth/SelectPrincipal.vue +45 -5
  100. package/components/auth/login/ldap.vue +3 -0
  101. package/components/cards/ApplicationCard.vue +10 -5
  102. package/components/fleet/FleetBundleResources.vue +8 -8
  103. package/components/fleet/FleetClusters.vue +10 -10
  104. package/components/fleet/FleetRepos.vue +5 -5
  105. package/components/fleet/FleetResources.vue +6 -6
  106. package/components/fleet/FleetSummary.vue +5 -5
  107. package/components/fleet/ResourcesSummary.vue +1 -1
  108. package/components/form/ArrayList.vue +3 -35
  109. package/components/form/ArrayListGrouped.vue +14 -5
  110. package/components/form/ArrayListSelect.vue +8 -8
  111. package/components/form/BannerSettings.vue +6 -6
  112. package/components/form/ChangePassword.vue +3 -3
  113. package/components/form/Error.vue +10 -2
  114. package/components/form/FileSelector.vue +3 -3
  115. package/components/form/Footer.vue +1 -1
  116. package/components/form/GithubPicker.vue +4 -4
  117. package/components/form/KeyValue.vue +41 -9
  118. package/components/form/LabeledSelect.vue +5 -2
  119. package/components/form/Labels.vue +46 -16
  120. package/components/form/MatchExpressions.vue +1 -1
  121. package/components/form/Members/ClusterPermissionsEditor.vue +28 -28
  122. package/components/form/Members/MembershipEditor.vue +14 -14
  123. package/components/form/NameNsDescription.vue +1 -1
  124. package/components/form/NodeAffinity.vue +1 -1
  125. package/components/form/NodeScheduling.vue +1 -1
  126. package/components/form/Password.vue +3 -3
  127. package/components/form/PodAffinity.vue +1 -1
  128. package/components/form/Probe.vue +3 -3
  129. package/components/form/ProjectMemberEditor.vue +1 -1
  130. package/components/form/ResourceQuota/Project.vue +6 -6
  131. package/components/form/ResourceQuota/shared.js +12 -12
  132. package/components/form/ResourceTabs/index.vue +1 -6
  133. package/components/form/SecretSelector.vue +1 -1
  134. package/components/form/Security.vue +8 -7
  135. package/components/form/Select.vue +7 -2
  136. package/components/form/SelectOrCreateAuthSecret.vue +22 -29
  137. package/components/form/ServicePorts.vue +8 -0
  138. package/components/form/SimpleSecretSelector.vue +1 -1
  139. package/components/form/Taints.vue +1 -1
  140. package/components/form/UnitInput.vue +7 -7
  141. package/components/form/ValueFromResource.vue +1 -1
  142. package/components/form/WorkloadPorts.vue +8 -2
  143. package/components/form/__tests__/ArrayList.test.ts +74 -0
  144. package/components/form/__tests__/ArrayListGrouped.test.ts +6 -4
  145. package/components/formatter/AppSummaryGraph.vue +4 -4
  146. package/components/formatter/BadgeStateFormatter.vue +2 -2
  147. package/components/formatter/Checked.vue +2 -2
  148. package/components/formatter/ClusterLink.vue +8 -3
  149. package/components/formatter/Date.vue +1 -1
  150. package/components/formatter/DelayedValue.vue +1 -1
  151. package/components/formatter/Endpoints.vue +1 -1
  152. package/components/formatter/FleetSummaryGraph.vue +4 -4
  153. package/components/formatter/IconIsDefault.vue +3 -3
  154. package/components/formatter/IconText.vue +4 -4
  155. package/components/formatter/ImagePercentageBar.vue +4 -4
  156. package/components/formatter/IngressFullPath.vue +1 -1
  157. package/components/formatter/InternalExternalIP.vue +11 -8
  158. package/components/formatter/LinkDetail.vue +3 -3
  159. package/components/formatter/List.vue +1 -1
  160. package/components/formatter/ListLink.vue +1 -1
  161. package/components/formatter/ListLinkDetail.vue +1 -1
  162. package/components/formatter/LiveDate.vue +3 -3
  163. package/components/formatter/LiveDuration.vue +78 -0
  164. package/components/formatter/LivePodRestarts.vue +1 -1
  165. package/components/formatter/Number.vue +1 -1
  166. package/components/formatter/Percentage.vue +2 -2
  167. package/components/formatter/PercentageBar.vue +3 -3
  168. package/components/formatter/PodImages.vue +1 -1
  169. package/components/formatter/Principal.vue +1 -1
  170. package/components/formatter/PrincipalGroupBindings.vue +2 -2
  171. package/components/formatter/QualityText.vue +1 -1
  172. package/components/formatter/ReceiverIcons.vue +2 -2
  173. package/components/formatter/Scale.vue +1 -1
  174. package/components/formatter/ScanResult.vue +1 -1
  175. package/components/formatter/SecretData.vue +1 -1
  176. package/components/formatter/ServiceType.vue +1 -1
  177. package/components/formatter/Shortened.vue +1 -1
  178. package/components/formatter/VerticalScroll.vue +2 -2
  179. package/components/formatter/VirtualServiceGateways.vue +3 -3
  180. package/components/formatter/Weight.vue +2 -2
  181. package/components/formatter/WorkloadDetailEndpoints.vue +1 -1
  182. package/components/formatter/WorkloadHealthScale.vue +7 -5
  183. package/components/formatter/__tests__/Date.test.ts +60 -0
  184. package/components/formatter/__tests__/LinkDetail.test.ts +72 -0
  185. package/components/formatter/__tests__/LiveDate.test.ts +84 -0
  186. package/components/formatter/__tests__/Si.test.ts +35 -0
  187. package/components/graph/LinePlot.vue +1 -1
  188. package/components/graph/ProgressArc.vue +5 -5
  189. package/components/nav/GlobalLoading.vue +1 -1
  190. package/components/nav/Header.vue +6 -4
  191. package/components/nav/Jump.vue +3 -3
  192. package/components/nav/NamespaceFilter.vue +200 -68
  193. package/components/nav/TopLevelMenu.vue +24 -21
  194. package/components/nav/Type.vue +1 -1
  195. package/components/nav/WindowManager/ChartReadme.vue +1 -1
  196. package/components/nav/WindowManager/ContainerLogs.vue +84 -127
  197. package/components/nav/WindowManager/ContainerShell.vue +28 -7
  198. package/components/nav/WindowManager/KubectlShell.vue +6 -6
  199. package/components/nav/WindowManager/MachineSsh.vue +1 -1
  200. package/components/nav/WindowManager/Window.vue +2 -0
  201. package/components/nav/WindowManager/index.vue +206 -25
  202. package/config/elemental-types.js +9 -0
  203. package/config/features.js +2 -0
  204. package/config/home-links.js +4 -1
  205. package/config/labels-annotations.js +19 -19
  206. package/config/pod-security-admission.ts +82 -0
  207. package/config/product/apps.js +5 -5
  208. package/config/product/auth.js +22 -21
  209. package/config/product/cis.js +24 -24
  210. package/config/product/explorer.js +25 -24
  211. package/config/product/fleet.js +7 -7
  212. package/config/product/gatekeeper.js +7 -7
  213. package/config/product/istio.js +7 -7
  214. package/config/product/legacy.js +21 -21
  215. package/config/product/logging.js +90 -90
  216. package/config/product/manager.js +19 -15
  217. package/config/product/monitoring.js +36 -36
  218. package/config/product/multi-cluster-apps.js +24 -24
  219. package/config/product/settings.js +42 -42
  220. package/config/secret.js +0 -1
  221. package/config/settings.ts +39 -22
  222. package/config/table-headers.js +70 -52
  223. package/config/types.js +11 -8
  224. package/config/uiplugins.js +4 -4
  225. package/content/docs/zh-hans/getting-started.md +113 -137
  226. package/content/docs/zh-hans/whats-new.md +8 -46
  227. package/creators/app/app.package.json +4 -1
  228. package/creators/app/{.eslintignore → files/.eslintignore} +0 -0
  229. package/creators/app/{.eslintrc.js → files/.eslintrc.js} +0 -0
  230. package/creators/app/{.vscode → files/.vscode}/settings.json +0 -0
  231. package/creators/app/{babel.config.js → files/babel.config.js} +0 -0
  232. package/creators/app/{nuxt.config.js → files/nuxt.config.js} +0 -0
  233. package/creators/app/{tsconfig.json → files/tsconfig.json} +2 -1
  234. package/creators/app/init +16 -17
  235. package/creators/app/package.json +7 -1
  236. package/creators/pkg/{babel.config.js → files/babel.config.js} +0 -0
  237. package/creators/pkg/{index.ts → files/index.ts} +0 -0
  238. package/creators/pkg/{tsconfig.json → files/tsconfig.json} +13 -12
  239. package/creators/pkg/{vue.config.js → files/vue.config.js} +0 -0
  240. package/creators/pkg/init +1 -1
  241. package/creators/pkg/package.json +2 -2
  242. package/creators/update/init +56 -0
  243. package/creators/update/package.json +20 -0
  244. package/creators/update/upgrade +56 -0
  245. package/detail/catalog.cattle.io.app.vue +1 -1
  246. package/detail/cis.cattle.io.clusterscan.vue +6 -6
  247. package/detail/configmap.vue +1 -1
  248. package/detail/constraints.gatekeeper.sh.constraint.vue +1 -1
  249. package/detail/fleet.cattle.io.bundle.vue +5 -5
  250. package/detail/fleet.cattle.io.gitrepo.vue +5 -5
  251. package/detail/helm.cattle.io.projecthelmchart.vue +1 -1
  252. package/detail/management.cattle.io.user.vue +3 -3
  253. package/detail/namespace.vue +13 -13
  254. package/detail/node.vue +2 -2
  255. package/detail/pod.vue +2 -2
  256. package/detail/provisioning.cattle.io.cluster.vue +47 -10
  257. package/detail/secret.vue +2 -2
  258. package/detail/service.vue +2 -9
  259. package/detail/workload/index.vue +1 -2
  260. package/dialog/AddClusterMemberDialog.vue +23 -29
  261. package/dialog/AddCustomBadgeDialog.vue +4 -4
  262. package/dialog/AddProjectMemberDialog.vue +81 -30
  263. package/dialog/AddonConfigConfirmationDialog.vue +1 -1
  264. package/dialog/DiagnosticTimingsDialog.vue +9 -8
  265. package/dialog/DrainNode.vue +56 -60
  266. package/dialog/ForceMachineRemoveDialog.vue +6 -8
  267. package/dialog/GenericPrompt.vue +16 -21
  268. package/dialog/RollbackWorkloadDialog.vue +22 -53
  269. package/dialog/RotateCertificatesDialog.vue +9 -11
  270. package/dialog/RotateEncryptionKeyDialog.vue +6 -10
  271. package/dialog/SaveAsRKETemplateDialog.vue +6 -14
  272. package/dialog/ScaleMachineDownDialog.vue +2 -2
  273. package/dialog/ScalePoolDownDialog.vue +121 -0
  274. package/edit/__tests__/management.cattle.io.setting.test.ts +4 -4
  275. package/edit/auth/azuread.vue +18 -18
  276. package/edit/auth/github.vue +10 -2
  277. package/edit/auth/googleoauth.vue +10 -1
  278. package/edit/auth/ldap/index.vue +14 -4
  279. package/edit/auth/oidc.vue +13 -3
  280. package/edit/auth/saml.vue +14 -4
  281. package/edit/autoscaling.horizontalpodautoscaler/external-metric.vue +2 -2
  282. package/edit/autoscaling.horizontalpodautoscaler/index.vue +1 -1
  283. package/edit/autoscaling.horizontalpodautoscaler/metric-object-reference.vue +1 -1
  284. package/edit/autoscaling.horizontalpodautoscaler/object-metric.vue +2 -2
  285. package/edit/autoscaling.horizontalpodautoscaler/pod-metric.vue +2 -2
  286. package/edit/cis.cattle.io.clusterscan.vue +2 -2
  287. package/edit/cloudcredential.vue +3 -7
  288. package/edit/constraints.gatekeeper.sh.constraint/index.vue +1 -1
  289. package/edit/fleet.cattle.io.clustergroup.vue +3 -3
  290. package/edit/fleet.cattle.io.gitrepo.vue +9 -9
  291. package/edit/group.principal.vue +2 -2
  292. package/edit/helm.cattle.io.projecthelmchart.vue +3 -3
  293. package/edit/logging-flow/Match.vue +39 -8
  294. package/edit/logging-flow/index.vue +28 -5
  295. package/edit/logging.banzaicloud.io.output/providers/datadog.vue +1 -1
  296. package/edit/logging.banzaicloud.io.output/providers/elasticsearch.vue +1 -1
  297. package/edit/logging.banzaicloud.io.output/providers/gcs.vue +1 -1
  298. package/edit/logging.banzaicloud.io.output/providers/gelf.vue +1 -1
  299. package/edit/logging.banzaicloud.io.output/providers/kafka.vue +1 -1
  300. package/edit/logging.banzaicloud.io.output/providers/logz.vue +1 -1
  301. package/edit/logging.banzaicloud.io.output/providers/loki.vue +1 -1
  302. package/edit/logging.banzaicloud.io.output/providers/opensearch.vue +213 -0
  303. package/edit/logging.banzaicloud.io.output/providers/redis.vue +142 -0
  304. package/edit/logging.banzaicloud.io.output/providers/s3.vue +1 -1
  305. package/edit/logging.banzaicloud.io.output/providers/splunkHec.vue +1 -1
  306. package/edit/logging.banzaicloud.io.output/providers/syslog.vue +1 -1
  307. package/edit/management.cattle.io.fleetworkspace.vue +1 -1
  308. package/edit/management.cattle.io.podsecurityadmissionconfigurationtemplate.vue +107 -0
  309. package/edit/management.cattle.io.project.vue +11 -4
  310. package/edit/management.cattle.io.projectroletemplatebinding.vue +5 -5
  311. package/edit/management.cattle.io.setting.vue +6 -3
  312. package/edit/management.cattle.io.user.vue +11 -5
  313. package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +33 -17
  314. package/edit/monitoring.coreos.com.alertmanagerconfig/tls.vue +1 -1
  315. package/edit/monitoring.coreos.com.alertmanagerconfig/types/email.vue +6 -6
  316. package/edit/monitoring.coreos.com.alertmanagerconfig/types/opsgenie.vue +5 -5
  317. package/edit/monitoring.coreos.com.alertmanagerconfig/types/pagerduty.vue +3 -3
  318. package/edit/monitoring.coreos.com.alertmanagerconfig/types/slack.vue +3 -3
  319. package/edit/monitoring.coreos.com.alertmanagerconfig/types/webhook.vue +4 -4
  320. package/edit/monitoring.coreos.com.prometheusrule/GroupRules.vue +14 -6
  321. package/edit/monitoring.coreos.com.receiver/auth.vue +2 -2
  322. package/edit/monitoring.coreos.com.receiver/index.vue +1 -1
  323. package/edit/monitoring.coreos.com.receiver/types/email.vue +1 -1
  324. package/edit/monitoring.coreos.com.receiver/types/opsgenie.vue +1 -1
  325. package/edit/monitoring.coreos.com.receiver/types/pagerduty.vue +1 -1
  326. package/edit/monitoring.coreos.com.receiver/types/webhook.vue +1 -1
  327. package/edit/monitoring.coreos.com.route.vue +1 -1
  328. package/edit/namespace.vue +18 -4
  329. package/edit/networking.istio.io.destinationrule/LoadBalancer.vue +1 -1
  330. package/edit/networking.k8s.io.ingress/Certificate.vue +1 -0
  331. package/edit/networking.k8s.io.ingress/Certificates.vue +3 -3
  332. package/edit/networking.k8s.io.ingress/DefaultBackend.vue +2 -2
  333. package/edit/networking.k8s.io.ingress/IngressClass.vue +9 -7
  334. package/edit/networking.k8s.io.ingress/Rule.vue +1 -1
  335. package/edit/networking.k8s.io.ingress/RulePath.vue +17 -11
  336. package/edit/networking.k8s.io.ingress/Rules.vue +7 -7
  337. package/edit/networking.k8s.io.ingress/index.vue +8 -6
  338. package/edit/networking.k8s.io.networkpolicy/PolicyRule.vue +1 -1
  339. package/edit/networking.k8s.io.networkpolicy/PolicyRuleTarget.vue +3 -3
  340. package/edit/networking.k8s.io.networkpolicy/PolicyRules.vue +1 -1
  341. package/edit/networking.k8s.io.networkpolicy/index.vue +5 -5
  342. package/edit/persistentvolume/index.vue +30 -27
  343. package/edit/persistentvolume/plugins/awsElasticBlockStore.vue +1 -1
  344. package/edit/persistentvolume/plugins/azureDisk.vue +1 -1
  345. package/edit/persistentvolume/plugins/azureFile.vue +1 -1
  346. package/edit/persistentvolume/plugins/cephfs.vue +31 -31
  347. package/edit/persistentvolume/plugins/cinder.vue +1 -1
  348. package/edit/persistentvolume/plugins/csi.vue +104 -64
  349. package/edit/persistentvolume/plugins/fc.vue +21 -21
  350. package/edit/persistentvolume/plugins/flexVolume.vue +2 -2
  351. package/edit/persistentvolume/plugins/flocker.vue +1 -1
  352. package/edit/persistentvolume/plugins/gcePersistentDisk.vue +1 -1
  353. package/edit/persistentvolume/plugins/glusterfs.vue +1 -1
  354. package/edit/persistentvolume/plugins/hostPath.vue +1 -1
  355. package/edit/persistentvolume/plugins/iscsi.vue +47 -47
  356. package/edit/persistentvolume/plugins/local.vue +1 -1
  357. package/edit/persistentvolume/plugins/longhorn.vue +2 -2
  358. package/edit/persistentvolume/plugins/nfs.vue +1 -1
  359. package/edit/persistentvolume/plugins/photonPersistentDisk.vue +1 -1
  360. package/edit/persistentvolume/plugins/portworxVolume.vue +1 -1
  361. package/edit/persistentvolume/plugins/quobyte.vue +1 -1
  362. package/edit/persistentvolume/plugins/rbd.vue +41 -41
  363. package/edit/persistentvolume/plugins/scaleIO.vue +1 -1
  364. package/edit/persistentvolume/plugins/storageos.vue +1 -1
  365. package/edit/persistentvolume/plugins/vsphereVolume.vue +1 -1
  366. package/edit/persistentvolumeclaim.vue +78 -75
  367. package/edit/provisioning.cattle.io.cluster/DrainOptions.vue +1 -1
  368. package/edit/provisioning.cattle.io.cluster/MachinePool.vue +12 -8
  369. package/edit/provisioning.cattle.io.cluster/RegistryConfigs.vue +10 -1
  370. package/edit/provisioning.cattle.io.cluster/RegistryMirrors.vue +87 -27
  371. package/edit/provisioning.cattle.io.cluster/S3Config.vue +1 -1
  372. package/edit/provisioning.cattle.io.cluster/SelectCredential.vue +3 -6
  373. package/edit/provisioning.cattle.io.cluster/__tests__/CustomCommand.tests.ts +1 -1
  374. package/edit/provisioning.cattle.io.cluster/__tests__/rke2.test.ts +93 -0
  375. package/edit/provisioning.cattle.io.cluster/import.vue +3 -3
  376. package/edit/provisioning.cattle.io.cluster/index.vue +31 -8
  377. package/edit/provisioning.cattle.io.cluster/rke2.vue +458 -164
  378. package/edit/resources.cattle.io.backup.vue +2 -2
  379. package/edit/secret/generic.vue +1 -0
  380. package/edit/secret/index.vue +3 -7
  381. package/edit/service.vue +3 -1
  382. package/edit/storage.k8s.io.storageclass/index.vue +101 -17
  383. package/edit/storage.k8s.io.storageclass/provisioners/driver.harvesterhci.io.vue +114 -0
  384. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/no-provisioner.vue +1 -1
  385. package/edit/token.vue +1 -1
  386. package/edit/ui.cattle.io.navlink.vue +8 -8
  387. package/edit/workload/Job.vue +3 -3
  388. package/edit/workload/Upgrading.vue +1 -1
  389. package/edit/workload/VolumeClaimTemplate.vue +1 -1
  390. package/edit/workload/__tests__/index.test.ts +98 -0
  391. package/edit/workload/index.vue +61 -11
  392. package/edit/workload/mixins/workload.js +128 -91
  393. package/edit/workload/storage/ContainerMountPaths.vue +1 -11
  394. package/edit/workload/storage/Mount.vue +1 -1
  395. package/edit/workload/storage/azureDisk.vue +1 -1
  396. package/edit/workload/storage/azureFile.vue +1 -1
  397. package/edit/workload/storage/csi/index.vue +1 -1
  398. package/edit/workload/storage/emptyDir.vue +88 -0
  399. package/edit/workload/storage/ephemeralVolume/index.vue +2 -2
  400. package/edit/workload/storage/gcePersistentDisk.vue +1 -1
  401. package/edit/workload/storage/hostPath.vue +1 -1
  402. package/edit/workload/storage/index.vue +8 -0
  403. package/edit/workload/storage/nfs.vue +1 -1
  404. package/edit/workload/storage/persistentVolumeClaim/index.vue +2 -2
  405. package/edit/workload/storage/persistentVolumeClaim/persistentvolumeclaim.vue +1 -1
  406. package/edit/workload/storage/secret.vue +1 -1
  407. package/edit/workload/storage/vsphereVolume.vue +1 -1
  408. package/layouts/default.vue +132 -58
  409. package/list/__tests__/workload.test.ts +53 -0
  410. package/list/catalog.cattle.io.app.vue +1 -0
  411. package/list/cis.cattle.io.clusterscan.vue +1 -0
  412. package/list/fleet.cattle.io.bundle.vue +5 -6
  413. package/list/fleet.cattle.io.cluster.vue +6 -3
  414. package/list/fleet.cattle.io.clusterregistrationtoken.vue +5 -6
  415. package/list/fleet.cattle.io.gitrepo.vue +5 -10
  416. package/list/group.principal.vue +8 -8
  417. package/list/helm.cattle.io.projecthelmchart.vue +2 -6
  418. package/list/logging.banzaicloud.io.clusterflow.vue +4 -1
  419. package/list/logging.banzaicloud.io.flow.vue +6 -5
  420. package/list/management.cattle.io.cluster.vue +1 -0
  421. package/list/management.cattle.io.feature.vue +4 -5
  422. package/list/management.cattle.io.podsecurityadmissionconfigurationtemplate.vue +47 -0
  423. package/list/management.cattle.io.setting.vue +2 -2
  424. package/list/management.cattle.io.user.vue +4 -10
  425. package/list/monitoring.coreos.com.alertmanagerconfig.vue +2 -7
  426. package/list/node.vue +9 -6
  427. package/list/persistentvolume.vue +3 -3
  428. package/list/persistentvolumeclaim.vue +3 -4
  429. package/list/provisioning.cattle.io.cluster.vue +21 -22
  430. package/list/service.vue +6 -14
  431. package/list/workload.vue +43 -38
  432. package/machine-config/amazonec2.vue +1 -1
  433. package/machine-config/azure.vue +429 -60
  434. package/machine-config/pnap.vue +288 -0
  435. package/mixins/__tests__/create-edit-view.test.ts +1 -1
  436. package/mixins/auth-config.js +1 -3
  437. package/mixins/browser-tab-visibility.js +8 -14
  438. package/mixins/chart.js +15 -15
  439. package/mixins/create-edit-view/impl.js +4 -0
  440. package/mixins/create-edit-view/index.js +9 -7
  441. package/mixins/form-validation.js +1 -1
  442. package/mixins/labeled-form-element.ts +6 -6
  443. package/mixins/resource-fetch-namespaced.js +98 -0
  444. package/mixins/resource-fetch.js +82 -48
  445. package/mixins/resource-manager.js +2 -24
  446. package/models/apps.controllerrevision.js +7 -0
  447. package/models/apps.daemonset.js +18 -0
  448. package/models/apps.deployment.js +44 -0
  449. package/models/apps.replicaset.js +7 -0
  450. package/models/apps.statefulset.js +18 -0
  451. package/models/autoscaling.horizontalpodautoscaler.js +5 -5
  452. package/models/batch.cronjob.js +15 -15
  453. package/models/batch.job.js +15 -0
  454. package/models/catalog.cattle.io.app.js +6 -6
  455. package/models/catalog.cattle.io.clusterrepo.js +7 -7
  456. package/models/catalog.cattle.io.operation.js +5 -5
  457. package/models/chart.js +4 -4
  458. package/models/cis.cattle.io.clusterscan.js +10 -10
  459. package/models/cluster/node.js +46 -38
  460. package/models/cluster.x-k8s.io.machine.js +39 -17
  461. package/models/cluster.x-k8s.io.machinedeployment.js +12 -2
  462. package/models/constraints.gatekeeper.sh.constraint.js +1 -1
  463. package/models/etcdbackup.js +4 -4
  464. package/models/event.js +7 -0
  465. package/models/fleet.cattle.io.cluster.js +15 -15
  466. package/models/fleet.cattle.io.clustergroup.js +1 -1
  467. package/models/fleet.cattle.io.gitrepo.js +15 -15
  468. package/models/group.principal.js +1 -1
  469. package/models/logging.banzaicloud.io.clusterflow.js +2 -2
  470. package/models/logging.banzaicloud.io.flow.js +6 -2
  471. package/models/logging.banzaicloud.io.output.js +15 -3
  472. package/models/management.cattle.io.authconfig.js +4 -4
  473. package/models/management.cattle.io.cluster.js +10 -10
  474. package/models/management.cattle.io.clusterroletemplatebinding.js +9 -9
  475. package/models/management.cattle.io.globalrole.js +26 -5
  476. package/models/management.cattle.io.node.js +46 -11
  477. package/models/management.cattle.io.nodepool.js +3 -3
  478. package/models/management.cattle.io.nodetemplate.js +21 -21
  479. package/models/management.cattle.io.podsecurityadmissionconfigurationtemplate.ts +4 -0
  480. package/models/management.cattle.io.project.js +32 -13
  481. package/models/management.cattle.io.projectroletemplatebinding.js +6 -6
  482. package/models/management.cattle.io.roletemplate.js +54 -31
  483. package/models/management.cattle.io.setting.js +1 -1
  484. package/models/management.cattle.io.user.js +41 -5
  485. package/models/monitoring.coreos.com.alertmanagerconfig.js +4 -4
  486. package/models/monitoring.coreos.com.receiver.js +7 -7
  487. package/models/monitoring.coreos.com.route.js +2 -2
  488. package/models/namespace.js +55 -5
  489. package/models/persistentvolume.js +14 -2
  490. package/models/persistentvolumeclaim.js +4 -4
  491. package/models/pod.js +25 -10
  492. package/models/projectroletemplatebinding.js +7 -0
  493. package/models/provisioning.cattle.io.cluster.js +89 -38
  494. package/models/rbac.authorization.k8s.io.role.js +4 -4
  495. package/models/rke-machine.cattle.io.pnapmachinetemplate.js +15 -0
  496. package/models/rke.cattle.io.etcdsnapshot.js +4 -4
  497. package/models/service.js +29 -28
  498. package/models/storage.k8s.io.storageclass.js +41 -26
  499. package/models/workload.js +66 -35
  500. package/nuxt.config.js +59 -34
  501. package/package.json +7 -7
  502. package/pages/about.vue +15 -3
  503. package/pages/account/index.vue +1 -1
  504. package/pages/auth/login.vue +37 -7
  505. package/pages/auth/setup.vue +11 -11
  506. package/pages/c/_cluster/_product/_resource/_id.vue +2 -2
  507. package/pages/c/_cluster/apps/charts/chart.vue +4 -4
  508. package/pages/c/_cluster/apps/charts/index.vue +21 -20
  509. package/pages/c/_cluster/apps/charts/install.vue +73 -36
  510. package/pages/c/_cluster/auth/config/_id.vue +8 -2
  511. package/pages/c/_cluster/auth/config/index.vue +8 -6
  512. package/pages/c/_cluster/auth/group.principal/assign-edit.vue +1 -1
  513. package/pages/c/_cluster/auth/roles/_resource/_id.vue +2 -2
  514. package/pages/c/_cluster/auth/roles/index.vue +5 -7
  515. package/pages/c/_cluster/explorer/EventsTable.vue +8 -8
  516. package/pages/c/_cluster/explorer/index.vue +26 -20
  517. package/pages/c/_cluster/explorer/tools/index.vue +4 -4
  518. package/pages/c/_cluster/fleet/GitRepoGraphConfig.js +2 -2
  519. package/pages/c/_cluster/fleet/index.vue +10 -10
  520. package/pages/c/_cluster/gatekeeper/index.vue +1 -1
  521. package/pages/c/_cluster/legacy/index.vue +1 -1
  522. package/pages/c/_cluster/longhorn/index.vue +2 -2
  523. package/pages/c/_cluster/mcapps/index.vue +1 -1
  524. package/pages/c/_cluster/monitoring/alertmanagerconfig/_alertmanagerconfigid/receiver.vue +15 -4
  525. package/pages/c/_cluster/monitoring/index.vue +1 -1
  526. package/pages/c/_cluster/navlinks/_group.vue +1 -1
  527. package/pages/c/_cluster/neuvector/index.vue +2 -2
  528. package/pages/c/_cluster/settings/banners.vue +30 -30
  529. package/pages/c/_cluster/settings/brand.vue +9 -9
  530. package/pages/c/_cluster/settings/links.vue +6 -6
  531. package/pages/c/_cluster/settings/performance.vue +48 -2
  532. package/pages/c/_cluster/uiplugins/DeveloperInstallDialog.vue +1 -1
  533. package/pages/c/_cluster/uiplugins/InstallDialog.vue +1 -1
  534. package/pages/c/_cluster/uiplugins/PluginInfoPanel.vue +59 -9
  535. package/pages/c/_cluster/uiplugins/index.vue +30 -4
  536. package/pages/diagnostic.vue +5 -4
  537. package/pages/home.vue +105 -30
  538. package/pages/prefs.vue +23 -12
  539. package/pages/rio/mesh.vue +5 -5
  540. package/pages/support/index.vue +7 -7
  541. package/pkg/dynamic-importer.lib.js +8 -0
  542. package/pkg/vue.config.js +14 -1
  543. package/plugins/dashboard-store/__tests__/mutations.spec.js +406 -0
  544. package/plugins/dashboard-store/actions.js +32 -25
  545. package/plugins/dashboard-store/getters.js +50 -33
  546. package/plugins/dashboard-store/mutations.js +134 -28
  547. package/plugins/dashboard-store/normalize.js +1 -1
  548. package/plugins/dashboard-store/resource-class.js +121 -141
  549. package/plugins/steve/actions.js +30 -0
  550. package/plugins/steve/caches/resourceCache.js +60 -0
  551. package/plugins/steve/getters.js +44 -1
  552. package/plugins/steve/mutations.js +97 -36
  553. package/plugins/steve/resourceWatcher.js +277 -0
  554. package/plugins/steve/schema.utils.js +25 -0
  555. package/plugins/steve/subscribe.js +292 -119
  556. package/plugins/steve/worker/index.js +17 -0
  557. package/plugins/steve/worker/web-worker.advanced.js +302 -0
  558. package/plugins/steve/{web-worker.steve-sub-worker.js → worker/web-worker.basic.js} +6 -47
  559. package/promptRemove/management.cattle.io.project.vue +1 -1
  560. package/promptRemove/mixin/roleDeletionCheck.js +7 -7
  561. package/promptRemove/pod.vue +2 -2
  562. package/rancher-components/components/BadgeState/BadgeState.spec.ts +12 -0
  563. package/rancher-components/components/BadgeState/BadgeState.vue +111 -0
  564. package/rancher-components/components/BadgeState/index.ts +1 -0
  565. package/rancher-components/components/Banner/Banner.test.ts +57 -0
  566. package/rancher-components/components/Banner/Banner.vue +242 -0
  567. package/rancher-components/components/Banner/index.ts +1 -0
  568. package/rancher-components/components/Card/Card.test.ts +37 -0
  569. package/rancher-components/components/Card/Card.vue +166 -0
  570. package/rancher-components/components/Card/index.ts +1 -0
  571. package/rancher-components/components/Form/Checkbox/Checkbox.test.ts +68 -0
  572. package/rancher-components/components/Form/Checkbox/Checkbox.vue +418 -0
  573. package/rancher-components/components/Form/Checkbox/index.ts +1 -0
  574. package/rancher-components/components/Form/LabeledInput/LabeledInput.test.ts +23 -0
  575. package/rancher-components/components/Form/LabeledInput/LabeledInput.vue +355 -0
  576. package/rancher-components/components/Form/LabeledInput/index.ts +1 -0
  577. package/rancher-components/components/Form/Radio/RadioButton.vue +276 -0
  578. package/rancher-components/components/Form/Radio/RadioGroup.vue +253 -0
  579. package/rancher-components/components/Form/Radio/index.ts +2 -0
  580. package/rancher-components/components/Form/TextArea/TextAreaAutoGrow.vue +169 -0
  581. package/rancher-components/components/Form/TextArea/index.ts +1 -0
  582. package/rancher-components/components/Form/ToggleSwitch/ToggleSwitch.test.ts +94 -0
  583. package/rancher-components/components/Form/ToggleSwitch/ToggleSwitch.vue +149 -0
  584. package/rancher-components/components/Form/ToggleSwitch/index.ts +1 -0
  585. package/rancher-components/components/Form/index.ts +5 -0
  586. package/rancher-components/components/LabeledTooltip/LabeledTooltip.vue +151 -0
  587. package/rancher-components/components/LabeledTooltip/index.ts +1 -0
  588. package/rancher-components/components/StringList/StringList.test.ts +483 -0
  589. package/rancher-components/components/StringList/StringList.vue +611 -0
  590. package/rancher-components/components/StringList/index.ts +1 -0
  591. package/scripts/publish-shell.sh +38 -5
  592. package/scripts/record-deps.js +37 -0
  593. package/scripts/test-plugins-build.sh +19 -7
  594. package/scripts/typegen.sh +84 -0
  595. package/static/loading-indicator.html +1 -1
  596. package/store/action-menu.js +3 -3
  597. package/store/auth.js +4 -4
  598. package/store/aws.js +4 -4
  599. package/store/catalog.js +22 -22
  600. package/store/index.js +58 -7
  601. package/store/plugins.js +2 -19
  602. package/store/pnap.js +128 -0
  603. package/store/prefs.js +13 -3
  604. package/store/type-map.js +101 -44
  605. package/store/uiplugins.ts +2 -2
  606. package/store/wm.js +10 -0
  607. package/types/pod-security-admission.ts +36 -0
  608. package/types/shell/index.d.ts +3159 -0
  609. package/types/vue-shim.d +20 -0
  610. package/utils/__tests__/object.test.ts +17 -1
  611. package/utils/__tests__/pod-security-admission.test.ts +61 -0
  612. package/utils/alertmanagerconfig.js +6 -6
  613. package/utils/async.ts +36 -0
  614. package/utils/color.js +45 -0
  615. package/utils/crypto/browserHashUtils.js +18 -0
  616. package/utils/dynamic-importer.js +8 -0
  617. package/utils/gc/gc-types.ts +1 -1
  618. package/utils/install-redirect.js +1 -1
  619. package/utils/object.js +26 -2
  620. package/utils/parse-externalid.js +5 -5
  621. package/utils/pod-security-admission.ts +39 -0
  622. package/utils/socket.js +61 -24
  623. package/utils/string.js +2 -0
  624. package/utils/svg-filter.js +301 -0
  625. package/utils/time.js +55 -0
  626. package/utils/validators/cidr.js +4 -0
  627. package/utils/validators/formRules/__tests__/index.test.ts +26 -6
  628. package/utils/validators/formRules/index.ts +14 -0
  629. package/config/product/harvester-manager.js +0 -162
  630. package/creators/pkg/nuxt.config.js +0 -6
  631. package/edit/harvesterhci.io.management.cluster.vue +0 -153
  632. package/list/harvesterhci.io.management.cluster.vue +0 -241
  633. package/machine-config/harvester.vue +0 -693
  634. package/models/harvesterhci.io.management.cluster.js +0 -228
  635. package/pages/c/_cluster/harvesterManager/index.vue +0 -24
@@ -25,6 +25,7 @@ import {
25
25
  validateLength,
26
26
  } from '@shell/utils/validators';
27
27
  import formRulesGenerator from '@shell/utils/validators/formRules/index';
28
+ import { waitFor } from '@shell/utils/async';
28
29
  import jsyaml from 'js-yaml';
29
30
  import compact from 'lodash/compact';
30
31
  import forIn from 'lodash/forIn';
@@ -147,7 +148,7 @@ export const STATES_ENUM = {
147
148
  STOPPING: 'stopping',
148
149
  SUCCEEDED: 'succeeded',
149
150
  SUCCESS: 'success',
150
- SUCCESSFUL: 'successful',
151
+ SUCCESSFUL: 'successful',
151
152
  SUPERSEDED: 'superseded',
152
153
  SUSPENDED: 'suspended',
153
154
  UNAVAILABLE: 'unavailable',
@@ -164,274 +165,274 @@ export const STATES_ENUM = {
164
165
  };
165
166
 
166
167
  export const STATES = {
167
- [STATES_ENUM.IN_USE]: {
168
+ [STATES_ENUM.IN_USE]: {
168
169
  color: 'success', icon: 'dot-open', label: 'In Use', compoundIcon: 'checkmark'
169
170
  },
170
- [STATES_ENUM.IN_PROGRESS]: {
171
+ [STATES_ENUM.IN_PROGRESS]: {
171
172
  color: 'info', icon: 'tag', label: 'In Progress', compoundIcon: 'info'
172
173
  },
173
174
  [STATES_ENUM.PENDING_ROLLBACK]: {
174
175
  color: 'info', icon: 'dot-half', label: 'Pending Rollback', compoundIcon: 'info'
175
176
  },
176
- [STATES_ENUM.PENDING_UPGRADE]: {
177
+ [STATES_ENUM.PENDING_UPGRADE]: {
177
178
  color: 'info', icon: 'dot-half', label: 'Pending Update', compoundIcon: 'info'
178
179
  },
179
- [STATES_ENUM.ABORTED]: {
180
+ [STATES_ENUM.ABORTED]: {
180
181
  color: 'warning', icon: 'error', label: 'Aborted', compoundIcon: 'warning'
181
182
  },
182
- [STATES_ENUM.ACTIVATING]: {
183
+ [STATES_ENUM.ACTIVATING]: {
183
184
  color: 'info', icon: 'tag', label: 'Activating', compoundIcon: 'info'
184
185
  },
185
- [STATES_ENUM.ACTIVE]: {
186
+ [STATES_ENUM.ACTIVE]: {
186
187
  color: 'success', icon: 'dot-open', label: 'Active', compoundIcon: 'checkmark'
187
188
  },
188
- [STATES_ENUM.AVAILABLE]: {
189
+ [STATES_ENUM.AVAILABLE]: {
189
190
  color: 'success', icon: 'dot-open', label: 'Available', compoundIcon: 'checkmark'
190
191
  },
191
- [STATES_ENUM.BACKED_UP]: {
192
+ [STATES_ENUM.BACKED_UP]: {
192
193
  color: 'success', icon: 'backup', label: 'Backed Up', compoundIcon: 'checkmark'
193
194
  },
194
- [STATES_ENUM.BOUND]: {
195
+ [STATES_ENUM.BOUND]: {
195
196
  color: 'success', icon: 'dot', label: 'Bound', compoundIcon: 'checkmark'
196
197
  },
197
- [STATES_ENUM.BUILDING]: {
198
+ [STATES_ENUM.BUILDING]: {
198
199
  color: 'success', icon: 'dot-open', label: 'Building', compoundIcon: 'checkmark'
199
200
  },
200
- [STATES_ENUM.COMPLETED]: {
201
+ [STATES_ENUM.COMPLETED]: {
201
202
  color: 'success', icon: 'dot', label: 'Completed', compoundIcon: 'checkmark'
202
203
  },
203
- [STATES_ENUM.CORDONED]: {
204
+ [STATES_ENUM.CORDONED]: {
204
205
  color: 'info', icon: 'tag', label: 'Cordoned', compoundIcon: 'info'
205
206
  },
206
- [STATES_ENUM.COUNT]: {
207
+ [STATES_ENUM.COUNT]: {
207
208
  color: 'success', icon: 'dot-open', label: 'Count', compoundIcon: 'checkmark'
208
209
  },
209
- [STATES_ENUM.CREATED]: {
210
+ [STATES_ENUM.CREATED]: {
210
211
  color: 'info', icon: 'tag', label: 'Created', compoundIcon: 'info'
211
212
  },
212
- [STATES_ENUM.CREATING]: {
213
+ [STATES_ENUM.CREATING]: {
213
214
  color: 'info', icon: 'tag', label: 'Creating', compoundIcon: 'info'
214
215
  },
215
- [STATES_ENUM.DEACTIVATING]: {
216
+ [STATES_ENUM.DEACTIVATING]: {
216
217
  color: 'info', icon: 'adjust', label: 'Deactivating', compoundIcon: 'info'
217
218
  },
218
- [STATES_ENUM.DEGRADED]: {
219
+ [STATES_ENUM.DEGRADED]: {
219
220
  color: 'warning', icon: 'error', label: 'Degraded', compoundIcon: 'warning'
220
221
  },
221
- [STATES_ENUM.DENIED]: {
222
+ [STATES_ENUM.DENIED]: {
222
223
  color: 'error', icon: 'adjust', label: 'Denied', compoundIcon: 'error'
223
224
  },
224
- [STATES_ENUM.DEPLOYED]: {
225
+ [STATES_ENUM.DEPLOYED]: {
225
226
  color: 'success', icon: 'dot-open', label: 'Deployed', compoundIcon: 'checkmark'
226
227
  },
227
- [STATES_ENUM.DISABLED]: {
228
+ [STATES_ENUM.DISABLED]: {
228
229
  color: 'warning', icon: 'error', label: 'Disabled', compoundIcon: 'warning'
229
230
  },
230
- [STATES_ENUM.DISCONNECTED]: {
231
+ [STATES_ENUM.DISCONNECTED]: {
231
232
  color: 'warning', icon: 'error', label: 'Disconnected', compoundIcon: 'warning'
232
233
  },
233
- [STATES_ENUM.DRAINED]: {
234
+ [STATES_ENUM.DRAINED]: {
234
235
  color: 'info', icon: 'tag', label: 'Drained', compoundIcon: 'info'
235
236
  },
236
- [STATES_ENUM.DRAINING]: {
237
+ [STATES_ENUM.DRAINING]: {
237
238
  color: 'warning', icon: 'tag', label: 'Draining', compoundIcon: 'warning'
238
239
  },
239
- [STATES_ENUM.ERR_APPLIED]: {
240
+ [STATES_ENUM.ERR_APPLIED]: {
240
241
  color: 'error', icon: 'error', label: 'Error Applied', compoundIcon: 'error'
241
242
  },
242
- [STATES_ENUM.ERROR]: {
243
+ [STATES_ENUM.ERROR]: {
243
244
  color: 'error', icon: 'error', label: 'Error', compoundIcon: 'error'
244
245
  },
245
- [STATES_ENUM.ERRORING]: {
246
+ [STATES_ENUM.ERRORING]: {
246
247
  color: 'error', icon: 'error', label: 'Erroring', compoundIcon: 'error'
247
248
  },
248
- [STATES_ENUM.ERRORS]: {
249
+ [STATES_ENUM.ERRORS]: {
249
250
  color: 'error', icon: 'error', label: 'Errors', compoundIcon: 'error'
250
251
  },
251
- [STATES_ENUM.EXPIRED]: {
252
+ [STATES_ENUM.EXPIRED]: {
252
253
  color: 'warning', icon: 'error', label: 'Expired', compoundIcon: 'warning'
253
254
  },
254
- [STATES_ENUM.FAIL]: {
255
+ [STATES_ENUM.FAIL]: {
255
256
  color: 'error', icon: 'error', label: 'Fail', compoundIcon: 'error'
256
257
  },
257
- [STATES_ENUM.FAILED]: {
258
+ [STATES_ENUM.FAILED]: {
258
259
  color: 'error', icon: 'error', label: 'Failed', compoundIcon: 'error'
259
260
  },
260
- [STATES_ENUM.HEALTHY]: {
261
+ [STATES_ENUM.HEALTHY]: {
261
262
  color: 'success', icon: 'dot-open', label: 'Healthy', compoundIcon: 'checkmark'
262
263
  },
263
- [STATES_ENUM.INACTIVE]: {
264
+ [STATES_ENUM.INACTIVE]: {
264
265
  color: 'error', icon: 'dot', label: 'Inactive', compoundIcon: 'error'
265
266
  },
266
- [STATES_ENUM.INITIALIZING]: {
267
+ [STATES_ENUM.INITIALIZING]: {
267
268
  color: 'warning', icon: 'error', label: 'Initializing', compoundIcon: 'warning'
268
269
  },
269
- [STATES_ENUM.INPROGRESS]: {
270
+ [STATES_ENUM.INPROGRESS]: {
270
271
  color: 'info', icon: 'spinner', label: 'In Progress', compoundIcon: 'info'
271
272
  },
272
- [STATES_ENUM.INFO]: {
273
+ [STATES_ENUM.INFO]: {
273
274
  color: 'info', icon: 'info', label: 'Info', compoundIcon: 'info'
274
275
  },
275
- [STATES_ENUM.LOCKED]: {
276
+ [STATES_ENUM.LOCKED]: {
276
277
  color: 'warning', icon: 'adjust', label: 'Locked', compoundIcon: 'warning'
277
278
  },
278
- [STATES_ENUM.MIGRATING]: {
279
+ [STATES_ENUM.MIGRATING]: {
279
280
  color: 'info', icon: 'info', label: 'Migrated', compoundIcon: 'info'
280
281
  },
281
- [STATES_ENUM.MISSING]: {
282
+ [STATES_ENUM.MISSING]: {
282
283
  color: 'warning', icon: 'adjust', label: 'Missing', compoundIcon: 'warning'
283
284
  },
284
- [STATES_ENUM.MODIFIED]: {
285
+ [STATES_ENUM.MODIFIED]: {
285
286
  color: 'warning', icon: 'edit', label: 'Modified', compoundIcon: 'warning'
286
287
  },
287
- [STATES_ENUM.NOT_APPLICABLE]: {
288
+ [STATES_ENUM.NOT_APPLICABLE]: {
288
289
  color: 'warning', icon: 'tag', label: 'Not Applicable', compoundIcon: 'warning'
289
290
  },
290
- [STATES_ENUM.NOT_APLLIED]: {
291
+ [STATES_ENUM.NOT_APLLIED]: {
291
292
  color: 'warning', icon: 'tag', label: 'Not Applied', compoundIcon: 'warning'
292
293
  },
293
- [STATES_ENUM.NOT_READY]: {
294
+ [STATES_ENUM.NOT_READY]: {
294
295
  color: 'warning', icon: 'tag', label: 'Not Ready', compoundIcon: 'warning'
295
296
  },
296
- [STATES_ENUM.OFF]: {
297
+ [STATES_ENUM.OFF]: {
297
298
  color: 'darker', icon: 'error', label: 'Off'
298
299
  },
299
- [STATES_ENUM.ON_GOING]: {
300
+ [STATES_ENUM.ON_GOING]: {
300
301
  color: 'info', icon: 'info', label: 'Info', compoundIcon: 'info'
301
302
  },
302
- [STATES_ENUM.ORPHANED]: {
303
+ [STATES_ENUM.ORPHANED]: {
303
304
  color: 'warning', icon: 'tag', label: 'Orphaned', compoundIcon: 'warning'
304
305
  },
305
- [STATES_ENUM.OTHER]: {
306
+ [STATES_ENUM.OTHER]: {
306
307
  color: 'info', icon: 'info', label: 'Other', compoundIcon: 'info'
307
308
  },
308
- [STATES_ENUM.OUT_OF_SYNC]: {
309
+ [STATES_ENUM.OUT_OF_SYNC]: {
309
310
  color: 'warning', icon: 'tag', label: 'Out Of Sync', compoundIcon: 'warning'
310
311
  },
311
- [STATES_ENUM.PASS]: {
312
+ [STATES_ENUM.PASS]: {
312
313
  color: 'success', icon: 'dot-dotfill', label: 'Pass', compoundIcon: 'checkmark'
313
314
  },
314
- [STATES_ENUM.PASSED]: {
315
+ [STATES_ENUM.PASSED]: {
315
316
  color: 'success', icon: 'dot-dotfill', label: 'Passed', compoundIcon: 'checkmark'
316
317
  },
317
- [STATES_ENUM.PAUSED]: {
318
+ [STATES_ENUM.PAUSED]: {
318
319
  color: 'info', icon: 'info', label: 'Paused', compoundIcon: 'info'
319
320
  },
320
- [STATES_ENUM.PENDING]: {
321
+ [STATES_ENUM.PENDING]: {
321
322
  color: 'info', icon: 'tag', label: 'Pending', compoundIcon: 'info'
322
323
  },
323
- [STATES_ENUM.PROVISIONING]: {
324
+ [STATES_ENUM.PROVISIONING]: {
324
325
  color: 'info', icon: 'dot', label: 'Provisioning', compoundIcon: 'info'
325
326
  },
326
- [STATES_ENUM.PROVISIONED]: {
327
+ [STATES_ENUM.PROVISIONED]: {
327
328
  color: 'success', icon: 'dot', label: 'Provisioned', compoundIcon: 'checkmark'
328
329
  },
329
- [STATES_ENUM.PURGED]: {
330
+ [STATES_ENUM.PURGED]: {
330
331
  color: 'error', icon: 'purged', label: 'Purged', compoundIcon: 'error'
331
332
  },
332
- [STATES_ENUM.PURGING]: {
333
+ [STATES_ENUM.PURGING]: {
333
334
  color: 'info', icon: 'purged', label: 'Purging', compoundIcon: 'info'
334
335
  },
335
- [STATES_ENUM.READY]: {
336
+ [STATES_ENUM.READY]: {
336
337
  color: 'success', icon: 'dot-open', label: 'Ready', compoundIcon: 'checkmark'
337
338
  },
338
- [STATES_ENUM.RECONNECTING]: {
339
+ [STATES_ENUM.RECONNECTING]: {
339
340
  color: 'error', icon: 'error', label: 'Reconnecting', compoundIcon: 'error'
340
341
  },
341
- [STATES_ENUM.REGISTERING]: {
342
+ [STATES_ENUM.REGISTERING]: {
342
343
  color: 'info', icon: 'tag', label: 'Registering', compoundIcon: 'info'
343
344
  },
344
- [STATES_ENUM.REINITIALIZING]: {
345
+ [STATES_ENUM.REINITIALIZING]: {
345
346
  color: 'warning', icon: 'error', label: 'Reinitializing', compoundIcon: 'warning'
346
347
  },
347
- [STATES_ENUM.RELEASED]: {
348
+ [STATES_ENUM.RELEASED]: {
348
349
  color: 'warning', icon: 'error', label: 'Released', compoundIcon: 'warning'
349
350
  },
350
- [STATES_ENUM.REMOVED]: {
351
+ [STATES_ENUM.REMOVED]: {
351
352
  color: 'error', icon: 'trash', label: 'Removed', compoundIcon: 'error'
352
353
  },
353
- [STATES_ENUM.REMOVING]: {
354
+ [STATES_ENUM.REMOVING]: {
354
355
  color: 'info', icon: 'trash', label: 'Removing', compoundIcon: 'info'
355
356
  },
356
- [STATES_ENUM.REQUESTED]: {
357
+ [STATES_ENUM.REQUESTED]: {
357
358
  color: 'info', icon: 'tag', label: 'Requested', compoundIcon: 'info'
358
359
  },
359
- [STATES_ENUM.RESTARTING]: {
360
+ [STATES_ENUM.RESTARTING]: {
360
361
  color: 'info', icon: 'adjust', label: 'Restarting', compoundIcon: 'info'
361
362
  },
362
- [STATES_ENUM.RESTORING]: {
363
+ [STATES_ENUM.RESTORING]: {
363
364
  color: 'info', icon: 'medicalcross', label: 'Restoring', compoundIcon: 'info'
364
365
  },
365
- [STATES_ENUM.RESIZING]: {
366
+ [STATES_ENUM.RESIZING]: {
366
367
  color: 'warning', icon: 'dot', label: 'Resizing', compoundIcon: 'warning'
367
368
  },
368
- [STATES_ENUM.RUNNING]: {
369
+ [STATES_ENUM.RUNNING]: {
369
370
  color: 'success', icon: 'dot-open', label: 'Running', compoundIcon: 'checkmark'
370
371
  },
371
- [STATES_ENUM.SKIP]: {
372
+ [STATES_ENUM.SKIP]: {
372
373
  color: 'info', icon: 'dot-open', label: 'Skip', compoundIcon: 'info'
373
374
  },
374
- [STATES_ENUM.SKIPPED]: {
375
+ [STATES_ENUM.SKIPPED]: {
375
376
  color: 'info', icon: 'dot-open', label: 'Skipped', compoundIcon: 'info'
376
377
  },
377
- [STATES_ENUM.STARTING]: {
378
+ [STATES_ENUM.STARTING]: {
378
379
  color: 'info', icon: 'adjust', label: 'Starting', compoundIcon: 'info'
379
380
  },
380
- [STATES_ENUM.STOPPED]: {
381
+ [STATES_ENUM.STOPPED]: {
381
382
  color: 'error', icon: 'dot', label: 'Stopped', compoundIcon: 'error'
382
383
  },
383
- [STATES_ENUM.STOPPING]: {
384
+ [STATES_ENUM.STOPPING]: {
384
385
  color: 'info', icon: 'adjust', label: 'Stopping', compoundIcon: 'info'
385
386
  },
386
- [STATES_ENUM.SUCCEEDED]: {
387
+ [STATES_ENUM.SUCCEEDED]: {
387
388
  color: 'success', icon: 'dot-dotfill', label: 'Succeeded', compoundIcon: 'checkmark'
388
389
  },
389
- [STATES_ENUM.SUCCESS]: {
390
+ [STATES_ENUM.SUCCESS]: {
390
391
  color: 'success', icon: 'dot-open', label: 'Success', compoundIcon: 'checkmark'
391
392
  },
392
- [STATES_ENUM.SUCCESSFUL]: {
393
+ [STATES_ENUM.SUCCESSFUL]: {
393
394
  color: 'success', icon: 'dot-open', label: 'Successful'
394
395
  },
395
- [STATES_ENUM.SUPERSEDED]: {
396
+ [STATES_ENUM.SUPERSEDED]: {
396
397
  color: 'info', icon: 'dot-open', label: 'Superseded', compoundIcon: 'info'
397
398
  },
398
- [STATES_ENUM.SUSPENDED]: {
399
+ [STATES_ENUM.SUSPENDED]: {
399
400
  color: 'info', icon: 'pause', label: 'Suspended', compoundIcon: 'info'
400
401
  },
401
- [STATES_ENUM.UNAVAILABLE]: {
402
+ [STATES_ENUM.UNAVAILABLE]: {
402
403
  color: 'error', icon: 'error', label: 'Unavailable', compoundIcon: 'error'
403
404
  },
404
- [STATES_ENUM.UNHEALTHY]: {
405
+ [STATES_ENUM.UNHEALTHY]: {
405
406
  color: 'error', icon: 'error', label: 'Unhealthy', compoundIcon: 'error'
406
407
  },
407
- [STATES_ENUM.UNINSTALLED]: {
408
+ [STATES_ENUM.UNINSTALLED]: {
408
409
  color: 'info', icon: 'trash', label: 'Uninstalled', compoundIcon: 'info'
409
410
  },
410
- [STATES_ENUM.UNINSTALLING]: {
411
+ [STATES_ENUM.UNINSTALLING]: {
411
412
  color: 'info', icon: 'trash', label: 'Uninstalling', compoundIcon: 'info'
412
413
  },
413
- [STATES_ENUM.UNKNOWN]: {
414
+ [STATES_ENUM.UNKNOWN]: {
414
415
  color: 'warning', icon: 'x', label: 'Unknown', compoundIcon: 'warning'
415
416
  },
416
- [STATES_ENUM.UNTRIGGERED]: {
417
+ [STATES_ENUM.UNTRIGGERED]: {
417
418
  color: 'success', icon: 'tag', label: 'Untriggered', compoundIcon: 'checkmark'
418
419
  },
419
- [STATES_ENUM.UPDATING]: {
420
+ [STATES_ENUM.UPDATING]: {
420
421
  color: 'warning', icon: 'tag', label: 'Updating', compoundIcon: 'warning'
421
422
  },
422
- [STATES_ENUM.WAIT_APPLIED]: {
423
+ [STATES_ENUM.WAIT_APPLIED]: {
423
424
  color: 'info', icon: 'tag', label: 'Wait Applied', compoundIcon: 'info'
424
425
  },
425
- [STATES_ENUM.WAIT_CHECKIN]: {
426
+ [STATES_ENUM.WAIT_CHECKIN]: {
426
427
  color: 'warning', icon: 'tag', label: 'Wait Checkin', compoundIcon: 'warning'
427
428
  },
428
- [STATES_ENUM.WAITING]: {
429
+ [STATES_ENUM.WAITING]: {
429
430
  color: 'info', icon: 'tag', label: 'Waiting', compoundIcon: 'info'
430
431
  },
431
- [STATES_ENUM.WARNING]: {
432
+ [STATES_ENUM.WARNING]: {
432
433
  color: 'warning', icon: 'error', label: 'Warning', compoundIcon: 'warning'
433
434
  },
434
- [STATES_ENUM.DEPLOYING]: {
435
+ [STATES_ENUM.DEPLOYING]: {
435
436
  color: 'info', icon: 'info', label: 'Deploying', compoundIcon: 'info'
436
437
  },
437
438
  };
@@ -464,7 +465,7 @@ const SORT_ORDER = {
464
465
  info: 3,
465
466
  success: 4,
466
467
  ready: 5,
467
- notready: 6,
468
+ notready: 6,
468
469
  other: 7,
469
470
  };
470
471
 
@@ -752,41 +753,7 @@ export default class Resource {
752
753
  // ------------------------------------------------------------------
753
754
 
754
755
  waitForTestFn(fn, msg, timeoutMs, intervalMs) {
755
- console.log('Starting wait for', msg); // eslint-disable-line no-console
756
-
757
- if ( !timeoutMs ) {
758
- timeoutMs = DEFAULT_WAIT_TMIMEOUT;
759
- }
760
-
761
- if ( !intervalMs ) {
762
- intervalMs = DEFAULT_WAIT_INTERVAL;
763
- }
764
-
765
- return new Promise((resolve, reject) => {
766
- // Do a first check immediately
767
- if ( fn.apply(this) ) {
768
- console.log('Wait for', msg, 'done immediately'); // eslint-disable-line no-console
769
- resolve(this);
770
- }
771
-
772
- const timeout = setTimeout(() => {
773
- console.log('Wait for', msg, 'timed out'); // eslint-disable-line no-console
774
- clearInterval(interval);
775
- clearTimeout(timeout);
776
- reject(new Error(`Failed waiting for: ${ msg }`));
777
- }, timeoutMs);
778
-
779
- const interval = setInterval(() => {
780
- if ( fn.apply(this) ) {
781
- console.log('Wait for', msg, 'done'); // eslint-disable-line no-console
782
- clearInterval(interval);
783
- clearTimeout(timeout);
784
- resolve(this);
785
- } else {
786
- console.log('Wait for', msg, 'not done yet'); // eslint-disable-line no-console
787
- }
788
- }, intervalMs);
789
- });
756
+ return waitFor(() => fn.apply(this), msg, timeoutMs || DEFAULT_WAIT_TMIMEOUT, intervalMs || DEFAULT_WAIT_INTERVAL, true);
790
757
  }
791
758
 
792
759
  waitForState(state, timeout, interval) {
@@ -798,19 +765,19 @@ export default class Resource {
798
765
  waitForTransition() {
799
766
  return this.waitForTestFn(() => {
800
767
  return !this.transitioning;
801
- }, 'transition completion');
768
+ }, 'transition completion', undefined, undefined);
802
769
  }
803
770
 
804
771
  waitForAction(name) {
805
772
  return this.waitForTestFn(() => {
806
773
  return this.hasAction(name);
807
- }, `action=${ name }`);
774
+ }, `action=${ name }`, undefined, undefined);
808
775
  }
809
776
 
810
777
  waitForLink(name) {
811
778
  return this.waitForTestFn(() => {
812
779
  return this.hasLink(name);
813
- }, `link=${ name }`);
780
+ }, `link=${ name }`, undefined, undefined);
814
781
  }
815
782
 
816
783
  hasCondition(condition) {
@@ -890,7 +857,7 @@ export default class Resource {
890
857
  action: this.canUpdate ? 'goToEdit' : 'goToViewConfig',
891
858
  label: this.t(this.canUpdate ? 'action.edit' : 'action.view'),
892
859
  icon: 'icon icon-edit',
893
- enabled: this.canCustomEdit,
860
+ enabled: this.canCustomEdit,
894
861
  },
895
862
  {
896
863
  action: this.canEditYaml ? 'goToEditYaml' : 'goToViewYaml',
@@ -902,7 +869,7 @@ export default class Resource {
902
869
  action: (this.canCustomEdit ? 'goToClone' : 'cloneYaml'),
903
870
  label: this.t('action.clone'),
904
871
  icon: 'icon icon-copy',
905
- enabled: this.canClone && this.canCreate && (this.canCustomEdit || this.canYaml),
872
+ enabled: this.canClone && this.canCreate && (this.canCustomEdit || this.canYaml),
906
873
  },
907
874
  { divider: true },
908
875
  {
@@ -918,7 +885,7 @@ export default class Resource {
918
885
  action: 'viewInApi',
919
886
  label: this.t('action.viewInApi'),
920
887
  icon: 'icon icon-external-link',
921
- enabled: this.canViewInApi,
888
+ enabled: this.canViewInApi,
922
889
  },
923
890
  {
924
891
  action: 'promptRemove',
@@ -1075,6 +1042,12 @@ export default class Resource {
1075
1042
  return this._save(...arguments);
1076
1043
  }
1077
1044
 
1045
+ /**
1046
+ * Allow to handle the response of the save request
1047
+ * @param {*} res Full request response
1048
+ */
1049
+ processSaveResponse(res) { }
1050
+
1078
1051
  async _save(opt = {}) {
1079
1052
  delete this.__rehydrate;
1080
1053
  delete this.__clone;
@@ -1151,6 +1124,9 @@ export default class Resource {
1151
1124
  try {
1152
1125
  const res = await this.$dispatch('request', { opt, type: this.type } );
1153
1126
 
1127
+ // Allow to process response independently from the related models
1128
+ this.processSaveResponse(res);
1129
+
1154
1130
  // Steve sometimes returns Table responses instead of the resource you just saved.. ignore
1155
1131
  if ( res && res.kind !== 'Table') {
1156
1132
  await this.$dispatch('load', { data: res, existing: (forNew ? this : undefined ) });
@@ -1213,9 +1189,9 @@ export default class Resource {
1213
1189
  return {
1214
1190
  name: `c-cluster-product-resource`,
1215
1191
  params: {
1216
- product: this.$rootGetters['productId'],
1217
- cluster: this.$rootGetters['clusterId'],
1218
- resource: this.type,
1192
+ product: this.$rootGetters['productId'],
1193
+ cluster: this.$rootGetters['clusterId'],
1194
+ resource: this.type,
1219
1195
  }
1220
1196
  };
1221
1197
  }
@@ -1276,7 +1252,7 @@ export default class Resource {
1276
1252
 
1277
1253
  location.query = {
1278
1254
  ...location.query,
1279
- [MODE]: _VIEW,
1255
+ [MODE]: _VIEW,
1280
1256
  [AS]: _CONFIG,
1281
1257
  ...moreQuery
1282
1258
  };
@@ -1323,8 +1299,9 @@ export default class Resource {
1323
1299
 
1324
1300
  async download() {
1325
1301
  const value = await this.followLink('view', { headers: { accept: 'application/yaml' } });
1302
+ const data = await this.$dispatch('cleanForDownload', value.data);
1326
1303
 
1327
- downloadFile(`${ this.nameDisplay }.yaml`, value.data, 'application/yaml');
1304
+ downloadFile(`${ this.nameDisplay }.yaml`, data, 'application/yaml');
1328
1305
  }
1329
1306
 
1330
1307
  async downloadBulk(items) {
@@ -1343,8 +1320,11 @@ export default class Resource {
1343
1320
  }
1344
1321
 
1345
1322
  await eachLimit(items, 10, (item, idx) => {
1346
- return item.followLink('view', { headers: { accept: 'application/yaml' } } ).then((data) => {
1347
- files[`resources/${ names[idx] }`] = data.data || data;
1323
+ return item.followLink('view', { headers: { accept: 'application/yaml' } } ).then(async(data) => {
1324
+ const yaml = data.data || data;
1325
+ const cleanedYaml = await this.$dispatch('cleanForDownload', yaml);
1326
+
1327
+ files[`resources/${ names[idx] }`] = cleanedYaml;
1348
1328
  });
1349
1329
  });
1350
1330
 
@@ -1468,13 +1448,13 @@ export default class Resource {
1468
1448
 
1469
1449
  if ( isCreate ) {
1470
1450
  res = await this.schema.followLink('collection', {
1471
- method: 'POST',
1451
+ method: 'POST',
1472
1452
  headers,
1473
1453
  data: yaml
1474
1454
  });
1475
1455
  } else {
1476
1456
  res = await this.followLink('update', {
1477
- method: 'PUT',
1457
+ method: 'PUT',
1478
1458
  headers,
1479
1459
  data: yaml
1480
1460
  });
@@ -7,6 +7,7 @@ import { streamJson, streamingSupported } from '@shell/utils/stream';
7
7
  import isObject from 'lodash/isObject';
8
8
  import { classify } from '@shell/plugins/dashboard-store/classify';
9
9
  import { NAMESPACE } from '@shell/config/types';
10
+ import jsyaml from 'js-yaml';
10
11
 
11
12
  export default {
12
13
 
@@ -323,6 +324,35 @@ export default {
323
324
 
324
325
  return resource;
325
326
  },
327
+
328
+ // remove fields added by steve before showing/downloading yamls
329
+ cleanForDownload(ctx, yaml) {
330
+ if (!yaml) {
331
+ return;
332
+ }
333
+ const rootKeys = [
334
+ 'id',
335
+ 'links',
336
+ 'type',
337
+ 'actions'
338
+ ];
339
+ const metadataKeys = [
340
+ 'fields',
341
+ 'relationships',
342
+ 'state',
343
+ ];
344
+ const conditionKeys = [
345
+ 'error',
346
+ 'transitioning',
347
+ ];
348
+ const obj = jsyaml.load(yaml);
349
+
350
+ dropKeys(obj, rootKeys);
351
+ dropKeys(obj?.metadata, metadataKeys);
352
+ (obj?.status?.conditions || []).forEach(condition => dropKeys(condition, conditionKeys));
353
+
354
+ return jsyaml.dump(obj);
355
+ }
326
356
  };
327
357
 
328
358
  const diffRootKeys = [
@@ -0,0 +1,60 @@
1
+ import { SCHEMA, COUNT } from '@shell/config/types';
2
+ import { keyFieldFor, normalizeType } from '@shell/plugins/dashboard-store/normalize';
3
+ import { addSchemaIndexFields } from '@shell/plugins/steve/schema.utils';
4
+ import { hashObj } from '@shell/utils/crypto/browserHashUtils';
5
+
6
+ export default class ResourceCache {
7
+ resources = {};
8
+ type;
9
+ keyField;
10
+ constructor(type) {
11
+ this.type = normalizeType(type === 'counts' ? COUNT : type);
12
+ this.keyField = keyFieldFor(this.type);
13
+ }
14
+
15
+ load(collection = []) {
16
+ // console.time('startSchemaLoads!!!');
17
+ for (let i = 0; i < collection.length; i++) {
18
+ const resource = collection[i];
19
+
20
+ if ( this.type === SCHEMA ) {
21
+ addSchemaIndexFields(resource);
22
+ }
23
+ const id = resource[this.keyField];
24
+
25
+ // Store the hash instead of the whole object. This means longer load time be reduces memory footprint
26
+ // Perf Note: 3.328125 ms to load ~2500 schemas as objects into cache
27
+ // Perf Note: 67.450927734375 ms to load ~2500 schemas as hashes into cache
28
+ this.resources[id] = hashObj(resource);
29
+ }
30
+ // console.timeEnd('startSchemaLoads!!!');
31
+
32
+ return this;
33
+ }
34
+
35
+ change(resource, callback) {
36
+ if ( this.type === SCHEMA ) {
37
+ addSchemaIndexFields(resource);
38
+ }
39
+
40
+ const existingResourceHash = this.resources[resource[this.keyField]] || {};
41
+ const newResourceHash = hashObj(resource);
42
+
43
+ if (existingResourceHash !== newResourceHash) {
44
+ this.resources[resource[this.keyField]] = resource;
45
+ callback();
46
+ }
47
+ }
48
+
49
+ create(resource, callback) {
50
+ // ToDo: the logic for create is identical to change in these caches but the worker doesn't know that
51
+ this.change(resource, callback);
52
+ }
53
+
54
+ remove(id, callback) {
55
+ if (this.resources[id]) {
56
+ delete this.resources[id];
57
+ callback();
58
+ }
59
+ }
60
+ }