foreman_scc_manager 1.8.17 → 1.8.20

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: 96a0d125c5dab16617adfbfbabb28166111f8d0f85c5cbac77836e2f2d6a6791
4
- data.tar.gz: 2b3ea8baa9f5f09427aee36ce034f6d4e0c385c395b148311ce1605221d9843d
3
+ metadata.gz: 39d299a2ed13146bd47fda51bfe3b47cccc78a2fe3984f5070b38acfa1d54bb0
4
+ data.tar.gz: eb22cc8040b485c69aa0dffd09b91a5ba926e89c9d124f4d9a32800a8db7546f
5
5
  SHA512:
6
- metadata.gz: 193d57d91538c74f8e29ee1d7fce65153c46a286b586a281674cbfcde51e833a485c8c7bab8e4342ab09451bcc044dceb09be42e489f3ed3ef4a91217b2b5585
7
- data.tar.gz: 76f4ff19c508a4f61d5153dcf80f1298c9edb140c0e59e05f702218d097b4d62fe9f7f945dd797bbe0c4ad495db2a39b0807cd7006a7d20f2f8994616feb9da7
6
+ metadata.gz: bf8c718efe53da5e8f8b417e249bfb3826a080f328331bee932af7108b0fea3da7a0f6b2fc5f581dc0c9f1588e056ae19d1dad83a2e3f45e2ba776763f672a1a
7
+ data.tar.gz: 83665d655bb8fa02fa9140115b3d6a604c7e18bde4c1bb4cc5d0bda505c2e1df7cb8c34fc515c62894e0964edc78ca0c773ca5ec34ed1d821ffe87304ecdd0b3
@@ -33,7 +33,7 @@ module Api
33
33
  param :login, String, :required => true, :desc => N_('Login id of scc_account')
34
34
  param :password, String, :required => true, :desc => N_('Password of scc_account')
35
35
  param :base_url, String, :required => false, :desc => N_('URL of SUSE for scc_account')
36
- param :interval, ['never', 'daily', 'weekly', 'monthy'], :desc => N_('Interval for syncing scc_account')
36
+ param :interval, ['never', 'daily', 'weekly', 'monthly'], :desc => N_('Interval for syncing scc_account')
37
37
  param :sync_date, String, :desc => N_('Date and time relative to which the sync interval is run')
38
38
  param :katello_gpg_key_id, :identifier, :required => false, :desc => N_('Associated GPG key of scc_account')
39
39
  end
@@ -19,7 +19,8 @@ module Actions
19
19
  :product_id => product_create_action.output[:product_id],
20
20
  :uniq_name => repo.uniq_name(scc_product),
21
21
  :pretty_repo_name => repo.pretty_name,
22
- :url => repo.full_url,
22
+ :url => repo.url,
23
+ :token => repo.token,
23
24
  :arch => arch)
24
25
  katello_repos[repo.id] = repo_create_action.output[:katello_root_repository_id]
25
26
  end
@@ -37,8 +38,7 @@ module Actions
37
38
  scc_product.update!(product: product)
38
39
  # extract Katello repo ids from input hash and store to database
39
40
  input[:katello_repos].each do |scc_repo_id, katello_root_repository_id|
40
- scc_repo = SccRepository.find(scc_repo_id)
41
- scc_repo.update!(katello_root_repository_id: katello_root_repository_id)
41
+ SccKatelloRepository.find_or_create_by(scc_repository_id: scc_repo_id, katello_root_repository_id: katello_root_repository_id)
42
42
  end
43
43
  end
44
44
 
@@ -79,18 +79,24 @@ module Actions
79
79
  gpg_key = product.gpg_key
80
80
  repo_param = { :label => label,
81
81
  :name => input[:pretty_repo_name],
82
- :url => input[:url],
83
82
  :content_type => 'yum',
84
83
  :unprotected => unprotected,
85
84
  :gpg_key => gpg_key,
86
85
  :arch => input[:arch],
87
- :download_policy => ::Runcible::Models::YumImporter::DOWNLOAD_IMMEDIATE }
86
+ :download_policy => Setting[:default_download_policy] }
88
87
  repository = product.add_repo(repo_param)
89
88
  if repository.has_attribute?('mirror_on_sync')
90
89
  repository.mirror_on_sync = true
91
90
  else
92
91
  repository.mirroring_policy = ::Katello::RootRepository::MIRRORING_POLICY_CONTENT
93
92
  end
