foreman_fog_proxmox 0.16.1 → 0.17.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/app/controllers/concerns/foreman_fog_proxmox/hosts_controller.rb +1 -1
- data/app/helpers/proxmox_vm_attrs_helper.rb +3 -3
- data/app/helpers/proxmox_vm_cdrom_helper.rb +1 -1
- data/app/helpers/proxmox_vm_cloudinit_helper.rb +1 -1
- data/app/helpers/proxmox_vm_config_helper.rb +1 -1
- data/app/helpers/proxmox_vm_helper.rb +5 -5
- data/app/helpers/proxmox_vm_interfaces_helper.rb +1 -1
- data/app/helpers/proxmox_vm_os_template_helper.rb +1 -1
- data/app/helpers/proxmox_vm_uuid_helper.rb +1 -1
- data/app/helpers/proxmox_vm_volumes_helper.rb +3 -3
- data/app/models/concerns/host_ext/proxmox/for_vm.rb +1 -1
- data/app/models/foreman_fog_proxmox/proxmox.rb +4 -4
- data/app/models/foreman_fog_proxmox/proxmox_interfaces.rb +1 -1
- data/app/models/foreman_fog_proxmox/proxmox_vm_commands.rb +2 -2
- data/app/models/foreman_fog_proxmox/proxmox_vm_new.rb +2 -2
- data/app/models/foreman_fog_proxmox/proxmox_vm_queries.rb +2 -2
- data/app/models/foreman_fog_proxmox/proxmox_volumes.rb +2 -2
- data/app/views/compute_resources_vms/form/proxmox/_add_react_component_to_host_form.html.erb +0 -1
- data/app/views/templates/provisioning/user_data/proxmox_user_data.erb +119 -0
- data/db/migrate/20210312105013_update_proxmox_uuid_host.rb +1 -1
- data/db/seeds.d/71_provisioning_templates.rb +7 -0
- data/lib/foreman_fog_proxmox/engine.rb +22 -27
- data/lib/foreman_fog_proxmox/version.rb +1 -1
- data/test/unit/foreman_fog_proxmox/helpers/proxmox_container_helper_test.rb +1 -1
- data/test/unit/foreman_fog_proxmox/helpers/proxmox_server_helper_test.rb +1 -1
- data/test/unit/foreman_fog_proxmox/helpers/proxmox_vm_helper_test.rb +2 -2
- data/test/unit/foreman_fog_proxmox/helpers/proxmox_vm_uuid_helper_test.rb +2 -2
- data/test/unit/foreman_fog_proxmox/helpers/proxmox_vm_volumes_helper_test.rb +2 -2
- data/test/unit/foreman_fog_proxmox/proxmox_compute_attributes_test.rb +1 -1
- data/test/unit/foreman_fog_proxmox/proxmox_images_test.rb +1 -1
- data/test/unit/foreman_fog_proxmox/proxmox_interfaces_test.rb +3 -3
- data/test/unit/foreman_fog_proxmox/proxmox_test.rb +1 -1
- data/test/unit/foreman_fog_proxmox/proxmox_version_test.rb +1 -1
- data/test/unit/foreman_fog_proxmox/proxmox_vm_commands_container_test.rb +2 -2
- data/test/unit/foreman_fog_proxmox/proxmox_vm_commands_server_create_test.rb +2 -2
- data/test/unit/foreman_fog_proxmox/proxmox_vm_commands_server_update_cdrom_test.rb +5 -2
- data/test/unit/foreman_fog_proxmox/proxmox_vm_commands_server_update_cloudinit_test.rb +2 -2
- data/test/unit/foreman_fog_proxmox/proxmox_vm_commands_server_update_hard_disk_test.rb +2 -2
- data/test/unit/foreman_fog_proxmox/proxmox_vm_commands_server_update_test.rb +2 -2
- data/test/unit/foreman_fog_proxmox/proxmox_vm_commands_test.rb +2 -2
- data/test/unit/foreman_fog_proxmox/proxmox_vm_new_test.rb +2 -2
- data/test/unit/foreman_fog_proxmox/proxmox_vm_queries_test.rb +2 -2
- data/webpack/components/GeneralTabContent.js +3 -3
- data/webpack/components/ProxmoxComputeSelectors.js +64 -20
- data/webpack/components/ProxmoxContainer/MountPoint.js +5 -8
- data/webpack/components/ProxmoxContainer/ProxmoxContainerOptions.js +3 -2
- data/webpack/components/ProxmoxContainer/ProxmoxContainerStorage.js +1 -1
- data/webpack/components/ProxmoxContainer/components/NetworkInterface.js +14 -13
- data/webpack/components/ProxmoxServer/ProxmoxServerHardware.js +22 -22
- data/webpack/components/ProxmoxServer/ProxmoxServerNetwork.js +1 -1
- data/webpack/components/ProxmoxServer/ProxmoxServerOptions.js +3 -3
- data/webpack/components/ProxmoxServer/components/HardDisk.js +13 -5
- data/webpack/components/ProxmoxServer/components/NetworkInterface.js +2 -2
- data/webpack/components/ProxmoxVmType.js +24 -21
- data/webpack/components/common/FormInputs.js +10 -2
- metadata +19 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4521dde2dff786a4f14fcf50c4eb68cd412596029a0f2ee32d54bd8154c51135
|
4
|
+
data.tar.gz: 6e316973c79ab4e51f95578e3c282a0d5345dde397afb5d14ad9ac011a8fc9d0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9d034e8a37538e334329ab3a8df9447325ca7d2809a0b185819bc0fe62757fc39cee691799fa8699802d50855da41d3e4f8df17a3a2ffe1924376dfbcbacfc20
|
7
|
+
data.tar.gz: '09e3bd0ebb1cd6ece7103cc0d07f0d0c5a0c02598a8f72787359599ee8a8004c6c3add7d9d43a7ffdd9b2486c4fe2faeb5fa28b05ddc83cf290fe0ff55211b5a'
|
@@ -24,7 +24,7 @@ require 'foreman_fog_proxmox/value'
|
|
24
24
|
require 'foreman_fog_proxmox/hash_collection'
|
25
25
|
|
26
26
|
# Convert a foreman form server hash into a fog-proxmox server attributes hash
|
27
|
-
module
|
27
|
+
module ProxmoxVMAttrsHelper
|
28
28
|
def object_to_attributes_hash(vms, from_profile, start_checked)
|
29
29
|
param_scope = from_profile ? "compute_attribute[vm_attrs]" : "host[compute_attributes]"
|
30
30
|
vm_h = ActiveSupport::HashWithIndifferentAccess.new
|
@@ -114,11 +114,11 @@ module ProxmoxVmAttrsHelper
|
|
114
114
|
start_after_create: vms.start_after_create,
|
115
115
|
templated: vms.templated,
|
116
116
|
}
|
117
|
-
vms_keys = [:
|
117
|
+
vms_keys = [:cpu_type, :nameserver, :searchdomain, :hostname]
|
118
118
|
extra_attrs = ActiveSupport::HashWithIndifferentAccess.new
|
119
119
|
attributes.each do |key, value|
|
120
120
|
camel_key = key.to_s.include?('_') ? snake_to_camel(key.to_s).to_sym : key
|
121
|
-
nested_key = vms_keys.include?(key) ?
|
121
|
+
nested_key = vms_keys.include?(key) ? "config_attributes[#{key}]" : key
|
122
122
|
value = start_checked if key == :start_after_create
|
123
123
|
extra_attrs[camel_key] = { name: "#{param_scope}[#{nested_key}]", value: value }
|
124
124
|
end
|
@@ -23,7 +23,7 @@ require 'foreman_fog_proxmox/value'
|
|
23
23
|
require 'foreman_fog_proxmox/hash_collection'
|
24
24
|
|
25
25
|
# Convert a foreman form server hash into a fog-proxmox server attributes hash
|
26
|
-
module
|
26
|
+
module ProxmoxVMCdromHelper
|
27
27
|
def parse_server_cdrom(args)
|
28
28
|
cdrom_media = args['cdrom'] if args.key?('cdrom')
|
29
29
|
cdrom_image = args['volid'] if args.key?('volid')
|
@@ -23,7 +23,7 @@ require 'foreman_fog_proxmox/value'
|
|
23
23
|
require 'foreman_fog_proxmox/hash_collection'
|
24
24
|
|
25
25
|
# Convert a foreman form server hash into a fog-proxmox server attributes hash
|
26
|
-
module
|
26
|
+
module ProxmoxVMCloudinitHelper
|
27
27
|
def parse_server_cloudinit(args)
|
28
28
|
cloudinit_h = {}
|
29
29
|
cloudinit = args['cloudinit']
|
@@ -24,7 +24,7 @@ require 'foreman_fog_proxmox/value'
|
|
24
24
|
require 'foreman_fog_proxmox/hash_collection'
|
25
25
|
|
26
26
|
# Convert a foreman form server hash into a fog-proxmox server attributes hash
|
27
|
-
module
|
27
|
+
module ProxmoxVMConfigHelper
|
28
28
|
def object_to_config_hash(vm, type)
|
29
29
|
vm_h = ActiveSupport::HashWithIndifferentAccess.new
|
30
30
|
main_a = ['vmid', 'type']
|
@@ -21,11 +21,11 @@ require 'fog/proxmox/helpers/disk_helper'
|
|
21
21
|
require 'fog/proxmox/helpers/nic_helper'
|
22
22
|
require 'foreman_fog_proxmox/value'
|
23
23
|
|
24
|
-
module
|
25
|
-
include
|
26
|
-
include
|
27
|
-
include
|
28
|
-
include
|
24
|
+
module ProxmoxVMHelper
|
25
|
+
include ProxmoxVMInterfacesHelper
|
26
|
+
include ProxmoxVMVolumesHelper
|
27
|
+
include ProxmoxVMConfigHelper
|
28
|
+
include ProxmoxVMOsTemplateHelper
|
29
29
|
|
30
30
|
def vm_collection(type)
|
31
31
|
collection = :servers
|
@@ -23,7 +23,7 @@ require 'foreman_fog_proxmox/value'
|
|
23
23
|
require 'foreman_fog_proxmox/hash_collection'
|
24
24
|
|
25
25
|
# Convert a foreman form server hash into a fog-proxmox server attributes hash
|
26
|
-
module
|
26
|
+
module ProxmoxVMInterfacesHelper
|
27
27
|
def parsed_typed_interfaces(args, type, parsed_vm)
|
28
28
|
interfaces_to_add, interfaces_to_delete = parse_typed_interfaces(args, type)
|
29
29
|
interfaces_to_add.each { |interface| parsed_vm = parsed_vm.merge(interface) }
|
@@ -22,7 +22,7 @@ require 'fog/proxmox/helpers/nic_helper'
|
|
22
22
|
require 'foreman_fog_proxmox/value'
|
23
23
|
require 'foreman_fog_proxmox/hash_collection'
|
24
24
|
|
25
|
-
module
|
25
|
+
module ProxmoxVMOsTemplateHelper
|
26
26
|
def ostemplate_keys
|
27
27
|
['ostemplate_storage', 'ostemplate_file']
|
28
28
|
end
|
@@ -17,7 +17,7 @@
|
|
17
17
|
# You should have received a copy of the GNU General Public License
|
18
18
|
# along with ForemanFogProxmox. If not, see <http://www.gnu.org/licenses/>.
|
19
19
|
|
20
|
-
module
|
20
|
+
module ProxmoxVMUuidHelper
|
21
21
|
UUID_REGEXP = /(?<cluster_id>\d+)_(?<vmid>\d+)/.freeze
|
22
22
|
def extract(uuid, name)
|
23
23
|
captures_h = uuid ? UUID_REGEXP.match(uuid.to_s) : { cluster_id: '', vmid: '' }
|
@@ -23,9 +23,9 @@ require 'foreman_fog_proxmox/value'
|
|
23
23
|
require 'foreman_fog_proxmox/hash_collection'
|
24
24
|
|
25
25
|
# Convert a foreman form server hash into a fog-proxmox server attributes hash
|
26
|
-
module
|
27
|
-
include
|
28
|
-
include
|
26
|
+
module ProxmoxVMVolumesHelper
|
27
|
+
include ProxmoxVMCdromHelper
|
28
|
+
include ProxmoxVMCloudinitHelper
|
29
29
|
|
30
30
|
def add_disk_options(disk, args)
|
31
31
|
options = ForemanFogProxmox::HashCollection.new_hash_reject_keys(args,
|
@@ -23,11 +23,11 @@ require 'foreman_fog_proxmox/value'
|
|
23
23
|
|
24
24
|
module ForemanFogProxmox
|
25
25
|
class Proxmox < ComputeResource
|
26
|
-
include
|
26
|
+
include ProxmoxVMHelper
|
27
27
|
include ProxmoxConnection
|
28
|
-
include
|
29
|
-
include
|
30
|
-
include
|
28
|
+
include ProxmoxVMNew
|
29
|
+
include ProxmoxVMCommands
|
30
|
+
include ProxmoxVMQueries
|
31
31
|
include ProxmoxComputeAttributes
|
32
32
|
include ProxmoxVolumes
|
33
33
|
include ProxmoxInterfaces
|
@@ -118,7 +118,7 @@ module ForemanFogProxmox
|
|
118
118
|
def set_mac(nic_compute_attributes, mac, type)
|
119
119
|
mac_attr_name = { 'qemu' => :macaddr, 'lxc' => :hwaddr }
|
120
120
|
mac_key = mac_attr_name[type] || 'mac'
|
121
|
-
nic_compute_attributes[mac_key] = Net::Validations.normalize_mac(mac)
|
121
|
+
nic_compute_attributes[mac_key] = Net::Validations.normalize_mac(mac).upcase
|
122
122
|
end
|
123
123
|
|
124
124
|
def host_interfaces_attrs(host)
|
@@ -20,10 +20,10 @@
|
|
20
20
|
require 'foreman_fog_proxmox/hash_collection'
|
21
21
|
|
22
22
|
module ForemanFogProxmox
|
23
|
-
module
|
23
|
+
module ProxmoxVMCommands
|
24
24
|
include ProxmoxVolumes
|
25
25
|
include ProxmoxPools
|
26
|
-
include
|
26
|
+
include ProxmoxVMHelper
|
27
27
|
|
28
28
|
def start_on_boot(vm, args)
|
29
29
|
startonboot = args[:start_after_create].blank? ? false : Foreman::Cast.to_bool(args[:start_after_create])
|
@@ -23,8 +23,8 @@ require 'fog/proxmox/helpers/disk_helper'
|
|
23
23
|
require 'foreman_fog_proxmox/hash_collection'
|
24
24
|
|
25
25
|
module ForemanFogProxmox
|
26
|
-
module
|
27
|
-
include
|
26
|
+
module ProxmoxVMNew
|
27
|
+
include ProxmoxVMHelper
|
28
28
|
|
29
29
|
def cdrom_defaults
|
30
30
|
{ storage_type: 'cdrom', id: 'ide2', volid: 'none', media: 'cdrom' }
|
@@ -18,9 +18,9 @@
|
|
18
18
|
# along with ForemanFogProxmox. If not, see <http://www.gnu.org/licenses/>.
|
19
19
|
|
20
20
|
module ForemanFogProxmox
|
21
|
-
module
|
21
|
+
module ProxmoxVMQueries
|
22
22
|
include ProxmoxPools
|
23
|
-
include
|
23
|
+
include ProxmoxVMUuidHelper
|
24
24
|
|
25
25
|
def nodes
|
26
26
|
nodes = client.nodes.all if client
|
@@ -22,7 +22,7 @@ require 'foreman_fog_proxmox/hash_collection'
|
|
22
22
|
|
23
23
|
module ForemanFogProxmox
|
24
24
|
module ProxmoxVolumes
|
25
|
-
include
|
25
|
+
include ProxmoxVMHelper
|
26
26
|
|
27
27
|
def delete_volume(vm, id, volume_attributes)
|
28
28
|
logger.info("vm #{vm.identity} delete volume #{id}")
|
@@ -107,7 +107,7 @@ module ForemanFogProxmox
|
|
107
107
|
return false unless disk
|
108
108
|
|
109
109
|
# Return boolean if disk of type hard_disk, cloud_init, cdrom or rootfs(LXC container) exists
|
110
|
-
if disk.hard_disk? || disk.cloud_init? || disk.rootfs?
|
110
|
+
if disk.hard_disk? || disk.cloud_init? || disk.rootfs? || disk.mount_point?
|
111
111
|
volume_attributes['volid'].present?
|
112
112
|
elsif disk.cdrom?
|
113
113
|
volume_attributes['cdrom'].present?
|
data/app/views/compute_resources_vms/form/proxmox/_add_react_component_to_host_form.html.erb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
<% content_for(:javascripts) do %>
|
2
2
|
<%= webpacked_plugins_js_for :foreman_fog_proxmox %>
|
3
|
-
<%= javascript_include_tag 'foreman_fog_proxmox/proxmox_vm', "data-turbolinks-track" => true %>
|
4
3
|
<% end %>
|
5
4
|
<%= react_component('ProxmoxVmType', { registerComp: true }) unless @host.managed %>
|
@@ -0,0 +1,119 @@
|
|
1
|
+
<%#
|
2
|
+
kind: user_data
|
3
|
+
name: Proxmox UserData
|
4
|
+
model: ProvisioningTemplate
|
5
|
+
require:
|
6
|
+
- plugin: foreman_fog_proxmox
|
7
|
+
version: 0.16.1
|
8
|
+
oses:
|
9
|
+
- AlmaLinux
|
10
|
+
- Amazon
|
11
|
+
- CentOS
|
12
|
+
- CentOS_Stream
|
13
|
+
- Debian
|
14
|
+
- Rocky
|
15
|
+
- Ubuntu
|
16
|
+
description: |
|
17
|
+
This template is used during image based provisioning with Proxmox Compute Resource, when
|
18
|
+
the image is configured to use user-data and network config. The output is a list of
|
19
|
+
cloud-init directives that cloud-init parses to configures the VM booted from the image.
|
20
|
+
The image must have cloud-init installed in order for this to work.
|
21
|
+
|
22
|
+
This template accepts the following parameters:
|
23
|
+
- ssh_pwauth: boolean (default=true unless ssh_authorized_keys)
|
24
|
+
- ssh_authorized_keys: string w newline seperated keys (default="")
|
25
|
+
- package_upgrade: boolean (default=false)
|
26
|
+
- reboot: boolean (default=false)
|
27
|
+
- skip-puppet-setup: boolean (default=false)
|
28
|
+
-%>
|
29
|
+
<%
|
30
|
+
ssh_pwauth = host_param('ssh_pwauth') ? host_param_true?('ssh_pwauth') : !host_param('ssh_authorized_keys')
|
31
|
+
rhel_compatible = @host.operatingsystem.family == 'Redhat' && @host.operatingsystem.name != 'Fedora'
|
32
|
+
# safemode renderer does not support unary negation
|
33
|
+
puppet_enabled = !host_param_true?('skip-puppet-setup') && (host_puppet_server.present? || host_param_true?('force-puppet'))
|
34
|
+
salt_enabled = host_param('salt_master') ? true : false
|
35
|
+
chef_enabled = @host.respond_to?(:chef_proxy) && @host.chef_proxy
|
36
|
+
-%>
|
37
|
+
<%
|
38
|
+
username_to_create = host_param('username_to_create', 'root')
|
39
|
+
password_to_create = host_param('password_to_create') || @host.root_pass
|
40
|
+
-%>
|
41
|
+
#cloud-config
|
42
|
+
hostname: <%= @host.shortname %>
|
43
|
+
fqdn: <%= @host %>
|
44
|
+
manage_etc_hosts: true
|
45
|
+
<% if ssh_pwauth -%>
|
46
|
+
<%# Don't enable this in production. It is very insecure! Use ssh_authorized_keys instead...
|
47
|
+
http://cloudinit.readthedocs.io/en/latest/topics/examples.html#including-users-and-groups -%>
|
48
|
+
ssh_pwauth: true
|
49
|
+
users:
|
50
|
+
- name: <%= username_to_create %>
|
51
|
+
shell: /bin/bash
|
52
|
+
sudo: ALL=(ALL) ALL
|
53
|
+
lock_passwd: false
|
54
|
+
hashed_passwd: <%= password_to_create %>
|
55
|
+
<% end -%>
|
56
|
+
<% if host_param('ssh_authorized_keys') -%>
|
57
|
+
ssh_authorized_keys:
|
58
|
+
<% host_param('ssh_authorized_keys').split("\n").each do |ssh_key| -%>
|
59
|
+
- <%= ssh_key %>
|
60
|
+
<% end -%>
|
61
|
+
<% end -%>
|
62
|
+
|
63
|
+
<% if host_param_true?('package_upgrade') -%>
|
64
|
+
package_upgrade: true
|
65
|
+
<% end -%>
|
66
|
+
|
67
|
+
runcmd:
|
68
|
+
<% if rhel_compatible -%>
|
69
|
+
- |
|
70
|
+
<%= indent(2) { snippet('epel') } %>
|
71
|
+
<% end -%>
|
72
|
+
- |
|
73
|
+
<%= indent(2) { snippet('remote_execution_ssh_keys') } %>
|
74
|
+
<% if chef_enabled -%>
|
75
|
+
- |
|
76
|
+
<%= indent(2) { snippet('chef_client') } %>
|
77
|
+
<% end -%>
|
78
|
+
<% if puppet_enabled -%>
|
79
|
+
- |
|
80
|
+
<%= indent(2) { snippet('puppetlabs_repo') } %>
|
81
|
+
- |
|
82
|
+
<%= indent(2) { snippet('puppet_setup') } %>
|
83
|
+
<% end -%>
|
84
|
+
<% if salt_enabled -%>
|
85
|
+
- |
|
86
|
+
<%= indent(2) { snippet('saltstack_setup') } %>
|
87
|
+
<% end -%>
|
88
|
+
|
89
|
+
<%# Contact Foreman to confirm instance is built -%>
|
90
|
+
phone_home:
|
91
|
+
url: <%= foreman_url('built') %>
|
92
|
+
post: []
|
93
|
+
tries: 10
|
94
|
+
|
95
|
+
<% if host_param_true?('reboot') -%>
|
96
|
+
power_state:
|
97
|
+
mode: reboot
|
98
|
+
timeout: 30
|
99
|
+
condition: true
|
100
|
+
<% end -%>
|
101
|
+
|
102
|
+
#network-config
|
103
|
+
version: 2
|
104
|
+
ethernets:
|
105
|
+
eth0:
|
106
|
+
match:
|
107
|
+
name: e*
|
108
|
+
dhcp4: false
|
109
|
+
dhcp6: false
|
110
|
+
addresses:
|
111
|
+
- <%= @host.ip %>/<%= @host.subnet.cidr %>
|
112
|
+
routes:
|
113
|
+
- to: 0.0.0.0
|
114
|
+
via: <%= @host.subnet.gateway %>
|
115
|
+
nameservers:
|
116
|
+
addresses:
|
117
|
+
- <%= @host.subnet.dns_primary%>
|
118
|
+
search:
|
119
|
+
- <%= @host.domain.name %>
|
@@ -23,13 +23,6 @@ module ForemanFogProxmox
|
|
23
23
|
class Engine < ::Rails::Engine
|
24
24
|
engine_name 'foreman_fog_proxmox'
|
25
25
|
|
26
|
-
config.autoload_paths += Dir["#{config.root}/app/controllers/concerns"]
|
27
|
-
config.autoload_paths += Dir["#{config.root}/app/helpers/concerns"]
|
28
|
-
config.autoload_paths += Dir["#{config.root}/app/models/concerns"]
|
29
|
-
config.autoload_paths += Dir["#{config.root}/app/services/concerns"]
|
30
|
-
config.autoload_paths += Dir["#{config.root}/app/overrides"]
|
31
|
-
config.autoload_paths += Dir["#{config.root}/app/services"]
|
32
|
-
|
33
26
|
# Add any db migrations
|
34
27
|
initializer 'foreman_fog_proxmox.load_app_instance_data' do |app|
|
35
28
|
ForemanFogProxmox::Engine.paths['db/migrate'].existent.each do |path|
|
@@ -37,25 +30,27 @@ module ForemanFogProxmox
|
|
37
30
|
end
|
38
31
|
end
|
39
32
|
|
40
|
-
initializer 'foreman_fog_proxmox.register_plugin', :before => :finisher_hook do |
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
33
|
+
initializer 'foreman_fog_proxmox.register_plugin', :before => :finisher_hook do |app|
|
34
|
+
app.reloader.to_prepare do
|
35
|
+
Foreman::Plugin.register :foreman_fog_proxmox do
|
36
|
+
requires_foreman '>= 1.22.0'
|
37
|
+
# Add Global files for extending foreman-core components and routes
|
38
|
+
register_global_js_file 'global'
|
39
|
+
# Register Proxmox VE compute resource in foreman
|
40
|
+
compute_resource ForemanFogProxmox::Proxmox
|
41
|
+
parameter_filter(ComputeResource, :uuid)
|
42
|
+
# add dashboard widget
|
43
|
+
widget 'foreman_fog_proxmox_widget', name: N_('Foreman Fog Proxmox widget'), sizex: 8, sizey: 1
|
44
|
+
security_block :foreman_fog_proxmox do
|
45
|
+
permission :view_compute_resources, { :'foreman_fog_proxmox/compute_resources' =>
|
46
|
+
[:ostemplates_by_id_and_node_and_storage,
|
47
|
+
:isos_by_id_and_node_and_storage,
|
48
|
+
:ostemplates_by_id_and_node,
|
49
|
+
:isos_by_id_and_node,
|
50
|
+
:storages_by_id_and_node,
|
51
|
+
:iso_storages_by_id_and_node,
|
52
|
+
:bridges_by_id_and_node] }
|
53
|
+
end
|
59
54
|
end
|
60
55
|
end
|
61
56
|
end
|
@@ -112,7 +107,7 @@ module ForemanFogProxmox
|
|
112
107
|
::Host::Managed.include Orchestration::Proxmox::Compute
|
113
108
|
::Host::Managed.include HostExt::Proxmox::Interfaces
|
114
109
|
::Host::Managed.include HostExt::Proxmox::Associator
|
115
|
-
::Host::Base.include HostExt::Proxmox::
|
110
|
+
::Host::Base.include HostExt::Proxmox::ForVM
|
116
111
|
::ComputeResourceHostAssociator.include ForemanFogProxmox::ComputeResourceHostAssociator
|
117
112
|
end
|
118
113
|
end
|
@@ -28,8 +28,8 @@ require 'fog/proxmox/compute/models/snapshots'
|
|
28
28
|
require 'fog/proxmox/compute/models/tasks'
|
29
29
|
|
30
30
|
module ForemanFogProxmox
|
31
|
-
class
|
32
|
-
include
|
31
|
+
class ProxmoxVMHelperTest < ActiveSupport::TestCase
|
32
|
+
include ProxmoxVMHelper
|
33
33
|
|
34
34
|
let(:container) do
|
35
35
|
service = mock('service')
|
@@ -20,8 +20,8 @@
|
|
20
20
|
require 'test_plugin_helper'
|
21
21
|
|
22
22
|
module ForemanFogProxmox
|
23
|
-
class
|
24
|
-
include
|
23
|
+
class ProxmoxVMUuidHelperTest < ActiveSupport::TestCase
|
24
|
+
include ProxmoxVMUuidHelper
|
25
25
|
|
26
26
|
describe 'extract_vmid' do
|
27
27
|
setup { Fog.mock! }
|
@@ -20,8 +20,8 @@
|
|
20
20
|
require 'test_plugin_helper'
|
21
21
|
|
22
22
|
module ForemanFogProxmox
|
23
|
-
class
|
24
|
-
include
|
23
|
+
class ProxmoxVMVolumesHelperTest < ActiveSupport::TestCase
|
24
|
+
include ProxmoxVMVolumesHelper
|
25
25
|
|
26
26
|
describe 'remove_deletes' do
|
27
27
|
setup { Fog.mock! }
|
@@ -21,7 +21,7 @@ require 'test_plugin_helper'
|
|
21
21
|
require 'active_support/core_ext/hash/indifferent_access'
|
22
22
|
|
23
23
|
module ForemanFogProxmox
|
24
|
-
class
|
24
|
+
class ProxmoxVMCommandsServerTest < ActiveSupport::TestCase
|
25
25
|
include ComputeResourceTestHelpers
|
26
26
|
|
27
27
|
describe 'clone_from_image' do
|
@@ -30,7 +30,7 @@ module ForemanFogProxmox
|
|
30
30
|
include ProxmoxNodeMockFactory
|
31
31
|
include ProxmoxServerMockFactory
|
32
32
|
include ProxmoxContainerMockFactory
|
33
|
-
include
|
33
|
+
include ProxmoxVMHelper
|
34
34
|
|
35
35
|
describe 'host_interfaces_attrs' do
|
36
36
|
before do
|
@@ -54,7 +54,7 @@ module ForemanFogProxmox
|
|
54
54
|
|
55
55
|
it 'sets interface identifier with server compute id, ip and ip6 and mac adress' do
|
56
56
|
ip = '192.168.56.100'
|
57
|
-
mac_address = '36:25:
|
57
|
+
mac_address = '36:25:8C:53:0C:50'
|
58
58
|
ip6 = Array.new(4) { format('%<x>s', x: rand(16**4)) }.join(':') + '::1'
|
59
59
|
compute_attributes = ActiveSupport::HashWithIndifferentAccess.new({ 'id' => 'net0' })
|
60
60
|
physical_nic = FactoryBot.build(:nic_base_empty, :identifier => 'net0', :ip => ip, :ip6 => ip6,
|
@@ -131,7 +131,7 @@ module ForemanFogProxmox
|
|
131
131
|
|
132
132
|
it 'sets container compute ip DHCP, mac adress and firewall' do
|
133
133
|
ip = '192.168.56.100'
|
134
|
-
mac_address = '36:25:
|
134
|
+
mac_address = '36:25:8C:53:0C:50'
|
135
135
|
ip6 = '2001:0:1234::c1c0:abcd:876'
|
136
136
|
firewall = '1'
|
137
137
|
compute_attributes = ActiveSupport::HashWithIndifferentAccess.new({ 'id' => 'net0', 'dhcp' => '1',
|
@@ -30,7 +30,7 @@ module ForemanFogProxmox
|
|
30
30
|
include ProxmoxNodeMockFactory
|
31
31
|
include ProxmoxServerMockFactory
|
32
32
|
include ProxmoxContainerMockFactory
|
33
|
-
include
|
33
|
+
include ProxmoxVMHelper
|
34
34
|
|
35
35
|
should validate_presence_of(:url)
|
36
36
|
should validate_presence_of(:user)
|
@@ -24,7 +24,7 @@ require 'active_support/core_ext/hash/indifferent_access'
|
|
24
24
|
module ForemanFogProxmox
|
25
25
|
class ProxmoxVersionTest < ActiveSupport::TestCase
|
26
26
|
include ComputeResourceTestHelpers
|
27
|
-
include
|
27
|
+
include ProxmoxVMHelper
|
28
28
|
|
29
29
|
wrong_version = { version: '5.a', release: '5.a-1' }.with_indifferent_access
|
30
30
|
supported_version = { version: '5.4', release: '5.4-3' }.with_indifferent_access
|
@@ -24,11 +24,11 @@ require 'factories/foreman_fog_proxmox/proxmox_container_mock_factory'
|
|
24
24
|
require 'active_support/core_ext/hash/indifferent_access'
|
25
25
|
|
26
26
|
module ForemanFogProxmox
|
27
|
-
class
|
27
|
+
class ProxmoxVMCommandsContainerTest < ActiveSupport::TestCase
|
28
28
|
include ComputeResourceTestHelpers
|
29
29
|
include ProxmoxNodeMockFactory
|
30
30
|
include ProxmoxContainerMockFactory
|
31
|
-
include
|
31
|
+
include ProxmoxVMHelper
|
32
32
|
|
33
33
|
describe 'save_vm' do
|
34
34
|
before do
|
@@ -24,11 +24,11 @@ require 'factories/foreman_fog_proxmox/proxmox_server_mock_factory'
|
|
24
24
|
require 'active_support/core_ext/hash/indifferent_access'
|
25
25
|
|
26
26
|
module ForemanFogProxmox
|
27
|
-
class
|
27
|
+
class ProxmoxVMCommandsServerCreateTest < ActiveSupport::TestCase
|
28
28
|
include ComputeResourceTestHelpers
|
29
29
|
include ProxmoxNodeMockFactory
|
30
30
|
include ProxmoxServerMockFactory
|
31
|
-
include
|
31
|
+
include ProxmoxVMHelper
|
32
32
|
|
33
33
|
describe 'create_vm' do
|
34
34
|
it 'raises Foreman::Exception when vmid <= 100 and vmid > 0' do
|