foreman_maintain 1.4.0 → 1.4.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/definitions/checks/check_hotfix_installed.rb +2 -3
  4. data/definitions/checks/disk/performance.rb +1 -2
  5. data/definitions/checks/package_manager/{yum/validate_yum_config.rb → dnf/validate_dnf_config.rb} +13 -11
  6. data/definitions/checks/repositories/check_upstream_repository.rb +1 -2
  7. data/definitions/features/installer.rb +8 -66
  8. data/definitions/features/instance.rb +0 -6
  9. data/definitions/procedures/backup/metadata.rb +5 -3
  10. data/definitions/procedures/backup/snapshot/snapshot_deprecation_message.rb +14 -0
  11. data/definitions/procedures/packages/check_for_reboot.rb +16 -0
  12. data/definitions/procedures/packages/installer_confirmation.rb +1 -1
  13. data/definitions/procedures/packages/update.rb +3 -3
  14. data/definitions/scenarios/backup.rb +10 -8
  15. data/definitions/scenarios/puppet.rb +0 -3
  16. data/definitions/scenarios/self_upgrade.rb +4 -6
  17. data/definitions/scenarios/upgrade_to_capsule_6_15.rb +2 -2
  18. data/definitions/scenarios/upgrade_to_capsule_6_15_z.rb +2 -2
  19. data/definitions/scenarios/upgrade_to_katello_nightly.rb +1 -1
  20. data/definitions/scenarios/upgrade_to_satellite_6_15.rb +2 -2
  21. data/definitions/scenarios/upgrade_to_satellite_6_15_z.rb +2 -2
  22. data/extras/foreman_protector/foreman-protector.conf +1 -1
  23. data/extras/foreman_protector/foreman-protector.whitelist +16 -0
  24. data/lib/foreman_maintain/cli/backup_command.rb +1 -1
  25. data/lib/foreman_maintain/concerns/base_database.rb +0 -41
  26. data/lib/foreman_maintain/concerns/system_helpers.rb +2 -2
  27. data/lib/foreman_maintain/config.rb +5 -1
  28. data/lib/foreman_maintain/package_manager/dnf.rb +138 -11
  29. data/lib/foreman_maintain/package_manager.rb +0 -1
  30. data/lib/foreman_maintain/repository_manager/el.rb +2 -2
  31. data/lib/foreman_maintain/version.rb +1 -1
  32. metadata +9 -17
  33. data/definitions/checks/backup/directory_ready.rb +0 -23
  34. data/definitions/checks/check_for_newer_packages.rb +0 -67
  35. data/definitions/checks/foreman/check_checkpoint_segments.rb +0 -59
  36. data/definitions/checks/foreman/check_duplicate_roles.rb +0 -42
  37. data/definitions/checks/foreman/puppet_class_duplicates.rb +0 -48
  38. data/definitions/checks/original_assets.rb +0 -23
  39. data/definitions/procedures/foreman/apipie_cache.rb +0 -12
  40. data/definitions/procedures/foreman_docker/remove_foreman_docker.rb +0 -16
  41. data/extras/foreman_protector/yum/foreman-protector.py +0 -86
  42. data/lib/foreman_maintain/package_manager/yum.rb +0 -142
@@ -64,7 +64,11 @@ module ForemanMaintain
64
64
  end
65
65
 
66
66
  def config_file_path
67
- File.exist?(CONFIG_FILE) ? CONFIG_FILE : File.join(source_path, 'config/foreman_maintain.yml')
67
+ if defined?(CONFIG_FILE) && File.exist?(CONFIG_FILE)
68
+ CONFIG_FILE
69
+ else
70
+ File.join(source_path, 'config/foreman_maintain.yml')
71
+ end
68
72
  end
69
73
 
70
74
  def source_path
@@ -1,14 +1,100 @@
1
1
  module ForemanMaintain::PackageManager
