@rancher/shell 0.1.2 → 0.1.3

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 (258) hide show
  1. package/assets/translations/en-us.yaml +27 -769
  2. package/assets/translations/zh-hans.yaml +8 -769
  3. package/components/ActionMenu.vue +3 -3
  4. package/components/CodeMirror.vue +6 -8
  5. package/components/CommunityLinks.vue +1 -1
  6. package/components/ContainerResourceLimit.vue +14 -0
  7. package/components/ExplorerMembers.vue +123 -0
  8. package/components/ExplorerProjectsNamespaces.vue +405 -0
  9. package/components/GrafanaDashboard.vue +17 -2
  10. package/components/LocaleSelector.vue +81 -0
  11. package/components/PromptModal.vue +2 -3
  12. package/components/ResourceList/index.vue +1 -1
  13. package/components/ResourceTable.vue +3 -6
  14. package/components/SingleClusterInfo.vue +1 -1
  15. package/components/SortableTable/index.vue +23 -20
  16. package/components/SortableTable/selection.js +1 -0
  17. package/components/auth/AzureWarning.vue +5 -1
  18. package/components/auth/Principal.vue +1 -1
  19. package/components/auth/RoleDetailEdit.vue +18 -11
  20. package/components/fleet/FleetRepos.vue +0 -2
  21. package/components/form/NameNsDescription.vue +4 -6
  22. package/components/form/NodeScheduling.vue +1 -1
  23. package/components/form/WorkloadPorts.vue +1 -1
  24. package/components/formatter/WorkloadHealthScale.vue +1 -1
  25. package/components/nav/Header.vue +9 -9
  26. package/components/nav/NamespaceFilter.vue +7 -4
  27. package/components/nav/TopLevelMenu.vue +6 -43
  28. package/components/nav/WindowManager/ContainerLogs.vue +1 -1
  29. package/config/product/harvester-manager.js +64 -2
  30. package/config/product/manager.js +9 -0
  31. package/config/settings.js +17 -71
  32. package/config/table-headers.js +0 -1
  33. package/config/types.js +5 -25
  34. package/core/plugin-routes.ts +34 -22
  35. package/core/plugin.ts +15 -3
  36. package/core/plugins-loader.js +2 -0
  37. package/core/plugins.js +79 -36
  38. package/core/types.ts +7 -1
  39. package/detail/provisioning.cattle.io.cluster.vue +13 -0
  40. package/detail/workload/index.vue +11 -5
  41. package/{components/dialog → dialog}/AddClusterMemberDialog.vue +0 -0
  42. package/{components/dialog → dialog}/AddCustomBadgeDialog.vue +0 -0
  43. package/{components/dialog → dialog}/AddProjectMemberDialog.vue +0 -0
  44. package/{components/dialog → dialog}/AddonConfigConfirmationDialog.vue +0 -0
  45. package/{components/dialog → dialog}/DrainNode.vue +0 -0
  46. package/{components/dialog → dialog}/ForceMachineRemoveDialog.vue +0 -0
  47. package/{components/dialog → dialog}/GenericPrompt.vue +0 -0
  48. package/{components/dialog → dialog}/RollbackWorkloadDialog.vue +0 -0
  49. package/{components/dialog → dialog}/RotateCertificatesDialog.vue +0 -0
  50. package/{components/dialog → dialog}/RotateEncryptionKeyDialog.vue +0 -0
  51. package/{components/dialog → dialog}/SaveAsRKETemplateDialog.vue +0 -0
  52. package/{components/dialog → dialog}/ScaleMachineDownDialog.vue +0 -0
  53. package/edit/auth/azuread.vue +20 -1
  54. package/edit/management.cattle.io.project.vue +2 -2
  55. package/edit/namespace.vue +17 -10
  56. package/edit/persistentvolumeclaim.vue +1 -0
  57. package/edit/provisioning.cattle.io.cluster/CustomCommand.vue +1 -1
  58. package/edit/provisioning.cattle.io.cluster/MachinePool.vue +33 -5
  59. package/edit/service.vue +1 -1
  60. package/edit/workload/index.vue +363 -15
  61. package/edit/workload/mixins/workload.js +62 -7
  62. package/edit/workload/storage/persistentVolumeClaim/persistentvolumeclaim.vue +1 -0
  63. package/layouts/default.vue +52 -27
  64. package/layouts/error.vue +5 -1
  65. package/layouts/home.vue +6 -2
  66. package/list/harvesterhci.io.management.cluster.vue +74 -33
  67. package/list/namespace.vue +3 -5
  68. package/machine-config/amazonec2.vue +2 -0
  69. package/machine-config/harvester.vue +96 -49
  70. package/middleware/authenticated.js +56 -52
  71. package/mixins/form-validation.js +1 -1
  72. package/mixins/resource-fetch.js +3 -1
  73. package/models/fleet.cattle.io.bundle.js +26 -19
  74. package/models/harvesterhci.io.management.cluster.js +194 -5
  75. package/models/management.cattle.io.cluster.js +1 -1
  76. package/models/management.cattle.io.clusterroletemplatebinding.js +9 -0
  77. package/models/management.cattle.io.project.js +23 -2
  78. package/models/namespace.js +19 -3
  79. package/models/pod.js +19 -2
  80. package/models/provisioning.cattle.io.cluster.js +4 -0
  81. package/models/workload.js +4 -243
  82. package/models/workload.service.js +314 -0
  83. package/nuxt.config.js +11 -9
  84. package/package.json +3 -3
  85. package/pages/auth/login.vue +11 -2
  86. package/pages/auth/setup.vue +1 -1
  87. package/pages/c/_cluster/_product/members/index.vue +3 -93
  88. package/pages/c/_cluster/_product/projectsnamespaces.vue +6 -403
  89. package/pages/c/_cluster/settings/performance.vue +19 -16
  90. package/pages/fail-whale.vue +1 -10
  91. package/pages/index.vue +18 -4
  92. package/pages/plugins.vue +2 -2
  93. package/pages/prefs.vue +8 -6
  94. package/pkg/auto-import.js +44 -7
  95. package/pkg/dynamic-plugin-loader.js +28 -0
  96. package/pkg/import.js +2 -2
  97. package/pkg/model-loader-require.lib.js +3 -0
  98. package/pkg/vue.config.js +9 -6
  99. package/plugins/dashboard-store/model-loader-require.js +12 -0
  100. package/plugins/dashboard-store/model-loader.js +4 -1
  101. package/plugins/dashboard-store/resource-class.js +10 -3
  102. package/plugins/steve/actions.js +1 -1
  103. package/plugins/steve/index.js +6 -4
  104. package/plugins/steve/subscribe.js +34 -23
  105. package/rancher-components/Form/Checkbox/Checkbox.test.ts +77 -0
  106. package/rancher-components/Form/Checkbox/Checkbox.vue +12 -2
  107. package/scripts/build-pkg.sh +48 -2
  108. package/scripts/drone-build-pkg.sh +31 -0
  109. package/scripts/publish-shell.sh +10 -11
  110. package/scripts/serve-pkgs +17 -10
  111. package/store/catalog.js +3 -1
  112. package/store/i18n.js +16 -11
  113. package/store/index.js +4 -181
  114. package/store/prefs.js +30 -2
  115. package/store/type-map.js +16 -29
  116. package/utils/cluster.js +1 -1
  117. package/utils/custom-validators.js +1 -12
  118. package/utils/dynamic-importer.js +1 -1
  119. package/utils/validators/setting.js +0 -35
  120. package/components/FilterLabel.vue +0 -254
  121. package/components/HarvesterUpgradeProgressBarList.vue +0 -109
  122. package/components/VMConsoleBar.vue +0 -87
  123. package/components/dialog/harvester/AddHotplugModal.vue +0 -159
  124. package/components/dialog/harvester/BackupModal.vue +0 -117
  125. package/components/dialog/harvester/CloneTemplate.vue +0 -125
  126. package/components/dialog/harvester/EjectCDROMDialog.vue +0 -157
  127. package/components/dialog/harvester/ExportImageDialog.vue +0 -152
  128. package/components/dialog/harvester/MaintenanceDialog.vue +0 -94
  129. package/components/dialog/harvester/MigrationDialog.vue +0 -154
  130. package/components/dialog/harvester/RestoreDialog.vue +0 -153
  131. package/components/dialog/harvester/SupportBundle.vue +0 -217
  132. package/components/dialog/harvester/UnplugVolume.vue +0 -108
  133. package/components/form/SerialConsole/index.vue +0 -267
  134. package/components/formatter/AttachVMWithName.vue +0 -46
  135. package/components/formatter/CloudInitType.vue +0 -27
  136. package/components/formatter/HarvesterBackupTargetValidation.vue +0 -43
  137. package/components/formatter/HarvesterCPUUsed.vue +0 -122
  138. package/components/formatter/HarvesterDiskState.vue +0 -66
  139. package/components/formatter/HarvesterHostName.vue +0 -66
  140. package/components/formatter/HarvesterIpAddress.vue +0 -90
  141. package/components/formatter/HarvesterMemoryUsed.vue +0 -140
  142. package/components/formatter/HarvesterMigrationState.vue +0 -85
  143. package/components/formatter/HarvesterNodeName.vue +0 -49
  144. package/components/formatter/HarvesterStorageUsed.vue +0 -194
  145. package/components/formatter/HarvesterVmState.vue +0 -123
  146. package/components/nav/HarvesterUpgrade.vue +0 -232
  147. package/components/novnc/NovncConsole.vue +0 -93
  148. package/components/novnc/NovncConsoleItem.vue +0 -89
  149. package/components/novnc/NovncConsoleWrapper.vue +0 -243
  150. package/config/harvester-map.js +0 -44
  151. package/config/harvester-table-headers.js +0 -27
  152. package/config/product/harvester.js +0 -305
  153. package/detail/harvesterhci.io.host/HarvesterHostBasic.vue +0 -364
  154. package/detail/harvesterhci.io.host/HarvesterHostDisk.vue +0 -200
  155. package/detail/harvesterhci.io.host/HarvesterHostNetwork.vue +0 -89
  156. package/detail/harvesterhci.io.host/VirtualMachineInstance.vue +0 -134
  157. package/detail/harvesterhci.io.host/index.vue +0 -243
  158. package/detail/harvesterhci.io.virtualmachinebackup/index.vue +0 -221
  159. package/detail/harvesterhci.io.virtualmachineimage.vue +0 -118
  160. package/detail/kubevirt.io.virtualmachine/VirtualMachineTabs/VirtualMachineBasics.vue +0 -279
  161. package/detail/kubevirt.io.virtualmachine/VirtualMachineTabs/VirtualMachineEvents.vue +0 -75
  162. package/detail/kubevirt.io.virtualmachine/VirtualMachineTabs/VirtualMachineKeypairs.vue +0 -114
  163. package/detail/kubevirt.io.virtualmachine/VirtualMachineTabs/VirtualMachineMigration.vue +0 -79
  164. package/detail/kubevirt.io.virtualmachine/index.vue +0 -213
  165. package/edit/harvesterhci.io.cloudtemplate.vue +0 -123
  166. package/edit/harvesterhci.io.host/HarvesterDisk.vue +0 -262
  167. package/edit/harvesterhci.io.host/index.vue +0 -533
  168. package/edit/harvesterhci.io.keypair.vue +0 -112
  169. package/edit/harvesterhci.io.managedchart/index.vue +0 -25
  170. package/edit/harvesterhci.io.managedchart/rancher-monitoring.vue +0 -172
  171. package/edit/harvesterhci.io.networkattachmentdefinition.vue +0 -210
  172. package/edit/harvesterhci.io.setting/additional-ca.vue +0 -36
  173. package/edit/harvesterhci.io.setting/backup-target.vue +0 -182
  174. package/edit/harvesterhci.io.setting/http-proxy.vue +0 -79
  175. package/edit/harvesterhci.io.setting/index.vue +0 -201
  176. package/edit/harvesterhci.io.setting/overcommit-config.vue +0 -94
  177. package/edit/harvesterhci.io.setting/ssl-certificates.vue +0 -117
  178. package/edit/harvesterhci.io.setting/ssl-parameters.vue +0 -161
  179. package/edit/harvesterhci.io.setting/support-bundle-image.vue +0 -134
  180. package/edit/harvesterhci.io.setting/support-bundle-namespaces.vue +0 -73
  181. package/edit/harvesterhci.io.setting/vip-pools.vue +0 -244
  182. package/edit/harvesterhci.io.setting/vm-force-reset-policy.vue +0 -81
  183. package/edit/harvesterhci.io.virtualmachinebackup.vue +0 -256
  184. package/edit/harvesterhci.io.virtualmachineimage.vue +0 -364
  185. package/edit/harvesterhci.io.virtualmachinetemplateversion.vue +0 -340
  186. package/edit/harvesterhci.io.volume.vue +0 -195
  187. package/edit/kubevirt.io.virtualmachine/VirtualMachineAccessCredentials/AccessCredentialsUsers.vue +0 -190
  188. package/edit/kubevirt.io.virtualmachine/VirtualMachineAccessCredentials/index.vue +0 -212
  189. package/edit/kubevirt.io.virtualmachine/VirtualMachineAccessCredentials/type/basicAuth.vue +0 -94
  190. package/edit/kubevirt.io.virtualmachine/VirtualMachineAccessCredentials/type/sshkey.vue +0 -85
  191. package/edit/kubevirt.io.virtualmachine/VirtualMachineCloudConfig/DataTemplate.vue +0 -153
  192. package/edit/kubevirt.io.virtualmachine/VirtualMachineCloudConfig/index.vue +0 -279
  193. package/edit/kubevirt.io.virtualmachine/VirtualMachineCpuMemory.vue +0 -113
  194. package/edit/kubevirt.io.virtualmachine/VirtualMachineNetwork/__tests__/HarvesterEditNetwork.test.ts +0 -41
  195. package/edit/kubevirt.io.virtualmachine/VirtualMachineNetwork/base.vue +0 -281
  196. package/edit/kubevirt.io.virtualmachine/VirtualMachineNetwork/index.vue +0 -142
  197. package/edit/kubevirt.io.virtualmachine/VirtualMachineReserved.vue +0 -54
  198. package/edit/kubevirt.io.virtualmachine/VirtualMachineSSHKey.vue +0 -256
  199. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/index.vue +0 -391
  200. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/__tests__/HarvesterEditContainer.test.ts +0 -40
  201. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/__tests__/HarvesterEditExisting.test.ts +0 -102
  202. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/__tests__/HarvesterEditVMImage.test.ts +0 -117
  203. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/__tests__/HarvesterEditVolume.test.ts +0 -74
  204. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/container.vue +0 -132
  205. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/existing.vue +0 -303
  206. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/vmImage.vue +0 -285
  207. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/volume.vue +0 -188
  208. package/edit/kubevirt.io.virtualmachine/index.vue +0 -642
  209. package/edit/network.harvesterhci.io.clusternetwork/index.vue +0 -19
  210. package/edit/network.harvesterhci.io.clusternetwork/vlan.vue +0 -134
  211. package/edit/workload/types/Deployment.vue +0 -377
  212. package/edit/workload/types/Generic.vue +0 -295
  213. package/list/harvesterhci.io.cloudtemplate.vue +0 -78
  214. package/list/harvesterhci.io.dashboard/HarvesterUpgrade.vue +0 -211
  215. package/list/harvesterhci.io.dashboard/UpgradeInfo.vue +0 -40
  216. package/list/harvesterhci.io.dashboard/index.vue +0 -752
  217. package/list/harvesterhci.io.host/index.vue +0 -186
  218. package/list/harvesterhci.io.networkattachmentdefinition.vue +0 -167
  219. package/list/harvesterhci.io.setting.vue +0 -241
  220. package/list/harvesterhci.io.virtualmachinebackup.vue +0 -172
  221. package/list/harvesterhci.io.virtualmachineimage.vue +0 -80
  222. package/list/harvesterhci.io.virtualmachinetemplateversion.vue +0 -173
  223. package/list/harvesterhci.io.volume.vue +0 -122
  224. package/list/kubevirt.io.virtualmachine.vue +0 -193
  225. package/mixins/harvester-vm/impl.js +0 -267
  226. package/mixins/harvester-vm/index.js +0 -1357
  227. package/models/harvester/configmap.js +0 -32
  228. package/models/harvester/harvesterhci.io.blockdevice.js +0 -55
  229. package/models/harvester/harvesterhci.io.keypair.js +0 -12
  230. package/models/harvester/harvesterhci.io.setting.js +0 -127
  231. package/models/harvester/harvesterhci.io.supportbundle.js +0 -35
  232. package/models/harvester/harvesterhci.io.upgrade.js +0 -226
  233. package/models/harvester/harvesterhci.io.virtualmachinebackup.js +0 -116
  234. package/models/harvester/harvesterhci.io.virtualmachineimage.js +0 -255
  235. package/models/harvester/harvesterhci.io.virtualmachinerestore.js +0 -43
  236. package/models/harvester/harvesterhci.io.virtualmachinetemplate.js +0 -69
  237. package/models/harvester/harvesterhci.io.virtualmachinetemplateversion.js +0 -227
  238. package/models/harvester/k8s.cni.cncf.io.networkattachmentdefinition.js +0 -32
  239. package/models/harvester/kubevirt.io.virtualmachine.js +0 -850
  240. package/models/harvester/kubevirt.io.virtualmachineinstance.js +0 -142
  241. package/models/harvester/management.cattle.io.managedchart.js +0 -191
  242. package/models/harvester/management.cattle.io.setting.js +0 -40
  243. package/models/harvester/network.harvesterhci.io.clusternetwork.js +0 -100
  244. package/models/harvester/network.harvesterhci.io.nodenetwork.js +0 -34
  245. package/models/harvester/node.js +0 -255
  246. package/models/harvester/persistentvolumeclaim.js +0 -166
  247. package/models/harvester/pod.js +0 -185
  248. package/pages/c/_cluster/harvester/airgapupgrade/index.vue +0 -309
  249. package/pages/c/_cluster/harvester/console/_uid/serial.vue +0 -51
  250. package/pages/c/_cluster/harvester/console/_uid/vnc.vue +0 -52
  251. package/pages/c/_cluster/harvester/index.vue +0 -24
  252. package/pages/c/_cluster/harvester/support/index.vue +0 -154
  253. package/pkg/model-loader.lib.js +0 -3
  254. package/promptRemove/kubevirt.io.virtualmachine.vue +0 -164
  255. package/store/harvester-common.js +0 -126
  256. package/utils/validators/vm-datavolumes.js +0 -38
  257. package/utils/validators/vm-image.js +0 -32
  258. package/utils/validators/vm.js +0 -221
