foreman_bootdisk 13.0.0 → 16.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (77) hide show
  1. checksums.yaml +4 -4
  2. data/AUTHORS +29 -0
  3. data/CHANGES.md +4 -0
  4. data/README.md +19 -2
  5. data/app/controllers/foreman_bootdisk/api/v2/disks_controller.rb +11 -9
  6. data/app/controllers/foreman_bootdisk/api/v2/subnet_disks_controller.rb +37 -31
  7. data/app/controllers/foreman_bootdisk/disks_controller.rb +20 -19
  8. data/app/helpers/concerns/foreman_bootdisk/hosts_helper_ext.rb +86 -45
  9. data/app/lib/foreman_bootdisk/scope/bootdisk.rb +2 -0
  10. data/app/lib/foreman_bootdisk/scope/full_host_bootdisk.rb +15 -0
  11. data/app/models/concerns/foreman_bootdisk/compute_resources/vmware.rb +4 -2
  12. data/app/models/concerns/foreman_bootdisk/host_ext.rb +42 -30
  13. data/app/models/concerns/foreman_bootdisk/orchestration/compute.rb +14 -10
  14. data/app/models/setting/bootdisk.rb +21 -23
  15. data/app/services/foreman_bootdisk/iso_generator.rb +144 -104
  16. data/app/services/foreman_bootdisk/renderer.rb +17 -13
  17. data/app/views/foreman_bootdisk/generic_static_host.erb +34 -0
  18. data/app/views/foreman_bootdisk/host.erb +27 -11
  19. data/config/routes.rb +15 -13
  20. data/config/routes/mount_engine.rb +3 -1
  21. data/db/migrate/20130914211030_create_host_bootdisk_template.rb +4 -4
  22. data/db/migrate/20130915104500_edit_host_bootdisk_template_multinic.rb +4 -4
  23. data/db/migrate/20130915133321_create_kickstart_bootdisk_template.rb +4 -4
  24. data/db/migrate/20130915201457_create_generic_host_bootdisk_template.rb +4 -4
  25. data/db/migrate/20131021095100_edit_host_bootdisk_template_dns_secondary.rb +4 -4
  26. data/db/migrate/20140522185700_change_templatekind_to_bootdisk.rb +16 -14
  27. data/db/migrate/20171009225200_remove_duplicate_bootdisk_templates.rb +4 -2
  28. data/db/seeds.d/50-bootdisk_templates.rb +21 -36
  29. data/lib/foreman_bootdisk.rb +2 -0
  30. data/lib/foreman_bootdisk/engine.rb +26 -37
  31. data/lib/foreman_bootdisk/version.rb +3 -1
  32. data/lib/tasks/bootdisk.rake +34 -17
  33. data/locale/ca/LC_MESSAGES/foreman_bootdisk.mo +0 -0
  34. data/locale/ca/foreman_bootdisk.po +31 -15
  35. data/locale/de/LC_MESSAGES/foreman_bootdisk.mo +0 -0
  36. data/locale/de/foreman_bootdisk.po +39 -21
  37. data/locale/en/LC_MESSAGES/foreman_bootdisk.mo +0 -0
  38. data/locale/en/foreman_bootdisk.po +24 -9
  39. data/locale/en_GB/LC_MESSAGES/foreman_bootdisk.mo +0 -0
  40. data/locale/en_GB/foreman_bootdisk.po +30 -15
  41. data/locale/es/LC_MESSAGES/foreman_bootdisk.mo +0 -0
  42. data/locale/es/foreman_bootdisk.po +48 -33
  43. data/locale/foreman_bootdisk.pot +80 -52
  44. data/locale/fr/LC_MESSAGES/foreman_bootdisk.mo +0 -0
  45. data/locale/fr/foreman_bootdisk.po +30 -15
  46. data/locale/gemspec.rb +3 -1
  47. data/locale/it/LC_MESSAGES/foreman_bootdisk.mo +0 -0
  48. data/locale/it/foreman_bootdisk.po +28 -13
  49. data/locale/ja/LC_MESSAGES/foreman_bootdisk.mo +0 -0
  50. data/locale/ja/foreman_bootdisk.po +29 -14
  51. data/locale/ko/LC_MESSAGES/foreman_bootdisk.mo +0 -0
  52. data/locale/ko/foreman_bootdisk.po +28 -13
  53. data/locale/pt_BR/LC_MESSAGES/foreman_bootdisk.mo +0 -0
  54. data/locale/pt_BR/foreman_bootdisk.po +42 -26
  55. data/locale/ru/LC_MESSAGES/foreman_bootdisk.mo +0 -0
  56. data/locale/ru/foreman_bootdisk.po +28 -13
  57. data/locale/sv_SE/LC_MESSAGES/foreman_bootdisk.mo +0 -0
  58. data/locale/sv_SE/foreman_bootdisk.po +26 -11
  59. data/locale/zh_CN/LC_MESSAGES/foreman_bootdisk.mo +0 -0
  60. data/locale/zh_CN/foreman_bootdisk.po +46 -31
  61. data/locale/zh_TW/LC_MESSAGES/foreman_bootdisk.mo +0 -0
  62. data/locale/zh_TW/foreman_bootdisk.po +28 -13
  63. data/release-gem +84 -0
  64. data/test/functional/foreman_bootdisk/api/v2/disks_controller_test.rb +35 -33
  65. data/test/functional/foreman_bootdisk/api/v2/subnet_disks_controller_test.rb +9 -7
  66. data/test/functional/foreman_bootdisk/disks_controller_test.rb +27 -25
  67. data/test/models/host/managed_test.rb +17 -13
  68. data/test/test_plugin_helper.rb +11 -7
  69. data/test/unit/access_permissions_test.rb +2 -0
  70. data/test/unit/concerns/compute_resources/vmware_test.rb +67 -63
  71. data/test/unit/concerns/host_test.rb +64 -53
  72. data/test/unit/concerns/orchestration/compute_test.rb +41 -39
  73. data/test/unit/foreman_bootdisk/renderer_test.rb +3 -1
  74. data/test/unit/foreman_bootdisk/scope/bootdisk_test.rb +3 -1
  75. data/test/unit/foreman_bootdisk/scope/full_host_bootdisk_test.rb +30 -0
  76. data/test/unit/iso_generator_test.rb +67 -40
  77. metadata +65 -5
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d43b8549de63eaac53bdccedfed1db1c8c96f9481ee411724686686476e01767
4
- data.tar.gz: 30d918f87198e96711e2d75506127bb7ded00cafef415e5eaa176c24810f1a94
3
+ metadata.gz: 6f4504c1358b4e4a789bf50d8eeac0e61b5097039694039e77151e47980b2f14
4
+ data.tar.gz: e46dffaf3739195d4f5988458e2eaa6b38d3eac66ede08c77c07034f8a77d40a
5
5
  SHA512:
