foreman_maintain 0.3.6 → 0.4.1

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 (62) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +30 -16
  3. data/bin/passenger-recycler +22 -22
  4. data/config/foreman_maintain.yml.example +7 -0
  5. data/config/foreman_maintain.yml.packaging +4 -0
  6. data/definitions/checks/candlepin/db_up.rb +1 -1
  7. data/definitions/checks/check_hotfix_installed.rb +90 -0
  8. data/definitions/checks/check_tmout.rb +20 -0
  9. data/definitions/checks/disk/performance.rb +1 -11
  10. data/definitions/checks/maintenance_mode/check_consistency.rb +62 -0
  11. data/definitions/checks/puppet/verify_no_empty_cacert_requests.rb +24 -0
  12. data/definitions/checks/repositories/check_upstream_repository.rb +22 -0
  13. data/definitions/checks/repositories/validate.rb +2 -2
  14. data/definitions/features/cron.rb +29 -0
  15. data/definitions/features/downstream.rb +3 -3
  16. data/definitions/features/foreman_1_7_x.rb +0 -35
  17. data/definitions/features/foreman_database.rb +0 -6
  18. data/definitions/features/iptables.rb +58 -0
  19. data/definitions/features/mongo.rb +7 -9
  20. data/definitions/features/pulp.rb +2 -4
  21. data/definitions/features/puppet_server.rb +45 -4
  22. data/definitions/features/service.rb +33 -2
  23. data/definitions/features/sync_plans.rb +50 -25
  24. data/definitions/features/system_repos.rb +50 -0
  25. data/definitions/features/tar.rb +1 -0
  26. data/definitions/procedures/backup/config_files.rb +1 -4
  27. data/definitions/procedures/backup/offline/mongo.rb +1 -1
  28. data/definitions/procedures/backup/online/pg_global_objects.rb +5 -1
  29. data/definitions/procedures/backup/pulp.rb +6 -1
  30. data/definitions/procedures/backup/snapshot/logical_volume_confirmation.rb +2 -2
  31. data/definitions/procedures/backup/snapshot/mount_mongo.rb +14 -6
  32. data/definitions/procedures/backup/snapshot/mount_pulp.rb +6 -4
  33. data/definitions/procedures/crond/start.rb +19 -0
  34. data/definitions/procedures/crond/stop.rb +18 -0
  35. data/definitions/procedures/iptables/add_maintenance_mode_chain.rb +15 -0
  36. data/definitions/procedures/iptables/remove_maintenance_mode_chain.rb +15 -0
  37. data/definitions/procedures/maintenance_mode/is_enabled.rb +16 -0
  38. data/definitions/procedures/passenger_recycler.rb +3 -2
  39. data/definitions/procedures/puppet/delete_empty_ca_cert_request_files.rb +37 -0
  40. data/definitions/procedures/repositories/disable.rb +13 -0
  41. data/definitions/procedures/service/base.rb +3 -2
  42. data/definitions/procedures/sync_plans/disable.rb +2 -2
  43. data/definitions/procedures/sync_plans/enable.rb +1 -1
  44. data/definitions/scenarios/backup.rb +10 -10
  45. data/definitions/scenarios/maintenance_mode.rb +53 -0
  46. data/lib/foreman_maintain.rb +1 -0
  47. data/lib/foreman_maintain/cli.rb +3 -0
  48. data/lib/foreman_maintain/cli/base.rb +17 -0
  49. data/lib/foreman_maintain/cli/maintenance_mode_command.rb +50 -0
  50. data/lib/foreman_maintain/concerns/directory_marker.rb +35 -0
  51. data/lib/foreman_maintain/concerns/system_service.rb +5 -1
  52. data/lib/foreman_maintain/config.rb +12 -1
  53. data/lib/foreman_maintain/param.rb +2 -1
  54. data/lib/foreman_maintain/reporter/cli_reporter.rb +1 -1
  55. data/lib/foreman_maintain/utils/command_runner.rb +1 -1
  56. data/lib/foreman_maintain/utils/service.rb +4 -0
  57. data/lib/foreman_maintain/utils/service/systemd.rb +1 -1
  58. data/lib/foreman_maintain/version.rb +1 -1
  59. metadata +21 -6
  60. data/definitions/features/puppet.rb +0 -23
  61. data/definitions/procedures/maintenance_mode/disable.rb +0 -13
  62. data/definitions/procedures/maintenance_mode/enable.rb +0 -13
