foreman_bootdisk 17.0.2 → 17.1.0

Sign up to get free protection for your applications and to get access to all the features.
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: []