93
+ if repository.has_attribute?('upstream_authentication_token')
94
+ repository.url = input[:url]
95
+ repository.upstream_authentication_token = input[:token]
96
+ else
97
+ repository.url = input[:token].blank? ? input[:url] : "#{input[:url]}?#{input[:token]}"
98
+ end
99
+
94
100
  repository.verify_ssl_on_sync = true
95
101
  trigger(::Actions::Katello::Repository::CreateRoot, repository).tap do
96
102
  output[:katello_root_repository_id] = repository.id
@@ -194,12 +194,13 @@ class SccAccount < ApplicationRecord
194
194
 
195
195
  # all scc repos that are kept but not available upstream need to be marked invalid
196
196
  # subscription_valid can be set to nil
197
- to_invalidate = invalidated_repos.select { |ir| ir.katello_root_repository_id.present? && !ir.subscription_valid }
197
+ to_invalidate = invalidated_repos.select { |ir| ir.katello_root_repositories.count > 0 && !ir.subscription_valid }
198
198
  ::Foreman::Logging.logger('foreman_scc_manager').debug "Invalidating #{to_invalidate.count} expired repositories"
199
199
  invalidate_subscription_status(to_invalidate, save_record: true)
200
200
 
201
201
  # delete repositories being removed upstream and that are not subscribed to
202
- to_delete = scc_repositories.where.not(scc_id: upstream_repo_ids)
202
+ to_delete = scc_repositories.where.not(scc_id: upstream_repo_ids).includes(:scc_katello_repositories).where(scc_katello_repositories: { id: nil })
203
+
203
204
  ::Foreman::Logging.logger('foreman_scc_manager').debug "Deleting #{to_delete.count} old repositories"
204
205
  to_delete.destroy_all
205
206
  end
@@ -0,0 +1,4 @@
1
+ class SccKatelloRepository < ApplicationRecord
2
+ belongs_to :scc_repository
3
+ belongs_to :katello_root_repository, class_name: 'Katello::RootRepository'
4
+ end
@@ -56,13 +56,19 @@ class SccProduct < ApplicationRecord
56
56
  label = Katello::Util::Model.labelize(uniq_repo_name)
57
57
  unprotected = true
58
58
  gpg_key = new_product.gpg_key
59
- new_repo = new_product.add_repo(label, uniq_repo_name, repo.full_url, 'yum', unprotected, gpg_key)
59
+ new_repo = new_product.add_repo(label, uniq_repo_name, repo.url, 'yum', unprotected, gpg_key)
60
60
  new_repo.arch = arch || 'noarch'
61
61
  if new_repo.has_attribute?('mirror_on_sync')
62
62
  new_repo.mirror_on_sync = true
63
63
  else
64
64
  new_repo.mirroring_policy = ::Katello::RootRepository::MIRRORING_POLICY_CONTENT
65
65
  end
66
+ if new_repo.has_attribute?('upstream_authentication_token')
67
+ new_repo.upstream_authentication_token = repo.token
68
+ new_repo.url = repo.url
69
+ else
70
+ new_repo.url = repo.full_url
71
+ end
66
72
  new_repo.verify_ssl_on_sync = true
67
73
  ForemanTasks.sync_task(::Actions::Katello::Repository::Create, new_repo, false, false)
68
74
  end
@@ -4,7 +4,8 @@ class SccRepository < ApplicationRecord
4
4
  self.include_root_in_json = false
5
5
 
6
6
  belongs_to :scc_account
7
- belongs_to :katello_root_repository, class_name: 'Katello::RootRepository'
7
+ has_many :scc_katello_repositories
8
+ has_many :katello_root_repositories, through: :scc_katello_repositories
8
9
  has_one :organization, through: :scc_account
9
10
  has_and_belongs_to_many :scc_products
10
11
 
@@ -22,10 +23,22 @@ class SccRepository < ApplicationRecord
22
23
 
23
24
  def token_changed_callback
24
25
  User.current ||= User.anonymous_admin
25
- repo = self.katello_root_repository
26
- return if repo.nil? || repo.url == full_url
27
26
 