@@ -0,0 +1,53 @@
1
+ module ForemanMaintain::Scenarios
2
+ class MaintenanceModeStart < ForemanMaintain::Scenario
3
+ metadata do
4
+ description 'Start maintenance-mode'
5
+ tags :maintenance_mode_start
6
+ label :maintenance_mode_start
7
+ manual_detection
8
+ end
9
+
10
+ def compose
11
+ add_steps(find_procedures(:maintenance_mode_on))
12
+ end
13
+ end
14
+
15
+ class MaintenanceModeStop < ForemanMaintain::Scenario
16
+ metadata do
17
+ description 'Stop maintenance-mode'
18
+ tags :maintenance_mode_stop
19
+ label :maintenance_mode_stop
20
+ manual_detection
21
+ end
22
+
23
+ def compose
24
+ add_steps(find_procedures(:maintenance_mode_off))
25
+ end
26
+ end
27
+
28
+ class MaintenanceModeStatus < ForemanMaintain::Scenario
29
+ metadata do
30
+ description 'Status of maintenance-mode'
31
+ tags :maintenance_mode_status
32
+ label :maintenance_mode_status
33
+ manual_detection
34
+ end
35
+
36
+ def compose
37
+ add_step(Checks::MaintenanceMode::CheckConsistency)
38
+ end
39
+ end
40
+
41
+ class IsMaintenanceMode < ForemanMaintain::Scenario
42
+ metadata do
43
+ description 'Show only status code of maintenance-mode'
44
+ tags :is_maintenance_mode_enabled
45
+ label :is_maintenance_mode_enabled
46
+ manual_detection
47
+ end
48
+
49
+ def compose
50
+ add_step(Procedures::MaintenanceMode::IsEnabled.new)
51
+ end
52
+ end
53
+ end
@@ -19,6 +19,7 @@ module ForemanMaintain
19
19
  require 'foreman_maintain/concerns/system_service'
20
20
  require 'foreman_maintain/concerns/hammer'
21
21
  require 'foreman_maintain/concerns/base_database'
22
+ require 'foreman_maintain/concerns/directory_marker'
22
23
  require 'foreman_maintain/top_level_modules'
23
24
  require 'foreman_maintain/yaml_storage'
24
25
  require 'foreman_maintain/config'
@@ -8,6 +8,7 @@ require 'foreman_maintain/cli/backup_command'
8
8
  require 'foreman_maintain/cli/advanced_command'
9
9
  require 'foreman_maintain/cli/service_command'
10
10
  require 'foreman_maintain/cli/restore_command'
11
+ require 'foreman_maintain/cli/maintenance_mode_command'
11
12
 
12
13
  module ForemanMaintain
13
14
  module Cli
@@ -20,6 +21,8 @@ module ForemanMaintain
20
21
  subcommand 'backup', 'Backup server', BackupCommand
21
22
  subcommand 'restore', 'Restore a backup', RestoreCommand
22
23
  subcommand 'advanced', 'Advanced tools for server maintenance', AdvancedCommand
24
+ subcommand 'maintenance-mode', 'Control maintenance-mode for application',
25
+ MaintenanceModeCommand
23
26
 
24
27
  def run(*arguments)
25
28
  logger.info("Running foreman-maintain command with arguments #{arguments.inspect}")
@@ -7,6 +7,23 @@ module ForemanMaintain
7
7
 
8
8
  attr_reader :runner
9
9
 
10
+ class << self
11
+ include Concerns::Logger
12
+
13
+ def subcommand(name, description, subcommand_class = self, &block)
14
+ add_command = true
15
+ if subcommand_class.superclass == ForemanMaintain::Cli::Base
16
+ sc = subcommand_class.to_s
17
+ sc.slice!('ForemanMaintain::Cli::')
18
+ if ForemanMaintain.config.disable_commands.include? sc
19
+ logger.info("Disable command #{sc}")
20
+ add_command = false
21
+ end
22
+ end
23
+ super if add_command
24
+ end
25
+ end
26
+
10
27
  def self.dashize(string)
11
28
  string.to_s.tr('_', '-')
12
29
  end
