foreman_fog_proxmox 0.9.4 → 0.10.0

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.

Potentially problematic release.


This version of foreman_fog_proxmox might be problematic. Click here for more details.

Files changed (56) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/foreman_fog_proxmox/proxmox_vm.js +89 -0
  3. data/app/assets/javascripts/foreman_fog_proxmox/proxmox_vm_container.js +5 -41
  4. data/app/assets/javascripts/foreman_fog_proxmox/proxmox_vm_server.js +2 -21
  5. data/app/controllers/concerns/foreman_fog_proxmox/controller/parameters/compute_resource.rb +1 -1
  6. data/app/controllers/foreman_fog_proxmox/compute_resources_controller.rb +46 -6
  7. data/app/helpers/proxmox_container_helper.rb +3 -1
  8. data/app/helpers/proxmox_server_helper.rb +2 -1
  9. data/app/helpers/proxmox_vm_helper.rb +19 -0
  10. data/app/models/concerns/fog_extensions/proxmox/node.rb +0 -5
  11. data/app/models/concerns/fog_extensions/proxmox/server.rb +1 -1
  12. data/app/models/foreman_fog_proxmox/proxmox.rb +9 -13
  13. data/app/models/foreman_fog_proxmox/proxmox_images.rb +10 -5
  14. data/app/models/foreman_fog_proxmox/proxmox_vm_commands.rb +6 -2
  15. data/app/models/foreman_fog_proxmox/proxmox_vm_new.rb +22 -6
  16. data/app/models/foreman_fog_proxmox/proxmox_vm_queries.rb +9 -7
  17. data/app/models/foreman_fog_proxmox/vms.rb +37 -0
  18. data/app/overrides/compute_resources_vms/form/add_vm_type_node_to_new_form.rb +25 -0
  19. data/app/views/compute_resources/form/_proxmox.html.erb +0 -2
  20. data/app/views/compute_resources/show/_proxmox.html.erb +4 -0
  21. data/app/views/compute_resources_vms/form/proxmox/_add_vm_type_node_to_new_form.html.erb +24 -0
  22. data/app/views/compute_resources_vms/form/proxmox/_add_vm_type_to_networks_form.html.erb +2 -1
  23. data/app/views/compute_resources_vms/form/proxmox/_add_vm_type_to_networks_new_childs_form.html.erb +2 -1
  24. data/app/views/compute_resources_vms/form/proxmox/_add_vm_type_to_nic_provider_specific_form.html.erb +3 -2
  25. data/app/views/compute_resources_vms/form/proxmox/_add_vm_type_to_volumes_edit.html.erb +6 -5
  26. data/app/views/compute_resources_vms/form/proxmox/_base.html.erb +3 -3
  27. data/app/views/compute_resources_vms/form/proxmox/_general.html.erb +2 -1
  28. data/app/views/compute_resources_vms/form/proxmox/_network.html.erb +2 -2
  29. data/app/views/compute_resources_vms/form/proxmox/container/_extended.html.erb +3 -2
  30. data/app/views/compute_resources_vms/form/proxmox/container/_network.html.erb +4 -3
  31. data/app/views/compute_resources_vms/form/proxmox/container/_volume_mp.html.erb +1 -1
  32. data/app/views/compute_resources_vms/form/proxmox/container/_volume_rootfs.html.erb +1 -1
  33. data/app/views/compute_resources_vms/form/proxmox/server/_config.html.erb +1 -1
  34. data/app/views/compute_resources_vms/form/proxmox/server/_network.html.erb +4 -3
  35. data/app/views/compute_resources_vms/form/proxmox/server/_volume.html.erb +1 -1
  36. data/app/views/compute_resources_vms/index/_proxmox.html.erb +4 -2
  37. data/config/routes.rb +7 -2
  38. data/lib/foreman_fog_proxmox/engine.rb +4 -0
  39. data/lib/foreman_fog_proxmox/version.rb +1 -1
  40. data/locale/en/foreman_fog_proxmox.edit.po +508 -0
  41. data/locale/en/foreman_fog_proxmox.po +34 -7
  42. data/locale/en/foreman_fog_proxmox.po.time_stamp +0 -0
  43. data/locale/foreman_fog_proxmox.pot +112 -70
  44. data/locale/fr/foreman_fog_proxmox.edit.po +508 -0
  45. data/locale/fr/foreman_fog_proxmox.po +39 -12
  46. data/locale/fr/foreman_fog_proxmox.po.time_stamp +0 -0
  47. data/test/factories/foreman_fog_proxmox/proxmox_node_mock_factory.rb +28 -8
  48. data/test/factories/proxmox_factory.rb +0 -1
  49. data/test/functional/compute_resources_controller_test.rb +16 -4
  50. data/test/unit/foreman_fog_proxmox/helpers/proxmox_server_helper_test.rb +1 -0
  51. data/test/unit/foreman_fog_proxmox/proxmox_test.rb +0 -1
  52. data/test/unit/foreman_fog_proxmox/proxmox_vm_commands_container_test.rb +33 -8
  53. data/test/unit/foreman_fog_proxmox/proxmox_vm_commands_server_create_test.rb +2 -2
  54. data/test/unit/foreman_fog_proxmox/proxmox_vm_commands_server_update_test.rb +22 -2
  55. data/test/unit/foreman_fog_proxmox/proxmox_vm_commands_server_update_volumes_test.rb +18 -6
  56. metadata +9 -2