6
- metadata.gz: c8d73855b7dbf1f7ed717883a56813917d1fba38ca226cf77fa0c73005b38e44220563bd411c112c636182ba328d52ef336b912c80c7c356f29a4d8bb29687ab
7
- data.tar.gz: 832d7248d4bc1364f17507dad46325cd929e719790d3ebe08529459a21762d557987d908c5fca82d632bd8e522df3f4a1ba34b49a24faff60a0f5ebc0c6b5251
6
+ metadata.gz: '09868d38c5adb714d029fe6ffc554bf3469204343d14d77f789b5c2bbb8badc1bdc760be477ffa69fb1cf3850a6854ae257165e2baba2a7d28373d58b4b9a5b5'
7
+ data.tar.gz: 4d25edcd1342b1b619d7001a7a4b82f282da9aaed4561e4b8deb85ddccad3df09100ff038f8782a45f4f04b75a8a8403554b3378a6344ea5424047d80d3efec5
data/AUTHORS ADDED
@@ -0,0 +1,29 @@
1
+ Adam Ruzicka
2
+ Bryan Kearney
3
+ crito
4
+ Damon Maria
5
+ Dominic Cleal
6
+ Greg Sutcliffe
7
+ Ido Kanner
8
+ Jon Fautley
9
+ Justin Sherrill
10
+ Leos Stejskal
11
+ Lukas Zapletal
12
+ Lukáš Zapletal
13
+ Marek Hulan
14
+ Marek Hulán
15
+ Martin Bačovský
16
+ Michael Hofer
17
+ Michael Moll
18
+ Ohad Levy
19
+ Ondrej Prazak
20
+ Ondřej Ezr
21
+ Ondřej Pražák
22
+ Robert Antoni Buj Gelonch
23
+ Rohan21Lobo
24
+ Ronald van Zantvoort
25
+ Sam Kottler
26
+ Sean O'Keeffe
27
+ Stephen Benjamin
28
+ Swapnil Abnave
29
+ Timo Goebel
data/CHANGES.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Changelog
2
2
 
