foreman_maintain 0.4.5 → 0.4.6

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
- SHA1:
3
- metadata.gz: c4ff15bf113b8dc5c9bc105d245fae484cac3e93
4
- data.tar.gz: c62005960774cf6df93fa6f8d5acf0b16fa3750b
2
+ SHA256:
3
+ metadata.gz: 0ec1d3cb6c78f4404fb0983479df446a46a5814428842c630f9723be36e58863
4
+ data.tar.gz: b156422372ca41f5ebec896fe24c929c96cef1577576f4abf768938b6776d910
5
5
  SHA512:
6
- metadata.gz: 0e9f94074cd0fd7bbcbaaf2f8664a0922a9018088b283e7aca1d104fb8771bed8c7ca8d21eb3f59743832135d4ec0e731229169b01df1eca787e4b938e0c77cc
7
- data.tar.gz: 781471467f7530d25e051d6e5c838cb3a369df87b35a13931ffe2bea8aa146595eb5e1c26c7be9a7a919d79a0c7fdfaa4b6a64a418f7f1d644593a45697f6a0e
6
+ metadata.gz: 2df8afaa92f8871b3f3b59db30ec321af277059f0631a3ad2a54f064bf5067463160a209b7d7c1bc6fb15b83b30ac15015977fdf96621200b0eec87d690bcfd1
7
+ data.tar.gz: c30552fdc8e0c3ae64625d5504bbf894b134c50f77be98d3c42c3cfb751c61104f4ad391d88e4dc63b2b86163cb2b2a3e610e636d6be43d33253e463145e93dd
@@ -0,0 +1,42 @@
1
+ module Checks
2
+ module Foreman
3
+ class CheckDuplicateRoles < ForemanMaintain::Check
4
+ metadata do
5
+ label :duplicate_roles
6
+ for_feature :foreman_database
7
+ description 'Check for duplicate roles from DB'
8
+ tags :pre_upgrade
9
+ confine do
10
+ check_max_version('foreman', '1.20')
11
+ end
12
+ end
13
+
14
+ def run
15
+ duplicate_roles = find_duplicate_roles
16
+ roles_names = duplicate_roles.map { |r| r['name'] }.uniq
17
+ assert(
18
+ duplicate_roles.empty?,
19
+ "Duplicate entries found for role(s) - #{roles_names.join(', ')} in your DB",
20
+ :next_steps => [
21
+ Procedures::Foreman::RemoveDuplicateObsoleteRoles.new,
22
+ Procedures::KnowledgeBaseArticle.new(
23
+ :doc => 'fix_db_migrate_failure_on_duplicate_roles'
24
+ )
25
+ ]
26
+ )
27
+ end
28
+
29
+ def find_duplicate_roles
30
+ feature(:foreman_database).query(self.class.query_to_get_duplicate_roles)
31
+ end
32
+
33
+ def self.query_to_get_duplicate_roles
34
+ <<-SQL
35
+ SELECT r.id, r.name FROM roles r JOIN (
36
+ SELECT name, COUNT(*) FROM roles GROUP BY name HAVING count(*) > 1
37
+ ) dr ON r.name = dr.name ORDER BY r.name
38
+ SQL
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,22 @@
1
+ class Checks::OriginalAssets < ForemanMaintain::Check
2
+ metadata do
3
+ description 'Check if only installed assets are present on the system'
4
+ tags :post_upgrade
5
+ end
6
+
7
+ ASSETS_DIR = '/var/lib/foreman/public/assets'.freeze
8
+
9
+ def run
10
+ custom_assets = []
11
+ product_name = feature(:instance).product_name
12
+ with_spinner('Checking for presence of non-original assets...') do
13
+ custom_assets = feature(:package_manager).files_not_owned_by_package(ASSETS_DIR)
14
+ logger.info("Non-original assets detected:\n" + custom_assets.join("\n"))
15
+ end
16
+ remove_files = Procedures::Files::Remove.new(:files => custom_assets, :assumeyes => true)
17
+ assert(custom_assets.empty?,
18
+ "Some assets not owned by #{product_name} were detected on the system.\n" \
19
+ 'Possible conflicting versions can affect operation of the Web UI.',
20
+ :next_steps => remove_files)
21
+ end
22
+ end
@@ -73,6 +73,10 @@ class Features::ForemanProxy < ForemanMaintain::Feature
73
73
  configs
74
74
  end
75
75
 
76
+ def config_files_to_exclude(_for_features = ['all'])
77
+ []
78
+ end
79
+
76
80
  def content_module
77
81
  return @content_module if @content_module_detected
78
82
  @content_module_detected = true
@@ -35,6 +35,12 @@ module ForemanMaintain
35
35
  '/var/lib/foreman'
36
36
  ]
37
37
  end
38
+
39
+ def config_files_to_exclude
40
+ [
41
+ '/var/lib/foreman/public/assets'
42
+ ]
43
+ end
38
44
  end
39
45
  end
40
46
  end
@@ -28,7 +28,7 @@ class Features::Hammer < ForemanMaintain::Feature
28
28
  def setup_admin_access
29
29
  return true if check_connection
30
30
  logger.info('Hammer setup is not valid. Fixing configuration.')
31
- custom_config = { :foreman => { :username => 'admin' } }
31
+ custom_config = { :foreman => { :username => username } }
32
32
  custom_config = on_invalid_host(custom_config)
33
33
  custom_config = on_missing_password(custom_config) # get password from answers
34
34
  custom_config = on_invalid_password(custom_config) # get password from answers
@@ -82,10 +82,11 @@ class Features::Hammer < ForemanMaintain::Feature
82
82
  end
83
83
 
84
84
  def on_invalid_password(custom_config)
85
- if !ready? && custom_config[:foreman][:password].nil?
85
+ admin_password = password_from_answers(custom_config[:foreman][:username])
86
+ if !ready? && custom_config[:foreman][:password] != admin_password
86
87
  msg = 'Invalid admin password was found in hammer configs. Looking into installer answers'
