foreman_fog_proxmox 0.13.1 → 0.14.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +27 -14
- data/app/assets/javascripts/foreman_fog_proxmox/proxmox_compute_resource.js +6 -8
- data/app/assets/javascripts/foreman_fog_proxmox/proxmox_vm.js +59 -60
- data/app/assets/javascripts/foreman_fog_proxmox/proxmox_vm_server.js +2 -4
- data/app/assets/javascripts/foreman_fog_proxmox/proxmox_volume.js +10 -10
- data/app/assets/javascripts/foreman_fog_proxmox/proxmox_volume_cloudinit.js +0 -1
- data/app/controllers/concerns/foreman_fog_proxmox/compute_resources_vms_controller.rb +80 -0
- data/app/controllers/concerns/foreman_fog_proxmox/hosts_controller.rb +53 -0
- data/app/helpers/proxmox_compute_resources_vms_helper.rb +99 -0
- data/app/helpers/proxmox_form_helper.rb +1 -1
- data/app/models/concerns/fog_extensions/proxmox/server.rb +3 -3
- data/app/models/concerns/host_ext/proxmox/associator.rb +46 -0
- data/app/models/concerns/host_ext/proxmox/for_vm.rb +33 -0
- data/app/models/concerns/orchestration/proxmox/compute.rb +18 -8
- data/app/models/foreman_fog_proxmox/proxmox.rb +4 -0
- data/app/models/foreman_fog_proxmox/proxmox_compute_attributes.rb +2 -6
- data/app/models/foreman_fog_proxmox/proxmox_images.rb +13 -4
- data/app/models/foreman_fog_proxmox/proxmox_interfaces.rb +14 -12
- data/app/models/foreman_fog_proxmox/proxmox_vm_commands.rb +4 -2
- data/app/models/foreman_fog_proxmox/proxmox_vm_new.rb +2 -4
- data/app/models/foreman_fog_proxmox/proxmox_vm_queries.rb +6 -1
- data/app/models/foreman_fog_proxmox/vms.rb +1 -1
- data/app/overrides/compute_resources_vms/form/add_clone_to_new_vm_compute_detail.rb +1 -1
- data/app/services/concerns/foreman_fog_proxmox/compute_resource_host_associator.rb +34 -0
- data/app/views/compute_resources_vms/form/proxmox/_add_from_profile_to_compute_form.html.erb +2 -2
- data/app/views/compute_resources_vms/form/proxmox/_add_from_profile_to_hosts_compute_detail_form.html.erb +4 -2
- data/app/views/compute_resources_vms/form/proxmox/_base.html.erb +0 -1
- data/app/views/compute_resources_vms/form/proxmox/container/_network.html.erb +1 -1
- data/app/views/compute_resources_vms/form/proxmox/server/_network.html.erb +2 -2
- data/app/views/compute_resources_vms/index/_proxmox.html.erb +2 -2
- data/lib/foreman_fog_proxmox/engine.rb +7 -1
- data/lib/foreman_fog_proxmox/version.rb +1 -1
- data/test/unit/foreman_fog_proxmox/proxmox_images_test.rb +3 -3
- data/test/unit/foreman_fog_proxmox/proxmox_interfaces_test.rb +40 -38
- metadata +9 -3
@@ -166,9 +166,7 @@ module ForemanFogProxmox
|
|
166
166
|
def convert_config_attributes(new_attr)
|
167
167
|
config_attributes = new_attr[:config_attributes]
|
168
168
|
config_attributes[:volumes_attributes] = Hash[config_attributes[:disks].each_with_index.map { |disk, idx| [idx.to_s, disk.attributes] }] if config_attributes.key?(:disks)
|
169
|
-
if config_attributes.key?(:interfaces)
|
170
|
-
config_attributes[:interfaces_attributes] = Hash[config_attributes[:interfaces].each_with_index.map { |interface, idx| [idx.to_s, interface_compute_attributes(interface.attributes)] }]
|
171
|
-
end
|
169
|
+
config_attributes[:interfaces_attributes] = Hash[config_attributes[:interfaces].each_with_index.map { |interface, idx| [idx.to_s, interface_compute_attributes(interface.attributes)] }] if config_attributes.key?(:interfaces)
|
172
170
|
config_attributes.delete_if { |key, _value| ['disks', 'interfaces'].include?(key) }
|
173
171
|
end
|
174
172
|
|
@@ -181,7 +179,7 @@ module ForemanFogProxmox
|
|
181
179
|
new_attr_type ||= type
|
182
180
|
logger.debug(format(_('new_typed_vm(%<type>s): new_attr_type=%<new_attr_type>s'), type: type, new_attr_type: new_attr_type))
|
183
181
|
logger.debug(format(_('new_typed_vm(%<type>s): new_attr=%<new_attr>s'), type: type, new_attr: new_attr))
|
184
|
-
options = !new_attr.key?('vmid') || ForemanFogProxmox::Value.empty?(new_attr['vmid']) ?
|
182
|
+
options = !new_attr.key?('vmid') || ForemanFogProxmox::Value.empty?(new_attr['vmid']) ? vm_typed_instance_defaults(type).merge(new_attr).merge(type: type) : new_attr
|
185
183
|
logger.debug(format(_('new_typed_vm(%<type>s): options=%<options>s'), type: type, options: options))
|
186
184
|
vm_h = parse_typed_vm(options, type).deep_symbolize_keys
|
187
185
|
logger.debug(format(_('new_typed_vm(%<type>s): vm_h=%<vm_h>s'), type: type, vm_h: vm_h))
|
@@ -43,9 +43,14 @@ module ForemanFogProxmox
|
|
43
43
|
end
|
44
44
|
|
45
45
|
# TODO: Pagination with filters
|
46
|
-
def vms(
|
46
|
+
def vms(opts = {})
|
47
47
|
vms = []
|
48
48
|
nodes.each { |node| vms += node.servers.all + node.containers.all }
|
49
|
+
if opts.key?(:eager_loading) && opts[:eager_loading]
|
50
|
+
vms_eager = []
|
51
|
+
vms.each { |vm| vms_eager << vm.collection.get(vm.identity) }
|
52
|
+
vms = vms_eager
|
53
|
+
end
|
49
54
|
ForemanFogProxmox::Vms.new(vms)
|
50
55
|
end
|
51
56
|
|
@@ -20,6 +20,6 @@ Deface::Override.new(
|
|
20
20
|
:name => 'add_from_profile_to_compute_detail',
|
21
21
|
:replace => "erb[loud]:contains('provider_partial')",
|
22
22
|
:partial => 'compute_resources_vms/form/proxmox/add_from_profile_to_hosts_compute_detail_form',
|
23
|
-
:original => '
|
23
|
+
:original => '8902a49136f750d781dcaa44e7ffa8a29c1a94df',
|
24
24
|
:namespaced => true
|
25
25
|
)
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright 2021 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
|
+
module ForemanFogProxmox
|
21
|
+
module ComputeResourceHostAssociator
|
22
|
+
extend ActiveSupport::Concern
|
23
|
+
included do
|
24
|
+
prepend Overrides
|
25
|
+
end
|
26
|
+
module Overrides
|
27
|
+
def associate_hosts
|
28
|
+
compute_resource.vms(:eager_loading => true).each do |vm|
|
29
|
+
associate_vm(vm) if Host.for_vm_uuid(compute_resource, vm).empty?
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
data/app/views/compute_resources_vms/form/proxmox/_add_from_profile_to_compute_form.html.erb
CHANGED
@@ -16,8 +16,8 @@ You should have received a copy of the GNU General Public License
|
|
16
16
|
along with ForemanFogProxmox. If not, see <http://www.gnu.org/licenses/>. %>
|
17
17
|
<% if compute_resource.class == ForemanFogProxmox::Proxmox %>
|
18
18
|
<%= render :partial => provider_partial(compute_resource, 'base'),
|
19
|
-
:locals => { :f => f, :
|
19
|
+
:locals => { :f => f, :host => nil, :compute_resource => compute_resource, :new_host => true, :new_vm => true, :from_profile => from_profile } %>
|
20
20
|
<% else %>
|
21
21
|
<%= render :partial => provider_partial(compute_resource, 'base'),
|
22
|
-
:locals => { :f => f, :
|
22
|
+
:locals => { :f => f, :host => nil, :compute_resource => compute_resource, :new_host => true, :new_vm => true } %>
|
23
23
|
<% end %>
|
@@ -17,8 +17,10 @@ along with ForemanFogProxmox. If not, see <http://www.gnu.org/licenses/>. %>
|
|
17
17
|
|
18
18
|
<% if compute_resource.class == ForemanFogProxmox::Proxmox %>
|
19
19
|
<%= render :partial => provider_partial(compute_resource, 'base'),
|
20
|
-
:
|
20
|
+
locals: { f: f, host: host, compute_resource: compute_resource, new_host: host.new_record?, new_vm: new_vm,
|
21
|
+
arch: host.architecture_id, os: host.operatingsystem_id, from_profile: false } %>
|
21
22
|
<% else %>
|
22
23
|
<%= render :partial => provider_partial(compute_resource, 'base'),
|
23
|
-
:
|
24
|
+
locals: { f: f, host: host, compute_resource: compute_resource, new_host: host.new_record?, new_vm: new_vm,
|
25
|
+
arch: host.architecture_id, os: host.operatingsystem_id } %>
|
24
26
|
<% end %>
|
@@ -16,7 +16,6 @@ You should have received a copy of the GNU General Public License
|
|
16
16
|
along with ForemanFogProxmox. If not, see <http://www.gnu.org/licenses/>. %>
|
17
17
|
|
18
18
|
<%= javascript_include_tag 'foreman_fog_proxmox/proxmox_vm', "data-turbolinks-track" => true %>
|
19
|
-
<%= javascript_tag("$(document).on('ContentLoad', tfm.numFields.initAll)"); %>
|
20
19
|
|
21
20
|
<%= select_f f, :type, proxmox_types_map, :id, :name, { }, :label => _('Type'), :label_size => "col-md-2", :required => true, :onchange => "vmTypeSelected()", :disabled => !new_vm %>
|
22
21
|
|
@@ -19,7 +19,7 @@ along with ForemanFogProxmox. If not, see <http://www.gnu.org/licenses/>. %>
|
|
19
19
|
<% index = f.index ? f.index.present? : 0 %>
|
20
20
|
|
21
21
|
<%= field_set_tag _("Nic"), :id => "container_network_#{index}", :style => ('display: none;' unless container), :disabled => !container do %>
|
22
|
-
<%= f
|
22
|
+
<%= text_f f, :id, :label => _('Identifier'), :label_size => "col-md-2", :required => true, :label_help => _("net[n] with n integer >= 0, e.g. net0") %>
|
23
23
|
<%= text_f f, :name, :label => _('Name'), :label_size => "col-md-2", :required => true, :label_help => _("eth[n] with n integer >= 0, e.g. eth0") %>
|
24
24
|
<%= checkbox_f f, :dhcp, :label => _('DHCP IPv4') %>
|
25
25
|
<%= text_f f, :cidr, :label => _('CIDR IPv4'), :label_size => "col-md-2", :label_help => _("integer within [0..32]") %>
|
@@ -18,8 +18,8 @@ along with ForemanFogProxmox. If not, see <http://www.gnu.org/licenses/>. %>
|
|
18
18
|
<% server = vm_type == 'qemu' %>
|
19
19
|
<% index = f.index ? f.index.present? : 0 %>
|
20
20
|
|
21
|
-
<%= field_set_tag _("Nic"), :id => "server_network_#{index}", :style => ('display: none;' unless server), :disabled => !server do %>
|
22
|
-
<%= f
|
21
|
+
<%= field_set_tag _("Nic"), :id => "server_network_#{index}", :style => ('display: none;' unless server), :disabled => !server do %>
|
22
|
+
<%= text_f f, :id, :label => _('Identifier'), :label_size => "col-md-2", :required => true, :label_help => _("net[n] with n integer >= 0, e.g. net0") %>
|
23
23
|
<%= select_f f, :model, proxmox_networkcards_map, :id, :name, { }, :label => _('Card'), :label_size => "col-md-2" %>
|
24
24
|
<%= select_f f, :bridge, compute_resource.bridges(node_id), :iface, :iface, { }, :label => _('Bridge'), :label_size => "col-md-2" %>
|
25
25
|
<%= counter_f f, :tag, :class => "input-mini", :label => _('VLAN tag'), :label_size => "col-md-2" %>
|
@@ -31,7 +31,7 @@ along with ForemanFogProxmox. If not, see <http://www.gnu.org/licenses/>. %>
|
|
31
31
|
<tbody>
|
32
32
|
<% @vms.each do |vm| -%>
|
33
33
|
<tr>
|
34
|
-
<td><%= link_to_if_authorized vm.name, hash_for_compute_resource_vm_path(:compute_resource_id => @compute_resource, :id => vm.
|
34
|
+
<td><%= link_to_if_authorized vm.name, hash_for_compute_resource_vm_path(:compute_resource_id => @compute_resource, :id => vm.unique_cluster_identity(@compute_resource)) %></td>
|
35
35
|
<td><%= vm.node_id %></td>
|
36
36
|
<td><%= vm.type %></td>
|
37
37
|
<td><%= vm.cpus %></td>
|
@@ -41,7 +41,7 @@ along with ForemanFogProxmox. If not, see <http://www.gnu.org/licenses/>. %>
|
|
41
41
|
<td>
|
42
42
|
<%= action_buttons(
|
43
43
|
vm_power_action(vm, authorizer),
|
44
|
-
display_delete_if_authorized(hash_for_compute_resource_vm_path(:compute_resource_id => @compute_resource, :id => vm.
|
44
|
+
display_delete_if_authorized(hash_for_compute_resource_vm_path(:compute_resource_id => @compute_resource, :id => vm.unique_cluster_identity(@compute_resource)).merge(:auth_object => @compute_resource, :authorizer => authorizer))) %>
|
45
45
|
</td>
|
46
46
|
</tr>
|
47
47
|
<% end -%>
|
@@ -26,6 +26,7 @@ module ForemanFogProxmox
|
|
26
26
|
config.autoload_paths += Dir["#{config.root}/app/controllers/concerns"]
|
27
27
|
config.autoload_paths += Dir["#{config.root}/app/helpers/concerns"]
|
28
28
|
config.autoload_paths += Dir["#{config.root}/app/models/concerns"]
|
29
|
+
config.autoload_paths += Dir["#{config.root}/app/services/concerns"]
|
29
30
|
config.autoload_paths += Dir["#{config.root}/app/overrides"]
|
30
31
|
config.autoload_paths += Dir["#{config.root}/app/services"]
|
31
32
|
|
@@ -101,10 +102,15 @@ module ForemanFogProxmox
|
|
101
102
|
Fog::Proxmox::Compute::ServerConfig.include FogExtensions::Proxmox::ServerConfig
|
102
103
|
Fog::Proxmox::Compute::Interface.include FogExtensions::Proxmox::Interface
|
103
104
|
Fog::Proxmox::Compute::Disk.include FogExtensions::Proxmox::Disk
|
104
|
-
::ComputeResourcesController.include ForemanFogProxmox::Controller::Parameters::ComputeResource
|
105
105
|
Fog::Proxmox::Compute::Node.include FogExtensions::Proxmox::Node
|
106
|
+
::ComputeResourcesController.include ForemanFogProxmox::Controller::Parameters::ComputeResource
|
107
|
+
::ComputeResourcesVmsController.include ForemanFogProxmox::ComputeResourcesVmsController
|
108
|
+
::HostsController.include ForemanFogProxmox::HostsController
|
106
109
|
::Host::Managed.include Orchestration::Proxmox::Compute
|
107
110
|
::Host::Managed.include HostExt::Proxmox::Interfaces
|
111
|
+
::Host::Managed.include HostExt::Proxmox::Associator
|
112
|
+
::Host::Base.include HostExt::Proxmox::ForVm
|
113
|
+
::ComputeResourceHostAssociator.include ForemanFogProxmox::ComputeResourceHostAssociator
|
108
114
|
end
|
109
115
|
end
|
110
116
|
end
|
@@ -28,7 +28,7 @@ module ForemanFogProxmox
|
|
28
28
|
before do
|
29
29
|
@cr = FactoryBot.build_stubbed(:proxmox_cr)
|
30
30
|
@args = { :name => 'name' }
|
31
|
-
@image_id = 100
|
31
|
+
@image_id = @cr.id.to_s + '_' + 100.to_s
|
32
32
|
@vmid = 101
|
33
33
|
@image = mock('vm')
|
34
34
|
@image.expects(:clone)
|
@@ -38,13 +38,13 @@ module ForemanFogProxmox
|
|
38
38
|
it 'clones server from image' do
|
39
39
|
@clone.expects(:update).with(:name => 'name')
|
40
40
|
@clone.stubs(:container?).returns(false)
|
41
|
-
@cr.stubs(:find_vm_by_uuid).with(@vmid).returns(@clone)
|
41
|
+
@cr.stubs(:find_vm_by_uuid).with(@cr.id.to_s + '_' + @vmid.to_s).returns(@clone)
|
42
42
|
@cr.clone_from_image(@image_id, @args, @vmid)
|
43
43
|
end
|
44
44
|
it 'clones container from image' do
|
45
45
|
@clone.stubs(:container?).returns(true)
|
46
46
|
@clone.expects(:update).with(:hostname => 'name')
|
47
|
-
@cr.stubs(:find_vm_by_uuid).with(@vmid).returns(@clone)
|
47
|
+
@cr.stubs(:find_vm_by_uuid).with(@cr.id.to_s + '_' + @vmid.to_s).returns(@clone)
|
48
48
|
@cr.clone_from_image(@image_id, @args, @vmid)
|
49
49
|
end
|
50
50
|
end
|
@@ -37,29 +37,30 @@ module ForemanFogProxmox
|
|
37
37
|
@cr = FactoryBot.build_stubbed(:proxmox_cr)
|
38
38
|
end
|
39
39
|
|
40
|
-
it 'raises Foreman::Exception when
|
41
|
-
|
42
|
-
|
40
|
+
it 'raises Foreman::Exception when server proxmox NIC id does not match net[k] with k integer' do
|
41
|
+
compute_attributes = ActiveSupport::HashWithIndifferentAccess.new({ 'id' => 'dsfqsfqzef' })
|
42
|
+
physical_nic = FactoryBot.build(:nic_base_empty, :identifier => 'eth0', :compute_attributes => compute_attributes)
|
43
|
+
host = FactoryBot.build(
|
44
|
+
:host_empty,
|
45
|
+
:interfaces => [physical_nic],
|
46
|
+
:compute_attributes => ActiveSupport::HashWithIndifferentAccess.new({ type: 'qemu' })
|
47
|
+
)
|
43
48
|
err = assert_raises Foreman::Exception do
|
44
49
|
@cr.host_interfaces_attrs(host)
|
45
50
|
end
|
46
|
-
assert err.message.end_with?('Invalid
|
51
|
+
assert err.message.end_with?('Invalid proxmox NIC id on interface[0]. Must be net[n] with n integer >= 0')
|
47
52
|
end
|
48
53
|
|
49
|
-
it 'sets server compute id
|
54
|
+
it 'sets interface identifier with server compute id, ip and ip6 and mac adress' do
|
50
55
|
ip = '192.168.56.100'
|
51
|
-
mac_address = '36:25:
|
56
|
+
mac_address = '36:25:8c:53:0c:50'
|
52
57
|
ip6 = Array.new(4) { format('%<x>s', x: rand(16**4)) }.join(':') + '::1'
|
53
|
-
|
58
|
+
compute_attributes = ActiveSupport::HashWithIndifferentAccess.new({ 'id' => 'net0' })
|
59
|
+
physical_nic = FactoryBot.build(:nic_base_empty, :identifier => 'net0', :ip => ip, :ip6 => ip6, :mac => mac_address, :compute_attributes => compute_attributes)
|
54
60
|
host = FactoryBot.build(
|
55
61
|
:host_empty,
|
56
62
|
:interfaces => [physical_nic],
|
57
|
-
:compute_attributes => {
|
58
|
-
'type' => 'qemu',
|
59
|
-
'interfaces_attributes' => {
|
60
|
-
'0' => physical_nic
|
61
|
-
}
|
62
|
-
}
|
63
|
+
:compute_attributes => ActiveSupport::HashWithIndifferentAccess.new({ type: 'qemu' })
|
63
64
|
)
|
64
65
|
nic_attributes = @cr.host_interfaces_attrs(host).values.select(&:present?)
|
65
66
|
nic_attr = nic_attributes.first
|
@@ -69,20 +70,30 @@ module ForemanFogProxmox
|
|
69
70
|
assert_equal mac_address, nic_attr[:macaddr]
|
70
71
|
end
|
71
72
|
|
72
|
-
it '
|
73
|
+
it 'raises Foreman::Exception when container proxmox NIC id does not match net[k] with k integer' do
|
74
|
+
compute_attributes = ActiveSupport::HashWithIndifferentAccess.new({ 'id' => 'dsfqsfqzef' })
|
75
|
+
physical_nic = FactoryBot.build(:nic_base_empty, :identifier => 'eth0', :compute_attributes => compute_attributes)
|
76
|
+
host = FactoryBot.build(
|
77
|
+
:host_empty,
|
78
|
+
:interfaces => [physical_nic],
|
79
|
+
:compute_attributes => ActiveSupport::HashWithIndifferentAccess.new({ type: 'lxc' })
|
80
|
+
)
|
81
|
+
err = assert_raises Foreman::Exception do
|
82
|
+
@cr.host_interfaces_attrs(host)
|
83
|
+
end
|
84
|
+
assert err.message.end_with?('Invalid proxmox NIC id on interface[0]. Must be net[n] with n integer >= 0')
|
85
|
+
end
|
86
|
+
|
87
|
+
it 'sets container compute ip/CIDR, gw and ip6' do
|
73
88
|
ip = '192.168.56.100'
|
74
89
|
cidr = '31'
|
75
90
|
ip6 = Array.new(4) { format('%<x>s', x: rand(16**4)) }.join(':') + '::1'
|
76
|
-
|
91
|
+
compute_attributes = ActiveSupport::HashWithIndifferentAccess.new({ 'id' => 'net0', 'cidr' => cidr, 'gw' => ip, 'ip' => ip, 'dhcp6' => '1' })
|
92
|
+
physical_nic = FactoryBot.build(:nic_base_empty, :identifier => 'net0', :ip => ip, :ip6 => ip6, :compute_attributes => compute_attributes)
|
77
93
|
host = FactoryBot.build(
|
78
94
|
:host_empty,
|
79
95
|
:interfaces => [physical_nic],
|
80
|
-
:compute_attributes => {
|
81
|
-
'type' => 'lxc',
|
82
|
-
'interfaces_attributes' => {
|
83
|
-
'0' => physical_nic
|
84
|
-
}
|
85
|
-
}
|
96
|
+
:compute_attributes => ActiveSupport::HashWithIndifferentAccess.new({ type: 'lxc' })
|
86
97
|
)
|
87
98
|
nic_attributes = @cr.host_interfaces_attrs(host).values.select(&:present?)
|
88
99
|
nic_attr = nic_attributes.first
|
@@ -92,20 +103,16 @@ module ForemanFogProxmox
|
|
92
103
|
assert_equal 'dhcp', nic_attr[:ip6]
|
93
104
|
end
|
94
105
|
|
95
|
-
it 'sets container compute
|
106
|
+
it 'sets container compute ip DHCP, gw6 and ip6' do
|
96
107
|
ip = '192.168.56.100'
|
97
108
|
cidr6 = '100'
|
98
109
|
ip6 = '2001:0:1234::c1c0:abcd:876'
|
99
|
-
|
110
|
+
compute_attributes = ActiveSupport::HashWithIndifferentAccess.new({ 'id' => 'net0', 'cidr6' => cidr6, 'dhcp' => '1', 'gw6' => ip6 })
|
111
|
+
physical_nic = FactoryBot.build(:nic_base_empty, :identifier => 'net0', :ip => ip, :ip6 => ip6, :compute_attributes => compute_attributes)
|
100
112
|
host = FactoryBot.build(
|
101
113
|
:host_empty,
|
102
114
|
:interfaces => [physical_nic],
|
103
|
-
:compute_attributes => {
|
104
|
-
'type' => 'lxc',
|
105
|
-
'interfaces_attributes' => {
|
106
|
-
'0' => physical_nic
|
107
|
-
}
|
108
|
-
}
|
115
|
+
:compute_attributes => ActiveSupport::HashWithIndifferentAccess.new({ type: 'lxc' })
|
109
116
|
)
|
110
117
|
nic_attributes = @cr.host_interfaces_attrs(host).values.select(&:present?)
|
111
118
|
nic_attr = nic_attributes.first
|
@@ -115,22 +122,17 @@ module ForemanFogProxmox
|
|
115
122
|
assert_equal ip6, nic_attr['gw6']
|
116
123
|
end
|
117
124
|
|
118
|
-
it 'sets container compute
|
125
|
+
it 'sets container compute ip DHCP, mac adress and firewall' do
|
119
126
|
ip = '192.168.56.100'
|
120
|
-
mac_address = '36:25:
|
127
|
+
mac_address = '36:25:8c:53:0c:50'
|
121
128
|
ip6 = '2001:0:1234::c1c0:abcd:876'
|
122
129
|
firewall = '1'
|
123
|
-
compute_attributes = { 'dhcp' => '1', 'ip6' => ip6, 'firewall' => firewall }
|
130
|
+
compute_attributes = ActiveSupport::HashWithIndifferentAccess.new({ 'id' => 'net0', 'dhcp' => '1', 'ip6' => ip6, 'firewall' => firewall })
|
124
131
|
physical_nic = FactoryBot.build(:nic_base_empty, :identifier => 'net0', :ip => ip, :ip6 => ip6, :mac => mac_address, :compute_attributes => compute_attributes)
|
125
132
|
host = FactoryBot.build(
|
126
133
|
:host_empty,
|
127
134
|
:interfaces => [physical_nic],
|
128
|
-
:compute_attributes => {
|
129
|
-
'type' => 'lxc',
|
130
|
-
'interfaces_attributes' => {
|
131
|
-
'0' => physical_nic
|
132
|
-
}
|
133
|
-
}
|
135
|
+
:compute_attributes => ActiveSupport::HashWithIndifferentAccess.new({ type: 'lxc' })
|
134
136
|
)
|
135
137
|
nic_attributes = @cr.host_interfaces_attrs(host).values.select(&:present?)
|
136
138
|
nic_attr = nic_attributes.first
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: foreman_fog_proxmox
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.14.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tristan Robert
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2021-
|
12
|
+
date: 2021-07-23 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: deface
|
@@ -100,11 +100,14 @@ files:
|
|
100
100
|
- app/assets/javascripts/foreman_fog_proxmox/proxmox_volume.js
|
101
101
|
- app/assets/javascripts/foreman_fog_proxmox/proxmox_volume_cdrom.js
|
102
102
|
- app/assets/javascripts/foreman_fog_proxmox/proxmox_volume_cloudinit.js
|
103
|
+
- app/controllers/concerns/foreman_fog_proxmox/compute_resources_vms_controller.rb
|
103
104
|
- app/controllers/concerns/foreman_fog_proxmox/controller/parameters/compute_resource.rb
|
105
|
+
- app/controllers/concerns/foreman_fog_proxmox/hosts_controller.rb
|
104
106
|
- app/controllers/foreman_fog_proxmox/compute_resources_controller.rb
|
105
107
|
- app/helpers/node_dashboard_helper.rb
|
106
108
|
- app/helpers/proxmox_compute_controllers_helper.rb
|
107
109
|
- app/helpers/proxmox_compute_resources_helper.rb
|
110
|
+
- app/helpers/proxmox_compute_resources_vms_helper.rb
|
108
111
|
- app/helpers/proxmox_compute_selectors_helper.rb
|
109
112
|
- app/helpers/proxmox_form_helper.rb
|
110
113
|
- app/helpers/proxmox_storages_helper.rb
|
@@ -121,6 +124,8 @@ files:
|
|
121
124
|
- app/models/concerns/fog_extensions/proxmox/node.rb
|
122
125
|
- app/models/concerns/fog_extensions/proxmox/server.rb
|
123
126
|
- app/models/concerns/fog_extensions/proxmox/server_config.rb
|
127
|
+
- app/models/concerns/host_ext/proxmox/associator.rb
|
128
|
+
- app/models/concerns/host_ext/proxmox/for_vm.rb
|
124
129
|
- app/models/concerns/host_ext/proxmox/interfaces.rb
|
125
130
|
- app/models/concerns/orchestration/proxmox/compute.rb
|
126
131
|
- app/models/foreman_fog_proxmox/options_select.rb
|
@@ -146,6 +151,7 @@ files:
|
|
146
151
|
- app/overrides/compute_resources_vms/form/add_vm_type_to_volumes_edit.rb
|
147
152
|
- app/overrides/compute_resources_vms/form/add_vm_type_to_volumes_new_volume.rb
|
148
153
|
- app/overrides/compute_resources_vms/form/remove_new_vm_from_removable_layout.rb
|
154
|
+
- app/services/concerns/foreman_fog_proxmox/compute_resource_host_associator.rb
|
149
155
|
- app/services/foreman_fog_proxmox/node_dashboard/data.rb
|
150
156
|
- app/views/api/v2/compute_resources/proxmox.json.rabl
|
151
157
|
- app/views/compute_resources/form/_proxmox.html.erb
|
@@ -237,7 +243,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
237
243
|
- !ruby/object:Gem::Version
|
238
244
|
version: '0'
|
239
245
|
requirements: []
|
240
|
-
rubygems_version: 3.2.
|
246
|
+
rubygems_version: 3.2.22
|
241
247
|
signing_key:
|
242
248
|
specification_version: 4
|
243
249
|
summary: Foreman plugin that adds Proxmox VE compute resource using fog-proxmox
|