foreman_maintain 0.4.10 → 0.5.0

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