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.
- checksums.yaml +4 -4
- data/AUTHORS +29 -0
- data/CHANGES.md +4 -0
- data/README.md +19 -2
- data/app/controllers/foreman_bootdisk/api/v2/disks_controller.rb +11 -9
- data/app/controllers/foreman_bootdisk/api/v2/subnet_disks_controller.rb +37 -31
- data/app/controllers/foreman_bootdisk/disks_controller.rb +20 -19
- data/app/helpers/concerns/foreman_bootdisk/hosts_helper_ext.rb +86 -45
- data/app/lib/foreman_bootdisk/scope/bootdisk.rb +2 -0
- data/app/lib/foreman_bootdisk/scope/full_host_bootdisk.rb +15 -0
- data/app/models/concerns/foreman_bootdisk/compute_resources/vmware.rb +4 -2
- data/app/models/concerns/foreman_bootdisk/host_ext.rb +42 -30
- data/app/models/concerns/foreman_bootdisk/orchestration/compute.rb +14 -10
- data/app/models/setting/bootdisk.rb +21 -23
- data/app/services/foreman_bootdisk/iso_generator.rb +144 -104
- data/app/services/foreman_bootdisk/renderer.rb +17 -13
- data/app/views/foreman_bootdisk/generic_static_host.erb +34 -0
- data/app/views/foreman_bootdisk/host.erb +27 -11
- data/config/routes.rb +15 -13
- data/config/routes/mount_engine.rb +3 -1
- data/db/migrate/20130914211030_create_host_bootdisk_template.rb +4 -4
- data/db/migrate/20130915104500_edit_host_bootdisk_template_multinic.rb +4 -4
- data/db/migrate/20130915133321_create_kickstart_bootdisk_template.rb +4 -4
- data/db/migrate/20130915201457_create_generic_host_bootdisk_template.rb +4 -4
- data/db/migrate/20131021095100_edit_host_bootdisk_template_dns_secondary.rb +4 -4
- data/db/migrate/20140522185700_change_templatekind_to_bootdisk.rb +16 -14
- data/db/migrate/20171009225200_remove_duplicate_bootdisk_templates.rb +4 -2
- data/db/seeds.d/50-bootdisk_templates.rb +21 -36
- data/lib/foreman_bootdisk.rb +2 -0
- data/lib/foreman_bootdisk/engine.rb +26 -37
- data/lib/foreman_bootdisk/version.rb +3 -1
- data/lib/tasks/bootdisk.rake +34 -17
- data/locale/ca/LC_MESSAGES/foreman_bootdisk.mo +0 -0
- data/locale/ca/foreman_bootdisk.po +31 -15
- data/locale/de/LC_MESSAGES/foreman_bootdisk.mo +0 -0
- data/locale/de/foreman_bootdisk.po +39 -21
- data/locale/en/LC_MESSAGES/foreman_bootdisk.mo +0 -0
- data/locale/en/foreman_bootdisk.po +24 -9
- data/locale/en_GB/LC_MESSAGES/foreman_bootdisk.mo +0 -0
- data/locale/en_GB/foreman_bootdisk.po +30 -15
- data/locale/es/LC_MESSAGES/foreman_bootdisk.mo +0 -0
- data/locale/es/foreman_bootdisk.po +48 -33
- data/locale/foreman_bootdisk.pot +80 -52
- data/locale/fr/LC_MESSAGES/foreman_bootdisk.mo +0 -0
- data/locale/fr/foreman_bootdisk.po +30 -15
- data/locale/gemspec.rb +3 -1
- data/locale/it/LC_MESSAGES/foreman_bootdisk.mo +0 -0
- data/locale/it/foreman_bootdisk.po +28 -13
- data/locale/ja/LC_MESSAGES/foreman_bootdisk.mo +0 -0
- data/locale/ja/foreman_bootdisk.po +29 -14
- data/locale/ko/LC_MESSAGES/foreman_bootdisk.mo +0 -0
- data/locale/ko/foreman_bootdisk.po +28 -13
- data/locale/pt_BR/LC_MESSAGES/foreman_bootdisk.mo +0 -0
- data/locale/pt_BR/foreman_bootdisk.po +42 -26
- data/locale/ru/LC_MESSAGES/foreman_bootdisk.mo +0 -0
- data/locale/ru/foreman_bootdisk.po +28 -13
- data/locale/sv_SE/LC_MESSAGES/foreman_bootdisk.mo +0 -0
- data/locale/sv_SE/foreman_bootdisk.po +26 -11
- data/locale/zh_CN/LC_MESSAGES/foreman_bootdisk.mo +0 -0
- data/locale/zh_CN/foreman_bootdisk.po +46 -31
- data/locale/zh_TW/LC_MESSAGES/foreman_bootdisk.mo +0 -0
- data/locale/zh_TW/foreman_bootdisk.po +28 -13
- data/release-gem +84 -0
- data/test/functional/foreman_bootdisk/api/v2/disks_controller_test.rb +35 -33
- data/test/functional/foreman_bootdisk/api/v2/subnet_disks_controller_test.rb +9 -7
- data/test/functional/foreman_bootdisk/disks_controller_test.rb +27 -25
- data/test/models/host/managed_test.rb +17 -13
- data/test/test_plugin_helper.rb +11 -7
- data/test/unit/access_permissions_test.rb +2 -0
- data/test/unit/concerns/compute_resources/vmware_test.rb +67 -63
- data/test/unit/concerns/host_test.rb +64 -53
- data/test/unit/concerns/orchestration/compute_test.rb +41 -39
- data/test/unit/foreman_bootdisk/renderer_test.rb +3 -1
- data/test/unit/foreman_bootdisk/scope/bootdisk_test.rb +3 -1
- data/test/unit/foreman_bootdisk/scope/full_host_bootdisk_test.rb +30 -0
- data/test/unit/iso_generator_test.rb +67 -40
- metadata +65 -5
@@ -1,30 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'uri'
|
2
4
|
|
3
5
|
module ForemanBootdisk
|
4
6
|
class Renderer
|
5
7
|
def generic_template_render(subnet = nil)
|
6
|
-
if subnet.present?
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
8
|
+
host = if subnet.present?
|
9
|
+
# rendering a subnet-level bootdisk requires tricking the renderer into thinking it has a
|
10
|
+
# valid host, without a token, but with a tftp proxy
|
11
|
+
Struct.new(:token, :provision_interface, :content_source).new(
|
12
|
+
nil,
|
13
|
+
Struct.new(:subnet).new(subnet),
|
14
|
+
nil
|
15
|
+
)
|
16
|
+
else
|
17
|
+
Struct.new(:token, :subnet, :content_source).new(nil, nil, nil)
|
18
|
+
end
|
16
19
|
|
17
20
|
render_template(template: generic_host_template, host: host)
|
18
21
|
end
|
19
22
|
|
20
|
-
def render_template(template
|
23
|
+
def render_template(template:, host:, scope_class: renderer_scope)
|
21
24
|
source = Foreman::Renderer.get_source(
|
22
25
|
template: template,
|
23
26
|
host: host
|
24
27
|
)
|
25
28
|
scope = Foreman::Renderer.get_scope(
|
26
29
|
host: host,
|
27
|
-
klass:
|
30
|
+
klass: scope_class
|
28
31
|
)
|
29
32
|
Foreman::Renderer.render(source, scope)
|
30
33
|
end
|
@@ -36,8 +39,9 @@ module ForemanBootdisk
|
|
36
39
|
end
|
37
40
|
|
38
41
|
def generic_host_template
|
39
|
-
template = ProvisioningTemplate.unscoped.
|
42
|
+
template = ProvisioningTemplate.unscoped.find_by(name: Setting[:bootdisk_generic_host_template])
|
40
43
|
raise ::Foreman::Exception.new(N_('Unable to find template specified by %s setting'), 'bootdisk_generic_host_template') unless template
|
44
|
+
|
41
45
|
template
|
42
46
|
end
|
43
47
|
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
#!ipxe
|
2
|
+
#
|
3
|
+
# Generic host template with interactive static IP configuration. Tokens
|
4
|
+
# must be disabled in order to access templates via MAC addresses.
|
5
|
+
#
|
6
|
+
|
7
|
+
<% (0..32).each do |i| -%>
|
8
|
+
:net<%= i %>
|
9
|
+
isset ${net<%= i -%>/mac} || goto configure
|
10
|
+
echo Found ${net<%= i -%>/mac} as net<%= i -%> on a ${net<%= i -%>/chip}
|
11
|
+
goto net<%= i+1 %>
|
12
|
+
<% end -%>
|
13
|
+
|
14
|
+
:configure
|
15
|
+
echo -n Interface (e.g. net0): && read interface
|
16
|
+
iseq ${interface} n && goto reboot ||
|
17
|
+
iseq ${interface} N && goto reboot ||
|
18
|
+
|
19
|
+
ifopen ${interface}
|
20
|
+
echo Please enter IPv4 details for ${interface}
|
21
|
+
echo
|
22
|
+
|
23
|
+
echo -n IP address: && read ${interface}/ip
|
24
|
+
echo -n Subnet mask: && read ${interface}/netmask
|
25
|
+
echo -n Default gateway: && read ${interface}/gateway
|
26
|
+
echo -n DNS server: && read dns
|
27
|
+
|
28
|
+
chain <%= bootdisk_chain_url %>${${interface}/mac} || goto reboot
|
29
|
+
exit 0
|
30
|
+
|
31
|
+
:reboot
|
32
|
+
echo Unable to continue, rebooting...
|
33
|
+
sleep 30
|
34
|
+
exit 1
|
@@ -7,9 +7,23 @@
|
|
7
7
|
<%
|
8
8
|
interface = @host.provision_interface
|
9
9
|
bootdisk_raise(N_('Host has no provisioning interface defined')) unless interface
|
10
|
-
bootdisk_raise(N_('Host has no
|
11
|
-
bootdisk_raise(N_('Host has no subnet defined')) unless interface.subnet
|
10
|
+
bootdisk_raise(N_('Host has no IPv4 or IPv6 address defined')) unless interface.ip.present? || interface.ip6.present?
|
11
|
+
bootdisk_raise(N_('Host has no subnet defined')) unless interface.subnet || interface.subnet6
|
12
12
|
bootdisk_raise(N_('Host has no domain defined')) unless interface.domain
|
13
|
+
if interface.ip.present? && interface.subnet
|
14
|
+
ip = interface.ip
|
15
|
+
subnet = interface.subnet
|
16
|
+
elsif interface.ip6.present? && interface.subnet6
|
17
|
+
ip = interface.ip6
|
18
|
+
subnet = interface.subnet6
|
19
|
+
bootdisk_raise(N_('Host bootdisk does not work with static IPv6'))
|
20
|
+
else
|
21
|
+
bootdisk_raise(N_('Both IP and Subnet must be set'))
|
22
|
+
end
|
23
|
+
|
24
|
+
mask = subnet.mask
|
25
|
+
gw = subnet.gateway
|
26
|
+
dns = subnet.dns_servers.first
|
13
27
|
%>
|
14
28
|
|
15
29
|
echo Foreman Bootdisk: Host image (<%= @host.name %>)
|
@@ -25,20 +39,22 @@ goto loop_success
|
|
25
39
|
<% end -%>
|
26
40
|
|
27
41
|
:loop_success
|
28
|
-
echo Configuring net${idx} for static IP address <%=
|
42
|
+
echo Configuring net${idx} for static IP address <%= ip %>
|
29
43
|
ifopen net${idx}
|
30
|
-
|
31
|
-
set netX/
|
32
|
-
|
33
|
-
|
44
|
+
# netX = last opened NIC
|
45
|
+
set netX/ip <%= ip %>
|
46
|
+
set netX/netmask <%= mask %>
|
47
|
+
<% if gw.present? %>
|
48
|
+
set netX/gateway <%= gw %>
|
34
49
|
<% end %>
|
35
50
|
ifstat net${idx}
|
36
51
|
route
|
37
52
|
|
38
|
-
|
39
|
-
#
|
40
|
-
|
41
|
-
|
53
|
+
# Note: When multiple DNS servers are specified, only the first
|
54
|
+
# server will be used. See: http://ipxe.org/cfg/dns
|
55
|
+
<% if dns.present? -%>
|
56
|
+
echo Using DNS <%= dns %>
|
57
|
+
set dns <%= dns %>
|
42
58
|
set domain <%= interface.domain.to_s %>
|
43
59
|
<% end %>
|
44
60
|
|
data/config/routes.rb
CHANGED
@@ -1,20 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
ForemanBootdisk::Engine.routes.draw do
|
2
|
-
resources :disks, :
|
3
|
-
get 'generic', :
|
4
|
-
get 'help', :
|
5
|
-
constraints(:
|
6
|
-
get 'hosts/:id', :
|
7
|
-
get 'full_hosts/:id', :
|
8
|
-
get 'subnet/:id', :
|
4
|
+
resources :disks, only: [] do
|
5
|
+
get 'generic', on: :collection
|
6
|
+
get 'help', on: :collection
|
7
|
+
constraints(id: %r{[^/]+}) do
|
8
|
+
get 'hosts/:id', on: :collection, to: 'disks#host'
|
9
|
+
get 'full_hosts/:id', on: :collection, to: 'disks#full_host'
|
10
|
+
get 'subnet/:id', on: :collection, to: 'disks#subnet'
|
9
11
|
end
|
10
12
|
end
|
11
13
|
|
12
|
-
namespace :api, :
|
13
|
-
scope
|
14
|
-
get 'generic', :
|
15
|
-
constraints(:
|
16
|
-
get 'hosts/:id', :
|
17
|
-
get 'subnets/:id', :
|
14
|
+
namespace :api, defaults: { format: 'json' } do
|
15
|
+
scope '(:apiv)', module: :v2, defaults: { apiv: 'v2' }, apiv: /v1|v2/, constraints: ApiConstraints.new(version: 2, default: true) do
|
16
|
+
get 'generic', to: 'disks#generic'
|
17
|
+
constraints(id: %r{[^/]+}) do
|
18
|
+
get 'hosts/:id', to: 'disks#host'
|
19
|
+
get 'subnets/:id', to: 'subnet_disks#subnet'
|
18
20
|
end
|
19
21
|
end
|
20
22
|
end
|
@@ -1,29 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
class ChangeTemplatekindToBootdisk < ActiveRecord::Migration[4.2]
|
2
4
|
class FakeConfigTemplate < ApplicationRecord
|
3
|
-
if ActiveRecord::Base.connection.migration_context.get_all_versions.include?(
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
self.table_name = if ActiveRecord::Base.connection.migration_context.get_all_versions.include?(20_150_514_072_626)
|
6
|
+
'templates'
|
7
|
+
else
|
8
|
+
'config_templates'
|
9
|
+
end
|
8
10
|
end
|
9
11
|
|
10
12
|
def self.up
|
11
|
-
kind = TemplateKind.where(:
|
13
|
+
kind = TemplateKind.where(name: 'Bootdisk').first_or_create
|
12
14
|
|
13
|
-
tmpl_h = Setting.
|
14
|
-
tmpl_g = Setting.
|
15
|
+
tmpl_h = Setting.find_by(name: 'bootdisk_host_template').try(:value)
|
16
|
+
tmpl_g = Setting.find_by(name: 'bootdisk_generic_host_template').try(:value)
|
15
17
|
|
16
18
|
(FakeConfigTemplate.unscoped.where('name LIKE ?', '%Boot disk%') |
|
17
|
-
FakeConfigTemplate.unscoped.where(:
|
19
|
+
FakeConfigTemplate.unscoped.where(name: [tmpl_h, tmpl_g].compact)).each do |tmpl|
|
18
20
|
tmpl.update_attribute(:template_kind_id, kind.id)
|
19
21
|
end
|
20
22
|
end
|
21
23
|
|
22
24
|
def self.down
|
23
|
-
old_kind = TemplateKind.
|
24
|
-
new_kind = TemplateKind.
|
25
|
-
|
26
|
-
|
27
|
-
|
25
|
+
old_kind = TemplateKind.find_by(name: 'Bootdisk')
|
26
|
+
new_kind = TemplateKind.find_by(name: 'iPXE')
|
27
|
+
return unless old_kind.present? && new_kind.present?
|
28
|
+
|
29
|
+
FakeConfigTemplate.unscoped.where(template_kind_id: old_kind.id).update_all(template_kind_id: new_kind.id)
|
28
30
|
end
|
29
31
|
end
|
@@ -1,9 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
class RemoveDuplicateBootdiskTemplates < ActiveRecord::Migration[4.2]
|
2
4
|
def up
|
3
5
|
template_names = ['Boot disk iPXE - host', 'Boot disk iPXE - generic host']
|
4
6
|
template_names.each do |template_name|
|
5
|
-
duplicate_template_ids = ProvisioningTemplate.unscoped.where(:
|
6
|
-
ProvisioningTemplate.unscoped.where(:
|
7
|
+
duplicate_template_ids = ProvisioningTemplate.unscoped.where(name: template_name, locked: true).order(created_at: :asc).pluck(:id).drop(1)
|
8
|
+
ProvisioningTemplate.unscoped.where(id: duplicate_template_ids).destroy_all if duplicate_template_ids.any?
|
7
9
|
end
|
8
10
|
end
|
9
11
|
end
|
@@ -1,46 +1,31 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
ProvisioningTemplate.without_auditing do
|
8
|
-
content = File.read(File.join(ForemanBootdisk::Engine.root, 'app', 'views', 'foreman_bootdisk', 'host.erb'))
|
9
|
-
created << 'Boot disk iPXE - host' unless ProvisioningTemplate.find_by_name('Boot disk iPXE - host')
|
10
|
-
tmpl = ProvisioningTemplate.unscoped.where(:name => 'Boot disk iPXE - host').first_or_create do |template|
|
11
|
-
template.attributes = {
|
12
|
-
:template_kind_id => kind.id,
|
13
|
-
:snippet => false,
|
14
|
-
:template => content
|
15
|
-
}
|
16
|
-
end
|
17
|
-
tmpl.attributes = {
|
18
|
-
:template => content,
|
19
|
-
:default => true,
|
20
|
-
:vendor => "Foreman boot disk",
|
21
|
-
}
|
22
|
-
tmpl.locked = true
|
23
|
-
tmpl.save!(:validate => false) if tmpl.changes.present?
|
3
|
+
def read_bootdisk_template(filename)
|
4
|
+
File.read(File.join(ForemanBootdisk::Engine.root, 'app', 'views', 'foreman_bootdisk', filename))
|
5
|
+
end
|
24
6
|
|
25
|
-
|
26
|
-
|
27
|
-
tmpl = ProvisioningTemplate.unscoped.where(:name
|
7
|
+
def ensure_bootdisk_template(name, content)
|
8
|
+
kind = TemplateKind.unscoped.where(name: 'Bootdisk').first_or_create
|
9
|
+
tmpl = ProvisioningTemplate.unscoped.where(name: name).first_or_create do |template|
|
28
10
|
template.attributes = {
|
29
|
-
:
|
30
|
-
:
|
31
|
-
:
|
11
|
+
template_kind_id: kind.id,
|
12
|
+
snippet: false,
|
13
|
+
template: content
|
32
14
|
}
|
33
15
|
end
|
34
16
|
tmpl.attributes = {
|
35
|
-
:
|
36
|
-
:
|
37
|
-
:
|
17
|
+
template: content,
|
18
|
+
default: true,
|
19
|
+
vendor: "Foreman boot disk"
|
38
20
|
}
|
39
21
|
tmpl.locked = true
|
40
|
-
tmpl.
|
22
|
+
tmpl.organizations = Organization.unscoped.all if SETTINGS[:organizations_enabled]
|
23
|
+
tmpl.locations = Location.unscoped.all if SETTINGS[:locations_enabled]
|
24
|
+
tmpl.save!(validate: false) if tmpl.changes.present?
|
25
|
+
end
|
41
26
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
27
|
+
ProvisioningTemplate.without_auditing do
|
28
|
+
ensure_bootdisk_template("Boot disk iPXE - host", read_bootdisk_template("host.erb"))
|
29
|
+
ensure_bootdisk_template("Boot disk iPXE - generic host", read_bootdisk_template("generic_host.erb"))
|
30
|
+
ensure_bootdisk_template("Boot disk iPXE - generic static host", read_bootdisk_template("generic_static_host.erb"))
|
46
31
|
end
|
data/lib/foreman_bootdisk.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'foreman_bootdisk'
|
2
4
|
require 'fast_gettext'
|
3
5
|
require 'gettext_i18n_rails'
|
@@ -15,49 +17,36 @@ module ForemanBootdisk
|
|
15
17
|
app.routes_reloader.paths << "#{ForemanBootdisk::Engine.root}/config/routes/mount_engine.rb"
|
16
18
|
end
|
17
19
|
|
18
|
-
initializer 'foreman_bootdisk.load_default_settings', :
|
19
|
-
|
20
|
+
initializer 'foreman_bootdisk.load_default_settings', before: :load_config_initializers do |_app|
|
21
|
+
table_exists = begin
|
22
|
+
Setting.table_exists?
|
23
|
+
rescue StandardError
|
24
|
+
false
|
25
|
+
end
|
26
|
+
require_dependency File.expand_path('../../app/models/setting/bootdisk.rb', __dir__) if table_exists
|
20
27
|
end
|
21
28
|
|
22
|
-
initializer
|
29
|
+
initializer 'foreman_bootdisk.load_app_instance_data' do |app|
|
23
30
|
ForemanBootdisk::Engine.paths['db/migrate'].existent.each do |path|
|
24
31
|
app.config.paths['db/migrate'] << path
|
25
32
|
end
|
26
33
|
end
|
27
34
|
|
28
|
-
initializer
|
35
|
+
initializer 'foreman_bootdisk.apipie' do
|
29
36
|
Apipie.configuration.checksum_path += ['/bootdisk/api/']
|
30
37
|
end
|
31
38
|
|
32
|
-
|
33
|
-
# If requiring files from each other, list them explicitly here to avoid precompiling the same
|
34
|
-
# content twice.
|
35
|
-
assets_to_precompile =
|
36
|
-
Dir.chdir(root) do
|
37
|
-
Dir['app/assets/javascripts/**/*', 'app/assets/stylesheets/**/*'].map do |f|
|
38
|
-
f.split(File::SEPARATOR, 4).last
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
initializer 'foreman_bootdisk.assets.precompile' do |app|
|
43
|
-
app.config.assets.precompile += assets_to_precompile
|
44
|
-
end
|
45
|
-
|
46
|
-
initializer 'foreman_bootdisk.configure_assets', group: :assets do
|
47
|
-
SETTINGS[:foreman_bootdisk] = { assets: { precompile: assets_to_precompile } }
|
48
|
-
end
|
49
|
-
|
50
|
-
initializer 'foreman_bootdisk.register_plugin', :before => :finisher_hook do |app|
|
39
|
+
initializer 'foreman_bootdisk.register_plugin', before: :finisher_hook do |_app|
|
51
40
|
Foreman::Plugin.register :foreman_bootdisk do
|
52
|
-
requires_foreman '>= 1.
|
41
|
+
requires_foreman '>= 1.24'
|
53
42
|
|
54
|
-
security_block :bootdisk do |
|
55
|
-
permission :download_bootdisk,
|
56
|
-
|
57
|
-
|
43
|
+
security_block :bootdisk do |_map|
|
44
|
+
permission :download_bootdisk, 'foreman_bootdisk/disks': %i[generic host full_host subnet help],
|
45
|
+
'foreman_bootdisk/api/v2/disks': %i[generic host],
|
46
|
+
'foreman_bootdisk/api/v2/subnet_disks': [:subnet]
|
58
47
|
end
|
59
48
|
|
60
|
-
role
|
49
|
+
role 'Boot disk access', [:download_bootdisk], 'Role granting permissions to download bootdisks'
|
61
50
|
|
62
51
|
add_all_permissions_to_default_roles
|
63
52
|
|
@@ -68,20 +57,20 @@ module ForemanBootdisk
|
|
68
57
|
end
|
69
58
|
end
|
70
59
|
|
71
|
-
initializer 'foreman_bootdisk.register_gettext', :
|
72
|
-
locale_dir = File.join(File.expand_path('
|
60
|
+
initializer 'foreman_bootdisk.register_gettext', after: :load_config_initializers do |_app|
|
61
|
+
locale_dir = File.join(File.expand_path('../..', __dir__), 'locale')
|
73
62
|
locale_domain = 'foreman_bootdisk'
|
74
63
|
Foreman::Gettext::Support.add_text_domain locale_domain, locale_dir
|
75
64
|
end
|
76
65
|
|
77
66
|
config.to_prepare do
|
78
67
|
begin
|
79
|
-
Host::Managed.
|
80
|
-
Host::Managed.
|
81
|
-
HostsHelper.
|
82
|
-
Foreman::Model::Vmware.
|
83
|
-
rescue => e
|
84
|
-
|
68
|
+
Host::Managed.prepend ForemanBootdisk::HostExt
|
69
|
+
Host::Managed.include ForemanBootdisk::Orchestration::Compute if SETTINGS[:unattended]
|
70
|
+
HostsHelper.prepend ForemanBootdisk::HostsHelperExt
|
71
|
+
Foreman::Model::Vmware.prepend ForemanBootdisk::ComputeResources::Vmware if Foreman::Model::Vmware.available?
|
72
|
+
rescue StandardError => e
|
73
|
+
Rails.logger.warn "#{ForemanBootdisk::ENGINE_NAME}: skipping engine hook (#{e})"
|
85
74
|
end
|
86
75
|
end
|
87
76
|
end
|