foreman_maintain 0.4.10 → 0.5.0

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 (47) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -2
  3. data/definitions/checks/backup/certs_tar_exist.rb +8 -8
  4. data/definitions/checks/candlepin/validate_db.rb +1 -1
  5. data/definitions/checks/check_epel_repository.rb +1 -1
  6. data/definitions/checks/check_hotfix_installed.rb +2 -2
  7. data/definitions/checks/disk/performance.rb +6 -3
  8. data/definitions/checks/puppet/provide_upgrade_guide.rb +3 -3
  9. data/definitions/checks/remote_execution/verify_settings_file_already_exists.rb +2 -2
  10. data/definitions/checks/repositories/check_upstream_repository.rb +1 -1
  11. data/definitions/checks/repositories/validate.rb +6 -5
  12. data/definitions/checks/system_registration.rb +1 -3
  13. data/definitions/features/capsule.rb +20 -0
  14. data/definitions/features/cron.rb +1 -1
  15. data/definitions/features/foreman_server.rb +1 -1
  16. data/definitions/features/installer.rb +2 -1
  17. data/definitions/features/instance.rb +15 -9
  18. data/definitions/features/satellite.rb +25 -0
  19. data/definitions/features/service.rb +2 -2
  20. data/definitions/features/upstream.rb +2 -1
  21. data/definitions/procedures/backup/compress_data.rb +1 -1
  22. data/definitions/procedures/backup/config_files.rb +2 -1
  23. data/definitions/procedures/candlepin/delete_orphaned_records_from_env_content.rb +1 -2
  24. data/definitions/procedures/foreman_proxy/features.rb +4 -1
  25. data/definitions/procedures/knowledge_base_article.rb +1 -1
  26. data/definitions/procedures/repositories/setup.rb +2 -2
  27. data/definitions/scenarios/restore.rb +1 -1
  28. data/definitions/scenarios/upgrade_to_satellite_6_2.rb +1 -1
  29. data/definitions/scenarios/upgrade_to_satellite_6_2_z.rb +1 -1
  30. data/definitions/scenarios/upgrade_to_satellite_6_3.rb +1 -1
  31. data/definitions/scenarios/upgrade_to_satellite_6_3_z.rb +1 -1
  32. data/definitions/scenarios/upgrade_to_satellite_6_4.rb +1 -1
  33. data/definitions/scenarios/upgrade_to_satellite_6_4_z.rb +1 -1
  34. data/definitions/scenarios/upgrade_to_satellite_6_5.rb +1 -1
  35. data/definitions/scenarios/upgrade_to_satellite_6_5_z.rb +1 -1
  36. data/definitions/scenarios/upgrade_to_satellite_6_6.rb +1 -1
  37. data/definitions/scenarios/upgrade_to_satellite_6_6_z.rb +1 -1
  38. data/definitions/scenarios/upgrade_to_satellite_6_7.rb +80 -0
  39. data/definitions/scenarios/upgrade_to_satellite_6_7_z.rb +80 -0
  40. data/lib/foreman_maintain.rb +1 -0
  41. data/lib/foreman_maintain/cli/backup_command.rb +2 -1
  42. data/lib/foreman_maintain/cli/base.rb +2 -2
  43. data/lib/foreman_maintain/concerns/downstream.rb +123 -0
  44. data/lib/foreman_maintain/concerns/system_helpers.rb +0 -9
  45. data/lib/foreman_maintain/version.rb +1 -1
  46. metadata +6 -2
  47. data/definitions/features/downstream.rb +0 -111
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5e987c2a5c95bc27df7b64d739c05cd6779041dc417f13934586931d9e966889
4
- data.tar.gz: 8a5e15f6c859d19b8392e620de886d18173327627ee79cf26732ae928fb79aff
3
+ metadata.gz: f7559f6d4d97f5b61279e22233855efd6ffcf4061013b107389f9bb0469832e5
4
+ data.tar.gz: 9a3c76b2006e87a0f2d5a6021f26a35624c70e08409dafffa76e1a518565e89a
5
5
  SHA512:
6
- metadata.gz: 7455550b50b9d07f3eb1b25a822624376b24f78f539c111ed88013bbc862811ea9da0984d57787ac292e579ae0a0778916b17698a9194c9ece457122986363f1
7
- data.tar.gz: c70bc731147c15cc1d5bd177cf971d27dfdc096326b6268b7e4c21d95f75275043dbb528dce3ca1866293148c9f6f68aa47bb9370834e51595f804b0e7d3254a
6
+ metadata.gz: 7967c8ed3ec1830e917f25765626758ba4d8d1af636d7003e6522ddd038540fab1f33d62630cacd1dfd2855084bb2e2b4cbc50be84ed8582e3157a819f7bb4d5
7
+ data.tar.gz: 7c5fbf539f92af28e9e4326b276812c1f4bb4a13aaca8b0948f7c8d33fb26f7480864d6d269cb141c50e8870cc7a1dae9e668c25163d4b86fadf8033c4cf1cb6
data/README.md CHANGED
@@ -13,8 +13,8 @@ Subcommands:
13
13
  list List the checks based on criteria
14
14
  list-tags List the tags to use for filtering checks
15
15
  check Run the health checks against the system
16
- --label label Run only a specific check
17
- --tags tags Limit only for specific set of tags
16
+ --label label Run only a specific check with a label
17
+ --tags tags Run only those with all specific set of tags
18
18
 
19
19
  upgrade Upgrade related commands
20
20
  list-versions List versions this system is upgradable to
@@ -3,17 +3,17 @@ module Checks::Backup
3
3
  metadata do
4
4
  description 'Check if proxy certs_tar exist'
5
5
  tags :backup
6
- for_feature :foreman_proxy
6
+ confine do
7
+ feature(:foreman_proxy) && !feature(:foreman_proxy).internal?
8
+ end
7
9
  end
8
10
 
9
11
  def run
