foreman_maintain 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c76360569117ea968a720fbb493d1348a396b01b
4
- data.tar.gz: 746747370c85d10ad6f0dec6dfe7123085485e3a
3
+ metadata.gz: 8e9f70b0ee10a6f3d86da947c29b44f28425fe3d
4
+ data.tar.gz: 25c1ffb8b8b12ff26a2ee7cad07f407b7586f276
5
5
  SHA512:
6
- metadata.gz: 276ab0eadfd9ac48178a4650aab47e54d215d9504f164f5b8a0342dc4271bea01718a27e49e50ac4fe6768c1e50772d296e493223da8b87d2ec2b468dba12ce4
7
- data.tar.gz: 94cce0df009844faad60bb89d81a792a563a9850897d949c2722e35227700d21e554b8ffd1f9321eab243c1b45ef3537ee963d7aeab440b0cd3e168e18ee4bb4
6
+ metadata.gz: ab4457e9ea8319b82ac952b5d389bd2156d384076d2d36db0150b51a04127b62393617327118d715ebb468bcf104ceaefda96cb86d641a0da8724d4ae29cb632
7
+ data.tar.gz: 4d59d274a7f28c85f4c315766e276890fb9c5285225fd02dcf5aef62e495b08343e8becfcdd7cbb39ddf916b6be38180692dba4ffc83ff9f83fddc9570c12e80
data/README.md CHANGED
@@ -18,7 +18,7 @@ Subcommands:
18
18
 
19
19
  upgrade Upgrade related commands
20
20
  list-versions List versions this system is upgradable to
21
- check --target-version TARGET_VERSION Run pre-upgrade checks for upgradeing to specified version
21
+ check --target-version TARGET_VERSION Run pre-upgrade checks for upgrading to specified version
22
22
  run --target-version TARGET_VERSION Run the full upgrade
23
23
  [--phase=phase TARGET_VERSION] Run just a specific phase of the upgrade