87
88
  logger.info(msg)
88
- custom_config[:foreman][:password] = password_from_answers
89
+ custom_config[:foreman][:password] = admin_password
89
90
  save_config_and_check(custom_config)
90
91
  end
91
92
  custom_config
@@ -99,7 +100,8 @@ class Features::Hammer < ForemanMaintain::Feature
99
100
 
100
101
  def config_error
101
102
  raise ForemanMaintain::HammerConfigurationError, 'Hammer configuration failed: '\
102
- "Is the admin password correct? (it was stored in #{custom_config_file})" \
103
+ 'Is the admin credential from the file' \
104
+ " #{custom_config_file} correct?\n" \
103
105
  'Is the server down?'
104
106
  end
105
107
 
@@ -107,7 +109,7 @@ class Features::Hammer < ForemanMaintain::Feature
107
109
  if admin_password_missing?
108
110
  msg = 'Admin password was not found in hammer configs. Looking into installer answers'
109
111
  logger.info(msg)
110
- custom_config[:foreman][:password] = password_from_answers
112
+ custom_config[:foreman][:password] = password_from_answers(custom_config[:foreman][:username])
111
113
  end
112
114
  save_config_and_check(custom_config)
113
115
  custom_config
@@ -116,7 +118,7 @@ class Features::Hammer < ForemanMaintain::Feature
116
118
  def admin_password_missing?
117
119
  configuration[:foreman][:password].nil? ||
118
120
  configuration[:foreman][:password].empty? ||
119
- configuration[:foreman][:username] != 'admin'
121
+ configuration[:foreman][:username] != username
120
122
  end
121
123
 
122
124
  def exec_hammer_cmd(cmd, required_json = false)
@@ -148,9 +150,15 @@ class Features::Hammer < ForemanMaintain::Feature
148
150
  end
149
151
  end
150
152
 
151
- def password_from_answers
153
+ def username
154
+ return 'admin' unless feature(:installer)
155
+ feature(:installer).initial_admin_username
156
+ end
157
+
158
+ def password_from_answers(config_username)
152
159
  return nil unless feature(:installer)
153
- feature(:installer).answers['foreman']['admin_password']
160
+ return nil unless config_username == feature(:installer).initial_admin_username
161
+ feature(:installer).initial_admin_password
154
162
  end
155
163
 
156
164
  def save_config_and_check(config)
@@ -93,6 +93,16 @@ class Features::Installer < ForemanMaintain::Feature
93
93
  run(arguments, exec_options)
94
94
  end
95
95
 
96
+ def initial_admin_username
97
+ feature(:installer).answers['foreman']['initial_admin_username'] ||
98
+ feature(:installer).answers['foreman']['admin_username']
99
+ end
100
+
101
+ def initial_admin_password
102
+ feature(:installer).answers['foreman']['initial_admin_password'] ||
103
+ feature(:installer).answers['foreman']['admin_password']
104
+ end
105
+
96
106
  private
97
107
 
98
108
  def load_answers(config)
@@ -8,7 +8,7 @@ class Features::PackageManager < ForemanMaintain::Feature
8
8
  :installed?, :find_installed_package, :install, :update,
9
9
  :version_locking_enabled?, :configure_version_locking,
10
10
  :foreman_related_packages, :version_locking_packages,
11
- :versions_locked?, :clean_cache, :remove
11
+ :versions_locked?, :clean_cache, :remove, :files_not_owned_by_package
12
12
 
13
13
  def self.type
14
14
  @type ||= %w[dnf yum apt].find { |manager| command_present?(manager) }
@@ -18,7 +18,10 @@ class Features::Tar < ForemanMaintain::Feature
18
18
  # @option options [Boolean] :multi_volume create/list/extract multi-volume archive
19
19
  # @option options [Boolean] :overwrite overwrite existing files when extracting
20
20
  # @option options [Boolean] :gzip filter the archive through gzip
21
+ # @option options [Boolean] :ignore_failed_read do not fail on missing files
22
+ # @option options [Boolean] :allow_changing_files do not fail on changing files
21
23
  # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
24
+ # rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
22
25
  def run(options = {})
23
26
  volume_size = options.fetch(:volume_size, nil)
24
27
  validate_volume_size(volume_size) unless volume_size.nil?
@@ -51,15 +54,19 @@ class Features::Tar < ForemanMaintain::Feature
51
54
  tar_command << '-M' if options[:multi_volume]
52
55
  tar_command << "--directory=#{options[:directory]}" if options[:directory]
53
56
 
57
+ tar_command << '--ignore-failed-read' if options[:ignore_failed_read]
58
+
54
59
  if options[:files]
55
60
  tar_command << '-S'
56
61
  tar_command << options.fetch(:files, '*')
57
62
  end
58
63
 
59
- logger.debug("Invoking tar from #{FileUtils.pwd}")
60
- execute!(tar_command.join(' '))
64
+ logger.debug("Invoking tar from #{options[:directory] || FileUtils.pwd}")
65
+ statuses = options[:allow_changing_files] ? [0, 1] : [0]
66
+ execute!(tar_command.join(' '), :valid_exit_statuses => statuses)
61
67
  end
62
68
  # rubocop:enable Metrics/AbcSize, Metrics/MethodLength
69
+ # rubocop:enable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
63
70
 
64
71
  def validate_volume_size(size)
65
72
  if size.nil? || size !~ /^\d+[bBcGKkMPTw]?$/
@@ -19,21 +19,36 @@ module Procedures::Backup
19
19
  tarball = File.join(@backup_dir, 'config_files.tar.gz')
20
20
  increments = File.join(@backup_dir, '.config.snar')
21
21
  with_spinner('Collecting config files to backup') do
