foreman_fog_proxmox 0.13.4 → 0.14.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.
- checksums.yaml +4 -4
- data/README.md +22 -24
- data/app/assets/javascripts/foreman_fog_proxmox/proxmox_compute_resource.js +0 -2
- data/app/assets/javascripts/foreman_fog_proxmox/proxmox_vm.js +0 -1
- data/app/assets/javascripts/foreman_fog_proxmox/proxmox_vm_server.js +0 -2
- data/app/assets/javascripts/foreman_fog_proxmox/proxmox_volume_cloudinit.js +0 -1
- data/app/controllers/concerns/foreman_fog_proxmox/hosts_controller.rb +53 -0
- data/app/helpers/proxmox_form_helper.rb +1 -1
- data/app/models/concerns/fog_extensions/proxmox/server.rb +1 -1
- data/app/models/foreman_fog_proxmox/proxmox_interfaces.rb +12 -11
- data/app/overrides/compute_resources_vms/form/add_clone_to_new_vm_compute_detail.rb +1 -1
- 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/lib/foreman_fog_proxmox/engine.rb +1 -0
- data/lib/foreman_fog_proxmox/version.rb +1 -1
- data/test/unit/foreman_fog_proxmox/proxmox_interfaces_test.rb +38 -36
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 19b7f2f30af319dbc8881900c660bf9ddc5026eb8762ace34dcd6b4ac7fa85f8
|
4
|
+
data.tar.gz: 5430f62a1d7db829fddb142c468d5c3741a0090131f0a3d26746bec75f6b943e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ceac1a672eb780a7c7e8e05d8024f70d74d129a3ff48ad5d65f9947c78d60778a3697c7a70e030eff53346f3f56587a726fa71b5a719bb448bbea573d7970e47
|
7
|
+
data.tar.gz: cd477463a37e43ce80db0986f08d8203b225cfc5abae4f31b5c165cfc149197c99be2b2d8687b6e217246609c77d781658d93c119b37c41bfebc6049be852b4a
|
data/README.md
CHANGED
@@ -38,9 +38,27 @@ You can support the plugin development via the following methods:
|
|
38
38
|
|
39
39
|
## Installation
|
40
40
|
|
41
|
-
###
|
41
|
+
### From OS packages
|
42
42
|
|
43
|
-
|
43
|
+
Please see the Foreman manual for complete instructions:
|
44
|
+
|
45
|
+
* [Foreman: How to Install a Plugin from package](https://theforeman.org/plugins/#2.Installation)
|
46
|
+
|
47
|
+
[Install from package](https://theforeman.org/plugins/#2.2Packageinstallation) is the easiest way to install the plugin. Choose the latest release plugins repository. If you don't find it in the same foreman release repository, get it from the `nightly` repository.
|
48
|
+
|
49
|
+
Then you can install it with the package manager, in Debian/Ubuntu:
|
50
|
+
|
51
|
+
```shell
|
52
|
+
sudo apt-get install ruby-foreman-fog-proxmox
|
53
|
+
```
|
54
|
+
|
55
|
+
and in Fedora/Redhat Linux:
|
56
|
+
|
57
|
+
```shell
|
58
|
+
sudo dnf install rubygem-foreman_fog_proxmox
|
59
|
+
```
|
60
|
+
|
61
|
+
Redhat, CentOS or Fedora users should also [setup Selinux](https://projects.theforeman.org/projects/foreman/wiki/SELinux) to allow foreman and all its plugins to work.
|
44
62
|
|
45
63
|
### From gem
|
46
64
|
|
@@ -69,6 +87,8 @@ sudo -u foreman /usr/bin/foreman-ruby /usr/bin/bundle install
|
|
69
87
|
|
70
88
|
* Precompile plugin assets:
|
71
89
|
|
90
|
+
You need [nodejs](https://nodejs.org/en/download/package-manager/) installed in order to use foreman-assets package.
|
91
|
+
|
72
92
|
```shell
|
73
93
|
/usr/bin/foreman-ruby /usr/bin/bundle exec bin/rake plugin:assets:precompile[foreman_fog_proxmox]
|
74
94
|
```
|
@@ -99,28 +119,6 @@ Then you can check plugin installation after login into your new foreman server
|
|
99
119
|

|
100
120
|

|
101
121
|
|
102
|
-
### From OS packages
|
103
|
-
|
104
|
-
Please see the Foreman manual for complete instructions:
|
105
|
-
|
106
|
-
* [Foreman: How to Install a Plugin from package](https://theforeman.org/plugins/#2.Installation)
|
107
|
-
|
108
|
-
[Install from package](https://theforeman.org/plugins/#2.2Packageinstallation) is the easiest way to install the plugin. Choose the latest release plugins repository. If you don't find it in the same foreman release repository, get it from the `nightly` repository.
|
109
|
-
|
110
|
-
Then you can install it with the package manager, in Debian/Ubuntu:
|
111
|
-
|
112
|
-
```shell
|
113
|
-
sudo apt-get install ruby-foreman-fog-proxmox
|
114
|
-
```
|
115
|
-
|
116
|
-
and in Fedora/Redhat Linux:
|
117
|
-
|
118
|
-
```shell
|
119
|
-
sudo dnf install rubygem-foreman_fog_proxmox
|
120
|
-
```
|
121
|
-
|
122
|
-
Redhat, CentOS or Fedora users should also [setup Selinux](https://projects.theforeman.org/projects/foreman/wiki/SELinux) to allow foreman and all its plugins to work.
|
123
|
-
|
124
122
|
## Usage
|
125
123
|
|
126
124
|
* [Compute resource](.github/compute_resource.md)
|
@@ -15,8 +15,6 @@
|
|
15
15
|
// 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
|
-
$(document).on('ContentLoad', tfm.numFields.initAll);
|
19
|
-
|
20
18
|
$(document).ready(function () {
|
21
19
|
sslVerifyPeerSelected();
|
22
20
|
authMethodSelected();
|
@@ -15,7 +15,6 @@
|
|
15
15
|
// 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
|
-
$(document).on('ContentLoad', tfm.numFields.initAll);
|
19
18
|
$(document).ready(vmTypeSelected);
|
20
19
|
|
21
20
|
function vmTypeSelected() {
|
@@ -46,7 +46,6 @@ function controllerSelected(item) {
|
|
46
46
|
var device = $(device_selector).limitedSpinner('value');
|
47
47
|
var id = controller + device;
|
48
48
|
$(id_selector).val(id);
|
49
|
-
tfm.numFields.initAll();
|
50
49
|
}
|
51
50
|
|
52
51
|
function deviceSelected(item) {
|
@@ -58,7 +57,6 @@ function deviceSelected(item) {
|
|
58
57
|
var controller = $(controller_selector).val();
|
59
58
|
var id = controller + device;
|
60
59
|
$(id_selector).val(id);
|
61
|
-
tfm.numFields.initAll();
|
62
60
|
}
|
63
61
|
|
64
62
|
function computeControllerMaxDevice(controller) {
|
@@ -21,5 +21,4 @@ function cloudinitControllerSelected(item) {
|
|
21
21
|
var max = computeControllerMaxDevice(controller);
|
22
22
|
var device_selector = 'host_compute_attributes_volumes_attributes_' + index + 'device';
|
23
23
|
$(device_selector).attr('data-soft-max', max);
|
24
|
-
tfm.numFields.initAll();
|
25
24
|
}
|
@@ -0,0 +1,53 @@
|
|
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 HostsController
|
22
|
+
extend ActiveSupport::Concern
|
23
|
+
included do
|
24
|
+
prepend Overrides
|
25
|
+
end
|
26
|
+
module Overrides
|
27
|
+
include ForemanFogProxmox::ProxmoxVmNew
|
28
|
+
# Clone the host
|
29
|
+
def clone
|
30
|
+
super
|
31
|
+
return true unless @host.compute_resource.class == ForemanFogProxmox::Proxmox
|
32
|
+
|
33
|
+
@host.compute_attributes[:vmid] = next_vmid
|
34
|
+
@host.compute_attributes[:interfaces_attributes].each { |index, interface_attributes| @host.compute_attributes[:interfaces_attributes][index] = interface_attributes.merge(macaddr: nil).merge(hwaddr: nil).merge(ip: nil).merge(ip6: nil) }
|
35
|
+
@host.compute_attributes[:volumes_attributes].each { |index, volume_attributes| @host.compute_attributes[:volumes_attributes][index] = volume_attributes.merge(volid: nil) }
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
def bridges
|
41
|
+
@host.compute_resource.bridges
|
42
|
+
end
|
43
|
+
|
44
|
+
def nodes
|
45
|
+
@host.compute_resource.nodes
|
46
|
+
end
|
47
|
+
|
48
|
+
def storages
|
49
|
+
@host.compute_resource.storages
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -66,7 +66,7 @@ module ProxmoxFormHelper
|
|
66
66
|
opts[:"data-association"] = (type + '_' + association.to_s).to_sym
|
67
67
|
hide = ''
|
68
68
|
hide += '$("[data-association=' + type + '_volumes]").hide();' unless ['hard_disk', 'mp'].include?(type)
|
69
|
-
link_to_function(name.to_s, 'add_child_node(this);
|
69
|
+
link_to_function(name.to_s, 'add_child_node(this);' + hide, opts)
|
70
70
|
end
|
71
71
|
|
72
72
|
def remove_child_link_typed(name, f, type, opts = {})
|
@@ -63,7 +63,7 @@ module FogExtensions
|
|
63
63
|
end
|
64
64
|
|
65
65
|
def select_nic(fog_nics, nic)
|
66
|
-
fog_nics.find { |fog_nic| fog_nic.identity.to_s == nic.
|
66
|
+
fog_nics.find { |fog_nic| fog_nic.identity.to_s == nic.compute_attributes[:id] }
|
67
67
|
end
|
68
68
|
|
69
69
|
delegate :interfaces, to: :config
|
@@ -27,8 +27,10 @@ module ForemanFogProxmox
|
|
27
27
|
end
|
28
28
|
|
29
29
|
def set_nic_identifier(nic, index)
|
30
|
-
nic.
|
31
|
-
raise ::Foreman::Exception, _(format('Invalid
|
30
|
+
nic.compute_attributes[:id] = format('net%<index>s', index: index) if nic.compute_attributes[:id].empty?
|
31
|
+
raise ::Foreman::Exception, _(format('Invalid proxmox NIC id on interface[%<index>s]. Must be net[n] with n integer >= 0', index: index)) unless Fog::Proxmox::NicHelper.nic?(nic.compute_attributes[:id])
|
32
|
+
|
33
|
+
nic.identifier = nic.compute_attributes['id'] if nic.identifier.empty?
|
32
34
|
end
|
33
35
|
|
34
36
|
def vm_type(host)
|
@@ -112,17 +114,16 @@ module ForemanFogProxmox
|
|
112
114
|
host.interfaces.select(&:physical?).each.with_index.reduce({}) do |hash, (nic, index)|
|
113
115
|
set_nic_identifier(nic, index)
|
114
116
|
set_container_interface_name(host, nic, index) if container?(host)
|
115
|
-
|
116
|
-
ForemanFogProxmox::HashCollection.remove_empty_values(nic_compute_attributes)
|
117
|
+
ForemanFogProxmox::HashCollection.remove_empty_values(nic.compute_attributes)
|
117
118
|
mac = nic.mac
|
118
119
|
mac ||= nic.attributes['mac']
|
119
|
-
set_mac(
|
120
|
-
interface_compute_attributes = host.compute_attributes['interfaces_attributes'] ? host.compute_attributes['interfaces_attributes'].select { |_k, v| v['id'] == nic.
|
121
|
-
|
122
|
-
set_ip(host, nic,
|
123
|
-
set_ip(host, nic,
|
124
|
-
ForemanFogProxmox::HashCollection.remove_keys(
|
125
|
-
hash.merge(index.to_s =>
|
120
|
+
set_mac(nic.compute_attributes, mac, vm_type(host)) if mac.present?
|
121
|
+
interface_compute_attributes = host.compute_attributes['interfaces_attributes'] ? host.compute_attributes['interfaces_attributes'].select { |_k, v| v['id'] == nic.compute_attributes[:id] } : {}
|
122
|
+
nic.compute_attributes.store(:_delete, interface_compute_attributes[interface_compute_attributes.keys[0]]['_delete']) unless interface_compute_attributes.empty?
|
123
|
+
set_ip(host, nic, nic.compute_attributes)
|
124
|
+
set_ip(host, nic, nic.compute_attributes, true)
|
125
|
+
ForemanFogProxmox::HashCollection.remove_keys(nic.compute_attributes, ['dhcp', 'dhcp6', 'cidr', 'cidr6'])
|
126
|
+
hash.merge(index.to_s => nic.compute_attributes)
|
126
127
|
end
|
127
128
|
end
|
128
129
|
end
|
@@ -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
|
)
|
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" %>
|
@@ -105,6 +105,7 @@ module ForemanFogProxmox
|
|
105
105
|
Fog::Proxmox::Compute::Node.include FogExtensions::Proxmox::Node
|
106
106
|
::ComputeResourcesController.include ForemanFogProxmox::Controller::Parameters::ComputeResource
|
107
107
|
::ComputeResourcesVmsController.include ForemanFogProxmox::ComputeResourcesVmsController
|
108
|
+
::HostsController.include ForemanFogProxmox::HostsController
|
108
109
|
::Host::Managed.include Orchestration::Proxmox::Compute
|
109
110
|
::Host::Managed.include HostExt::Proxmox::Interfaces
|
110
111
|
::Host::Managed.include HostExt::Proxmox::Associator
|
@@ -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
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
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-07-
|
12
|
+
date: 2021-07-23 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: deface
|
@@ -102,6 +102,7 @@ files:
|
|
102
102
|
- app/assets/javascripts/foreman_fog_proxmox/proxmox_volume_cloudinit.js
|
103
103
|
- app/controllers/concerns/foreman_fog_proxmox/compute_resources_vms_controller.rb
|
104
104
|
- app/controllers/concerns/foreman_fog_proxmox/controller/parameters/compute_resource.rb
|
105
|
+
- app/controllers/concerns/foreman_fog_proxmox/hosts_controller.rb
|
105
106
|
- app/controllers/foreman_fog_proxmox/compute_resources_controller.rb
|
106
107
|
- app/helpers/node_dashboard_helper.rb
|
107
108
|
- app/helpers/proxmox_compute_controllers_helper.rb
|