28
- ::Foreman::Logging.logger('foreman_scc_manager').info "Update URL-token for repository '#{repo.name}'."
29
- ForemanTasks.async_task(::Actions::Katello::Repository::Update, repo, url: full_url)
27
+ # get all Katello repos that were derived from this SCC repo
28
+ # as uniq_name was changed, we need to look for repo labels that end with the repo name
29
+ katello_repos = Katello::RootRepository.where('label like ?', "%#{::Katello::Util::Model.labelize(self.description)}%")
30
+ katello_repos.each do |repo|
31
+ if repo.has_attribute?('upstream_authentication_token')
32
+ unless repo.url == url && repo.upstream_authentication_token == token
33
+ ForemanTasks.async_task(::Actions::Katello::Repository::Update, repo, url: url, upstream_authentication_token: token)
34
+ ::Foreman::Logging.logger('foreman_scc_manager').info "Update URL and authentication token for repository '#{repo.name}'."
35
+ end
36
+ else
37
+ unless repo.url == full_url
38
+ ForemanTasks.async_task(::Actions::Katello::Repository::Update, repo, url: full_url)
39
+ ::Foreman::Logging.logger('foreman_scc_manager').info "Update URL-token for repository '#{repo.name}'."
40
+ end
41
+ end
42
+ end
30
43
  end
31
44
  end
@@ -0,0 +1,10 @@
1
+ class AddSccKatelloRepositoryRelation < ActiveRecord::Migration[6.0]
2
+ def change
3
+ create_table(:scc_katello_repositories) do |t|
4
+ t.references :scc_repository, null: false, foreign_key: { on_delete: :cascade }
5
+ t.references :katello_root_repository, null: false, foreign_key: { on_delete: :cascade }
6
+
7
+ t.timestamps null: false
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,6 @@
1
+ class RemoveRootRepositoryIdFromSccRepository < ActiveRecord::Migration[6.0]
2
+ def change
3
+ remove_foreign_key :scc_repositories, :katello_root_repositories, column: :katello_root_repository_id, on_delete: :nullify
4
+ remove_column :scc_repositories, :katello_root_repository_id, :integer, index: true, null: true
5
+ end
6
+ end
@@ -0,0 +1,16 @@
1
+ class PopulateSccKatelloRepositories < ActiveRecord::Migration[6.0]
2
+ class SccProduct < ApplicationRecord
3
+ belongs_to :product, class_name: 'Katello::Product'
4
+ has_and_belongs_to_many :scc_repositories
5
+ end
6
+
7
+ def up
8
+ SccProduct.where.not(product_id: nil).each do |scc_p|
9
+ scc_p.scc_repositories.each do |scc_r|
10
+ # find all Katello repositories that were derived from that SCC repository
11
+ katello_repos = Katello::RootRepository.where('label like ?', "%#{::Katello::Util::Model.labelize(scc_r.description)}%")
12
+ scc_r.update!(katello_root_repositories: katello_repos)
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,23 @@
1
+ class PopulateUpstreamAuthenticationToken < ActiveRecord::Migration[6.0]
2
+ def up
3
+ return unless ActiveRecord::Base.connection.column_exists?('katello_root_repositories', 'upstream_authentication_token')
4
+
5
+ scc_repositories = SccRepository.includes(:scc_katello_repositories).where.not(scc_katello_repositories: { id: nil })
6
+ scc_repositories.each do |scc_repo|
7
+ scc_repo.katello_root_repositories.each do |katello_repo|
8
+ katello_repo.update!(url: scc_repo.url, upstream_authentication_token: scc_repo.token)
9
+ end
10
+ end
11
+ end
12
+
13
+ def down
14
+ return if ActiveRecord::Base.connection.column_exists?('katello_root_repositories', 'upstream_authentication_token')
15
+
16
+ scc_repositories = SccRepository.includes(:scc_katello_repositories).where.not(scc_katello_repositories: { id: nil })
17
+ scc_repositories.each do |scc_repo|
18
+ scc_repo.katello_root_repositories.each do |katello_repo|
19
+ katello_repo.update!(url: scc_repo.full_url)
20
+ end
21
+ end
22
+ end
23
+ end
@@ -1,3 +1,3 @@
1
1
  module ForemanSccManager
2
- VERSION = '1.8.17'.freeze
2
+ VERSION = '1.8.20'.freeze
3
3
  end
