foreman_maintain 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bc78f39bf65ff7aa89be6ba1dda201de03f6d9a4b637599e5afd3d489ac4495d
4
- data.tar.gz: 5554b12a68af2a4710ef7725d39079fbe7452b280b40b9ebfe0bd23cad058f40
3
+ metadata.gz: e70bdc300a891fd04cb9e489737a0a96a46d83977f192eddc1ee14a8deff7b9b
4
+ data.tar.gz: ac5dc055fc90930f91c844f7c7bd411d156c943d911b56d9df5aafab4262481a
5
5
  SHA512:
6
- metadata.gz: d68910821f5bcbdc2267d7fa5201fe348b4f32af27531d15a621567aaef88dc52bfdc17e3fcaf6ec70899514c103d501b785edd2cb6c9100bb50762b7050236e
7
- data.tar.gz: bede7c7b5521c991a83ca714fbdc10bee1df94d992daa4d54c142a51717bfae130f2e5ddf4b789f5c34274a0eb766fed0d62b0bd1f09017c14c0a9378402307c
6
+ metadata.gz: ce61614ae7a224595e48ef2cf4a8e0f268e3a7f1f59b8bc67af8ea19c7926ee6fe2d1f6474a8a13fb758627e7c2aa87d272163a064298c208a97e6e3279978da
7
+ data.tar.gz: 983efdf31d1fdfc9dedca4c66374d178ef34310da40900e60af7f85550627d0416f88713316c93551f66c75bc775d7a533524b38b1e28e603944c6edf3d8bb6d
@@ -44,7 +44,9 @@ module Checks::ForemanProxy
44
44
  def self.lookup_token_duration
45
45
  data = feature(:foreman_database). \