@@ -0,0 +1,50 @@
1
+ module ForemanMaintain
2
+ module Cli
3
+ class MaintenanceModeCommand < Base
4
+ extend Concerns::Finders
5
+
6
+ subcommand 'start', 'Start maintenance-mode' do
7
+ def execute
8
+ scenario = Scenarios::MaintenanceModeStart.new
9
+ run_scenario(scenario)
10
+ exit runner.exit_code
11
+ end
12
+ end
13
+
14
+ subcommand 'stop', 'Stop maintenance-mode' do
15
+ def execute
16
+ scenario = Scenarios::MaintenanceModeStop.new
17
+ run_scenario(scenario)
18
+ exit runner.exit_code
19
+ end
20
+ end
21
+
22
+ subcommand 'status', 'Get maintenance-mode status' do
23
+ def execute
24
+ scenario = Scenarios::MaintenanceModeStatus.new
25
+ run_scenario(scenario)
26
+ exit runner.exit_code
27
+ end
28
+ end
29
+
30
+ subcommand 'is-enabled', 'Get maintenance-mode status code' do
31
+ def execute
32
+ scenario = Scenarios::IsMaintenanceMode.new
33
+ run_scenario(scenario)
34
+ procedure_used = fetch_procedure(scenario, Procedures::MaintenanceMode::IsEnabled)
35
+ puts procedure_used.status_code
36
+
37
+ if procedure_used.status_code == 1
38
+ exit procedure_used.status_code
39
+ else
40
+ exit runner.exit_code
41
+ end
42
+ end
43
+
44
+ def fetch_procedure(scenario, procedure_class_name)
45
+ scenario.steps.find { |procedure| procedure.class.eql?(procedure_class_name) }
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,35 @@
1
+ module ForemanMaintain
2
+ module Concerns
3
+ module DirectoryMarker
4
+ def with_marked_directory(directory)
5
+ mark_directory(directory)
6
+ yield
7
+ unmark_directory(directory)
8
+ end
9
+
10
+ def find_marked_directory(directory)
11
+ find_dir_containing_file(directory, mark_name)
12
+ end
13
+
14
+ def mark_name
15
+ cls = self.class.name.split('::').last.downcase
16
+ ".#{cls}_directory_mark"
17
+ end
18
+
19
+ private
20
+
21
+ def unmark_directory(directory)
22
+ filename = mark_file_path(directory)
23
+ File.delete(filename) if File.exist?(filename)
24
+ end
25
+
26
+ def mark_directory(directory)
27
+ File.open(mark_file_path(directory), 'a') {}
28
+ end
29
+
30
+ def mark_file_path(directory)
31
+ File.join(directory, mark_name)
32
+ end
33
+ end
34
+ end
35
+ end
@@ -1,9 +1,13 @@
1
1
  module ForemanMaintain
2
2
  module Concerns
3
3
  module SystemService
4
- def system_service(name, priority, options = {})
4
+ def system_service(name, priority = 50, options = {})
5
5
  ForemanMaintain::Utils.system_service(name, priority, options)
6
6
  end
7
+
8
+ def valid_sys_service?(service)
9
+ ForemanMaintain::Utils.valid_sys_service?(service)
10
+ end
7
11
  end
8
12
  end
9
13
  end
@@ -4,7 +4,7 @@ module ForemanMaintain
4
4
  attr_accessor :pre_setup_log_messages,
5
5
  :config_file, :definitions_dirs, :log_level, :log_dir, :log_file_size,
6
6
  :log_filename, :storage_file, :backup_dir, :foreman_proxy_cert_path,
7
- :db_backup_dir, :completion_cache_file
7
+ :db_backup_dir, :completion_cache_file, :disable_commands, :manage_crond
8
8
 
9
9
  def initialize(options)
10
10
  @pre_setup_log_messages = []
@@ -14,10 +14,12 @@ module ForemanMaintain
14
14
  [File.join(source_path, 'definitions')])
15
15
  load_log_configs
16
16
  load_backup_dir_paths
17
+ load_cron_option
17
18
  @foreman_proxy_cert_path = @options.fetch(:foreman_proxy_cert_path, '/etc/foreman')
18
19
  @completion_cache_file = File.expand_path(
19
20
  @options.fetch(:completion_cache_file, '~/.cache/foreman_maintain_completion.yml')
20
21
  )
22
+ @disable_commands = @options.fetch(:disable_commands, [])
21
23
  end
22
24
 
23
25
  private
@@ -41,6 +43,11 @@ module ForemanMaintain
41
43
  )
42
44
  end
43
45
 
46
+ def load_cron_option
47
+ opt_val = @options.fetch(:manage_crond, false)
48
+ @manage_crond = boolean?(opt_val) ? opt_val : false
49
+ end
50
+
44
51
  def load_config
45
52
  if File.exist?(config_file)
46
53
  YAML.load(File.open(config_file)) || {}
@@ -71,5 +78,9 @@ module ForemanMaintain
71
78
  end
72
79
  dir_path
73
80
  end
81
+
82
+ def boolean?(value)
83
+ [true, false].include? value
84
+ end
74
85
  end
75
86
  end
@@ -3,7 +3,8 @@ 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, :allowed_values, :default)
6
+ options.validate_options!(:description, :required, :flag, :array,
7
+ :allowed_values, :default)
7
8
  @name = name
8
9
  @description = description || options[:description] || ''
