foreman_bootdisk 17.0.2 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cc43113465fd89f890f9606fb04af3e948b96ac1bd6c1943211a452e38c4cb2a
4
- data.tar.gz: 9db1069085f706df776576fc0df25f49a7d09ae71555ea15397d57656ddd0da5
3
+ metadata.gz: ca80bb43629c291c9d6b27bb8c94ebd10fcc2e6e267378e4852ab42bdcee0088
4
+ data.tar.gz: 743d4a31beef4d80d6ab5b025cf6261bbbb11cb62eb82b65d8f7c5aaed58c9fb
5
5
  SHA512:
6
- metadata.gz: 115bddba362f7c53b78d06ca78a1f120babae76cc2f922447cd0e05b1f322f189e30b186e6cb0718b7d9a24bfca67bf2287283fd9495eba4193a9b6bb560ec29
7
- data.tar.gz: 1cd764fdc0a939d45934070d6b34e2619870c8c206afd4915cae93f68f7553cfcc9b18d3c04770aba9f4b6f45d62bbd779563798b7175595ee8c2b991f03b660
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
@@ -1,7 +1,7 @@
1
1
  [main]
2
2
  host = https://www.transifex.com
3
3
 
4
- [foreman.bootdisk]
4
+ [foreman.foreman_bootdisk]
5
5
  file_filter = locale/<lang>/foreman_bootdisk.edit.po
6
6
  source_file = locale/foreman_bootdisk.pot
7
7
  source_lang = en
data/AUTHORS CHANGED
@@ -4,6 +4,7 @@ Bryan Kearney
4
4
  crito
5
5
  Damon Maria
6
6
  Dominic Cleal
7
+ Dominik Matoulek
7
8
  Greg Sutcliffe
8
9
  Ido Kanner
9
10
  Jon Fautley
@@ -13,13 +14,16 @@ Lukas Zapletal
13
14
  Lukáš Zapletal
14
15
  Marek Hulan
15
16
  Marek Hulán
17
+ Markus Bucher
16
18
  Martin Bačovský
17
19
  Michael Hofer
18
20
  Michael Moll
19
21
  Ohad Levy
22
+ Oleh Fedorenko
20
23
  Ondrej Prazak
21
24
  Ondřej Ezr
22
25
  Ondřej Pražák
26
+ Pat Riehecky
23
27
  Robert Antoni Buj Gelonch
24
28
  Rohan21Lobo
25
29
  Ronald van Zantvoort
@@ -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
 
@@ -34,10 +36,12 @@ module ForemanBootdisk
34
36
  def host
35
37
  host = @disk
36
38
  if params[:full]
39
+ return unless bootdisk_type_allowed?('full_host')
37
40
  ForemanBootdisk::ISOGenerator.generate_full_host(host) do |iso|
38
41
  send_file(iso, filename: "#{host.name}#{ForemanBootdisk::ISOGenerator.token_expiry(host)}.iso")
39
42
  end
40
43
  else
44
+ return unless bootdisk_type_allowed?
41
45
  # EFI not supported for iPXE host bootdisk
42
46
  tmpl = host.bootdisk_template_render
43
47
  ForemanBootdisk::ISOGenerator.generate(ipxe: tmpl) do |iso|
@@ -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
@@ -42,6 +45,10 @@ module ForemanBootdisk
42
45
  def resource_scope
43
46
  Subnet.authorized('view_subnets')
44
47
  end
48
+
49
+ def subnet_not_found
50
+ not_found ("Subnet not found by id '%s'") % params[:id]
51
+ end
45
52
  end
46
53
  end
47
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
@@ -8,42 +8,7 @@ module ForemanBootdisk
8
8
  button_group(
9
9
  select_action_button(
10
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
- )
11
+ host_action_buttons(host)
47
12
  )
48
13
  )
49
14
  )
@@ -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
@@ -3,6 +3,20 @@
3
3
  module ForemanBootdisk
4
4
  module Scope
5
5
  class Bootdisk < ::Foreman::Renderer::Scope::Provisioning
