foreman_maintain 1.0.0 → 1.0.1

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