foreman_maintain 0.6.3 → 0.6.8

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.
Files changed (61) hide show
  1. checksums.yaml +4 -4
  2. data/definitions/checks/check_hotfix_installed.rb +2 -1
  3. data/definitions/checks/disk/performance.rb +9 -2
  4. data/definitions/checks/env_proxy.rb +13 -0
  5. data/definitions/checks/foreman/check_corrupted_roles.rb +14 -2
  6. data/definitions/checks/foreman_proxy/check_tftp_storage.rb +52 -0
  7. data/definitions/checks/repositories/check_non_rh_repository.rb +23 -0
  8. data/definitions/checks/repositories/check_upstream_repository.rb +2 -1
  9. data/definitions/checks/repositories/validate.rb +2 -1
  10. data/definitions/features/apache.rb +19 -0
  11. data/definitions/features/capsule.rb +2 -1
  12. data/definitions/features/dynflow_sidekiq.rb +1 -1
  13. data/definitions/features/foreman_proxy.rb +30 -5
  14. data/definitions/features/foreman_server.rb +10 -4
  15. data/definitions/features/puppet_server.rb +6 -2
  16. data/definitions/features/service.rb +10 -3
  17. data/definitions/procedures/backup/metadata.rb +2 -0
  18. data/definitions/procedures/backup/snapshot/logical_volume_confirmation.rb +1 -1
  19. data/definitions/procedures/content/switchover.rb +2 -1
  20. data/definitions/procedures/hammer_setup.rb +1 -1
  21. data/definitions/procedures/installer/run.rb +3 -1
  22. data/definitions/procedures/installer/upgrade.rb +6 -1
  23. data/definitions/procedures/packages/update.rb +1 -1
  24. data/definitions/procedures/restore/configs.rb +6 -0
  25. data/definitions/procedures/restore/regenerate_queues.rb +69 -0
  26. data/definitions/procedures/service/stop.rb +1 -1
  27. data/definitions/scenarios/backup.rb +1 -0
  28. data/definitions/scenarios/packages.rb +39 -14
  29. data/definitions/scenarios/restore.rb +17 -2
  30. data/definitions/scenarios/upgrade_to_capsule_6_8.rb +5 -1
  31. data/definitions/scenarios/upgrade_to_capsule_6_8_z.rb +5 -1
  32. data/definitions/scenarios/upgrade_to_satellite_6_2.rb +5 -1
  33. data/definitions/scenarios/upgrade_to_satellite_6_2_z.rb +5 -1
  34. data/definitions/scenarios/upgrade_to_satellite_6_3.rb +5 -1
  35. data/definitions/scenarios/upgrade_to_satellite_6_3_z.rb +5 -1
  36. data/definitions/scenarios/upgrade_to_satellite_6_4.rb +5 -1
  37. data/definitions/scenarios/upgrade_to_satellite_6_4_z.rb +5 -1
  38. data/definitions/scenarios/upgrade_to_satellite_6_5.rb +5 -1
  39. data/definitions/scenarios/upgrade_to_satellite_6_5_z.rb +5 -1
  40. data/definitions/scenarios/upgrade_to_satellite_6_6.rb +5 -1
  41. data/definitions/scenarios/upgrade_to_satellite_6_6_z.rb +5 -1
  42. data/definitions/scenarios/upgrade_to_satellite_6_7.rb +5 -1
  43. data/definitions/scenarios/upgrade_to_satellite_6_7_z.rb +5 -1
  44. data/definitions/scenarios/upgrade_to_satellite_6_8.rb +5 -1
  45. data/definitions/scenarios/upgrade_to_satellite_6_8_z.rb +5 -1
  46. data/lib/foreman_maintain.rb +27 -0
  47. data/lib/foreman_maintain/cli/restore_command.rb +2 -1
  48. data/lib/foreman_maintain/cli/upgrade_command.rb +10 -0
  49. data/lib/foreman_maintain/concerns/downstream.rb +9 -14
  50. data/lib/foreman_maintain/package_manager/dnf.rb +11 -5
  51. data/lib/foreman_maintain/package_manager/yum.rb +15 -5
  52. data/lib/foreman_maintain/reporter/cli_reporter.rb +3 -3
  53. data/lib/foreman_maintain/utils/backup.rb +4 -0
  54. data/lib/foreman_maintain/utils/facter.rb +1 -1
  55. data/lib/foreman_maintain/utils/service/abstract.rb +6 -0
  56. data/lib/foreman_maintain/version.rb +1 -1
  57. metadata +7 -6
  58. data/definitions/checks/check_epel_repository.rb +0 -21
  59. data/definitions/procedures/restore/regenerate_missing_queues.rb +0 -52
  60. data/definitions/scenarios/upgrade_to_capsule_6_7.rb +0 -84
  61. data/definitions/scenarios/upgrade_to_capsule_6_7_z.rb +0 -84
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ee3a3147fb6baeb783edbdcdfb4b595d50fbc6f7540c95f0f1d673bd87a53cf1
4
- data.tar.gz: 3586008b3cc66eb7733113144c0004cd9ce1553fe1b9d8f84e5126f5ddc2cadb
3
+ metadata.gz: db720ab5cd56f2afbb74ccd75c4f8a479f2a4547c419b3b0f7b6d937e4df475a
4
+ data.tar.gz: b97c27565dc68d5395c4b163486d3c2758de583faae7282934608d66d9230dd1
5
5
  SHA512:
6
- metadata.gz: e5df43e8cd8514d5489351ace62f2c37ff3558316faf2a9b475f4bd8eb5b624175dbb589ffef216df01feea18cb6a4592466afc8b32ccaca344c0280fafe99fb
7
- data.tar.gz: 3c03b1e96a98c2d5800d69633c0584e8cd5632c1c663039a556e8bb63cd8cf45623a57c325266c9e3323d740424c683f6d29d5b53dbd23465a5fb7de56ec7d32
6
+ metadata.gz: 155e47d65bd4d8d0355e6a60133ddf4a14dd2c2604dfa5e793412e7bb07d9eb9df457f91d889396fd42ed6c9abd0a8347b6ae18afa51428567d8dfddee698489
7
+ data.tar.gz: 52ca518f6fad0fa372d8a7a132858b4503580e016024996efdb06fda7eab4672fd23e9074c3127e15459606aab256ea6f7ff7538c57fe7f23ea2fb41b69f4c9e
@@ -4,7 +4,8 @@ class Checks::CheckHotfixInstalled < ForemanMaintain::Check
4
4
  description 'Check to verify if any hotfix installed on system'
5
5
  tags :pre_upgrade
6
6
  preparation_steps do
7
- Procedures::Packages::Install.new(:packages => %w[yum-utils])
7
+ [Checks::Repositories::CheckNonRhRepository.new,
8
+ Procedures::Packages::Install.new(:packages => %w[yum-utils])]
8
9
  end
9
10
 
10
11
  confine do
@@ -3,8 +3,15 @@ module Checks
3
3
  class Performance < ForemanMaintain::Check
4
4
  metadata do
5
5
  label :disk_performance
6
- tags :pre_upgrade
7
- preparation_steps { Procedures::Packages::Install.new(:packages => %w[fio]) }
6
+ preparation_steps do
7
+ if feature(:instance).downstream
8
+ [Checks::Repositories::CheckNonRhRepository.new,
9
+ Procedures::Packages::Install.new(:packages => %w[fio])]
10
+ else
11
+ [Procedures::Packages::Install.new(:packages => %w[fio])]
12
+ end
13
+ end
14
+
8
15
  confine do
9
16
  feature(:instance).pulp
10
17
  end
@@ -0,0 +1,13 @@
1
+ class Checks::EnvProxy < ForemanMaintain::Check
2
+ metadata do
3
+ label :env_proxy
4
+ tags :env_proxy
5
+ description 'Check to make sure no HTTP(S) proxy set in ENV'
6
+ end
7
+
8
+ def run
9
+ variables = %w[http_proxy https_proxy HTTP_PROXY HTTPS_PROXY]
10
+ has_proxy_set = true if variables.map { |variable| ENV[variable] }.compact.any?
11
+ assert(has_proxy_set, 'Global HTTP(S) proxy in environment (env) is set. Please unset first!')
12
+ end
13
+ end
@@ -14,14 +14,22 @@ module Checks
14
14
  def run
15
15
  items = find_filter_permissions
16
16
  assert(items.empty?,
17
- 'There are user roles with inconsistent filters',
17
+ error_message(items),
18
18
  :next_steps => Procedures::Foreman::FixCorruptedRoles.new)