22
- configs = config_files.join(' ')
23
- statuses = @ignore_changed_files ? [0, 1] : [0]
24
- execute!("tar --selinux --create --gzip --file=#{tarball} " \
25
- "--listed-incremental=#{increments} --ignore-failed-read " \
26
- "#{configs}", :valid_exit_statuses => statuses)
22
+ configs, to_exclude = config_files
23
+ feature(:tar).run(
24
+ :command => 'create', :gzip => true, :archive => tarball,
25
+ :listed_incremental => increments, :ignore_failed_read => true,
26
+ :exclude => to_exclude, :allow_changing_files => @ignore_changed_files,
27
+ :files => configs.join(' ')
28
+ )
27
29
  end
28
30
  end
29
31
 
32
+ # rubocop:disable Metrics/AbcSize
30
33
  def config_files
31
34
  configs = []
32
- # exclude proxy as it has special handling later
33
- features = ForemanMaintain.available_features - [feature(:foreman_proxy)]
34
- configs += features.inject([]) { |files, feature| files + feature.config_files }
35
- configs += feature(:foreman_proxy).config_files(@proxy_features) if feature(:foreman_proxy)
35
+ exclude_configs = []
36
+ ForemanMaintain.available_features.each do |feature|
37
+ # exclude proxy as it has special handling later
38
+ next if feature == feature(:foreman_proxy)
39
+ configs += feature.config_files
40
+ exclude_configs += feature.config_files_to_exclude
41
+ end
42
+
43
+ if feature(:foreman_proxy)
44
+ configs += feature(:foreman_proxy).config_files(@proxy_features)
45
+ exclude_configs += feature(:foreman_proxy).config_files_to_exclude(@proxy_features)
46
+ end
47
+
36
48
  configs.compact.select { |path| Dir.glob(path).any? }
49
+ exclude_configs.compact.select { |path| Dir.glob(path).any? }
50
+ [configs, exclude_configs]
37
51
  end
52
+ # rubocop:enable Metrics/AbcSize
38
53
  end
39
54
  end
