foreman_bootdisk 15.0.0 → 17.1.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/.github/workflows/rubocop.yaml +19 -0
- data/.tx/config +1 -1
- data/AUTHORS +11 -0
- data/README.md +25 -0
- data/app/controllers/concerns/allowed_actions.rb +16 -0
- data/app/controllers/foreman_bootdisk/api/v2/disks_controller.rb +9 -7
- data/app/controllers/foreman_bootdisk/api/v2/subnet_disks_controller.rb +16 -4
- data/app/controllers/foreman_bootdisk/disks_controller.rb +14 -10
- data/app/helpers/concerns/foreman_bootdisk/hosts_helper_ext.rb +71 -45
- data/app/lib/foreman_bootdisk/scope/bootdisk.rb +28 -1
- data/app/lib/foreman_bootdisk/scope/full_host_bootdisk_efi.rb +15 -0
- data/app/models/concerns/foreman_bootdisk/compute_resources/vmware.rb +10 -1
- data/app/models/concerns/foreman_bootdisk/host_ext.rb +13 -6
- data/app/models/concerns/foreman_bootdisk/orchestration/compute.rb +38 -22
- data/app/models/setting/bootdisk.rb +25 -19
- data/app/services/foreman_bootdisk/iso_generator.rb +132 -51
- data/app/services/foreman_bootdisk/renderer.rb +36 -19
- data/app/views/foreman_bootdisk/generic_efi_host.erb +68 -0
- data/app/views/foreman_bootdisk/generic_static_host.erb +34 -0
- data/app/views/foreman_bootdisk/host.erb +29 -8
- data/db/seeds.d/50-bootdisk_templates.rb +15 -31
- data/lib/foreman_bootdisk/engine.rb +9 -6
- data/lib/foreman_bootdisk/version.rb +1 -1
- data/lib/tasks/bootdisk.rake +10 -24
- data/locale/action_names.rb +7 -0
- data/locale/ca/LC_MESSAGES/foreman_bootdisk.mo +0 -0
- data/locale/ca/foreman_bootdisk.po +58 -7
- data/locale/de/LC_MESSAGES/foreman_bootdisk.mo +0 -0
- data/locale/de/foreman_bootdisk.po +62 -11
- data/locale/en/LC_MESSAGES/foreman_bootdisk.mo +0 -0
- data/locale/en/foreman_bootdisk.po +56 -5
- data/locale/en_GB/LC_MESSAGES/foreman_bootdisk.mo +0 -0
- data/locale/en_GB/foreman_bootdisk.po +62 -11
- data/locale/es/LC_MESSAGES/foreman_bootdisk.mo +0 -0
- data/locale/es/foreman_bootdisk.po +62 -11
- data/locale/foreman_bootdisk.pot +108 -36
- data/locale/fr/LC_MESSAGES/foreman_bootdisk.mo +0 -0
- data/locale/fr/foreman_bootdisk.po +61 -10
- data/locale/it/LC_MESSAGES/foreman_bootdisk.mo +0 -0
- data/locale/it/foreman_bootdisk.po +60 -9
- data/locale/ja/LC_MESSAGES/foreman_bootdisk.mo +0 -0
- data/locale/ja/foreman_bootdisk.po +61 -10
- data/locale/ko/LC_MESSAGES/foreman_bootdisk.mo +0 -0
- data/locale/ko/foreman_bootdisk.po +60 -9
- data/locale/pt_BR/LC_MESSAGES/foreman_bootdisk.mo +0 -0
- data/locale/pt_BR/foreman_bootdisk.po +60 -9
- data/locale/ru/LC_MESSAGES/foreman_bootdisk.mo +0 -0
- data/locale/ru/foreman_bootdisk.po +60 -9
- data/locale/sv_SE/LC_MESSAGES/foreman_bootdisk.mo +0 -0
- data/locale/sv_SE/foreman_bootdisk.po +59 -8
- data/locale/zh_CN/LC_MESSAGES/foreman_bootdisk.mo +0 -0
- data/locale/zh_CN/foreman_bootdisk.po +60 -9
- data/locale/zh_TW/LC_MESSAGES/foreman_bootdisk.mo +0 -0
- data/locale/zh_TW/foreman_bootdisk.po +60 -9
- data/release-gem +2 -0
- data/test/functional/foreman_bootdisk/api/v2/disks_controller_test.rb +51 -17
- data/test/functional/foreman_bootdisk/api/v2/subnet_disks_controller_test.rb +23 -10
- data/test/functional/foreman_bootdisk/disks_controller_test.rb +65 -25
- data/test/test_plugin_helper.rb +21 -3
- data/test/unit/concerns/host_test.rb +12 -1
- data/test/unit/concerns/orchestration/compute_test.rb +32 -13
- data/test/unit/foreman_bootdisk/renderer_test.rb +1 -1
- data/test/unit/iso_generator_test.rb +6 -7
- metadata +14 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ca80bb43629c291c9d6b27bb8c94ebd10fcc2e6e267378e4852ab42bdcee0088
|
4
|
+
data.tar.gz: 743d4a31beef4d80d6ab5b025cf6261bbbb11cb62eb82b65d8f7c5aaed58c9fb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1915d2f7f01f58ec795f343707fe7a6d24f49af0ce6fb6ee9577f3279749e74f5cfb74b7ee707f3eea0e972b92344bc7d10a30f7be9556bffe8be2a39315526d
|
7
|
+
data.tar.gz: b21943b356b209d60ad7cd1bc655a81c042ef93534fb94f719c271688f64f42a2f2ea3ba21a10280b388861fd061d1e08df498de216dc233f27a92e10065c942
|
@@ -0,0 +1,19 @@
|
|
1
|
+
name: Rubocop
|
2
|
+
|
3
|
+
on: [pull_request]
|
4
|
+
|
5
|
+
jobs:
|
6
|
+
rubocop:
|
7
|
+
runs-on: ubuntu-latest
|
8
|
+
env:
|
9
|
+
BUNDLE_FOREMAN: '0'
|
10
|
+
BUNDLE_WITHOUT: development:test
|
11
|
+
steps:
|
12
|
+
- uses: actions/checkout@v2
|
13
|
+
- name: Setup Ruby
|
14
|
+
uses: ruby/setup-ruby@v1
|
15
|
+
with:
|
16
|
+
ruby-version: 2.5
|
17
|
+
bundler-cache: true
|
18
|
+
- name: Run rubocop
|
19
|
+
run: bundle exec rubocop -P --format github
|
data/.tx/config
CHANGED
data/AUTHORS
CHANGED
@@ -1,20 +1,31 @@
|
|
1
|
+
Adam Ruzicka
|
2
|
+
Bernhard Suttner
|
1
3
|
Bryan Kearney
|
4
|
+
crito
|
5
|
+
Damon Maria
|
2
6
|
Dominic Cleal
|
7
|
+
Dominik Matoulek
|
3
8
|
Greg Sutcliffe
|
4
9
|
Ido Kanner
|
5
10
|
Jon Fautley
|
6
11
|
Justin Sherrill
|
12
|
+
Leos Stejskal
|
7
13
|
Lukas Zapletal
|
8
14
|
Lukáš Zapletal
|
9
15
|
Marek Hulan
|
10
16
|
Marek Hulán
|
17
|
+
Markus Bucher
|
11
18
|
Martin Bačovský
|
12
19
|
Michael Hofer
|
13
20
|
Michael Moll
|
14
21
|
Ohad Levy
|
22
|
+
Oleh Fedorenko
|
15
23
|
Ondrej Prazak
|
24
|
+
Ondřej Ezr
|
16
25
|
Ondřej Pražák
|
26
|
+
Pat Riehecky
|
17
27
|
Robert Antoni Buj Gelonch
|
28
|
+
Rohan21Lobo
|
18
29
|
Ronald van Zantvoort
|
19
30
|
Sam Kottler
|
20
31
|
Sean O'Keeffe
|
data/README.md
CHANGED
@@ -50,6 +50,10 @@ gPXE images are unsupported due to lack of initrd support.
|
|
50
50
|
| >= 1.19 | ~> 13.0 |
|
51
51
|
| >= 1.20 | ~> 14.0 |
|
52
52
|
| >= 1.21 | ~> 15.0 |
|
53
|
+
| >= 1.23 | ~> 16.0 |
|
54
|
+
| >= 1.24 | ~> 16.1 |
|
55
|
+
| >= 2.0 | ~> 16.1 |
|
56
|
+
| >= 2.1 | ~> 17.0 |
|
53
57
|
|
54
58
|
# Usage
|
55
59
|
|
@@ -119,6 +123,7 @@ TFTP settings are needed.
|
|
119
123
|
<th>DHCP reservation</th>
|
120
124
|
<th>Pre-register host</th>
|
121
125
|
<th>OS-specific</th>
|
126
|
+
<th>EFI supported</th>
|
122
127
|
</tr>
|
123
128
|
<tr>
|
124
129
|
<td>Per-host image</td>
|
@@ -127,6 +132,7 @@ TFTP settings are needed.
|
|
127
132
|
<td>No</td>
|
128
133
|
<td>Yes</td>
|
129
134
|
<td>No</td>
|
135
|
+
<td>No</td>
|
130
136
|
</tr>
|
131
137
|
<tr>
|
132
138
|
<td>Full host image</td>
|
@@ -135,6 +141,7 @@ TFTP settings are needed.
|
|
135
141
|
<td>No</td>
|
136
142
|
<td>Yes</td>
|
137
143
|
<td>Yes</td>
|
144
|
+
<td>Yes</td>
|
138
145
|
</tr>
|
139
146
|
<tr>
|
140
147
|
<td>Generic image</td>
|
@@ -143,6 +150,7 @@ TFTP settings are needed.
|
|
143
150
|
<td>No</td>
|
144
151
|
<td>Yes</td>
|
145
152
|
<td>No</td>
|
153
|
+
<td>No</td>
|
146
154
|
</tr>
|
147
155
|
<tr>
|
148
156
|
<td>Subnet image</td>
|
@@ -151,6 +159,7 @@ TFTP settings are needed.
|
|
151
159
|
<td>No</td>
|
152
160
|
<td>Yes</td>
|
153
161
|
<td>No</td>
|
162
|
+
<td>Yes</td>
|
154
163
|
</tr>
|
155
164
|
</table>
|
156
165
|
|
@@ -236,6 +245,22 @@ To generate from the command line on the Foreman server:
|
|
236
245
|
Set `OUTPUT=/path` to change the output destination path (directory or file).
|
237
246
|
It must be writable by the 'foreman' user.
|
238
247
|
|
248
|
+
### Generic static image
|
249
|
+
|
250
|
+
This is generic image type which asks for network credentials instead of doing
|
251
|
+
DHCP request. Tokens must be turned off in order to find the host by MAC
|
252
|
+
address. To do that, set Token duration to 0 in Administer - Settings.
|
253
|
+
|
254
|
+
- Network interface name
|
255
|
+
- IP Address
|
256
|
+
- Netmask
|
257
|
+
- Gateway
|
258
|
+
- DNS
|
259
|
+
|
260
|
+
To use generic static host image, set "Generic image template" to "Bootdisk
|
261
|
+
iPXE - host template" in Administer - Settings - Boot disk. Only one template
|
262
|
+
can be used at one time across all hosts.
|
263
|
+
|
239
264
|
### Subnet images
|
240
265
|
|
241
266
|
Subnet images are similar to generic images, but chain-loading is done via the
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module AllowedActions
|
2
|
+
extend ActiveSupport::Concern
|
3
|
+
|
4
|
+
def bootdisk_type_allowed?(action = params[:action])
|
5
|
+
return true if Setting::Bootdisk.allowed_types&.include?(action)
|
6
|
+
|
7
|
+
message = _('This type of bootdisk is not allowed. Please contact administrator.')
|
8
|
+
if api_request?
|
9
|
+
render_error :custom_error, status: :unprocessable_entity, locals: { message: message}
|
10
|
+
else
|
11
|
+
error(message)
|
12
|
+
redirect_back(fallback_location: '/')
|
13
|
+
end
|
14
|
+
false
|
15
|
+
end
|
16
|
+
end
|
@@ -7,11 +7,13 @@ module ForemanBootdisk
|
|
7
7
|
module V2
|
8
8
|
class DisksController < ::Api::V2::BaseController
|
9
9
|
include ::Api::Version2
|
10
|
+
include AllowedActions
|
10
11
|
|
11
12
|
resource_description do
|
12
13
|
api_base_url '/bootdisk/api'
|
13
14
|
end
|
14
15
|
|
16
|
+
before_action :bootdisk_type_allowed?, only: :generic
|
15
17
|
before_action :find_resource, only: :host
|
16
18
|
skip_after_action :log_response_body
|
17
19
|
|
@@ -21,9 +23,10 @@ module ForemanBootdisk
|
|
21
23
|
|
22
24
|
api :GET, '/generic', N_('Download generic image')
|
23
25
|
def generic
|
26
|
+
# EFI not supported for iPXE generic bootdisk
|
24
27
|
tmpl = ForemanBootdisk::Renderer.new.generic_template_render
|
25
28
|
ForemanBootdisk::ISOGenerator.generate(ipxe: tmpl) do |iso|
|
26
|
-
|
29
|
+
send_file(iso, filename: "bootdisk_#{URI.parse(Setting[:foreman_url]).host}.iso")
|
27
30
|
end
|
28
31
|
end
|
29
32
|
|
@@ -33,23 +36,22 @@ module ForemanBootdisk
|
|
33
36
|
def host
|
34
37
|
host = @disk
|
35
38
|
if params[:full]
|
39
|
+
return unless bootdisk_type_allowed?('full_host')
|
36
40
|
ForemanBootdisk::ISOGenerator.generate_full_host(host) do |iso|
|
37
|
-
|
41
|
+
send_file(iso, filename: "#{host.name}#{ForemanBootdisk::ISOGenerator.token_expiry(host)}.iso")
|
38
42
|
end
|
39
43
|
else
|
44
|
+
return unless bootdisk_type_allowed?
|
45
|
+
# EFI not supported for iPXE host bootdisk
|
40
46
|
tmpl = host.bootdisk_template_render
|
41
47
|
ForemanBootdisk::ISOGenerator.generate(ipxe: tmpl) do |iso|
|
42
|
-
|
48
|
+
send_file(iso, filename: "#{host.name}.iso")
|
43
49
|
end
|
44
50
|
end
|
45
51
|
end
|
46
52
|
|
47
53
|
private
|
48
54
|
|
49
|
-
def read_file(filename)
|
50
|
-
File.read(filename)
|
51
|
-
end
|
52
|
-
|
53
55
|
def resource_scope
|
54
56
|
Host::Managed.authorized('view_hosts')
|
55
57
|
end
|
@@ -7,11 +7,14 @@ module ForemanBootdisk
|
|
7
7
|
module V2
|
8
8
|
class SubnetDisksController < ::Api::V2::BaseController
|
9
9
|
include ::Api::Version2
|
10
|
+
include AllowedActions
|
10
11
|
|
11
12
|
resource_description do
|
12
13
|
api_base_url '/bootdisk/api'
|
13
14
|
end
|
14
15
|
|
16
|
+
rescue_from ActiveRecord::RecordNotFound, :with => :subnet_not_found
|
17
|
+
before_action :bootdisk_type_allowed?, only: :subnet
|
15
18
|
before_action :find_resource, only: :subnet
|
16
19
|
|
17
20
|
skip_after_action :log_response_body
|
@@ -25,10 +28,15 @@ module ForemanBootdisk
|
|
25
28
|
def subnet
|
26
29
|
subnet = @subnet_disk
|
27
30
|
subnet.tftp || raise(::Foreman::Exception.new(N_('TFTP feature not enabled for subnet %s'), subnet.name))
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
31
|
+
tmpl_bios = ForemanBootdisk::Renderer.new.generic_template_render(subnet)
|
32
|
+
tmpl_efi = nil
|
33
|
+
if subnet.httpboot
|
34
|
+
tmpl_efi = ForemanBootdisk::Renderer.new.generic_efi_template_render(subnet)
|
35
|
+
else
|
36
|
+
ForemanBootdisk.logger.warn('HTTPBOOT feature is not enabled for subnet %s, UEFI may not be available for bootdisk' % subnet.name)
|
37
|
+
end
|
38
|
+
ForemanBootdisk::ISOGenerator.generate(ipxe: tmpl_bios, grub: tmpl_efi) do |temp_iso_filename|
|
39
|
+
send_file(temp_iso_filename, filename: subnet.name)
|
32
40
|
end
|
33
41
|
end
|
34
42
|
|
@@ -37,6 +45,10 @@ module ForemanBootdisk
|
|
37
45
|
def resource_scope
|
38
46
|
Subnet.authorized('view_subnets')
|
39
47
|
end
|
48
|
+
|
49
|
+
def subnet_not_found
|
50
|
+
not_found ("Subnet not found by id '%s'") % params[:id]
|
51
|
+
end
|
40
52
|
end
|
41
53
|
end
|
42
54
|
end
|
@@ -4,6 +4,9 @@ require 'uri'
|
|
4
4
|
|
5
5
|
module ForemanBootdisk
|
6
6
|
class DisksController < ::ApplicationController
|
7
|
+
include AllowedActions
|
8
|
+
|
9
|
+
before_action :bootdisk_type_allowed?, except: :help
|
7
10
|
before_action :find_resource, only: %w[host full_host subnet]
|
8
11
|
|
9
12
|
# as this engine is isolated, we need to include url helpers from core explicitly
|
@@ -12,6 +15,7 @@ module ForemanBootdisk
|
|
12
15
|
|
13
16
|
def generic
|
14
17
|
begin
|
18
|
+
# EFI not supported for iPXE generic bootdisk
|
15
19
|
tmpl = ForemanBootdisk::Renderer.new.generic_template_render
|
16
20
|
rescue StandardError => e
|
17
21
|
error_rendering(e)
|
@@ -20,13 +24,14 @@ module ForemanBootdisk
|
|
20
24
|
end
|
21
25
|
|
22
26
|
ForemanBootdisk::ISOGenerator.generate(ipxe: tmpl) do |iso|
|
23
|
-
|
27
|
+
send_file(iso, filename: "bootdisk_#{URI.parse(Setting[:foreman_url]).host}.iso")
|
24
28
|
end
|
25
29
|
end
|
26
30
|
|
27
31
|
def host
|
28
32
|
host = @disk
|
29
33
|
begin
|
34
|
+
# EFI not supported for iPXE host bootdisk
|
30
35
|
tmpl = host.bootdisk_template_render
|
31
36
|
rescue StandardError => e
|
32
37
|
error_rendering(e)
|
@@ -35,14 +40,14 @@ module ForemanBootdisk
|
|
35
40
|
end
|
36
41
|
|
37
42
|
ForemanBootdisk::ISOGenerator.generate(ipxe: tmpl) do |iso|
|
38
|
-
|
43
|
+
send_file(iso, filename: "#{host.name}.iso")
|
39
44
|
end
|
40
45
|
end
|
41
46
|
|
42
47
|
def full_host
|
43
48
|
host = @disk
|
44
49
|
ForemanBootdisk::ISOGenerator.generate_full_host(host) do |iso|
|
45
|
-
|
50
|
+
send_file(iso, filename: "#{host.name}#{ForemanBootdisk::ISOGenerator.token_expiry(host)}.iso")
|
46
51
|
end
|
47
52
|
end
|
48
53
|
|
@@ -51,15 +56,18 @@ module ForemanBootdisk
|
|
51
56
|
begin
|
52
57
|
subnet = host.try(:subnet) || raise(::Foreman::Exception.new(N_('Subnet is not assigned to the host %s'), host.name))
|
53
58
|
subnet.tftp || raise(::Foreman::Exception.new(N_('TFTP feature not enabled for subnet %s'), subnet.name))
|
54
|
-
|
59
|
+
subnet.httpboot || ForemanBootdisk.logger.warn('HTTPBOOT feature is not enabled for subnet %s, UEFI may not be available for bootdisk' % subnet.name)
|
60
|
+
|
61
|
+
tmpl_bios = ForemanBootdisk::Renderer.new.generic_template_render(subnet)
|
62
|
+
tmpl_efi = ForemanBootdisk::Renderer.new.generic_efi_template_render(subnet)
|
55
63
|
rescue StandardError => e
|
56
64
|
error_rendering(e)
|
57
65
|
redirect_back(fallback_location: '/')
|
58
66
|
return
|
59
67
|
end
|
60
68
|
|
61
|
-
ForemanBootdisk::ISOGenerator.generate(ipxe:
|
62
|
-
|
69
|
+
ForemanBootdisk::ISOGenerator.generate(ipxe: tmpl_bios, grub: tmpl_efi) do |iso|
|
70
|
+
send_file(iso, filename: "bootdisk_subnet_#{subnet.name}.iso")
|
63
71
|
end
|
64
72
|
end
|
65
73
|
|
@@ -67,10 +75,6 @@ module ForemanBootdisk
|
|
67
75
|
|
68
76
|
private
|
69
77
|
|
70
|
-
def read_file(filename)
|
71
|
-
File.read(filename)
|
72
|
-
end
|
73
|
-
|
74
78
|
def resource_scope(_controller = controller_name)
|
75
79
|
Host::Managed.authorized(:view_hosts)
|
76
80
|
end
|
@@ -2,75 +2,40 @@
|
|
2
2
|
|
3
3
|
module ForemanBootdisk
|
4
4
|
module HostsHelperExt
|
5
|
-
def host_title_actions(
|
6
|
-
if
|
5
|
+
def host_title_actions(host)
|
6
|
+
if host.bootdisk_downloadable?
|
7
7
|
title_actions(
|
8
8
|
button_group(
|
9
9
|
select_action_button(
|
10
10
|
_('Boot disk'), { class: 'btn btn-group' },
|
11
|
-
|
12
|
-
_("Host '%s' image") % @host.name.split('.')[0],
|
13
|
-
{
|
14
|
-
controller: 'foreman_bootdisk/disks',
|
15
|
-
action: 'host',
|
16
|
-
id: @host
|
17
|
-
},
|
18
|
-
class: 'la'
|
19
|
-
),
|
20
|
-
display_bootdisk_link_if_authorized(
|
21
|
-
_("Full host '%s' image") % @host.name.split('.')[0],
|
22
|
-
{
|
23
|
-
controller: 'foreman_bootdisk/disks',
|
24
|
-
action: 'full_host',
|
25
|
-
id: @host
|
26
|
-
},
|
27
|
-
class: 'la'
|
28
|
-
),
|
29
|
-
content_tag(:li, '', class: 'divider'),
|
30
|
-
display_bootdisk_link_if_authorized(
|
31
|
-
_('Generic image'),
|
32
|
-
{
|
33
|
-
controller: 'foreman_bootdisk/disks',
|
34
|
-
action: 'generic'
|
35
|
-
},
|
36
|
-
class: 'la'
|
37
|
-
),
|
38
|
-
display_bootdisk_for_subnet,
|
39
|
-
content_tag(:li, '', class: 'divider'),
|
40
|
-
display_bootdisk_link_if_authorized(
|
41
|
-
_('Help'), {
|
42
|
-
controller: 'foreman_bootdisk/disks',
|
43
|
-
action: 'help'
|
44
|
-
},
|
45
|
-
class: 'la'
|
46
|
-
)
|
11
|
+
host_action_buttons(host)
|
47
12
|
)
|
48
13
|
)
|
49
14
|
)
|
50
15
|
else
|
51
|
-
bootdisk_button_disabled
|
16
|
+
bootdisk_button_disabled(host)
|
52
17
|
end
|
53
18
|
|
54
19
|
super
|
55
20
|
end
|
56
21
|
|
57
|
-
def bootdisk_button_disabled
|
22
|
+
def bootdisk_button_disabled(host)
|
58
23
|
title_actions(
|
59
24
|
button_group(
|
60
25
|
link_to(_('Boot disk'), '#', disabled: true, class: 'btn btn-default',
|
61
|
-
title: _('Boot disk download not available for %s architecture') %
|
26
|
+
title: _('Boot disk download not available for %s architecture') % host.architecture.name)
|
62
27
|
)
|
63
28
|
)
|
64
29
|
end
|
65
30
|
|
66
31
|
# need to wrap this one in a test for template proxy presence
|
67
|
-
def display_bootdisk_for_subnet
|
68
|
-
if (proxy =
|
32
|
+
def display_bootdisk_for_subnet(host)
|
33
|
+
if (proxy = host.try(:subnet).try(:tftp) || host.try(:subnet).try(:httpboot)) && proxy.has_feature?('Templates')
|
69
34
|
display_bootdisk_link_if_authorized(
|
70
|
-
_("Subnet '%s' generic image") %
|
35
|
+
_("Subnet '%s' generic image") % host.subnet.name, {
|
71
36
|
controller: 'foreman_bootdisk/disks',
|
72
37
|
action: 'subnet',
|
73
|
-
id:
|
38
|
+
id: host
|
74
39
|
},
|
75
40
|
class: 'la'
|
76
41
|
)
|
@@ -95,5 +60,66 @@ module ForemanBootdisk
|
|
95
60
|
def bootdisk_authorized_for(options)
|
96
61
|
User.current.allowed_to?(options)
|
97
62
|
end
|
63
|
+
|
64
|
+
def host_action_buttons(host)
|
65
|
+
actions = []
|
66
|
+
|
67
|
+
allowed_actions = Setting::Bootdisk.allowed_types
|
68
|
+
return '' unless allowed_actions
|
69
|
+
|
70
|
+
host_image_link = display_bootdisk_link_if_authorized(
|
71
|
+
_("Host '%s' image") % host.name.split('.')[0],
|
72
|
+
{
|
73
|
+
controller: 'foreman_bootdisk/disks',
|
74
|
+
action: 'host',
|
75
|
+
id: host
|
76
|
+
},
|
77
|
+
class: 'la'
|
78
|
+
)
|
79
|
+
|
80
|
+
full_host_image_link = display_bootdisk_link_if_authorized(
|
81
|
+
_("Full host '%s' image") % host.name.split('.')[0],
|
82
|
+
{
|
83
|
+
controller: 'foreman_bootdisk/disks',
|
84
|
+
action: 'full_host',
|
85
|
+
id: host
|
86
|
+
},
|
87
|
+
class: 'la'
|
88
|
+
)
|
89
|
+
|
90
|
+
generic_image_link = display_bootdisk_link_if_authorized(
|
91
|
+
_('Generic image'),
|
92
|
+
{
|
93
|
+
controller: 'foreman_bootdisk/disks',
|
94
|
+
action: 'generic'
|
95
|
+
},
|
96
|
+
class: 'la'
|
97
|
+
)
|
98
|
+
|
99
|
+
help_link = display_bootdisk_link_if_authorized(
|
100
|
+
_('Help'),
|
101
|
+
{
|
102
|
+
controller: 'foreman_bootdisk/disks',
|
103
|
+
action: 'help'
|
104
|
+
},
|
105
|
+
class: 'la'
|
106
|
+
)
|
107
|
+
|
108
|
+
divider = tag(:li, '', class: 'divider')
|
109
|
+
|
110
|
+
actions << host_image_link if allowed_actions.include?('host')
|
111
|
+
actions << full_host_image_link if allowed_actions.include?('full_host')
|
112
|
+
|
113
|
+
subnet_link = display_bootdisk_for_subnet(host)
|
114
|
+
actions << divider if allowed_actions.include?('generic') || (allowed_actions.include?('subnet') && subnet_link.present?)
|
115
|
+
|
116
|
+
actions << generic_image_link if allowed_actions.include?('generic')
|
117
|
+
actions << subnet_link if allowed_actions.include?('subnet')
|
118
|
+
|
119
|
+
actions << divider
|
120
|
+
actions << help_link
|
121
|
+
|
122
|
+
actions
|
123
|
+
end
|
98
124
|
end
|
99
125
|
end
|