19
19
  end
20
20
 
21
+ def error_message(items)
22
+ roles = items.map { |item| item['role_name'] }.uniq
23
+ 'There are filters having permissions with multiple resource types. ' \
24
+ 'Roles with such filters are:' \
25
+ "\n#{roles.join("\n")}"
26
+ end
27
+
21
28
  def find_filter_permissions
22
29
  feature(:foreman_database).query(self.class.inconsistent_filter_perms)
23
30
  end
24
31
 
32
+ # rubocop:disable Metrics/MethodLength
25
33
  def self.inconsistent_filter_perms
26
34
  subquery = <<-SQL
27
35
  SELECT filters.id AS filter_id,
@@ -32,14 +40,17 @@ module Checks
32
40
  filterings.id AS filtering_id,
33
41
  permissions.id AS permission_id,
34
42
  permissions.name AS permission_name,
35
- permissions.resource_type
43
+ permissions.resource_type,
44
+ roles.name AS role_name
36
45
  FROM filters INNER JOIN filterings ON filters.id = filterings.filter_id
37
46
  INNER JOIN permissions ON permissions.id = filterings.permission_id
47
+ INNER JOIN roles ON filters.role_id = roles.id
38
48
  SQL
39
49
 
40
50
  <<-SQL
41
51
  SELECT DISTINCT first.filter_id,
42
52
  first.role_id,
53
+ first.role_name,
43
54
  first.filtering_id,
44
55
  first.permission_id,
45
56
  first.permission_name,
@@ -54,6 +65,7 @@ module Checks
54
65
  OR (first.resource_type != second.resource_type))
55
66
  SQL
56
67
  end
68
+ # rubocop:enable Metrics/MethodLength
57
69
  end
58
70
  end
59
71
  end