3
+ ## v14.0.0
4
+ * use new medium provider framework
5
+ * droped some unused code
6
+
3
7
  ## v13.0.0
4
8
  * static credentials failover
5
9
  * Rails 5.2 support
data/README.md CHANGED
@@ -47,8 +47,9 @@ gPXE images are unsupported due to lack of initrd support.
47
47
  | >= 1.15 | ~> 10.0 |
48
48
  | >= 1.17 | ~> 11.0 |
49
49
  | >= 1.18 | ~> 12.0 |
50
- | >= 1.19 | ~> 12.0 |
51
- | >= 1.20 | ~> 13.0 |
50
+ | >= 1.19 | ~> 13.0 |
51
+ | >= 1.20 | ~> 14.0 |
52
+ | >= 1.21 | ~> 15.0 |
52
53
 
53
54
  # Usage
54
55
 
@@ -235,6 +236,22 @@ To generate from the command line on the Foreman server:
235
236
  Set `OUTPUT=/path` to change the output destination path (directory or file).
236
237
  It must be writable by the 'foreman' user.
237
238
 
239
+ ### Generic static image
240
+
241
+ This is generic image type which asks for network credentials instead of doing
242
+ DHCP request. Tokens must be turned off in order to find the host by MAC
243
+ address. To do that, set Token duration to 0 in Administer - Settings.
244
+
245
+ - Network interface name
246
+ - IP Address
247
+ - Netmask
248
+ - Gateway
249
+ - DNS
250
+
251
+ To use generic static host image, set "Generic image template" to "Bootdisk
252
+ iPXE - host template" in Administer - Settings - Boot disk. Only one template
253
+ can be used at one time across all hosts.
254
+
238
255
  ### Subnet images
239
256
 
240
257
  Subnet images are similar to generic images, but chain-loading is done via the
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'uri'
2
4
 
3
5
  module ForemanBootdisk
@@ -7,10 +9,10 @@ module ForemanBootdisk
7
9
  include ::Api::Version2
8
10
 
9
11
  resource_description do
10
- api_base_url "/bootdisk/api"
12
+ api_base_url '/bootdisk/api'
11
13
  end
12
14
 
13
- before_action :find_resource, :only => :host
15
+ before_action :find_resource, only: :host
14
16
  skip_after_action :log_response_body
15
17
 
16
18
  # no-op, but required for apipie documentation
@@ -20,24 +22,24 @@ module ForemanBootdisk
20
22
  api :GET, '/generic', N_('Download generic image')
21
23
  def generic
22
24
  tmpl = ForemanBootdisk::Renderer.new.generic_template_render
23
- ForemanBootdisk::ISOGenerator.generate(:ipxe => tmpl) do |iso|
24
- send_data read_file(iso), :filename => "bootdisk_#{URI.parse(Setting[:foreman_url]).host}.iso"
25
+ ForemanBootdisk::ISOGenerator.generate(ipxe: tmpl) do |iso|
26
+ send_data read_file(iso), filename: "bootdisk_#{URI.parse(Setting[:foreman_url]).host}.iso"
25
27
  end
26
28
  end
27
29
 
28
30
  api :GET, '/hosts/:host_id', N_('Download host image')
29
- param :full, :bool, :required => false, :desc => N_('True for full, false for basic reusable image')
30
- param :host_id, :identifier_dottable, :required => true
31
+ param :full, :bool, required: false, desc: N_('True for full, false for basic reusable image')
32
+ param :host_id, :identifier_dottable, required: true
31
33
  def host
32
34
  host = @disk
33
35
  if params[:full]
34
36
  ForemanBootdisk::ISOGenerator.generate_full_host(host) do |iso|
35
- send_data read_file(iso), :filename => "#{host.name}#{ForemanBootdisk::ISOGenerator.token_expiry(host)}.iso"
37
+ send_data read_file(iso), filename: "#{host.name}#{ForemanBootdisk::ISOGenerator.token_expiry(host)}.iso"
36
38
  end
37
39
  else
38
40
  tmpl = host.bootdisk_template_render