46
46
  query("select s.value, s.default from settings s \
47
- where category = 'Setting::Provisioning' and name = 'token_duration'")
47
+ where category IN ('Setting::Provisioning','Setting') \
48
+ and name = 'token_duration'")
49
+
48
50
  YAML.load(data[0]['value'] || data[0]['default'])
49
51
  end
50
52
  end
@@ -11,13 +11,18 @@ module Checks::Repositories
11
11
 
12
12
  def run
13
13
  with_spinner('Checking repositories enabled on the system') do
14
- assert(!epel_enabled?, 'System is subscribed to non Red Hat repositories')
14
+ assert(epel_not_enabled?, 'System is subscribed to non Red Hat repositories')
15
15
  end
16
16
  end
17
17
 
18
- def epel_enabled?
19
- system_repos = execute("yum repolist enabled -d 6 -e 0| grep -E 'Repo-baseurl|Repo-id'")
20
- system_repos.to_s.match(/\bepel\b/i)
18
+ def epel_not_enabled?
19
+ system_repos = repository_manager.enabled_repos
20
+ system_repos.each do |repoid, repourl|
21
+ unless repoid.match(/\bepel\b/i).nil? || repourl.match(/\bepel\b/i).nil?
22
+ return false
23
+ end
24
+ end
25
+ true
21
26
  end
22
27
  end
23
28
  end
@@ -14,10 +14,10 @@ class Checks::CheckUpstreamRepository < ForemanMaintain::Check
14
14
 
15
15
  def run
16
16
  with_spinner('Checking for presence of upstream repositories') do
17
- enabled_upstream_repos = feature(:system_repos).upstream_repos_ids
18
- assert(enabled_upstream_repos.empty?,
19
- "System has upstream #{enabled_upstream_repos.join(',')} repositories enabled",
20
- :next_steps => Procedures::Repositories::Disable.new(:repos => enabled_upstream_repos))
17
+ enabled_repo_ids = feature(:upstream_repositories).repoids_and_urls.keys
18
+ assert(enabled_repo_ids.empty?,
19
+ "System has upstream #{enabled_repo_ids.join(',')} repositories enabled",
20
+ :next_steps => Procedures::Repositories::Disable.new(:repos => enabled_repo_ids))
21
21
  end
22
22
  end
23
23
  end
@@ -0,0 +1,23 @@
1
+ class Features::UpstreamRepositories < ForemanMaintain::Feature
2
+ metadata do
3
+ label :upstream_repositories
4
+ description 'Feature for operations on upstream repositories'
5
+ end
6
+
7
+ def repoids_and_urls
8
+ repoids_and_urls = {}
9
+ repository_manager.enabled_repos.each do |repo, url|
10
+ repo_urls.each do |regex|
11
+ repoids_and_urls[repo] = url if url =~ regex
12
+ end
13
+ end
14
+ repoids_and_urls
15
+ end
16
+
17
+ private
18
+
19
+ def repo_urls
20
+ [%r{yum.theforeman.org\/*},
21
+ %r{yum.puppetlabs.com\/*}]
22
+ end
23
+ end
@@ -86,6 +86,8 @@ module Procedures::Pulp
86
86
  drop_migrations
87
87
 
88
88
  delete_pulp_data(rm_cmds) if rm_cmds.any?
89
+
90
+ restart_pulpcore_services
89
91
  end
90
92
 
91
93
  def remove_pulp
@@ -168,5 +170,15 @@ module Procedures::Pulp
168
170
  spinner.update('Done deleting pulp2 data directories')
169
171
  end
170
172
  end
173
+
174
+ def restart_pulpcore_services
175
+ with_spinner('Restarting pulpcore services') do |spinner|
176
+ pulp_services = feature(:pulpcore).services
177
+
178
+ feature(:service).handle_services(spinner, 'stop', :only => pulp_services)
179
+ feature(:service).handle_services(spinner, 'start', :only => pulp_services)
180
+ spinner.update('Done restarting pulpcore services')
181
+ end
182
+ end
171
183
  end
172
184
  end
@@ -6,7 +6,7 @@ module Procedures::Repositories
6
6
  end
7
7
 
8
8
  def run
9
- enabled_repos_ids = feature(:system_repos).enabled_repos_ids
9
+ enabled_repos_ids = repository_manager.enabled_repos.keys
10
10
  unless enabled_repos_ids.empty?
11
11
  backup_dir = File.expand_path(ForemanMaintain.config.backup_dir)
12
12
  File.write(File.join(backup_dir, 'enabled_repos.yml'), enabled_repos_ids.to_yaml)
@@ -6,7 +6,7 @@ module Procedures::Repositories
6
6
  end
7
7
  def run
8
8
  with_spinner('Disabling repositories') do
9
- feature(:system_repos).disable_repos(@repos)
9
+ repository_manager.disable_repos(@repos)
10
10
  end
11
11
  end
12
12
  end
@@ -6,7 +6,7 @@ module Procedures::Repositories
6
6
  end
7
7
  def run
8
8
  with_spinner('Enabling repositories') do
9
- feature(:system_repos).enable_repos(@repos)
9
+ repository_manager.enable_repos(@repos)
10
10
  end
11
11
  end
12
12
  end
@@ -1,7 +1,7 @@
1
1
  module ForemanMaintain::Scenarios
2
2
  class SelfUpgradeBase < ForemanMaintain::Scenario
3
3
  def enabled_system_repos_id
4
- feature(:system_repos).enabled_repos_ids
4
+ repository_manager.enabled_repos.keys
5
5
  end
6
6
 
7
7
  def enable_repos(repo_ids = stored_enabled_repos_ids)
@@ -17,6 +17,10 @@ module ForemanMaintain
17
17
  current_version.to_s[/^\d+\.\d+/]
18
18
  end
19
19
 
20
+ def repository_manager
21
+ ForemanMaintain.repository_manager
22
+ end
23
+
20
24
  # TODO: Modify activation_key changes as per server
21
25
  def setup_repositories(version)
22
26
  activation_key = ENV['EXTERNAL_SAT_ACTIVATION_KEY']
@@ -26,18 +30,14 @@ module ForemanMaintain
26
30
  execute!(%(subscription-manager register #{org_options}\
27
31
  --activationkey #{shellescape(activation_key)} --force))
28
32
  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}))
33
+ repository_manager.rhsm_disable_repos('*')
34
+ repository_manager.rhsm_enable_repos(rh_repos(version))
32
35
  end
33
36
  end
34
37
 
35
38
  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
39
  repos_required = rh_repos(version)
40
- repos_found = repos_required & all_repos
40
+ repos_found = repos_required & repository_manager.rhsm_list_repos.keys
41
41
  repos_required - repos_found
42
42
  end
43
43
 
@@ -185,6 +185,10 @@ module ForemanMaintain
185
185
  ForemanMaintain.package_manager
186
186
  end
187
187
 
188
+ def repository_manager
189
+ ForemanMaintain.repository_manager
190
+ end
191
+
188
192
  def ruby_prefix(scl = true)
189
193
  if debian?
190
194
  'ruby-'
@@ -0,0 +1,85 @@
1
+ module ForemanMaintain::RepositoryManager
2
+ class El
3
+ include ForemanMaintain::Concerns::OsFacts
4
+ include ForemanMaintain::Concerns::SystemHelpers
5
+
6
+ def disable_repos(repo_ids)
7
+ if el7?
8
+ execute!("yum-config-manager #{config_manager_options(repo_ids, 'disable')}")
9
+ else
10
+ execute!("dnf config-manager #{config_manager_options(repo_ids, 'set-disabled')}")
11
+ end
12
+ end
13
+
14
+ def rhsm_disable_repos(repo_ids)
15
+ if rhsm_available?
16
+ execute!(%(subscription-manager repos #{rhsm_options(repo_ids, 'disable')}))
17
+ else
18
+ logger.info("subscription-manager is not available.\
19
+ Using #{pkg_manager} config manager instead.")
20
+ disable_repos(repo_ids)
21
+ end
22
+ end
23
+
24
+ def enable_repos(repo_ids)
25
+ if el7?
26
+ execute!("yum-config-manager #{config_manager_options(repo_ids, 'enable')}")
27
+ else
28
+ execute!("dnf config-manager #{config_manager_options(repo_ids, 'enable')}")
29
+ end
30
+ end
31
+
32
+ def rhsm_enable_repos(repo_ids)
33
+ if rhsm_available?
34
+ execute!(%(subscription-manager repos #{rhsm_options(repo_ids, 'enable')}))
35
+ else
36
+ logger.info("subscription-manager is not available.\
37
+ Using #{pkg_manager} config manager instead.")
38
+ enable_repos(repo_ids)
39
+ end
40
+ end
41
+
42
+ def rhsm_options(repo_ids, options)
43
+ repo_ids.map { |r| "--#{options}=#{r}" }.join(' ')
44
+ end
45
+
46
+ def config_manager_options(repo_ids, options)
47
+ repo_ids_string = if repo_ids.is_a?(Array)
48
+ repo_ids.join(',')
49
+ else
50
+ repo_ids
51
+ end
52
+ format_shell_args("--#{options}" => repo_ids_string)
53
+ end
54
+
55
+ def rhsm_available?
56
+ @rhsm_available ||= find_package('subscription-manager')
57
+ end
58
+
59
+ def rhsm_list_repos(list_option = '--list')
60
+ repos = execute(%(LANG=en_US.utf-8 subscription-manager repos #{list_option} 2>&1))
61
+ return {} if repos.empty?
62
+
63
+ hash_of_repoids_urls(repos, /Repo ID|Repo URL/)
64
+ end
65
+
66
+ def pkg_manager
67
+ package_manager.class.name.split('::').last.downcase
68
+ end
69
+
70
+ def enabled_repos
71
+ cmd = "#{pkg_manager} repolist enabled -d 6 -e 0 2> /dev/null"
72
+ repos = execute(cmd)
73
+ return {} if repos.empty?
74
+
75
+ hash_of_repoids_urls(repos, /Repo-id|Repo-baseurl/)
76
+ end
77
+
78
+ def hash_of_repoids_urls(repos, regex)
79
+ Hash[*repos.split("\n").grep(regex).map do |entry|
80
+ entry.split(':', 2).last.strip
81
+ end
82
+ ]
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,13 @@
1
+ require 'foreman_maintain/repository_manager/el'
2
+ include ForemanMaintain::Concerns::OsFacts
3
+ module ForemanMaintain
4
+ def self.repository_manager
5
+ @repository_manager ||= if el?
6
+ ForemanMaintain::RepositoryManager::El.new
7
+ elsif debian?
8
+ raise 'Not implemented!'
9
+ else
10
+ raise 'No supported repository manager was found'
11
+ end
12
+ end
13
+ end
@@ -1,3 +1,3 @@
1
1
  module ForemanMaintain
2
- VERSION = '1.0.0'.freeze
2
+ VERSION = '1.0.1'.freeze
3
3
  end
@@ -40,6 +40,7 @@ module ForemanMaintain
40
40
  require 'foreman_maintain/upgrade_runner'
41
41
  require 'foreman_maintain/reporter'
42
42
  require 'foreman_maintain/package_manager'
43
+ require 'foreman_maintain/repository_manager'
43
44
  require 'foreman_maintain/utils'
44
45
  require 'foreman_maintain/error'
45
46
 
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: 1.0.0
4
+ version: 1.0.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: 2021-12-03 00:00:00.000000000 Z
11
+ date: 2021-12-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: clamp
@@ -214,9 +214,9 @@ files:
214
214
  - definitions/features/satellite.rb
215
215
  - definitions/features/service.rb
216
216
  - definitions/features/sync_plans.rb
217
- - definitions/features/system_repos.rb
218
217
  - definitions/features/tar.rb
219
218
  - definitions/features/upstream.rb
219
+ - definitions/features/upstream_repositories.rb
220
220
  - definitions/procedures/backup/accessibility_confirmation.rb
221
221
  - definitions/procedures/backup/clean.rb
222
222
  - definitions/procedures/backup/compress_data.rb
@@ -416,6 +416,8 @@ files:
416
416
  - lib/foreman_maintain/procedure.rb
417
417
  - lib/foreman_maintain/reporter.rb
418
418
  - lib/foreman_maintain/reporter/cli_reporter.rb
419
+ - lib/foreman_maintain/repository_manager.rb
420
+ - lib/foreman_maintain/repository_manager/el.rb
419
421
  - lib/foreman_maintain/runner.rb
420
422
  - lib/foreman_maintain/runner/execution.rb
421
423
  - lib/foreman_maintain/runner/stored_execution.rb
@@ -1,58 +0,0 @@
1
- class Features::SystemRepos < ForemanMaintain::Feature
2
- metadata do
3
- label :system_repos
4
- description 'Feature for operations on yum repositories of system'
5
- end
6
-
7
- def upstream_repos
8
- repositories = {}
9
- enabled_repos_hash.each do |repo, url|
10
- upstream_repo_urls.each do |regex|
11
- repositories[repo] = url if url =~ regex
12
- end
13
- end
14
- repositories
15
- end
16
-
17
- def enabled_repos_hash
18
- repos = execute("yum repolist enabled -d 6 -e 0 2> /dev/null | grep -E 'Repo-id|Repo-baseurl'")
19
- return {} if repos.empty?
20
-
21
- Hash[*repos.delete!(' ').split("\n")]
22
- end
23
-
24
- def enabled_repos_ids
25
- trim_repoids(enabled_repos_hash.keys)
26
- end
27
-
28
- def upstream_repos_ids
29
- trim_repoids(upstream_repos.keys)
30
- end
31
-
32
- def disable_repos(repo_ids)
33
- execute!("yum-config-manager --disable #{repo_ids.join(',')}")
34
- end
35
-
36
- def enable_repos(repo_ids)
37
- execute!("yum-config-manager --enable #{repo_ids.join(',')}")
38
- end
39
-
40
- private
41
-
42
- def trim_repoids(repos)
43
- repos.map { |r| r.gsub(%r{Repo-id:|\/+\w*}, '') }
44
- end
45
-
46
- def upstream_repo_urls
47
- repo_urls = { :Foreman => %r{yum.theforeman.org\/},
48
- :Katello => %r{fedorapeople.org\/groups\/katello\/releases\/yum\/[\/|\w|.]*} }
49
- [/#{repo_urls[:Foreman]}+releases/,
50
- /#{repo_urls[:Foreman]}+plugins/,
51
- /#{repo_urls[:Katello]}+katello/,
52
- /#{repo_urls[:Katello]}+client/,
53
- /#{repo_urls[:Katello]}+candlepin/,
54
- /#{repo_urls[:Katello]}+pulp/,
55
- %r{yum.puppetlabs.com\/el\/[\w|\/|\.]*\/x86_64},
56
- %r{repos.fedorapeople.org\/repos\/pulp\/[\/|\w|.]*\/x86_64}]
57
- end
58
- end