@@ -17,8 +17,8 @@ msgstr ""
17
17
  "Plural-Forms: nplurals=2; plural=n>1;\n"
18
18
  "\n"
19
19
 
20
- msgid "%s console is not supported at this time"
21
- msgstr "%s console pas encore supportée"
20
+ msgid "%<s>s console is not supported at this time"
21
+ msgstr ""
22
22
 
23
23
  msgid "Add Volume"
24
24
  msgstr "Ajouter un volume"
@@ -47,6 +47,12 @@ msgstr ""
47
47
  msgid "CDROM"
48
48
  msgstr ""
49
49
 
50
+ msgid "CIDR IPv4 prefix"
51
+ msgstr ""
52
+
53
+ msgid "CIDR IPv6 prefix"
54
+ msgstr ""
55
+
50
56
  msgid "CPU"
51
57
  msgstr ""
52
58
 
@@ -62,15 +68,15 @@ msgstr ""
62
68
  msgid "Cache"
63
69
  msgstr ""
64
70
 
65
- msgid "Caps lock ON"
66
- msgstr "Touches verrouillées"
67
-
68
71
  msgid "Card"
69
72
  msgstr "Carte"
70
73
 
71
74
  msgid "Change the password"
72
75
  msgstr "Changer le mot de passe"
73
76
 
77
+ msgid "Cluster nodes"
78
+ msgstr "Noeuds de la ferme"
79
+
74
80
  msgid "Controller"
75
81
  msgstr "Contrôleur"
76
82
 
@@ -80,6 +86,12 @@ msgstr "Coeurs"
80
86
  msgid "Create image?"
81
87
  msgstr "Créer image?"
82
88
 
89
+ msgid "DHCP IPv4"
90
+ msgstr ""
91
+
92
+ msgid "DHCP IPv6"
93
+ msgstr ""
94
+
83
95
  msgid "DNS"
84
96
  msgstr ""
85
97
 
@@ -110,6 +122,15 @@ msgstr "Activer/désactiver la virtualisation matérielle de KVM"
110
122
  msgid "Extended"
111
123
  msgstr "Etendu"
112
124
 
125
+ msgid "Failed retrieving proxmox compute client caused by %<e>s"
126
+ msgstr ""
127
+
128
+ msgid "Failed retrieving proxmox identity client caused by %<e>s"
129
+ msgstr ""
130
+
131
+ msgid "Failed retrieving proxmox network client caused by %<e>s"
132
+ msgstr ""
133
+
113
134
  msgid "Failed retrieving proxmox server vm by vmid=%<vmid>s"
114
135
  msgstr ""
115
136
 
@@ -131,6 +152,12 @@ msgstr ""
131
152
  msgid "ForemanFogProxmox plugin adds Proxmox VE compute resource to Foreman using fog-proxmox gem."
132
153
  msgstr "Le plugin ForemanFogProxmox ajoute la ressource de calcul Proxmox VE à foreman en utilisant le gem fog-proxmox"
133
154
 
155
+ msgid "Gateway IPv4"
156
+ msgstr ""
157
+
158
+ msgid "Gateway IPv6"
159
+ msgstr ""
160
+
134
161
  msgid "General"
135
162
  msgstr "Général"
136
163
 
@@ -206,7 +233,7 @@ msgid "Password to authenticate with - used for SSH finish step."
206
233
  msgstr "Mot de passe d'authentification - utilisé dans la dernière phase avec SSH."
207
234
 
208
235
  msgid "Path"
209
- msgstr ""
236
+ msgstr "Chemin"
210
237
 
211
238
  msgid "Physical"
212
239
  msgstr "Physique"
@@ -230,7 +257,7 @@ msgid "Rate limit"
230
257
  msgstr "Taux limite"
231
258
 
232
259
  msgid "Renew expired token ?"