39
- ForemanBootdisk::ISOGenerator.generate(:ipxe => tmpl) do |iso|
40
- send_data read_file(iso), :filename => "#{host.name}.iso"
41
+ ForemanBootdisk::ISOGenerator.generate(ipxe: tmpl) do |iso|
42
+ send_data read_file(iso), filename: "#{host.name}.iso"
41
43
  end
42
44
  end
43
45
  end
@@ -1,37 +1,43 @@
1
- require 'uri'
2
-
3
- module ForemanBootdisk::Api::V2
4
- class SubnetDisksController < ::Api::V2::BaseController
5
- include ::Api::Version2
6
-
7
- resource_description do
8
- api_base_url "/bootdisk/api"
9
- end
10
-
11
- before_action :find_resource, :only => :subnet
1
+ # frozen_string_literal: true
12
2
 
13
- skip_after_action :log_response_body
14
-
15
- # no-op, but required for apipie documentation
16
- api :GET, '', N_('Subnet boot disks')
17
- def index; end
3
+ require 'uri'
18
4
 
19
- api :GET, '/subnets/:subnet_id', N_('Download subnet generic image')
20
- param :subnet_id, :identifier_dottable, :required => true
21
- def subnet
22
- subnet = @subnet_disk
23
- subnet.tftp || raise(::Foreman::Exception.new(N_("TFTP feature not enabled for subnet %s"), subnet.name))
24
- tmpl = ForemanBootdisk::Renderer.new.generic_template_render(subnet)
25
- ForemanBootdisk::ISOGenerator.generate(:ipxe => tmpl) do |iso|
26
- name=subnet.name
27
- send_data File.read(iso), :filename => "bootdisk_subnet_#{name}.iso"
5
+ module ForemanBootdisk
6
+ module Api
7
+ module V2
8
+ class SubnetDisksController < ::Api::V2::BaseController
9
+ include ::Api::Version2
10
+
11
+ resource_description do
12
+ api_base_url '/bootdisk/api'
13
+ end
14
+
15
+ before_action :find_resource, only: :subnet
16
+
17
+ skip_after_action :log_response_body
18
+
19
+ # no-op, but required for apipie documentation
20
+ api :GET, '', N_('Subnet boot disks')
21
+ def index; end
22
+
23
+ api :GET, '/subnets/:subnet_id', N_('Download subnet generic image')
24
+ param :subnet_id, :identifier_dottable, required: true
25
+ def subnet
26
+ subnet = @subnet_disk
27
+ subnet.tftp || raise(::Foreman::Exception.new(N_('TFTP feature not enabled for subnet %s'), subnet.name))
28
+ tmpl = ForemanBootdisk::Renderer.new.generic_template_render(subnet)
29
+ ForemanBootdisk::ISOGenerator.generate(ipxe: tmpl) do |iso|
30
+ name = subnet.name
31
+ send_data File.read(iso), filename: "bootdisk_subnet_#{name}.iso"
32
+ end
33
+ end
34
+
35
+ private
36
+
37
+ def resource_scope
38
+ Subnet.authorized('view_subnets')
39
+ end
28
40
  end
29
41
  end
30
-
31
- private
32
-
33
- def resource_scope
34
- Subnet.authorized('view_subnets')
35
- end
36
42
  end
37
43
  end
@@ -1,8 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'uri'
2
4
 
3
5
  module ForemanBootdisk
4
6
  class DisksController < ::ApplicationController
5
- before_action :find_resource, :only => %w[host full_host subnet]
7
+ before_action :find_resource, only: %w[host full_host subnet]
6
8
 
7
9
  # as this engine is isolated, we need to include url helpers from core explicitly
8
10
  # to render help page layout
@@ -11,14 +13,14 @@ module ForemanBootdisk
11
13
  def generic
12
14
  begin
13
15
  tmpl = ForemanBootdisk::Renderer.new.generic_template_render
14
- rescue => e
16
+ rescue StandardError => e
15
17
  error_rendering(e)
16
18
  redirect_back(fallback_location: '/')
17
19
  return
18
20
  end
19
21
 
20
- ForemanBootdisk::ISOGenerator.generate(:ipxe => tmpl) do |iso|
21
- send_data read_file(iso), :filename => "bootdisk_#{URI.parse(Setting[:foreman_url]).host}.iso"
22
+ ForemanBootdisk::ISOGenerator.generate(ipxe: tmpl) do |iso|
23
+ send_data read_file(iso), filename: "bootdisk_#{URI.parse(Setting[:foreman_url]).host}.iso"
22
24
  end
