foreman_fog_proxmox 0.13.4 → 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 +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
|
![About resources](.github/images/about_resources.png)
|
100
120
|
![About greffon](.github/images/about_greffon.png)
|
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
|