6
+ extend ApipieDSL::Class
7
+
8
+ apipie :class, 'Macros related to provisioning via boot disk' do
9
+ name 'Bootdisk'
10
+ sections only: %w[all provisioning]
11
+ end
12
+
13
+ apipie :method, 'Generates URL for boot chain' do
14
+ optional :mac, String, 'MAC address of the host', default: 'MAC address of the current host'
15
+ optional :action, String, 'Bootloader to use', default: 'iPXE'
16
+ returns String, desc: 'URL for boot chain'
17
+ example 'bootdisk_chain_url #=> "http://foreman.some.host.fqdn/unattended/iPXE?mac=00%3A11%3A22%3A33%3A44%3A55"'
18
+ example 'bootdisk_chain_url("00:11:22:33:44:55") #=> "http://foreman.some.host.fqdn/unattended/iPXE?mac=00%3A11%3A22%3A33%3A44%3A55"'
19
+ end
6
20
  def bootdisk_chain_url(mac = host.try(:mac), action = 'iPXE')
7
21
  url = foreman_url(action)
8
22
  u = URI.parse(url)
@@ -14,6 +28,16 @@ module ForemanBootdisk
14
28
  u.to_s
15
29
  end
16
30
 
31
+ apipie :method, 'Always raises an error with a description provided as an argument' do
32
+ desc 'This method is useful for aborting script execution if some of the conditions are not met'
33
+ list :args, desc: 'Description for the error'
34
+ raises error: ::Foreman::Exception, desc: 'The error is always being raised'
35
+ returns nil, desc: "Doesn't return anything"
36
+ example "<%
37
+ interface = @host.provision_interface #=> interface = nil
38
+ bootdisk_raise(N_('Host has no provisioning interface defined')) unless interface #=> Foreman::Exception is raised and the execution of the script is aborted
39
+ %>"
40
+ end
17
41
  def bootdisk_raise(*args)
18
42
  raise ::Foreman::Exception.new(*args)
19
43
  end
@@ -4,6 +4,8 @@ require 'uri'
4
4
 
5
5
  module ForemanBootdisk
6
6
  module HostExt
7
+ extend ApipieDSL::Extension
8
+
7
9
  def bootdisk_template
8
10
  template = ProvisioningTemplate.unscoped.find_by(name: Setting[:bootdisk_host_template])
9
11
  unless template
@@ -36,6 +38,10 @@ module ForemanBootdisk
36
38
  def can_be_built?
37
39
  super || (managed? && SETTINGS[:unattended] && bootdisk_build? && !build?)
38
40
  end
41
+
42
+ apipie_update :class do
43
+ property :bootdisk_build?, one_of: [true, false], desc: 'Returns true if provision method for this host is bootdisk, false otherwise'
44
+ end
39
45
  end
40
46
  end
41
47
 
@@ -42,8 +42,16 @@ module ForemanBootdisk
42
42
  end
43
43
 
44
44
  def bootdisk_generate_iso_image
45
- ForemanBootdisk::ISOGenerator.generate(ipxe: bootdisk_template_render, dir: Dir.tmpdir) do |image|
46
- FileUtils.mv image, bootdisk_isofile
45
+ if self.build? && self.provisioning_template(kind: :PXELinux) && self.provisioning_template(kind: :PXEGrub2)
46
+ logger.info format('Generating FULL HOST ISO image for %s', name)
47
+ ForemanBootdisk::ISOGenerator.generate_full_host(self, dir: Dir.tmpdir) do |image|
48
+ FileUtils.mv image, bootdisk_isofile
49
+ end
50
+ else
51
+ logger.info format('Generating HOST ISO image for %s', name)
52
+ ForemanBootdisk::ISOGenerator.generate(ipxe: bootdisk_template_render, dir: Dir.tmpdir) do |image|
53
+ FileUtils.mv image, bootdisk_isofile
54
+ end
47
55
  end
48
56
  end
49
57
 
@@ -60,7 +68,6 @@ module ForemanBootdisk
60
68
  end
61
69
 
62
70
  def setGenerateIsoImage
63
- logger.info format('Generating ISO image for %s', name)
64
71
  bootdisk_generate_iso_image
65
72
  rescue StandardError => e