23
25
  end
24
26
 
@@ -26,43 +28,42 @@ module ForemanBootdisk
26
28
  host = @disk
27
29
  begin
28
30
  tmpl = host.bootdisk_template_render
29
- rescue => e
31
+ rescue StandardError => e
30
32
  error_rendering(e)
31
33
  redirect_back(fallback_location: '/')
32
34
  return
33
35
  end
34
36
 
35
- ForemanBootdisk::ISOGenerator.generate(:ipxe => tmpl) do |iso|
36
- send_data read_file(iso), :filename => "#{host.name}.iso"
37
+ ForemanBootdisk::ISOGenerator.generate(ipxe: tmpl) do |iso|
38
+ send_data read_file(iso), filename: "#{host.name}.iso"
37
39
  end
38
40
  end
39
41
 
40
42
  def full_host
41
43
  host = @disk
42
44
  ForemanBootdisk::ISOGenerator.generate_full_host(host) do |iso|
43
- send_data read_file(iso), :filename => "#{host.name}#{ForemanBootdisk::ISOGenerator.token_expiry(host)}.iso"
45
+ send_data read_file(iso), filename: "#{host.name}#{ForemanBootdisk::ISOGenerator.token_expiry(host)}.iso"
44
46
  end
45
47
  end
46
48
 
47
49
  def subnet
48
50
  host = @disk
49
51
  begin
50
- subnet = host.try(:subnet) || raise(::Foreman::Exception.new(N_("Subnet is not assigned to the host %s"), host.name))
51
- subnet.tftp || raise(::Foreman::Exception.new(N_("TFTP feature not enabled for subnet %s"), subnet.name))
52
+ subnet = host.try(:subnet) || raise(::Foreman::Exception.new(N_('Subnet is not assigned to the host %s'), host.name))
53
+ subnet.tftp || raise(::Foreman::Exception.new(N_('TFTP feature not enabled for subnet %s'), subnet.name))
52
54
  tmpl = ForemanBootdisk::Renderer.new.generic_template_render(subnet)
53
- rescue => e
55
+ rescue StandardError => e
54
56
  error_rendering(e)
55
57
  redirect_back(fallback_location: '/')
56
58
  return
57
59
  end
58
60
 
59
- ForemanBootdisk::ISOGenerator.generate(:ipxe => tmpl) do |iso|
60
- send_data read_file(iso), :filename => "bootdisk_subnet_#{subnet.name}.iso"
61
+ ForemanBootdisk::ISOGenerator.generate(ipxe: tmpl) do |iso|
62
+ send_data read_file(iso), filename: "bootdisk_subnet_#{subnet.name}.iso"
61
63
  end
62
64
  end
63
65
 
64
- def help
65
- end
66
+ def help; end
66
67
 
67
68
  private
68
69
 
@@ -70,14 +71,14 @@ module ForemanBootdisk
70
71
  File.read(filename)
71
72
  end
72
73
 
73
- def resource_scope(controller = controller_name)
74
+ def resource_scope(_controller = controller_name)
74
75
  Host::Managed.authorized(:view_hosts)
75
76
  end
76
77
 
77
- def error_rendering(e)
78
+ def error_rendering(exception)
78
79
  msg = _('Failed to render boot disk template')
79
- error("#{msg}: #{e.message}")
80
- ::Foreman::Logging.exception(msg, e)
80
+ error("#{msg}: #{exception.message}")
81
+ ::Foreman::Logging.exception(msg, exception)
81
82
  end
82
83
  end
83
84
  end