233
- msgstr ""
260
+ msgstr "Renouveler jeton expiré?"
234
261
 
235
262
  msgid "Root password"
236
263
  msgstr "Mot de passe root"
@@ -256,6 +283,9 @@ msgstr ""
256
283
  msgid "Spectre-CTRL"
257
284
  msgstr ""
258
285
 
286
+ msgid "Start after creation?"
287
+ msgstr "Démarrer après création?"
288
+
259
289
  msgid "Start at boot"
260
290
  msgstr "Démarrer au boot"
261
291
 
@@ -278,13 +308,10 @@ msgid "Time"
278
308
  msgstr "Temps"
279
309
 
280
310
  msgid "Token expires on"
281
- msgstr ""
282
-
283
- msgid "Token expires on #{token_deadline}"
284
- msgstr ""
311
+ msgstr "Jeton expire le "
285
312
 
286
313
  msgid "Token has expired?"
287
- msgstr ""
314
+ msgstr "Jeton expiré?"
288
315
 
289
316
  msgid "Type"
290
317
  msgstr ""
@@ -21,26 +21,41 @@ module ForemanFogProxmox
21
21
  module ProxmoxNodeMockFactory
22
22
  def mock_node_servers(cr, servers)
23
23
  node = mock('node')
24
+ nodes = mock('nodes')
25
+ node.stubs(:node).returns('pve')
24
26
  node.stubs(:servers).returns(servers)
25
- cr.stubs(:nodes).returns([node])
26
- cr.stubs(:node).returns(node)
27
+ nodes.stubs(:get).returns(node)
28
+ nodes.stubs(:all).returns([node])
29
+ client = mock('client')
30
+ client.stubs(:nodes).returns(nodes)
31
+ cr.stubs(:client).returns(client)
27
32
  cr
28
33
  end
29
34
 
30
35
  def mock_node_containers(cr, containers)
31
36
  node = mock('node')
37
+ nodes = mock('nodes')
38
+ node.stubs(:node).returns('pve')
32
39
  node.stubs(:containers).returns(containers)
33
- cr.stubs(:node).returns(node)
34
- cr.stubs(:nodes).returns([node])
40
+ nodes.stubs(:get).returns(node)
41
+ nodes.stubs(:all).returns([node])
42
+ client = mock('client')
43
+ client.stubs(:nodes).returns(nodes)
44
+ cr.stubs(:client).returns(client)
35
45
  cr
36
46
  end
37
47
 
38
48
  def mock_node_servers_containers(cr, servers, containers)
39
49
  node = mock('node')
50
+ node.stubs(:node).returns('pve')
40
51
  node.stubs(:containers).returns(containers)
41
52
  node.stubs(:servers).returns(servers)
42
- cr.stubs(:node).returns(node)
43
- cr.stubs(:nodes).returns([node])
53
+ nodes = mock('nodes')
54
+ nodes.stubs(:get).returns(node)
55
+ nodes.stubs(:all).returns([node])
56
+ client = mock('client')
57
+ client.stubs(:nodes).returns(nodes)
58
+ cr.stubs(:client).returns(client)
44
59
  cr
45
60
  end
46
61
 
@@ -53,8 +68,13 @@ module ForemanFogProxmox
53
68
  node2.stubs(:node).returns('node2')
54
69
  node2.stubs(:servers).returns(n2s)
55
70
  node2.stubs(:containers).returns(n2c)
56
- cr.stubs(:node).returns(node1)
57
- cr.stubs(:nodes).returns([node1, node2])
71
+ nodes = mock('nodes')
72
+ nodes.stubs(:get).with('pve').returns(node1)
73
+ nodes.stubs(:get).with('pve2').returns(node2)
74
+ nodes.stubs(:all).returns([node1, node2])
75
+ client = mock('client')
76
+ client.stubs(:nodes).returns(nodes)
77
+ cr.stubs(:client).returns(client)
58
78
  cr
59
79
  end
60
80
  end
@@ -30,7 +30,6 @@ FactoryBot.define do
30
30
  user { 'root@pam' }
31
31
  password { 'proxmox01' }
32
32
  url { 'https://192.168.56.101:8006/api2/json' }
33
- node_id { 'pve' }
34
33
  end
35
34
 
36
35
  factory :proxmox_cr, :class => ForemanFogProxmox::Proxmox, :traits => [:proxmox]
@@ -20,14 +20,26 @@ require 'test_plugin_helper'
20
20
 
21
21
  module ForemanFogProxmox
22
22
  class ComputeResourcesControllerTest < ActionController::TestCase
