foreman_maintain 0.3.6 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
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