@@ -0,0 +1,27 @@
1
+ begin
2
+ require 'rubocop/rake_task'
3
+
4
+ namespace :foreman_scc_manager do
5
+ desc 'Set up authentication tokens for Katello 4.3.'
6
+ task :setup_authentication_tokens => ['environment'] do
7
+ unless ActiveRecord::Base.connection.column_exists?('katello_root_repositories', 'upstream_authentication_token')
8
+ puts 'Your Katello version needs to be at 4.3 and up to run this task.'
9
+ return
10
+ end
11
+ begin
12
+ scc_repositories = SccRepository.includes(:scc_katello_repositories).where.not(scc_katello_repositories: { id: nil })
13
+ scc_repositories.each do |scc_repo|
14
+ scc_repo.katello_root_repositories.each do |katello_repo|
15
+ katello_repo.update!(url: scc_repo.url, upstream_authentication_token: scc_repo.token)
16
+ end
17
+ end
18
+ puts 'Authentication tokens created successfully.'
19
+ rescue StandardError => e
20
+ puts 'There was an error while creating the authentication tokens.'
21
+ puts e.to_s
22
+ end
23
+ end
24
+ end
25
+ rescue LoadError
26
+ puts 'Rubocop not loaded.'
27
+ end
@@ -0,0 +1,44 @@
1
+ sles12_sp4_updates:
2
+ name: SLES12-SP4-Updates for sle-12-x86_64
3
+ content_type: yum
4
+ label: 1759_SLES12-SP4-Updates_for_sle-12-x86_64_description
5
+ product_id: <%= ActiveRecord::FixtureSet.identify(:suse) %>
6
+ url: www.not-valid.com
7
+ download_policy: immediate
8
+ <% if ActiveRecord::Base.connection.column_exists? :katello_root_repositories, :mirroring_policy %>
9
+ mirroring_policy: "mirror_content_only"
10
+ <% else %>
11
+ mirror_on_sync: "true"
12
+ <% end %>
13
+ created_at: <%= Time.now %>
14
+ updated_at: <%= Time.now %>
15
+
16
+ sles12_sp4_installer_updates:
17
+ name: SLES12-SP4-Installer-Updates for sle-12-x86_64
18
+ content_type: yum
19
+ label: 1759_product_name_SLES12-SP4-Installer-Updates_for_sle-12-x86_64_description
20
+ product_id: <%= ActiveRecord::FixtureSet.identify(:suse) %>
21
+ url: www.not-valid.com
22
+ download_policy: on_demand
23
+ <% if ActiveRecord::Base.connection.column_exists? :katello_root_repositories, :mirroring_policy %>
24
+ mirroring_policy: "mirror_content_only"
25
+ <% else %>
26
+ mirror_on_sync: "true"
27
+ <% end %>
28
+ created_at: <%= Time.now %>
29
+ updated_at: <%= Time.now %>
30
+
31
+ sles12_sp4_installer_updates_2:
32
+ name: SLES12-SP4-Installer-Updates for sle-12-x86_64
33
+ content_type: yum
34
+ label: 1760_product_name_SLES12-SP4-Installer-Updates_for_sle-12-x86_64_description
35
+ product_id: <%= ActiveRecord::FixtureSet.identify(:suse) %>
36
+ url: www.not-valid.com
37
+ download_policy: on_demand
38
+ <% if ActiveRecord::Base.connection.column_exists? :katello_root_repositories, :mirroring_policy %>
39
+ mirroring_policy: "mirror_content_only"
40
+ <% else %>
41
+ mirror_on_sync: "true"
42
+ <% end %>
43
+ created_at: <%= Time.now %>
44
+ updated_at: <%= Time.now %>
@@ -25,5 +25,39 @@ repo_9:
25
25
  autorefresh: true
26
26
  installer_updates: false
27
27
 
28
+ sles12_updates:
29
+ id: 10
30
+ scc_account_id: 1
31
+ scc_id: 1
32
+ name: SLES12-SP4-Updates for sle-12-x86_64
33
+ distro_target: sles_12
34
+ description: SLES12-SP4-Updates for sle-12-x86_64
35
+ url: www.not-valid.com
36
+ token: token_10
37
+ autorefresh: true
38
+ installer_updates: false
28
39
 
29
40
 
41
+ sles12_installer_updates:
42
+ id: 11
43
+ scc_account_id: 1
44
+ scc_id: 2
45
+ name: SLES12-SP4-Installer-Updates for sle-12-x86_64
46
+ distro_target: sles_12
47
+ description: SLES12-SP4-Installer-Updates for sle-12-x86_64
48
+ url: www.not-valid.com
49
+ token: token_11
50
+ autorefresh: true
51
+ installer_updates: false
52
+
53
+ sles12_installer_updates_2:
54
+ id: 12
55
+ scc_account_id: 1
56
+ scc_id: 3
57
+ name: SLES12-SP4-Installer-Updates for sle-12-x86_64_2
58
+ distro_target: sles_9
59
+ description: SLES12-SP4-Installer-Updates for sle-12-x86_64_2
60
+ url: www.not-valid.com
61
+ token: token_12
62
+ autorefresh: true
63
+ installer_updates: false
@@ -3,7 +3,9 @@ module ForemanSccManager
3
3
  FIXTURE_CLASSES = {
4
4
  scc_accounts: ::SccAccount,
5
5
  scc_products: ::SccProduct,
6
- scc_repositories: ::SccRepository
6
+ scc_repositories: ::SccRepository,
7
+ katello_root_repositories: ::Katello::RootRepository,
8
+ scc_katello_repositories: SccKatelloRepository
7
9
  }.freeze