@@ -1,58 +1,99 @@
1
- module ForemanBootdisk::HostsHelperExt
2
- def host_title_actions(*args)
3
- if @host.bootdisk_downloadable?
4
- title_actions(
5
- button_group(
6
- select_action_button(_('Boot disk'), {:class => 'btn btn-group'},
7
- display_bootdisk_link_if_authorized(_("Host '%s' image") % @host.name.split('.')[0], {:controller => 'foreman_bootdisk/disks', :action => 'host', :id => @host}, :class=>'la'),
8
- display_bootdisk_link_if_authorized(_("Full host '%s' image") % @host.name.split('.')[0], {:controller => 'foreman_bootdisk/disks', :action => 'full_host', :id => @host}, :class=>'la'),
9
- content_tag(:li, "", :class => "divider"),
10
- display_bootdisk_link_if_authorized(_("Generic image"), {:controller => 'foreman_bootdisk/disks', :action => 'generic'}, :class=>'la'),
11
- display_bootdisk_for_subnet,
12
- content_tag(:li, "", :class => "divider"),
13
- display_bootdisk_link_if_authorized(_("Help"), {:controller => 'foreman_bootdisk/disks', :action => 'help'}, :class=>'la')
1
+ # frozen_string_literal: true
2
+
3
+ module ForemanBootdisk
4
+ module HostsHelperExt
5
+ def host_title_actions(host)
6
+ if host.bootdisk_downloadable?
7
+ title_actions(
8
+ button_group(
9
+ select_action_button(
10
+ _('Boot disk'), { class: 'btn btn-group' },
11
+ display_bootdisk_link_if_authorized(
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(host),
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
+ )
47
+ )
14
48
  )
15
49
  )
16
- )
17
- else
18
- bootdisk_button_disabled
19
- end
50
+ else
51
+ bootdisk_button_disabled(host)
52
+ end
20
53
 
21
- super
22
- end
54
+ super
55
+ end
23
56
 
24
- def bootdisk_button_disabled
25
- title_actions(
26
- button_group(
27
- link_to(_("Boot disk"), '#', :disabled => true, :class => 'btn btn-default',
28
- :title => _("Boot disk download not available for %s architecture") % @host.architecture.name)
57
+ def bootdisk_button_disabled(host)
58
+ title_actions(
59
+ button_group(
60
+ link_to(_('Boot disk'), '#', disabled: true, class: 'btn btn-default',
61
+ title: _('Boot disk download not available for %s architecture') % host.architecture.name)
62
+ )
29
63
  )
30
- )
31
- end
64
+ end
32
65
 
33
- # need to wrap this one in a test for template proxy presence
34
- def display_bootdisk_for_subnet
35
- if (proxy = @host.try(:subnet).try(:tftp)) && proxy.has_feature?('Templates')
36
- display_bootdisk_link_if_authorized(_("Subnet '%s' generic image") % @host.subnet.name, {:controller => 'foreman_bootdisk/disks', :action => 'subnet', :id => @host}, :class=>'la')
37
- else
38
- ""
66
+ # need to wrap this one in a test for template proxy presence
67
+ def display_bootdisk_for_subnet(host)
68
+ if (proxy = host.try(:subnet).try(:tftp)) && proxy.has_feature?('Templates')
69
+ display_bootdisk_link_if_authorized(
70
+ _("Subnet '%s' generic image") % host.subnet.name, {
71
+ controller: 'foreman_bootdisk/disks',
72
+ action: 'subnet',
73
+ id: host
74
+ },
75
+ class: 'la'
76
+ )
77
+ else
78
+ ''
79
+ end
39
80
  end
40
- end
41
81
 
42
- # Core Foreman helpers can't look up a URL against a mounted engine
43
- def display_bootdisk_link_if_authorized(name, options = {}, html_options = {})
44
- if bootdisk_authorized_for(options)
45
- link_to(name, bootdisk_url(options), html_options)
46
- else
47
- ""
82
+ # Core Foreman helpers can't look up a URL against a mounted engine
83
+ def display_bootdisk_link_if_authorized(name, options = {}, html_options = {})
84
+ if bootdisk_authorized_for(options)
85
+ link_to(name, bootdisk_url(options), html_options)
86
+ else
87
+ ''
88
+ end
48
89
  end
49
- end
50
90
 
51
- def bootdisk_url(options)
52
- ForemanBootdisk::Engine.routes.url_for(options.merge(:only_path => true, :script_name => foreman_bootdisk_path))
53
- end
91
+ def bootdisk_url(options)
92
+ ForemanBootdisk::Engine.routes.url_for(options.merge(only_path: true, script_name: foreman_bootdisk_path))
93
+ end
54
94
 
55
- def bootdisk_authorized_for(options)
56
- User.current.allowed_to?(options)
95
+ def bootdisk_authorized_for(options)
96
+ User.current.allowed_to?(options)
97
+ end
57
98
  end
58
99
  end