foreman_fog_proxmox 0.12.1 → 0.13.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (86) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +25 -6
  3. data/app/assets/javascripts/foreman_fog_proxmox/proxmox_compute_resource.js +36 -2
  4. data/app/assets/javascripts/foreman_fog_proxmox/proxmox_vm.js +134 -60
  5. data/app/assets/javascripts/foreman_fog_proxmox/proxmox_vm_server.js +2 -50
  6. data/app/assets/javascripts/foreman_fog_proxmox/proxmox_volume.js +39 -0
  7. data/app/assets/javascripts/foreman_fog_proxmox/proxmox_volume_cdrom.js +63 -0
  8. data/app/assets/javascripts/foreman_fog_proxmox/proxmox_volume_cloudinit.js +25 -0
  9. data/app/controllers/concerns/foreman_fog_proxmox/controller/parameters/compute_resource.rb +1 -1
  10. data/app/controllers/foreman_fog_proxmox/compute_resources_controller.rb +23 -25
  11. data/app/helpers/proxmox_compute_controllers_helper.rb +39 -0
  12. data/app/helpers/proxmox_compute_resources_helper.rb +49 -0
  13. data/app/helpers/proxmox_compute_selectors_helper.rb +6 -44
  14. data/app/helpers/proxmox_form_helper.rb +12 -4
  15. data/app/{models/concerns/fog_extensions/proxmox/volume.rb → helpers/proxmox_storages_helper.rb} +5 -8
  16. data/app/helpers/proxmox_vm_cdrom_helper.rb +35 -0
  17. data/app/helpers/proxmox_vm_cloudinit_helper.rb +43 -0
  18. data/app/helpers/proxmox_vm_config_helper.rb +160 -0
  19. data/app/helpers/proxmox_vm_helper.rb +24 -62
  20. data/app/helpers/proxmox_vm_interfaces_helper.rb +85 -0
  21. data/app/helpers/proxmox_vm_os_template_helper.rb +47 -0
  22. data/app/{models/foreman_fog_proxmox/proxmox_token_expiration.rb → helpers/proxmox_vm_uuid_helper.rb} +14 -10
  23. data/app/helpers/proxmox_vm_volumes_helper.rb +105 -0
  24. data/app/models/concerns/fog_extensions/proxmox/disk.rb +17 -2
  25. data/app/models/concerns/fog_extensions/proxmox/interface.rb +19 -4
  26. data/app/models/concerns/fog_extensions/proxmox/server.rb +12 -3
  27. data/app/models/concerns/fog_extensions/proxmox/server_config.rb +8 -30
  28. data/app/models/concerns/host_ext/proxmox/interfaces.rb +7 -2
  29. data/app/models/concerns/orchestration/proxmox/compute.rb +49 -0
  30. data/app/models/foreman_fog_proxmox/proxmox.rb +58 -15
  31. data/app/models/foreman_fog_proxmox/proxmox_compute_attributes.rb +14 -18
  32. data/app/models/foreman_fog_proxmox/proxmox_connection.rb +14 -9
  33. data/app/models/foreman_fog_proxmox/proxmox_images.rb +2 -1
  34. data/app/models/foreman_fog_proxmox/proxmox_interfaces.rb +53 -28
  35. data/app/models/foreman_fog_proxmox/proxmox_operating_systems.rb +1 -1
  36. data/app/models/foreman_fog_proxmox/proxmox_version.rb +7 -2
  37. data/app/models/foreman_fog_proxmox/proxmox_vm_commands.rb +19 -31
  38. data/app/models/foreman_fog_proxmox/proxmox_vm_new.rb +108 -94
  39. data/app/models/foreman_fog_proxmox/proxmox_vm_queries.rb +9 -6
  40. data/app/models/foreman_fog_proxmox/proxmox_volumes.rb +79 -22
  41. data/app/services/foreman_fog_proxmox/node_dashboard/data.rb +6 -2
  42. data/app/views/api/v2/compute_resources/proxmox.json.rabl +1 -1
  43. data/app/views/compute_resources/form/_proxmox.html.erb +23 -10
  44. data/app/views/compute_resources/show/_proxmox.html.erb +6 -6
  45. data/app/views/compute_resources_vms/form/proxmox/_add_vm_type_to_nic_provider_specific_form.html.erb +3 -1
  46. data/app/views/compute_resources_vms/form/proxmox/_add_vm_type_to_volumes_edit.html.erb +46 -29
  47. data/app/views/compute_resources_vms/form/proxmox/_base.html.erb +3 -3
  48. data/app/views/compute_resources_vms/form/proxmox/_removable_layout.html.erb +2 -1
  49. data/app/views/compute_resources_vms/form/proxmox/container/_network.html.erb +8 -7
  50. data/app/views/compute_resources_vms/form/proxmox/server/_advanced.html.erb +0 -2
  51. data/app/views/compute_resources_vms/form/proxmox/server/_config.html.erb +15 -14
  52. data/app/views/compute_resources_vms/form/proxmox/server/_network.html.erb +2 -2
  53. data/app/views/compute_resources_vms/form/proxmox/server/_volume_cdrom.html.erb +34 -0
  54. data/app/views/compute_resources_vms/form/proxmox/server/_volume_cloud_init.html.erb +29 -0
  55. data/app/views/compute_resources_vms/form/proxmox/server/{_volume.html.erb → _volume_hard_disk.html.erb} +7 -3
  56. data/app/views/compute_resources_vms/show/_proxmox.html.erb +2 -0
  57. data/config/routes.rb +7 -7
  58. data/db/migrate/20210312105013_update_proxmox_uuid_host.rb +29 -0
  59. data/lib/foreman_fog_proxmox/engine.rb +15 -10
  60. data/lib/foreman_fog_proxmox/hash_collection.rb +69 -0
  61. data/lib/foreman_fog_proxmox/version.rb +1 -1
  62. data/lib/tasks/foreman_fog_proxmox_tasks.rake +0 -3
  63. data/test/factories/foreman_fog_proxmox/proxmox_container_mock_factory.rb +20 -8
  64. data/test/factories/foreman_fog_proxmox/proxmox_node_mock_factory.rb +5 -5
  65. data/test/factories/foreman_fog_proxmox/proxmox_server_mock_factory.rb +17 -7
  66. data/test/factories/proxmox_factory.rb +4 -4
  67. data/test/functional/compute_resources_controller_test.rb +4 -4
  68. data/test/unit/foreman_fog_proxmox/helpers/proxmox_container_helper_test.rb +53 -32
  69. data/test/unit/foreman_fog_proxmox/helpers/proxmox_server_helper_test.rb +56 -31
  70. data/test/unit/foreman_fog_proxmox/helpers/proxmox_vm_helper_test.rb +22 -20
  71. data/test/unit/foreman_fog_proxmox/helpers/proxmox_vm_uuid_helper_test.rb +38 -0
  72. data/test/unit/foreman_fog_proxmox/helpers/proxmox_vm_volumes_helper_test.rb +50 -0
  73. data/test/unit/foreman_fog_proxmox/proxmox_compute_attributes_test.rb +10 -11
  74. data/test/unit/foreman_fog_proxmox/proxmox_interfaces_test.rb +38 -10
  75. data/test/unit/foreman_fog_proxmox/proxmox_version_test.rb +10 -10
  76. data/test/unit/foreman_fog_proxmox/proxmox_vm_commands_container_test.rb +34 -24
  77. data/test/unit/foreman_fog_proxmox/proxmox_vm_commands_server_create_test.rb +8 -8
  78. data/test/unit/foreman_fog_proxmox/proxmox_vm_commands_server_update_cdrom_test.rb +181 -0
  79. data/test/unit/foreman_fog_proxmox/proxmox_vm_commands_server_update_cloudinit_test.rb +131 -0
  80. data/test/unit/foreman_fog_proxmox/{proxmox_vm_commands_server_update_volumes_test.rb → proxmox_vm_commands_server_update_hard_disk_test.rb} +45 -19
  81. data/test/unit/foreman_fog_proxmox/proxmox_vm_commands_server_update_test.rb +21 -21
  82. data/test/unit/foreman_fog_proxmox/proxmox_vm_new_test.rb +3 -3
  83. data/test/unit/foreman_fog_proxmox/proxmox_vm_queries_test.rb +3 -3
  84. metadata +47 -26
  85. data/app/helpers/proxmox_container_helper.rb +0 -163
  86. data/app/helpers/proxmox_server_helper.rb +0 -155