2
- class Dnf < Yum
3
- def clean_cache(assumeyes: false)
4
- dnf_action('clean', 'all', :assumeyes => assumeyes)
5
- super
2
+ class Dnf < Base
3
+ PROTECTOR_CONFIG_FILE = '/etc/dnf/plugins/foreman-protector.conf'.freeze
4
+ PROTECTOR_WHITELIST_FILE = '/etc/dnf/plugins/foreman-protector.whitelist'.freeze
5
+
6
+ def self.parse_envra(envra)
7
+ # envra format: 0:foreman-1.20.1.10-1.el7sat.noarch
8
+ parsed = envra.match(/\d*:?(?<name>.*)-[^-]+-[^-]+\.[^.]+/)
9
+ parsed ? Hash[parsed.names.map(&:to_sym).zip(parsed.captures)].merge(:envra => envra) : nil
10
+ end
11
+
12
+ def lock_versions
13
+ enable_protector
14
+ end
15
+
16
+ def unlock_versions
17
+ disable_protector
18
+ end
19
+
20
+ def versions_locked?
21
+ !!(protector_config =~ /^\s*enabled\s*=\s*1/) &&
22
+ protector_whitelist_file_nonzero?
23
+ end
24
+
25
+ def protector_whitelist_file_nonzero?
26
+ File.exist?(PROTECTOR_WHITELIST_FILE) &&
27
+ !File.zero?(PROTECTOR_WHITELIST_FILE)
6
28
  end
7
29
 
8
30
  def version_locking_supported?
9
31
  true
10
32
  end
11
33
 
