foreman_fog_proxmox 0.14.0 → 0.14.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +42 -29
- data/app/controllers/concerns/foreman_fog_proxmox/compute_resources_vms_controller.rb +17 -7
- data/app/controllers/concerns/foreman_fog_proxmox/controller/parameters/compute_resource.rb +1 -1
- data/app/controllers/concerns/foreman_fog_proxmox/hosts_controller.rb +8 -3
- data/app/controllers/foreman_fog_proxmox/compute_resources_controller.rb +6 -3
- data/app/helpers/proxmox_compute_controllers_helper.rb +2 -1
- data/app/helpers/proxmox_compute_resources_helper.rb +3 -3
- data/app/helpers/proxmox_compute_resources_vms_helper.rb +16 -7
- data/app/helpers/proxmox_form_helper.rb +9 -5
- data/app/helpers/proxmox_vm_config_helper.rb +16 -25
- data/app/helpers/proxmox_vm_interfaces_helper.rb +19 -6
- data/app/helpers/proxmox_vm_os_template_helper.rb +2 -5
- data/app/helpers/proxmox_vm_uuid_helper.rb +1 -1
- data/app/helpers/proxmox_vm_volumes_helper.rb +22 -25
- data/app/models/concerns/fog_extensions/proxmox/node.rb +2 -2
- data/app/models/concerns/fog_extensions/proxmox/server.rb +9 -5
- data/app/models/concerns/host_ext/proxmox/associator.rb +3 -2
- data/app/models/concerns/host_ext/proxmox/for_vm.rb +1 -1
- data/app/models/concerns/host_ext/proxmox/interfaces.rb +7 -3
- data/app/models/concerns/orchestration/proxmox/compute.rb +11 -4
- data/app/models/foreman_fog_proxmox/options_select.rb +1 -3
- data/app/models/foreman_fog_proxmox/proxmox.rb +12 -10
- data/app/models/foreman_fog_proxmox/proxmox_compute_attributes.rb +15 -3
- data/app/models/foreman_fog_proxmox/proxmox_connection.rb +6 -2
- data/app/models/foreman_fog_proxmox/proxmox_console.rb +3 -1
- data/app/models/foreman_fog_proxmox/proxmox_images.rb +2 -2
- data/app/models/foreman_fog_proxmox/proxmox_interfaces.rb +28 -6
- data/app/models/foreman_fog_proxmox/proxmox_operating_systems.rb +6 -1
- data/app/models/foreman_fog_proxmox/proxmox_pools.rb +4 -4
- data/app/models/foreman_fog_proxmox/proxmox_version.rb +7 -3
- data/app/models/foreman_fog_proxmox/proxmox_vm_commands.rb +9 -7
- data/app/models/foreman_fog_proxmox/proxmox_vm_new.rb +37 -24
- data/app/models/foreman_fog_proxmox/proxmox_vm_queries.rb +4 -5
- data/app/models/foreman_fog_proxmox/proxmox_volumes.rb +23 -12
- data/app/models/foreman_fog_proxmox/vms.rb +2 -2
- data/app/views/compute_resources_vms/form/proxmox/container/_config.html.erb +2 -2
- data/app/views/compute_resources_vms/form/proxmox/container/_network.html.erb +2 -2
- data/app/views/compute_resources_vms/form/proxmox/container/_volume_mp.html.erb +1 -1
- data/app/views/compute_resources_vms/form/proxmox/container/_volume_rootfs.html.erb +1 -1
- data/app/views/compute_resources_vms/form/proxmox/server/_config.html.erb +3 -3
- data/app/views/compute_resources_vms/form/proxmox/server/_network.html.erb +3 -3
- data/app/views/compute_resources_vms/form/proxmox/server/_volume_hard_disk.html.erb +1 -1
- data/config/routes.rb +8 -4
- data/db/migrate/20210312105013_update_proxmox_uuid_host.rb +1 -2
- data/lib/foreman_fog_proxmox/engine.rb +4 -3
- data/lib/foreman_fog_proxmox/semver.rb +1 -4
- data/lib/foreman_fog_proxmox/version.rb +1 -1
- data/locale/en/foreman_fog_proxmox.po +140 -47
- data/locale/foreman_fog_proxmox.pot +300 -137
- data/locale/fr/foreman_fog_proxmox.po +145 -52
- data/test/factories/foreman_fog_proxmox/proxmox_container_mock_factory.rb +6 -7
- data/test/factories/foreman_fog_proxmox/proxmox_server_mock_factory.rb +6 -7
- data/test/functional/compute_resources_controller_test.rb +4 -2
- data/test/test_plugin_helper.rb +12 -7
- data/test/unit/foreman_fog_proxmox/helpers/proxmox_container_helper_test.rb +38 -47
- data/test/unit/foreman_fog_proxmox/helpers/proxmox_server_helper_test.rb +49 -34
- data/test/unit/foreman_fog_proxmox/helpers/proxmox_vm_helper_test.rb +29 -65
- data/test/unit/foreman_fog_proxmox/helpers/proxmox_vm_volumes_helper_test.rb +3 -3
- data/test/unit/foreman_fog_proxmox/proxmox_compute_attributes_test.rb +22 -13
- data/test/unit/foreman_fog_proxmox/proxmox_interfaces_test.rb +18 -9
- data/test/unit/foreman_fog_proxmox/proxmox_vm_commands_container_test.rb +45 -35
- data/test/unit/foreman_fog_proxmox/proxmox_vm_commands_server_create_test.rb +0 -4
- data/test/unit/foreman_fog_proxmox/proxmox_vm_commands_server_update_cdrom_test.rb +34 -22
- data/test/unit/foreman_fog_proxmox/proxmox_vm_commands_server_update_cloudinit_test.rb +20 -14
- data/test/unit/foreman_fog_proxmox/proxmox_vm_commands_server_update_hard_disk_test.rb +76 -54
- data/test/unit/foreman_fog_proxmox/proxmox_vm_commands_server_update_test.rb +26 -15
- data/test/unit/foreman_fog_proxmox/proxmox_vm_queries_test.rb +1 -1
- data/test/unit/foreman_fog_proxmox/semver_test.rb +2 -1
- metadata +34 -20
@@ -36,7 +36,7 @@ module ForemanFogProxmox
|
|
36
36
|
|
37
37
|
def hard_disk_typed_defaults(vm_type)
|
38
38
|
options = {}
|
39
|
-
volume_attributes_h = { storage: storages.first.identity.to_s, size:
|
39
|
+
volume_attributes_h = { storage: storages.first.identity.to_s, size: '8' }
|
40
40
|
case vm_type
|
41
41
|
when 'qemu'
|
42
42
|
controller = 'virtio'
|
@@ -74,8 +74,14 @@ module ForemanFogProxmox
|
|
74
74
|
|
75
75
|
def interface_typed_defaults(type)
|
76
76
|
interface_attributes_h = { id: 'net0', compute_attributes: {} }
|
77
|
-
|
78
|
-
|
77
|
+
if type == 'qemu'
|
78
|
+
interface_attributes_h[:compute_attributes] =
|
79
|
+
{ model: 'virtio', bridge: bridges.first.identity.to_s }
|
80
|
+
end
|
81
|
+
if type == 'lxc'
|
82
|
+
interface_attributes_h[:compute_attributes] =
|
83
|
+
{ name: 'eth0', bridge: bridges.first.identity.to_s, dhcp: 1, dhcp6: 1 }
|
84
|
+
end
|
79
85
|
interface_attributes_h
|
80
86
|
end
|
81
87
|
|
@@ -106,7 +112,7 @@ module ForemanFogProxmox
|
|
106
112
|
interfaces_attributes = []
|
107
113
|
interfaces_attributes.push(interface_typed_defaults(type))
|
108
114
|
new_attr = new_attr.merge(interfaces_attributes: interfaces_attributes.map.with_index.to_h.invert)
|
109
|
-
logger.debug(
|
115
|
+
logger.debug("add_default_typed_interface(#{type}) to new_attr=#{new_attr}")
|
110
116
|
new_attr
|
111
117
|
end
|
112
118
|
|
@@ -115,7 +121,7 @@ module ForemanFogProxmox
|
|
115
121
|
volumes_attributes.push(hard_disk_typed_defaults('qemu'))
|
116
122
|
volumes_attributes.push(hard_disk_typed_defaults('lxc'))
|
117
123
|
new_attr = new_attr.merge(volumes_attributes: volumes_attributes.map.with_index.to_h.invert)
|
118
|
-
logger.debug(
|
124
|
+
logger.debug("add_default_typed_volume(#{type}) to new_attr=#{new_attr}")
|
119
125
|
new_attr
|
120
126
|
end
|
121
127
|
|
@@ -127,29 +133,28 @@ module ForemanFogProxmox
|
|
127
133
|
defaults = vm_instance_defaults
|
128
134
|
defaults = defaults.merge(config_attributes: config_attributes(type))
|
129
135
|
defaults = add_default_typed_volume(defaults)
|
130
|
-
|
131
|
-
defaults
|
136
|
+
add_default_typed_interface(type, defaults)
|
132
137
|
end
|
133
138
|
|
134
139
|
def config_attributes(type = 'qemu')
|
135
140
|
case type
|
136
141
|
when 'qemu'
|
137
142
|
config_attributes = {
|
138
|
-
cores: 1,
|
139
|
-
sockets: 1,
|
140
|
-
kvm: 0,
|
143
|
+
cores: '1',
|
144
|
+
sockets: '1',
|
145
|
+
kvm: '0',
|
141
146
|
vga: 'std',
|
142
|
-
memory:
|
147
|
+
memory: '1024',
|
143
148
|
ostype: 'l26',
|
144
149
|
cpu: 'cputype=kvm64',
|
145
150
|
scsihw: 'virtio-scsi-pci',
|
146
|
-
templated: 0
|
151
|
+
templated: '0',
|
147
152
|
}
|
148
153
|
config_attributes = config_attributes
|
149
154
|
when 'lxc'
|
150
155
|
config_attributes = {
|
151
|
-
memory:
|
152
|
-
templated: 0
|
156
|
+
memory: '1024',
|
157
|
+
templated: '0',
|
153
158
|
}
|
154
159
|
end
|
155
160
|
config_attributes
|
@@ -159,14 +164,21 @@ module ForemanFogProxmox
|
|
159
164
|
new_attr = ActiveSupport::HashWithIndifferentAccess.new(new_attr)
|
160
165
|
type = new_attr['type']
|
161
166
|
type ||= 'qemu'
|
162
|
-
|
163
|
-
vm
|
167
|
+
new_typed_vm(new_attr, type)
|
164
168
|
end
|
165
169
|
|
166
170
|
def convert_config_attributes(new_attr)
|
167
171
|
config_attributes = new_attr[:config_attributes]
|
168
|
-
|
169
|
-
|
172
|
+
if config_attributes.key?(:disks)
|
173
|
+
config_attributes[:volumes_attributes] = Hash[config_attributes[:disks].each_with_index.map do |disk, idx|
|
174
|
+
[idx.to_s, disk.attributes]
|
175
|
+
end ]
|
176
|
+
end
|
177
|
+
if config_attributes.key?(:interfaces)
|
178
|
+
config_attributes[:interfaces_attributes] = Hash[config_attributes[:interfaces].each_with_index.map do |interface, idx|
|
179
|
+
[idx.to_s, interface_compute_attributes(interface.attributes)]
|
180
|
+
end ]
|
181
|
+
end
|
170
182
|
config_attributes.delete_if { |key, _value| ['disks', 'interfaces'].include?(key) }
|
171
183
|
end
|
172
184
|
|
@@ -177,14 +189,15 @@ module ForemanFogProxmox
|
|
177
189
|
new_attr_type = new_attr['type']
|
178
190
|
new_attr_type ||= new_attr['config_attributes']['type'] if new_attr.key?('config_attributes')
|
179
191
|
new_attr_type ||= type
|
180
|
-
logger.debug(
|
181
|
-
logger.debug(
|
192
|
+
logger.debug("new_typed_vm(#{type}): new_attr_type=#{new_attr_type}")
|
193
|
+
logger.debug("new_typed_vm(#{type}): new_attr=#{new_attr}'")
|
182
194
|
options = !new_attr.key?('vmid') || ForemanFogProxmox::Value.empty?(new_attr['vmid']) ? vm_typed_instance_defaults(type).merge(new_attr).merge(type: type) : new_attr
|
183
|
-
logger.debug(
|
195
|
+
logger.debug("new_typed_vm(#{type}): options=#{options}")
|
184
196
|
vm_h = parse_typed_vm(options, type).deep_symbolize_keys
|
185
|
-
logger.debug(
|
186
|
-
|
187
|
-
|
197
|
+
logger.debug("new_typed_vm(#{type}): vm_h=#{vm_h}")
|
198
|
+
vm_h = vm_h.merge(vm_typed_instance_defaults(type)) if vm_h.empty?
|
199
|
+
logger.debug(format(_('new_typed_vm(%<type>s) with vm_typed_instance_defaults: vm_h=%<vm_h>s'), type: type, vm_h: vm_h))
|
200
|
+
node.send(vm_collection(type)).new(vm_h)
|
188
201
|
end
|
189
202
|
end
|
190
203
|
end
|
@@ -31,7 +31,7 @@ module ForemanFogProxmox
|
|
31
31
|
node = client.nodes.get node_id
|
32
32
|
node ||= default_node
|
33
33
|
storages = node.storages.list_by_content_type type
|
34
|
-
logger.debug(
|
34
|
+
logger.debug("storages(): node_id #{node_id} type #{type}")
|
35
35
|
storages.sort_by(&:storage)
|
36
36
|
end
|
37
37
|
|
@@ -61,10 +61,9 @@ module ForemanFogProxmox
|
|
61
61
|
nodes.each do |node|
|
62
62
|
vm = find_vm_in_servers_by_vmid(node.servers, vmid)
|
63
63
|
vm ||= find_vm_in_servers_by_vmid(node.containers, vmid)
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
end
|
64
|
+
next if vm.nil?
|
65
|
+
logger.debug("found vm #{vmid} on node #{node.node}")
|
66
|
+
break
|
68
67
|
end
|
69
68
|
vm
|
70
69
|
end
|
@@ -25,7 +25,7 @@ module ForemanFogProxmox
|
|
25
25
|
include ProxmoxVmHelper
|
26
26
|
|
27
27
|
def delete_volume(vm, id, volume_attributes)
|
28
|
-
logger.info(
|
28
|
+
logger.info("vm #{vm.identity} delete volume #{id}")
|
29
29
|
vm.detach(id)
|
30
30
|
return unless volume_type?(volume_attributes, 'hard_disk')
|
31
31
|
|
@@ -36,7 +36,7 @@ module ForemanFogProxmox
|
|
36
36
|
def volume_options(vm, id, volume_attributes)
|
37
37
|
options = {}
|
38
38
|
options.store(:mp, volume_attributes['mp']) if vm.container? && id != 'rootfs'
|
39
|
-
options.store(:cache, volume_attributes['cache']) unless vm.container?
|
39
|
+
options.store(:cache, volume_attributes['cache']) unless vm.container? || volume_attributes['cache'].empty?
|
40
40
|
options
|
41
41
|
end
|
42
42
|
|
@@ -59,19 +59,19 @@ module ForemanFogProxmox
|
|
59
59
|
end
|
60
60
|
|
61
61
|
def extend_volume(vm, id, diff_size)
|
62
|
-
extension =
|
63
|
-
logger.info(
|
62
|
+
extension = "+#{diff_size}G"
|
63
|
+
logger.info("vm #{vm.identity} extend volume #{id} to #{extension}")
|
64
64
|
vm.extend(id, extension)
|
65
65
|
end
|
66
66
|
|
67
67
|
def move_volume(id, vm, new_storage)
|
68
|
-
logger.info(
|
68
|
+
logger.info("vm #{vm.identity} move volume #{id} into #{new_storage}")
|
69
69
|
vm.move(id, new_storage)
|
70
70
|
end
|
71
71
|
|
72
72
|
def update_options(disk, vm, volume_attributes)
|
73
73
|
options = volume_options(vm, disk.id, volume_attributes) if volume_type?(volume_attributes, 'hard_disk')
|
74
|
-
logger.info(
|
74
|
+
logger.info("vm #{vm.identity} update volume #{disk.id} to #{options}")
|
75
75
|
new_disk = { id: disk.id }
|
76
76
|
new_disk[:volid] = disk.volid
|
77
77
|
vm.attach(new_disk, options)
|
@@ -82,7 +82,12 @@ module ForemanFogProxmox
|
|
82
82
|
if volume_type?(volume_attributes, 'cdrom')
|
83
83
|
update_cdrom(vm, disk, volume_attributes)
|
84
84
|
elsif volume_type?(volume_attributes, 'hard_disk')
|
85
|
-
diff_size = volume_attributes['size'].to_i - disk.size if volume_attributes['size'] && disk.size
|
85
|
+
diff_size = volume_attributes['size'].to_i - disk.size.to_i if volume_attributes['size'] && disk.size
|
86
|
+
unless diff_size >= 0
|
87
|
+
raise ::Foreman::Exception,
|
88
|
+
format(_('Unable to shrink %<id>s size. Proxmox allows only increasing size.'), id: id)
|
89
|
+
end
|
90
|
+
diff_size = volume_attributes['size'].to_i - disk.size.to_i if volume_attributes['size'] && disk.size
|
86
91
|
raise ::Foreman::Exception, format(_('Unable to shrink %<id>s size. Proxmox allows only increasing size.'), id: id) unless diff_size >= 0
|
87
92
|
|
88
93
|
new_storage = volume_attributes['storage']
|
@@ -98,7 +103,13 @@ module ForemanFogProxmox
|
|
98
103
|
end
|
99
104
|
|
100
105
|
def volume_exists?(vm, volume_attributes)
|
101
|
-
vm.
|
106
|
+
disk = vm.config.disks.get(volume_attributes['id'])
|
107
|
+
exists = false
|
108
|
+
return exists unless disk
|
109
|
+
|
110
|
+
exists = !volume_attributes['volid'].empty? if disk.hard_disk? || disk.cloud_init?
|
111
|
+
exists = !volume_attributes['cdrom'].empty? if disk.cdrom?
|
112
|
+
exists
|
102
113
|
end
|
103
114
|
|
104
115
|
def volume_to_delete?(volume_attributes)
|
@@ -121,20 +132,20 @@ module ForemanFogProxmox
|
|
121
132
|
if volume_type?(volume_attributes, 'hard_disk')
|
122
133
|
options = volume_options(vm, id, volume_attributes)
|
123
134
|
disk_attributes[:storage] = volume_attributes['storage']
|
124
|
-
disk_attributes[:size] =
|
135
|
+
disk_attributes[:size] = volume_attributes['size']
|
125
136
|
elsif volume_type?(volume_attributes, 'cdrom')
|
126
137
|
disk_attributes[:volid] = volume_attributes[:iso]
|
127
138
|
elsif volume_type?(volume_attributes, 'cloud_init')
|
128
139
|
disk_attributes[:storage] = volume_attributes['storage']
|
129
140
|
disk_attributes[:volid] = "#{volume_attributes['storage']}:cloudinit"
|
130
141
|
end
|
131
|
-
logger.info(
|
132
|
-
logger.debug(
|
142
|
+
logger.info("vm #{vm.identity} add volume #{id}")
|
143
|
+
logger.debug("add_volume(#{vm.identity}) disk_attributes=#{disk_attributes}")
|
133
144
|
vm.attach(disk_attributes, options)
|
134
145
|
end
|
135
146
|
|
136
147
|
def save_volume(vm, volume_attributes)
|
137
|
-
logger.debug(
|
148
|
+
logger.debug("save_volume(#{vm.identity}) volume_attributes=#{volume_attributes}")
|
138
149
|
id = extract_id(vm, volume_attributes)
|
139
150
|
if volume_exists?(vm, volume_attributes)
|
140
151
|
if volume_to_delete?(volume_attributes)
|
@@ -28,8 +28,8 @@ along with ForemanFogProxmox. If not, see <http://www.gnu.org/licenses/>. %>
|
|
28
28
|
<%= counter_f f, :cpuunits, :class => "input-mini", :label => _('CPU units'), :label_size => "col-md-2" %>
|
29
29
|
<% end %>
|
30
30
|
<%= field_set_tag _("Memory"), :id => "container_config_memory", :class => 'hide', :disabled => !container do %>
|
31
|
-
<%=
|
32
|
-
<%=
|
31
|
+
<%= text_f f, :memory, :class => "input-mini", :label => _('Memory (MB)'), :label_size => "col-md-2" %>
|
32
|
+
<%= text_f f, :swap, :class => "input-mini", :label => _('Swap (MB)'), :label_size => "col-md-2" %>
|
33
33
|
<% end %>
|
34
34
|
<%= field_set_tag _("DNS"), :id => "container_config_dns", :class => 'hide', :disabled => !container do %>
|
35
35
|
<%= text_f f, :hostname, :label => _('Hostname'), :label_size => "col-md-2", :disabled => true %>
|
@@ -27,8 +27,8 @@ along with ForemanFogProxmox. If not, see <http://www.gnu.org/licenses/>. %>
|
|
27
27
|
<%= checkbox_f f, :dhcp6, :label => _('DHCP IPv6') %>
|
28
28
|
<%= text_f f, :cidr6, :label => _('CIDR IPv6'), :label_size => "col-md-2", :label_help => _("integer within [0..128]")%>
|
29
29
|
<%= text_f f, :gw6, :label => _('Gateway IPv6'), :label_size => "col-md-2" %>
|
30
|
-
<%=
|
31
|
-
<%=
|
30
|
+
<%= text_f f, :tag, :class => "input-mini", :label => _('VLAN tag'), :label_size => "col-md-2" %>
|
31
|
+
<%= text_f f, :rate, :class => "input-mini", :label => _('Rate limit'), :label_size => "col-md-2" %>
|
32
32
|
<%= checkbox_f f, :firewall, :label => _('Firewall') %>
|
33
33
|
<%= select_f f, :bridge, compute_resource.bridges(node_id), :iface, :iface, { }, :label => _('Bridge'), :label_size => "col-md-2" %>
|
34
34
|
<% end %>
|
@@ -23,5 +23,5 @@ along with ForemanFogProxmox. If not, see <http://www.gnu.org/licenses/>. %>
|
|
23
23
|
<%= select_f f, :storage, compute_resource.storages(node_id), :storage, :storage, { }, :label => _('Storage'), :label_size => "col-md-2" %>
|
24
24
|
<%= text_f f, :mp, :label => _('Path'), :label_size => "col-md-2", :required => true, :help_inline => _("e.g. /path/to/") %>
|
25
25
|
<%= text_f f, :device, :label => _('Device'), :label_size => "col-md-2", :class => ('hide' if f.object.rootfs?), :disabled => (!new_volume || f.object.rootfs?), :'data-soft-max' => 10 %>
|
26
|
-
<%=
|
26
|
+
<%= text_f f, :size, :class => "input-mini", :label => _("Size (GB)"), :label_size => "col-md-2" %>
|
27
27
|
<% end %>
|
@@ -20,5 +20,5 @@ along with ForemanFogProxmox. If not, see <http://www.gnu.org/licenses/>. %>
|
|
20
20
|
<%= field_set_tag _("Rootfs"), :id => "container_volume_rootfs", :class => ('hide' unless container), :disabled => !container do %>
|
21
21
|
<%= f.hidden_field :volid if !new_vm %>
|
22
22
|
<%= select_f f, :storage, compute_resource.storages(node_id), :storage, :storage, { }, :label => _('Storage'), :label_size => "col-md-2" %>
|
23
|
-
<%=
|
23
|
+
<%= text_f f, :size, :class => "input-mini", :label => _("Size (GB)"), :label_size => "col-md-2" %>
|
24
24
|
<% end %>
|
@@ -45,9 +45,9 @@ along with ForemanFogProxmox. If not, see <http://www.gnu.org/licenses/>. %>
|
|
45
45
|
<% end %>
|
46
46
|
<% end %>
|
47
47
|
<%= field_set_tag _("Memory"), :id => "server_config_memory", :class => 'hide', :disabled => !server do %>
|
48
|
-
<%=
|
49
|
-
<%=
|
50
|
-
<%=
|
48
|
+
<%= text_f f, :memory, :class => "input-mini", :label => _('Memory (MB)'), :label_size => "col-md-2" %>
|
49
|
+
<%= text_f f, :balloon, :class => "input-mini", :label => _('Minimum memory (MB)'), :label_size => "col-md-2" %>
|
50
|
+
<%= text_f f, :shares, :class => "input-mini", :label => _('Shares (MB)'), :label_size => "col-md-2" %>
|
51
51
|
<% end %>
|
52
52
|
<%= field_set_tag _("Operating System"), :id => "server_config_os", :class => 'hide', :disabled => !server do %>
|
53
53
|
<%= select_f f, :ostype, proxmox_operating_systems_map, :id, :name, { :include_blank => true }, :label => _('OS type'), :label_size => "col-md-2" %>
|
@@ -22,9 +22,9 @@ along with ForemanFogProxmox. If not, see <http://www.gnu.org/licenses/>. %>
|
|
22
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
|
-
<%=
|
26
|
-
<%=
|
27
|
-
<%=
|
25
|
+
<%= text_f f, :tag, :class => "input-mini", :label => _('VLAN tag'), :label_size => "col-md-2" %>
|
26
|
+
<%= text_f f, :rate, :class => "input-mini", :label => _('Rate limit'), :label_size => "col-md-2" %>
|
27
|
+
<%= text_f f, :queues, :class => "input-mini", :label => _('Multiqueue'), :label_size => "col-md-2" %>
|
28
28
|
<%= checkbox_f f, :firewall, { :label => _('Firewall') }, '1', '0' %>
|
29
29
|
<%= checkbox_f f, :link_down, { :label => _('Disconnect') }, '1', '0' %>
|
30
30
|
<% end %>
|
@@ -28,5 +28,5 @@ along with ForemanFogProxmox. If not, see <http://www.gnu.org/licenses/>. %>
|
|
28
28
|
<%= select_f f, :controller, proxmox_controllers_map, :id, :name, { }, :label => _('Controller'), :label_size => "col-md-2", :disabled => !new_volume, :onchange => 'controllerSelected(this)' %>
|
29
29
|
<%= text_f f, :device, :label => _('Device'), :label_size => "col-md-2", :disabled => !new_volume, :'data-min' => 0, :'data-soft-max' => proxmox_max_device(f.object.controller), :onchange => 'deviceSelected(this)' %>
|
30
30
|
<%= select_f f, :cache, proxmox_caches_map, :id, :name, { include_blank: true }, :label => _('Cache'), :label_size => "col-md-2" %>
|
31
|
-
<%=
|
31
|
+
<%= text_f f, :size, :class => "input-mini", :label => _("Size (GB)"), :label_size => "col-md-2", :disabled => !hard_disk %>
|
32
32
|
<% end %>
|
data/config/routes.rb
CHANGED
@@ -19,12 +19,16 @@
|
|
19
19
|
|
20
20
|
Rails.application.routes.draw do
|
21
21
|
namespace :foreman_fog_proxmox do
|
22
|
-
match 'isos/:compute_resource_id/:node_id/:storage', :to => 'compute_resources#isos_by_id_and_node_and_storage',
|
23
|
-
|
22
|
+
match 'isos/:compute_resource_id/:node_id/:storage', :to => 'compute_resources#isos_by_id_and_node_and_storage',
|
23
|
+
:via => 'get'
|
24
|
+
match 'ostemplates/:compute_resource_id/:node_id/:storage',
|
25
|
+
:to => 'compute_resources#ostemplates_by_id_and_node_and_storage', :via => 'get'
|
24
26
|
match 'isos/:compute_resource_id/:node_id', :to => 'compute_resources#isos_by_id_and_node', :via => 'get'
|
25
|
-
match 'ostemplates/:compute_resource_id/:node_id', :to => 'compute_resources#ostemplates_by_id_and_node',
|
27
|
+
match 'ostemplates/:compute_resource_id/:node_id', :to => 'compute_resources#ostemplates_by_id_and_node',
|
28
|
+
:via => 'get'
|
26
29
|
match 'storages/:compute_resource_id/:node_id', :to => 'compute_resources#storages_by_id_and_node', :via => 'get'
|
27
|
-
match 'isostorages/:compute_resource_id/:node_id', :to => 'compute_resources#iso_storages_by_id_and_node',
|
30
|
+
match 'isostorages/:compute_resource_id/:node_id', :to => 'compute_resources#iso_storages_by_id_and_node',
|
31
|
+
:via => 'get'
|
28
32
|
match 'bridges/:compute_resource_id/:node_id', :to => 'compute_resources#bridges_by_id_and_node', :via => 'get'
|
29
33
|
end
|
30
34
|
end
|
@@ -1,6 +1,5 @@
|
|
1
1
|
include ProxmoxVmUuidHelper
|
2
2
|
class UpdateProxmoxUuidHost < ActiveRecord::Migration[6.0]
|
3
|
-
|
4
3
|
def up
|
5
4
|
execute(sql(:concat))
|
6
5
|
end
|
@@ -9,7 +8,7 @@ class UpdateProxmoxUuidHost < ActiveRecord::Migration[6.0]
|
|
9
8
|
execute(sql(:substring))
|
10
9
|
end
|
11
10
|
|
12
|
-
private
|
11
|
+
private
|
13
12
|
|
14
13
|
def concat
|
15
14
|
"concat(h.compute_resource_id, '_', h.uuid) "
|
@@ -63,7 +63,8 @@ module ForemanFogProxmox
|
|
63
63
|
# content twice.
|
64
64
|
assets_to_precompile =
|
65
65
|
Dir.chdir(root) do
|
66
|
-
Dir['app/assets/javascripts/foreman_fog_proxmox/**/*',
|
66
|
+
Dir['app/assets/javascripts/foreman_fog_proxmox/**/*',
|
67
|
+
'app/assets/stylesheets/foreman_fog_proxmox/**/*'].map do |f|
|
67
68
|
f.split(File::SEPARATOR, 4).last
|
68
69
|
end
|
69
70
|
end
|
@@ -73,8 +74,8 @@ module ForemanFogProxmox
|
|
73
74
|
initializer 'foreman_fog_proxmox.configure_assets', group: :assets do
|
74
75
|
SETTINGS[:foreman_fog_proxmox] = {
|
75
76
|
assets: {
|
76
|
-
precompile: assets_to_precompile
|
77
|
-
}
|
77
|
+
precompile: assets_to_precompile,
|
78
|
+
},
|
78
79
|
}
|
79
80
|
end
|
80
81
|
|
@@ -21,10 +21,7 @@ module ForemanFogProxmox
|
|
21
21
|
module Semver
|
22
22
|
SEMVER_REGEX = /^(\d+)[.](\d+)([.](\d+))?(-([.\w]+))?$/.freeze
|
23
23
|
class SemverClass
|
24
|
-
attr_accessor :major
|
25
|
-
attr_accessor :minor
|
26
|
-
attr_accessor :patch
|
27
|
-
attr_accessor :qualifier
|
24
|
+
attr_accessor :major, :minor, :patch, :qualifier
|
28
25
|
|
29
26
|
def initialize(major, minor, patch, qualifier = '')
|
30
27
|
@major = major.to_i
|