9
10
  @options = options
@@ -317,7 +317,7 @@ module ForemanMaintain
317
317
 
318
318
  recommend << <<-MESSAGE.strip_heredoc
319
319
  The steps in warning state itself might not mean there is an error,
320
- but it should be reviewed to ensure the behavior is expected
320
+ but it should be reviews to ensure the behavior is expected
321
321
  MESSAGE
322
322
  end
323
323
  puts((message + recommend).join("\n"))
@@ -13,7 +13,7 @@ module ForemanMaintain
13
13
  @logger = logger
14
14
  @command = command
15
15
  @stdin = options[:stdin]
16
- @hidden_patterns = Array(options[:hidden_patterns])
16
+ @hidden_patterns = Array(options[:hidden_patterns]).compact
17
17
  @interactive = options[:interactive]
18
18
  @options = options
19
19
  @valid_exit_statuses = options[:valid_exit_statuses]
@@ -11,4 +11,8 @@ module ForemanMaintain::Utils
11
11
  Service::Systemd.new(name, priority, options)
12
12
  end
13
13
  end
14
+
15
+ def self.valid_sys_service?(service)
16
+ service.class < Service::Abstract
17
+ end
14
18
  end
@@ -44,7 +44,7 @@ module ForemanMaintain::Utils
44
44
  systemd = @sys.execute("systemctl is-enabled #{@name} 2>&1 | tail -1").strip
45
45
  systemd == 'enabled' || systemd == 'disabled'
46
46
  else
47
- File.exist?("/etc/init.d/#{service}")
47
+ File.exist?("/etc/init.d/#{@name}")
48
48
  end
49
49
  end
50
50
 
@@ -1,3 +1,3 @@
1
1
  module ForemanMaintain
2
- VERSION = '0.3.6'.freeze
2
+ VERSION = '0.4.1'.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.3.6
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ivan Nečas
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-10-01 00:00:00.000000000 Z
11
+ date: 2019-02-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: clamp
@@ -123,6 +123,8 @@ files:
123
123
  - definitions/checks/candlepin/db_up.rb
124
124
  - definitions/checks/candlepin/validate_db.rb
125
125
  - definitions/checks/check_epel_repository.rb
126
+ - definitions/checks/check_hotfix_installed.rb
127
+ - definitions/checks/check_tmout.rb
126
128
  - definitions/checks/disk/available_space.rb
127
129
  - definitions/checks/disk/performance.rb
128
130
  - definitions/checks/foreman/check_corrupted_roles.rb
@@ -136,10 +138,13 @@ files:
136
138
  - definitions/checks/foreman_tasks/not_paused.rb
137
139
  - definitions/checks/foreman_tasks/not_running.rb
138
140
  - definitions/checks/hammer_ping.rb
141
+ - definitions/checks/maintenance_mode/check_consistency.rb
139
142
  - definitions/checks/mongo/db_up.rb
140
143
  - definitions/checks/mongo/tools_installed.rb
141
144
  - definitions/checks/puppet/provide_upgrade_guide.rb
145
+ - definitions/checks/puppet/verify_no_empty_cacert_requests.rb
142
146
  - definitions/checks/remote_execution/verify_settings_file_already_exists.rb
147
+ - definitions/checks/repositories/check_upstream_repository.rb
143
148
  - definitions/checks/repositories/validate.rb
144
149
  - definitions/checks/restore/validate_backup.rb
145
150
  - definitions/checks/restore/validate_hostname.rb
@@ -148,6 +153,7 @@ files:
148
153
  - definitions/checks/system_registration.rb
149
154
  - definitions/features/candlepin.rb
150
155
  - definitions/features/candlepin_database.rb
156
+ - definitions/features/cron.rb
151
157
  - definitions/features/downstream.rb
152
158
  - definitions/features/foreman_1_11_x.rb
153
159
  - definitions/features/foreman_1_7_x.rb
@@ -160,13 +166,14 @@ files:
160
166
  - definitions/features/hammer.rb
161
167
  - definitions/features/installer.rb
162
168
  - definitions/features/instance.rb
169
+ - definitions/features/iptables.rb
163
170
  - definitions/features/katello.rb
164
171
  - definitions/features/mongo.rb
165
172
  - definitions/features/pulp.rb
166
- - definitions/features/puppet.rb
167
173
  - definitions/features/puppet_server.rb
168
174
  - definitions/features/service.rb
169
175
  - definitions/features/sync_plans.rb
176
+ - definitions/features/system_repos.rb
170
177
  - definitions/features/tar.rb
171
178
  - definitions/features/upstream.rb
172
179
  - definitions/procedures/backup/accessibility_confirmation.rb