@@ -0,0 +1,52 @@
1
+ module Checks::ForemanProxy
2
+ class CheckTftpStorage < ForemanMaintain::Check
3
+ metadata do
4
+ label :check_tftp_storage
5
+ description 'Clean old Kernel and initramfs files from tftp-boot'
6
+ tags :default
7
+ confine do
8
+ feature(:satellite) && feature(:foreman_proxy) &&
9
+ feature(:foreman_proxy).features.include?('tftp') && non_zero_token_duration?
10
+ end
11
+ end
12
+
13
+ def run
14
+ if Dir.exist?(tftp_boot_directory)
15
+ files = old_files_from_tftp_boot
16
+ assert(files.empty?,
17
+ 'There are old initrd and vmlinuz files present in tftp',
18
+ :next_steps => Procedures::Files::Remove.new(:files => files))
19
+ else
20
+ skip "TFTP #{tftp_boot_directory} directory doesn't exist."
21
+ end
22
+ end
23
+
24
+ def old_files_from_tftp_boot
25
+ Dir.entries(tftp_boot_directory).map do |file|
26
+ unless File.directory?(file)
27
+ file_path = tftp_boot_directory + file
28
+ file_path if File.mtime(file_path) + (token_duration * 60) < Time.now
29
+ end
30
+ end.compact
31
+ end
32
+
33
+ def self.non_zero_token_duration?
34
+ lookup_token_duration != 0
35
+ end
36
+
37
+ def tftp_boot_directory
38
+ @tftp_boot_directory ||= "#{feature(:foreman_proxy).tftp_root_directory}/boot/"
39
+ end
40
+
41
+ def token_duration
42
+ @token_duration ||= self.class.lookup_token_duration
43
+ end
44
+
45
+ def self.lookup_token_duration
46
+ data = feature(:foreman_database). \
47
+ query("select s.value, s.default from settings s \
48
+ where category = 'Setting::Provisioning' and name = 'token_duration'")
49
+ YAML.load(data[0]['value'] || data[0]['default'])
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,23 @@
1
+ module Checks::Repositories
2
+ class CheckNonRhRepository < ForemanMaintain::Check
3
+ metadata do
4
+ label :check_non_redhat_repository
5
+ description 'Check whether system has any non Red Hat repositories (e.g.: EPEL) enabled'
6
+ tags :pre_upgrade
7
+ confine do
8
+ feature(:instance).downstream
9
+ end
10
+ end
11
+
12
+ def run
13
+ with_spinner('Checking repositories enabled on the system') do
14
+ assert(!epel_enabled?, 'System is subscribed to non Red Hat repositories')
15
+ end
16
+ end
17
+
18
+ def epel_enabled?
19
+ system_repos = execute("yum repolist enabled -d 6 -e 0| grep -E 'Repo-baseurl|Repo-id'")
20
+ system_repos.to_s.match(/\bepel\b/i)
21
+ end
22
+ end
23
+ end
@@ -4,7 +4,8 @@ class Checks::CheckUpstreamRepository < ForemanMaintain::Check
4
4
  description 'Check if any upstream repositories are enabled on system'
5
5
  tags :pre_upgrade
6
6
  preparation_steps do
7
- Procedures::Packages::Install.new(:packages => %w[yum-utils])
7
+ [Checks::Repositories::CheckNonRhRepository.new,
8
+ Procedures::Packages::Install.new(:packages => %w[yum-utils])]
8
9
  end
9
10
  confine do
10
11
  feature(:instance).downstream
@@ -3,7 +3,8 @@ module Checks::Repositories
3
3
  metadata do
4
4
  description 'Validate availability of repositories'
5
5
  preparation_steps do
6
- Procedures::Packages::Install.new(:packages => [ForemanMaintain::Utils::Facter.package])
6
+ [Checks::Repositories::CheckNonRhRepository.new,
7
+ Procedures::Packages::Install.new(:packages => [ForemanMaintain::Utils::Facter.package])]
7
8
  end
8
9
 
9
10
  confine do
@@ -0,0 +1,19 @@
1
+ class Features::Apache < ForemanMaintain::Feature
2
+ metadata do
3
+ label :apache
4
+
5
+ confine do
6
+ find_package('httpd')
7
+ end
8
+ end
9
+
10
+ def services
11
+ [
12
+ system_service('httpd', 30)
13
+ ]
14
+ end
15
+
16
+ def config_files
17
+ ['/etc/httpd']
18
+ end
19
+ end
@@ -5,7 +5,8 @@ class Features::Capsule < ForemanMaintain::Feature
5
5
  label :capsule
6
6
 
7
7
  confine do
8
- package_manager.installed?(['satellite-capsule']) ||
8
+ !package_manager.installed?(['satellite']) &&
9
+ package_manager.installed?(['satellite-capsule']) ||
9
10
  package_manager.installed?(['capsule-installer'])
10
11
  end
11
12
  end
@@ -13,7 +13,7 @@ class Features::DynflowSidekiq < ForemanMaintain::Feature
13
13
 
14
14
  def config_files
15
15
  # Workaround until foreman-installer can deploy scaled workers
16
- service_symlinks = configured_services.map do |service|
16
+ service_symlinks = configured_instances.map do |service|
17
17
  "/etc/systemd/system/multi-user.target.wants/#{service}.service"
18
18
  end
19
19
  [
@@ -12,6 +12,9 @@ class Features::ForemanProxy < ForemanMaintain::Feature
12
12
  FOREMAN_PROXY_DHCP_YML_PATHS = ['/etc/foreman-proxy/settings.d/dhcp.yml',
13
13
  '/usr/local/etc/foreman-proxy/settings.d/dhcp.yml'].freeze
14
14
 
15
+ FOREMAN_PROXY_TFTP_YML_PATHS = ['/etc/foreman-proxy/settings.d/tftp.yml',
16
+ '/usr/local/etc/foreman-proxy/settings.d/tftp.yml'].freeze
17
+
15
18
  def valid_dhcp_configs?
16
19
  dhcp_req_pass? && !syntax_error_exists?
17
20
  end
@@ -66,7 +69,7 @@ class Features::ForemanProxy < ForemanMaintain::Feature
66
69
 
67
70
  configs.push('/var/lib/tftpboot') if backup_features.include?('tftp')
68
71
  configs += ['/var/named/', '/etc/named*'] if backup_features.include?('dns')
69
- if backup_features.include?('dhcp')
72
+ if backup_features.include?('dhcp') && dhcp_isc_provider?
70
73
  configs += ['/var/lib/dhcpd', File.dirname(dhcpd_config_file)]
71
74
  end
72
75
  configs.push('/usr/share/xml/scap') if backup_features.include?('openscap')
@@ -113,6 +116,10 @@ class Features::ForemanProxy < ForemanMaintain::Feature
113
116
  @dhcpd_config_file ||= lookup_dhcpd_config_file
114
117
  end
115
118
 
119
+ def tftp_root_directory
120
+ @tftp_root_directory ||= lookup_tftp_root_directory
121
+ end
122
+
116
123
  private
117
124
 
118
125
  def backup_features(for_features)
@@ -209,11 +216,22 @@ class Features::ForemanProxy < ForemanMaintain::Feature
209
216
  dhcpd_config_file
210
217
  end
211
218
 
212
- def lookup_using_dhcp_yml
213
- dhcp_yml_path = lookup_into(FOREMAN_PROXY_DHCP_YML_PATHS)
214
- raise "Couldn't find dhcp.yml file under foreman-proxy" unless dhcp_yml_path
219
+ def dhcp_yml_path
220
+ dhcp_path = lookup_into(FOREMAN_PROXY_DHCP_YML_PATHS)
221
+ raise "Couldn't find dhcp.yml file under foreman-proxy" unless dhcp_path
222
+
223
+ dhcp_path
224
+ end
225
+
226
+ def configs_from_dhcp_yml
227
+ @configs_from_dhcp_yml ||= yaml_load(dhcp_yml_path)
228
+ end
229
+
230
+ def dhcp_isc_provider?
231
+ configs_from_dhcp_yml[:use_provider] == 'dhcp_isc'
232
+ end
215
233
 
216
- configs_from_dhcp_yml = yaml_load(dhcp_yml_path)
234
+ def lookup_using_dhcp_yml
217
235
  if configs_from_dhcp_yml.key?(:dhcp_config)
218
236
  return configs_from_dhcp_yml[:dhcp_config]
219
237
  elsif configs_from_dhcp_yml.key?(:use_provider)
@@ -226,6 +244,13 @@ class Features::ForemanProxy < ForemanMaintain::Feature
226
244
  end
227
245
  end
228
246
 
247
+ def lookup_tftp_root_directory
248
+ tftp_yml_path = lookup_into(FOREMAN_PROXY_TFTP_YML_PATHS)
249
+ raise "Couldn't find tftp.yml file under foreman-proxy" unless tftp_yml_path
250
+
251
+ yaml_load(tftp_yml_path)[:tftproot]
252
+ end
253
+
229
254
  def yaml_load(path)
230
255
  YAML.load_file(path) || {}
231
256
  end
@@ -9,9 +9,11 @@ module ForemanMaintain
9
9
  end
10
10
 
11
11
  def services
12
- [
13
- system_service('httpd', 30)
14
- ]
12
+ if execute?('systemctl is-enabled foreman')
13
+ [system_service('foreman', 30, :socket => 'foreman')]
14
+ else
15
+ [system_service('httpd', 30)]
16
+ end
15
17
  end
16
18
 
17
19
  def plugins
@@ -26,7 +28,7 @@ module ForemanMaintain
26
28
  def config_files
27
29
  [
28
30
  '/etc/httpd',
29
- '/var/www/html/pub',
31
+ '/var/www/html/pub/katello-*',
30
32
  '/etc/squid',
31
33
  '/etc/foreman',
32
34
  '/etc/selinux/targeted/contexts/files/file_contexts.subs',
@@ -41,6 +43,10 @@ module ForemanMaintain
41
43
  '/var/lib/foreman/public'
42
44
  ]
43
45
  end
46
+
47
+ def services_running?
48
+ services.all?(&:running?)
49
+ end
44
50
  end
45
51
  end
46
52
  end
@@ -29,7 +29,7 @@ class Features::PuppetServer < ForemanMaintain::Feature
29
29
  end
30
30
 
31
31
  def puppet_version
32
- version(execute!('puppet --version'))
32
+ version(execute!("#{puppet_path} --version"))
33
33
  end
34
34
 
35
35
  def find_empty_cacert_request_files
@@ -56,6 +56,10 @@ class Features::PuppetServer < ForemanMaintain::Feature
56
56
  end
57
57
 
58
58
  def puppet_ssldir_path
59
- execute!('puppet master --configprint ssldir')
59
+ execute!("#{puppet_path} config print ssldir")
60
+ end
61
+
62
+ def puppet_path
63
+ '/opt/puppetlabs/bin/puppet'
60
64
  end
61
65
  end
@@ -27,7 +27,7 @@ class Features::Service < ForemanMaintain::Feature
27
27
  end
28
28
 
29
29
  def filtered_services(options)
30
- service_list = existing_services
30
+ service_list = include_unregistered_services(existing_services, options[:include])
31
31
  service_list = filter_services(service_list, options)
32
32
  raise 'No services found matching your parameters' unless service_list.any?
33
33
 
@@ -99,9 +99,14 @@ class Features::Service < ForemanMaintain::Feature
99
99
  %w[start stop restart status enable disable].include?(action)
100
100
  end
101
101
 
102
- def filter_services(service_list, options)
103
- service_list = include_unregistered_services(service_list, options[:include])
102
+ def extend_service_list_with_sockets(service_list, options)
103
+ return service_list unless options[:include_sockets]
104
+
105
+ socket_list = service_list.map(&:socket).compact.select(&:exist?)
106
+ service_list + socket_list
107
+ end
104
108
 
109
+ def filter_services(service_list, options)
105
110
  if options[:only] && options[:only].any?
106
111
  service_list = service_list.select do |service|
107
112
  options[:only].any? { |opt| service.matches?(opt) }
@@ -112,6 +117,8 @@ class Features::Service < ForemanMaintain::Feature
112
117
  if options[:exclude] && options[:exclude].any?
113
118
  service_list = service_list.reject { |service| options[:exclude].include?(service.name) }
114
119
  end
120
+
121
+ service_list = extend_service_list_with_sockets(service_list, options)
115
122
  service_list.sort
116
123
  end
117
124
 
@@ -6,6 +6,7 @@ module Procedures::Backup
6
6
  preparation_steps { Checks::Foreman::DBUp.new if feature(:foreman_server) }
7
7
  param :backup_dir, 'Directory where to backup to', :required => true
8
8
  param :incremental_dir, 'Changes since specified backup only'
9
+ param :online_backup, 'Select for online backup', :flag => true, :default => false
9
10
  end
10
11
 
11
12
  def run
@@ -16,6 +17,7 @@ module Procedures::Backup
16
17
  metadata['proxy_features'] = proxy_feature_list(spinner) || []
17
18
  metadata['rpms'] = rpms(spinner)
18
19
  metadata['incremental'] = @incremental_dir || false
20
+ metadata['online'] = @online_backup
19
21
  save_metadata(metadata, spinner)
20
22
  end
21
23
  end
@@ -12,7 +12,7 @@ module Procedures::Backup
12
12
  backup_lv = get_lv_info(@backup_dir)
13
13
 
14
14
  dbs = {}
15
- dbs[:pulp] = 'Pulp' if feature(:pulp2) && !@skip_pulp
15
+ dbs[:pulp2] = 'Pulp' if feature(:pulp2) && !@skip_pulp
16
16
  dbs[:mongo] = 'Mongo' if db_local?(:mongo)
17
17
  dbs[:candlepin_database] = 'Candlepin' if db_local?(:candlepin_database)
18
18
  dbs[:foreman_database] = 'Foreman' if db_local?(:foreman_database)
@@ -15,7 +15,8 @@ module Procedures::Content
15
15
  puts 'Re-running the installer to switch specified content over to pulp3'
16
16
  args = ['--foreman-proxy-content-proxy-pulp-isos-to-pulpcore=true',
17
17
  '--katello-use-pulp-2-for-file=false',
18
- '--katello-use-pulp-2-for-docker=false']
18
+ '--katello-use-pulp-2-for-docker=false',
19
+ '--katello-use-pulp-2-for-yum=false']
19
20
  feature(:installer).run(args.join(' '))
20
21
  end
21
22
  end
@@ -5,7 +5,7 @@ class Procedures::HammerSetup < ForemanMaintain::Procedure
5
5
  end
6
6
 
7
7
  def run
8
- if feature(:foreman_server) && ForemanMaintain::Utils.system_service('httpd', 30).running?
8
+ if feature(:foreman_server) && feature(:foreman_server).services_running?
9
9
  puts 'Configuring Hammer CLI...'
10
10
  result = feature(:hammer).setup_admin_access
11
11
  logger.info 'Hammer was configured successfully.' if result