@@ -18,14 +18,14 @@
18
18
  # along with ForemanFogProxmox. If not, see <http://www.gnu.org/licenses/>.
19
19
 
20
20
  require 'test_plugin_helper'
21
- require 'fog/compute/proxmox/models/server'
22
- require 'fog/compute/proxmox/models/server_config'
23
- require 'fog/compute/proxmox/models/interface'
24
- require 'fog/compute/proxmox/models/interfaces'
25
- require 'fog/compute/proxmox/models/disk'
26
- require 'fog/compute/proxmox/models/disks'
27
- require 'fog/compute/proxmox/models/snapshots'
28
- require 'fog/compute/proxmox/models/tasks'
21
+ require 'fog/proxmox/compute/models/server'
22
+ require 'fog/proxmox/compute/models/server_config'
23
+ require 'fog/proxmox/compute/models/interface'
24
+ require 'fog/proxmox/compute/models/interfaces'
25
+ require 'fog/proxmox/compute/models/disk'
26
+ require 'fog/proxmox/compute/models/disks'
27
+ require 'fog/proxmox/compute/models/snapshots'
28
+ require 'fog/proxmox/compute/models/tasks'
29
29
 
30
30
  module ForemanFogProxmox
31
31
  class ProxmoxVmHelperTest < ActiveSupport::TestCase
@@ -39,7 +39,7 @@ module ForemanFogProxmox
39
39
  'vmid' => '100',
40
40
  'hostname' => 'test',
41
41
  :type => 'lxc',
42
- :node_id => 'pve',
42
+ :node_id => 'proxmox',
43
43
  :service => service,
44
44
  'templated' => '0',
45
45
  'memory' => '536870912',