10
- unless feature(:foreman_proxy).internal?
11
- if certs_tar && !File.exist?(certs_tar)
12
- name = feature(:instance).proxy_product_name
13
- fail! "#{name} certs tar file is not present on the system" \
14
- " in path '#{certs_tar}'. \nPlease move the file back to that" \
15
- ' location or generate a new one on the main server.'
16
- end
12
+ if certs_tar && !File.exist?(certs_tar)
13
+ name = feature(:instance).foreman_proxy_product_name
14
+ fail! "#{name} certs tar file is not present on the system" \
15
+ " in path '#{certs_tar}'. \nPlease move the file back to that" \
16
+ ' location or generate a new one on the main server.'
17
17
  end
18
18
  end
19
19
 
@@ -12,7 +12,7 @@ module Checks::Candlepin
12
12
  def run
13
13
  result, result_msg = feature(:candlepin_database).execute_cpdb_validate_cmd
14
14
  next_steps = []
15
- if feature(:downstream) && feature(:downstream).current_minor_version == '6.2'
15
+ if feature(:satellite) && feature(:satellite).current_minor_version == '6.2'
16
16
  next_steps.concat(
17
17
  [Procedures::Candlepin::DeleteOrphanedRecordsFromEnvContent.new,
18
18
  Procedures::KnowledgeBaseArticle.new(:doc => 'fix_cpdb_validate_failure')]
@@ -4,7 +4,7 @@ class Checks::CheckEpelRepository < ForemanMaintain::Check
4
4
  description 'Check if EPEL repository enabled on system'
5
5
  tags :pre_upgrade
6
6
  confine do
7
- feature(:downstream)
7
+ feature(:instance).downstream
8
8
  end
9
9
  end
10
10
 
@@ -8,12 +8,12 @@ class Checks::CheckHotfixInstalled < ForemanMaintain::Check
8
8
  end
9
9
 
10
10
  confine do
11
- feature(:downstream)
11
+ feature(:instance).downstream
12
12
  end
13
13
  end
14
14
 
15
15
  def run
16
- if feature(:downstream).subscribed_using_activation_key?
16
+ if feature(:instance).downstream.subscribed_using_activation_key?
17
17
  skip "Your system is subscribed using custom activation key. Hotfixes can't be detected."
18
18
  else
19
19
  with_spinner('Checking for presence of hotfix(es). It may take some time to verify.') do
@@ -13,8 +13,10 @@ module Checks
13
13
  end
14
14
 
15
15
  EXPECTED_IO = 60
16
- DEFAULT_UNIT = 'MB/sec'.freeze
17
- DEFAULT_DIRS = ['/var/lib/pulp', '/var/lib/mongodb', '/var/lib/pgsql'].freeze
16
+ DEFAULT_UNIT = 'MB/sec'.freeze
17
+ DEFAULT_DIRS = [
18
+ '/var/lib/pulp', '/var/lib/mongodb', '/var/lib/pgsql'
19
+ ].select { |file_path| File.directory?(file_path) }.freeze
18
20
 
19
21
  attr_reader :stats
20
22
 
@@ -26,7 +28,8 @@ module Checks
26
28
  puts "\n"
27
29
  puts stats.stdout
28
30
 
29
- if feature(:downstream) && feature(:downstream).at_least_version?('6.3')
31
+ current_downstream_feature = feature(:instance).downstream
32
+ if current_downstream_feature && current_downstream_feature.at_least_version?('6.3')
30
33
  assert(success, io_obj.slow_disk_error_msg + warning_message, :warn => true)
31
34
  else
32
35
  assert(success, io_obj.slow_disk_error_msg)
@@ -4,8 +4,8 @@ module Checks::Puppet
4
4
  description 'Verify puppet and provide upgrade guide for it'
5
5
  tags :puppet_upgrade_guide
6
6
  confine do
7
- feature(:downstream) &&
8
- feature(:downstream).current_minor_version == '6.3' &&
7
+ feature(:instance).downstream &&
8
+ feature(:instance).downstream.current_minor_version == '6.3' &&
9
9
  find_package('puppet')
10
10
  end
11
11
  manual_detection
@@ -15,7 +15,7 @@ module Checks::Puppet
15
15
  with_spinner('Verifying puppet version before upgrade') do |spinner|
16
16
  puppet_package = find_package('puppet')
17
17
  spinner.update "current puppet version: #{puppet_package}"
18
- curr_sat_version = feature(:downstream).current_minor_version
18
+ curr_sat_version = feature(:instance).downstream.current_minor_version
19
19
  assert(
20
20
  (puppet_package !~ /puppet-3/),
21
21
  'Before continuing with upgrade, please make sure you finish puppet upgrade.',
@@ -4,8 +4,8 @@ module Checks::RemoteExecution
4
4
  description 'Check to verify remote_execution_ssh settings already exist'
5
5
 
6
6
  confine do
7
- feature(:downstream) &&
8
- feature(:downstream).current_minor_version == '6.2' &&
7
+ feature(:instance).downstream &&
8
+ feature(:instance).downstream.current_minor_version == '6.2' &&
9
9
  find_package('tfm-rubygem-smart_proxy_dynflow_core') &&
10
10
  file_exists?('/etc/smart_proxy_dynflow_core')
11
11
  end
@@ -7,7 +7,7 @@ class Checks::CheckUpstreamRepository < ForemanMaintain::Check
7
7
  Procedures::Packages::Install.new(:packages => %w[yum-utils])
8
8
  end
9
9
  confine do
10
- feature(:downstream)
10
+ feature(:instance).downstream
11
11
  end
12
12
  end
13
13
 
@@ -7,7 +7,7 @@ module Checks::Repositories
7
7
  end
8
8
 
9
9
  confine do
10
- feature(:downstream)
10
+ feature(:instance).downstream
11
11
  end
12
12
 
13
13
  param :version,
@@ -18,7 +18,7 @@ module Checks::Repositories
18
18
  end
19
19
 
20
20
  def run
21
- if feature(:downstream).subscribed_using_activation_key?
21
+ if feature(:instance).downstream.subscribed_using_activation_key?
22
22
  skip 'Your system is subscribed using custom activation key'
23
23
  else
24
24
  with_spinner("Validating availability of repositories for #{@version}") do |spinner|
@@ -30,11 +30,12 @@ module Checks::Repositories
30
30
  private
31
31
 
32
32
  def find_absent_repos(spinner)
33
- absent_repos = feature(:downstream).absent_repos(@version)
33
+ current_downstream_feature = feature(:instance).downstream
34
+ absent_repos = current_downstream_feature.absent_repos(@version)
34
35
  unless absent_repos.empty?
35
36
  spinner.update('Some repositories missing, calling `subscription-manager refresh`')
36
- feature(:downstream).rhsm_refresh
37
- absent_repos = feature(:downstream).absent_repos(@version)
37
+ current_downstream_feature.rhsm_refresh
38
+ absent_repos = current_downstream_feature.absent_repos(@version)
38
39
  end
39
40
  unless absent_repos.empty?
40
41
  fail!(
@@ -5,9 +5,7 @@ class Checks::SystemRegistration < ForemanMaintain::Check
5
5
  tags :default
6
6
 
7
7
  confine do
8
- file_exists?('/etc/rhsm/rhsm.conf') &&
9
- !feature(:foreman_server) &&
10
- feature(:foreman_proxy)
8
+ file_exists?('/etc/rhsm/rhsm.conf') && feature(:instance).downstream
11
9
  end
12
10
  end
13
11
 
@@ -0,0 +1,20 @@
1
+ class Features::Capsule < ForemanMaintain::Feature
2
+ include ForemanMaintain::Concerns::Downstream
3
+
4
+ metadata do
5
+ label :capsule
6
+
7
+ confine do
8
+ feature(:package_manager).installed?(['satellite-capsule']) ||
9
+ feature(:package_manager).installed?(['capsule-installer'])
10
+ end
11
+ end
12
+
13
+ def current_version
14
+ @current_version ||= rpm_version(package_name)
15
+ end
16
+
17
+ def package_name
18
+ 'satellite-capsule'
19
+ end
20
+ end
@@ -3,7 +3,7 @@ class Features::Cron < ForemanMaintain::Feature
3
3
  label :cron
4
4
  confine do
5
5
  ForemanMaintain.config.manage_crond && !(
6
- feature(:downstream) && feature(:downstream).less_than_version?('6.3')
6
+ feature(:instance).downstream && feature(:instance).downstream.less_than_version?('6.3')
7
7
  )
8
8
  end
9
9
  end
@@ -38,7 +38,7 @@ module ForemanMaintain
38
38
 
39
39
  def config_files_to_exclude
40
40
  [
41
- '/var/lib/foreman/public/assets'
41
+ '/var/lib/foreman/public'
42
42
  ]
43
43
  end
44
44
  end
@@ -66,13 +66,14 @@ class Features::Installer < ForemanMaintain::Feature
66
66
 
67
67
  def last_scenario
68
68
  return nil unless with_scenarios?
69
+
69
70
  File.basename(last_scenario_config).split('.')[0]
70
71
  end
71
72
 
72
73
  def installer_command
73
74
  case @installer_type
74
75
  when :scenarios
75
- if feature(:downstream)
76
+ if feature(:satellite)
76
77
  'satellite-installer'
77
78
  else
78
79
  'foreman-installer'
@@ -7,11 +7,11 @@ class Features::Instance < ForemanMaintain::Feature
7
7
  end
8
8
 
9
9
  def foreman_proxy_product_name
10
- feature(:downstream) ? 'Capsule' : 'Foreman Proxy'
10
+ feature(:capsule) ? 'Capsule' : 'Foreman Proxy'
11
11
  end
12
12
 
13
13
  def server_product_name
14
- if feature(:downstream)
14
+ if feature(:satellite)
15
15
  'Satellite'
16
16
  elsif feature(:katello)
17
17
  'Katello'
@@ -20,12 +20,8 @@ class Features::Instance < ForemanMaintain::Feature
20
20
  end
21
21
  end
22
22
 
23
- def external_proxy?
24
- !!(feature(:foreman_proxy) && !feature(:foreman_server))
25
- end
26
-
27
23
  def product_name
28
- if external_proxy?
24
+ if feature(:foreman_proxy) && !feature(:foreman_proxy).internal?
29
25
  foreman_proxy_product_name
30
26
  else
31
27
  server_product_name
@@ -48,10 +44,14 @@ class Features::Instance < ForemanMaintain::Feature
48
44
  feature(:foreman_proxy) && feature(:foreman_proxy).with_content? && !feature(:katello)
49
45
  end
50
46
 
47
+ def downstream
48
+ @downstream ||= (feature(:satellite) || feature(:capsule))
49
+ end
50
+
51
51
  def ping
52
52
  if feature(:katello)
53
53
  katello_ping
54
- elsif external_proxy?
54
+ elsif feature(:foreman_proxy) && !feature(:foreman_proxy).internal?
55
55
  proxy_ping
56
56
  else
57
57
  foreman_ping
@@ -112,6 +112,12 @@ class Features::Instance < ForemanMaintain::Feature
112
112
  end
113
113
 
114
114
  def pick_failing_components(components)
115
+ if feature(:katello).current_version < Gem::Version.new('3.2.0')
116
+ # Note that katello_ping returns an empty result against foreman_auth.
117
+ # https://github.com/Katello/katello/commit/95d7b9067d38f269a5ec121fb73b5c19d4422baf
118
+ components.reject! { |n| n.eql?('foreman_auth') }
119
+ end
120
+
115
121
  components.each_with_object([]) do |(name, data), failing|
116
122
  failing << name unless data['status'] == 'ok'
117
123
  end
@@ -129,7 +135,7 @@ class Features::Instance < ForemanMaintain::Feature
129
135
 
130
136
  def component_features_map
131
137
  {
132
- 'candlepin_auth' => %w[candlepin candlepin_database],
138
+ 'candlepin_auth' => %w[candlepin candlepin_database],
133
139
  'candlepin' => %w[candlepin candlepin_database],
134
140
  'pulp_auth' => %w[pulp mongo],
135
141
  'pulp' => %w[pulp mongo],
@@ -0,0 +1,25 @@
1
+ class Features::Satellite < ForemanMaintain::Feature
2
+ include ForemanMaintain::Concerns::Downstream
3
+
4
+ metadata do
5
+ label :satellite
6
+
7
+ confine do
8
+ feature(:package_manager).installed?(['satellite'])
9
+ end
10
+ end
11
+
12
+ def current_version
13
+ @current_version ||= rpm_version(package_name) || version_from_source
14
+ end
15
+
16
+ def package_name
17
+ 'satellite'
18
+ end
19
+
20
+ private
21
+
22
+ def version_from_source
23
+ version(File.read('/usr/share/foreman/lib/satellite/version.rb')[/6\.\d\.\d/])
24
+ end
25
+ end
@@ -9,7 +9,7 @@ class Features::Service < ForemanMaintain::Feature
9
9
  # { :exclude => ["pulp-workers", "tomcat"] }
10
10
  # { :include => ["crond"] }
11
11
 
12
- if feature(:downstream) && feature(:downstream).less_than_version?('6.3')
12
+ if feature(:instance).downstream && feature(:instance).downstream.less_than_version?('6.3')
13
13
  use_katello_service(action, options)
14
14
  else
15
15
  use_system_service(action, options, spinner)
@@ -157,7 +157,7 @@ class Features::Service < ForemanMaintain::Feature
157
157
  command = "katello-service #{action} "
158
158
 
159
159
  # katello-service in 6.1 does not support --only
160
- if feature(:downstream).less_than_version?('6.2')
160
+ if feature(:instance).downstream.less_than_version?('6.2')
161
161
  excluded_services = exclude_services_only(options)
162
162
  command += "--exclude #{excluded_services.join(',')}" if excluded_services.any?
163
163
  else
@@ -3,7 +3,8 @@ class Features::Upstream < ForemanMaintain::Feature
3
3
  label :upstream
4
4
 
5
5
  confine do
6
- !downstream_installation?
6
+ # TODO: remove this upstream feature
7
+ !feature(:instance).downstream
7
8
  end
8
9
  end
9
10
 
@@ -7,7 +7,7 @@ module Procedures::Backup
7
7
  end
8
8
 
9
9
  def run
10
- compress_file('pgsql_data.tar', 'Postgress DB')
10
+ compress_file('pgsql_data.tar', 'Postgres DB')
11
11
  compress_file('mongo_data.tar', 'Mongo DB')
12
12
  end
13
13
 
@@ -35,7 +35,8 @@ module Procedures::Backup
35
35
  exclude_configs = []
36
36
  ForemanMaintain.available_features.each do |feature|
37
37
  # exclude proxy as it has special handling later
38
- next if feature == feature(:foreman_proxy)
38
+ next if [:foreman_proxy, :capsule].include?(feature.label)
39
+
39
40
  configs += feature.config_files
40
41
  exclude_configs += feature.config_files_to_exclude
41
42
  end
@@ -6,8 +6,7 @@ module Procedures::Candlepin
6
6
 
7
7
  confine do
8
8
  feature(:candlepin_database) &&
9
- feature(:downstream) &&
10
- feature(:downstream).current_minor_version == '6.2'
9
+ feature(:satellite) && feature(:satellite).current_minor_version == '6.2'
11
10
  end
12
11
  end
13
12
 
@@ -3,7 +3,10 @@ module Procedures::ForemanProxy
3
3
  metadata do
4
4
  param :load_only, 'Do not print the features', :default => false
5
5
  description 'Detect features available in the local proxy'
6
- for_feature :foreman_proxy
6
+
7
+ confine do
8
+ feature(:foreman_proxy)
9
+ end
7
10
  end
8
11
 
9
12
  def run
@@ -3,7 +3,7 @@ class Procedures::KnowledgeBaseArticle < ForemanMaintain::Procedure
3
3
  description 'Show knowledge base article for troubleshooting'
4
4
 
5
5
  confine do
6
- feature(:downstream)
6
+ feature(:instance).downstream
7
7
  end
8
8
  param :doc,
9
9
  'Document name required to select a correct article',
@@ -7,7 +7,7 @@ module Procedures::Repositories
7
7
  end
8
8
 
9
9
  confine do
10
- feature(:downstream) || feature(:upstream)
10
+ feature(:instance).downstream || feature(:upstream)
11
11
  end
12
12
  param :version,
13
13
  'Version for which repositories needs to be setup',
@@ -17,7 +17,7 @@ module Procedures::Repositories
17
17
 
18
18
  def run
19
19
  with_spinner("Configuring repositories for #{@version}") do
20
- (feature(:downstream) || feature(:upstream)).setup_repositories(@version)
20
+ (feature(:instance).downstream || feature(:upstream)).setup_repositories(@version)
21
21
  end
22
22
  end
23
23
  end
@@ -67,7 +67,7 @@ module ForemanMaintain::Scenarios
67
67
  end
68
68
 
69
69
  def supported_version_check
70
- if feature(:downstream) && feature(:downstream).less_than_version?('6.3')
70
+ if feature(:instance).downstream && feature(:instance).downstream.less_than_version?('6.3')
71
71
  msg = 'ERROR: Restore subcommand is supported by Satellite 6.3+. ' \
72
72
  'Please use katello-restore instead.'
73
73
  abort(msg)
@@ -4,7 +4,7 @@ module Scenarios::Satellite_6_2
4
4
  metadata do
5
5
  tags :upgrade_to_satellite_6_2
6
6
  confine do
7
- feature(:downstream) && feature(:downstream).current_minor_version == '6.1'
7
+ feature(:satellite) && feature(:satellite).current_minor_version == '6.1'
8
8
  end
9
9
  instance_eval(&block)
10
10
  end
@@ -4,7 +4,7 @@ module Scenarios::Satellite_6_2_z
4
4
  metadata do
5
5
  tags :upgrade_to_satellite_6_2_z
6
6
  confine do
7
- feature(:downstream) && feature(:downstream).current_minor_version == '6.2'
7
+ feature(:satellite) && feature(:satellite).current_minor_version == '6.2'
8
8
  end
9
9
  instance_eval(&block)
10
10
  end
@@ -4,7 +4,7 @@ module Scenarios::Satellite_6_3
4
4
  metadata do
5
5
  tags :upgrade_to_satellite_6_3
6
6
  confine do
7
- feature(:downstream) && feature(:downstream).current_minor_version == '6.2'
7
+ feature(:satellite) && feature(:satellite).current_minor_version == '6.2'
8
8
  end
9
9
  instance_eval(&block)
10
10
  end
@@ -4,7 +4,7 @@ module Scenarios::Satellite_6_3_z
4
4
  metadata do
5
5
  tags :upgrade_to_satellite_6_3_z
6
6
  confine do
7
- feature(:downstream) && feature(:downstream).current_minor_version == '6.3'
7
+ feature(:satellite) && feature(:satellite).current_minor_version == '6.3'
8
8
  end
9
9
  instance_eval(&block)
10
10
  end
@@ -4,7 +4,7 @@ module Scenarios::Satellite_6_4
4
4
  metadata do
5
5
  tags :upgrade_to_satellite_6_4
6
6
  confine do
7
- feature(:downstream) && feature(:downstream).current_minor_version == '6.3'
7
+ feature(:satellite) && feature(:satellite).current_minor_version == '6.3'
8
8
  end
9
9
  instance_eval(&block)
10
10
  end
@@ -4,7 +4,7 @@ module Scenarios::Satellite_6_4_z
4
4
  metadata do
5
5
  tags :upgrade_to_satellite_6_4_z
6
6
  confine do
7
- feature(:downstream) && feature(:downstream).current_minor_version == '6.4'
7
+ feature(:satellite) && feature(:satellite).current_minor_version == '6.4'
8
8
  end
9
9
  instance_eval(&block)
10
10
  end
@@ -4,7 +4,7 @@ module Scenarios::Satellite_6_5
4
4
  metadata do
5
5
  tags :upgrade_to_satellite_6_5
6
6
  confine do
7
- feature(:downstream) && feature(:downstream).current_minor_version == '6.4'
7
+ feature(:satellite) && feature(:satellite).current_minor_version == '6.4'
8
8
  end
9
9
  instance_eval(&block)
10
10
  end
@@ -4,7 +4,7 @@ module Scenarios::Satellite_6_5_z
4
4
  metadata do
5
5
  tags :upgrade_to_satellite_6_5_z
6
6
  confine do
7
- feature(:downstream) && feature(:downstream).current_minor_version == '6.5'
7
+ feature(:satellite) && feature(:satellite).current_minor_version == '6.5'
8
8
  end
9
9
  instance_eval(&block)
10
10
  end
@@ -4,7 +4,7 @@ module Scenarios::Satellite_6_6
4
4
  metadata do
5
5
  tags :upgrade_to_satellite_6_6
6
6
  confine do
7
- feature(:downstream) && feature(:downstream).current_minor_version == '6.5'
7
+ feature(:satellite) && feature(:satellite).current_minor_version == '6.5'
8
8
  end
9
9
  instance_eval(&block)
10
10
  end
@@ -4,7 +4,7 @@ module Scenarios::Satellite_6_6_z
4
4
  metadata do
5
5
  tags :upgrade_to_satellite_6_6_z
6
6
  confine do
7
- feature(:downstream) && feature(:downstream).current_minor_version == '6.6'
7
+ feature(:satellite) && feature(:satellite).current_minor_version == '6.6'
8
8
  end
9
9
  instance_eval(&block)
10
10
  end
@@ -0,0 +1,80 @@
1
+ module Scenarios::Satellite_6_7
2
+ class Abstract < ForemanMaintain::Scenario
3
+ def self.upgrade_metadata(&block)
4
+ metadata do
5
+ tags :upgrade_to_satellite_6_7
6
+ confine do
7
+ feature(:satellite) && feature(:satellite).current_minor_version == '6.6'
8
+ end
9
+ instance_eval(&block)
10
+ end
11
+ end
12
+ end
13
+
14
+ class PreUpgradeCheck < Abstract
15
+ upgrade_metadata do
16
+ description 'Checks before upgrading to Satellite 6.7'
17
+ tags :pre_upgrade_checks
18
+ run_strategy :fail_slow
19
+ end
20
+
21
+ def compose
22
+ add_steps(find_checks(:default))
23
+ add_steps(find_checks(:pre_upgrade))
24
+ add_step(Checks::Repositories::Validate.new(:version => '6.7'))
25
+ end
26
+ end
27
+
28
+ class PreMigrations < Abstract
29
+ upgrade_metadata do
30
+ description 'Procedures before migrating to Satellite 6.7'
31
+ tags :pre_migrations
32
+ end
33
+
34
+ def compose
35
+ add_steps(find_procedures(:pre_migrations))
36
+ add_step(Procedures::Service::Stop.new)
37
+ end
38
+ end
39
+
40
+ class Migrations < Abstract
41
+ upgrade_metadata do
42
+ description 'Migration scripts to Satellite 6.7'
43
+ tags :migrations
44
+ end
45
+
46
+ def compose
47
+ add_step(Procedures::Repositories::Setup.new(:version => '6.7'))
48
+ add_step(Procedures::Packages::UnlockVersions.new)
49
+ add_step(Procedures::Packages::Update.new(:assumeyes => true))
50
+ add_step(Procedures::Installer::Upgrade.new)
51
+ end
52
+ end
53
+
54
+ class PostMigrations < Abstract
55
+ upgrade_metadata do
56
+ description 'Procedures after migrating to Satellite 6.7'
57
+ tags :post_migrations
58
+ end
59
+
60
+ def compose
61
+ add_step(Procedures::Service::Start.new)
62
+ add_steps(find_procedures(:post_migrations))
63
+ end
64
+ end
65
+
66
+ class PostUpgradeChecks < Abstract
67
+ upgrade_metadata do
68
+ description 'Checks after upgrading to Satellite 6.7'
69
+ tags :post_upgrade_checks
70
+ run_strategy :fail_slow
71
+ end
72
+
73
+ def compose
74
+ add_steps(find_checks(:default))
75
+ add_steps(find_checks(:post_upgrade))
76
+ end
77
+ end
78
+ end
79
+
80
+ ForemanMaintain::UpgradeRunner.register_version('6.7', :upgrade_to_satellite_6_7)
@@ -0,0 +1,80 @@
1
+ module Scenarios::Satellite_6_7_z
2
+ class Abstract < ForemanMaintain::Scenario
3
+ def self.upgrade_metadata(&block)
4
+ metadata do
5
+ tags :upgrade_to_satellite_6_7_z
6
+ confine do
7
+ feature(:satellite) && feature(:satellite).current_minor_version == '6.7'
8
+ end
9
+ instance_eval(&block)
10
+ end
11
+ end
12
+ end
13
+
14
+ class PreUpgradeCheck < Abstract
15
+ upgrade_metadata do
16
+ description 'Checks before upgrading to Satellite 6.7.z'
17
+ tags :pre_upgrade_checks
18
+ run_strategy :fail_slow
19
+ end
20
+
21
+ def compose
22
+ add_steps(find_checks(:default))
23
+ add_steps(find_checks(:pre_upgrade))
24
+ add_step(Checks::Repositories::Validate.new(:version => '6.7'))
25
+ end
26
+ end
27
+
28
+ class PreMigrations < Abstract
29
+ upgrade_metadata do
30
+ description 'Procedures before migrating to Satellite 6.7.z'
31
+ tags :pre_migrations
32
+ end
33
+
34
+ def compose
35
+ add_steps(find_procedures(:pre_migrations))
36
+ add_step(Procedures::Service::Stop.new)
37
+ end
38
+ end
39
+
40
+ class Migrations < Abstract
41
+ upgrade_metadata do
42
+ description 'Migration scripts to Satellite 6.7.z'
43
+ tags :migrations
44
+ end
45
+
46
+ def compose
47
+ add_step(Procedures::Repositories::Setup.new(:version => '6.7'))
48
+ add_step(Procedures::Packages::UnlockVersions.new)
49
+ add_step(Procedures::Packages::Update.new(:assumeyes => true))
50
+ add_step(Procedures::Installer::Upgrade.new)
51
+ end
52
+ end
53
+
54
+ class PostMigrations < Abstract
55
+ upgrade_metadata do
56
+ description 'Procedures after migrating to Satellite 6.7.z'
57
+ tags :post_migrations
58
+ end
59
+
60
+ def compose
61
+ add_step(Procedures::Service::Start.new)
62
+ add_steps(find_procedures(:post_migrations))
63
+ end
64
+ end
65
+
66
+ class PostUpgradeChecks < Abstract
67
+ upgrade_metadata do
68
+ description 'Checks after upgrading to Satellite 6.7.z'
69
+ tags :post_upgrade_checks
70
+ run_strategy :fail_slow
71
+ end
72
+
73
+ def compose
74
+ add_steps(find_checks(:default))
75
+ add_steps(find_checks(:post_upgrade))
76
+ end
77
+ end
78
+ end
79
+
80
+ ForemanMaintain::UpgradeRunner.register_version('6.7.z', :upgrade_to_satellite_6_7_z)
@@ -20,6 +20,7 @@ module ForemanMaintain
20
20
  require 'foreman_maintain/concerns/hammer'
21
21
  require 'foreman_maintain/concerns/base_database'
22
22
  require 'foreman_maintain/concerns/directory_marker'
23
+ require 'foreman_maintain/concerns/downstream'
23
24
  require 'foreman_maintain/top_level_modules'
24
25
  require 'foreman_maintain/yaml_storage'
25
26
  require 'foreman_maintain/config'
@@ -50,9 +50,10 @@ module ForemanMaintain
50
50
  unless File.directory?(dir)
51
51
  raise ArgumentError, "Previous backup directory does not exist: #{dir}"
52
52
  end
53
+
53
54
  dir
54
55
  end
55
- proxy_name = ForemanMaintain.detector.feature(:downstream) ? 'Capsule' : 'Foreman Proxy'
56
+ proxy_name = ForemanMaintain.detector.feature(:capsule) ? 'Capsule' : 'Foreman Proxy'
56
57
  option '--features', 'FEATURES',
57
58
  "#{proxy_name} features to include in the backup. " \
58
59
  'Valid features are tftp, dns, dhcp, openscap, and all.', :multivalued => true
@@ -135,7 +135,7 @@ module ForemanMaintain
135
135
 
136
136
  def self.label_option
137
137
  option '--label', 'label',
138
- 'Limit only for a specific label. ' \
138
+ 'Run only a specific check with a label. ' \
139
139
  '(Use "list" command to see available labels)' do |label|
140
140
  raise ArgumentError, 'value not specified' if label.nil? || label.empty?
141
141
  underscorize(label).to_sym
@@ -144,7 +144,7 @@ module ForemanMaintain
144
144
 
145
145
  def self.tags_option
146
146
  option('--tags', 'tags',
147
- 'Limit only for specific set of labels. ' \
147
+ 'Run only those with all specific set of tags. ' \
148
148
  '(Use list-tags command to see available tags)',
149
149
  :multivalued => true) do |tags|
150
150
  raise ArgumentError, 'value not specified' if tags.nil? || tags.empty?
@@ -0,0 +1,123 @@
1
+ module ForemanMaintain
2
+ module Concerns
3
+ module Downstream
4
+ def current_version
5
+ raise NotImplementedError
6
+ end
7
+
8
+ def less_than_version?(version)
9
+ Gem::Version.new(current_version) < Gem::Version.new(version)
10
+ end
11
+
12
+ def at_least_version?(version)
13
+ Gem::Version.new(current_version) >= Gem::Version.new(version)
14
+ end
15
+
16
+ def current_minor_version
17
+ current_version.to_s[/^\d+\.\d+/]
18
+ end
19
+
20
+ # TODO: Modify activation_key changes as per server
21
+ def setup_repositories(version)
22
+ activation_key = ENV['EXTERNAL_SAT_ACTIVATION_KEY']
23
+ org = ENV['EXTERNAL_SAT_ORG']
24
+ if activation_key
25
+ org_options = org ? %(--org #{shellescape(org)}) : ''
26
+ execute!(%(subscription-manager register #{org_options}\
27
+ --activationkey #{shellescape(activation_key)} --force))
28
+ else
29
+ execute!(%(subscription-manager repos --disable '*'))
30
+ enable_options = rh_repos(version).map { |r| "--enable=#{r}" }.join(' ')
31
+ execute!(%(subscription-manager repos #{enable_options}))
32
+ end
33
+ end
34
+
35
+ def absent_repos(version)
36
+ all_repo_lines = execute(%(LANG=en_US.utf-8 subscription-manager repos --list 2>&1 | ) +
37
+ %(grep '^Repo ID:')).split("\n")
38
+ all_repos = all_repo_lines.map { |line| line.split(/\s+/).last }
39
+ repos_required = rh_repos(version)
40
+ repos_found = repos_required & all_repos
41
+ repos_required - repos_found
42
+ end
43
+
44
+ def rhsm_refresh
45
+ execute!(%(subscription-manager refresh))
46
+ end
47
+
48
+ # TODO: Verify this is valid for capsule?
49
+ def subscribed_using_activation_key?
50
+ ENV['EXTERNAL_SAT_ACTIVATION_KEY'] && ENV['EXTERNAL_SAT_ORG']
51
+ end
52
+
53
+ def package_name
54
+ raise NotImplementedError
55
+ end
56
+
57
+ private
58
+
59
+ def rh_repos(server_version)
60
+ server_version = version(server_version)
61
+ rh_version_major = ForemanMaintain::Utils::Facter.os_major_release
62
+ rh_repos = main_rh_repos(rh_version_major)
63
+
64
+ server_version_full = "#{server_version.major}.#{server_version.minor}"
65
+ rh_repos.concat(product_specific_repos(rh_version_major, server_version_full))
66
+
67
+ if server_version > version('6.3')
68
+ rh_repos << ansible_repo(server_version, rh_version_major)
69
+ end
70
+
71
+ rh_repos
72
+ end
73
+
74
+ def ansible_repo(server_version, rh_version_major)
75
+ if server_version >= version('6.6')
76
+ "rhel-#{rh_version_major}-server-ansible-2.8-rpms"
77
+ elsif server_version >= version('6.4')
78
+ "rhel-#{rh_version_major}-server-ansible-2.6-rpms"
79
+ end
80
+ end
81
+
82
+ # TODO: refactoring
83
+ def product_specific_repos(rh_version_major, full_version)
84
+ repos = []
85
+ repos << if ENV['FOREMAN_MAINTAIN_USE_BETA'] == '1'
86
+ "rhel-server-#{rh_version_major}-#{package_name}-6-beta-rpms"
87
+ else
88
+ "rhel-#{rh_version_major}-server-#{package_name}-#{full_version}-rpms"
89
+ end
90
+
91
+ if current_minor_version == '6.3' && server_version.to_s != '6.4' && (
92
+ feature(:puppet_server) && feature(:puppet_server).puppet_version.major == 4)
93
+ # TODO: confirm repo for capsule. It might be same repo
94
+ repos << "rhel-#{rh_version_major}-server-satellite-tools-6.3-puppet4-rpms"
95
+ end
96
+
97
+ repos.concat(common_repos(rh_version_major, full_version))
98
+ end
99
+
100
+ def common_repos(rh_version_major, full_version)
101
+ tools_repo_id = "rhel-#{rh_version_major}-server-satellite-tools-#{full_version}-rpms"
102
+ maintenance_repo_id = "rhel-#{rh_version_major}-server-satellite-maintenance-6-rpms"
103
+
104
+ # Override to use Beta repositories for sat version until GA
105
+ if ENV['FOREMAN_MAINTAIN_USE_BETA'] == '1'
106
+ tools_repo_id = "rhel-#{rh_version_major}-server-satellite-tools-6-beta-rpms"
107
+ maintenance_repo_id = "rhel-#{rh_version_major}-server-satellite-maintenance-6-beta-rpms"
108
+ end
109
+
110
+ [tools_repo_id, maintenance_repo_id]
111
+ end
112
+
113
+ def main_rh_repos(rh_version_major)
114
+ ["rhel-#{rh_version_major}-server-rpms",
115
+ "rhel-server-rhscl-#{rh_version_major}-rpms"]
116
+ end
117
+
118
+ def version_from_source
119
+ raise NotImplementedError
120
+ end
121
+ end
122
+ end
123
+ end
@@ -44,11 +44,6 @@ module ForemanMaintain
44
44
  end
45
45
  end
46
46
 
47
- def downstream_installation?
48
- execute?('rpm -q satellite') ||
49
- (execute('rpm -q foreman') =~ /sat.noarch/)
50
- end
51
-
52
47
  def execute?(command, options = {})
53
48
  execute(command, options)
54
49
  $CHILD_STATUS.success?
@@ -101,10 +96,6 @@ module ForemanMaintain
101
96
  find_package('foreman')
102
97
  end
103
98
 
104
- def smart_proxy?
105
- !server? && find_package('foreman-proxy')
106
- end
107
-
108
99
  def packages_action(action, packages, options = {})
109
100
  options.validate_options!(:assumeyes)
110
101
  case action
@@ -1,3 +1,3 @@
1
1
  module ForemanMaintain
2
- VERSION = '0.4.10'.freeze
2
+ VERSION = '0.5.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: foreman_maintain
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.10
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ivan Nečas
@@ -157,8 +157,8 @@ files:
157
157
  - definitions/checks/yum_exclude.rb
158
158
  - definitions/features/candlepin.rb
159
159
  - definitions/features/candlepin_database.rb
160
+ - definitions/features/capsule.rb
160
161
  - definitions/features/cron.rb
161
- - definitions/features/downstream.rb
162
162
  - definitions/features/foreman_1_11_x.rb
163
163
  - definitions/features/foreman_1_7_x.rb
164
164
  - definitions/features/foreman_database.rb
@@ -176,6 +176,7 @@ files:
176
176
  - definitions/features/package_manager.rb
177
177
  - definitions/features/pulp.rb
178
178
  - definitions/features/puppet_server.rb
179
+ - definitions/features/satellite.rb
179
180
  - definitions/features/service.rb
180
181
  - definitions/features/sync_plans.rb
181
182
  - definitions/features/system_repos.rb
@@ -276,6 +277,8 @@ files:
276
277
  - definitions/scenarios/upgrade_to_satellite_6_5_z.rb
277
278
  - definitions/scenarios/upgrade_to_satellite_6_6.rb
278
279
  - definitions/scenarios/upgrade_to_satellite_6_6_z.rb
280
+ - definitions/scenarios/upgrade_to_satellite_6_7.rb
281
+ - definitions/scenarios/upgrade_to_satellite_6_7_z.rb
279
282
  - extras/foreman-maintain.sh
280
283
  - extras/foreman_protector/foreman-protector.conf
281
284
  - extras/foreman_protector/foreman-protector.py
@@ -302,6 +305,7 @@ files:
302
305
  - lib/foreman_maintain/cli/upgrade_command.rb
303
306
  - lib/foreman_maintain/concerns/base_database.rb
304
307
  - lib/foreman_maintain/concerns/directory_marker.rb
308
+ - lib/foreman_maintain/concerns/downstream.rb
305
309
  - lib/foreman_maintain/concerns/finders.rb
306
310
  - lib/foreman_maintain/concerns/hammer.rb
307
311
  - lib/foreman_maintain/concerns/logger.rb
@@ -1,111 +0,0 @@
1
- class Features::Downstream < ForemanMaintain::Feature
2
- metadata do
3
- label :downstream
4
-
5
- confine do
6
- downstream_installation?
7
- end
8
- end
9
-
10
- def less_than_version?(version)
11
- Gem::Version.new(current_version) < Gem::Version.new(version)
12
- end
13
-
14
- def at_least_version?(version)
15
- Gem::Version.new(current_version) >= Gem::Version.new(version)
16
- end
17
-
18
- def current_version
19
- @current_version ||= rpm_version('satellite') || version_from_source
20
- end
21
-
22
- def current_minor_version
23
- current_version.to_s[/^\d+\.\d+/]
24
- end
25
-
26
- def setup_repositories(version)
27
- activation_key = ENV['EXTERNAL_SAT_ACTIVATION_KEY']
28
- org = ENV['EXTERNAL_SAT_ORG']
29
- if activation_key
30
- org_options = org ? %(--org #{shellescape(org)}) : ''
31
- execute!(%(subscription-manager register #{org_options}\
32
- --activationkey #{shellescape(activation_key)} --force))
33
- else
34
- execute!(%(subscription-manager repos --disable '*'))
35
- enable_options = rh_repos(version).map { |r| "--enable=#{r}" }.join(' ')
36
- execute!(%(subscription-manager repos #{enable_options}))
37
- end
38
- end
39
-
40
- def absent_repos(version)
41
- all_repo_lines = execute(%(LANG=en_US.utf-8 subscription-manager repos --list 2>&1 | ) +
42
- %(grep '^Repo ID:')).split("\n")
43
- all_repos = all_repo_lines.map { |line| line.split(/\s+/).last }
44
- repos_required = rh_repos(version)
45
- repos_found = repos_required & all_repos
46
- repos_required - repos_found
47
- end
48
-
49
- def rhsm_refresh
50
- execute!(%(subscription-manager refresh))
51
- end
52
-
53
- def subscribed_using_activation_key?
54
- ENV['EXTERNAL_SAT_ACTIVATION_KEY'] && ENV['EXTERNAL_SAT_ORG']
55
- end
56
-
57
- private
58
-
59
- def rh_repos(sat_version)
60
- sat_version = version(sat_version)
61
- rh_version_major = ForemanMaintain::Utils::Facter.os_major_release
62
-
63
- rh_repos = main_rh_repos(rh_version_major)
64
-
65
- rh_repos.concat(sat_and_tools_repos(rh_version_major, sat_version))
66
-
67
- if sat_version > version('6.3')
68
- rh_repos << ansible_repo(sat_version, rh_version_major)
69
- end
70
-
71
- if current_minor_version == '6.3' && sat_version.to_s != '6.4' && (
72
- feature(:puppet_server) && feature(:puppet_server).puppet_version.major == 4)
73
- rh_repos << "rhel-#{rh_version_major}-server-satellite-tools-6.3-puppet4-rpms"
74
- end
75
-
76
- rh_repos
77
- end
78
-
79
- def ansible_repo(sat_version, rh_version_major)
80
- if sat_version >= version('6.6')
81
- "rhel-#{rh_version_major}-server-ansible-2.8-rpms"
82
- elsif sat_version >= version('6.4')
83
- "rhel-#{rh_version_major}-server-ansible-2.6-rpms"
84
- end
85
- end
86
-
87
- def sat_and_tools_repos(rh_version_major, sat_version)
88
- sat_version_full = "#{sat_version.major}.#{sat_version.minor}"
89
- sat_repo_id = "rhel-#{rh_version_major}-server-satellite-#{sat_version_full}-rpms"
90
- sat_tools_repo_id = "rhel-#{rh_version_major}-server-satellite-tools-#{sat_version_full}-rpms"
91
- sat_maintenance_repo_id = "rhel-#{rh_version_major}-server-satellite-maintenance-6-rpms"
92
-
93
- # Override to use Beta repositories for sat version until GA
94
- if ENV['FOREMAN_MAINTAIN_USE_BETA'] == '1'
95
- sat_repo_id = "rhel-server-#{rh_version_major}-satellite-6-beta-rpms"
96
- sat_tools_repo_id = "rhel-#{rh_version_major}-server-satellite-tools-6-beta-rpms"
97
- sat_maintenance_repo_id = "rhel-#{rh_version_major}-server-satellite-maintenance-6-beta-rpms"
98
- end
99
-
100
- [sat_repo_id, sat_tools_repo_id, sat_maintenance_repo_id]
101
- end
102
-
103
- def main_rh_repos(rh_version_major)
104
- ["rhel-#{rh_version_major}-server-rpms",
105
- "rhel-server-rhscl-#{rh_version_major}-rpms"]
106
- end
107
-
108
- def version_from_source
109
- version(File.read('/usr/share/foreman/lib/satellite/version.rb')[/6\.\d\.\d/])
110
- end
111
- end