23
- test 'should get isos' do
24
- get :isos, params: { :storage => 'local' }
23
+ test 'should get isos by node and storage' do
24
+ get :isos_by_node_and_storage, params: { :node_id => 'pve', :storage => 'local' }
25
25
  assert_response :found
26
26
  show_response = @response.body
27
27
  assert_not show_response.empty?
28
28
  end
29
- test 'should get ostemplates' do
30
- get :ostemplates, params: { :storage => 'local' }
29
+ test 'should get ostemplates by node and storage' do
30
+ get :ostemplates_by_node_and_storage, params: { :node_id => 'pve', :storage => 'local' }
31
+ assert_response :found
32
+ show_response = @response.body
33
+ assert_not show_response.empty?
34
+ end
35
+ test 'should get isos by node' do
36
+ get :isos_by_node, params: { :node_id => 'pve' }
37
+ assert_response :found
38
+ show_response = @response.body
39
+ assert_not show_response.empty?
40
+ end
41
+ test 'should get ostemplates by node' do
42
+ get :ostemplates_by_node, params: { :node_id => 'pve' }
31
43
  assert_response :found
32
44
  show_response = @response.body
33
45
  assert_not show_response.empty?
@@ -56,6 +56,7 @@ module ForemanFogProxmox
56
56
 
57
57
  let(:host_delete) do
58
58
  { 'vmid' => '100',
59
+ 'node_id' => 'pve',
59
60
  'name' => 'test',
60
61
  'type' => 'qemu',
61
62
  'cdrom' => 'image',
@@ -35,7 +35,6 @@ module ForemanFogProxmox
35
35
  should validate_presence_of(:url)
36
36
  should validate_presence_of(:user)
37
37
  should validate_presence_of(:password)
38
- should validate_presence_of(:node_id)
39
38
  should allow_value('root@pam').for(:user)
40
39
  should_not allow_value('root').for(:user)
41
40
  should_not allow_value('a').for(:url)
@@ -35,6 +35,23 @@ module ForemanFogProxmox
35
35
  @cr = FactoryBot.build_stubbed(:proxmox_cr)
36
36
  end
37
37
 
38
+ it 'migrates container from one node to another in the cluster' do
39
+ uuid = '100'
40
+ config = mock('config')
41
+ config.stubs(:attributes).returns(:cores => '')
42
+ vm = mock('vm')
43
+ vm.stubs(:config).returns(config)
44
+ vm.stubs(:container?).returns(true)
45
+ vm.stubs(:type).returns('lxc')
46
+ vm.stubs(:node_id).returns('pve')
47
+ @cr.stubs(:find_vm_by_uuid).returns(vm)
48
+ attr = { 'templated' => '0', 'node_id' => 'pve', 'config_attributes' => { 'cores' => '1', 'cpulimit' => '1', 'onboot' => '0' } }.with_indifferent_access
49
+ @cr.stubs(:parse_container_vm).returns('vmid' => '100', 'node_id' => 'pve2', 'type' => 'lxc', 'cores' => '1', 'cpulimit' => '1')
50
+ expected_attr = { :cores => '1', :cpulimit => '1' }
51
+ vm.expects(:update, expected_attr)
52
+ @cr.save_vm(uuid, attr)
53
+ end
54
+
38
55
  it 'saves modified container config' do
39
56
  uuid = '100'
40
57
  config = mock('config')
@@ -43,9 +60,10 @@ module ForemanFogProxmox
43
60
  vm.stubs(:config).returns(config)
44
61
  vm.stubs(:container?).returns(true)
45
62
  vm.stubs(:type).returns('lxc')
63
+ vm.stubs(:node_id).returns('pve')
46
64
  @cr.stubs(:find_vm_by_uuid).returns(vm)
47
- attr = { 'templated' => '0', 'config_attributes' => { 'cores' => '1', 'cpulimit' => '1', 'onboot' => '0' } }.with_indifferent_access
48
- @cr.stubs(:parse_container_vm).returns('vmid' => '100', 'type' => 'lxc', 'cores' => '1', 'cpulimit' => '1')
65
+ attr = { 'templated' => '0', 'node_id' => 'pve', 'config_attributes' => { 'cores' => '1', 'cpulimit' => '1', 'onboot' => '0' } }.with_indifferent_access
66
+ @cr.stubs(:parse_container_vm).returns('vmid' => '100', 'node_id' => 'pve', 'type' => 'lxc', 'cores' => '1', 'cpulimit' => '1')
49
67
  expected_attr = { :cores => '1', :cpulimit => '1' }
50
68
  vm.expects(:update, expected_attr)
51
69
  @cr.save_vm(uuid, attr)
@@ -66,9 +84,11 @@ module ForemanFogProxmox
66
84
  vm.stubs(:config).returns(config)
67
85
  vm.stubs(:container?).returns(true)
68
86
  vm.stubs(:type).returns('lxc')
87
+ vm.stubs(:node_id).returns('pve')
69
88
  @cr.stubs(:find_vm_by_uuid).returns(vm)
70
89
  new_attributes = {
71
90
  'templated' => '0',
91
+ 'node_id' => 'pve',
72
92
  'config_attributes' => {
73
93
  'cores' => '1',
74
94
  'cpulimit' => '1'
@@ -85,7 +105,7 @@ module ForemanFogProxmox
85
105
  }
86
106
  }
87
107
  }.with_indifferent_access