24
24
  ```
@@ -56,7 +56,7 @@ of the system:
56
56
  at the current version, while this phase runs.
57
57
 
58
58
  * **pre-migrations** - these steps perform changes on the system before
59
- the actual upgrade stars. An example is disabling access to the system from
59
+ the actual upgrade starts. An example is disabling access to the system from
60
60
  external sources, a.k.a. maintenance mode or disabling sync plans during the run.
61
61
 
62
62
  After this phase ends, the system is still running the old version, and it's possible
@@ -0,0 +1,16 @@
1
+ module Checks::Candlepin
2
+ class ValidateDb < ForemanMaintain::Check
3
+ metadata do
4
+ description 'Check to validate candlepin database'
5
+ tags :pre_upgrade
6
+
7
+ confine do
8
+ feature(:candlepin_database) && feature(:candlepin_database).validate_available_in_cpdb?
9
+ end
10
+ end
11
+
12
+ def run
13
+ feature(:candlepin_database).execute_cpdb_validate_cmd
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,67 @@
1
+ module Checks
2
+ module Disk
3
+ class Performance < ForemanMaintain::Check
4
+ metadata do
5
+ label :disk_performance
6
+ description 'Check for recommended disk speed of pulp, mongodb, pgsql dir.'
7
+ tags :pre_upgrade
8
+ preparation_steps { Procedures::Packages::Install.new(:packages => %w[hdparm fio]) }
9
+
10
+ confine do
11
+ feature(:pulp)
12
+ end
13
+ end
14
+
15
+ EXPECTED_IO = 80
16
+ DEFAULT_UNIT = 'MB/sec'.freeze
17
+ DEFAULT_DIRS = ['/var/lib/pulp', '/var/lib/mongodb', '/var/lib/pgsql'].freeze
18
+
19
+ attr_reader :stats
20
+
21
+ def run
22
+ @stats = ForemanMaintain::Utils::Disk::Stats.new
23
+ with_spinner(description) do |spinner|
24
+ io_obj, success = compute_disk_speed(spinner)
25
+ spinner.update('Finished')
26
+ puts "\n"
27
+ puts stats.stdout
28
+
29
+ assert(success, io_obj.slow_disk_error_msg)
30
+ end
31
+ end
32
+
33
+ def check_only_single_device?
34
+ DEFAULT_DIRS.map do |dir|
35
+ ForemanMaintain::Utils::Disk::Device.new(dir).name
36
+ end.uniq.length <= 1
37
+ end
38
+
39
+ def dirs_to_check
40
+ return DEFAULT_DIRS.first(1) if check_only_single_device?
41
+ DEFAULT_DIRS
42
+ end
43
+
44
+ private
45
+
46
+ def compute_disk_speed(spinner)
47
+ success = true
48
+ io_obj = ForemanMaintain::Utils::Disk::NilDevice.new
49
+
50
+ dirs_to_check.each do |dir|
51
+ io_obj = ForemanMaintain::Utils::Disk::Device.new(dir)
52
+
53
+ spinner.update("[Speed check In-Progress] device: #{io_obj.name}")
54
+ stats << io_obj
55
+
56
+ next if io_obj.read_speed >= EXPECTED_IO
57
+
58
+ success = false
59
+ logger.info "Slow disk detected #{dir}: #{io_obj.performance}."
60
+ break
61
+ end
62
+
63
+ [io_obj, success]
64
+ end
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,62 @@
1
+ class Features::CandlepinDatabase < ForemanMaintain::Feature
2
+ CANDLEPIN_DB_CONFIG = '/etc/candlepin/candlepin.conf'.freeze
3
+
4
+ include ForemanMaintain::Concerns::BaseDatabase
5
+
6
+ metadata do
7
+ label :candlepin_database
8
+
9
+ confine do
10
+ file_exists?(CANDLEPIN_DB_CONFIG)
11
+ end
12
+ end
13
+
14
+ def configuration
15
+ @configuration || load_configuration
16
+ end
17
+
18
+ def validate_available_in_cpdb?
19
+ check_option_using_cpdb_help('validate')
20
+ end
21
+
22
+ def check_option_using_cpdb_help(option_name, parent_cmd = '')
23
+ parent_cmd = '/usr/share/candlepin/cpdb' if parent_cmd.empty?
24
+ help_cmd = "#{parent_cmd} --help | grep -c '\\-\\-#{option_name} '"
25
+ execute?(help_cmd)
26
+ end
27
+
28
+ def execute_cpdb_validate_cmd
29
+ main_cmd = cpdb_validate_cmd
30
+ unless main_cmd.empty?
31
+ main_cmd += format_shell_args(
32
+ '-u' => configuration['username'], '-p' => configuration[%(password)]
33
+ )
34
+ execute!(main_cmd, :hidden_patterns => [configuration['password']])
35
+ end
36
+ end
37
+
38
+ private
39
+
40
+ def load_configuration
41
+ raw_config = File.read(CANDLEPIN_DB_CONFIG)
42
+ full_config = Hash[raw_config.scan(/(^[^#\n][^=]*)=(.*)/)]
43
+ uri = %r{://(([^/:]*):?([^/]*))/(.*)}.match(full_config['org.quartz.dataSource.myDS.URL'])
44
+ @configuration = {
45
+ 'username' => full_config['org.quartz.dataSource.myDS.user'],
46
+ 'password' => full_config['org.quartz.dataSource.myDS.password'],
47
+ 'database' => uri[4],
48
+ 'host' => uri[2],
49
+ 'port' => uri[3] || '5432',
50
+ 'driver' => full_config['org.quartz.dataSource.myDS.driver'],
51
+ 'url' => full_config['org.quartz.dataSource.myDS.URL']
52
+ }
53
+ end
54
+
55
+ def cpdb_validate_cmd
56
+ return '' unless check_option_using_cpdb_help('validate')
57
+ cmd = '/usr/share/candlepin/cpdb --validate'
58
+ return cmd unless check_option_using_cpdb_help('verbose', cmd)
59
+ cmd += ' --verbose'
60
+ cmd
61
+ end
62
+ end
@@ -34,16 +34,15 @@ class Features::Downstream < ForemanMaintain::Feature
34
34
  def rh_repos(sat_version)
35
35
  sat_version = version(sat_version)
36
36
  rh_version_major = execute!('facter operatingsystemmajrelease')
37
+ sat_version_full = "#{sat_version.major}.#{sat_version.minor}"
37
38
 
38
- sat_repo_id = "rhel-#{rh_version_major}-server-satellite-#{sat_version.major}"\
39
- ".#{sat_version.minor}-rpms"
40
- # Override to use Beta repositories for 6.3 until GA
41
- if sat_version.to_s == '6.3'
42
- sat_repo_id = "rhel-server-#{rh_version_major}-satellite-6-beta-rpms"
43
- end
39
+ sat_repo_id = "rhel-#{rh_version_major}-server-satellite-#{sat_version_full}-rpms"
40
+ sat_tools_repo_id = "rhel-#{rh_version_major}-server-satellite-tools-#{sat_version_full}-rpms"
44
41
 
45
42
  ["rhel-#{rh_version_major}-server-rpms",
46
43
  "rhel-server-rhscl-#{rh_version_major}-rpms",
44
+ "rhel-#{rh_version_major}-server-satellite-maintenance-6-rpms",
45
+ sat_tools_repo_id,
47
46
  sat_repo_id]
48
47
  end
49
48
 
@@ -1,21 +1,24 @@
1
1
  class Features::ForemanDatabase < ForemanMaintain::Feature
2
+ FOREMAN_DB_CONFIG = '/etc/foreman/database.yml'.freeze
3
+
4
+ include ForemanMaintain::Concerns::BaseDatabase
5
+
2
6
  metadata do
3
7
  label :foreman_database
4
8
 
5
9
  confine do
6
- File.exist?('/etc/foreman/database.yml')
10
+ file_exists?(FOREMAN_DB_CONFIG)
7
11
  end
8
12
  end
9
13
 
10
- def query(sql)
11
- parse_csv(query_csv(sql))
14
+ def configuration
15
+ @configuration || load_configuration
12
16
  end
13
17
 
14
- def query_csv(sql)
15
- psql(%{COPY (#{sql}) TO STDOUT WITH CSV HEADER})
16
- end
18
+ private
17
19
 
18
- def psql(query)
19
- execute("su postgres -c 'cd ~; psql -d foreman'", :stdin => query)
20
+ def load_configuration
21
+ config = YAML.load(File.read(FOREMAN_DB_CONFIG))
22
+ @configuration = config['production']
20
23
  end
21
24
  end
@@ -20,7 +20,7 @@ class Features::ForemanProxy < ForemanMaintain::Feature
20
20
  private
21
21
 
22
22
  def dhcp_curl_cmd
23
- "curl -w '\n%{http_code}' -slient -ks --cert #{cert_path}/client_cert.pem \
23
+ "curl -w '\n%{http_code}' --silent -ks --cert #{cert_path}/client_cert.pem \
24
24
  --key #{cert_path}/client_key.pem \
25
25
  --cacert #{cert_path}/proxy_ca.pem https://$(hostname):9090/dhcp"
26
26
  end
@@ -13,7 +13,7 @@ class Features::KatelloService < ForemanMaintain::Feature
13
13
  yield if block_given?
14
14
  else
15
15
  begin
16
- filters = "--only #{services.join(',')}"
16
+ filters = construct_filters(services)
17
17
  spinner.update 'Stopping katello running services..'
18
18
  execute!("katello-service stop #{filters}")
19
19
  yield if block_given?
@@ -28,7 +28,7 @@ class Features::KatelloService < ForemanMaintain::Feature
28
28
  if services.empty?
29
29
  spinner.update 'No katello service to start'
30
30
  else
31
- filters = "--only #{services.join(',')}"
31
+ filters = construct_filters(services)
32
32
  spinner.update 'Starting katello services..'
33
33
  execute!("katello-service start #{filters}")
34
34
  end
@@ -36,7 +36,7 @@ class Features::KatelloService < ForemanMaintain::Feature
36
36
 
37
37
  def restart(options = {})
38
38
  if options[:only] || options[:exclude]
39
- filters = construct_filters_for_restart(options)
39
+ filters = construct_filters(options[:only], options[:exclude])
40
40
  execute!("katello-service restart #{filters}")
41
41
  else
42
42
  execute!('katello-service restart')
@@ -59,6 +59,10 @@ class Features::KatelloService < ForemanMaintain::Feature
59
59
  logger.error e.message
60
60
  end
61
61
 
62
+ def service_list
63
+ @service_list ||= katello_service_names.map { |s| s.gsub('.service', '') }
64
+ end
65
+
62
66
  private
63
67
 
64
68
  def apply_sleep_before_retry(spinner, result)
@@ -67,13 +71,18 @@ class Features::KatelloService < ForemanMaintain::Feature
67
71
  sleep PING_RETRY_INTERVAL
68
72
  end
69
73
 
70
- def construct_filters_for_restart(options)
74
+ def construct_filters(only_services, exclude_services = [])
71
75
  filters = ''
72
- if options[:only]
73
- filters += "--only #{options[:only].join(',')}" unless options[:only].empty?
76
+ unless only_services.empty?
77
+ if feature(:downstream) && feature(:downstream).current_minor_version <= '6.1'
78
+ exclude_services.concat(service_list - only_services)
79
+ exclude_services.uniq!
80
+ else
81
+ filters += "--only #{only_services.join(',')}"
82
+ end
74
83
  end
75
- if options[:exclude]
76
- filters += "--exclude #{options[:exclude].join(',')}" unless options[:exclude].empty?
84
+ unless exclude_services.empty?
85
+ filters += "--exclude #{exclude_services.join(',')}"
77
86
  end
78
87
  filters
79
88
  end
@@ -98,8 +107,11 @@ class Features::KatelloService < ForemanMaintain::Feature
98
107
  find_services_by_state(" -w 'dead'")
99
108
  end
100
109
 
110
+ def katello_service_names
111
+ @katello_service_names ||= execute("katello-service list|awk '{print $1}'").split(/\n/)
112
+ end
113
+
101
114
  def find_services_by_state(state)
102
- katello_service_names = execute("katello-service list|awk '{print $1}'").split(/\n/)
103
115
  services_by_state = execute("systemctl --all |grep #{state}|awk '{print $1}'").split(/\n/)
104
116
  (katello_service_names & services_by_state).map { |s| s.gsub('.service', '') }
105
117
  end
@@ -1,7 +1,12 @@
1
1
  module Procedures::ForemanTasks
2
2
  class Delete < ForemanMaintain::Procedure
3
+ ALLOWED_STATES_VALUES = %w[old planning pending].freeze
4
+
3
5
  metadata do
4
- param :state, 'In what state should the task be deleted'
6
+ param :state,
7
+ 'In what state should the task be deleted.'\
8
+ " Possible values are #{ALLOWED_STATES_VALUES.join(', ')}",
9
+ :required => true, :allowed_values => ALLOWED_STATES_VALUES
5
10
  description 'Delete tasks'
6
11
  end
7
12
 
@@ -11,7 +16,6 @@ module Procedures::ForemanTasks
11
16
 
12
17
  if count_tasks_before > 0
13
18
  spinner.update "Backup #{@state} tasks"
14
-
15
19
  feature(:foreman_tasks).backup_tasks(@state) do |backup_progress|
16
20
  spinner.update backup_progress
17
21
  end
@@ -19,11 +23,10 @@ module Procedures::ForemanTasks
19
23
  spinner.update "Deleting #{@state} tasks [running]"
20
24
  count_tasks_later = feature(:foreman_tasks).delete(@state)
21
25
  spinner.update "Deleting #{@state} tasks [DONE]"
26
+ spinner.update(
27
+ "Deleted #{@state} stopped and paused tasks: #{count_tasks_before - count_tasks_later}"
28
+ )
22
29
  end
23
-
24
- spinner.update(
25
- "Deleted #{@state} stopped and paused tasks: #{count_tasks_before - count_tasks_later}"
26
- )
27
30
  end
28
31
  end
29
32
 
@@ -16,8 +16,8 @@ module Procedures::KatelloService
16
16
 
17
17
  def runtime_message
18
18
  msg = 'katello-service restart'
19
- msg += "--only #{@only.join(',')}" unless @only.empty?
20
- msg += "--exclude #{@exclude.join(',')}" unless @exclude.empty?
19
+ msg += " --only #{@only.join(',')}" unless @only.empty?
20
+ msg += " --exclude #{@exclude.join(',')}" unless @exclude.empty?
21
21
  msg
22
22
  end
23
23
  end
@@ -43,6 +43,7 @@ module Scenarios::Satellite_6_2_z
43
43
  end
44
44
 
45
45
  def compose
46
+ add_step(Procedures::Repositories::Setup.new(:version => '6.2'))
46
47
  add_step(Procedures::Packages::Update.new(:assumeyes => true))
47
48
  add_step(Procedures::Installer::Upgrade.new)
48
49
  end
@@ -43,6 +43,7 @@ module Scenarios::Satellite_6_3_z
43
43
  end
44
44
 
45
45
  def compose
46
+ add_step(Procedures::Repositories::Setup.new(:version => '6.3'))
46
47
  add_step(Procedures::Packages::Update.new(:assumeyes => true))
47
48
  add_step(Procedures::Installer::Upgrade.new)
48
49
  end
@@ -16,6 +16,7 @@ module ForemanMaintain
16
16
  require 'foreman_maintain/concerns/scenario_metadata'
17
17
  require 'foreman_maintain/concerns/system_helpers'
18
18
  require 'foreman_maintain/concerns/hammer'
19
+ require 'foreman_maintain/concerns/base_database'
19
20
  require 'foreman_maintain/top_level_modules'
20
21
  require 'foreman_maintain/yaml_storage'
21
22
  require 'foreman_maintain/config'
@@ -98,6 +98,8 @@ module ForemanMaintain
98
98
  end
99
99
 
100
100
  def self.interactive_option
101
+ delete_duplicate_assumeyes_if_any
102
+
101
103
  option ['-y', '--assumeyes'], :flag,
102
104
  'Automatically answer yes for all questions'
103
105
 
@@ -110,6 +112,10 @@ module ForemanMaintain
110
112
  option ['-f', '--force'], :flag,
111
113
  'Force steps that would be skipped as they were already run'
112
114
  end
115
+
116
+ def self.delete_duplicate_assumeyes_if_any
117
+ declared_options.delete_if { |opt| opt.handles?('--assumeyes') }
118
+ end
113
119
  end
114
120
  end
115
121
  end
@@ -0,0 +1,33 @@
1
+ module ForemanMaintain
2
+ module Concerns
3
+ module BaseDatabase
4
+ def configuration
5
+ raise NotImplementedError
6
+ end
7
+
8
+ def query(sql, config = configuration)
9
+ parse_csv(query_csv(sql, config))
10
+ end
11
+
12
+ def query_csv(sql, config = configuration)
13
+ psql(%{COPY (#{sql}) TO STDOUT WITH CSV HEADER}, config)
14
+ end
15
+
16
+ def psql(query, config = configuration)
17
+ execute("PGPASSWORD='#{config[%(password)]}' #{psql_db_connection_str(config)}",
18
+ :stdin => query)
19
+ end
20
+
21
+ def ping(config = configuration)
22
+ psql('SELECT 1 as ping', config)
23
+ end
24
+
25
+ private
26
+
27
+ def psql_db_connection_str(config)
28
+ "psql -d #{config['database']} -h #{config['host'] || 'localhost'} "\
29
+ " -p #{config['port'] || '5432'} -U #{config['username']}"
30
+ end
31
+ end
32
+ end
33
+ end
@@ -138,6 +138,10 @@ module ForemanMaintain
138
138
  def version(value)
139
139
  Version.new(value)
140
140
  end
141
+
142
+ def format_shell_args(options = {})
143
+ options.map { |shell_optn, val| " #{shell_optn} '#{shellescape(val)}'" }.join
144
+ end
141
145
  end
142
146
  end
143
147
  end
@@ -3,13 +3,14 @@ module ForemanMaintain
3
3
  attr_reader :name, :description, :options
4
4
 
5
5
  def initialize(name, description, options, &block)
6
- options.validate_options!(:description, :required, :flag, :array)
6
+ options.validate_options!(:description, :required, :flag, :array, :allowed_values)
7
7
  @name = name
8
8
  @description = description || options[:description] || ''
9
9
  @options = options
10
10
  @required = @options.fetch(:required, false)
11
11
  @flag = @options.fetch(:flag, false)
12
12
  @block = block
13
+ @allowed_values = @options.fetch(:allowed_values, [])
13
14
  @array = @options.fetch(:array, false)
14
15
  end
15
16
 
@@ -34,6 +35,7 @@ module ForemanMaintain
34
35
  elsif flag?
35
36
  value = value ? true : false
36
37
  end
38
+ validate_with_allowed_values(value)
37
39
  value
38
40
  end
39
41
  # rubocop:enable Metrics/PerceivedComplexity,Metrics/CyclomaticComplexity
@@ -45,5 +47,21 @@ module ForemanMaintain
45
47
  value.to_s.split(',').map(&:strip)
46
48
  end
47
49
  end
50
+
51
+ def validate_with_allowed_values(value)
52
+ return if @allowed_values.empty?
53
+ within_allowed = case value
54
+ when Array
55
+ (value - @allowed_values).empty?
56
+ when Symbol, String
57
+ @allowed_values.include?(value.to_s)
58
+ else
59
+ raise NotImplementedError
60
+ end
61
+ return if within_allowed
62
+ error_msg = "'#{value}' not allowed for #{name} param."
63
+ raise ForemanMaintain::Error::UsageError,
64
+ "#{error_msg} Possible values are #{@allowed_values.join(', ')}"
65
+ end
48
66
  end
49
67
  end
@@ -209,7 +209,7 @@ module ForemanMaintain
209
209
  response = reporter.ask_decision(<<-MESSAGE.strip_heredoc.strip)
210
210
  The pre-upgrade checks indicate that the system is ready for upgrade.
211
211
  It's recommended to perform a backup at this stage.
212
- Confirm to continue with the the modification part of the upgrade
212
+ Confirm to continue with the modification part of the upgrade
213
213
  MESSAGE
214
214
  if [:no, :quit].include?(response)
215
215
  ask_to_quit
@@ -93,6 +93,7 @@ module ForemanMaintain
93
93
  end
94
94
 
95
95
  def hide_strings(string)
96
+ return unless string
96
97
  @hidden_patterns.reduce(string) do |result, hidden_pattern|
97
98
  result.gsub(hidden_pattern, '[FILTERED]')
98
99
  end
@@ -1,3 +1,4 @@
1
1
  require 'foreman_maintain/utils/disk/io'
2
2
  require 'foreman_maintain/utils/disk/device'
3
+ require 'foreman_maintain/utils/disk/stats'
3
4
  require 'foreman_maintain/utils/disk/nil_device'
@@ -26,6 +26,10 @@ module ForemanMaintain
26
26
  Expected disk speed: #{expected_io} #{default_unit}."
27
27
  end
28
28
 
29
+ def performance
30
+ "#{read_speed} #{unit}"
31
+ end
32
+
29
33
  private
30
34
 
31
35
  def init_io_device
@@ -46,11 +50,11 @@ module ForemanMaintain
46
50
  end
47
51
 
48
52
  def default_unit
49
- Checks::DiskSpeedMinimal::DEFAULT_UNIT
53
+ Checks::Disk::Performance::DEFAULT_UNIT
50
54
  end
51
55
 
52
56
  def expected_io
53
- Checks::DiskSpeedMinimal::EXPECTED_IO
57
+ Checks::Disk::Performance::EXPECTED_IO
54
58
  end
55
59
  end
56
60
  end
@@ -0,0 +1,25 @@
1
+ module ForemanMaintain
2
+ module Utils
3
+ module Disk
4
+ class Stats
5
+ attr_accessor :data
6
+
7
+ def initialize
8
+ @data = {}
9
+ end
10
+
11
+ def <<(io_obj)
12
+ data[io_obj.dir] = io_obj.performance
13
+ end
14
+
15
+ def stdout
16
+ if data.keys.length > 1
17
+ data.map { |dir, perf| "#{dir} : #{perf}" }.join("\n")
18
+ else
19
+ "Disk speed : #{data.values.first}"
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -1,3 +1,3 @@
1
1
  module ForemanMaintain
2
- VERSION = '0.1.2'.freeze
2
+ VERSION = '0.1.3'.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: 0.1.2
4
+ version: 0.1.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-01-08 00:00:00.000000000 Z
11
+ date: 2018-01-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: clamp
@@ -111,7 +111,8 @@ files:
111
111
  - bin/passenger-recycler
112
112
  - config/foreman_maintain.yml.example
113
113
  - config/foreman_maintain.yml.packaging
114
- - definitions/checks/disk_speed_minimal.rb
114
+ - definitions/checks/candlepin/validate_db.rb
115
+ - definitions/checks/disk/performance.rb
115
116
  - definitions/checks/foreman_proxy/verify_dhcp_config_syntax.rb
116
117
  - definitions/checks/foreman_tasks/invalid/check_old.rb
117
118
  - definitions/checks/foreman_tasks/invalid/check_pending_state.rb
@@ -120,6 +121,7 @@ files:
120
121
  - definitions/checks/foreman_tasks/not_running.rb
121
122
  - definitions/checks/hammer_ping.rb
122
123
  - definitions/checks/system_registration.rb
124
+ - definitions/features/candlepin_database.rb
123
125
  - definitions/features/downstream.rb
124
126
  - definitions/features/foreman_1_11_x.rb
125
127
  - definitions/features/foreman_1_7_x.rb
@@ -167,6 +169,7 @@ files:
167
169
  - lib/foreman_maintain/cli/health_command.rb
168
170
  - lib/foreman_maintain/cli/transform_clamp_options.rb
169
171
  - lib/foreman_maintain/cli/upgrade_command.rb
172
+ - lib/foreman_maintain/concerns/base_database.rb
170
173
  - lib/foreman_maintain/concerns/finders.rb
171
174
  - lib/foreman_maintain/concerns/hammer.rb
172
175
  - lib/foreman_maintain/concerns/logger.rb
@@ -200,6 +203,7 @@ files:
200
203
  - lib/foreman_maintain/utils/disk/io/block_device.rb
201
204
  - lib/foreman_maintain/utils/disk/io/file_system.rb
202
205
  - lib/foreman_maintain/utils/disk/nil_device.rb
206
+ - lib/foreman_maintain/utils/disk/stats.rb
203
207
  - lib/foreman_maintain/utils/hammer.rb
204
208
  - lib/foreman_maintain/version.rb
205
209
  - lib/foreman_maintain/yaml_storage.rb
@@ -1,57 +0,0 @@
1
- class Checks::DiskSpeedMinimal < ForemanMaintain::Check
2
- metadata do
3
- label :disk_io
4
- description 'Check for recommended disk speed of pulp, mongodb, pgsql dir.'
5
- tags :pre_upgrade
6
-
7
- preparation_steps { Procedures::Packages::Install.new(:packages => %w[hdparm fio]) }
8
-
9
- confine do
10
- feature(:katello)
11
- end
12
- end
13
-
14
- EXPECTED_IO = 80
15
- DEFAULT_UNIT = 'MB/sec'.freeze
16
-
17
- def run
18
- with_spinner(description) do |spinner|
19
- io_obj, success = compute_disk_speed(spinner)
20
- spinner.update('Finished')
21
-
22
- assert(success, io_obj.slow_disk_error_msg)
23
- end
24
- end
25
-
26
- def check_only_single_device?
27
- feature(:katello).data_dirs.map do |dir|
28
- ForemanMaintain::Utils::Disk::Device.new(dir).name
29
- end.uniq.length <= 1
30
- end
31
-
32
- def dirs_to_check
33
- return feature(:katello).data_dirs.first(1) if check_only_single_device?
34
- feature(:katello).data_dirs
35
- end
36
-
37
- private
38
-
39
- def compute_disk_speed(spinner)
40
- success = true
41
- io_obj = ForemanMaintain::Utils::Disk::NilDevice.new
42
-
43
- dirs_to_check.each do |dir|
44
- io_obj = ForemanMaintain::Utils::Disk::Device.new(dir)
45
-
46
- spinner.update("[Speed check In-Progress] device: #{io_obj.name}")
47
-
48
- next if io_obj.read_speed >= EXPECTED_IO
49
-
50
- success = false
51
- logger.info "Slow disk detected #{dir}: #{io_obj.read_speed} #{io_obj.unit}."
52
- break
53
- end
54
-
55
- [io_obj, success]
56
- end
57
- end