@@ -193,6 +200,8 @@ files:
193
200
  - definitions/procedures/backup/snapshot/mount_pulp.rb
194
201
  - definitions/procedures/backup/snapshot/prepare_mount.rb
195
202
  - definitions/procedures/candlepin/delete_orphaned_records_from_env_content.rb
203
+ - definitions/procedures/crond/start.rb
204
+ - definitions/procedures/crond/stop.rb
196
205
  - definitions/procedures/foreman/fix_corrupted_roles.rb
197
206
  - definitions/procedures/foreman_openscap/invalid_report_associations.rb
198
207
  - definitions/procedures/foreman_tasks/delete.rb
@@ -201,14 +210,17 @@ files:
201
210
  - definitions/procedures/foreman_tasks/ui_investigate.rb
202
211
  - definitions/procedures/hammer_setup.rb
203
212
  - definitions/procedures/installer/upgrade.rb
213
+ - definitions/procedures/iptables/add_maintenance_mode_chain.rb
214
+ - definitions/procedures/iptables/remove_maintenance_mode_chain.rb
204
215
  - definitions/procedures/knowledge_base_article.rb
205
- - definitions/procedures/maintenance_mode/disable.rb
206
- - definitions/procedures/maintenance_mode/enable.rb
216
+ - definitions/procedures/maintenance_mode/is_enabled.rb
207
217
  - definitions/procedures/packages/install.rb
208
218
  - definitions/procedures/packages/update.rb
209
219
  - definitions/procedures/passenger_recycler.rb
210
220
  - definitions/procedures/pulp/migrate.rb
221
+ - definitions/procedures/puppet/delete_empty_ca_cert_request_files.rb
211
222
  - definitions/procedures/remote_execution/remove_existing_settingsd.rb
223
+ - definitions/procedures/repositories/disable.rb
212
224
  - definitions/procedures/repositories/setup.rb
213
225
  - definitions/procedures/restore/candlepin_dump.rb
214
226
  - definitions/procedures/restore/configs.rb
@@ -234,6 +246,7 @@ files:
234
246
  - definitions/procedures/sync_plans/disable.rb
235
247
  - definitions/procedures/sync_plans/enable.rb
236
248
  - definitions/scenarios/backup.rb
249
+ - definitions/scenarios/maintenance_mode.rb
237
250
  - definitions/scenarios/restore.rb
238
251
  - definitions/scenarios/services.rb
239
252
  - definitions/scenarios/upgrade_to_satellite_6_2.rb
@@ -257,11 +270,13 @@ files:
257
270
  - lib/foreman_maintain/cli/backup_command.rb
258
271
  - lib/foreman_maintain/cli/base.rb
259
272
  - lib/foreman_maintain/cli/health_command.rb
273
+ - lib/foreman_maintain/cli/maintenance_mode_command.rb
260
274
  - lib/foreman_maintain/cli/restore_command.rb
261
275
  - lib/foreman_maintain/cli/service_command.rb
262
276
  - lib/foreman_maintain/cli/transform_clamp_options.rb
263
277
  - lib/foreman_maintain/cli/upgrade_command.rb
264
278
  - lib/foreman_maintain/concerns/base_database.rb
279
+ - lib/foreman_maintain/concerns/directory_marker.rb
265
280
  - lib/foreman_maintain/concerns/finders.rb
266
281
  - lib/foreman_maintain/concerns/hammer.rb
267
282
  - lib/foreman_maintain/concerns/logger.rb
@@ -329,7 +344,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
329
344
  version: '0'
330
345
  requirements: []
331
346
  rubyforge_project:
332
- rubygems_version: 2.7.10
347
+ rubygems_version: 2.6.14.1
333
348
  signing_key:
334
349
  specification_version: 4
335
350
  summary: Foreman maintenance tool belt
@@ -1,23 +0,0 @@
1
- class Features::Puppet < ForemanMaintain::Feature
2
- metadata do
3
- label :puppet
4
-
5
- confine do
6
- find_package('puppetserver')
7
- end
8
- end
9
-
10
- def config_files
11
- [
12
- '/etc/puppet',
13
- '/etc/puppetlabs',
14
- '/opt/puppetlabs/puppet/cache/foreman_cache_data',
15
- '/var/lib/puppet/foreman_cache_data',
16
- '/opt/puppetlabs/puppet/ssl/',
17
- '/var/lib/puppet/ssl',
18
- '/var/lib/puppet',
19
- '/usr/share/ruby/vendor_ruby/puppet/reports/foreman.rb',
20
- '/opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/reports/foreman.rb'
21
- ]
22
- end
23
- end