88
- @cr.stubs(:parse_container_vm).returns('vmid' => '100', 'type' => 'lxc', 'cores' => '1', 'cpulimit' => '1')
108
+ @cr.stubs(:parse_container_vm).returns('vmid' => '100', 'node_id' => 'pve', 'type' => 'lxc', 'cores' => '1', 'cpulimit' => '1')
89
109
  expected_config_attr = { :cores => '1', :cpulimit => '1' }
90
110
  expected_volume_attr =
91
111
  [
@@ -118,10 +138,12 @@ module ForemanFogProxmox
118
138
  vm.stubs(:config).returns(config)
119
139
  vm.stubs(:container?).returns(true)
120
140
  vm.stubs(:type).returns('lxc')
141
+ vm.stubs(:node_id).returns('pve')
121
142
  @cr.stubs(:find_vm_by_uuid).returns(vm)
122
143
  new_attributes =
123
144
  {
124
145
  'templated' => '0',
146
+ 'node_id' => 'pve',
125
147
  'config_attributes' => {
126
148
  'cores' => '1',
127
149
  'cpulimit' => '1',
@@ -141,6 +163,7 @@ module ForemanFogProxmox
141
163
  }.with_indifferent_access
142
164
  @cr.stubs(:parse_container_vm).returns(
143
165
  'vmid' => '100',
166
+ 'node_id' => 'pve',
144
167
  'type' => 'lxc',
145
168
  'cores' => '1',
146
169
  'cpulimit' => '1'
@@ -169,9 +192,11 @@ module ForemanFogProxmox
169
192
  vm.stubs(:config).returns(config)
170
193
  vm.stubs(:container?).returns(true)
171
194
  vm.stubs(:type).returns('lxc')
195
+ vm.stubs(:node_id).returns('pve')
172
196
  @cr.stubs(:find_vm_by_uuid).returns(vm)
173
197
  new_attributes = {
174
198
  'templated' => '0',
199
+ 'node_id' => 'pve',
175
200
  'config_attributes' => {
176
201
  'cores' => '1',
177
202
  'cpulimit' => '1'
@@ -189,7 +214,7 @@ module ForemanFogProxmox
189
214
  }
190
215
  }
191
216
  }.with_indifferent_access
192
- @cr.stubs(:parse_server_vm).returns('vmid' => '100', 'type' => 'qemu', 'cores' => '1', 'cpulimit' => '1')
217
+ @cr.stubs(:parse_server_vm).returns('vmid' => '100', 'node_id' => 'pve', 'type' => 'qemu', 'cores' => '1', 'cpulimit' => '1')
193
218
  expected_config_attr = { :cores => '1', :cpulimit => '1' }
194
219
  expected_volume_attr = { :id => 'mp0', :volid => 'local-lvm:vm-100-disk-0', :size => 1_073_741_824 }, { :mp => '/opt/toto' }
195
220
  vm.expects(:attach, expected_volume_attr)
@@ -200,11 +225,11 @@ module ForemanFogProxmox
200
225
 
201
226
  describe 'create_vm' do
202
227
  it 'creates container without bootstart' do
203
- args = { vmid: '100', type: 'lxc', config_attributes: { onboot: '0' } }
228
+ args = { vmid: '100', type: 'lxc', node_id: 'pve', start_after_create: '0' }
204
229
  servers = mock('servers')
205
230
  servers.stubs(:id_valid?).returns(true)
206
231
  containers = mock('containers')
207
- containers.stubs(:create).with(vmid: 100, type: 'lxc', config_attributes: { onboot: '0' })
232
+ containers.stubs(:create).with(vmid: 100, type: 'lxc', node_id: 'pve', start_after_create: '0')
208
233
  cr = mock_node_servers_containers(ForemanFogProxmox::Proxmox.new, servers, containers)
209
234
  cr.stubs(:convert_sizes).with(args)
210
235
  cr.stubs(:parse_container_vm).with(args).returns(args)
@@ -214,12 +239,12 @@ module ForemanFogProxmox
214
239
  end
215
240
 
216
241
  it 'creates container with bootstart' do
217
- args = { vmid: '100', type: 'lxc', config_attributes: { onboot: '0' } }
242
+ args = { vmid: '100', type: 'lxc', node_id: 'pve', start_after_create: '1' }
218
243
  servers = mock('servers')
219
244
  servers.stubs(:id_valid?).returns(true)
220
245
  containers = mock('containers')
221
246
  vm = mock('vm')
222
- containers.stubs(:create).with(vmid: 100, type: 'lxc', config_attributes: { onboot: '0' }).returns(vm)
247
+ containers.stubs(:create).with(vmid: 100, type: 'lxc', node_id: 'pve', start_after_create: '1').returns(vm)
223
248
  cr = mock_node_servers_containers(ForemanFogProxmox::Proxmox.new, servers, containers)
224
249
  cr.stubs(:convert_sizes).with(args)
225
250
  cr.stubs(:parse_container_vm).with(args).returns(args)
@@ -43,7 +43,7 @@ module ForemanFogProxmox
43
43
  end
44
44
 
45
45
  it 'creates server without bootstart' do
46
- args = { vmid: '100', type: 'qemu', config_attributes: { onboot: '0' } }
46
+ args = { vmid: '100', type: 'qemu', node_id: 'pve', start_after_create: '0' }
47
47
  servers = mock('servers')
48
48
  servers.stubs(:id_valid?).returns(true)
49
49
  cr = mock_node_servers(ForemanFogProxmox::Proxmox.new, servers)
@@ -56,7 +56,7 @@ module ForemanFogProxmox
56
56
  end
57
57
 
58
58
  it 'creates server with bootstart' do
59
- args = { vmid: '100', type: 'qemu', config_attributes: { onboot: '1' } }
59
+ args = { vmid: '100', type: 'qemu', node_id: 'pve', start_after_create: '1' }
60
60
  servers = mock('servers')
61
61
  servers.stubs(:id_valid?).returns(true)
62
62
  cr = mock_node_servers(ForemanFogProxmox::Proxmox.new, servers)
@@ -35,6 +35,22 @@ module ForemanFogProxmox
35
35
  @cr = FactoryBot.build_stubbed(:proxmox_cr)
36
36
  end
37
37
 
38
+ it 'migrates server from node to another one in the cluster' do
39
+ uuid = '100'
40
+ config = mock('config')
41
+ config.stubs(:attributes).returns(:cores => '')
42
+ vm = mock('vm')
43
+ vm.stubs(:config).returns(config)
44
+ vm.stubs(:container?).returns(false)
45
+ vm.stubs(:templated?).returns(false)
46
+ vm.stubs(:type).returns('qemu')
47
+ vm.stubs(:node_id).returns('pve')
48
+ @cr.stubs(:find_vm_by_uuid).returns(vm)
49
+ attr = { 'templated' => '0', 'node_id' => 'pve2' }
50
+ vm.expects(:migrate)
51
+ @cr.save_vm(uuid, attr)
52
+ end
53
+
38
54
  it 'saves modified server config with same volumes' do
39
55
  uuid = '100'
40
56
  config = mock('config')
@@ -44,9 +60,10 @@ module ForemanFogProxmox
44
60
  vm.stubs(:container?).returns(false)
45
61
  vm.stubs(:templated?).returns(false)
46
62
  vm.stubs(:type).returns('qemu')
63
+ vm.stubs(:node_id).returns('pve')
47
64
  @cr.stubs(:find_vm_by_uuid).returns(vm)
48
- attr = { 'templated' => '0', 'config_attributes' => { 'cores' => '1', 'cpulimit' => '1', 'onboot' => '0' } }.with_indifferent_access
49
- @cr.stubs(:parse_server_vm).returns('vmid' => '100', 'type' => 'qemu', 'cores' => '1', 'cpulimit' => '1', 'onboot' => '0')
65
+ attr = { 'templated' => '0', 'node_id' => 'pve', 'config_attributes' => { 'cores' => '1', 'cpulimit' => '1', 'onboot' => '0' } }.with_indifferent_access
66
+ @cr.stubs(:parse_server_vm).returns('vmid' => '100', 'node_id' => 'pve', 'type' => 'qemu', 'cores' => '1', 'cpulimit' => '1', 'onboot' => '0')
50
67
  expected_attr = { :cores => '1', :cpulimit => '1' }.with_indifferent_access
51
68
  vm.expects(:update, expected_attr)
52
69
  @cr.save_vm(uuid, attr)
@@ -80,9 +97,11 @@ module ForemanFogProxmox
80
97
  vm.stubs(:config).returns(config)
81
98
  vm.stubs(:container?).returns(false)
82
99
  vm.stubs(:type).returns('qemu')
100
+ vm.stubs(:node_id).returns('pve')
83
101
  @cr.stubs(:find_vm_by_uuid).returns(vm)
84
102
  new_attributes = {
85
103
  'templated' => '0',
104
+ 'node_id' => 'pve',
86
105
  'config_attributes' => {
87
106
  'cores' => '1',
88
107
  'cpulimit' => '1'
@@ -96,6 +115,7 @@ module ForemanFogProxmox
96
115
  }.with_indifferent_access
97
116
  @cr.stubs(:parse_server_vm).returns(
98
117
  'vmid' => '100',
118
+ 'node_id' => 'pve',
99
119
  'type' => 'qemu',
100
120
  'cores' => '1',
101
121
  'cpulimit' => '1',
@@ -50,9 +50,11 @@ module ForemanFogProxmox
50
50
  vm.stubs(:config).returns(config)
51
51
  vm.stubs(:container?).returns(false)
52
52
  vm.stubs(:type).returns('qemu')
53
+ vm.stubs(:node_id).returns('pve')
53
54
  @cr.stubs(:find_vm_by_uuid).returns(vm)
54
55
  new_attributes = {
55
56
  'templated' => '0',
57
+ 'node_id' => 'pve',
56
58
  'config_attributes' => {
57
59
  'cores' => '1',
58
60
  'cpulimit' => '1'
@@ -69,7 +71,7 @@ module ForemanFogProxmox
69
71
  }
70
72
  }
71
73
  }.with_indifferent_access
72
- @cr.stubs(:parse_server_vm).returns('vmid' => '100', 'type' => 'qemu', 'cores' => '1', 'cpulimit' => '1', 'onboot' => '0')
74
+ @cr.stubs(:parse_server_vm).returns('vmid' => '100', 'node_id' => 'pve', 'type' => 'qemu', 'cores' => '1', 'cpulimit' => '1', 'onboot' => '0')
73
75
  expected_config_attr = { :cores => '1', :cpulimit => '1' }
74
76
  expected_volume_attr = { id: 'scsi0', storage: 'local:lvm', size: (2_147_483_648 / GIGA).to_s }
75
77
  vm.expects(:attach, expected_volume_attr)
@@ -93,9 +95,11 @@ module ForemanFogProxmox
93
95
  vm.stubs(:container?).returns(false)
94
96
  vm.stubs(:templated?).returns(false)
95
97
  vm.stubs(:type).returns('qemu')
98
+ vm.stubs(:node_id).returns('pve')
96
99
  @cr.stubs(:find_vm_by_uuid).returns(vm)
97
100
  new_attributes = {
98
101
  'templated' => '0',
102
+ 'node_id' => 'pve',
99
103
  'config_attributes' => {
100
104
  'cores' => '1',
101
105
  'cpulimit' => '1'
@@ -113,7 +117,7 @@ module ForemanFogProxmox
113
117
  }
114
118
  }
115
119
  }.with_indifferent_access
116
- @cr.stubs(:parse_server_vm).returns('vmid' => '100', 'type' => 'qemu', 'cores' => '1', 'cpulimit' => '1', 'config_attributes' => { 'onboot' => '0' })
120
+ @cr.stubs(:parse_server_vm).returns('vmid' => '100', 'node_id' => 'pve', 'type' => 'qemu', 'cores' => '1', 'cpulimit' => '1', 'config_attributes' => { 'onboot' => '0' })
117
121
  expected_config_attr = { :cores => '1', :cpulimit => '1' }
118
122
  expected_volume_attr = 'scsi0'
119
123
  vm.expects(:detach, expected_volume_attr)
@@ -137,9 +141,11 @@ module ForemanFogProxmox
137
141
  vm.stubs(:container?).returns(false)
138
142
  vm.stubs(:templated?).returns(false)
139
143
  vm.stubs(:type).returns('qemu')
144
+ vm.stubs(:node_id).returns('pve')
140
145
  @cr.stubs(:find_vm_by_uuid).returns(vm)
141
146
  new_attributes = {
142
147
  'templated' => '0',
148
+ 'node_id' => 'pve',
143
149
  'config_attributes' => {
144
150
  'cores' => '1',
145
151
  'cpulimit' => '1'
@@ -157,7 +163,7 @@ module ForemanFogProxmox
157
163
  }
158
164
  }
159
165
  }.with_indifferent_access
160
- @cr.stubs(:parse_server_vm).returns('vmid' => '100', 'type' => 'qemu', 'cores' => '1', 'cpulimit' => '1')
166
+ @cr.stubs(:parse_server_vm).returns('vmid' => '100', 'node_id' => 'pve', 'type' => 'qemu', 'cores' => '1', 'cpulimit' => '1')
161
167
  expected_config_attr = { :cores => '1', :cpulimit => '1' }
162
168
  expected_volume_attr = ['scsi0', '+1G']
163
169
  vm.expects(:extend, expected_volume_attr)
@@ -179,9 +185,11 @@ module ForemanFogProxmox
179
185
  vm.stubs(:config).returns(config)
180
186
  vm.stubs(:container?).returns(false)
181
187
  vm.stubs(:type).returns('qemu')
188
+ vm.stubs(:node_id).returns('pve')
182
189
  @cr.stubs(:find_vm_by_uuid).returns(vm)
183
190
  new_attributes = {
184
191
  'templated' => '0',
192
+ 'node_id' => 'pve',
185
193
  'config_attributes' => {
186
194
  'cores' => '1',
187
195
  'cpulimit' => '1'
@@ -199,7 +207,7 @@ module ForemanFogProxmox
199
207
  }
200
208
  }
201
209
  }.with_indifferent_access