@@ -0,0 +1,13 @@
1
+ module Procedures::Files
2
+ class Remove < ForemanMaintain::Procedure
3
+ metadata do
4
+ description 'Remove the files'
5
+ param :files, 'Files to remove', :array => true
6
+ param :assumeyes, 'Do not ask for confirmation', :default => false
7
+ end
8
+
9
+ def run
10
+ FileUtils.rm_r(@files, :force => @assumeyes, :secure => true)
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,64 @@
1
+ module Procedures::Foreman
2
+ class RemoveDuplicateObsoleteRoles < ForemanMaintain::Procedure
3
+ metadata do
4
+ for_feature :foreman_database
5
+ description 'Remove duplicate obsolete roles from DB'
6
+ confine do
7
+ check_max_version('foreman', '1.20')
8
+ end
9
+ end
10
+
11
+ def run
12
+ duplicate_roles = feature(:foreman_database).query(
13
+ Checks::Foreman::CheckDuplicateRoles.query_to_get_duplicate_roles
14
+ )
15
+ roles_hash = duplicate_roles.each_with_object({}) do |role_rec, new_obj|
16
+ r_name = role_rec['name']
17
+ new_obj[r_name] = [] unless new_obj.key?(r_name)
18
+ new_obj[r_name] << role_rec['id'].to_i
19
+ end
20
+ duplicate_role_ids = filter_consumed_roles(roles_hash)
21
+ remove_obsolete_role_records(duplicate_role_ids) unless duplicate_role_ids.empty?
22
+ end
23
+
24
+ private
25
+
26
+ def filter_consumed_roles(roles_hash)
27
+ consumed_role_ids = find_consumed_role_ids
28
+ roles_hash.values.map do |ids|
29
+ consumed_ids = ids & consumed_role_ids
30
+ if consumed_ids.count == 1
31
+ ids -= consumed_ids
32
+ elsif consumed_ids.count > 1
33
+ ids -= consumed_ids
34
+ update_duplicate_consumed_roles(consumed_ids)
35
+ elsif ids.length > 1
36
+ ids.delete(ids.min)
37
+ end
38
+ ids
39
+ end.flatten
40
+ end
41
+
42
+ def find_consumed_role_ids
43
+ feature(:foreman_database).query(<<-SQL).map { |r| r['role_id'].to_i }
44
+ select DISTINCT(role_id) role_id from user_roles
45
+ SQL
46
+ end
47
+
48
+ def update_duplicate_consumed_roles(role_ids)
49
+ logger.info("Updating name of duplicate consumed roles using id(s): #{role_ids.join(', ')}")
50
+
51
+ feature(:foreman_database).psql(<<-SQL)
52
+ UPDATE roles set name = concat(name, ' - ', id) where id in (#{role_ids.join(', ')})
53
+ SQL
54
+ end
55
+
56
+ def remove_obsolete_role_records(role_ids)
57
+ feature(:foreman_database).psql(<<-SQL)
58
+ BEGIN;
59
+ DELETE from roles r where r.id IN (#{role_ids.join(', ')});
60
+ COMMIT;
61
+ SQL
62
+ end
63
+ end
64
+ end
@@ -24,6 +24,7 @@ class Procedures::KnowledgeBaseArticle < ForemanMaintain::Procedure
24
24
  def kcs_documents
25
25
  {
26
26
  'fix_cpdb_validate_failure' => 'https://access.redhat.com/solutions/3362821',
27
+ 'fix_db_migrate_failure_on_duplicate_roles' => 'https://access.redhat.com/solutions/3998941',
27
28
  'upgrade_puppet_guide_for_sat63' => 'https://access.redhat.com/documentation/en-us/red_hat_satellite/6.3/html/upgrading_and_updating_red_hat_satellite/upgrading_puppet-1'
28
29
  }
29
30
  end
@@ -19,13 +19,17 @@ module Procedures::Restore
19
19
  end
20
20
 
21
21
  def restore_configs(backup)
22
+ exclude = ForemanMaintain.available_features.each_with_object([]) do |feat, cfgs|
23
+ feat.config_files_to_exclude.each { |f| cfgs << f.gsub(%r{^/}, '') }
24
+ end
22
25
  tar_options = {
23
26
  :overwrite => true,
24
27
  :listed_incremental => '/dev/null',
25
28
  :command => 'extract',
26
29
  :directory => '/',
27
30
  :archive => backup.file_map[:config_files][:path],
28
- :gzip => true
31
+ :gzip => true,
32
+ :exclude => exclude
29
33
  }
30
34
 
31
35
  feature(:tar).run(tar_options)
@@ -35,5 +35,11 @@ module ForemanMaintain
35
35
  def config_files
36
36
  []
37
37
  end
38
+
39
+ # list of config files to be excluded from the list of config files.
40
+ # Can be used to exclude subdir from whole config directory
41
+ def config_files_to_exclude
42
+ []
43
+ end
38
44
  end
39
45
  end
@@ -66,6 +66,11 @@ module ForemanMaintain::PackageManager
66
66
  raise NotImplementedError
67
67
  end
68
68
 
69
+ # list all files not owned by installed package
70
+ def files_not_owned_by_package(directory)
71
+ raise NotImplementedError
72
+ end
73
+
69
74
  private
70
75
 
71
76
  def sys
@@ -102,6 +102,11 @@ module ForemanMaintain::PackageManager
102
102
  yum_action('clean', 'all')
103
103
  end
104
104
 
105
+ def files_not_owned_by_package(directory)
106
+ find_cmd = "find #{directory} -exec /bin/sh -c 'rpm -qf {} &> /dev/null || echo {}' \\;"
107
+ sys.execute(find_cmd).split("\n")
108
+ end
109
+
105
110
  private
106
111
 
107
112
  def versionlock_config
@@ -31,6 +31,7 @@ module ForemanMaintain
31
31
  @scenarios.each do |scenario|
32
32
  run_scenario(scenario)
33
33
  next unless @quit
34
+
34
35
  if @rescue_scenario
35
36
  logger.debug('=== Rescue scenario found. Executing ===')
36
37
  execute_scenario_steps(@rescue_scenario, true)
@@ -60,6 +61,7 @@ module ForemanMaintain
60
61
 
61
62
  def confirm_scenario(scenario)
62
63
  return unless @last_scenario
64
+
63
65
  decision = if @last_scenario.steps_with_error(:whitelisted => false).any? ||
64
66
  @last_scenario.steps_with_abort(:whitelisted => false).any?
65
67
  :quit
@@ -92,8 +94,9 @@ module ForemanMaintain
92
94
 
93
95
  def execute_scenario_steps(scenario, force = false)
94
96
  scenario.before_scenarios.flatten.each { |before_scenario| run_scenario(before_scenario) }
95
- confirm_scenario(scenario)
97
+ confirm_scenario(scenario) if @rescue_scenario
96
98
  return if !force && quit? # the before scenarios caused the stop of the execution
99
+
97
100
  @reporter.before_scenario_starts(scenario)
98
101
  run_steps(scenario, scenario.steps)
99
102
  @reporter.after_scenario_finishes(scenario)
@@ -1,3 +1,3 @@
1
1
  module ForemanMaintain
2
- VERSION = '0.4.5'.freeze
2
+ VERSION = '0.4.6'.freeze
3
3
  end
metadata CHANGED
@@ -1,97 +1,97 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: foreman_maintain
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.5
4
+ version: 0.4.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ivan Nečas
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-07-11 00:00:00.000000000 Z
11
+ date: 2019-08-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: clamp
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: highline
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: bundler
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ~>
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
47
  version: '1.3'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ~>
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '1.3'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: minitest
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - '>='
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - '>='
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: mocha
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - '>='
73
+ - - ">="
74
74
  - !ruby/object:Gem::Version
75
75
  version: '0'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - '>='
80
+ - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: rake
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - <
87
+ - - "<"
88
88
  - !ruby/object:Gem::Version
89
89
  version: 11.0.0
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - <
94
+ - - "<"
95
95
  - !ruby/object:Gem::Version
96
96
  version: 11.0.0
97
97
  description: Provides various features that helps keeping the Foreman/Satellite up
@@ -107,101 +107,41 @@ extra_rdoc_files:
107
107
  - LICENSE
108
108
  - README.md
109
109
  files:
110
+ - LICENSE
111
+ - README.md
110
112
  - bin/foreman-maintain
111
113
  - bin/foreman-maintain-complete
112
114
  - bin/foreman-maintain-rotate-tar
113
115
  - bin/passenger-recycler
114
- - lib/foreman_maintain/check.rb
115
- - lib/foreman_maintain/cli/advanced/procedure/abstract_by_tag_command.rb
116
- - lib/foreman_maintain/cli/advanced/procedure/abstract_procedure_command.rb
117
- - lib/foreman_maintain/cli/advanced/procedure/by_tag_command.rb
118
- - lib/foreman_maintain/cli/advanced/procedure/run_command.rb
119
- - lib/foreman_maintain/cli/advanced/procedure_command.rb
120
- - lib/foreman_maintain/cli/advanced/prebuild_bash_completion.rb
121
- - lib/foreman_maintain/cli/health_command.rb
122
- - lib/foreman_maintain/cli/upgrade_command.rb
123
- - lib/foreman_maintain/cli/advanced_command.rb
124
- - lib/foreman_maintain/cli/restore_command.rb
125
- - lib/foreman_maintain/cli/transform_clamp_options.rb
126
- - lib/foreman_maintain/cli/base.rb
127
- - lib/foreman_maintain/cli/maintenance_mode_command.rb
128
- - lib/foreman_maintain/cli/packages_command.rb
129
- - lib/foreman_maintain/cli/backup_command.rb
130
- - lib/foreman_maintain/cli/service_command.rb
131
- - lib/foreman_maintain/concerns/logger.rb
132
- - lib/foreman_maintain/concerns/scenario_metadata.rb
133
- - lib/foreman_maintain/concerns/hammer.rb
134
- - lib/foreman_maintain/concerns/reporter.rb
135
- - lib/foreman_maintain/concerns/base_database.rb
136
- - lib/foreman_maintain/concerns/finders.rb
137
- - lib/foreman_maintain/concerns/directory_marker.rb
138
- - lib/foreman_maintain/concerns/system_service.rb
139
- - lib/foreman_maintain/concerns/metadata.rb
140
- - lib/foreman_maintain/concerns/system_helpers.rb
141
- - lib/foreman_maintain/csv_parser.rb
142
- - lib/foreman_maintain/dependency_graph.rb
143
- - lib/foreman_maintain/procedure.rb
144
- - lib/foreman_maintain/reporter/cli_reporter.rb
145
- - lib/foreman_maintain/runner/stored_execution.rb
146
- - lib/foreman_maintain/runner/execution.rb
147
- - lib/foreman_maintain/top_level_modules.rb
148
- - lib/foreman_maintain/utils/curl_response.rb
149
- - lib/foreman_maintain/utils/disk/nil_device.rb
150
- - lib/foreman_maintain/utils/disk/stats.rb
151
- - lib/foreman_maintain/utils/disk/device.rb
152
- - lib/foreman_maintain/utils/disk/io_device.rb
153
- - lib/foreman_maintain/utils/backup.rb
154
- - lib/foreman_maintain/utils/bash.rb
155
- - lib/foreman_maintain/utils/disk.rb
156
- - lib/foreman_maintain/utils/facter.rb
157
- - lib/foreman_maintain/utils/hash_tools.rb
158
- - lib/foreman_maintain/utils/mongo_core.rb
159
- - lib/foreman_maintain/utils/service/abstract.rb
160
- - lib/foreman_maintain/utils/service/remote_db.rb
161
- - lib/foreman_maintain/utils/service/systemd.rb
162
- - lib/foreman_maintain/utils/system_helpers.rb
163
- - lib/foreman_maintain/utils/command_runner.rb
164
- - lib/foreman_maintain/utils/service.rb
165
- - lib/foreman_maintain/utils/response.rb
166
- - lib/foreman_maintain/yaml_storage.rb
167
- - lib/foreman_maintain/context.rb
168
- - lib/foreman_maintain/error.rb
169
- - lib/foreman_maintain/executable.rb
170
- - lib/foreman_maintain/feature.rb
171
- - lib/foreman_maintain/upgrade_runner.rb
172
- - lib/foreman_maintain/detector.rb
173
- - lib/foreman_maintain/core_ext.rb
174
- - lib/foreman_maintain/reporter.rb
175
- - lib/foreman_maintain/runner.rb
176
- - lib/foreman_maintain/scenario.rb
177
- - lib/foreman_maintain/cli.rb
178
- - lib/foreman_maintain/package_manager.rb
179
- - lib/foreman_maintain/package_manager/dnf.rb
180
- - lib/foreman_maintain/package_manager/base.rb
181
- - lib/foreman_maintain/package_manager/yum.rb
182
- - lib/foreman_maintain/param.rb
183
- - lib/foreman_maintain/version.rb
184
- - lib/foreman_maintain/config.rb
185
- - lib/foreman_maintain/utils.rb
186
- - lib/foreman_maintain.rb
187
- - definitions/checks/disk/available_space.rb
188
- - definitions/checks/disk/performance.rb
189
- - definitions/checks/foreman_proxy/verify_dhcp_config_syntax.rb
190
- - definitions/checks/foreman_tasks/invalid/check_old.rb
191
- - definitions/checks/foreman_tasks/invalid/check_pending_state.rb
192
- - definitions/checks/foreman_tasks/invalid/check_planning_state.rb
193
- - definitions/checks/foreman_tasks/not_running.rb
194
- - definitions/checks/foreman_tasks/not_paused.rb
116
+ - config/foreman-maintain.completion
117
+ - config/foreman_maintain.yml.example
118
+ - config/foreman_maintain.yml.packaging
119
+ - config/hammer.yml.example
120
+ - config/passenger-recycler.yaml
195
121
  - definitions/checks/backup/certs_tar_exist.rb
196
122
  - definitions/checks/backup/directory_ready.rb
197
123
  - definitions/checks/candlepin/db_up.rb
198
124
  - definitions/checks/candlepin/validate_db.rb
125
+ - definitions/checks/check_epel_repository.rb
126
+ - definitions/checks/check_hotfix_installed.rb
127
+ - definitions/checks/check_tmout.rb
128
+ - definitions/checks/disk/available_space.rb
129
+ - definitions/checks/disk/performance.rb
130
+ - definitions/checks/foreman/check_corrupted_roles.rb
131
+ - definitions/checks/foreman/check_duplicate_roles.rb
199
132
  - definitions/checks/foreman/db_up.rb
200
133
  - definitions/checks/foreman/puppet_class_duplicates.rb
201
- - definitions/checks/foreman/check_corrupted_roles.rb
202
134
  - definitions/checks/foreman_openscap/invalid_report_associations.rb
135
+ - definitions/checks/foreman_proxy/verify_dhcp_config_syntax.rb
136
+ - definitions/checks/foreman_tasks/invalid/check_old.rb
137
+ - definitions/checks/foreman_tasks/invalid/check_pending_state.rb
138
+ - definitions/checks/foreman_tasks/invalid/check_planning_state.rb
139
+ - definitions/checks/foreman_tasks/not_paused.rb
140
+ - definitions/checks/foreman_tasks/not_running.rb
141
+ - definitions/checks/maintenance_mode/check_consistency.rb
203
142
  - definitions/checks/mongo/db_up.rb
204
143
  - definitions/checks/mongo/tools_installed.rb
144
+ - definitions/checks/original_assets.rb
205
145
  - definitions/checks/puppet/provide_upgrade_guide.rb
206
146
  - definitions/checks/puppet/verify_no_empty_cacert_requests.rb
207
147
  - definitions/checks/remote_execution/verify_settings_file_already_exists.rb
@@ -209,67 +149,42 @@ files:
209
149
  - definitions/checks/repositories/validate.rb
210
150
  - definitions/checks/restore/validate_backup.rb
211
151
  - definitions/checks/restore/validate_hostname.rb
212
- - definitions/checks/system_registration.rb
213
152
  - definitions/checks/root_user.rb
214
- - definitions/checks/check_epel_repository.rb
215
- - definitions/checks/check_hotfix_installed.rb
216
- - definitions/checks/check_tmout.rb
217
- - definitions/checks/maintenance_mode/check_consistency.rb
218
- - definitions/checks/version_locking_enabled.rb
219
- - definitions/checks/yum_exclude.rb
220
153
  - definitions/checks/server_ping.rb
221
154
  - definitions/checks/services_up.rb
222
- - definitions/features/foreman_1_11_x.rb
155
+ - definitions/checks/system_registration.rb
156
+ - definitions/checks/version_locking_enabled.rb
157
+ - definitions/checks/yum_exclude.rb
158
+ - definitions/features/candlepin.rb
159
+ - definitions/features/candlepin_database.rb
160
+ - definitions/features/cron.rb
223
161
  - definitions/features/downstream.rb
224
- - definitions/features/upstream.rb
162
+ - definitions/features/foreman_1_11_x.rb
163
+ - definitions/features/foreman_1_7_x.rb
225
164
  - definitions/features/foreman_database.rb
226
- - definitions/features/foreman_proxy.rb
227
- - definitions/features/cron.rb
228
- - definitions/features/pulp.rb
229
- - definitions/features/candlepin.rb
230
165
  - definitions/features/foreman_openscap.rb
166
+ - definitions/features/foreman_proxy.rb
231
167
  - definitions/features/foreman_server.rb
232
168
  - definitions/features/foreman_tasks.rb
233
169
  - definitions/features/gofer.rb
170
+ - definitions/features/hammer.rb
234
171
  - definitions/features/installer.rb
235
- - definitions/features/katello.rb
236
- - definitions/features/candlepin_database.rb
237
- - definitions/features/foreman_1_7_x.rb
172
+ - definitions/features/instance.rb
238
173
  - definitions/features/iptables.rb
174
+ - definitions/features/katello.rb
239
175
  - definitions/features/mongo.rb
176
+ - definitions/features/package_manager.rb
177
+ - definitions/features/pulp.rb
240
178
  - definitions/features/puppet_server.rb
241
179
  - definitions/features/service.rb
242
- - definitions/features/tar.rb
243
- - definitions/features/package_manager.rb
244
180
  - definitions/features/sync_plans.rb
245
- - definitions/features/hammer.rb
246
- - definitions/features/instance.rb
247
181
  - definitions/features/system_repos.rb
248
- - definitions/procedures/foreman_tasks/ui_investigate.rb
249
- - definitions/procedures/foreman_tasks/fetch_tasks_status.rb
250
- - definitions/procedures/foreman_tasks/resume.rb
251
- - definitions/procedures/foreman_tasks/delete.rb
252
- - definitions/procedures/installer/upgrade.rb
253
- - definitions/procedures/packages/install.rb
254
- - definitions/procedures/packages/enable_version_locking.rb
255
- - definitions/procedures/packages/lock_versions.rb
256
- - definitions/procedures/packages/locking_status.rb
257
- - definitions/procedures/packages/unlock_versions.rb
258
- - definitions/procedures/packages/update.rb
259
- - definitions/procedures/repositories/setup.rb
260
- - definitions/procedures/repositories/disable.rb
261
- - definitions/procedures/sync_plans/disable.rb
262
- - definitions/procedures/sync_plans/enable.rb
263
- - definitions/procedures/crond/start.rb
264
- - definitions/procedures/crond/stop.rb
265
- - definitions/procedures/iptables/add_maintenance_mode_chain.rb
266
- - definitions/procedures/iptables/remove_maintenance_mode_chain.rb
267
- - definitions/procedures/passenger_recycler.rb
268
- - definitions/procedures/foreman_docker/remove_foreman_docker.rb
269
- - definitions/procedures/knowledge_base_article.rb
182
+ - definitions/features/tar.rb
183
+ - definitions/features/upstream.rb
270
184
  - definitions/procedures/backup/accessibility_confirmation.rb
271
185
  - definitions/procedures/backup/clean.rb
272
186
  - definitions/procedures/backup/compress_data.rb
187
+ - definitions/procedures/backup/config_files.rb
273
188
  - definitions/procedures/backup/metadata.rb
274
189
  - definitions/procedures/backup/offline/candlepin_db.rb
275
190
  - definitions/procedures/backup/offline/foreman_db.rb
@@ -277,55 +192,77 @@ files:
277
192
  - definitions/procedures/backup/online/candlepin_db.rb
278
193
  - definitions/procedures/backup/online/foreman_db.rb
279
194
  - definitions/procedures/backup/online/mongo.rb
280
- - definitions/procedures/backup/online/safety_confirmation.rb
281
195
  - definitions/procedures/backup/online/pg_global_objects.rb
196
+ - definitions/procedures/backup/online/safety_confirmation.rb
282
197
  - definitions/procedures/backup/prepare_directory.rb
198
+ - definitions/procedures/backup/pulp.rb
283
199
  - definitions/procedures/backup/snapshot/clean_mount.rb
200
+ - definitions/procedures/backup/snapshot/logical_volume_confirmation.rb
284
201
  - definitions/procedures/backup/snapshot/mount_base.rb
285
202
  - definitions/procedures/backup/snapshot/mount_candlepin_db.rb
286
203
  - definitions/procedures/backup/snapshot/mount_foreman_db.rb
287
- - definitions/procedures/backup/snapshot/prepare_mount.rb
288
- - definitions/procedures/backup/snapshot/logical_volume_confirmation.rb
289
204
  - definitions/procedures/backup/snapshot/mount_mongo.rb
290
205
  - definitions/procedures/backup/snapshot/mount_pulp.rb
291
- - definitions/procedures/backup/config_files.rb
292
- - definitions/procedures/backup/pulp.rb
206
+ - definitions/procedures/backup/snapshot/prepare_mount.rb
293
207
  - definitions/procedures/candlepin/delete_orphaned_records_from_env_content.rb
208
+ - definitions/procedures/crond/start.rb
209
+ - definitions/procedures/crond/stop.rb
210
+ - definitions/procedures/files/remove.rb
211
+ - definitions/procedures/foreman/apipie_cache.rb
212
+ - definitions/procedures/foreman/fix_corrupted_roles.rb
213
+ - definitions/procedures/foreman/remove_duplicate_obsolete_roles.rb
214
+ - definitions/procedures/foreman_docker/remove_foreman_docker.rb
294
215
  - definitions/procedures/foreman_openscap/invalid_report_associations.rb
216
+ - definitions/procedures/foreman_proxy/features.rb
217
+ - definitions/procedures/foreman_tasks/delete.rb
218
+ - definitions/procedures/foreman_tasks/fetch_tasks_status.rb
219
+ - definitions/procedures/foreman_tasks/resume.rb
220
+ - definitions/procedures/foreman_tasks/ui_investigate.rb
295
221
  - definitions/procedures/hammer_setup.rb
222
+ - definitions/procedures/installer/upgrade.rb
223
+ - definitions/procedures/iptables/add_maintenance_mode_chain.rb
224
+ - definitions/procedures/iptables/remove_maintenance_mode_chain.rb
225
+ - definitions/procedures/knowledge_base_article.rb
226
+ - definitions/procedures/maintenance_mode/is_enabled.rb
227
+ - definitions/procedures/packages/enable_version_locking.rb
228
+ - definitions/procedures/packages/install.rb
229
+ - definitions/procedures/packages/lock_versions.rb
230
+ - definitions/procedures/packages/locking_status.rb
231
+ - definitions/procedures/packages/unlock_versions.rb
232
+ - definitions/procedures/packages/update.rb
233
+ - definitions/procedures/passenger_recycler.rb
296
234
  - definitions/procedures/pulp/migrate.rb
235
+ - definitions/procedures/puppet/delete_empty_ca_cert_request_files.rb
297
236
  - definitions/procedures/remote_execution/remove_existing_settingsd.rb
237
+ - definitions/procedures/repositories/disable.rb
238
+ - definitions/procedures/repositories/setup.rb
298
239
  - definitions/procedures/restore/candlepin_dump.rb
240
+ - definitions/procedures/restore/configs.rb
299
241
  - definitions/procedures/restore/confirmation.rb
300
242
  - definitions/procedures/restore/drop_databases.rb
243
+ - definitions/procedures/restore/ensure_mongo_engine_matches.rb
301
244
  - definitions/procedures/restore/extract_files.rb
302
245
  - definitions/procedures/restore/foreman_dump.rb
246
+ - definitions/procedures/restore/installer_reset.rb
303
247
  - definitions/procedures/restore/mongo_dump.rb
304
248
  - definitions/procedures/restore/pg_global_objects.rb
305
249
  - definitions/procedures/restore/postgres_owner.rb
306
- - definitions/procedures/restore/configs.rb
307
- - definitions/procedures/restore/ensure_mongo_engine_matches.rb
308
- - definitions/procedures/restore/installer_reset.rb
309
250
  - definitions/procedures/selinux/set_file_security.rb
251
+ - definitions/procedures/service/base.rb
310
252
  - definitions/procedures/service/daemon_reload.rb
311
253
  - definitions/procedures/service/disable.rb
312
254
  - definitions/procedures/service/enable.rb
313
255
  - definitions/procedures/service/list.rb
256
+ - definitions/procedures/service/restart.rb
314
257
  - definitions/procedures/service/start.rb
315
- - definitions/procedures/service/stop.rb
316
258
  - definitions/procedures/service/status.rb
317
- - definitions/procedures/service/base.rb
318
- - definitions/procedures/service/restart.rb
319
- - definitions/procedures/foreman/fix_corrupted_roles.rb
320
- - definitions/procedures/foreman/apipie_cache.rb
321
- - definitions/procedures/maintenance_mode/is_enabled.rb
322
- - definitions/procedures/puppet/delete_empty_ca_cert_request_files.rb
323
- - definitions/procedures/foreman_proxy/features.rb
259
+ - definitions/procedures/service/stop.rb
260
+ - definitions/procedures/sync_plans/disable.rb
261
+ - definitions/procedures/sync_plans/enable.rb
262
+ - definitions/scenarios/backup.rb
263
+ - definitions/scenarios/maintenance_mode.rb
324
264
  - definitions/scenarios/restore.rb
325
265
  - definitions/scenarios/services.rb
326
- - definitions/scenarios/upgrade_to_satellite_6_6_z.rb
327
- - definitions/scenarios/maintenance_mode.rb
328
- - definitions/scenarios/version_locking.rb
329
266
  - definitions/scenarios/upgrade_to_satellite_6_2.rb
330
267
  - definitions/scenarios/upgrade_to_satellite_6_2_z.rb
331
268
  - definitions/scenarios/upgrade_to_satellite_6_3.rb
@@ -334,15 +271,82 @@ files:
334
271
  - definitions/scenarios/upgrade_to_satellite_6_4_z.rb
335
272
  - definitions/scenarios/upgrade_to_satellite_6_5.rb
336
273
  - definitions/scenarios/upgrade_to_satellite_6_5_z.rb
337
- - definitions/scenarios/backup.rb
338
274
  - definitions/scenarios/upgrade_to_satellite_6_6.rb
339
- - config/foreman-maintain.completion
340
- - config/foreman_maintain.yml.example
341
- - config/foreman_maintain.yml.packaging
342
- - config/hammer.yml.example
343
- - config/passenger-recycler.yaml
344
- - LICENSE
345
- - README.md
275
+ - definitions/scenarios/upgrade_to_satellite_6_6_z.rb
276
+ - definitions/scenarios/version_locking.rb
277
+ - lib/foreman_maintain.rb
278
+ - lib/foreman_maintain/check.rb
279
+ - lib/foreman_maintain/cli.rb
280
+ - lib/foreman_maintain/cli/advanced/prebuild_bash_completion.rb
281
+ - lib/foreman_maintain/cli/advanced/procedure/abstract_by_tag_command.rb
282
+ - lib/foreman_maintain/cli/advanced/procedure/abstract_procedure_command.rb
283
+ - lib/foreman_maintain/cli/advanced/procedure/by_tag_command.rb
284
+ - lib/foreman_maintain/cli/advanced/procedure/run_command.rb
285
+ - lib/foreman_maintain/cli/advanced/procedure_command.rb
286
+ - lib/foreman_maintain/cli/advanced_command.rb
287
+ - lib/foreman_maintain/cli/backup_command.rb
288
+ - lib/foreman_maintain/cli/base.rb
289
+ - lib/foreman_maintain/cli/health_command.rb
290
+ - lib/foreman_maintain/cli/maintenance_mode_command.rb
291
+ - lib/foreman_maintain/cli/packages_command.rb
292
+ - lib/foreman_maintain/cli/restore_command.rb
293
+ - lib/foreman_maintain/cli/service_command.rb
294
+ - lib/foreman_maintain/cli/transform_clamp_options.rb
295
+ - lib/foreman_maintain/cli/upgrade_command.rb
296
+ - lib/foreman_maintain/concerns/base_database.rb
297
+ - lib/foreman_maintain/concerns/directory_marker.rb
298
+ - lib/foreman_maintain/concerns/finders.rb
299
+ - lib/foreman_maintain/concerns/hammer.rb
300
+ - lib/foreman_maintain/concerns/logger.rb
301
+ - lib/foreman_maintain/concerns/metadata.rb
302
+ - lib/foreman_maintain/concerns/reporter.rb
303
+ - lib/foreman_maintain/concerns/scenario_metadata.rb
304
+ - lib/foreman_maintain/concerns/system_helpers.rb
305
+ - lib/foreman_maintain/concerns/system_service.rb
306
+ - lib/foreman_maintain/config.rb
307
+ - lib/foreman_maintain/context.rb
308
+ - lib/foreman_maintain/core_ext.rb
309
+ - lib/foreman_maintain/csv_parser.rb
310
+ - lib/foreman_maintain/dependency_graph.rb
311
+ - lib/foreman_maintain/detector.rb
312
+ - lib/foreman_maintain/error.rb
313
+ - lib/foreman_maintain/executable.rb
314
+ - lib/foreman_maintain/feature.rb
315
+ - lib/foreman_maintain/package_manager.rb
316
+ - lib/foreman_maintain/package_manager/base.rb
317
+ - lib/foreman_maintain/package_manager/dnf.rb
318
+ - lib/foreman_maintain/package_manager/yum.rb
319
+ - lib/foreman_maintain/param.rb
320
+ - lib/foreman_maintain/procedure.rb
321
+ - lib/foreman_maintain/reporter.rb
322
+ - lib/foreman_maintain/reporter/cli_reporter.rb
323
+ - lib/foreman_maintain/runner.rb
324
+ - lib/foreman_maintain/runner/execution.rb
325
+ - lib/foreman_maintain/runner/stored_execution.rb
326
+ - lib/foreman_maintain/scenario.rb
327
+ - lib/foreman_maintain/top_level_modules.rb
328
+ - lib/foreman_maintain/upgrade_runner.rb
329
+ - lib/foreman_maintain/utils.rb
330
+ - lib/foreman_maintain/utils/backup.rb
331
+ - lib/foreman_maintain/utils/bash.rb
332
+ - lib/foreman_maintain/utils/command_runner.rb
333
+ - lib/foreman_maintain/utils/curl_response.rb
334
+ - lib/foreman_maintain/utils/disk.rb
335
+ - lib/foreman_maintain/utils/disk/device.rb
336
+ - lib/foreman_maintain/utils/disk/io_device.rb
337
+ - lib/foreman_maintain/utils/disk/nil_device.rb
338
+ - lib/foreman_maintain/utils/disk/stats.rb
339
+ - lib/foreman_maintain/utils/facter.rb
340
+ - lib/foreman_maintain/utils/hash_tools.rb
341
+ - lib/foreman_maintain/utils/mongo_core.rb
342
+ - lib/foreman_maintain/utils/response.rb
343
+ - lib/foreman_maintain/utils/service.rb
344
+ - lib/foreman_maintain/utils/service/abstract.rb
345
+ - lib/foreman_maintain/utils/service/remote_db.rb
346
+ - lib/foreman_maintain/utils/service/systemd.rb
347
+ - lib/foreman_maintain/utils/system_helpers.rb
348
+ - lib/foreman_maintain/version.rb
349
+ - lib/foreman_maintain/yaml_storage.rb
346
350
  homepage: https://github.com/theforeman/foreman_maintain
347
351
  licenses:
348
352
  - GPL-3.0
@@ -353,17 +357,17 @@ require_paths:
353
357
  - lib
354
358
  required_ruby_version: !ruby/object:Gem::Requirement
355
359
  requirements:
356
- - - '>='
360
+ - - ">="
357
361
  - !ruby/object:Gem::Version
358
362
  version: '0'
359
363
  required_rubygems_version: !ruby/object:Gem::Requirement
360
364
  requirements:
361
- - - '>='
365
+ - - ">="
362
366
  - !ruby/object:Gem::Version
363
367
  version: '0'
364
368
  requirements: []
365
369
  rubyforge_project:
366
- rubygems_version: 2.0.14.1
370
+ rubygems_version: 2.7.10
367
371
  signing_key:
368
372
  specification_version: 4
369
373
  summary: Foreman maintenance tool belt