34
+ def installed?(packages)
35
+ packages_list = [packages].flatten(1).map { |pkg| "'#{pkg}'" }.join(' ')
36
+ sys.execute?(%(rpm -q #{packages_list}))
37
+ end
38
+
39
+ def find_installed_package(name, queryformat = '')
40
+ rpm_cmd = "rpm -q '#{name}'"
41
+ unless queryformat.empty?
42
+ rpm_cmd += " --qf '#{queryformat}'"
43
+ end
44
+ status, result = sys.execute_with_status(rpm_cmd, interactive: false)
45
+ if status == 0
46
+ result
47
+ end
48
+ end
49
+
50
+ def install(packages, assumeyes: false)
51
+ dnf_action('install', packages, assumeyes: assumeyes)
52
+ end
53
+
54
+ def reinstall(packages, assumeyes: false)
55
+ dnf_action('reinstall', packages, assumeyes: assumeyes)
56
+ end
57
+
58
+ def remove(packages, assumeyes: false)
59
+ dnf_action('remove', packages, assumeyes: assumeyes)
60
+ end
61
+
62
+ def update(packages = [], assumeyes: false, dnf_options: [])
63
+ dnf_action('update', packages, assumeyes: assumeyes, dnf_options: dnf_options)
64
+ end
65
+
66
+ def check_update(packages: nil, with_status: false)
67
+ dnf_action(
68
+ 'check-update',
69
+ packages,
70
+ assumeyes: true,
71
+ valid_exit_statuses: [0, 100],
72
+ with_status: with_status
73
+ )
74
+ end
75
+
76
+ def update_available?(package)
77
+ cmd_output = dnf_action('check-update -q', package, with_status: true, assumeyes: false)
78
+ cmd_output[0] == 100
79
+ end
80
+
81
+ def files_not_owned_by_package(directory)
82
+ find_cmd = "find #{directory} -exec /bin/sh -c 'rpm -qf {} &> /dev/null || echo {}' \\;"
83
+ sys.execute(find_cmd).split("\n")
84
+ end
85
+
86
+ def list_installed_packages(queryformat = '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n')
87
+ # The queryformat should only include valid tag(s) as per `rpm --querytags` list.
88
+ # If any special formatting is required with querytag then it should be provided with tag i.e,
89
+ # "--%{VENDOR}"
90
+ # The queryformat string must end with '\n'
91
+ sys.execute!("rpm -qa --qf '#{queryformat}'").split("\n")
92
+ end
93
+
94
+ def clean_cache(assumeyes: false)
95
+ dnf_action('clean', 'all', :assumeyes => assumeyes)
96
+ end
97
+
12
98
  def module_enabled?(name)
13
99
  _status, result = info(name)
14
100
  result.match?(/Stream.+\[e\].+/)
@@ -29,18 +115,59 @@ module ForemanMaintain::PackageManager
29
115
 
30
116
  private
31
117
 
32
- def dnf_action(action, packages, with_status: false, assumeyes: false)
118
+ # rubocop:disable Metrics/LineLength, Metrics/ParameterLists
119
+ def dnf_action(action, packages, with_status: false, assumeyes: false, dnf_options: [], valid_exit_statuses: [0])
33
120
  packages = [packages].flatten(1)
34
- yum_options = []
35
- yum_options << '-y' if assumeyes
121
+
122
+ dnf_options << '-y' if assumeyes
123
+ dnf_options << '--disableplugin=foreman-protector'
124
+
125
+ command = ['dnf', dnf_options.join(' '), action]
126
+
127
+ command.push(packages.join(' ')) unless packages.empty?
128
+ command = command.join(' ')
129
+
36
130
  if with_status
37
- sys.execute_with_status("dnf #{yum_options.join(' ')} #{action} #{packages.join(' ')}",
38
- :interactive => !assumeyes)
131
+ sys.execute_with_status(
132
+ command,
133
+ :interactive => !assumeyes
134
+ )
39
135
  else
40
- sys.execute!("dnf #{yum_options.join(' ')} #{action} #{packages.join(' ')}",
41
- :interactive => !assumeyes)
136
+ sys.execute!(
137
+ command,
138
+ :interactive => !assumeyes,
139
+ :valid_exit_statuses => valid_exit_statuses
140
+ )
141
+ end
142
+ end
143
+ # rubocop:enable Metrics/LineLength, Metrics/ParameterLists
42
144
 
145
+ def protector_config
146
+ File.exist?(protector_config_file) ? File.read(protector_config_file) : ''
147
+ end
148
+
149
+ def protector_config_file
150
+ PROTECTOR_CONFIG_FILE
151
+ end
152
+
153
+ def enable_protector
154
+ setup_protector(true)
155
+ end
156
+
157
+ def disable_protector
158
+ setup_protector(false)
159
+ end
160
+
161
+ def setup_protector(enabled)
162
+ config = protector_config
163
+ config += "\n" unless config[-1] == "\n"
164
+ enabled_re = /^\s*enabled\s*=.*$/
165
+ if enabled_re.match(config)
166
+ config = config.gsub(enabled_re, "enabled = #{enabled ? '1' : '0'}")
167
+ else
168
+ config += "enabled = #{enabled ? '1' : '0'}\n"
43
169
  end
170
+ File.open(protector_config_file, 'w') { |file| file.puts config }
44
171
  end
45
172
  end
46
173
  end
@@ -1,5 +1,4 @@
1
1
  require 'foreman_maintain/package_manager/base'
2
- require 'foreman_maintain/package_manager/yum'
3
2
  require 'foreman_maintain/package_manager/dnf'
4
3
  require 'foreman_maintain/package_manager/apt'
5
4
 
@@ -72,8 +72,8 @@ module ForemanMaintain::RepositoryManager
72
72
  entry.split(':', 2).last.strip
73
73
  end]
74
74
 
75
- # The EL7 yum repolist output includes extra info in the output,
76
- # as example
75
+ # repolist output includes extra info in the output
76
+ #
77
77
  # rhel-7-server-rpms/7Server/x86_64
78
78
  # rhel-server-rhscl-7-rpms/7Server/x86_64
79
79
  # This trims anything after first '/' to get correct repo label
@@ -1,3 +1,3 @@
1
1
  module ForemanMaintain
2
- VERSION = '1.4.0'.freeze
2
+ VERSION = '1.4.2'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: foreman_maintain
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.0
4
+ version: 1.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ivan Nečas
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-09-06 00:00:00.000000000 Z
11
+ date: 2023-10-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: clamp
@@ -158,9 +158,7 @@ files:
158
158
  - config/foreman_maintain.yml.packaging
159
159
  - config/hammer.yml.example
160
160
  - definitions/checks/backup/certs_tar_exist.rb
161
- - definitions/checks/backup/directory_ready.rb
162
161
  - definitions/checks/candlepin/db_up.rb
163
- - definitions/checks/check_for_newer_packages.rb
164
162
  - definitions/checks/check_hotfix_installed.rb
165
163
  - definitions/checks/check_tmout.rb
166
164
  - definitions/checks/disk/available_space.rb
@@ -168,15 +166,12 @@ files:
168
166
  - definitions/checks/disk/available_space_postgresql12.rb
169
167
  - definitions/checks/disk/performance.rb
170
168
  - definitions/checks/env_proxy.rb
171
- - definitions/checks/foreman/check_checkpoint_segments.rb
172
169
  - definitions/checks/foreman/check_corrupted_roles.rb
173
170
  - definitions/checks/foreman/check_duplicate_permission.rb
174
- - definitions/checks/foreman/check_duplicate_roles.rb
175
171
  - definitions/checks/foreman/check_puppet_capsules.rb
176
172
  - definitions/checks/foreman/check_tuning_requirements.rb
177
173
  - definitions/checks/foreman/db_up.rb
178
174
  - definitions/checks/foreman/facts_names.rb
179
- - definitions/checks/foreman/puppet_class_duplicates.rb
180
175
  - definitions/checks/foreman/validate_external_db_version.rb
181
176
  - definitions/checks/foreman_openscap/invalid_report_associations.rb
182
177
  - definitions/checks/foreman_proxy/check_tftp_storage.rb
@@ -188,8 +183,7 @@ files:
188
183
  - definitions/checks/foreman_tasks/not_running.rb
189
184
  - definitions/checks/maintenance_mode/check_consistency.rb
190
185
  - definitions/checks/non_rh_packages.rb
191
- - definitions/checks/original_assets.rb
192
- - definitions/checks/package_manager/yum/validate_yum_config.rb
186
+ - definitions/checks/package_manager/dnf/validate_dnf_config.rb
193
187
  - definitions/checks/pulpcore/db_up.rb
194
188
  - definitions/checks/puppet/verify_no_empty_cacert_requests.rb
195
189
  - definitions/checks/repositories/check_non_rh_repository.rb
@@ -256,14 +250,13 @@ files:
256
250
  - definitions/procedures/backup/snapshot/mount_pulp.rb
257
251
  - definitions/procedures/backup/snapshot/mount_pulpcore_db.rb
258
252
  - definitions/procedures/backup/snapshot/prepare_mount.rb
253
+ - definitions/procedures/backup/snapshot/snapshot_deprecation_message.rb
259
254
  - definitions/procedures/crond/start.rb
260
255
  - definitions/procedures/crond/stop.rb
261
256
  - definitions/procedures/files/remove.rb
262
- - definitions/procedures/foreman/apipie_cache.rb
263
257
  - definitions/procedures/foreman/fix_corrupted_roles.rb
264
258
  - definitions/procedures/foreman/remove_duplicate_obsolete_roles.rb
265
259
  - definitions/procedures/foreman/remove_duplicate_permissions.rb
266
- - definitions/procedures/foreman_docker/remove_foreman_docker.rb
267
260
  - definitions/procedures/foreman_maintain_features.rb
268
261
  - definitions/procedures/foreman_openscap/invalid_report_associations.rb
269
262
  - definitions/procedures/foreman_proxy/features.rb
@@ -280,6 +273,7 @@ files:
280
273
  - definitions/procedures/maintenance_mode/disable_maintenance_mode.rb
281
274
  - definitions/procedures/maintenance_mode/enable_maintenance_mode.rb
282
275
  - definitions/procedures/maintenance_mode/is_enabled.rb
276
+ - definitions/procedures/packages/check_for_reboot.rb
283
277
  - definitions/procedures/packages/check_update.rb
284
278
  - definitions/procedures/packages/enable_modules.rb
285
279
  - definitions/procedures/packages/install.rb
@@ -342,7 +336,6 @@ files:
342
336
  - extras/foreman_protector/dnf/foreman-protector.py
343
337
  - extras/foreman_protector/foreman-protector.conf
344
338
  - extras/foreman_protector/foreman-protector.whitelist
345
- - extras/foreman_protector/yum/foreman-protector.py
346
339
  - lib/foreman_maintain.rb
347
340
  - lib/foreman_maintain/check.rb
348
341
  - lib/foreman_maintain/cli.rb
@@ -397,7 +390,6 @@ files:
397
390
  - lib/foreman_maintain/package_manager/apt.rb
398
391
  - lib/foreman_maintain/package_manager/base.rb
399
392
  - lib/foreman_maintain/package_manager/dnf.rb
400
- - lib/foreman_maintain/package_manager/yum.rb
401
393
  - lib/foreman_maintain/param.rb
402
394
  - lib/foreman_maintain/procedure.rb
403
395
  - lib/foreman_maintain/reporter.rb
@@ -433,7 +425,7 @@ homepage: https://github.com/theforeman/foreman_maintain
433
425
  licenses:
434
426
  - GPL-3.0
435
427
  metadata: {}
436
- post_install_message:
428
+ post_install_message:
437
429
  rdoc_options: []
438
430
  require_paths:
439
431
  - lib
@@ -451,8 +443,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
451
443
  - !ruby/object:Gem::Version
452
444
  version: '0'
453
445
  requirements: []
454
- rubygems_version: 3.4.10
455
- signing_key:
446
+ rubygems_version: 3.3.26
447
+ signing_key:
456
448
  specification_version: 4
457
449
  summary: Foreman maintenance tool belt
458
450
  test_files: []
@@ -1,23 +0,0 @@
1
- module Checks::Backup
2
- class DirectoryReady < ForemanMaintain::Check
3
- metadata do
4
- description 'Check if the directory exists and is writable'
5
- tags :backup
6
- manual_detection
7
- param :backup_dir, 'Directory where to backup to', :required => true
8
- param :preserve_dir, 'Directory where to backup to', :flag => true, :default => false
9
- param :postgres_access, 'Whether the postgres user needs access', :flag => true,
10
- :default => false
11
- end
12
-
13
- def run
14
- assert(File.directory?(@backup_dir), "Backup directory (#{@backup_dir}) does not exist.")
15
- if feature(:instance).postgresql_local? && @postgres_access
16
- result = system("runuser - postgres -c 'test -w #{@backup_dir}'")
17
- assert(result, "Postgres user needs write access to the backup directory \n" \
18
- "Please allow the postgres user write access to #{@backup_dir}" \
19
- ' or choose another directory.')
20
- end
21
- end
22
- end
23
- end
@@ -1,67 +0,0 @@
1
- class Checks::CheckForNewerPackages < ForemanMaintain::Check
2
- metadata do
3
- label :check_for_newer_packages
4
- description 'Check for newer packages and optionally ask for confirmation if not found.'
5
-
6
- param :packages,
7
- 'package names to validate',
8
- :required => true
9
- param :manual_confirmation_version,
10
- 'Version of satellite to ask the user if they are on the latest minor release of.',
11
- :required => false
12
- manual_detection
13
- end
14
-
15
- def run
16
- check_for_package_update
17
- if @manual_confirmation_version
18
- question = 'Confirm that you are running the latest minor release of Satellite '\
19
- "#{@manual_confirmation_version}"
20
- answer = ask_decision(question, actions_msg: 'y(yes), q(quit)')
21
- abort! if answer != :yes
22
- end
23
- end
24
-
25
- def check_for_package_update
26
- exit_status, output = ForemanMaintain.package_manager.check_update(packages: @packages,
27
- with_status: true)
28
- packages_with_updates = []
29
- if exit_status == 100
30
- packages_with_updates = compare_pkg_versions(output).select do |_, result|
31
- result == -1
32
- end.keys
33
- end
34
-
35
- unless packages_with_updates.empty?
36
- command = ForemanMaintain.pkg_and_cmd_name[1]
37
- fail! 'Required updates for some packages detected.'\
38
- "\nPlease update to the latest #{@manual_confirmation_version}.z release "\
39
- 'before proceeding, using:'\
40
- "\n# #{command} upgrade run --target-version #{@manual_confirmation_version}.z"
41
- end
42
- end
43
-
44
- def packages_and_versions(output)
45
- pkgs_versions = {}
46
- pkg_details = output.split("\n\n")[1].split
47
- @packages.each do |pkg|
48
- pkg_details.each_with_index do |ele, index|
49
- next unless ele.start_with?(pkg)
50
- pkgs_versions[pkg] = version(pkg_details[index + 1].split('-').first)
51
- break
52
- end
53
- end
54
- pkgs_versions
55
- end
56
-
57
- def compare_pkg_versions(output)
58
- compare_pkg_versions = {}
59
- packages_and_versions = packages_and_versions(output)
60
- pkg_versions610 = { 'python3-pulp-2to3-migration' => version('0.12'),
61
- 'tfm-rubygem-katello' => version('4.1') }
62
- packages_and_versions.each do |name, version|
63
- compare_pkg_versions[name] = version.<=>(pkg_versions610[name])
64
- end
65
- compare_pkg_versions
66
- end
67
- end
@@ -1,59 +0,0 @@
1
- module Checks
2
- module Foreman
3
- class CheckpointSegments < ForemanMaintain::Check
4
- metadata do
5
- label :check_postgresql_checkpoint_segments
6
- description 'Check if checkpoint_segments configuration exists on the system'
7
- confine do
8
- feature(:foreman) && feature(:installer) &&
9
- File.exist?(feature(:installer).custom_hiera_file)
10
- end
11
- end
12
-
13
- def run
14
- failure_message = check_custom_hiera
15
- fail! failure_message if failure_message
16
- end
17
-
18
- # rubocop:disable Metrics/MethodLength
19
- def check_custom_hiera
20
- hiera_file = feature(:installer).custom_hiera_file
21
- begin
22
- config = YAML.load_file(hiera_file)
23
- if config.is_a?(Hash) && config.key?('postgresql::server::config_entries')
24
- if config['postgresql::server::config_entries'].nil?
25
- return <<-MESSAGE.strip_heredoc
26
- ERROR: 'postgresql::server::config_entries' cannot be null.
27
- Please remove it from following file and re-run the command.
28
- - #{hiera_file}
29
- MESSAGE
30
- elsif config['postgresql::server::config_entries'].key?('checkpoint_segments')
31
- message = <<-MESSAGE.strip_heredoc
32
- ERROR: Tuning option 'checkpoint_segments' found.
33
- This option is no longer valid for PostgreSQL 9.5 or newer.
34
- Please remove it from following file and re-run the command.
35
- - #{hiera_file}
36
- MESSAGE
37
- if feature(:katello)
38
- message += <<-MESSAGE.strip_heredoc
39
- The presence of checkpoint_segments in #{hiera_file} indicates manual tuning.
40
- Manual tuning can override values provided by the --tuning parameter.
41
- Review #{hiera_file} for values that are already provided by the built in tuning profiles.
42
- Built in tuning profiles also provide a supported upgrade path.
43
- MESSAGE
44
- end
45
- return message
46
- end
47
- elsif config.is_a?(String)
48
- fail! "Error: File #{hiera_file} is not a yaml file."
49
- exit 1
50
- end
51
- rescue Psych::SyntaxError
52
- fail! "Found syntax error in file: #{hiera_file}"
53
- exit 1
54
- end
55
- end
56
- # rubocop:enable Metrics/MethodLength
57
- end
58
- end
59
- end
@@ -1,42 +0,0 @@
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
@@ -1,48 +0,0 @@
1
- module Checks
2
- module Foreman
3
- class PuppetClassDuplicates < ForemanMaintain::Check
4
- metadata do
5
- label :puppet_class_duplicates
6
- for_feature :foreman_database
7
- description 'Check for duplicate Puppet class records'
8
- tags :pre_upgrade
9
- confine do
10
- check_max_version('foreman', '1.20')
11
- end
12
- end
13
-
14
- def run
15
- duplicate_names = find_duplicate_names
16
- assert(duplicate_names.empty?, duplicate_msg(duplicate_names))
17
- end
18
-
19
- private
20
-
21
- def duplicate_msg(duplicate_names)
22
- msg = "There are #{duplicate_names.count} Puppet classes with duplicities:\n"
23
- classes_list = duplicate_names.reduce('') do |memo, hash|
24
- memo.tap { |acc| acc << "#{hash['name']} - #{hash['name_count']}\n" }
25
- end
26
- help_msg = 'Please head over to Configure -> Classes'
27
- help_msg << " and make sure there is only 1 Puppet class record for each name.\n"
28
- [msg, classes_list, help_msg].join('')
29
- end
30
-
31
- def find_duplicate_names
32
- feature(:foreman_database).query(duplicate_names_query)
33
- end
34
-
35
- def duplicate_names_query
36
- <<-SQL
37
- SELECT name, name_count
38
- FROM (
39
- SELECT name, count(name) AS name_count
40
- FROM puppetclasses
41
- GROUP BY name
42
- ) AS puppetclass_counts
43
- WHERE name_count > 1
44
- SQL
45
- end
46
- end
47
- end
48
- end
@@ -1,23 +0,0 @@
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
- for_feature :foreman_server
6
- end
7
-
8
- ASSETS_DIR = '/var/lib/foreman/public/assets'.freeze
9
-
10
- def run
11
- custom_assets = []
12
- product_name = feature(:instance).product_name
13
- with_spinner('Checking for presence of non-original assets...') do
14
- custom_assets = package_manager.files_not_owned_by_package(ASSETS_DIR)
15
- logger.info("Non-original assets detected:\n" + custom_assets.join("\n"))
16
- end
17
- remove_files = Procedures::Files::Remove.new(:files => custom_assets, :assumeyes => true)
18
- assert(custom_assets.empty?,
19
- "Some assets not owned by #{product_name} were detected on the system.\n" \
20
- 'Possible conflicting versions can affect operation of the Web UI.',
21
- :next_steps => remove_files)
22
- end
23
- end
@@ -1,12 +0,0 @@
1
- module Procedures::Foreman
2
- class ApipieCache < ForemanMaintain::Procedure
3
- metadata do
4
- advanced_run false
5
- description 'Regenerate Apipie cache'
6
- end
7
-
8
- def run
9
- execute!('FOREMAN_APIPIE_LANGS=en foreman-rake apipie:cache')
10
- end
11
- end
12
- end
@@ -1,16 +0,0 @@
1
- module Procedures::ForemanDocker
2
- class RemoveForemanDocker < ForemanMaintain::Procedure
3
- metadata do
4
- advanced_run false
5
- description 'Drop foreman_docker plugin'
6
- confine do
7
- find_package(foreman_plugin_name('foreman_docker'))
8
- end
9
- end
10
-
11
- def run
12
- execute!('foreman-rake foreman_docker:cleanup')
13
- packages_action(:remove, foreman_plugin_name('foreman_docker'), :assumeyes => true)
14
- end
15
- end
16
- end