foreman_maintain 0.2.2 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (28) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -2
  3. data/definitions/checks/disk/performance.rb +1 -1
  4. data/definitions/checks/foreman_openscap/invalid_report_associations.rb +27 -0
  5. data/definitions/checks/foreman_proxy/verify_dhcp_config_syntax.rb +11 -4
  6. data/definitions/checks/puppet/provide_upgrade_guide.rb +35 -0
  7. data/definitions/checks/repositories/validate.rb +3 -0
  8. data/definitions/features/downstream.rb +27 -10
  9. data/definitions/features/foreman_openscap.rb +57 -0
  10. data/definitions/features/foreman_proxy.rb +80 -14
  11. data/definitions/features/puppet_server.rb +6 -2
  12. data/definitions/procedures/foreman_openscap/invalid_report_associations.rb +15 -0
  13. data/definitions/procedures/knowledge_base_article.rb +2 -1
  14. data/definitions/procedures/remote_execution/remove_existing_settingsd.rb +6 -1
  15. data/definitions/procedures/repositories/setup.rb +4 -0
  16. data/definitions/scenarios/upgrade_to_satellite_6_4.rb +1 -0
  17. data/definitions/scenarios/upgrade_to_satellite_6_4_z.rb +1 -0
  18. data/lib/foreman_maintain/utils/disk/device.rb +2 -9
  19. data/lib/foreman_maintain/utils/disk/io_device.rb +38 -0
  20. data/lib/foreman_maintain/utils/disk.rb +1 -1
  21. data/lib/foreman_maintain/utils/facter.rb +21 -0
  22. data/lib/foreman_maintain/utils.rb +1 -0
  23. data/lib/foreman_maintain/version.rb +1 -1
  24. data/lib/foreman_maintain.rb +12 -0
  25. metadata +8 -5
  26. data/lib/foreman_maintain/utils/disk/io/block_device.rb +0 -40
  27. data/lib/foreman_maintain/utils/disk/io/file_system.rb +0 -41
  28. data/lib/foreman_maintain/utils/disk/io.rb +0 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: '078ab0c0f9b3bfe3b4a6a798aaa181bb0ecba87e'
4
- data.tar.gz: 898a5faf68654553aafaa03c8afe026e33ddc8e2
3
+ metadata.gz: '0308a81ffbe17ee43deef021d8a3c43864fb886c'
4
+ data.tar.gz: 6c9b6d939187e1461b991760d507364500046da1
5
5
  SHA512:
6
- metadata.gz: c512de5ef767ec004443beb7f32386ea113899b626ebe195ac69aeba6d2ec21cb66fcb4d93b8423fbbb8e3ee56bf54f95d11d59bc6fc892fa412b28b532f9e3b
7
- data.tar.gz: 3be8f1aad6584b3565841633d3b6f6ef99c2fbf7eb7b986e34e58b7dce60fd775bde2a3dbed6ce3a11cbddaff0490ae82d31f126ae92cfa36f40807b77836491
6
+ metadata.gz: 7c75df5e43ecd4f33e2be2bc8b09a809c2931bf7d71657df4964f2d6ffe1ee6c5eb184800f9aa864f3effb524f3ca353dc974323f621c1c1112bd4b174e4697a
7
+ data.tar.gz: 99795da6683e38730a50c1ba4a286473bd2af075da7ee33a12f4ad045c68d5bc11cbac74fde3056604d3df373a73007e43f20593cfc3911c70f939cc8ea707b3
data/README.md CHANGED
@@ -257,11 +257,11 @@ end
257
257
  class Checks::DiskIO < ForemanMaintain::Check
258
258
  metadata do
259
259
  description 'check foreman service is running'
260
- preparation_steps { Procedures::InstallPackage.new(:packages => %w[hdparm]) }
260
+ preparation_steps { Procedures::InstallPackage.new(:packages => %w[fio]) }
261
261
  end
262
262
 
263
263
  def run
264
- execute!('hdparam ...')
264
+ execute!('fio ...')
265
265
  end
266
266
  end
