@rancher/shell 0.3.0 → 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 (322) 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 +4 -4
  6. package/assets/styles/themes/_light.scss +4 -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 +669 -73
  10. package/assets/translations/zh-hans.yaml +547 -165
  11. package/chart/monitoring/steps/uninstall-v1.vue +2 -2
  12. package/cloud-credential/azure.vue +23 -0
  13. package/cloud-credential/harvester.vue +25 -62
  14. package/cloud-credential/pnap.vue +80 -0
  15. package/components/.DS_Store +0 -0
  16. package/components/AdvancedSection.vue +9 -2
  17. package/components/Alert.vue +2 -2
  18. package/components/ButtonDropdown.vue +0 -2
  19. package/components/ButtonGroup.vue +1 -0
  20. package/components/CollapsibleCard.vue +0 -1
  21. package/components/CruResource.vue +41 -4
  22. package/components/DetailTop.vue +58 -3
  23. package/components/DisableAuthProviderModal.vue +106 -0
  24. package/{rancher-components/components/Utils/DraggableZone → components}/DraggableZone.vue +0 -0
  25. package/components/ExplorerMembers.vue +253 -30
  26. package/components/ExplorerProjectsNamespaces.vue +77 -33
  27. package/components/GrowlManager.vue +3 -3
  28. package/components/IconOrSvg.vue +149 -0
  29. package/components/LogItem.vue +69 -0
  30. package/components/PodSecurityAdmission.vue +302 -0
  31. package/components/PromptModal.vue +1 -0
  32. package/components/ResourceDetail/Masthead.vue +54 -2
  33. package/components/ResourceDetail/index.vue +12 -5
  34. package/components/ResourceList/Masthead.vue +11 -1
  35. package/components/ResourceList/ResourceLoadingIndicator.vue +12 -2
  36. package/components/ResourceList/index.vue +53 -12
  37. package/components/ResourceList/resource-list.config.js +7 -0
  38. package/components/ResourceTable.vue +31 -6
  39. package/components/SimpleBox.vue +1 -1
  40. package/components/SortableTable/THead.vue +15 -5
  41. package/components/SortableTable/index.vue +21 -10
  42. package/components/Tabbed/index.vue +20 -15
  43. package/components/__tests__/.DS_Store +0 -0
  44. package/components/__tests__/AsyncButton.test.ts +140 -0
  45. package/components/__tests__/BackLink.test.ts +33 -0
  46. package/components/__tests__/ButtonGroup.test.ts +124 -0
  47. package/components/__tests__/ClusterBadge.test.ts +32 -0
  48. package/components/__tests__/CollapsibleCard.test.ts +64 -0
  49. package/components/__tests__/ConsumptionGauge.test.ts +88 -0
  50. package/components/__tests__/CruResource.test.ts +3 -2
  51. package/components/__tests__/FixedBanner.test.ts +129 -0
  52. package/components/__tests__/GrowlManager.test.ts +147 -0
  53. package/components/__tests__/NamespaceFilter.test.ts +33 -25
  54. package/components/__tests__/PercentageBar.test.ts +32 -0
  55. package/components/__tests__/PodSecurityAdmission.test.ts +398 -0
  56. package/components/auth/AuthBanner.vue +20 -10
  57. package/components/auth/RoleDetailEdit.vue +26 -17
  58. package/components/auth/SelectPrincipal.vue +36 -5
  59. package/components/form/ArrayList.vue +3 -35
  60. package/components/form/ArrayListGrouped.vue +13 -4
  61. package/components/form/ArrayListSelect.vue +5 -5
  62. package/components/form/Error.vue +8 -0
  63. package/components/form/KeyValue.vue +39 -7
  64. package/components/form/LabeledSelect.vue +5 -2
  65. package/components/form/Labels.vue +46 -16
  66. package/components/form/Members/ClusterPermissionsEditor.vue +17 -17
  67. package/components/form/Members/MembershipEditor.vue +12 -12
  68. package/components/form/NameNsDescription.vue +1 -1
  69. package/components/form/NodeScheduling.vue +1 -1
  70. package/components/form/Probe.vue +3 -3
  71. package/components/form/ResourceQuota/Project.vue +6 -6
  72. package/components/form/ResourceTabs/index.vue +1 -6
  73. package/components/form/Security.vue +7 -6
  74. package/components/form/Select.vue +3 -2
  75. package/components/form/SelectOrCreateAuthSecret.vue +22 -29
  76. package/components/form/ServicePorts.vue +8 -0
  77. package/components/form/WorkloadPorts.vue +7 -1
  78. package/components/form/__tests__/ArrayList.test.ts +74 -0
  79. package/components/form/__tests__/ArrayListGrouped.test.ts +6 -4
  80. package/components/formatter/Checked.vue +1 -1
  81. package/components/formatter/ClusterLink.vue +5 -0
  82. package/components/formatter/IconIsDefault.vue +2 -2
  83. package/components/formatter/InternalExternalIP.vue +11 -8
  84. package/components/formatter/LiveDuration.vue +78 -0
  85. package/components/formatter/WorkloadHealthScale.vue +5 -3
  86. package/components/nav/Header.vue +6 -3
  87. package/components/nav/NamespaceFilter.vue +146 -63
  88. package/components/nav/TopLevelMenu.vue +22 -19
  89. package/components/nav/WindowManager/ContainerLogs.vue +83 -126
  90. package/components/nav/WindowManager/ContainerShell.vue +9 -7
  91. package/components/nav/WindowManager/Window.vue +2 -0
  92. package/components/nav/WindowManager/index.vue +10 -0
  93. package/config/elemental-types.js +9 -0
  94. package/config/features.js +2 -0
  95. package/config/home-links.js +4 -1
  96. package/config/pod-security-admission.ts +82 -0
  97. package/config/product/apps.js +1 -1
  98. package/config/product/auth.js +6 -5
  99. package/config/product/explorer.js +6 -6
  100. package/config/product/fleet.js +1 -1
  101. package/config/product/manager.js +6 -2
  102. package/config/secret.js +0 -1
  103. package/config/settings.ts +26 -9
  104. package/config/table-headers.js +22 -11
  105. package/config/types.js +4 -1
  106. package/content/docs/zh-hans/getting-started.md +113 -137
  107. package/content/docs/zh-hans/whats-new.md +8 -46
  108. package/creators/pkg/package-lock.json +37 -0
  109. package/creators/pkg/package.json +1 -1
  110. package/detail/catalog.cattle.io.app.vue +1 -1
  111. package/detail/pod.vue +1 -1
  112. package/detail/provisioning.cattle.io.cluster.vue +35 -9
  113. package/detail/service.vue +2 -9
  114. package/detail/workload/index.vue +0 -1
  115. package/dialog/AddClusterMemberDialog.vue +22 -28
  116. package/dialog/AddProjectMemberDialog.vue +53 -9
  117. package/dialog/DiagnosticTimingsDialog.vue +8 -7
  118. package/dialog/DrainNode.vue +44 -48
  119. package/dialog/ForceMachineRemoveDialog.vue +5 -7
  120. package/dialog/GenericPrompt.vue +15 -20
  121. package/dialog/RollbackWorkloadDialog.vue +15 -46
  122. package/dialog/RotateCertificatesDialog.vue +5 -7
  123. package/dialog/RotateEncryptionKeyDialog.vue +5 -9
  124. package/dialog/SaveAsRKETemplateDialog.vue +5 -13
  125. package/dialog/ScaleMachineDownDialog.vue +1 -1
  126. package/dialog/ScalePoolDownDialog.vue +121 -0
  127. package/edit/__tests__/management.cattle.io.setting.test.ts +3 -3
  128. package/edit/auth/azuread.vue +16 -16
  129. package/edit/auth/github.vue +8 -0
  130. package/edit/auth/googleoauth.vue +10 -1
  131. package/edit/auth/ldap/index.vue +10 -0
  132. package/edit/auth/oidc.vue +10 -0
  133. package/edit/auth/saml.vue +10 -0
  134. package/edit/autoscaling.horizontalpodautoscaler/index.vue +1 -1
  135. package/edit/cloudcredential.vue +3 -7
  136. package/edit/logging-flow/Match.vue +39 -8
  137. package/edit/logging-flow/index.vue +27 -4
  138. package/edit/management.cattle.io.podsecurityadmissionconfigurationtemplate.vue +107 -0
  139. package/edit/management.cattle.io.project.vue +8 -1
  140. package/edit/management.cattle.io.setting.vue +5 -2
  141. package/edit/management.cattle.io.user.vue +7 -1
  142. package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +23 -7
  143. package/edit/monitoring.coreos.com.alertmanagerconfig/types/email.vue +2 -2
  144. package/edit/monitoring.coreos.com.prometheusrule/GroupRules.vue +14 -6
  145. package/edit/namespace.vue +18 -4
  146. package/edit/networking.k8s.io.ingress/Certificate.vue +1 -0
  147. package/edit/networking.k8s.io.ingress/IngressClass.vue +8 -6
  148. package/edit/networking.k8s.io.ingress/RulePath.vue +12 -6
  149. package/edit/networking.k8s.io.ingress/index.vue +8 -6
  150. package/edit/persistentvolume/index.vue +30 -27
  151. package/edit/persistentvolume/plugins/cephfs.vue +29 -29
  152. package/edit/persistentvolume/plugins/csi.vue +102 -62
  153. package/edit/persistentvolume/plugins/fc.vue +19 -19
  154. package/edit/persistentvolume/plugins/iscsi.vue +45 -45
  155. package/edit/persistentvolume/plugins/rbd.vue +39 -39
  156. package/edit/persistentvolumeclaim.vue +78 -75
  157. package/edit/provisioning.cattle.io.cluster/MachinePool.vue +11 -7
  158. package/edit/provisioning.cattle.io.cluster/RegistryConfigs.vue +10 -1
  159. package/edit/provisioning.cattle.io.cluster/RegistryMirrors.vue +87 -27
  160. package/edit/provisioning.cattle.io.cluster/SelectCredential.vue +3 -6
  161. package/edit/provisioning.cattle.io.cluster/__tests__/rke2.test.ts +93 -0
  162. package/edit/provisioning.cattle.io.cluster/import.vue +1 -1
  163. package/edit/provisioning.cattle.io.cluster/index.vue +29 -6
  164. package/edit/provisioning.cattle.io.cluster/rke2.vue +440 -152
  165. package/edit/secret/index.vue +3 -7
  166. package/edit/service.vue +3 -1
  167. package/edit/storage.k8s.io.storageclass/index.vue +100 -16
  168. package/edit/storage.k8s.io.storageclass/provisioners/driver.harvesterhci.io.vue +114 -0
  169. package/edit/workload/__tests__/index.test.ts +98 -0
  170. package/edit/workload/index.vue +58 -8
  171. package/edit/workload/mixins/workload.js +107 -70
  172. package/edit/workload/storage/ContainerMountPaths.vue +0 -10
  173. package/edit/workload/storage/emptyDir.vue +88 -0
  174. package/edit/workload/storage/ephemeralVolume/index.vue +1 -1
  175. package/edit/workload/storage/index.vue +8 -0
  176. package/edit/workload/storage/persistentVolumeClaim/index.vue +1 -1
  177. package/layouts/default.vue +57 -44
  178. package/list/__tests__/workload.test.ts +5 -2
  179. package/list/catalog.cattle.io.app.vue +1 -0
  180. package/list/cis.cattle.io.clusterscan.vue +1 -0
  181. package/list/fleet.cattle.io.bundle.vue +5 -6
  182. package/list/fleet.cattle.io.cluster.vue +6 -3
  183. package/list/fleet.cattle.io.clusterregistrationtoken.vue +5 -6
  184. package/list/fleet.cattle.io.gitrepo.vue +4 -9
  185. package/list/helm.cattle.io.projecthelmchart.vue +1 -5
  186. package/list/logging.banzaicloud.io.clusterflow.vue +4 -1
  187. package/list/logging.banzaicloud.io.flow.vue +6 -5
  188. package/list/management.cattle.io.cluster.vue +1 -0
  189. package/list/management.cattle.io.feature.vue +3 -4
  190. package/list/management.cattle.io.podsecurityadmissionconfigurationtemplate.vue +47 -0
  191. package/list/management.cattle.io.setting.vue +2 -2
  192. package/list/management.cattle.io.user.vue +4 -10
  193. package/list/monitoring.coreos.com.alertmanagerconfig.vue +2 -7
  194. package/list/node.vue +8 -5
  195. package/list/persistentvolume.vue +3 -3
  196. package/list/persistentvolumeclaim.vue +3 -4
  197. package/list/provisioning.cattle.io.cluster.vue +18 -19
  198. package/list/service.vue +6 -14
  199. package/list/workload.vue +43 -38
  200. package/machine-config/azure.vue +429 -60
  201. package/machine-config/pnap.vue +288 -0
  202. package/mixins/auth-config.js +1 -3
  203. package/mixins/browser-tab-visibility.js +8 -14
  204. package/mixins/chart.js +1 -1
  205. package/mixins/create-edit-view/impl.js +4 -0
  206. package/mixins/create-edit-view/index.js +4 -2
  207. package/mixins/resource-fetch-namespaced.js +98 -0
  208. package/mixins/resource-fetch.js +79 -45
  209. package/mixins/resource-manager.js +1 -23
  210. package/models/apps.controllerrevision.js +7 -0
  211. package/models/apps.daemonset.js +18 -0
  212. package/models/apps.deployment.js +44 -0
  213. package/models/apps.replicaset.js +7 -0
  214. package/models/apps.statefulset.js +18 -0
  215. package/models/batch.job.js +7 -14
  216. package/models/cluster/node.js +10 -2
  217. package/models/cluster.x-k8s.io.machine.js +26 -4
  218. package/models/cluster.x-k8s.io.machinedeployment.js +12 -2
  219. package/models/event.js +7 -0
  220. package/models/logging.banzaicloud.io.flow.js +4 -0
  221. package/models/management.cattle.io.cluster.js +1 -1
  222. package/models/management.cattle.io.clusterroletemplatebinding.js +1 -1
  223. package/models/management.cattle.io.globalrole.js +2 -2
  224. package/models/management.cattle.io.node.js +37 -2
  225. package/models/management.cattle.io.podsecurityadmissionconfigurationtemplate.ts +4 -0
  226. package/models/management.cattle.io.project.js +30 -11
  227. package/models/management.cattle.io.setting.js +1 -1
  228. package/models/management.cattle.io.user.js +37 -1
  229. package/models/namespace.js +42 -5
  230. package/models/persistentvolume.js +14 -2
  231. package/models/pod.js +15 -0
  232. package/models/projectroletemplatebinding.js +7 -0
  233. package/models/provisioning.cattle.io.cluster.js +61 -10
  234. package/models/rke-machine.cattle.io.pnapmachinetemplate.js +15 -0
  235. package/models/service.js +14 -13
  236. package/models/storage.k8s.io.storageclass.js +33 -18
  237. package/models/workload.js +38 -7
  238. package/nuxt.config.js +27 -17
  239. package/package.json +7 -7
  240. package/pages/about.vue +14 -2
  241. package/pages/c/_cluster/apps/charts/index.vue +4 -3
  242. package/pages/c/_cluster/apps/charts/install.vue +59 -22
  243. package/pages/c/_cluster/auth/config/_id.vue +6 -0
  244. package/pages/c/_cluster/auth/config/index.vue +8 -6
  245. package/pages/c/_cluster/auth/group.principal/assign-edit.vue +1 -1
  246. package/pages/c/_cluster/auth/roles/index.vue +1 -1
  247. package/pages/c/_cluster/explorer/index.vue +12 -6
  248. package/pages/c/_cluster/longhorn/index.vue +1 -1
  249. package/pages/c/_cluster/monitoring/alertmanagerconfig/_alertmanagerconfigid/receiver.vue +15 -4
  250. package/pages/c/_cluster/monitoring/index.vue +1 -1
  251. package/pages/c/_cluster/neuvector/index.vue +1 -1
  252. package/pages/c/_cluster/settings/performance.vue +48 -2
  253. package/pages/c/_cluster/uiplugins/PluginInfoPanel.vue +34 -1
  254. package/pages/c/_cluster/uiplugins/index.vue +28 -2
  255. package/pages/diagnostic.vue +5 -4
  256. package/pages/home.vue +105 -30
  257. package/pages/prefs.vue +23 -12
  258. package/pages/rio/mesh.vue +1 -1
  259. package/pkg/dynamic-importer.lib.js +8 -0
  260. package/pkg/vue.config.js +4 -0
  261. package/plugins/dashboard-store/__tests__/mutations.spec.js +406 -0
  262. package/plugins/dashboard-store/actions.js +32 -25
  263. package/plugins/dashboard-store/getters.js +50 -33
  264. package/plugins/dashboard-store/mutations.js +134 -28
  265. package/plugins/dashboard-store/resource-class.js +21 -41
  266. package/plugins/steve/actions.js +30 -0
  267. package/plugins/steve/caches/resourceCache.js +60 -0
  268. package/plugins/steve/getters.js +44 -1
  269. package/plugins/steve/mutations.js +97 -36
  270. package/plugins/steve/resourceWatcher.js +277 -0
  271. package/plugins/steve/schema.utils.js +25 -0
  272. package/plugins/steve/subscribe.js +288 -115
  273. package/plugins/steve/worker/index.js +17 -0
  274. package/plugins/steve/worker/web-worker.advanced.js +302 -0
  275. package/plugins/steve/{web-worker.steve-sub-worker.js → worker/web-worker.basic.js} +3 -44
  276. package/rancher-components/Card/Card.vue +3 -3
  277. package/rancher-components/Form/TextArea/TextAreaAutoGrow.vue +1 -0
  278. package/rancher-components/StringList/StringList.test.ts +45 -420
  279. package/rancher-components/StringList/StringList.vue +1 -10
  280. package/rancher-components/components/Banner/Banner.test.ts +44 -0
  281. package/rancher-components/components/Banner/Banner.vue +129 -61
  282. package/rancher-components/components/Form/Checkbox/Checkbox.test.ts +13 -22
  283. package/rancher-components/components/Form/Checkbox/Checkbox.vue +8 -6
  284. package/rancher-components/components/Form/ToggleSwitch/ToggleSwitch.test.ts +9 -9
  285. package/rancher-components/components/LabeledTooltip/LabeledTooltip.vue +0 -1
  286. package/rancher-components/components/StringList/StringList.test.ts +7 -7
  287. package/rancher-components/components/StringList/StringList.vue +21 -15
  288. package/scripts/test-plugins-build.sh +8 -0
  289. package/static/loading-indicator.html +1 -1
  290. package/store/index.js +54 -3
  291. package/store/plugins.js +0 -17
  292. package/store/pnap.js +128 -0
  293. package/store/prefs.js +4 -2
  294. package/store/type-map.js +55 -13
  295. package/types/pod-security-admission.ts +36 -0
  296. package/types/shell/index.d.ts +496 -396
  297. package/utils/__tests__/object.test.ts +17 -1
  298. package/utils/__tests__/pod-security-admission.test.ts +61 -0
  299. package/utils/async.ts +36 -0
  300. package/utils/color.js +45 -0
  301. package/utils/crypto/browserHashUtils.js +18 -0
  302. package/utils/dynamic-importer.js +8 -0
  303. package/utils/install-redirect.js +1 -1
  304. package/utils/object.js +24 -0
  305. package/utils/pod-security-admission.ts +39 -0
  306. package/utils/socket.js +61 -24
  307. package/utils/string.js +2 -0
  308. package/utils/svg-filter.js +301 -0
  309. package/utils/time.js +49 -0
  310. package/utils/validators/cidr.js +4 -0
  311. package/utils/validators/formRules/__tests__/index.test.ts +23 -3
  312. package/utils/validators/formRules/index.ts +14 -0
  313. package/config/product/harvester-manager.js +0 -162
  314. package/edit/harvesterhci.io.management.cluster.vue +0 -153
  315. package/list/harvesterhci.io.management.cluster.vue +0 -241
  316. package/machine-config/harvester.vue +0 -693
  317. package/models/harvesterhci.io.management.cluster.js +0 -228
  318. package/pages/c/_cluster/harvesterManager/index.vue +0 -24
  319. package/rancher-components/Card/Card.test.ts +0 -39
  320. package/rancher-components/Utils/DraggableZone/DraggableZone.vue +0 -181
  321. package/rancher-components/Utils/DraggableZone/index.ts +0 -1
  322. package/rancher-components/components/Utils/DraggableZone/index.ts +0 -1