202
- @cr.stubs(:parse_server_vm).returns('vmid' => '100', 'type' => 'qemu', 'cores' => '1', 'cpulimit' => '1')
210
+ @cr.stubs(:parse_server_vm).returns('vmid' => '100', 'node_id' => 'pve', 'type' => 'qemu', 'cores' => '1', 'cpulimit' => '1')
203
211
  err = assert_raises Foreman::Exception do
204
212
  @cr.save_vm(uuid, new_attributes)
205
213
  end
@@ -220,9 +228,11 @@ module ForemanFogProxmox
220
228
  vm.stubs(:config).returns(config)
221
229
  vm.stubs(:container?).returns(false)
222
230
  vm.stubs(:type).returns('qemu')
231
+ vm.stubs(:node_id).returns('pve')
223
232
  @cr.stubs(:find_vm_by_uuid).returns(vm)
224
233
  new_attributes = {
225
234
  'templated' => '0',
235
+ 'node_id' => 'pve',
226
236
  'config_attributes' => {
227
237
  'cores' => '1',
228
238
  'cpulimit' => '1'
@@ -240,7 +250,7 @@ module ForemanFogProxmox
240
250
  }
241
251
  }
242
252
  }.with_indifferent_access
243
- @cr.stubs(:parse_server_vm).returns('vmid' => '100', 'type' => 'qemu', 'cores' => '1', 'cpulimit' => '1')
253
+ @cr.stubs(:parse_server_vm).returns('vmid' => '100', 'node_id' => 'pve', 'type' => 'qemu', 'cores' => '1', 'cpulimit' => '1')
244
254
  expected_config_attr = { :cores => '1', :cpulimit => '1' }