8
10
 
9
11
  def self.set_fixture_classes(test_class)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: foreman_scc_manager
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.8.17
4
+ version: 1.8.20
5
5
  platform: ruby
6
6
  authors:
7
7
  - ATIX AG
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-02-01 00:00:00.000000000 Z
11
+ date: 2022-06-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rdoc
@@ -128,6 +128,7 @@ files:
128
128
  - app/models/scc_account.rb
129
129
  - app/models/scc_account_sync_plan_task_group.rb
130
130
  - app/models/scc_extending.rb
131
+ - app/models/scc_katello_repository.rb
131
132
  - app/models/scc_product.rb
132
133
  - app/models/scc_repository.rb
133
134
  - app/views/api/v2/scc_accounts/base.json.rabl
@@ -165,10 +166,15 @@ files:
165
166
  - db/migrate/20210210104407_add_root_repository_id_to_scc_repository.rb
166
167
  - db/migrate/20210224095050_connect_katello_root_repository_to_scc_repository.rb
167
168
  - db/migrate/20210713092440_add_permissions.rb
169
+ - db/migrate/20220425132605_add_scc_katello_repository_relation.rb
170
+ - db/migrate/20220429100843_remove_root_repository_id_from_scc_repository.rb
171
+ - db/migrate/20220429102717_populate_scc_katello_repositories.rb
172
+ - db/migrate/20220513132652_populate_upstream_authentication_token.rb
168
173
  - lib/foreman_scc_manager.rb
169
174
  - lib/foreman_scc_manager/engine.rb
170
175
  - lib/foreman_scc_manager/version.rb
171
176
  - lib/tasks/rubocop.rake
177
+ - lib/tasks/setup_authentication_token.rake
172
178
  - lib/tasks/test.rake
173
179
  - locale/Makefile
174
180
  - locale/action_names.rb
@@ -188,6 +194,7 @@ files:
188
194
  - test/fixtures/files/data_products_page2.json
189
195
  - test/fixtures/files/data_repositories.json
190
196
  - test/fixtures/files/data_subscriptions.json
197
+ - test/fixtures/models/katello_root_repositories.yml
191
198
  - test/fixtures/models/scc_accounts.yml
192
199
  - test/fixtures/models/scc_products.yml
193
200
  - test/fixtures/models/scc_repositories.yml
@@ -220,21 +227,22 @@ signing_key:
220
227
  specification_version: 4
221
228
  summary: Suse Customer Center plugin for Foreman
222
229
  test_files:
230
+ - test/support/fixtures_support.rb
223
231
  - test/unit/foreman_scc_manager_test.rb
224
- - test/features/sync_test.rb
232
+ - test/actions/sync_test.rb
233
+ - test/test_plugin_helper.rb
234
+ - test/factories/foreman_scc_manager_factories.rb
225
235
  - test/models/scc_product_test.rb
226
236
  - test/models/scc_account_test.rb
227
- - test/factories/foreman_scc_manager_factories.rb
228
- - test/controllers/api/v2/scc_accounts_test.rb
229
- - test/controllers/api/v2/scc_products_test.rb
230
- - test/controllers/scc_accounts_controller_test.rb
231
- - test/actions/sync_test.rb
232
- - test/support/fixtures_support.rb
233
- - test/fixtures/models/scc_accounts.yml
237
+ - test/features/sync_test.rb
234
238
  - test/fixtures/models/scc_repositories.yml
239
+ - test/fixtures/models/katello_root_repositories.yml
240
+ - test/fixtures/models/scc_accounts.yml
235
241
  - test/fixtures/models/scc_products.yml
236
- - test/fixtures/files/data_products_page2.json
237
242
  - test/fixtures/files/data_products_page1.json
238
243
  - test/fixtures/files/data_subscriptions.json
244
+ - test/fixtures/files/data_products_page2.json
239
245
  - test/fixtures/files/data_repositories.json
240
- - test/test_plugin_helper.rb
246
+ - test/controllers/scc_accounts_controller_test.rb
247
+ - test/controllers/api/v2/scc_products_test.rb
248
+ - test/controllers/api/v2/scc_accounts_test.rb