@@ -61,7 +61,7 @@ module ForemanFogProxmox
61
61
  Fog::Proxmox::Compute::Server.new(
62
62
  'vmid' => '100',
63
63
  'name' => 'test',
64
- :node_id => 'pve',
64
+ :node_id => 'proxmox',
65
65
  :service => service,
66
66
  :type => 'qemu',
67
67
  'templated' => '0',
@@ -84,7 +84,7 @@ module ForemanFogProxmox
84
84
  let(:host_server) do
85
85
  { 'vmid' => '100',
86
86
  'name' => 'test',
87
- 'node_id' => 'pve',
87
+ 'node_id' => 'proxmox',
88
88
  'type' => 'qemu',
89
89
  'config_attributes' => {
90
90
  'memory' => '536870912',
@@ -110,7 +110,7 @@ module ForemanFogProxmox
110
110
  { 'vmid' => '100',
111
111
  'name' => 'test',
112
112
  'type' => 'lxc',
113
- 'node_id' => 'pve',
113
+ 'node_id' => 'proxmox',
114
114
  'ostemplate_storage' => 'local',
115
115
  'ostemplate_file' => 'local:vztmpl/alpine-3.7-default_20171211_amd64.tar.xz',
116
116
  'password' => 'proxmox01',
@@ -142,31 +142,33 @@ module ForemanFogProxmox
142
142
  describe 'object_to_config_hash' do
143
143
  setup { Fog.mock! }
144
144
  teardown { Fog.unmock! }
145
+ excluded_qemu_keys = ['templated', 'ide2', 'scsi0', 'net0', 'net1']
146
+ excluded_lxc_keys = ['templated', 'rootfs', 'mp0', 'net0', 'net1']
145
147
 
146
148
  it '#server qemu' do
147
- config_hash = object_to_config_hash(server)
148
- expected_config_hash = ActiveSupport::HashWithIndifferentAccess.new(server.config.attributes).reject { |key, _value| ['templated', 'ide2', 'scsi0', 'net0', 'net1'].include? key }
149
+ config_hash = object_to_config_hash(server, 'qemu')
150
+ expected_config_hash = ActiveSupport::HashWithIndifferentAccess.new(server.config.attributes).reject { |key, _value| excluded_qemu_keys.include? key }
149
151
  assert_equal expected_config_hash, config_hash['config_attributes']
150
152
  end
151
153
 
152
154
  it '#server lxc' do
153
- config_hash = object_to_config_hash(server)
155
+ config_hash = object_to_config_hash(server, 'lxc')
154
156
  assert config_hash.key?('config_attributes')
155
- expected_config_hash = ActiveSupport::HashWithIndifferentAccess.new(server.config.attributes).reject { |key, _value| ['templated', 'ide2', 'scsi0', 'net0', 'net1'].include? key }
157
+ expected_config_hash = ActiveSupport::HashWithIndifferentAccess.new(server.config.attributes).reject { |key, _value| excluded_qemu_keys.include? key }
156
158
  assert_equal expected_config_hash, config_hash['config_attributes']
157
159
  end
158
160
 
159
161
  it '#container qemu' do
160
- config_hash = object_to_config_hash(container)
162
+ config_hash = object_to_config_hash(container, 'qemu')
161
163
  assert config_hash.key?('config_attributes')
162
- expected_config_hash = ActiveSupport::HashWithIndifferentAccess.new(container.config.attributes).reject { |key, _value| ['templated', 'rootfs', 'mp0', 'net0', 'net1'].include? key }
164
+ expected_config_hash = ActiveSupport::HashWithIndifferentAccess.new(container.config.attributes).reject { |key, _value| excluded_lxc_keys.include? key }
163
165
  assert_equal expected_config_hash, config_hash['config_attributes']
164
166
  end
165
167
 
166
168
  it '#container lxc' do
167
- config_hash = object_to_config_hash(container)
169
+ config_hash = object_to_config_hash(container, 'lxc')
168
170
  assert config_hash.key?('config_attributes')
169
- expected_config_hash = ActiveSupport::HashWithIndifferentAccess.new(container.config.attributes).reject { |key, _value| ['templated', 'rootfs', 'mp0', 'net0', 'net1'].include? key }
171
+ expected_config_hash = ActiveSupport::HashWithIndifferentAccess.new(container.config.attributes).reject { |key, _value| excluded_lxc_keys.include? key }
170
172
  assert_equal expected_config_hash, config_hash['config_attributes']
171
173
  end
172
174
  end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright 2018 Tristan Robert
4
+
5
+ # This file is part of ForemanFogProxmox.
6
+
7
+ # ForemanFogProxmox is free software: you can redistribute it and/or modify
8
+ # it under the terms of the GNU General Public License as published by
9
+ # the Free Software Foundation, either version 3 of the License, or
10
+ # (at your option) any later version.
11
+
12
+ # ForemanFogProxmox is distributed in the hope that it will be useful,
13
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ # GNU General Public License for more details.
16
+
17
+ # You should have received a copy of the GNU General Public License
18
+ # along with ForemanFogProxmox. If not, see <http://www.gnu.org/licenses/>.
19
+
20
+ require 'test_plugin_helper'
21
+
22
+ module ForemanFogProxmox
23
+ class ProxmoxVmUuidHelperTest < ActiveSupport::TestCase
24
+ include ProxmoxVmUuidHelper
25
+
26
+ describe 'extract_vmid' do
27
+ setup { Fog.mock! }
28
+ teardown { Fog.unmock! }
29
+
30
+ it '#uuid=1_100 returns 100' do
31
+ assert_equal '100', extract_vmid('1_100')
32
+ end
33
+ it '#uuid=pve_100 returns ' do
34
+ assert_equal '', extract_vmid('pve_100')
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,50 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright 2018 Tristan Robert
4
+
5
+ # This file is part of ForemanFogProxmox.
6
+
7
+ # ForemanFogProxmox is free software: you can redistribute it and/or modify
8
+ # it under the terms of the GNU General Public License as published by
9
+ # the Free Software Foundation, either version 3 of the License, or
10
+ # (at your option) any later version.
11
+
12
+ # ForemanFogProxmox is distributed in the hope that it will be useful,
13
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ # GNU General Public License for more details.
16
+
17
+ # You should have received a copy of the GNU General Public License
18
+ # along with ForemanFogProxmox. If not, see <http://www.gnu.org/licenses/>.
19
+
20
+ require 'test_plugin_helper'
21
+
22
+ module ForemanFogProxmox
23
+ class ProxmoxVmVolumesHelperTest < ActiveSupport::TestCase
24
+ include ProxmoxVmVolumesHelper
25
+
26
+ describe 'remove_deletes' do
27
+ setup { Fog.mock! }
28
+ teardown { Fog.unmock! }
29
+ args = {
30
+ 'volumes_attributes' => {
31
+ '0' => {
32
+ '_delete' => '',
33
+ 'id' => 'scsi0',
34
+ 'volid' => 'local-lvm:vm-100-disk',
35
+ 'storage' => 'local-lvm',
36
+ 'storage_type' => 'hard_disk'
37
+ }
38
+ }
39
+ }
40
+
41
+ it '# server volumes' do
42
+ remove_volume_keys(args)
43
+ assert args.key?('volumes_attributes')
44
+ assert args['volumes_attributes'].key?('0')
45
+ assert_not args['volumes_attributes']['0'].key?('_delete')
46
+ # assert_not args['volumes_attributes']['0'].key?('storage_type')
47
+ end
48
+ end
49
+ end
50
+ end
@@ -61,7 +61,7 @@ module ForemanFogProxmox
61
61
  end
62
62
 
63
63
  it 'sets container hostname with host name' do
64
- physical_nic = FactoryBot.build(:nic_base_empty, :identifier => 'net0', :primary => true, :compute_attributes => { 'dhcpv4' => '1', 'dhcpv6' => '1' })
64
+ physical_nic = FactoryBot.build(:nic_base_empty, :identifier => 'net0', :primary => true, :compute_attributes => { 'dhcp' => '1', 'dhcp6' => '1' })
65
65
  host = FactoryBot.build(
66
66
  :host_empty,
67
67
  :interfaces => [physical_nic],
@@ -84,23 +84,23 @@ module ForemanFogProxmox
84
84
  before do
85
85
  @cr = FactoryBot.build_stubbed(:proxmox_cr)
86
86
  end
87
+ excluded_keys = [:vmid, :disks, :interfaces]
87
88
 
88
89
  it 'converts a server to hash' do
89
90
  vm, config_attributes, volume_attributes, interface_attributes = mock_server_vm
90
91
  vm_attrs = @cr.vm_compute_attributes(vm)
91
92
  assert_not vm_attrs.key?(:config)
92
93
  assert vm_attrs.key?(:config_attributes)
93
- assert_equal config_attributes.reject { |key, value| [:vmid, :disks, :interfaces].include?(key) || value.to_s.empty? }, vm_attrs[:config_attributes]
94
+ assert_equal config_attributes.reject { |key, value| excluded_keys.include?(key) || value.to_s.empty? }, vm_attrs[:config_attributes]
94
95
  assert_not vm_attrs[:config_attributes].key?(:disks)
95
96
  assert vm_attrs.key?(:volumes_attributes)
96
97
  assert_equal volume_attributes, vm_attrs[:volumes_attributes]['0']
97
98
  assert_not vm_attrs[:config_attributes].key?(:interfaces)
98
99
  assert vm_attrs.key?(:interfaces_attributes)
99
100
  assert_equal interface_attributes[:id], vm_attrs[:interfaces_attributes]['0'][:id]
100
- assert_equal interface_attributes[:id], vm_attrs[:interfaces_attributes]['0'][:identifier]
101
- assert_equal interface_attributes[:macaddr], vm_attrs[:interfaces_attributes]['0'][:mac]
102
- assert_equal interface_attributes[:model], vm_attrs[:interfaces_attributes]['0'][:compute_attributes][:model]
103
- assert_equal interface_attributes[:bridge], vm_attrs[:interfaces_attributes]['0'][:compute_attributes][:bridge]
101
+ assert_equal interface_attributes[:mac], vm_attrs[:interfaces_attributes]['0'][:compute_attributes][:macaddr]
102
+ assert_equal interface_attributes[:compute_attributes][:model], vm_attrs[:interfaces_attributes]['0'][:compute_attributes][:model]
103
+ assert_equal interface_attributes[:compute_attributes][:bridge], vm_attrs[:interfaces_attributes]['0'][:compute_attributes][:bridge]
104
104
  end
105
105
 
106
106
  it 'converts a container to hash' do
@@ -108,16 +108,15 @@ module ForemanFogProxmox
108
108
  vm_attrs = @cr.vm_compute_attributes(vm)
109
109
  assert_not vm_attrs.key?(:config)
110
110
  assert vm_attrs.key?(:config_attributes)
111
- assert_equal config_attributes.reject { |key, value| [:vmid, :disks, :interfaces].include?(key) || value.to_s.empty? }, vm_attrs[:config_attributes]
111
+ assert_equal config_attributes.reject { |key, value| excluded_keys.include?(key) || value.to_s.empty? }, vm_attrs[:config_attributes]
112
112
  assert_not vm_attrs[:config_attributes].key?(:disks)
113
113
  assert vm_attrs.key?(:volumes_attributes)
114
114
  assert_equal volume_attributes, vm_attrs[:volumes_attributes]['0']
115
115
  assert vm_attrs.key?(:interfaces_attributes)
116
116
  assert_equal interface_attributes[:id], vm_attrs[:interfaces_attributes]['0'][:id]
117
- assert_equal interface_attributes[:id], vm_attrs[:interfaces_attributes]['0'][:identifier]
118
- assert_equal interface_attributes[:name], vm_attrs[:interfaces_attributes]['0'][:compute_attributes][:name]
119
- assert_equal interface_attributes[:mac], vm_attrs[:interfaces_attributes]['0'][:compute_attributes][:mac]
120
- assert_equal interface_attributes[:bridge], vm_attrs[:interfaces_attributes]['0'][:compute_attributes][:bridge]
117
+ assert_equal interface_attributes[:compute_attributes][:name], vm_attrs[:interfaces_attributes]['0'][:compute_attributes][:name]
118
+ assert_equal interface_attributes[:mac], vm_attrs[:interfaces_attributes]['0'][:compute_attributes][:hwaddr]
119
+ assert_equal interface_attributes[:compute_attributes][:bridge], vm_attrs[:interfaces_attributes]['0'][:compute_attributes][:bridge]
121
120
  end
122
121
  end
123
122
  end
@@ -46,10 +46,11 @@ module ForemanFogProxmox
46
46
  assert err.message.end_with?('Invalid identifier interface[0]. Must be net[n] with n integer >= 0')
47
47
  end
48
48
 
49
- it 'sets server compute id with identifier, ip and ip6' do
49
+ it 'sets server compute id with identifier, ip and ip6 and mac adress' do
50
50
  ip = '192.168.56.100'
51
+ mac_address = '36:25:8C:53:0C:50'
51
52
  ip6 = Array.new(4) { format('%<x>s', x: rand(16**4)) }.join(':') + '::1'
52
- physical_nic = FactoryBot.build(:nic_base_empty, :identifier => 'net0', :ip => ip, :ip6 => ip6)
53
+ physical_nic = FactoryBot.build(:nic_base_empty, :identifier => 'net0', :ip => ip, :ip6 => ip6, :mac => mac_address)
53
54
  host = FactoryBot.build(
54
55
  :host_empty,
55
56
  :interfaces => [physical_nic],
@@ -65,13 +66,14 @@ module ForemanFogProxmox
65
66
  assert_equal 'net0', nic_attr[:id]
66
67
  assert_equal ip, nic_attr[:ip]
67
68
  assert_equal ip6, nic_attr[:ip6]
69
+ assert_equal mac_address, nic_attr[:macaddr]
68
70
  end
69
71
 
70
72
  it 'sets container compute id with identifier, ip/CIDR, gw and ip6' do
71
73
  ip = '192.168.56.100'
72
- cidr_suffix = '31'
74
+ cidr = '31'
73
75
  ip6 = Array.new(4) { format('%<x>s', x: rand(16**4)) }.join(':') + '::1'
74
- physical_nic = FactoryBot.build(:nic_base_empty, :identifier => 'net0', :ip => ip, :ip6 => ip6, :compute_attributes => { 'cidrv4_prefix' => cidr_suffix, 'gwv4' => ip, 'dhcpv6' => '1' })
76
+ physical_nic = FactoryBot.build(:nic_base_empty, :identifier => 'net0', :ip => ip, :ip6 => ip6, :compute_attributes => { 'cidr' => cidr, 'gw' => ip, 'ip' => ip, 'dhcp6' => '1' })
75
77
  host = FactoryBot.build(
76
78
  :host_empty,
77
79
  :interfaces => [physical_nic],
@@ -85,16 +87,16 @@ module ForemanFogProxmox
85
87
  nic_attributes = @cr.host_interfaces_attrs(host).values.select(&:present?)
86
88
  nic_attr = nic_attributes.first
87
89
  assert_equal 'net0', nic_attr[:id]
88
- assert_equal Fog::Proxmox::IpHelper.to_cidr(ip, cidr_suffix), nic_attr[:ip]
89
- assert_equal ip, nic_attr[:gw]
90
+ assert_equal Fog::Proxmox::IpHelper.to_cidr(ip, cidr), nic_attr[:ip]
91
+ assert_equal ip, nic_attr['gw']
90
92
  assert_equal 'dhcp', nic_attr[:ip6]
91
93
  end
92
94
 
93
95
  it 'sets container compute id with identifier, ip DHCP, gw6 and ip6' do
94
96
  ip = '192.168.56.100'
95
- cidr6_suffix = '100'
97
+ cidr6 = '100'
96
98
  ip6 = '2001:0:1234::c1c0:abcd:876'
97
- physical_nic = FactoryBot.build(:nic_base_empty, :identifier => 'net0', :ip => ip, :ip6 => ip6, :compute_attributes => { 'cidrv6_prefix' => cidr6_suffix, 'dhcpv4' => '1', 'gwv6' => ip6 })
99
+ physical_nic = FactoryBot.build(:nic_base_empty, :identifier => 'net0', :ip => ip, :ip6 => ip6, :compute_attributes => { 'cidr6' => cidr6, 'dhcp' => '1', 'gw6' => ip6 })
98
100
  host = FactoryBot.build(
99
101
  :host_empty,
100
102
  :interfaces => [physical_nic],
@@ -109,8 +111,34 @@ module ForemanFogProxmox
109
111
  nic_attr = nic_attributes.first
110
112
  assert_equal 'net0', nic_attr[:id]
111
113
  assert_equal 'dhcp', nic_attr[:ip]
112
- assert_equal Fog::Proxmox::IpHelper.to_cidr6(ip6, cidr6_suffix), nic_attr[:ip6]
113
- assert_equal ip6, nic_attr[:gw6]
114
+ assert_equal Fog::Proxmox::IpHelper.to_cidr6(ip6, cidr6), nic_attr[:ip6]
115
+ assert_equal ip6, nic_attr['gw6']
116
+ end
117
+
118
+ it 'sets container compute id with identifier, ip DHCP, mac adress and firewall' do
119
+ ip = '192.168.56.100'
120
+ mac_address = '36:25:8C:53:0C:50'
121
+ ip6 = '2001:0:1234::c1c0:abcd:876'
122
+ firewall = '1'
123
+ compute_attributes = { 'dhcp' => '1', 'ip6' => ip6, 'firewall' => firewall }
124
+ physical_nic = FactoryBot.build(:nic_base_empty, :identifier => 'net0', :ip => ip, :ip6 => ip6, :mac => mac_address, :compute_attributes => compute_attributes)
125
+ host = FactoryBot.build(
126
+ :host_empty,
127
+ :interfaces => [physical_nic],
128
+ :compute_attributes => {
129
+ 'type' => 'lxc',
130
+ 'interfaces_attributes' => {
131
+ '0' => physical_nic
132
+ }
133
+ }
134
+ )
135
+ nic_attributes = @cr.host_interfaces_attrs(host).values.select(&:present?)
136
+ nic_attr = nic_attributes.first
137
+ assert_equal 'net0', nic_attr[:id]
138
+ assert_equal 'dhcp', nic_attr[:ip]
139
+ assert_equal mac_address, nic_attr[:hwaddr]
140
+ assert_equal ip6, nic_attr[:ip6]
141
+ assert_equal firewall, nic_attr['firewall']
114
142
  end
115
143
  end
116
144
  end
@@ -26,11 +26,11 @@ module ForemanFogProxmox
26
26
  include ComputeResourceTestHelpers
27
27
  include ProxmoxVmHelper
28
28
 
29
- wrong_version = { version: '5.a', release: '1' }.with_indifferent_access
30
- supported_version = { version: '5.4', release: '3' }.with_indifferent_access
31
- supported_6_version = { version: '6.0', release: '1' }.with_indifferent_access
32
- supported_6_1_version = { version: '6.1', release: '3' }.with_indifferent_access
33
- unsupported_version = { version: '5.2', release: '2' }.with_indifferent_access
29
+ wrong_version = { version: '5.a', release: '5.a-1' }.with_indifferent_access
30
+ supported_version = { version: '5.4', release: '5.4-3' }.with_indifferent_access
31
+ supported_6_version = { version: '6.0', release: '6.0-1' }.with_indifferent_access
32
+ supported_6_1_version = { version: '6.1', release: '6.1-3' }.with_indifferent_access
33
+ unsupported_version = { version: '5.2', release: '5.2-2' }.with_indifferent_access
34
34
 
35
35
  describe 'version' do
36
36
  before do
@@ -41,17 +41,17 @@ module ForemanFogProxmox
41
41
 
42
42
  it 'returns 5.a.1 with 5.a-1' do
43
43
  @identity_client.stubs(:read_version).returns(wrong_version)
44
- assert_equal '5.a.1', @cr.version
44
+ assert_equal '5.a', @cr.version
45
45
  end
46
46
 
47
47
  it 'returns 5.4.3 with 5.4-3' do
48
48
  @identity_client.stubs(:read_version).returns(supported_version)
49
- assert_equal '5.4.3', @cr.version
49
+ assert_equal '5.4', @cr.version
50
50
  end
51
51
 
52
52
  it 'returns 5.2.2 with 5.2-2' do
53
53
  @identity_client.stubs(:read_version).returns(unsupported_version)
54
- assert_equal '5.2.2', @cr.version
54
+ assert_equal '5.2', @cr.version
55
55
  end
56
56
  end
57
57
 
@@ -62,12 +62,12 @@ module ForemanFogProxmox
62
62
  @cr.stubs(:identity_client).returns(@identity_client)
63
63
  end
64
64
 
65
- it 'raises error with 5.a.1' do
65
+ it 'raises error with 5.a' do
66
66
  @identity_client.stubs(:read_version).returns(wrong_version)
67
67
  err = assert_raises Foreman::Exception do
68
68
  @cr.version_suitable?
69
69
  end
70
- assert err.message.end_with?('Proxmox version 5.a.1 is not semver suitable')
70
+ assert err.message.end_with?('Proxmox version 5.a is not semver suitable')
71
71
  end
72
72
 
73
73
  it 'is true with 5.4-3' do
@@ -43,10 +43,11 @@ module ForemanFogProxmox
43
43
  vm.stubs(:config).returns(config)
44
44
  vm.stubs(:container?).returns(true)
45
45
  vm.stubs(:type).returns('lxc')
46
- vm.stubs(:node_id).returns('pve')
46
+ vm.stubs(:node_id).returns('proxmox')
47
+ vm.stubs(:attributes).returns(node_id: 'proxmox', type: 'lxc')
47
48
  @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')
49
+ attr = { 'templated' => '0', 'node_id' => 'proxmox', 'config_attributes' => { 'cores' => '1', 'cpulimit' => '1', 'onboot' => '0' } }.with_indifferent_access
50
+ @cr.stubs(:parse_container_vm).returns('vmid' => '100', 'node_id' => 'proxmox2', 'type' => 'lxc', 'cores' => '1', 'cpulimit' => '1')
50
51
  expected_attr = { :cores => '1', :cpulimit => '1' }
51
52
  vm.expects(:update, expected_attr)
52
53
  @cr.save_vm(uuid, attr)
@@ -60,10 +61,11 @@ module ForemanFogProxmox
60
61
  vm.stubs(:config).returns(config)
61
62
  vm.stubs(:container?).returns(true)
62
63
  vm.stubs(:type).returns('lxc')
63
- vm.stubs(:node_id).returns('pve')
64
+ vm.stubs(:node_id).returns('proxmox')
65
+ vm.stubs(:attributes).returns(node_id: 'proxmox', type: 'lxc')
64
66
  @cr.stubs(:find_vm_by_uuid).returns(vm)
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')
67
+ attr = { 'templated' => '0', 'node_id' => 'proxmox', 'config_attributes' => { 'cores' => '1', 'cpulimit' => '1', 'onboot' => '0' } }.with_indifferent_access
68
+ @cr.stubs(:parse_container_vm).returns('vmid' => '100', 'node_id' => 'proxmox', 'type' => 'lxc', 'cores' => '1', 'cpulimit' => '1')
67
69
  expected_attr = { :cores => '1', :cpulimit => '1' }
68
70
  vm.expects(:update, expected_attr)
69
71
  @cr.save_vm(uuid, attr)
@@ -81,14 +83,16 @@ module ForemanFogProxmox
81
83
  config.stubs(:disks).returns(disks)
82
84
  config.stubs(:attributes).returns(:cores => '')
83
85
  vm = mock('vm')
86
+ vm.stubs(:identity).returns(uuid)
84
87
  vm.stubs(:config).returns(config)
85
88
  vm.stubs(:container?).returns(true)
86
89
  vm.stubs(:type).returns('lxc')
87
- vm.stubs(:node_id).returns('pve')
90
+ vm.stubs(:node_id).returns('proxmox')
91
+ vm.stubs(:attributes).returns(node_id: 'proxmox', type: 'lxc')
88
92
  @cr.stubs(:find_vm_by_uuid).returns(vm)
89
93
  new_attributes = {
90
94
  'templated' => '0',
91
- 'node_id' => 'pve',
95
+ 'node_id' => 'proxmox',
92
96
  'config_attributes' => {
93
97
  'cores' => '1',
94
98
  'cpulimit' => '1'
@@ -105,7 +109,7 @@ module ForemanFogProxmox
105
109
  }
106
110
  }
107
111
  }.with_indifferent_access
108
- @cr.stubs(:parse_container_vm).returns('vmid' => '100', 'node_id' => 'pve', 'type' => 'lxc', 'cores' => '1', 'cpulimit' => '1')
112
+ @cr.stubs(:parse_container_vm).returns('vmid' => '100', 'node_id' => 'proxmox', 'type' => 'lxc', 'cores' => '1', 'cpulimit' => '1')
109
113
  expected_config_attr = { :cores => '1', :cpulimit => '1' }
110
114
  expected_volume_attr =
111
115
  [
@@ -131,19 +135,22 @@ module ForemanFogProxmox
131
135
  disk.stubs(:size).returns(1_073_741_824)
132
136
  disk.stubs(:storage).returns('local-lvm')
133
137
  disk.stubs(:id).returns('rootfs')
138
+ disk.stubs(:attributes).returns(id: 'rootfs', storage: 'local-lvm', size: 1_073_741_824)
134
139
  disks.stubs(:get).returns(disk)
135
140
  config.stubs(:disks).returns(disks)
136
141
  config.stubs(:attributes).returns(:cores => '')
137
142
  vm = mock('vm')
143
+ vm.stubs(:identity).returns(uuid)
138
144
  vm.stubs(:config).returns(config)
139
145
  vm.stubs(:container?).returns(true)
140
146
  vm.stubs(:type).returns('lxc')
141
- vm.stubs(:node_id).returns('pve')
147
+ vm.stubs(:node_id).returns('proxmox')
148
+ vm.stubs(:attributes).returns(node_id: 'proxmox', type: 'lxc', 'rootfs' => '')
142
149
  @cr.stubs(:find_vm_by_uuid).returns(vm)
143
150
  new_attributes =
144
151
  {
145
152
  'templated' => '0',
146
- 'node_id' => 'pve',
153
+ 'node_id' => 'proxmox',
147
154
  'config_attributes' => {
148
155
  'cores' => '1',
149
156
  'cpulimit' => '1',
@@ -163,7 +170,7 @@ module ForemanFogProxmox
163
170
  }.with_indifferent_access
164
171
  @cr.stubs(:parse_container_vm).returns(
165
172
  'vmid' => '100',
166
- 'node_id' => 'pve',
173
+ 'node_id' => 'proxmox',
167
174
  'type' => 'lxc',
168
175
  'cores' => '1',
169
176
  'cpulimit' => '1'
@@ -185,18 +192,21 @@ module ForemanFogProxmox
185
192
  disk.stubs(:id).returns('mp0')
186
193
  disk.stubs(:size).returns(1_073_741_824)
187
194
  disk.stubs(:storage).returns('local-lvm')
195
+ disk.stubs(:attributes).returns(id: 'mp0', storage: 'local-lvm', size: 1_073_741_824, volid: 'local-lvm:vm-100-disk-0')
188
196
  disks.stubs(:get).returns(disk)
189
197
  config.stubs(:disks).returns(disks)
190
198
  config.stubs(:attributes).returns(:cores => '')
191
199
  vm = mock('vm')
200
+ vm.stubs(:identity).returns(uuid)
192
201
  vm.stubs(:config).returns(config)
193
202
  vm.stubs(:container?).returns(true)
194
203
  vm.stubs(:type).returns('lxc')
195
- vm.stubs(:node_id).returns('pve')
204
+ vm.stubs(:node_id).returns('proxmox')
205
+ vm.stubs(:attributes).returns(node_id: 'proxmox', type: 'lxc')
196
206
  @cr.stubs(:find_vm_by_uuid).returns(vm)
197
207
  new_attributes = {
198
208
  'templated' => '0',
199
- 'node_id' => 'pve',
209
+ 'node_id' => 'proxmox',
200
210
  'config_attributes' => {
201
211
  'cores' => '1',
202
212
  'cpulimit' => '1'
@@ -214,7 +224,7 @@ module ForemanFogProxmox
214
224
  }
215
225
  }
216
226
  }.with_indifferent_access
217
- @cr.stubs(:parse_server_vm).returns('vmid' => '100', 'node_id' => 'pve', 'type' => 'qemu', 'cores' => '1', 'cpulimit' => '1')
227
+ @cr.stubs(:parse_typed_vm).returns('vmid' => '100', 'node_id' => 'proxmox', 'type' => 'qemu', 'cores' => '1', 'cpulimit' => '1')
218
228
  expected_config_attr = { :cores => '1', :cpulimit => '1' }
219
229
  expected_volume_attr = { :id => 'mp0', :volid => 'local-lvm:vm-100-disk-0', :size => 1_073_741_824 }, { :mp => '/opt/toto' }
220
230
  vm.expects(:attach, expected_volume_attr)
@@ -225,44 +235,44 @@ module ForemanFogProxmox
225
235
 
226
236
  describe 'create_vm' do
227
237
  it 'creates container without bootstart' do
228
- args = { vmid: '100', type: 'lxc', node_id: 'pve', start_after_create: '0' }
238
+ args = { vmid: '100', type: 'lxc', node_id: 'proxmox', start_after_create: '0' }
229
239
  servers = mock('servers')
230
240
  servers.stubs(:id_valid?).returns(true)
231
241
  containers = mock('containers')
232
- containers.stubs(:create).with(vmid: 100, type: 'lxc', node_id: 'pve', start_after_create: '0')
242
+ containers.stubs(:create).with(args)
233
243
  cr = mock_node_servers_containers(ForemanFogProxmox::Proxmox.new, servers, containers)
234
244
  cr.stubs(:convert_sizes).with(args)
235
- cr.stubs(:parse_container_vm).with(args).returns(args)
245
+ cr.stubs(:parse_typed_vm).with(args, 'lxc').returns(args)
236
246
  vm = mock('vm')
237
247
  cr.stubs(:find_vm_by_uuid).with((args[:vmid]).to_s).returns(vm)
238
248
  cr.create_vm(args)
239
249
  end
240
250
 
241
251
  it 'creates container with bootstart' do
242
- args = { vmid: '100', type: 'lxc', node_id: 'pve', start_after_create: '1' }
252
+ args = { vmid: '100', type: 'lxc', node_id: 'proxmox', start_after_create: '1' }
243
253
  servers = mock('servers')
244
254
  servers.stubs(:id_valid?).returns(true)
245
255
  containers = mock('containers')
246
256
  vm = mock('vm')
247
- containers.stubs(:create).with(vmid: 100, type: 'lxc', node_id: 'pve', start_after_create: '1').returns(vm)
257
+ containers.stubs(:create).with(args).returns(vm)
248
258
  cr = mock_node_servers_containers(ForemanFogProxmox::Proxmox.new, servers, containers)
249
259
  cr.stubs(:convert_sizes).with(args)
250
- cr.stubs(:parse_container_vm).with(args).returns(args)
260
+ cr.stubs(:parse_typed_vm).with(args, 'lxc').returns(args)
251
261
  cr.stubs(:find_vm_by_uuid).with((args[:vmid]).to_s).returns(vm)
252
262
  cr.stubs(:start_on_boot).with(vm, args).returns(vm)
253
263
  cr.create_vm(args)
254
264
  end
255
265
 
256
266
  it 'creates container within pool' do
257
- args = { vmid: '100', type: 'lxc', node_id: 'pve', start_after_create: '0', pool: 'pool1' }
267
+ args = { vmid: '100', type: 'lxc', node_id: 'proxmox', start_after_create: '0', pool: 'pool1' }
258
268
  servers = mock('servers')
259
269
  servers.stubs(:id_valid?).returns(true)
260
270
  containers = mock('containers')
261
271
  vm = mock('vm')
262
- containers.stubs(:create).with(vmid: 100, type: 'lxc', node_id: 'pve', start_after_create: '0', pool: 'pool1').returns(vm)
272
+ containers.stubs(:create).with(args).returns(vm)
263
273
  cr = mock_node_servers_containers(ForemanFogProxmox::Proxmox.new, servers, containers)
264
274
  cr.stubs(:convert_sizes).with(args)
265
- cr.stubs(:parse_container_vm).with(args).returns(args)
275
+ cr.stubs(:parse_typed_vm).with(args, 'lxc').returns(args)
266
276
  cr.stubs(:find_vm_by_uuid).with((args[:vmid]).to_s).returns(vm)
267
277
  cr.create_vm(args)
268
278
  end