245
255
  expected_volume_attr = ['scsi0', 'local-lvm2']
246
256
  vm.expects(:move, expected_volume_attr)
@@ -264,9 +274,11 @@ module ForemanFogProxmox
264
274
  vm.stubs(:config).returns(config)
265
275
  vm.stubs(:container?).returns(false)
266
276
  vm.stubs(:type).returns('qemu')
277
+ vm.stubs(:node_id).returns('pve')
267
278
  @cr.stubs(:find_vm_by_uuid).returns(vm)
268
279
  new_attributes = {
269
280
  'templated' => '0',
281
+ 'node_id' => 'pve',
270
282
  'config_attributes' => {
271
283
  'cores' => '1',
272
284
  'cpulimit' => '1'
@@ -284,7 +296,7 @@ module ForemanFogProxmox
284
296
  }
285
297
  }
286
298
  }.with_indifferent_access
287
- @cr.stubs(:parse_server_vm).returns('vmid' => '100', 'type' => 'qemu', 'cores' => '1', 'cpulimit' => '1')
299
+ @cr.stubs(:parse_server_vm).returns('vmid' => '100', 'node_id' => 'pve', 'type' => 'qemu', 'cores' => '1', 'cpulimit' => '1')
288
300
  expected_config_attr = { :cores => '1', :cpulimit => '1' }
289
301
  expected_volume_attr = { :id => 'scsi0', :volid => 'local-lvm:vm-100-disk-0', :size => 1_073_741_824 }, { :cache => 'directsync' }
290
302
  vm.expects(:attach, expected_volume_attr)