@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
@@ -16,7 +16,7 @@ import UnitInput from '@shell/components/form/UnitInput';
16
16
  import { NODE, PVC, STORAGE_CLASS } from '@shell/config/types';
17
17
  import Loading from '@shell/components/Loading';
18
18
  import { LONGHORN_PLUGIN, VOLUME_PLUGINS } from '@shell/models/persistentvolume';
19
- import { _CREATE, _VIEW, _EDIT } from '@shell/config/query-params';
19
+ import { _CREATE, _VIEW } from '@shell/config/query-params';
20
20
  import { clone } from '@shell/utils/object';
21
21
  import InfoBox from '@shell/components/InfoBox';
22
22
  import { mapFeature, UNSUPPORTED_STORAGE_DRIVERS } from '@shell/store/features';
@@ -44,7 +44,7 @@ export default {
44
44
  mixins: [CreateEditView, ResourceManager],
45
45
 
46
46
  fetch() {
47
- if (this.mode === _EDIT) {
47
+ if (this.mode !== _CREATE) {
48
48
  this.secondaryResourceData.namespace = this.value?.spec?.claimRef?.namespace || null;
49
49
 
50
50
  this.secondaryResourceData.data[PVC] = {
@@ -80,34 +80,13 @@ export default {
80
80
  const plugin = (foundPlugin || VOLUME_PLUGINS[0]).value;
81
81
 
82
82
  return {
83
- secondaryResourceData: {
84
- namespace: null,
85
- data: {
86
- [STORAGE_CLASS]: {
87
- applyTo: [
88
- {
89
- var: 'storageClassOptions',
90
- parsingFunc: (data) => {
91
- const storageClassOptions = data.map(s => ({
92
- label: s.metadata.name,
93
- value: s.metadata.name
94
- }));
95
-
96
- storageClassOptions.unshift(this.NONE_OPTION);
97
-
98
- return storageClassOptions;
99
- }
100
- }
101
- ]
102
- },
103
- }
104
- },
105
- storageClassOptions: [],
106
- currentClaim: null,
83
+ secondaryResourceData: this.secondaryResourceDataConfig(),
84
+ storageClassOptions: [],
85
+ currentClaim: null,
107
86
  plugin,
108
87
  NONE_OPTION,
109
88
  NODE,
110
- initialNodeAffinity: clone(this.value.spec.nodeAffinity),
89
+ initialNodeAffinity: clone(this.value.spec.nodeAffinity),
111
90
  };
112
91
  },
113
92
 
@@ -175,6 +154,30 @@ export default {
175
154
  },
176
155
 
177
156
  methods: {
157
+ secondaryResourceDataConfig() {
158
+ return {
159
+ namespace: null,
160
+ data: {
161
+ [STORAGE_CLASS]: {
162
+ applyTo: [
163
+ {
164
+ var: 'storageClassOptions',
165
+ parsingFunc: (data) => {
166
+ const storageClassOptions = data.map(s => ({
167
+ label: s.metadata.name,
168
+ value: s.metadata.name
169
+ }));
170
+
171
+ storageClassOptions.unshift(this.NONE_OPTION);
172
+
173
+ return storageClassOptions;
174
+ }
175
+ }
176
+ ]
177
+ },
178
+ }
179
+ };
180
+ },
178
181
  checkboxSetter(key, value) {
179
182
  if (value) {
180
183
  this.value.spec.accessModes.push(key);
@@ -42,47 +42,47 @@ 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.cephfs.path"
47
- :mode="mode"
48
- :label="t('persistentVolume.cephfs.path.label')"
49
- :placeholder="t('persistentVolume.cephfs.path.placeholder')"
45
+ <LabeledInput
46
+ v-model="value.spec.cephfs.path"
47
+ :mode="mode"
48
+ :label="t('persistentVolume.cephfs.path.label')"
49
+ :placeholder="t('persistentVolume.cephfs.path.placeholder')"
50
50
  />
51
51
  </div>
52
52
  <div class="col span-6">
53
- <LabeledInput
54
- v-model="value.spec.cephfs.user"
55
- :mode="mode"
56
- :label="t('persistentVolume.cephfs.user.label')"
57
- :placeholder="t('persistentVolume.cephfs.user.placeholder')"
53
+ <LabeledInput
54
+ v-model="value.spec.cephfs.user"
55
+ :mode="mode"
56
+ :label="t('persistentVolume.cephfs.user.label')"
57
+ :placeholder="t('persistentVolume.cephfs.user.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.cephfs.secretFile"
65
- :mode="mode"
66
- :label="t('persistentVolume.cephfs.secretFile.label')"
67
- :placeholder="t('persistentVolume.cephfs.secretFile.placeholder')"
63
+ <LabeledInput
64
+ v-model="value.spec.cephfs.secretFile"
65
+ :mode="mode"
66
+ :label="t('persistentVolume.cephfs.secretFile.label')"
67
+ :placeholder="t('persistentVolume.cephfs.secretFile.placeholder')"
68
68
  />
69
69
  </div>
70
70
  <div class="col span-6">
71
- <LabeledInput
72
- v-model="value.spec.cephfs.secretRef.name"
73
- :mode="mode"
74
- :label="t('persistentVolume.shared.secretName.label')"
75
- :placeholder="t('persistentVolume.shared.secretName.placeholder')"
71
+ <LabeledInput
72
+ v-model="value.spec.cephfs.secretRef.name"
73
+ :mode="mode"
74
+ :label="t('persistentVolume.shared.secretName.label')"
75
+ :placeholder="t('persistentVolume.shared.secretName.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.cephfs.secretRef.namespace"
83
- :mode="mode"
84
- :label="t('persistentVolume.shared.secretNamespace.label')"
85
- :placeholder="t('persistentVolume.shared.secretNamespace.placeholder')"
81
+ <LabeledInput
82
+ v-model="value.spec.cephfs.secretRef.namespace"
83
+ :mode="mode"
84
+ :label="t('persistentVolume.shared.secretNamespace.label')"
85
+ :placeholder="t('persistentVolume.shared.secretNamespace.placeholder')"
86
86
  />
87
87
  </div>
88
88
  </div>
@@ -98,10 +98,10 @@ export default {
98
98
  />
99
99
  </div>
100
100
  <div class="col span-6">
101
- <ArrayList
102
- v-model="value.spec.cephfs.monitors"
103
- :add-label="t('persistentVolume.shared.monitors.add')"
104
- :mode="mode"
101
+ <ArrayList
102
+ v-model="value.spec.cephfs.monitors"
103
+ :add-label="t('persistentVolume.shared.monitors.add')"
104
+ :mode="mode"
105
105
  />
106
106
  </div>
107
107
  </div>
@@ -2,10 +2,16 @@
2
2
  import { LabeledInput } from '@components/Form/LabeledInput';
3
3
  import { RadioGroup } from '@components/Form/Radio';
4
4
  import KeyValue from '@shell/components/form/KeyValue';
5
+ import LabeledSelect from '@shell/components/form/LabeledSelect';
6
+ import { CSI_DRIVER } from '@shell/config/types';
7
+ import { set } from '@shell/utils/object';
5
8
 
6
9
  export default {
7
10
  components: {
8
- KeyValue, LabeledInput, RadioGroup
11
+ KeyValue,
12
+ LabeledInput,
13
+ RadioGroup,
14
+ LabeledSelect
9
15
  },
10
16
  props: {
11
17
  value: {
@@ -17,6 +23,18 @@ export default {
17
23
  required: true,
18
24
  },
19
25
  },
26
+
27
+ fetch() {
28
+ if (this.$store.getters['cluster/schemaFor'](CSI_DRIVER)) {
29
+ this.$store.dispatch('cluster/findAll', { type: CSI_DRIVER }).then((drivers) => {
30
+ this.csiDrivers = drivers;
31
+ this.loadingDrivers = false;
32
+ });
33
+ } else {
34
+ this.loadingDrivers = false;
35
+ }
36
+ },
37
+
20
38
  data() {
21
39
  const readOnlyOptions = [
22
40
  {
@@ -36,8 +54,25 @@ export default {
36
54
  this.$set(this.value.spec.csi, 'controllerExpandSecretRef', this.value.spec.csi.controllerExpandSecretRef || {});
37
55
  this.$set(this.value.spec.csi, 'controllerPublishSecretRef', this.value.spec.csi.controllerPublishSecretRef || {});
38
56
 
39
- return { readOnlyOptions };
57
+ return {
58
+ readOnlyOptions,
59
+ loadingDrivers: true,
60
+ csiDrivers: [],
61
+ };
62
+ },
63
+
64
+ computed: {
65
+ driverOptions() {
66
+ return this.csiDrivers.map((driver) => {
67
+ return driver.metadata.name;
68
+ });
69
+ }
40
70
  },
71
+ methods: {
72
+ selectDriver(e) {
73
+ set(this.value, 'spec.csi.driver', e.value ? e.value : e.label);
74
+ }
75
+ }
41
76
  };
42
77
  </script>
43
78
 
@@ -45,29 +80,34 @@ export default {
45
80
  <div>
46
81
  <div class="row mb-20">
47
82
  <div class="col span-6">
48
- <LabeledInput
49
- v-model="value.spec.csi.driver"
50
- :mode="mode"
51
- :label="t('persistentVolume.csi.driver.label')"
52
- :placeholder="t('persistentVolume.csi.driver.placeholder')"
83
+ <LabeledSelect
84
+ :value="value.spec.csi.driver"
85
+ :loading="loadingDrivers"
86
+ :options="driverOptions"
87
+ :mode="mode"
88
+ :label="t('persistentVolume.csi.driver.label')"
89
+ :placeholder="t('persistentVolume.csi.driver.placeholder')"
90
+ searchable
91
+ taggable
92
+ @selecting="selectDriver"
53
93
  />
54
94
  </div>
55
95
  <div class="col span-6">
56
- <LabeledInput
57
- v-model="value.spec.csi.fsType"
58
- :mode="mode"
59
- :label="t('persistentVolume.shared.filesystemType.label')"
60
- :placeholder="t('persistentVolume.shared.filesystemType.placeholder')"
96
+ <LabeledInput
97
+ v-model="value.spec.csi.fsType"
98
+ :mode="mode"
99
+ :label="t('persistentVolume.shared.filesystemType.label')"
100
+ :placeholder="t('persistentVolume.shared.filesystemType.placeholder')"
61
101
  />
62
102
  </div>
63
103
  </div>
64
104
  <div class="row mb-20">
65
105
  <div class="col span-6">
66
- <LabeledInput
67
- v-model="value.spec.csi.volumeHandle"
68
- :mode="mode"
69
- :label="t('persistentVolume.csi.volumeHandle.label')"
70
- :placeholder="t('persistentVolume.csi.volumeHandle.placeholder')"
106
+ <LabeledInput
107
+ v-model="value.spec.csi.volumeHandle"
108
+ :mode="mode"
109
+ :label="t('persistentVolume.csi.volumeHandle.label')"
110
+ :placeholder="t('persistentVolume.csi.volumeHandle.placeholder')"
71
111
  />
72
112
  </div>
73
113
  <div class="col span-6">
@@ -83,83 +123,83 @@ export default {
83
123
  </div>
84
124
  <div class="row mb-20">
85
125
  <div class="col span-12">
86
- <KeyValue
87
- v-model="value.spec.csi.volumeAttributes"
88
- :add-label="t('persistentVolume.csi.volumeAttributes.add')"
89
- :mode="mode"
90
- :read-allowed="false"
126
+ <KeyValue
127
+ v-model="value.spec.csi.volumeAttributes"
128
+ :add-label="t('persistentVolume.csi.volumeAttributes.add')"
129
+ :mode="mode"
130
+ :read-allowed="false"
91
131
  />
92
132
  </div>
93
133
  </div>
94
134
  <div class="row mb-20">
95
135
  <div class="col span-6">
96
- <LabeledInput
97
- v-model="value.spec.csi.nodePublishSecretRef.name"
98
- :mode="mode"
99
- :label="t('persistentVolume.csi.nodePublishSecretName.label')"
100
- :placeholder="t('persistentVolume.csi.nodePublishSecretName.placeholder')"
136
+ <LabeledInput
137
+ v-model="value.spec.csi.nodePublishSecretRef.name"
138
+ :mode="mode"
139
+ :label="t('persistentVolume.csi.nodePublishSecretName.label')"
140
+ :placeholder="t('persistentVolume.csi.nodePublishSecretName.placeholder')"
101
141
  />
102
142
  </div>
103
143
  <div class="col span-6">
104
- <LabeledInput
105
- v-model="value.spec.csi.nodePublishSecretRef.namespace"
106
- :mode="mode"
107
- :label="t('persistentVolume.csi.nodePublishSecretNamespace.label')"
108
- :placeholder="t('persistentVolume.csi.nodePublishSecretNamespace.placeholder')"
144
+ <LabeledInput
145
+ v-model="value.spec.csi.nodePublishSecretRef.namespace"
146
+ :mode="mode"
147
+ :label="t('persistentVolume.csi.nodePublishSecretNamespace.label')"
148
+ :placeholder="t('persistentVolume.csi.nodePublishSecretNamespace.placeholder')"
109
149
  />
110
150
  </div>
111
151
  </div>
112
152
  <div class="row mb-20">
113
153
  <div class="col span-6">
114
- <LabeledInput
115
- v-model="value.spec.csi.nodeStageSecretRef.name"
116
- :mode="mode"
117
- :label="t('persistentVolume.csi.nodeStageSecretName.label')"
118
- :placeholder="t('persistentVolume.csi.nodeStageSecretName.placeholder')"
154
+ <LabeledInput
155
+ v-model="value.spec.csi.nodeStageSecretRef.name"
156
+ :mode="mode"
157
+ :label="t('persistentVolume.csi.nodeStageSecretName.label')"
158
+ :placeholder="t('persistentVolume.csi.nodeStageSecretName.placeholder')"
119
159
  />
120
160
  </div>
121
161
  <div class="col span-6">
122
- <LabeledInput
123
- v-model="value.spec.csi.nodeStageSecretRef.namespace"
124
- :mode="mode"
125
- :label="t('persistentVolume.csi.nodeStageSecretNamespace.label')"
126
- :placeholder="t('persistentVolume.csi.nodeStageSecretNamespace.placeholder')"
162
+ <LabeledInput
163
+ v-model="value.spec.csi.nodeStageSecretRef.namespace"
164
+ :mode="mode"
165
+ :label="t('persistentVolume.csi.nodeStageSecretNamespace.label')"
166
+ :placeholder="t('persistentVolume.csi.nodeStageSecretNamespace.placeholder')"
127
167
  />
128
168
  </div>
129
169
  </div>
130
170
  <div class="row mb-20">
131
171
  <div class="col span-6">
132
- <LabeledInput
133
- v-model="value.spec.csi.controllerExpandSecretRef.name"
134
- :mode="mode"
135
- :label="t('persistentVolume.csi.controllerExpandSecretName.label')"
136
- :placeholder="t('persistentVolume.csi.controllerExpandSecretName.placeholder')"
172
+ <LabeledInput
173
+ v-model="value.spec.csi.controllerExpandSecretRef.name"
174
+ :mode="mode"
175
+ :label="t('persistentVolume.csi.controllerExpandSecretName.label')"
176
+ :placeholder="t('persistentVolume.csi.controllerExpandSecretName.placeholder')"
137
177
  />
138
178
  </div>
139
179
  <div class="col span-6">
140
- <LabeledInput
141
- v-model="value.spec.csi.controllerExpandSecretRef.namespace"
142
- :mode="mode"
143
- :label="t('persistentVolume.csi.controllerExpandSecretNamespace.label')"
144
- :placeholder="t('persistentVolume.csi.controllerExpandSecretNamespace.placeholder')"
180
+ <LabeledInput
181
+ v-model="value.spec.csi.controllerExpandSecretRef.namespace"
182
+ :mode="mode"
183
+ :label="t('persistentVolume.csi.controllerExpandSecretNamespace.label')"
184
+ :placeholder="t('persistentVolume.csi.controllerExpandSecretNamespace.placeholder')"
145
185
  />
146
186
  </div>
147
187
  </div>
148
188
  <div class="row mb-20">
149
189
  <div class="col span-6">
150
- <LabeledInput
151
- v-model="value.spec.csi.controllerPublishSecretRef.name"
152
- :mode="mode"
153
- :label="t('persistentVolume.csi.controllerPublishSecretName.label')"
154
- :placeholder="t('persistentVolume.csi.controllerPublishSecretName.placeholder')"
190
+ <LabeledInput
191
+ v-model="value.spec.csi.controllerPublishSecretRef.name"
192
+ :mode="mode"
193
+ :label="t('persistentVolume.csi.controllerPublishSecretName.label')"
194
+ :placeholder="t('persistentVolume.csi.controllerPublishSecretName.placeholder')"
155
195
  />
156
196
  </div>
157
197
  <div class="col span-6">
158
- <LabeledInput
159
- v-model="value.spec.csi.controllerPublishSecretRef.namespace"
160
- :mode="mode"
161
- :label="t('persistentVolume.csi.controllerPublishSecretNamespace.label')"
162
- :placeholder="t('persistentVolume.csi.controllerPublishSecretNamespace.placeholder')"
198
+ <LabeledInput
199
+ v-model="value.spec.csi.controllerPublishSecretRef.namespace"
200
+ :mode="mode"
201
+ :label="t('persistentVolume.csi.controllerPublishSecretNamespace.label')"
202
+ :placeholder="t('persistentVolume.csi.controllerPublishSecretNamespace.placeholder')"
163
203
  />
164
204
  </div>
165
205
  </div>
@@ -52,36 +52,36 @@ export default {
52
52
  <div>
53
53
  <div class="row mb-20">
54
54
  <div class="col span-6">
55
- <ArrayList
56
- v-model="value.spec.fc.targetWWNs"
57
- :add-label="t('persistentVolume.fc.targetWWNS.add')"
58
- :mode="mode"
55
+ <ArrayList
56
+ v-model="value.spec.fc.targetWWNs"
57
+ :add-label="t('persistentVolume.fc.targetWWNS.add')"
58
+ :mode="mode"
59
59
  />
60
60
  </div>
61
61
  <div class="col span-6">
62
- <ArrayList
63
- v-model="value.spec.fc.wwids"
64
- :add-label="t('persistentVolume.fc.wwids.add')"
65
- :mode="mode"
62
+ <ArrayList
63
+ v-model="value.spec.fc.wwids"
64
+ :add-label="t('persistentVolume.fc.wwids.add')"
65
+ :mode="mode"
66
66
  />
67
67
  </div>
68
68
  </div>
69
69
  <div class="row mb-20">
70
70
  <div class="col span-6">
71
- <LabeledInput
72
- v-model="lun"
73
- :mode="mode"
74
- :label="t('persistentVolume.fc.lun.label')"
75
- :placeholder="t('persistentVolume.fc.lun.placeholder')"
76
- type="number"
71
+ <LabeledInput
72
+ v-model="lun"
73
+ :mode="mode"
74
+ :label="t('persistentVolume.fc.lun.label')"
75
+ :placeholder="t('persistentVolume.fc.lun.placeholder')"
76
+ type="number"
77
77
  />
78
78
  </div>
79
79
  <div class="col span-6">
80
- <LabeledInput
81
- v-model="value.spec.fc.fsType"
82
- :mode="mode"
83
- :label="t('persistentVolume.shared.filesystemType.label')"
84
- :placeholder="t('persistentVolume.shared.filesystemType.placeholder')"
80
+ <LabeledInput
81
+ v-model="value.spec.fc.fsType"
82
+ :mode="mode"
83
+ :label="t('persistentVolume.shared.filesystemType.label')"
84
+ :placeholder="t('persistentVolume.shared.filesystemType.placeholder')"
85
85
  />
86
86
  </div>
87
87
  </div>
@@ -54,19 +54,19 @@ export default {
54
54
  <div>
55
55
  <div class="row mb-20">
56
56
  <div class="col span-6">
57
- <LabeledInput
58
- v-model="value.spec.iscsi.initiatorName"
59
- :mode="mode"
60
- :label="t('persistentVolume.iscsi.initiatorName.label')"
61
- :placeholder="t('persistentVolume.iscsi.initiatorName.placeholder')"
57
+ <LabeledInput
58
+ v-model="value.spec.iscsi.initiatorName"
59
+ :mode="mode"
60
+ :label="t('persistentVolume.iscsi.initiatorName.label')"
61
+ :placeholder="t('persistentVolume.iscsi.initiatorName.placeholder')"
62
62
  />
63
63
  </div>
64
64
  <div class="col span-6">
65
- <LabeledInput
66
- v-model="value.spec.iscsi.iscsiInterface"
67
- :mode="mode"
68
- :label="t('persistentVolume.iscsi.iscsiInterface.label')"
69
- :placeholder="t('persistentVolume.iscsi.iscsiInterface.placeholder')"
65
+ <LabeledInput
66
+ v-model="value.spec.iscsi.iscsiInterface"
67
+ :mode="mode"
68
+ :label="t('persistentVolume.iscsi.iscsiInterface.label')"
69
+ :placeholder="t('persistentVolume.iscsi.iscsiInterface.placeholder')"
70
70
  />
71
71
  </div>
72
72
  </div>
@@ -94,65 +94,65 @@ export default {
94
94
  </div>
95
95
  <div class="row mb-20">
96
96
  <div class="col span-6">
97
- <LabeledInput
98
- v-model="value.spec.iscsi.iqn"
99
- :mode="mode"
100
- :label="t('persistentVolume.iscsi.iqn.label')"
101
- :placeholder="t('persistentVolume.iscsi.iqn.placeholder')"
97
+ <LabeledInput
98
+ v-model="value.spec.iscsi.iqn"
99
+ :mode="mode"
100
+ :label="t('persistentVolume.iscsi.iqn.label')"
101
+ :placeholder="t('persistentVolume.iscsi.iqn.placeholder')"
102
102
  />
103
103
  </div>
104
104
  <div class="col span-6">
105
- <LabeledInput
106
- v-model="lun"
107
- :mode="mode"
108
- :label="t('persistentVolume.iscsi.lun.label')"
109
- :placeholder="t('persistentVolume.iscsi.lun.placeholder')"
110
- type="number"
105
+ <LabeledInput
106
+ v-model="lun"
107
+ :mode="mode"
108
+ :label="t('persistentVolume.iscsi.lun.label')"
109
+ :placeholder="t('persistentVolume.iscsi.lun.placeholder')"
110
+ type="number"
111
111
  />
112
112
  </div>
113
113
  </div>
114
114
  <div class="row mb-20">
115
115
  <div class="col span-6">
116
- <LabeledInput
117
- v-model="value.spec.iscsi.targetPortal"
118
- :mode="mode"
119
- :label="t('persistentVolume.iscsi.targetPortal.label')"
120
- :placeholder="t('persistentVolume.iscsi.targetPortal.placeholder')"
116
+ <LabeledInput
117
+ v-model="value.spec.iscsi.targetPortal"
118
+ :mode="mode"
119
+ :label="t('persistentVolume.iscsi.targetPortal.label')"
120
+ :placeholder="t('persistentVolume.iscsi.targetPortal.placeholder')"
121
121
  />
122
122
  </div>
123
123
  <div class="col span-6">
124
- <ArrayList
125
- v-model="value.spec.iscsi.portals"
126
- :mode="mode"
127
- :add-label="t('persistentVolume.iscsi.portals.add')"
124
+ <ArrayList
125
+ v-model="value.spec.iscsi.portals"
126
+ :mode="mode"
127
+ :add-label="t('persistentVolume.iscsi.portals.add')"
128
128
  />
129
129
  </div>
130
130
  </div>
131
131
  <div class="row mb-20">
132
132
  <div class="col span-6">
133
- <LabeledInput
134
- v-model="value.spec.iscsi.secretRef.name"
135
- :mode="mode"
136
- :label="t('persistentVolume.shared.secretName.label')"
137
- :placeholder="t('persistentVolume.shared.secretName.placeholder')"
133
+ <LabeledInput
134
+ v-model="value.spec.iscsi.secretRef.name"
135
+ :mode="mode"
136
+ :label="t('persistentVolume.shared.secretName.label')"
137
+ :placeholder="t('persistentVolume.shared.secretName.placeholder')"
138
138
  />
139
139
  </div>
140
140
  <div class="col span-6">
141
- <LabeledInput
142
- v-model="value.spec.iscsi.secretRef.namespace"
143
- :mode="mode"
144
- :label="t('persistentVolume.shared.secretNamespace.label')"
145
- :placeholder="t('persistentVolume.shared.secretNamespace.placeholder')"
141
+ <LabeledInput
142
+ v-model="value.spec.iscsi.secretRef.namespace"
143
+ :mode="mode"
144
+ :label="t('persistentVolume.shared.secretNamespace.label')"
145
+ :placeholder="t('persistentVolume.shared.secretNamespace.placeholder')"
146
146
  />
147
147
  </div>
148
148
  </div>
149
149
  <div class="row mb-20">
150
150
  <div class="col span-6">
151
- <LabeledInput
152
- v-model="value.spec.iscsi.fsType"
153
- :mode="mode"
154
- :label="t('persistentVolume.shared.filesystemType.label')"
155
- :placeholder="t('persistentVolume.shared.filesystemType.placeholder')"
151
+ <LabeledInput
152
+ v-model="value.spec.iscsi.fsType"
153
+ :mode="mode"
154
+ :label="t('persistentVolume.shared.filesystemType.label')"
155
+ :placeholder="t('persistentVolume.shared.filesystemType.placeholder')"
156
156
  />
157
157
  </div>
158
158
  <div class="col span-6">