267
267
  ```
@@ -5,7 +5,7 @@ module Checks
5
5
  label :disk_performance
6
6
  description 'Check for recommended disk speed of pulp, mongodb, pgsql dir.'
7
7
  tags :pre_upgrade
8
- preparation_steps { Procedures::Packages::Install.new(:packages => %w[hdparm fio]) }
8
+ preparation_steps { Procedures::Packages::Install.new(:packages => %w[fio]) }
9
9
 
10
10
  confine do
11
11
  feature(:pulp)
@@ -0,0 +1,27 @@
1
+ module Checks
2
+ module ForemanOpenscap
3
+ class InvalidReportAssociations < ForemanMaintain::Check
4
+ metadata do
5
+ label :openscap_report_associations
6
+ for_feature :foreman_openscap
7
+ description 'Check whether reports have correct associations'
8
+ tags :pre_upgrade, :foreman_openscap, :openscap_report_associations
9
+ end
10
+
11
+ def run
12
+ ids_to_remove = to_remove
13
+ assert(ids_to_remove.empty?,
14
+ "There are #{ids_to_remove.count} reports with issues that will be removed",
15
+ :next_steps => Procedures::ForemanOpenscap::InvalidReportAssociations.new(
16
+ :ids_to_remove => ids_to_remove
17
+ ))
18
+ end
19
+
20
+ def to_remove
21
+ (feature(:foreman_openscap).report_ids_without_policy +
22
+ feature(:foreman_openscap).report_ids_without_proxy +
23
+ feature(:foreman_openscap).report_ids_without_host).uniq
24
+ end
25
+ end
26
+ end
27
+ end
@@ -1,17 +1,24 @@
1
1
  module Checks::ForemanProxy
2
2
  class VerifyDhcpConfigSyntax < ForemanMaintain::Check
3
3
  metadata do
4
- for_feature :foreman_proxy
5
4
  description 'Check for verifying syntax for ISP DHCP configurations'
6
5
  tags :default
7
6
  confine do
8
- file_exists?('/etc/dhcp/dhcpd.conf')
7
+ feature(:foreman_proxy)
9
8
  end
10
9
  end
11
10
 
12
11
  def run
13
- success = feature(:foreman_proxy).valid_dhcp_configs?
14
- assert(success, 'Please check and verify DHCP configurations.')
12
+ if feature(:foreman_proxy).features.include?('dhcp')
13
+ if feature(:foreman_proxy).dhcpd_conf_exist?
14
+ success = feature(:foreman_proxy).valid_dhcp_configs?
15
+ assert(success, 'Please check and verify DHCP configurations.')
16
+ else
17
+ fail! "Couldn't find configuration file at #{feature(:foreman_proxy).dhcpd_config_file}"
18
+ end
19
+ else
20
+ skip 'DHCP feature is not enabled'
21
+ end
15
22
  end
16
23
  end
17
24
  end
@@ -0,0 +1,35 @@
1
+ module Checks::Puppet
2
+ class ProvideUpgradeGuide < ForemanMaintain::Check
3
+ metadata do
4
+ description 'Verify puppet and provide upgrade guide for it'
5
+ tags :puppet_upgrade_guide
6
+ confine do
7
+ feature(:downstream) &&
8
+ feature(:downstream).current_minor_version == '6.3' &&
9
+ find_package('puppet')
10
+ end
11
+ manual_detection
12
+ end
13
+
14
+ def run
15
+ with_spinner('Verifying puppet version before upgrade') do |spinner|
16
+ puppet_package = find_package('puppet')
17
+ spinner.update "current puppet version: #{puppet_package}"
18
+ curr_sat_version = feature(:downstream).current_minor_version
19
+ assert(
20
+ (puppet_package !~ /puppet-3/),
21
+ 'Before continuing with upgrade, please make sure you finish puppet upgrade.',
22
+ :next_steps => [
23
+ Procedures::KnowledgeBaseArticle.new(:doc => doc_ids_by_sat_versions[curr_sat_version])
24
+ ]
25
+ )
26
+ end
27
+ end
28
+
29
+ private
30
+
31
+ def doc_ids_by_sat_versions
32
+ { '6.3' => 'upgrade_puppet_guide_for_sat63' }
33
+ end
34
+ end
35
+ end
@@ -2,6 +2,9 @@ module Checks::Repositories
2
2
  class Validate < ForemanMaintain::Check
3
3
  metadata do
4
4
  description 'Validate availability of repositories'
5
+ preparation_steps do
6
+ Procedures::Packages::Install.new(:packages => [ForemanMaintain::Utils::Facter.package])
7
+ end
5
8
 
6
9
  confine do
7
10
  feature(:downstream)
@@ -54,23 +54,40 @@ class Features::Downstream < ForemanMaintain::Feature
54
54
 
55
55
  def rh_repos(sat_version)
56
56
  sat_version = version(sat_version)
57
- rh_version_major = execute!('facter operatingsystemmajrelease')
58
- sat_version_full = "#{sat_version.major}.#{sat_version.minor}"
57
+ rh_version_major = ForemanMaintain::Utils::Facter.os_major_release
58
+
59
+ rh_repos = main_rh_repos(rh_version_major)
60
+
61
+ rh_repos.concat(sat_and_tools_repos(rh_version_major, sat_version))
62
+
63
+ rh_repos << 'rhel-7-server-ansible-2-rpms' if sat_version.to_s == '6.4'
64
+
65
+ if current_minor_version == '6.3' && sat_version.to_s != '6.4' && (
66
+ feature(:puppet_server) && feature(:puppet_server).puppet_version.major == 4)
67
+ rh_repos << "rhel-#{rh_version_major}-server-satellite-tools-6.3-puppet4-rpms"
68
+ end
69
+
70
+ rh_repos
71
+ end
59
72
 
73
+ def sat_and_tools_repos(rh_version_major, sat_version)
74
+ sat_version_full = "#{sat_version.major}.#{sat_version.minor}"
60
75
  sat_repo_id = "rhel-#{rh_version_major}-server-satellite-#{sat_version_full}-rpms"
61
76
  sat_tools_repo_id = "rhel-#{rh_version_major}-server-satellite-tools-#{sat_version_full}-rpms"
62
- # Override to use Beta repositories for 6.4 until GA
77
+
78
+ # Override to use Beta repositories for sat version until GA
63
79
  if sat_version.to_s == '6.4'
64
80
  sat_repo_id = "rhel-server-#{rh_version_major}-satellite-6-beta-rpms"
81
+ sat_tools_repo_id = "rhel-#{rh_version_major}-server-satellite-tools-6-beta-rpms"
65
82
  end
66
83
 
67
- rh_repos = ["rhel-#{rh_version_major}-server-rpms",
68
- "rhel-server-rhscl-#{rh_version_major}-rpms",
69
- "rhel-#{rh_version_major}-server-satellite-maintenance-6-rpms",
70
- sat_tools_repo_id,
71
- sat_repo_id]
72
- rh_repos << 'rhel-7-server-ansible-2-rpms' if sat_version.to_s == '6.4'
73
- rh_repos
84
+ [sat_repo_id, sat_tools_repo_id]
85
+ end
86
+
87
+ def main_rh_repos(rh_version_major)
88
+ ["rhel-#{rh_version_major}-server-rpms",
89
+ "rhel-server-rhscl-#{rh_version_major}-rpms",
90
+ "rhel-#{rh_version_major}-server-satellite-maintenance-6-rpms"]
74
91
  end
75
92
 
76
93
  def version_from_source
@@ -0,0 +1,57 @@
1
+ class Features::ForemanOpenscap < ForemanMaintain::Feature
2
+ metadata do
3
+ label :foreman_openscap
4
+
5
+ confine do
6
+ check_min_version('tfm-rubygem-foreman_openscap', '0.5.3')
7
+ end
8
+ end
9
+
10
+ def report_ids_without_host
11
+ reports_without_attribute('host_id')
12
+ end
13
+
14
+ def report_ids_without_proxy
15
+ reports_without_attribute('openscap_proxy_id')
16
+ end
17
+
18
+ def report_ids_without_policy
19
+ sql = <<-SQL
20
+ SELECT id
21
+ FROM reports
22
+ WHERE id
23
+ NOT IN (
24
+ SELECT reports.id
25
+ FROM reports INNER JOIN foreman_openscap_policy_arf_reports
26
+ ON reports.id = foreman_openscap_policy_arf_reports.arf_report_id
27
+ WHERE reports.type = 'ForemanOpenscap::ArfReport'
28
+ )
29
+ AND type = 'ForemanOpenscap::ArfReport'
30
+ SQL
31
+ execute_ids_query sql
32
+ end
33
+
34
+ def delete_reports(ids)
35
+ feature(:foreman_database).psql(<<-SQL)
36
+ BEGIN;
37
+ DELETE FROM reports WHERE id IN (#{ids.join(', ')});
38
+ DELETE FROM foreman_openscap_policy_arf_reports WHERE arf_report_id IN (#{ids.join(', ')});
39
+ COMMIT;
40
+ SQL
41
+ end
42
+
43
+ private
44
+
45
+ def reports_without_attribute(attr)
46
+ sql = <<-SQL
47
+ SELECT id
48
+ FROM reports
49
+ WHERE type = 'ForemanOpenscap::ArfReport' AND #{attr} IS NULL
50
+ SQL
51
+ execute_ids_query sql
52
+ end
53
+
54
+ def execute_ids_query(sql)
55
+ feature(:foreman_database).query(sql).map { |item| item['id'].to_i } || []
56
+ end
57
+ end
@@ -6,12 +6,11 @@ class Features::ForemanProxy < ForemanMaintain::Feature
6
6
  end
7
7
  end
8
8
 
9
- attr_reader :dhcpd_conf_file, :cert_path
9
+ FOREMAN_PROXY_SETTINGS_PATHS = ['/etc/foreman-proxy/settings.yml',
10
+ '/usr/local/etc/foreman-proxy/settings.yml'].freeze
10
11
 
11
- def initialize
12
- @dhcpd_conf_file = '/etc/dhcp/dhcpd.conf'
13
- @cert_path = ForemanMaintain.config.foreman_proxy_cert_path
14
- end
12
+ FOREMAN_PROXY_DHCP_YML_PATHS = ['/etc/foreman-proxy/settings.d/dhcp.yml',
13
+ '/usr/local/etc/foreman-proxy/settings.d/dhcp.yml'].freeze
15
14
 
16
15
  def valid_dhcp_configs?
17
16
  dhcp_req_pass? && !syntax_error_exists?
@@ -21,6 +20,10 @@ class Features::ForemanProxy < ForemanMaintain::Feature
21
20
  !!feature(:pulp)
22
21
  end
23
22
 
23
+ def dhcpd_conf_exist?
24
+ file_exists?(dhcpd_config_file)
25
+ end
26
+
24
27
  def services
25
28
  {
26
29
  'foreman-proxy' => 20,
@@ -37,21 +40,28 @@ class Features::ForemanProxy < ForemanMaintain::Feature
37
40
  !!feature(:foreman_server)
38
41
  end
39
42
 
40
- def config_files(for_features = ['all'])
41
- configs = [
43
+ def default_config_files
44
+ [
42
45
  '/etc/foreman-proxy',
43
46
  '/usr/share/foreman-proxy/.ssh',
44
47
  '/var/lib/foreman-proxy/ssh',
45
48
  '/etc/smart_proxy_dynflow_core/settings.yml',
46
- '/etc/sudoers.d/foreman-proxy'
49
+ '/etc/sudoers.d/foreman-proxy',
50
+ settings_file
47
51
  ]
52
+ end
53
+
54
+ def config_files(for_features = ['all'])
55
+ configs = default_config_files
48
56
  backup_features = backup_features(for_features)
49
57
 
50
58
  configs.push(certs_tar) if certs_tar
51
59
 
52
60
  configs.push('/var/lib/tftpboot') if backup_features.include?('tftp')
53
61
  configs += ['/var/named/', '/etc/named*'] if backup_features.include?('dns')
54
- configs += ['/var/lib/dhcpd', '/etc/dhcp'] if backup_features.include?('dhcp')
62
+ if backup_features.include?('dhcp')
63
+ configs += ['/var/lib/dhcpd', File.dirname(dhcpd_config_file)]
64
+ end
55
65
  configs.push('/usr/share/xml/scap') if backup_features.include?('openscap')
56
66
  configs
57
67
  end
@@ -71,6 +81,18 @@ class Features::ForemanProxy < ForemanMaintain::Feature
71
81
  feature(:installer).answers[content_module]['certs_tar'] if content_module
72
82
  end
73
83
 
84
+ def settings_file
85
+ @settings_file ||= lookup_into(FOREMAN_PROXY_SETTINGS_PATHS)
86
+ end
87
+
88
+ def proxy_settings
89
+ @proxy_settings ||= load_proxy_settings
90
+ end
91
+
92
+ def dhcpd_config_file
93
+ @dhcpd_config_file ||= lookup_dhcpd_config_file
94
+ end
95
+
74
96
  private
75
97
 
76
98
  def backup_features(for_features)
@@ -82,9 +104,14 @@ class Features::ForemanProxy < ForemanMaintain::Feature
82
104
  end
83
105
 
84
106
  def curl_cmd
85
- "curl -w '\n%{http_code}' --silent -ks --cert #{cert_path}/client_cert.pem \
86
- --key #{cert_path}/client_key.pem \
87
- --cacert #{cert_path}/proxy_ca.pem https://$(hostname):9090"
107
+ ssl_cert = proxy_settings[:foreman_ssl_cert] || proxy_settings[:ssl_certificate]
108
+ ssl_key = proxy_settings[:foreman_ssl_key] || proxy_settings[:ssl_private_key]
109
+ ssl_ca = proxy_settings[:foreman_ssl_ca] || proxy_settings[:ssl_ca_file]
110
+
111
+ cmd = "curl -w '\n%{http_code}' -s "
112
+ cmd += format_shell_args('--cert' => ssl_cert, '--key' => ssl_key, '--cacert' => ssl_ca)
113
+ cmd += " https://$(hostname):#{proxy_settings[:https_port]}"
114
+ cmd
88
115
  end
89
116
 
90
117
  def dhcp_curl_cmd
@@ -136,13 +163,52 @@ class Features::ForemanProxy < ForemanMaintain::Feature
136
163
  end
137
164
 
138
165
  def syntax_error_exists?
139
- cmd = "dhcpd -t -cf #{dhcpd_conf_file}"
166
+ cmd = "dhcpd -t -cf #{dhcpd_config_file}"
140
167
  output = execute(cmd)
141
168
  is_error = output.include?('Configuration file errors encountered')
142
169
  if is_error
143
- puts "\nFound syntax error in file #{dhcpd_conf_file}:"
170
+ puts "\nFound syntax error in file #{dhcpd_config_file}:"
144
171
  puts output
145
172
  end
146
173
  is_error
147
174
  end
175
+
176
+ def load_proxy_settings
177
+ if settings_file
178
+ @proxy_settings = yaml_load(settings_file)
179
+ else
180
+ raise "Couldn't find settings file at #{FOREMAN_PROXY_SETTINGS_PATHS.join(', ')}"
181
+ end
182
+ end
183
+
184
+ def lookup_dhcpd_config_file
185
+ dhcpd_config_file = lookup_using_dhcp_yml
186
+ raise "Couldn't find DHCP Configuration file" if dhcpd_config_file.nil?
187
+ dhcpd_config_file
188
+ end
189
+
190
+ def lookup_using_dhcp_yml
191
+ dhcp_yml_path = lookup_into(FOREMAN_PROXY_DHCP_YML_PATHS)
192
+ raise "Couldn't find dhcp.yml file under foreman-proxy" unless dhcp_yml_path
193
+
194
+ configs_from_dhcp_yml = yaml_load(dhcp_yml_path)
195
+ if configs_from_dhcp_yml.key?(:dhcp_config)
196
+ return configs_from_dhcp_yml[:dhcp_config]
197
+ elsif configs_from_dhcp_yml.key?(:use_provider)
198
+ settings_d_dir = File.dirname(dhcp_yml_path)
199
+ dhcp_provider_fpath = File.join(settings_d_dir, "#{configs_from_dhcp_yml[:use_provider]}.yml")
200
+ dhcp_provider_configs = yaml_load(dhcp_provider_fpath)
201
+ return dhcp_provider_configs[:config] if dhcp_provider_configs.key?(:config)
202
+ else
203
+ raise "Couldn't find DHCP Configurations in #{dhcp_yml_path}"
204
+ end
205
+ end
206
+
207
+ def yaml_load(path)
208
+ YAML.load_file(path) || {}
209
+ end
210
+
211
+ def lookup_into(file_paths)
212
+ file_paths.find { |file_path| file_exists?(file_path) }
213
+ end
148
214
  end
@@ -6,11 +6,15 @@ class Features::PuppetServer < ForemanMaintain::Feature
6
6
  # is a part of httpd and relies on httpd service to restart, therefore
7
7
  # not requiring a separate service to restart
8
8
  confine do
9
- find_package('puppetserver')
9
+ find_package('puppetserver') || find_package('puppet')
10
10
  end
11
11
  end
12
12
 
13
13
  def services
14
- { 'puppetserver' => 30 }
14
+ find_package('puppetserver') ? { 'puppetserver' => 30 } : {}
15
+ end
16
+
17
+ def puppet_version
18
+ version(execute!('puppet --version'))
15
19
  end
16
20
  end
@@ -0,0 +1,15 @@
1
+ module Procedures::ForemanOpenscap
2
+ class InvalidReportAssociations < ForemanMaintain::Procedure
3
+ metadata do
4
+ param :ids_to_remove, 'Ids of reports to remove', :required => true
5
+ for_feature :foreman_openscap
6
+ tags :pre_migration, :foreman_openscap, :openscap_report_associations
7
+ advanced_run false
8
+ description 'Delete reports with association issues'
9
+ end
10
+
11
+ def run
12
+ feature(:foreman_openscap).delete_reports(@ids_to_remove)
13
+ end
14
+ end
15
+ end
@@ -23,7 +23,8 @@ class Procedures::KnowledgeBaseArticle < ForemanMaintain::Procedure
23
23
 
24
24
  def kcs_documents
25
25
  {
26
- 'fix_cpdb_validate_failure' => 'https://access.redhat.com/solutions/3362821'
26
+ 'fix_cpdb_validate_failure' => 'https://access.redhat.com/solutions/3362821',
27
+ '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'
27
28
  }
28
29
  end
29
30
  end
@@ -11,7 +11,12 @@ module Procedures::RemoteExecution
11
11
 
12
12
  def run
13
13
  with_spinner("Removing existing #{@dirpath} directory") do |_spinner|
14
- execute!("rm -rf #{@dirpath}")
14
+ if Dir.pwd.strip.eql?(@dirpath)
15
+ fail! "Failed: You are trying to delete the current directory '#{@dirpath}' "\
16
+ 'which is not possible'
17
+ else
18
+ execute!("rm -rf #{@dirpath}")
19
+ end
15
20
  end
16
21
  end
17
22
  end
@@ -2,6 +2,10 @@ module Procedures::Repositories
2
2
  class Setup < ForemanMaintain::Procedure
3
3
  metadata do
4
4
  description 'Setup repositories'
5
+ preparation_steps do
6
+ Procedures::Packages::Install.new(:packages => [ForemanMaintain::Utils::Facter.package])
7
+ end
8
+
5
9
  confine do
6
10
  feature(:downstream) || feature(:upstream)
7
11
  end
@@ -22,6 +22,7 @@ module Scenarios::Satellite_6_4
22
22
  add_steps(find_checks(:default))
23
23
  add_steps(find_checks(:pre_upgrade))
24
24
  add_step(Checks::Repositories::Validate.new(:version => '6.4'))
25
+ add_step(Checks::Puppet::ProvideUpgradeGuide.new)
25
26
  end
26
27
  end
27
28
 
@@ -22,6 +22,7 @@ module Scenarios::Satellite_6_4_z
22
22
  add_steps(find_checks(:default))
23
23
  add_steps(find_checks(:pre_upgrade))
24
24
  add_step(Checks::Repositories::Validate.new(:version => '6.4'))
25
+ add_step(Checks::Puppet::ProvideUpgradeGuide.new)
25
26
  end
26
27
  end
27
28
 
@@ -17,7 +17,8 @@ module ForemanMaintain
17
17
  def initialize(dir)
18
18
  @dir = dir
19
19
  @name = find_device
20
- @io_device = init_io_device
20
+ logger.info "#{dir} is externally mounted" if externally_mounted?
21
+ @io_device = IODevice.new(dir)
21
22
  end
22
23
 
23
24
  def slow_disk_error_msg
@@ -32,14 +33,6 @@ module ForemanMaintain
32
33
 
33
34
  private
34
35
 
35
- def init_io_device
36
- if externally_mounted?
37
- IO::FileSystem
38
- else
39
- IO::BlockDevice
40
- end.new(dir, name)
41
- end
42
-
43
36
  def externally_mounted?
44
37
  device_type = execute("stat -f -c %T #{dir}")
45
38
  EXTERNAL_MOUNT_TYPE.include?(device_type)
@@ -0,0 +1,38 @@
1
+ module ForemanMaintain
2
+ module Utils
3
+ module Disk
4
+ class IODevice
5
+ include ForemanMaintain::Concerns::SystemHelpers
6
+
7
+ attr_accessor :dir
8
+
9
+ def initialize(dir)
10
+ @dir = dir
11
+ end
12
+
13
+ def read_speed
14
+ @read_speed ||= convert_kb_to_mb(fio)
15
+ end
16
+
17
+ def unit
18
+ @unit ||= 'MB/sec'
19
+ end
20
+
21
+ private
22
+
23
+ # In fio command, --direct option bypass the cache page
24
+ def fio
25
+ cmd = "fio --name=job1 --rw=read --size=1g --output-format=json\
26
+ --directory=#{dir} --direct=1"
27
+ stdout = execute(cmd)
28
+ output = JSON.parse(stdout)
29
+ @fio ||= output['jobs'].first['read']['bw'].to_i
30
+ end
31
+
32
+ def convert_kb_to_mb(val)
33
+ val / 1024
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -1,4 +1,4 @@
1
- require 'foreman_maintain/utils/disk/io'
1
+ require 'foreman_maintain/utils/disk/io_device'
2
2
  require 'foreman_maintain/utils/disk/device'
3
3
  require 'foreman_maintain/utils/disk/stats'
4
4
  require 'foreman_maintain/utils/disk/nil_device'
@@ -0,0 +1,21 @@
1
+ module ForemanMaintain::Utils
2
+ module Facter
3
+ include ForemanMaintain::Concerns::SystemHelpers
4
+
5
+ FACTER_FILES = %w[/usr/bin/facter /opt/puppetlabs/bin/facter].freeze
6
+
7
+ def self.package
8
+ puppet_version = version(execute!('puppet --version'))
9
+
10
+ puppet_version.major >= 4 ? 'puppet-agent' : 'facter'
11
+ end
12
+
13
+ def self.path
14
+ FACTER_FILES.find { |path| File.exist?(path) }
15
+ end
16
+
17
+ def self.os_major_release
18
+ execute!("#{path} operatingsystemmajrelease")
19
+ end
20
+ end
21
+ end
@@ -3,3 +3,4 @@ require 'foreman_maintain/utils/disk'
3
3
  require 'foreman_maintain/utils/hash_tools'
4
4
  require 'foreman_maintain/utils/curl_response'
5
5
  require 'foreman_maintain/utils/mongo_core'
6
+ require 'foreman_maintain/utils/facter'
@@ -1,3 +1,3 @@
1
1
  module ForemanMaintain
2
- VERSION = '0.2.2'.freeze
2
+ VERSION = '0.2.3'.freeze
3
3
  end
@@ -53,6 +53,18 @@ module ForemanMaintain
53
53
  self.config = Config.new(options)
54
54
  load_definitions
55
55
  init_logger
56
+ update_path
57
+ end
58
+
59
+ # Appending PATH with expected paths needed for commands we run
60
+ def update_path
61
+ paths = ['/sbin']
62
+ existing_paths = ENV['PATH'].split(':')
63
+ paths -= existing_paths
64
+ if paths.any?
65
+ paths = paths.join(':').chomp(':')
66
+ ENV['PATH'] = "#{ENV['PATH']}:#{paths}"
67
+ end
56
68
  end
57
69
 
58
70
  def config_file
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: 0.2.2
4
+ version: 0.2.3
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: 2018-05-18 00:00:00.000000000 Z
11
+ date: 2018-06-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: clamp
@@ -120,6 +120,7 @@ files:
120
120
  - definitions/checks/check_epel_repository.rb
121
121
  - definitions/checks/disk/performance.rb
122
122
  - definitions/checks/foreman/db_up.rb
123
+ - definitions/checks/foreman_openscap/invalid_report_associations.rb
123
124
  - definitions/checks/foreman_proxy/verify_dhcp_config_syntax.rb
124
125
  - definitions/checks/foreman_tasks/invalid/check_old.rb
125
126
  - definitions/checks/foreman_tasks/invalid/check_pending_state.rb
@@ -129,6 +130,7 @@ files:
129
130
  - definitions/checks/hammer_ping.rb
130
131
  - definitions/checks/mongo/db_up.rb
131
132
  - definitions/checks/mongo/tools_installed.rb
133
+ - definitions/checks/puppet/provide_upgrade_guide.rb
132
134
  - definitions/checks/remote_execution/verify_settings_file_already_exists.rb
133
135
  - definitions/checks/repositories/validate.rb
134
136
  - definitions/checks/restore/validate_backup.rb
@@ -141,6 +143,7 @@ files:
141
143
  - definitions/features/foreman_1_11_x.rb
142
144
  - definitions/features/foreman_1_7_x.rb
143
145
  - definitions/features/foreman_database.rb
146
+ - definitions/features/foreman_openscap.rb
144
147
  - definitions/features/foreman_proxy.rb
145
148
  - definitions/features/foreman_server.rb
146
149
  - definitions/features/foreman_tasks.rb
@@ -180,6 +183,7 @@ files:
180
183
  - definitions/procedures/backup/snapshot/mount_pulp.rb
181
184
  - definitions/procedures/backup/snapshot/prepare_mount.rb
182
185
  - definitions/procedures/candlepin/delete_orphaned_records_from_env_content.rb
186
+ - definitions/procedures/foreman_openscap/invalid_report_associations.rb
183
187
  - definitions/procedures/foreman_tasks/delete.rb
184
188
  - definitions/procedures/foreman_tasks/fetch_tasks_status.rb
185
189
  - definitions/procedures/foreman_tasks/resume.rb
@@ -275,11 +279,10 @@ files:
275
279
  - lib/foreman_maintain/utils/curl_response.rb
276
280
  - lib/foreman_maintain/utils/disk.rb
277
281
  - lib/foreman_maintain/utils/disk/device.rb
278
- - lib/foreman_maintain/utils/disk/io.rb
279
- - lib/foreman_maintain/utils/disk/io/block_device.rb
280
- - lib/foreman_maintain/utils/disk/io/file_system.rb
282
+ - lib/foreman_maintain/utils/disk/io_device.rb
281
283
  - lib/foreman_maintain/utils/disk/nil_device.rb
282
284
  - lib/foreman_maintain/utils/disk/stats.rb
285
+ - lib/foreman_maintain/utils/facter.rb
283
286
  - lib/foreman_maintain/utils/hash_tools.rb
284
287
  - lib/foreman_maintain/utils/mongo_core.rb
285
288
  - lib/foreman_maintain/version.rb
@@ -1,40 +0,0 @@
1
- module ForemanMaintain
2
- module Utils
3
- module Disk
4
- module IO
5
- class BlockDevice
6
- include ForemanMaintain::Concerns::SystemHelpers
7
-
8
- attr_accessor :dir, :name
9
-
10
- def initialize(dir, name = Disk::Device.new('/var').name)
11
- @dir = dir
12
- @name = name
13
- end
14
-
15
- def read_speed
16
- @read_speed ||= extract_speed(hdparm)
17
- end
18
-
19
- def unit
20
- @unit ||= extract_unit(hdparm)
21
- end
22
-
23
- private
24
-
25
- def hdparm
26
- @stdout ||= execute("hdparm -t #{name} | awk 'NF'")
27
- end
28
-
29
- def extract_unit(stdout)
30
- stdout.split(' ').last
31
- end
32
-
33
- def extract_speed(stdout)
34
- stdout.split(' ').reverse[1].to_i
35
- end
36
- end
37
- end
38
- end
39
- end
40
- end
@@ -1,41 +0,0 @@
1
- module ForemanMaintain
2
- module Utils
3
- module Disk
4
- module IO
5
- class FileSystem
6
- include ForemanMaintain::Concerns::SystemHelpers
7
-
8
- attr_accessor :dir, :name
9
-
10
- def initialize(dir, name = '')
11
- @dir = dir
12
- @name = name
13
- end
14
-
15
- def read_speed
16
- @read_speed ||= convert_kb_to_mb(fio)
17
- end
18
-
19
- def unit
20
- @unit ||= 'MB/sec'
21
- end
22
-
23
- private
24
-
25
- # In fio command, --direct option bypass the cache page
26
- def fio
27
- cmd = "fio --name=job1 --rw=read --size=1g --output-format=json\
28
- --directory=#{dir} --direct=1"
29
- stdout = execute(cmd)
30
- output = JSON.parse(stdout)
31
- @fio ||= output['jobs'].first['read']['bw'].to_i
32
- end
33
-
34
- def convert_kb_to_mb(val)
35
- val / 1024
36
- end
37
- end
38
- end
39
- end
40
- end
41
- end
@@ -1,2 +0,0 @@
1
- require 'foreman_maintain/utils/disk/io/block_device'
2
- require 'foreman_maintain/utils/disk/io/file_system'