@@ -1,85 +0,0 @@
1
- <script>
2
- import SSHKey from '@shell/edit/kubevirt.io.virtualmachine/VirtualMachineSSHKey';
3
- import AccessCredentialsUsers from '../AccessCredentialsUsers';
4
-
5
- export default {
6
- name: 'HarvesterEditVolume',
7
- components: { SSHKey, AccessCredentialsUsers },
8
-
9
- props: {
10
- mode: {
11
- type: String,
12
- default: 'create'
13
- },
14
-
15
- resource: {
16
- type: Object,
17
- default: () => {
18
- return {};
19
- }
20
- },
21
-
22
- userOptions: {
23
- type: Array,
24
- default: () => {
25
- return [];
26
- }
27
- },
28
-
29
- value: {
30
- type: Object,
31
- default: () => {
32
- return {};
33
- }
34
- },
35
- },
36
-
37
- methods: {
38
- update() {
39
- this.$emit('update');
40
- },
41
-
42
- updateUser(neu) {
43
- this.$set(this.value, 'users', neu);
44
- this.update();
45
- },
46
-
47
- updateSSH(neu) {
48
- this.$set(this.value, 'sshkeys', neu);
49
- this.update();
50
- },
51
-
52
- updateNewUser(neu) {
53
- this.$emit('update:newUser', neu);
54
- }
55
- },
56
- };
57
- </script>
58
-
59
- <template>
60
- <div>
61
- <div class="columns row">
62
- <div class="col span-6">
63
- <AccessCredentialsUsers
64
- v-model="value.users"
65
- :resource="resource"
66
- :user-options="userOptions"
67
- :mode="mode"
68
- :multiple="true"
69
- @update:user="updateUser"
70
- @update:newUser="updateNewUser"
71
- />
72
- </div>
73
- <div class="col span-6">
74
- <SSHKey
75
- v-model="value.sshkeys"
76
- class="mb-20"
77
- :namespace="resource.metadata.namespace"
78
- :mode="mode"
79
- :searchable="false"
80
- @update:sshKey="updateSSH"
81
- />
82
- </div>
83
- </div>
84
- </div>
85
- </template>
@@ -1,153 +0,0 @@
1
- <script>
2
- import { mapGetters } from 'vuex';
3
-
4
- import LabeledSelect from '@shell/components/form/LabeledSelect';
5
- import YamlEditor, { EDITOR_MODES } from '@shell/components/YamlEditor';
6
-
7
- import { _VIEW } from '@shell/config/query-params';
8
- import { CONFIG_MAP } from '@shell/config/types';
9
-
10
- const _NEW = '_NEW';
11
- const _NONE = '_NONE';
12
-
13
- export default {
14
- components: { YamlEditor, LabeledSelect },
15
-
16
- props: {
17
- mode: {
18
- type: String,
19
- default: 'create'
20
- },
21
- value: {
22
- type: String,
23
- default: ''
24
- },
25
- type: {
26
- type: String,
27
- default: ''
28
- },
29
- options: {
30
- type: Array,
31
- default: () => {
32
- return [];
33
- }
34
- },
35
- configId: {
36
- type: String,
37
- default: ''
38
- },
39
- viewCode: {
40
- type: Boolean,
41
- default: false
42
- }
43
- },
44
-
45
- data() {
46
- return {
47
- id: '',
48
- yamlScript: this.value,
49
- };
50
- },
51
-
52
- computed: {
53
- ...mapGetters({ t: 'i18n/t' }),
54
-
55
- editorMode() {
56
- return this.isView || this.viewCode ? EDITOR_MODES.VIEW_CODE : EDITOR_MODES.EDIT_CODE;
57
- },
58
-
59
- isView() {
60
- return this.mode === _VIEW;
61
- },
62
- },
63
-
64
- watch: {
65
- value(neu) {
66
- this.yamlScript = neu;
67
- },
68
-
69
- configId(neu) {
70
- this.id = this.configId;
71
- },
72
-
73
- id(neu, old) {
74
- const cloudInit = this.$store.getters['harvester/byId'](CONFIG_MAP, neu)?.data?.cloudInit || '';
75
-
76
- this.$emit('updateTemplateId', this.type, neu);
77
-
78
- if (neu === _NEW) {
79
- this.$emit('show', this.type);
80
- this.id = old;
81
-
82
- return;
83
- } else if (neu === _NONE ) {
84
- this.yamlScript = '';
85
- } else {
86
- this.yamlScript = cloudInit;
87
- }
88
-
89
- this.$refs['yaml'].updateValue(cloudInit);
90
- },
91
-
92
- yamlScript(neu) {
93
- this.$emit('update', neu, this.type);
94
- }
95
- },
96
-
97
- methods: {
98
- refresh() {
99
- this.$refs.yaml.refresh();
100
- },
101
-
102
- updateValue() {
103
- this.$refs['yaml'].updateValue(this.value);
104
- }
105
- }
106
- };
107
- </script>
108
-
109
- <template>
110
- <div class="mb-20">
111
- <h3>{{ t(`harvester.virtualMachine.cloudConfig.${type}.title`) }}</h3>
112
- <p class="text-muted mb-20">
113
- <t :k="`harvester.virtualMachine.cloudConfig.${type}.tip`" :raw="true" />
114
- </p>
115
-
116
- <LabeledSelect
117
- v-if="!isView"
118
- v-model="id"
119
- class="mb-20"
120
- :options="options"
121
- :disabled="viewCode"
122
- :label-key="`harvester.virtualMachine.cloudConfig.${type}.label`"
123
- />
124
-
125
- <div class="resource-yaml">
126
- <YamlEditor
127
- ref="yaml"
128
- v-model="yamlScript"
129
- class="yaml-editor"
130
- :editor-mode="editorMode"
131
- />
132
- </div>
133
- </div>
134
- </template>
135
-
136
- <style lang="scss" scoped>
137
- $yaml-height: 200px;
138
-
139
- ::v-deep .resource-yaml {
140
- flex: 1;
141
- display: flex;
142
- flex-direction: column;
143
-
144
- & .yaml-editor{
145
- flex: 1;
146
- min-height: $yaml-height;
147
-
148
- & .code-mirror .CodeMirror {
149
- min-height: $yaml-height;
150
- }
151
- }
152
- }
153
- </style>
@@ -1,279 +0,0 @@
1
- <script>
2
- import { mapGetters } from 'vuex';
3
-
4
- import { LabeledInput } from '@components/Form/LabeledInput';
5
- import YamlEditor, { EDITOR_MODES } from '@shell/components/YamlEditor';
6
- import ModalWithCard from '@shell/components/ModalWithCard';
7
-
8
- import { CONFIG_MAP } from '@shell/config/types';
9
- import { HCI as HCI_ANNOTATIONS } from '@shell/config/labels-annotations';
10
- import { _VIEW } from '@shell/config/query-params';
11
- import DataTemplate from './DataTemplate';
12
-
13
- const _NEW = '_NEW';
14
- const _NONE = '_NONE';
15
-
16
- export default {
17
- components: {
18
- DataTemplate, YamlEditor, LabeledInput, ModalWithCard
19
- },
20
-
21
- props: {
22
- mode: {
23
- type: String,
24
- default: 'create'
25
- },
26
- namespace: {
27
- type: String,
28
- default: ''
29
- },
30
- userScript: {
31
- type: String,
32
- default: ''
33
- },
34
- networkScript: {
35
- type: String,
36
- default: ''
37
- },
38
- viewCode: {
39
- type: Boolean,
40
- default: false
41
- }
42
- },
43
-
44
- data() {
45
- return {
46
- errors: [],
47
- templateType: '',
48
- cloudTemplate: '',
49
- cloudTemplateName: '',
50
- configUserId: '',
51
- configNetworkId: '',
52
- optionUser: [],
53
- optionNetwork: []
54
- };
55
- },
56
-
57
- async fetch() {
58
- const configs = await this.$store.dispatch('harvester/findAll', { type: CONFIG_MAP });
59
-
60
- const optionUser = [];
61
- const optionNetwork = [];
62
-
63
- for (const config of configs) {
64
- if (config.metadata?.labels?.[HCI_ANNOTATIONS.CLOUD_INIT] === 'user') {
65
- optionUser.push({
66
- label: config?.id,
67
- value: config?.id
68
- });
69
- }
70
-
71
- if (config.metadata?.labels?.[HCI_ANNOTATIONS.CLOUD_INIT] === 'network') {
72
- optionNetwork.push({
73
- label: config?.id,
74
- value: config?.id
75
- });
76
- }
77
- }
78
-
79
- optionUser.unshift({
80
- label: this.t('harvester.virtualMachine.cloudConfig.createNew'),
81
- value: _NEW,
82
- });
83
-
84
- optionUser.unshift({
85
- label: this.t('harvester.virtualMachine.cloudConfig.cloudInit.placeholder'),
86
- value: _NONE,
87
- });
88
-
89
- optionNetwork.unshift({
90
- label: this.t('harvester.virtualMachine.cloudConfig.createNew'),
91
- value: _NEW,
92
- });
93
-
94
- optionNetwork.unshift({
95
- label: this.t('harvester.virtualMachine.cloudConfig.cloudInit.placeholder'),
96
- value: _NONE,
97
- });
98
-
99
- this.optionUser = optionUser;
100
- this.optionNetwork = optionNetwork;
101
- },
102
-
103
- computed: {
104
- ...mapGetters({ t: 'i18n/t' }),
105
-
106
- createTypeLable() {
107
- const label = `harvester.virtualMachine.cloudConfig.${ this.templateType }.label`;
108
-
109
- return this.t(label);
110
- },
111
-
112
- editorMode() {
113
- return this.isView ? EDITOR_MODES.VIEW_CODE : EDITOR_MODES.EDIT_CODE;
114
- },
115
-
116
- isView() {
117
- return this.mode === _VIEW;
118
- },
119
- },
120
-
121
- methods: {
122
- updateValue() {
123
- this.$refs['userTemplate'].updateValue();
124
- this.$refs['networkTemplate'].updateValue();
125
- },
126
-
127
- update(value, type) {
128
- if (type === 'user') {
129
- this.$emit('updateUserData', value);
130
- }
131
- if (type === 'network') {
132
- this.$emit('updateNetworkData', value);
133
- }
134
- },
135
-
136
- updateTemplateId(type, id) {
137
- this.$emit('updateDataTemplateId', type, id);
138
- },
139
-
140
- show(templateType) {
141
- this.templateType = templateType;
142
- this.$modal.show('createCloudTemplate');
143
- },
144
-
145
- async save(buttonCb) {
146
- const templateValue = await this.$store.dispatch('harvester/create', {
147
- type: CONFIG_MAP,
148
- metadata: {
149
- labels: { [HCI_ANNOTATIONS.CLOUD_INIT]: this.templateType },
150
- name: this.cloudTemplateName,
151
- namespace: this.namespace
152
- },
153
- data: { cloudInit: this.cloudTemplate },
154
- });
155
-
156
- try {
157
- const res = await templateValue.save();
158
-
159
- if (res.id) {
160
- this.templateType === 'user' ? this.configUserId = res.id : this.configNetworkId = res.id;
161
- this.$fetch();
162
- }
163
- buttonCb(true);
164
- this.cancel();
165
- } catch (err) {
166
- this.errors = [err.message];
167
- buttonCb(false);
168
- }
169
- },
170
-
171
- cancel() {
172
- this.cloudTemplate = '';
173
- this.cloudTemplateName = '';
174
- this.$set(this, 'errors', []);
175
- this.$modal.hide('createCloudTemplate');
176
- },
177
-
178
- refresh() {
179
- this.$refs['userTemplate'].refresh();
180
- this.$refs['networkTemplate'].refresh();
181
- },
182
- }
183
- };
184
- </script>
185
-
186
- <template>
187
- <div>
188
- <h2 v-if="!isView">
189
- {{ t('harvester.virtualMachine.cloudConfig.title') }}
190
- </h2>
191
-
192
- <div class="mb-20">
193
- <DataTemplate
194
- ref="userTemplate"
195
- v-model="userScript"
196
- type="user"
197
- :view-code="viewCode"
198
- :mode="mode"
199
- :config-id="configUserId"
200
- :options="optionUser"
201
- @show="show"
202
- @update="update"
203
- @updateTemplateId="updateTemplateId"
204
- />
205
- </div>
206
-
207
- <div class="mb-20">
208
- <DataTemplate
209
- ref="networkTemplate"
210
- v-model="networkScript"
211
- type="network"
212
- :view-code="viewCode"
213
- :mode="mode"
214
- :config-id="configNetworkId"
215
- :options="optionNetwork"
216
- @show="show"
217
- @update="update"
218
- />
219
- </div>
220
-
221
- <ModalWithCard
222
- ref="createCloudTemplate"
223
- name="createCloudTemplate"
224
- width="40%"
225
- :errors="errors"
226
- @finish="save"
227
- @close="cancel"
228
- >
229
- <template #title>
230
- {{ t('harvester.virtualMachine.cloudConfig.createTemplateTitle', { name: createTypeLable }) }}
231
- </template>
232
-
233
- <template #content>
234
- <LabeledInput
235
- v-model="cloudTemplateName"
236
- :label="t('harvester.virtualMachine.input.name')"
237
- class="mb-20"
238
- required
239
- @keydown.native.enter.prevent="()=>{}"
240
- />
241
-
242
- <div class="yaml">
243
- <div class="resource-yaml">
244
- <YamlEditor
245
- ref="createTemplate"
246
- v-model="cloudTemplate"
247
- class="yaml-editor"
248
- :editor-mode="editorMode"
249
- />
250
- </div>
251
- </div>
252
- </template>
253
- </ModalWithCard>
254
- </div>
255
- </template>
256
-
257
- <style lang="scss" scoped>
258
- $yaml-height: 350px;
259
-
260
- .yaml {
261
- height: $yaml-height;
262
- overflow: auto;
263
- }
264
-
265
- ::v-deep .resource-yaml {
266
- flex: 1;
267
- display: flex;
268
- flex-direction: column;
269
-
270
- & .yaml-editor{
271
- flex: 1;
272
- min-height: $yaml-height;
273
-
274
- & .code-mirror .CodeMirror {
275
- min-height: $yaml-height;
276
- }
277
- }
278
- }
279
- </style>
@@ -1,113 +0,0 @@
1
- <script>
2
- import UnitInput from '@shell/components/form/UnitInput';
3
- import InputOrDisplay from '@shell/components/InputOrDisplay';
4
-
5
- export default {
6
- name: 'HarvesterEditCpuMemory',
7
- components: { UnitInput, InputOrDisplay },
8
-
9
- props: {
10
- cpu: {
11
- type: Number,
12
- default: null
13
- },
14
- memory: {
15
- type: String,
16
- default: null
17
- },
18
- mode: {
19
- type: String,
20
- default: 'create',
21
- },
22
- disabled: {
23
- type: Boolean,
24
- default: false
25
- }
26
- },
27
-
28
- data() {
29
- return {
30
- localCpu: this.cpu,
31
- localMemory: this.memory
32
- };
33
- },
34
-
35
- computed: {
36
- cupDisplay() {
37
- return `${ this.localCpu } C`;
38
- },
39
-
40
- memoryDisplay() {
41
- return `${ this.localMemory } GiB`;
42
- }
43
- },
44
-
45
- watch: {
46
- cpu(neu) {
47
- this.localCpu = neu;
48
- },
49
- memory(neu) {
50
- if (neu && !neu.includes('null')) {
51
- this.localMemory = neu;
52
- }
53
- }
54
- },
55
-
56
- methods: {
57
- change() {
58
- let memory = '';
59
-
60
- if (String(this.localMemory).includes('Gi')) {
61
- memory = this.localMemory;
62
- } else {
63
- memory = `${ this.localMemory }Gi`;
64
- }
65
- if (memory.includes('null')) {
66
- memory = null;
67
- }
68
- this.$emit('updateCpuMemory', this.localCpu, memory);
69
- },
70
-
71
- }
72
- };
73
- </script>
74
-
75
- <template>
76
- <div class="row">
77
- <div class="col span-6">
78
- <InputOrDisplay name="CPU" :value="cupDisplay" :mode="mode" class="mb-20">
79
- <UnitInput
80
- v-model="localCpu"
81
- v-int-number
82
- label="CPU"
83
- suffix="C"
84
- :delay="0"
85
- required
86
- :disabled="disabled"
87
- :mode="mode"
88
- class="mb-20"
89
- @input="change"
90
- />
91
- </InputOrDisplay>
92
- </div>
93
-
94
- <div class="col span-6">
95
- <InputOrDisplay :name="t('harvester.virtualMachine.input.memory')" :value="memoryDisplay" :mode="mode" class="mb-20">
96
- <UnitInput
97
- v-model="localMemory"
98
- v-int-number
99
- :label="t('harvester.virtualMachine.input.memory')"
100
- :mode="mode"
101
- :input-exponent="3"
102
- :delay="0"
103
- :increment="1024"
104
- :output-modifier="true"
105
- :disabled="disabled"
106
- required
107
- class="mb-20"
108
- @input="change"
109
- />
110
- </InputOrDisplay>
111
- </div>
112
- </div>
113
- </template>
@@ -1,41 +0,0 @@
1
- import { mount } from '@vue/test-utils';
2
- import HarvesterEditNetwork from '@shell/edit/kubevirt.io.virtualmachine/VirtualMachineNetwork/base.vue';
3
- import { _EDIT } from '@shell/config/query-params';
4
-
5
- describe('component: HarvesterEditNetwork', () => {
6
- it('should display all the inputs', () => {
7
- const wrapper = mount(HarvesterEditNetwork, { propsData: { mode: _EDIT } });
8
-
9
- const inputWraps = wrapper.findAll('[data-testid^=input-hen-]');
10
-
11
- expect(inputWraps).toHaveLength(5);
12
- });
13
-
14
- it.each([
15
- 'name',
16
- 'macAddress',
17
- ])('should emit an update on %p input', (field) => {
18
- const wrapper = mount(HarvesterEditNetwork, { propsData: { mode: _EDIT } });
19
- const input = wrapper.find(`[data-testid="input-hen-${ field }"]`).find('input');
20
- const newValue = 123;
21
-
22
- input.setValue(newValue);
23
-
24
- expect(wrapper.emitted('update')).toHaveLength(1);
25
- });
26
-
27
- it.each([
28
- 'model',
29
- 'networkName',
30
- 'type',
31
- ])('should emit an update on %p selection change', async(field) => {
32
- const wrapper = mount(HarvesterEditNetwork, { propsData: { mode: _EDIT } });
33
- const select = wrapper.find(`[data-testid="input-hen-${ field }"]`);
34
-
35
- select.find('button').trigger('click');
36
- await wrapper.trigger('keydown.down');
37
- await wrapper.trigger('keydown.enter');
38
-
39
- expect(wrapper.emitted('update')).toHaveLength(1);
40
- });
41
- });