66
73
  failure format(_('Failed to generate ISO image for instance %{name}: %{message}'), name: name, message: e.message), e
@@ -21,12 +21,21 @@ class Setting
21
21
  set('bootdisk_generic_efi_host_template', N_('Grub2 template to use for generic EFI host boot disks'),
22
22
  'Boot disk Grub2 EFI - generic host', N_('Generic Grub2 EFI image template'), nil, collection: templates),
23
23
  set('bootdisk_mkiso_command', N_('Command to generate ISO image, use genisoimage or mkisofs'), 'genisoimage', N_('ISO generation command')),
24
- set('bootdisk_cache_media', N_('Installation media files will be cached for full host images'), true, N_('Installation media caching'))
24
+ set('bootdisk_cache_media', N_('Installation media files will be cached for full host images'), true, N_('Installation media caching')),
25
+ set('bootdisk_allowed_types', N_('List of allowed bootdisk types, remove type to disable it'), Setting::Bootdisk.bootdisk_types, N_('Allowed bootdisk types'))
25
26
  ]
26
27
  end
27
28
 
28
29
  def self.humanized_category
29
30
  N_('Boot disk')
30
31
  end
32
+
33
+ def self.bootdisk_types
34
+ %w(generic host full_host subnet)
35
+ end
36
+
37
+ def self.allowed_types
38
+ Setting['bootdisk_allowed_types']
39
+ end
31
40
  end
32
41
  end
@@ -10,6 +10,8 @@ require 'uri'
10
10
  # requires syslinux, ipxe/ipxe-bootimgs, genisoimage, isohybrid
11
11
  module ForemanBootdisk
12
12
  class ISOGenerator
13
+ extend Foreman::HTTPProxy
14
+
13
15
  def self.generate_full_host(host, opts = {}, &block)
14
16
  raise Foreman::Exception.new(N_('Host is not in build mode, so the template cannot be rendered')) unless host.build?
15
17
 
@@ -83,8 +85,8 @@ module ForemanBootdisk
83
85
  EOT
84
86
  end
85
87
 
86
- # Temporary directory cannot be cleaned inprocess due to send_file offloaded to web server
87
- wd = Dir.mktmpdir('bootdisk-iso-')
88
+ # And create new temporary directory:
89
+ wd = Dir.mktmpdir('bootdisk-iso-', Rails.root.join('tmp'))
88
90
  Dir.mkdir(File.join(wd, 'build'))
89
91
 
90
92
  if opts[:isolinux]
@@ -132,8 +134,8 @@ module ForemanBootdisk
132
134
  File.join(Setting[:bootdisk_grub2_dir], 'grubx64.efi').to_s => 'GRUBX64.EFI',
133
135
  File.join(Setting[:bootdisk_grub2_dir], 'shimx64.efi').to_s => 'BOOTX64.EFI',
134
136
  }.each do |src, dest|