@@ -42,65 +42,65 @@ export default {
42
42
  <div>
43
43
  <div class="row mb-20">
44
44
  <div class="col span-6">
45
- <LabeledInput
46
- v-model="value.spec.rbd.user"
47
- :mode="mode"
48
- :label="t('persistentVolume.rbd.user.label')"
49
- :placeholder="t('persistentVolume.rbd.user.placeholder')"
45
+ <LabeledInput
46
+ v-model="value.spec.rbd.user"
47
+ :mode="mode"
48
+ :label="t('persistentVolume.rbd.user.label')"
49
+ :placeholder="t('persistentVolume.rbd.user.placeholder')"
50
50
  />
51
51
  </div>
52
52
  <div class="col span-6">
53
- <LabeledInput
54
- v-model="value.spec.rbd.keyring"
55
- :mode="mode"
56
- :label="t('persistentVolume.rbd.keyRing.label')"
57
- :placeholder="t('persistentVolume.rbd.keyRing.placeholder')"
53
+ <LabeledInput
54
+ v-model="value.spec.rbd.keyring"
55
+ :mode="mode"
56
+ :label="t('persistentVolume.rbd.keyRing.label')"
57
+ :placeholder="t('persistentVolume.rbd.keyRing.placeholder')"
58
58
  />
59
59
  </div>
60
60
  </div>
61
61
  <div class="row mb-20">
62
62
  <div class="col span-6">
63
- <LabeledInput
64
- v-model="value.spec.rbd.pool"
65
- :mode="mode"
66
- :label="t('persistentVolume.rbd.pool.label')"
67
- :placeholder="t('persistentVolume.rbd.pool.placeholder')"
63
+ <LabeledInput
64
+ v-model="value.spec.rbd.pool"
65
+ :mode="mode"
66
+ :label="t('persistentVolume.rbd.pool.label')"
67
+ :placeholder="t('persistentVolume.rbd.pool.placeholder')"
68
68
  />
69
69
  </div>
70
70
  <div class="col span-6">
71
- <LabeledInput
72
- v-model="value.spec.rbd.image"
73
- :mode="mode"
74
- :label="t('persistentVolume.rbd.image.label')"
75
- :placeholder="t('persistentVolume.rbd.image.placeholder')"
71
+ <LabeledInput
72
+ v-model="value.spec.rbd.image"
73
+ :mode="mode"
74
+ :label="t('persistentVolume.rbd.image.label')"
75
+ :placeholder="t('persistentVolume.rbd.image.placeholder')"
76
76
  />
77
77
  </div>
78
78
  </div>
79
79
  <div class="row mb-20">
80
80
  <div class="col span-6">
81
- <LabeledInput
82
- v-model="value.spec.rbd.secretRef.name"
83
- :mode="mode"
84
- :label="t('persistentVolume.shared.secretName.label')"
85
- :placeholder="t('persistentVolume.shared.secretName.placeholder')"
81
+ <LabeledInput
82
+ v-model="value.spec.rbd.secretRef.name"
83
+ :mode="mode"
84
+ :label="t('persistentVolume.shared.secretName.label')"
85
+ :placeholder="t('persistentVolume.shared.secretName.placeholder')"
86
86
  />
87
87
  </div>
88
88
  <div class="col span-6">
89
- <LabeledInput
90
- v-model="value.spec.rbd.secretRef.namespace"
91
- :mode="mode"
92
- :label="t('persistentVolume.shared.secretNamespace.label')"
93
- :placeholder="t('persistentVolume.shared.secretNamespace.placeholder')"
89
+ <LabeledInput
90
+ v-model="value.spec.rbd.secretRef.namespace"
91
+ :mode="mode"
92
+ :label="t('persistentVolume.shared.secretNamespace.label')"
93
+ :placeholder="t('persistentVolume.shared.secretNamespace.placeholder')"
94
94
  />
95
95
  </div>
96
96
  </div>
97
97
  <div class="row mb-20">
98
98
  <div class="col span-6">
99
- <LabeledInput
100
- v-model="value.spec.rbd.fsType"
101
- :mode="mode"
102
- :label="t('persistentVolume.shared.filesystemType.label')"
103
- :placeholder="t('persistentVolume.shared.filesystemType.placeholder')"
99
+ <LabeledInput
100
+ v-model="value.spec.rbd.fsType"
101
+ :mode="mode"
102
+ :label="t('persistentVolume.shared.filesystemType.label')"
103
+ :placeholder="t('persistentVolume.shared.filesystemType.placeholder')"
104
104
  />
105
105
  </div>
106
106
  <div class="col span-6">
@@ -116,10 +116,10 @@ export default {
116
116
  </div>
117
117
  <div class="row mb-20">
118
118
  <div class="col span-6">
119
- <ArrayList
120
- v-model="value.spec.rbd.monitors"
121
- :add-label="t('persistentVolume.shared.monitors.add')"
122
- :mode="mode"
119
+ <ArrayList
120
+ v-model="value.spec.rbd.monitors"
121
+ :add-label="t('persistentVolume.shared.monitors.add')"
122
+ :mode="mode"
123
123
  />
124
124
  </div>
125
125
  </div>
@@ -77,31 +77,7 @@ export default {
77
77
  const defaultTab = this.$route.query[FOCUS] || null;
78
78
 
79
79
  return {
80
- secondaryResourceData: {
81
- namespace: this.value?.metadata?.namespace || null,
82
- data: {
83
- [PV]: {
84
- applyTo: [
85
- { var: 'persistentVolumes' },
86
- {
87
- var: 'persistentVolumeOptions',
88
- parsingFunc: (data) => {
89
- return data
90
- .map((s) => {
91
- const status = s.status.phase === 'Available' ? '' : ` (${ s.status.phase })`;
92
-
93
- return {
94
- label: `${ s.metadata.name }${ status }`,
95
- value: s.metadata.name
96
- };
97
- })
98
- .sort((l, r) => l.label.localeCompare(r.label));
99
- }
100
- }
101
- ]
102
- },
103
- }
104
- },
80
+ secondaryResourceData: this.secondaryResourceDataConfig(),
105
81
  sourceOptions,
106
82
  source: this.value.spec.volumeName ? sourceOptions[1].value : sourceOptions[0].value,
107
83
  immutableMode: this.realMode === _CREATE ? _CREATE : _VIEW,
@@ -178,6 +154,33 @@ export default {
178
154
  }
179
155
  },
180
156
  methods: {
157
+ secondaryResourceDataConfig() {
158
+ return {
159
+ namespace: this.value?.metadata?.namespace || null,
160
+ data: {
161
+ [PV]: {
162
+ applyTo: [
163
+ { var: 'persistentVolumes' },
164
+ {
165
+ var: 'persistentVolumeOptions',
166
+ parsingFunc: (data) => {
167
+ return data
168
+ .map((s) => {
169
+ const status = s.status.phase === 'Available' ? '' : ` (${ s.status.phase })`;
170
+
171
+ return {
172
+ label: `${ s.metadata.name }${ status }`,
173
+ value: s.metadata.name
174
+ };
175
+ })
176
+ .sort((l, r) => l.label.localeCompare(r.label));
177
+ }
178
+ }
179
+ ]
180
+ },
181
+ }
182
+ };
183
+ },
181
184
  checkboxSetter(key, value) {
182
185
  if (value) {
183
186
  this.value.spec.accessModes.push(key);
@@ -230,16 +233,16 @@ export default {
230
233
  :namespaced="true"
231
234
  />
232
235
 
233
- <ResourceTabs
234
- v-model="value"
235
- :mode="mode"
236
- :side-tabs="true"
237
- :default-tab="defaultTab"
236
+ <ResourceTabs
237
+ v-model="value"
238
+ :mode="mode"
239
+ :side-tabs="true"
240
+ :default-tab="defaultTab"
238
241
  >
239
- <Tab
240
- name="volumeclaim"
241
- :label="t('persistentVolumeClaim.volumeClaim.label')"
242
- :weight="4"
242
+ <Tab
243
+ name="volumeclaim"
244
+ :label="t('persistentVolumeClaim.volumeClaim.label')"
245
+ :weight="4"
243
246
  >
244
247
  <div class="row">
245
248
  <div class="col span-6">
@@ -254,9 +257,9 @@ export default {
254
257
  </div>
255
258
  <div class="col span-6">
256
259
  <div class="row">
257
- <div
258
- v-if="source === 'new'"
259
- class="col span-12"
260
+ <div
261
+ v-if="source === 'new'"
262
+ class="col span-12"
260
263
  >
261
264
  <LabeledSelect
262
265
  v-if="canListStorageClasses"
@@ -273,9 +276,9 @@ export default {
273
276
  :tooltip="t('persistentVolumeClaim.volumeClaim.tooltips.noStorageClass')"
274
277
  />
275
278
  </div>
276
- <div
277
- v-else
278
- class="col span-12"
279
+ <div
280
+ v-else
281
+ class="col span-12"
279
282
  >
280
283
  <LabeledSelect
281
284
  v-if="canListPersistentVolumes"
@@ -308,17 +311,17 @@ export default {
308
311
  :min="1"
309
312
  :required="true"
310
313
  />
311
- <Banner
312
- v-if="isEdit && !value.expandable"
313
- color="info"
314
- class="mt-10"
314
+ <Banner
315
+ v-if="isEdit && !value.expandable"
316
+ color="info"
317
+ class="mt-10"
315
318
  >
316
319
  {{ t('persistentVolumeClaim.expand.notSupported') }}
317
320
  </Banner>
318
- <Banner
319
- v-else-if="isEdit && !value.bound"
320
- color="info"
321
- class="mt-10"
321
+ <Banner
322
+ v-else-if="isEdit && !value.bound"
323
+ color="info"
324
+ class="mt-10"
322
325
  >
323
326
  {{ t('persistentVolumeClaim.expand.notBound') }}
324
327
  </Banner>
@@ -327,42 +330,42 @@ export default {
327
330
  </div>
328
331
  </div>
329
332
  </Tab>
330
- <Tab
331
- name="customize"
332
- :label="t('persistentVolumeClaim.customize.label')"
333
- :weight="3"
333
+ <Tab
334
+ name="customize"
335
+ :label="t('persistentVolumeClaim.customize.label')"
336
+ :weight="3"
334
337
  >
335
338
  <div class="access">
336
339
  <h3>{{ t('persistentVolumeClaim.accessModes') }}</h3>
337
340
  <span class="text-error">*</span>
338
341
  </div>
339
- <div>
340
- <Checkbox
341
- v-model="readWriteOnce"
342
- :label="t('persistentVolumeClaim.customize.accessModes.readWriteOnce')"
343
- :mode="immutableMode"
344
- />
342
+ <div>
343
+ <Checkbox
344
+ v-model="readWriteOnce"
345
+ :label="t('persistentVolumeClaim.customize.accessModes.readWriteOnce')"
346
+ :mode="immutableMode"
347
+ />
345
348
  </div>
346
- <div>
347
- <Checkbox
348
- v-model="readOnlyMany"
349
- :label="t('persistentVolumeClaim.customize.accessModes.readOnlyMany')"
350
- :mode="immutableMode"
351
- />
349
+ <div>
350
+ <Checkbox
351
+ v-model="readOnlyMany"
352
+ :label="t('persistentVolumeClaim.customize.accessModes.readOnlyMany')"
353
+ :mode="immutableMode"
354
+ />
352
355
  </div>
353
- <div>
354
- <Checkbox
355
- v-model="readWriteMany"
356
- :label="t('persistentVolumeClaim.customize.accessModes.readWriteMany')"
357
- :mode="immutableMode"
358
- />
356
+ <div>
357
+ <Checkbox
358
+ v-model="readWriteMany"
359
+ :label="t('persistentVolumeClaim.customize.accessModes.readWriteMany')"
360
+ :mode="immutableMode"
361
+ />
359
362
  </div>
360
363
  </Tab>
361
- <Tab
362
- v-if="isView"
363
- name="status"
364
- :label="t('persistentVolumeClaim.status.label')"
365
- :weight="2"
364
+ <Tab
365
+ v-if="isView"
366
+ name="status"
367
+ :label="t('persistentVolumeClaim.status.label')"
368
+ :weight="2"
366
369
  >
367
370
  <StatusTable :resource="value" />
368
371
  </Tab>
@@ -2,7 +2,6 @@
2
2
  import { LabeledInput } from '@components/Form/LabeledInput';
3
3
  import { Checkbox } from '@components/Form/Checkbox';
4
4
  import { _EDIT } from '@shell/config/query-params';
5
- import { importMachineConfig } from '@shell/utils/dynamic-importer';
6
5
  import Taints from '@shell/components/form/Taints.vue';
7
6
  import KeyValue from '@shell/components/form/KeyValue.vue';
8
7
  import AdvancedSection from '@shell/components/AdvancedSection.vue';
@@ -109,13 +108,11 @@ export default {
109
108
 
110
109
  computed: {
111
110
  configComponent() {
112
- const haveProviders = this.$store.getters['plugins/machineDrivers'];
113
-
114
- if ( haveProviders.includes(this.provider) ) {
115
- return importMachineConfig(this.provider);
111
+ if (this.$store.getters['type-map/hasCustomMachineConfigComponent'](this.provider)) {
112
+ return this.$store.getters['type-map/importMachineConfig'](this.provider);
116
113
  }
117
114
 
118
- return importMachineConfig('generic');
115
+ return this.$store.getters['type-map/importMachineConfig']('generic');
119
116
  },
120
117
 
121
118
  isWindows() {
@@ -155,6 +152,12 @@ export default {
155
152
 
156
153
  return errors;
157
154
  }
155
+ },
156
+ // handle emitted matched machine inventories on selector so that machine count
157
+ // on machine pool can be kept up to date
158
+ // (only used on Elemental because it comes from "machineinventoryselectortemplate" machine-config)
159
+ updateMachineCount(val) {
160
+ this.value.pool.quantity = val || 1;
158
161
  }
159
162
  }
160
163
  };
@@ -208,7 +211,7 @@ export default {
208
211
  <hr class="mt-10">
209
212
  <component
210
213
  :is="configComponent"
211
- v-if="value.config"
214
+ v-if="value.config && configComponent"
212
215
  ref="configComponent"
213
216
  :cluster="cluster"
214
217
  :uuid="uuid"
@@ -219,6 +222,7 @@ export default {
219
222
  :pool-index="idx"
220
223
  :machine-pools="machinePools"
221
224
  @error="e=>errors = e"
225
+ @updateMachineCount="updateMachineCount"
222
226
  />
223
227
  <Banner
224
228
  v-else-if="value.configMissing"
@@ -75,6 +75,10 @@ export default {
75
75
  window.z = this;
76
76
  },
77
77
 
78
+ // created() {
79
+ // set(this.value, 'spec.rkeConfig.registries.configs', {});
80
+ // },
81
+
78
82
  methods: {
79
83
  update() {
80
84
  const configs = {};
@@ -91,6 +95,7 @@ export default {
91
95
  }
92
96
 
93
97
  set(this.value, 'spec.rkeConfig.registries.configs', configs);
98
+ this.$emit('updateConfigs', configs);
94
99
  },
95
100
 
96
101
  wrapRegisterBeforeHook(fn, ...args) {
@@ -118,12 +123,16 @@ export default {
118
123
  class="icon icon-info"
119
124
  />
120
125
  </h3>
126
+ <p class="mb-20">
127
+ {{ t('registryConfig.description') }}
128
+ </p>
121
129
  <ArrayListGrouped
122
130
  v-model="entries"
123
131
  :add-label="t('registryConfig.addLabel')"
124
132
  :default-add-value="defaultAddValue"
133
+ :initial-empty-row="true"
125
134
  :mode="mode"
126
- @input="update()"
135
+ @input="update"
127
136
  >
128
137
  <template #default="{row}">
129
138
  <div class="row">
@@ -1,9 +1,13 @@
1
1
  <script>
2
+ import ArrayListGrouped from '@shell/components/form/ArrayListGrouped';
2
3
  import KeyValue from '@shell/components/form/KeyValue';
4
+ import { LabeledInput } from '@components/Form/LabeledInput';
3
5
  import { set } from '@shell/utils/object';
4
6
 
5
7
  export default {
6
- components: { KeyValue },
8
+ components: {
9
+ ArrayListGrouped, KeyValue, LabeledInput
10
+ },
7
11
 
8
12
  props: {
9
13
  mode: {
@@ -25,12 +29,29 @@ export default {
25
29
  entries.push({
26
30
  hostname,
27
31
  endpoints: (mirrorMap[hostname].endpoint || []).join(', '),
32
+ rewrite: mirrorMap[hostname].rewrite || {},
28
33
  });
29
34
  }
30
35
 
31
36
  return { entries };
32
37
  },
33
38
 
39
+ created() {
40
+ if (!this.value.spec.rkeConfig?.registries?.mirrors) {
41
+ set(this.value, 'spec.rkeConfig.registries.mirrors', {});
42
+ }
43
+ },
44
+
45
+ computed: {
46
+ defaultAddValue() {
47
+ return {
48
+ hostname: '',
49
+ endpoints: '',
50
+ rewrite: {}
51
+ };
52
+ },
53
+ },
54
+
34
55
  methods: {
35
56
  update(entries) {
36
57
  const mirrors = {};
@@ -41,8 +62,10 @@ export default {
41
62
  }
42
63
 
43
64
  mirrors[entry.hostname] = { endpoint: entry.endpoints.split(/\s*,\s*/).map(x => x.trim()) };
65
+ if (entry.rewrite) {
66
+ mirrors[entry.hostname].rewrite = entry.rewrite;
67
+ }
44
68
  }
45
-
46
69
  set(this.value, 'spec.rkeConfig.registries.mirrors', mirrors);
47
70
  },
48
71
  }
@@ -50,29 +73,66 @@ export default {
50
73
  </script>
51
74
 
52
75
  <template>
53
- <KeyValue
54
- key="labels"
55
- :value="entries"
56
- :as-map="false"
57
- key-label="Registry Hostname"
58
- key-name="hostname"
59
- key-placeholder="e.g. docker.io or *"
60
- value-label="Mirror Endpoints"
61
- value-placeholder="e.g. a.registry.com:5000, b.registry.com:5000"
62
- value-name="endpoints"
63
- :add-label="t('registryMirror.addLabel')"
64
- :mode="mode"
65
- :read-allowed="false"
66
- @input="update"
67
- >
68
- <template #title>
69
- <h3>
70
- {{ t('registryMirror.header') }}
71
- <i
72
- v-tooltip="t('registryMirror.toolTip')"
73
- class="icon icon-info"
74
- />
75
- </h3>
76
- </template>
77
- </KeyValue>
76
+ <div>
77
+ <h3>
78
+ {{ t('registryMirror.header') }}
79
+ <i
80
+ v-tooltip="t('registryMirror.toolTip')"
81
+ class="icon icon-info"
82
+ />
83
+ </h3>
84
+ <p class="mb-20">
85
+ {{ t('registryMirror.description') }}
86
+ </p>
87
+ <ArrayListGrouped
88
+ v-model="entries"
89
+ :add-label="t('registryMirror.addLabel')"
90
+ :default-add-value="defaultAddValue"
91
+ :initial-empty-row="true"
92
+ :mode="mode"
93
+ @input="update"
94
+ >
95
+ <template #default="{row}">
96
+ <div class="row">
97
+ <div class="col span-6">
98
+ <LabeledInput
99
+ v-model="row.value.hostname"
100
+ :label="t('registryMirror.hostnameLabel')"
101
+ :placeholder="t('registryMirror.hostnamePlaceholder')"
102
+ :mode="mode"
103
+ />
104
+ </div>
105
+ <div class="col span-6">
106
+ <LabeledInput
107
+ v-model="row.value.endpoints"
108
+ :label="t('registryMirror.endpointsLabel')"
109
+ :placeholder="t('registryMirror.endpointsPlaceholder')"
110
+ :mode="mode"
111
+ />
112
+ </div>
113
+ </div>
114
+ <div class="row mt-20">
115
+ <div class="col span-12">
116
+ <h3>
117
+ {{ t('registryMirrorRewrite.header') }}
118
+ <i
119
+ v-tooltip="t('registryMirrorRewrite.toolTip')"
120
+ class="icon icon-info"
121
+ />
122
+ </h3>
123
+ <KeyValue
124
+ v-model="row.value.rewrite"
125
+ :mode="mode"
126
+ :add-label="t('registryMirrorRewrite.addLabel')"
127
+ :read-allowed="false"
128
+ :key-label="t('registryMirrorRewrite.keyLabel')"
129
+ :key-placeholder="t('registryMirrorRewrite.keyPlaceholder')"
130
+ :value-label="t('registryMirrorRewrite.valueLabel')"
131
+ :value-placeholder="t('registryMirrorRewrite.valuePlaceholder')"
132
+ />
133
+ </div>
134
+ </div>
135
+ </template>
136
+ </ArrayListGrouped>
137
+ </div>
78
138
  </template>
@@ -6,7 +6,6 @@ import CreateEditView from '@shell/mixins/create-edit-view';
6
6
  import CruResource from '@shell/components/CruResource';
7
7
  import NameNsDescription from '@shell/components/form/NameNsDescription';
8
8
  import { Banner } from '@components/Banner';
9
- import { importCloudCredential } from '@shell/utils/dynamic-importer';
10
9
  import { CAPI } from '@shell/config/labels-annotations';
11
10
  import { clear } from '@shell/utils/array';
12
11
 
@@ -132,13 +131,11 @@ export default {
132
131
  },
133
132
 
134
133
  createComponent() {
135
- const haveDrivers = this.$store.getters['plugins/credentialDrivers'];
136
-
137
- if ( haveDrivers.includes(this.driverName) ) {
138
- return importCloudCredential(this.driverName);
134
+ if (this.$store.getters['type-map/hasCustomCloudCredentialComponent'](this.driverName)) {
135
+ return this.$store.getters['type-map/importCloudCredential'](this.driverName);
139
136
  }
140
137
 
141
- return importCloudCredential('generic');
138
+ return this.$store.getters['type-map/importCloudCredential']('generic');
142
139
  },
143
140
 
144
141
  validationPassed() {