135
- raise(Foreman::Exception.new(N_('Ensure %{path} contains grubx64.efi and shimx64.efi: install TFTP module or copy those files into /var/lib/foreman/bootdisk (Grub2 directory setting)'), path: src)) unless File.exist?(src)
136
- raise(Foreman::Exception.new(N_('Unable to mcopy %{path}'), path: src)) unless system("mcopy -m -i #{efibootimg} '#{src}' '#{"::/EFI/BOOT/#{dest}"}'")
137
+ raise(Foreman::Exception.new(N_('Ensure %{file} is readable (or update "Grub2 directory" setting)'), file: src)) unless File.exist?(src)
138
+ raise(Foreman::Exception.new(N_('Unable to mcopy %{file}'), file: src)) unless system("mcopy -m -i #{efibootimg} '#{src}' '#{"::/EFI/BOOT/#{dest}"}'")
137
139
  end
138
140
  mkiso_args = "-eltorito-alt-boot -e efiboot.img -no-emul-boot"
139
141
  isohybrod_args = ["--uefi"]
@@ -161,6 +163,15 @@ module ForemanBootdisk
161
163
  raise Foreman::Exception.new(N_('ISO hybrid conversion failed: %s'), $?) unless system(*["isohybrid", isohybrod_args, iso].flatten.compact)
162
164
 
163
165
  yield iso
166
+ ensure
167
+ # Clean the working directory (not the ISO file itself)
168
+ FileUtils.rm_f(File.join(wd, 'build'))
169
+ # Temporary directory cannot be cleaned in-process due to asynchronous send_file call.
170
+ # Also we cannot rely on systemd-tmpfiles-clean as private temporary files are not subject
171
+ # of scheduled cleanups. Let's clean bootdisks from prevous requests manually by finding
172
+ # and deleting all directories created 30 minutes ago.
173
+ delete_older_than = Time.now.to_i - (60 * 30)
174
+ Rails.root.glob('tmp/bootdisk-iso-*').select { |f| File.ctime(f) < delete_older_than }.each { |f| FileUtils.rm_f(f) }
164
175
  end
165
176
 
166
177
  def self.build_mkiso_command(output_file:, source_directory:, extra_commands:)
@@ -200,7 +211,14 @@ module ForemanBootdisk
200
211
  ForemanBootdisk.logger.info("Fetching #{uri}")
201
212
  write_cache = use_cache
202
213
  uri = URI(uri)
203
- Net::HTTP.start(uri.host, uri.port) do |http|
214
+
215
+ if proxy_http_request?(nil, uri.host, uri.scheme)
216
+ proxy_uri = URI.parse(http_proxy)
217
+ http_object = Net::HTTP::Proxy(proxy_uri.host, proxy_uri.port, proxy_uri.user, proxy_uri.password)
218
+ else
219
+ http_object = Net::HTTP
220
+ end
221
+ http_object.start(uri.host, uri.port) do |http|
204
222
  request = Net::HTTP::Get.new(uri.request_uri, 'Accept-Encoding' => 'plain')
205
223
 
206
224
  http.request(request) do |response|
@@ -44,6 +44,10 @@ net_bootp
44
44
  net_ls_addr
45
45
  net_ls_routes
46
46
  net_ls_dns
47
+ echo Trying to ping proxy_httpboot_host: <%= proxy_httpboot_host %>
48
+ ping --count 1 <%= proxy_httpboot_host %> || echo Ping to proxy_httpboot_host failed or ping command not available.
49
+ echo Trying to ping proxy_template_host: <%= proxy_template_host %>
50
+ ping --count 1 <%= proxy_template_host %> || echo Ping to proxy_template_host failed or ping command not available.
47
51
  sleep 5
48
52
  set root=(<%= proxy_proto %>,<%= proxy_httpboot_host %>:<%= proxy_port %>)
49
53
  # The variable will not survive configfile fetch, therefore absolute path
@@ -58,6 +58,13 @@ set dns <%= dns %>
58
58
  set domain <%= interface.domain.to_s %>
59
59
  <% end %>
60
60
 
61
+ echo Trying to ping Gateway: ${netX/gateway}
62
+ ping --count 1 ${netX/gateway} || echo Ping to Gateway failed or ping command not available.
63
+ <% if dns.present? -%>
64
+ echo Trying to ping DNS: ${netX/dns}
65
+ ping --count 1 ${netX/dns} || echo Ping to DNS failed or ping command not available.
66
+ <% end %>
67
+
61
68
  # Chainload from Foreman rather than embedding OS info here, so the behaviour
62
69
  # is entirely dynamic.
63
70
  chain <%= bootdisk_chain_url %>
@@ -51,6 +51,9 @@ module ForemanBootdisk
51
51
  add_all_permissions_to_default_roles
52
52
 
53
53
  apipie_documented_controllers ["#{ForemanBootdisk::Engine.root}/app/controllers/foreman_bootdisk/api/v2/*.rb"]
54
+ ApipieDSL.configuration.dsl_classes_matchers += [
55
+ "#{ForemanBootdisk::Engine.root}/app/lib/foreman_bootdisk/scope/*.rb"
56
+ ]
54
57
  provision_method 'bootdisk', N_('Boot disk based')
55
58
  template_labels 'Bootdisk' => N_('Boot disk embedded template')
56
59
  allowed_template_helpers :bootdisk_chain_url, :bootdisk_raise
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ForemanBootdisk
4
- VERSION = '17.0.2'
4
+ VERSION = '17.1.0'
5
5
  end
@@ -88,23 +88,5 @@ end
88
88
 
89
89
  Rake::Task[:test].enhance ['test:foreman_bootdisk']
90
90
 
91
- namespace :foreman_bootdisk do
92
- task :rubocop do
93
- begin
94
- require 'rubocop/rake_task'
95
- RuboCop::RakeTask.new(:rubocop_foreman_bootdisk) do |task|
96
- task.patterns = ["#{ForemanBootdisk::Engine.root}/app/**/*.rb",
97
- "#{ForemanBootdisk::Engine.root}/lib/**/*.rb",
98
- "#{ForemanBootdisk::Engine.root}/test/**/*.rb"]
99
- task.options << '--auto-correct' if ENV['RUBOCOP_AUTOCORRECT']
100
- end
101
- rescue StandardError
102
- puts 'Rubocop not loaded.'
103
- end
104
-
105
- Rake::Task['rubocop_foreman_bootdisk'].invoke
106
- end
107
- end
108
-
109
91
  load 'tasks/jenkins.rake'
110
- Rake::Task['jenkins:unit'].enhance ['test:foreman_bootdisk', 'foreman_bootdisk:rubocop'] if Rake::Task.task_defined?(:'jenkins:unit')
92
+ Rake::Task['jenkins:unit'].enhance ['test:foreman_bootdisk'] if Rake::Task.task_defined?(:'jenkins:unit')
@@ -1,5 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Autogenerated!
2
4
  _("Remote action:")
3
5
  _("Import facts")
4
6
  _("Import Puppet classes")
5
- _("Action with sub plans")
7
+ _("Action with sub plans")
metadata CHANGED
@@ -1,59 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: foreman_bootdisk
3
3
  version: !ruby/object:Gem::Version
4
- version: 17.0.2
4
+ version: 17.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dominic Cleal
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-06-15 00:00:00.000000000 Z
11
+ date: 2021-04-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: rubocop
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: '0'
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- version: '0'
27
- - !ruby/object:Gem::Dependency
28
- name: rubocop-minitest
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: rubocop-performance
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
- - !ruby/object:Gem::Dependency
56
- name: rubocop-rails
14
+ name: theforeman-rubocop
57
15
  requirement: !ruby/object:Gem::Requirement
58
16
  requirements:
59
17
  - - ">="
@@ -90,12 +48,14 @@ extra_rdoc_files:
90
48
  - LICENSE
91
49
  - README.md
92
50
  files:
51
+ - ".github/workflows/rubocop.yaml"
93
52
  - ".tx/config"
94
53
  - AUTHORS
95
54
  - CHANGES.md
96
55
  - LICENSE
97
56
  - README.md
98
57
  - app/assets/javascripts/foreman_bootdisk/host_edit.js
58
+ - app/controllers/concerns/allowed_actions.rb
99
59
  - app/controllers/foreman_bootdisk/api/v2/disks_controller.rb
100
60
  - app/controllers/foreman_bootdisk/api/v2/subnet_disks_controller.rb
101
61
  - app/controllers/foreman_bootdisk/disks_controller.rb
@@ -180,7 +140,7 @@ homepage: http://github.com/theforeman/foreman_bootdisk
180
140
  licenses:
181
141
  - GPL-3.0
182
142
  metadata: {}
183
- post_install_message:
143
+ post_install_message:
184
144
  rdoc_options: []
185
145
  require_paths:
186
146
  - lib
@@ -188,15 +148,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
188
148
  requirements:
189
149
  - - ">="
190
150
  - !ruby/object:Gem::Version
191
- version: '0'
151
+ version: '2.5'
192
152
  required_rubygems_version: !ruby/object:Gem::Requirement
193
153
  requirements:
194
154
  - - ">="
195
155
  - !ruby/object:Gem::Version
196
156
  version: '0'
197
157
  requirements: []
198
- rubygems_version: 3.0.3
199
- signing_key:
158
+ rubygems_version: 3.1.4
159
+ signing_key:
200
160
  specification_version: 4
201
161
  summary: Create boot disks to provision hosts with Foreman
202
162
  test_files: []