foreman_scc_manager 1.8.6 → 1.8.7
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 +4 -4
- data/app/controllers/api/v2/scc_accounts_controller.rb +1 -1
- data/app/lib/actions/scc_manager/subscribe_product.rb +19 -7
- data/app/lib/actions/scc_manager/sync.rb +5 -5
- data/app/lib/actions/scc_manager/sync_products.rb +10 -13
- data/app/lib/actions/scc_manager/sync_repositories.rb +9 -13
- data/app/models/scc_account.rb +55 -3
- data/app/models/scc_repository.rb +7 -9
- data/app/views/scc_accounts/show.html.erb +5 -0
- data/db/migrate/20210205082733_add_subscription_valid_to_scc_products_and_repos.rb +6 -0
- data/db/migrate/20210210104407_add_root_repository_id_to_scc_repository.rb +6 -0
- data/db/migrate/20210224095050_connect_katello_root_repository_to_scc_repository.rb +17 -0
- data/lib/foreman_scc_manager/version.rb +1 -1
- data/locale/de/LC_MESSAGES/foreman_scc_manager.mo +0 -0
- data/locale/de/foreman_scc_manager.edit.po +574 -0
- data/locale/de/foreman_scc_manager.po +40 -21
- data/locale/de/foreman_scc_manager.po.time_stamp +0 -0
- data/locale/en/foreman_scc_manager.edit.po +566 -0
- data/locale/en/foreman_scc_manager.po +21 -3
- data/locale/en/foreman_scc_manager.po.time_stamp +0 -0
- data/locale/foreman_scc_manager.pot +62 -43
- data/test/fixtures/models/scc_products.yml +4 -0
- data/test/models/scc_account_test.rb +6 -0
- metadata +9 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 843165a6092fcb04bf69d13131ae44acb02478ce347084c160a8f61891770eba
|
4
|
+
data.tar.gz: 892025747b9572a4b31d25f4c96ab28ea9af0099ef3302fe8c7aec07935b588b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0cb42eeb656e4a0cca5c93d7c83e0fed14fa73a9b0e7f2ad0ddcb07b007156405f0e91d968e4eb38aafd6376551f334340bda0a4ff9d632d13d4818766e7eb75
|
7
|
+
data.tar.gz: 700546d7abfdc1ff7fc12f452c69bb6ca8869c41b63ae4e37fef99541dc229bf2287de3435ecd8c09dee32cb79465b8c896af09c78b4d0d498209e35c8a347cf
|
@@ -35,7 +35,7 @@ module Api
|
|
35
35
|
param :base_url, String, :required => false, :desc => N_('URL of SUSE for scc_account')
|
36
36
|
param :interval, ['never', 'daily', 'weekly', 'monthy'], :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
|
-
param :katello_gpg_key_id, :identifier, :required => false, :desc => N_('Associated
|
38
|
+
param :katello_gpg_key_id, :identifier, :required => false, :desc => N_('Associated GPG key of scc_account')
|
39
39
|
end
|
40
40
|
end
|
41
41
|
|
@@ -12,24 +12,34 @@ module Actions
|
|
12
12
|
:product_description => scc_product.pretty_description,
|
13
13
|
:organization_id => scc_product.organization.id,
|
14
14
|
:gpg_key => scc_product.scc_account.katello_gpg_key_id)
|
15
|
+
katello_repos = {}
|
15
16
|
scc_product.scc_repositories.each do |repo|
|
16
17
|
arch = scc_product.arch || 'noarch'
|
17
|
-
plan_action(CreateRepository,
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
18
|
+
repo_create_action = plan_action(CreateRepository,
|
19
|
+
:product_id => product_create_action.output[:product_id],
|
20
|
+
:uniq_name => repo.uniq_name(scc_product),
|
21
|
+
:pretty_repo_name => repo.pretty_name,
|
22
|
+
:url => repo.full_url,
|
23
|
+
:arch => arch)
|
24
|
+
katello_repos[repo.id] = repo_create_action.output[:katello_root_repository_id]
|
23
25
|
end
|
26
|
+
# connect action to resource (=> make parameters accessable in input)
|
24
27
|
action_subject(scc_product, product_id: product_create_action.output[:product_id])
|
28
|
+
input.update(katello_repos: katello_repos)
|
25
29
|
plan_self
|
26
30
|
end
|
27
31
|
end
|
28
32
|
|
29
33
|
def finalize
|
34
|
+
# connect Scc products and Katello products
|
30
35
|
scc_product = SccProduct.find(input[:scc_product][:id])
|
31
36
|
product = ::Katello::Product.find(input[:product_id])
|
32
37
|
scc_product.update!(product: product)
|
38
|
+
# extract Katello repo ids from input hash and store to database
|
39
|
+
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)
|
42
|
+
end
|
33
43
|
end
|
34
44
|
|
35
45
|
def humanized_name
|
@@ -74,7 +84,9 @@ module Actions
|
|
74
84
|
repository = product.add_repo(repo_param)
|
75
85
|
repository.mirror_on_sync = true
|
76
86
|
repository.verify_ssl_on_sync = true
|
77
|
-
trigger(::Actions::Katello::Repository::CreateRoot, repository)
|
87
|
+
trigger(::Actions::Katello::Repository::CreateRoot, repository).tap do
|
88
|
+
output[:katello_root_repository_id] = repository.id
|
89
|
+
end
|
78
90
|
end
|
79
91
|
end
|
80
92
|
end
|
@@ -1,21 +1,21 @@
|
|
1
1
|
module Actions
|
2
2
|
module SccManager
|
3
|
+
# for dynflow documentation see here: https://dynflow.github.io/documentation/
|
3
4
|
class Sync < Actions::EntryAction
|
4
5
|
def plan(scc_account)
|
5
6
|
::Foreman::Logging.logger('foreman_scc_manager')
|
6
7
|
.info("Initiating 'sync' for SccAccount '#{scc_account.name}'.")
|
7
8
|
action_subject(scc_account)
|
8
9
|
sequence do
|
9
|
-
|
10
|
-
|
11
|
-
plan_self
|
10
|
+
plan_action(::Actions::SccManager::SyncRepositories, scc_account)
|
11
|
+
plan_action(::Actions::SccManager::SyncProducts, scc_account)
|
12
|
+
plan_self
|
12
13
|
end
|
13
14
|
end
|
14
15
|
|
15
16
|
def finalize
|
17
|
+
# this is only executed if run actions of SyncRepositories and SyncProducts were successful
|
16
18
|
scc_account = SccAccount.find(input[:scc_account][:id])
|
17
|
-
raise 'Updating failed' unless input[:repo_status] == 'SUCCESS' && input[:prod_status] == 'SUCCESS'
|
18
|
-
|
19
19
|
scc_account.update! synced: Time.current
|
20
20
|
end
|
21
21
|
|
@@ -13,22 +13,19 @@ module Actions
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def run
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
::Foreman::Logging.logger('foreman_scc_manager').error "Error while syncronizing SCC-Products: #{e}"
|
25
|
-
output[:error] = e.to_s
|
26
|
-
output[:status] = 'FAILURE'
|
27
|
-
end
|
16
|
+
products = ::SccManager.get_scc_data(input.fetch(:base_url),
|
17
|
+
'/connect/organizations/products',
|
18
|
+
input.fetch(:login),
|
19
|
+
decrypt_field(input.fetch(:password)))
|
20
|
+
output[:data] = ::SccManager.sanitize_products(products).values
|
21
|
+
rescue StandardError => e
|
22
|
+
::Foreman::Logging.logger('foreman_scc_manager').error "Error while syncronizing SCC-Products: #{e}"
|
23
|
+
error! e.to_s
|
28
24
|
end
|
29
25
|
|
30
26
|
def finalize
|
31
|
-
|
27
|
+
# this is only executed if 'run' succeeds
|
28
|
+
SccAccount.find(input.fetch(:id)).update_scc_products(output.fetch(:data))
|
32
29
|
end
|
33
30
|
|
34
31
|
def rescue_strategy
|
@@ -12,22 +12,18 @@ module Actions
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def run
|
15
|
-
output[:
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
rescue StandardError => e
|
23
|
-
::Foreman::Logging.logger('foreman_scc_manager').error "Error while syncronizing SCC-Repositories: #{e}"
|
24
|
-
output[:error] = e.to_s
|
25
|
-
output[:status] = 'FAILURE'
|
26
|
-
end
|
15
|
+
output[:data] = ::SccManager.get_scc_data(input[:base_url],
|
16
|
+
'/connect/organizations/repositories',
|
17
|
+
input[:login],
|
18
|
+
decrypt_field(input[:password]))
|
19
|
+
rescue StandardError => e
|
20
|
+
::Foreman::Logging.logger('foreman_scc_manager').error "Error while syncronizing SCC-Repositories: #{e}"
|
21
|
+
error! e.to_s
|
27
22
|
end
|
28
23
|
|
29
24
|
def finalize
|
30
|
-
|
25
|
+
# this is only executed if 'run' succeeds
|
26
|
+
SccAccount.find(input[:scc_account][:id]).update_scc_repositories(output[:data])
|
31
27
|
end
|
32
28
|
|
33
29
|
def rescue_strategy
|
data/app/models/scc_account.rb
CHANGED
@@ -176,6 +176,8 @@ class SccAccount < ApplicationRecord
|
|
176
176
|
|
177
177
|
def update_scc_repositories(upstream_repositories)
|
178
178
|
upstream_repo_ids = []
|
179
|
+
# initially invalidate all repositories and validate them during update
|
180
|
+
invalidated_repos = invalidate_subscription_status(scc_repositories)
|
179
181
|
# import repositories
|
180
182
|
upstream_repositories.each do |ur|
|
181
183
|
cached_repository = scc_repositories.find_or_initialize_by(scc_id: ur['id'])
|
@@ -187,11 +189,21 @@ class SccAccount < ApplicationRecord
|
|
187
189
|
cached_repository.installer_updates = ur['installer_updates']
|
188
190
|
# should be called after all attributes are set in case of dependencies (currently: description)
|
189
191
|
cached_repository.name = cached_repository.pretty_name
|
192
|
+
cached_repository.subscription_valid = true
|
190
193
|
cached_repository.save!
|
191
194
|
upstream_repo_ids << ur['id']
|
195
|
+
# set invalidated record to true, if exists
|
196
|
+
invalidated_repos = revalidate_subscription_status(invalidated_repos, ur[id])
|
192
197
|
end
|
193
198
|
::Foreman::Logging.logger('foreman_scc_manager').debug "Found #{upstream_repo_ids.length} repositories"
|
194
|
-
|
199
|
+
|
200
|
+
# all scc repos that are kept but not available upstream need to be marked invalid
|
201
|
+
# subscription_valid can be set to nil
|
202
|
+
to_invalidate = invalidated_repos.select { |ir| ir.katello_root_repository_id.present? && !ir.subscription_valid }
|
203
|
+
::Foreman::Logging.logger('foreman_scc_manager').debug "Invalidating #{to_invalidate.count} expired repositories"
|
204
|
+
invalidate_subscription_status(to_invalidate, true)
|
205
|
+
|
206
|
+
# delete repositories being removed upstream and that are not subscribed to
|
195
207
|
to_delete = scc_repositories.where.not(scc_id: upstream_repo_ids)
|
196
208
|
::Foreman::Logging.logger('foreman_scc_manager').debug "Deleting #{to_delete.count} old repositories"
|
197
209
|
to_delete.destroy_all
|
@@ -199,6 +211,8 @@ class SccAccount < ApplicationRecord
|
|
199
211
|
|
200
212
|
def update_scc_products(upstream_products)
|
201
213
|
upstream_product_ids = []
|
214
|
+
# initially invalidate all products and validate them during update
|
215
|
+
invalidated_products = invalidate_subscription_status(scc_products)
|
202
216
|
# import products
|
203
217
|
upstream_products.each do |up|
|
204
218
|
cached_product = scc_products.find_or_initialize_by(scc_id: up['id'])
|
@@ -212,12 +226,22 @@ class SccAccount < ApplicationRecord
|
|
212
226
|
# name should be set after friendly_name because it depends on friendly_name
|
213
227
|
cached_product.name = cached_product.pretty_name
|
214
228
|
cached_product.description = cached_product.pretty_description
|
229
|
+
cached_product.subscription_valid = true
|
215
230
|
cached_product.save!
|
216
231
|
upstream_product_ids << up['id']
|
232
|
+
# set invalidated record to true, if exists
|
233
|
+
invalidated_products = revalidate_subscription_status(invalidated_products, up['id'])
|
217
234
|
end
|
218
235
|
::Foreman::Logging.logger('foreman_scc_manager').debug "Found #{upstream_product_ids.length} products"
|
219
|
-
|
220
|
-
|
236
|
+
|
237
|
+
# all scc products that are kept but not available upstream need to be marked invalid
|
238
|
+
# subscription_valid can be set to nil
|
239
|
+
to_invalidate = invalidated_products.select { |ip| ip.product_id.present? && !ip.subscription_valid }
|
240
|
+
::Foreman::Logging.logger('foreman_scc_manager').debug "Invalidating #{to_invalidate.count} expired products"
|
241
|
+
invalidate_subscription_status(to_invalidate, true)
|
242
|
+
|
243
|
+
# delete products being removed upstream and that are not subscribed to
|
244
|
+
to_delete = scc_products.where.not(scc_id: upstream_product_ids).where(product_id: nil)
|
221
245
|
::Foreman::Logging.logger('foreman_scc_manager').debug "Deleting #{to_delete.count} old products"
|
222
246
|
to_delete.destroy_all
|
223
247
|
# rewire product to product relationships
|
@@ -230,4 +254,32 @@ class SccAccount < ApplicationRecord
|
|
230
254
|
end
|
231
255
|
end
|
232
256
|
end
|
257
|
+
|
258
|
+
# validate the subscription status of a product/repo
|
259
|
+
# no saving to database
|
260
|
+
# params: elements: scc repos or products, Array or ActiveRecord_(*)
|
261
|
+
# scc_id: scc_id of the element that should be revalidated
|
262
|
+
# return: elements where for the element with scc_id subscription_valid is true
|
263
|
+
def revalidate_subscription_status(elements, scc_id)
|
264
|
+
return nil if elements.nil?
|
265
|
+
|
266
|
+
revalidate = elements.find { |e| e.scc_id == scc_id }
|
267
|
+
revalidate.subscription_valid = true unless revalidate.nil?
|
268
|
+
# return modified list
|
269
|
+
elements
|
270
|
+
end
|
271
|
+
|
272
|
+
# set all products/repos invalid
|
273
|
+
# params: items_to_invalidate: ActiveRecord_(*)
|
274
|
+
# save_record: store in database or not (default)
|
275
|
+
# return: ActiveRecord elements with invalidated subscription status
|
276
|
+
def invalidate_subscription_status(items_to_invalidate, save_record = false)
|
277
|
+
if items_to_invalidate.present?
|
278
|
+
items_to_invalidate.each do |inv|
|
279
|
+
inv.subscription_valid = false
|
280
|
+
inv.save! if save_record
|
281
|
+
end
|
282
|
+
end
|
283
|
+
items_to_invalidate
|
284
|
+
end
|
233
285
|
end
|
@@ -4,6 +4,7 @@ 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
8
|
has_one :organization, through: :scc_account
|
8
9
|
has_and_belongs_to_many :scc_products
|
9
10
|
|
@@ -12,7 +13,7 @@ class SccRepository < ApplicationRecord
|
|
12
13
|
end
|
13
14
|
|
14
15
|
def uniq_name(scc_product)
|
15
|
-
scc_product.
|
16
|
+
scc_product.scc_id.to_s + ' ' + description
|
16
17
|
end
|
17
18
|
|
18
19
|
def pretty_name
|
@@ -21,13 +22,10 @@ class SccRepository < ApplicationRecord
|
|
21
22
|
|
22
23
|
def token_changed_callback
|
23
24
|
User.current ||= User.anonymous_admin
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
ForemanTasks.async_task(::Actions::Katello::Repository::Update, repository, url: full_url)
|
30
|
-
end
|
31
|
-
end
|
25
|
+
repo = self.katello_root_repository
|
26
|
+
return if repo.nil? || repo.url == full_url
|
27
|
+
|
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)
|
32
30
|
end
|
33
31
|
end
|
@@ -12,6 +12,11 @@
|
|
12
12
|
<%= check_box_tag("scc_account[scc_subscribe_product_ids][]", scc_product.id, false) %>
|
13
13
|
<%= scc_product.pretty_name %>
|
14
14
|
<% end %>
|
15
|
+
<% unless scc_product.subscription_valid? %>
|
16
|
+
<span style="color:red">
|
17
|
+
<%= _('(WARNING: Please check your SUSE subscription)') %>
|
18
|
+
</span>
|
19
|
+
<% end %>
|
15
20
|
</span>
|
16
21
|
<% if scc_product.scc_extensions.any? %>
|
17
22
|
<ul style='padding-left: 20px;'>
|
@@ -0,0 +1,6 @@
|
|
1
|
+
class AddRootRepositoryIdToSccRepository < ActiveRecord::Migration[5.2]
|
2
|
+
def change
|
3
|
+
add_column :scc_repositories, :katello_root_repository_id, :integer, index: true, null: true
|
4
|
+
add_foreign_key :scc_repositories, :katello_root_repositories, column: :katello_root_repository_id, on_delete: :nullify
|
5
|
+
end
|
6
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
class ConnectKatelloRootRepositoryToSccRepository < ActiveRecord::Migration[5.2]
|
2
|
+
def up
|
3
|
+
SccProduct.where.not(product_id: nil).each do |scc_p|
|
4
|
+
# extract all katello root repository ids from subscribed products
|
5
|
+
katello_root_repositories = scc_p.product.root_repositories.map { |r| [r.label, r.id] }.to_h
|
6
|
+
# match scc repository and katello repository names
|
7
|
+
# katello repository name can be
|
8
|
+
# 1) equal to scc repo name
|
9
|
+
# 2) equal to scc product id + scc product name + scc repo name
|
10
|
+
scc_p.scc_repositories.each do |scc_r|
|
11
|
+
katello_root_repositories.each do |katello_label, katello_id|
|
12
|
+
scc_r.update!(katello_root_repository_id: katello_id) if katello_label.end_with?(::Katello::Util::Model.labelize(scc_r.name))
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
Binary file
|
@@ -0,0 +1,574 @@
|
|
1
|
+
# SOME DESCRIPTIVE TITLE.
|
2
|
+
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
3
|
+
# This file is distributed under the same license as the foreman_scc_manager package.
|
4
|
+
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
5
|
+
#
|
6
|
+
# Translators:
|
7
|
+
# Wiederoder <stefanwiederoder@googlemail.com>, 2019
|
8
|
+
# Bryan Kearney <bryan.kearney@gmail.com>, 2019
|
9
|
+
# simon11 <simon.stieger.98@live.de>, 2019
|
10
|
+
# Crited <Alexander.Stoll@netways.de>, 2019
|
11
|
+
# Michael Moll, 2019
|
12
|
+
# Lukas K. <kallies@puzzle.ch>, 2019
|
13
|
+
# Markus Bucher <bucher@atix.de>, 2019
|
14
|
+
#
|
15
|
+
msgid ""
|
16
|
+
msgstr ""
|
17
|
+
"Project-Id-Version: foreman_scc_manager 1.7.0\n"
|
18
|
+
"Report-Msgid-Bugs-To: \n"
|
19
|
+
"PO-Revision-Date: 2019-10-17 13:28+0000\n"
|
20
|
+
"Last-Translator: Markus Bucher <bucher@atix.de>, 2019\n"
|
21
|
+
"Language-Team: German (https://www.transifex.com/foreman/teams/114/de/)\n"
|
22
|
+
"MIME-Version: 1.0\n"
|
23
|
+
"Content-Type: text/plain; charset=UTF-8\n"
|
24
|
+
"Content-Transfer-Encoding: 8bit\n"
|
25
|
+
"Language: de\n"
|
26
|
+
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
27
|
+
|
28
|
+
#: ../app/controllers/api/v2/scc_accounts_controller.rb:15
|
29
|
+
msgid "List all scc_accounts"
|
30
|
+
msgstr ""
|
31
|
+
|
32
|
+
#: ../app/controllers/api/v2/scc_accounts_controller.rb:24
|
33
|
+
msgid "Show scc_account"
|
34
|
+
msgstr ""
|
35
|
+
|
36
|
+
#: ../app/controllers/api/v2/scc_accounts_controller.rb:32
|
37
|
+
msgid "Name of the scc_account"
|
38
|
+
msgstr ""
|
39
|
+
|
40
|
+
#: ../app/controllers/api/v2/scc_accounts_controller.rb:33 ../app/controllers/api/v2/scc_accounts_controller.rb:65
|
41
|
+
msgid "Login id of scc_account"
|
42
|
+
msgstr ""
|
43
|
+
|
44
|
+
#: ../app/controllers/api/v2/scc_accounts_controller.rb:34 ../app/controllers/api/v2/scc_accounts_controller.rb:66
|
45
|
+
msgid "Password of scc_account"
|
46
|
+
msgstr ""
|
47
|
+
|
48
|
+
#: ../app/controllers/api/v2/scc_accounts_controller.rb:35 ../app/controllers/api/v2/scc_accounts_controller.rb:67
|
49
|
+
msgid "URL of SUSE for scc_account"
|
50
|
+
msgstr ""
|
51
|
+
|
52
|
+
#: ../app/controllers/api/v2/scc_accounts_controller.rb:36
|
53
|
+
msgid "Interval for syncing scc_account"
|
54
|
+
msgstr ""
|
55
|
+
|
56
|
+
#: ../app/controllers/api/v2/scc_accounts_controller.rb:37
|
57
|
+
msgid "Date and time relative to which the sync interval is run"
|
58
|
+
msgstr ""
|
59
|
+
|
60
|
+
#: ../app/controllers/api/v2/scc_accounts_controller.rb:38
|
61
|
+
msgid "Associated gpg key of scc_account"
|
62
|
+
msgstr ""
|
63
|
+
|
64
|
+
#: ../app/controllers/api/v2/scc_accounts_controller.rb:42
|
65
|
+
msgid "Create an scc_account"
|
66
|
+
msgstr ""
|
67
|
+
|
68
|
+
#: ../app/controllers/api/v2/scc_accounts_controller.rb:49
|
69
|
+
msgid "Update scc_account"
|
70
|
+
msgstr ""
|
71
|
+
|
72
|
+
#: ../app/controllers/api/v2/scc_accounts_controller.rb:56
|
73
|
+
msgid "Delete scc_account"
|
74
|
+
msgstr ""
|
75
|
+
|
76
|
+
#: ../app/controllers/api/v2/scc_accounts_controller.rb:62 ../app/controllers/api/v2/scc_accounts_controller.rb:63
|
77
|
+
msgid "Test connection for scc_account"
|
78
|
+
msgstr ""
|
79
|
+
|
80
|
+
#: ../app/controllers/api/v2/scc_accounts_controller.rb:90
|
81
|
+
msgid "Sync scc_account"
|
82
|
+
msgstr ""
|
83
|
+
|
84
|
+
#: ../app/controllers/api/v2/scc_accounts_controller.rb:104
|
85
|
+
msgid "Bulk subscription of scc_products for scc_account"
|
86
|
+
msgstr ""
|
87
|
+
|
88
|
+
#: ../app/controllers/api/v2/scc_products_controller.rb:15
|
89
|
+
msgid "List all products for scc_account"
|
90
|
+
msgstr ""
|
91
|
+
|
92
|
+
#: ../app/controllers/api/v2/scc_products_controller.rb:24
|
93
|
+
msgid "Show an scc_account product"
|
94
|
+
msgstr ""
|
95
|
+
|
96
|
+
#: ../app/controllers/api/v2/scc_products_controller.rb:29
|
97
|
+
msgid "Subscribe product"
|
98
|
+
msgstr ""
|
99
|
+
|
100
|
+
#: ../app/controllers/scc_accounts_controller.rb:71
|
101
|
+
msgid "Sync task started."
|
102
|
+
msgstr "Sync Job gestartet."
|
103
|
+
|
104
|
+
#: ../app/controllers/scc_accounts_controller.rb:73 ../app/controllers/scc_accounts_controller.rb:93
|
105
|
+
msgid "Failed to add task to queue: %s"
|
106
|
+
msgstr "Aufgabe konnte nicht in die Warteschlange gestellt werden: %s"
|
107
|
+
|
108
|
+
#: ../app/controllers/scc_accounts_controller.rb:75 ../app/controllers/scc_accounts_controller.rb:95
|
109
|
+
msgid "Lock on SCC account already taken: %s"
|
110
|
+
msgstr "Lock für SCC Zugang bereits vergeben: %s"
|
111
|
+
|
112
|
+
#: ../app/controllers/scc_accounts_controller.rb:88
|
113
|
+
msgid "Task to subscribe products started."
|
114
|
+
msgstr "Job zum abonnieren von Produkten gestartet."
|
115
|
+
|
116
|
+
#: ../app/controllers/scc_accounts_controller.rb:90
|
117
|
+
msgid "No products selected."
|
118
|
+
msgstr "Keine Produkte ausgewählt."
|
119
|
+
|
120
|
+
#: ../app/lib/actions/scc_manager/subscribe_product.rb:5
|
121
|
+
msgid "Product already subscribed!"
|
122
|
+
msgstr "Produkt wurde bereits abonniert!"
|
123
|
+
|
124
|
+
#: ../app/lib/actions/scc_manager/subscribe_product.rb:46 action_names.rb:5
|
125
|
+
msgid "Subscribe SCC Product"
|
126
|
+
msgstr "SCC Produkt abonnieren"
|
127
|
+
|
128
|
+
#: ../app/lib/actions/scc_manager/sync.rb:27 action_names.rb:4
|
129
|
+
msgid "Sync SUSE subscriptions"
|
130
|
+
msgstr "SUSE Abonnements synchronisieren"
|
131
|
+
|
132
|
+
#: ../app/lib/actions/scc_manager/sync_plan_account_repositories.rb:31
|
133
|
+
msgid "Update SUSE repositories %s"
|
134
|
+
msgstr "SUSE Repositorien %s aktualisieren"
|
135
|
+
|
136
|
+
#: ../app/lib/actions/scc_manager/sync_plan_account_repositories.rb:31
|
137
|
+
msgid "Unknown"
|
138
|
+
msgstr "Unbekannt"
|
139
|
+
|
140
|
+
#: ../app/lib/actions/scc_manager/sync_plan_account_repositories.rb:33 action_names.rb:9
|
141
|
+
msgid "Update SUSE repositories"
|
142
|
+
msgstr "SUSE Repositorien aktualisieren"
|
143
|
+
|
144
|
+
#: ../app/lib/actions/scc_manager/sync_products.rb:36 action_names.rb:3
|
145
|
+
msgid "Sync SUSE subscriptions (Products)"
|
146
|
+
msgstr "SUSE Abonnements (Produkte) synchronisieren"
|
147
|
+
|
148
|
+
#: ../app/lib/actions/scc_manager/sync_repositories.rb:34 action_names.rb:2
|
149
|
+
msgid "Sync SUSE subscriptions (Repositories)"
|
150
|
+
msgstr "SUSE Abonnements (Repositorien) synchronisieren"
|
151
|
+
|
152
|
+
#: ../app/models/scc_account.rb:62
|
153
|
+
msgid "never synced"
|
154
|
+
msgstr "Nie synchronisiert"
|
155
|
+
|
156
|
+
#: ../app/models/scc_account.rb:109
|
157
|
+
msgid "Interval cannot be nil"
|
158
|
+
msgstr "Intervall darf nicht Null sein"
|
159
|
+
|
160
|
+
#: ../app/models/scc_account.rb:116
|
161
|
+
msgid "Interval not set correctly"
|
162
|
+
msgstr "Intervall nicht richtig gesetzt"
|
163
|
+
|
164
|
+
#: ../app/models/scc_account.rb:121
|
165
|
+
msgid "Cron expression is not valid!"
|
166
|
+
msgstr "Cron-Ausdruck ungültig!"
|
167
|
+
|
168
|
+
#: ../app/models/scc_account_sync_plan_task_group.rb:5
|
169
|
+
msgid "SUSE Subscription"
|
170
|
+
msgstr "SUSE Abonnement"
|
171
|
+
|
172
|
+
#: ../app/views/scc_account_sync_plan_task_groups/_scc_account_sync_plan_task_groups.html.erb:1
|
173
|
+
msgid "SUSE Subscription: "
|
174
|
+
msgstr "SUSE Abonnement:"
|
175
|
+
|
176
|
+
#: ../app/views/scc_accounts/_form.html.erb:7
|
177
|
+
msgid "SUSE Customer Center account"
|
178
|
+
msgstr "SUSE Customer Center Konto"
|
179
|
+
|
180
|
+
#: ../app/views/scc_accounts/_form.html.erb:14
|
181
|
+
msgid "Use your 'Organization credentials' obtained from the SUSE Customer Center."
|
182
|
+
msgstr "Verwenden Sie die \"Organisationszugangsdaten\" aus dem SUSE Customer Center."
|
183
|
+
|
184
|
+
#: ../app/views/scc_accounts/_form.html.erb:16
|
185
|
+
msgid "Base URL"
|
186
|
+
msgstr "Basis URL"
|
187
|
+
|
188
|
+
#: ../app/views/scc_accounts/_form.html.erb:18
|
189
|
+
msgid "Sync interval"
|
190
|
+
msgstr ""
|
191
|
+
|
192
|
+
#: ../app/views/scc_accounts/_form.html.erb:18
|
193
|
+
msgid "The sync interval is used to periodically update the SCC authentication tokens of any imported products."
|
194
|
+
msgstr ""
|
195
|
+
|
196
|
+
#: ../app/views/scc_accounts/_form.html.erb:19
|
197
|
+
msgid "Sync Date"
|
198
|
+
msgstr "Synchronisationsdatum"
|
199
|
+
|
200
|
+
#: ../app/views/scc_accounts/_form.html.erb:23
|
201
|
+
msgid "None"
|
202
|
+
msgstr ""
|
203
|
+
|
204
|
+
#: ../app/views/scc_accounts/_form.html.erb:24
|
205
|
+
msgid "Use GPG key for SUSE products"
|
206
|
+
msgstr ""
|
207
|
+
|
208
|
+
#: ../app/views/scc_accounts/_form.html.erb:26
|
209
|
+
msgid "Use this setting if you want to automatically add a GPG key to your SUSE products upon subscription. You can change this setting in the 'Content' > 'Products' menu, later."
|
210
|
+
msgstr ""
|
211
|
+
|
212
|
+
#: ../app/views/scc_accounts/_form.html.erb:31
|
213
|
+
msgid "Test Connection"
|
214
|
+
msgstr "Verbindung testen"
|
215
|
+
|
216
|
+
#: ../app/views/scc_accounts/edit.html.erb:1
|
217
|
+
msgid "Edit %s"
|
218
|
+
msgstr "%s bearbeiten"
|
219
|
+
|
220
|
+
#: ../app/views/scc_accounts/index.html.erb:2
|
221
|
+
msgid "SUSE subscriptions"
|
222
|
+
msgstr "SUSE Abonnements"
|
223
|
+
|
224
|
+
#: ../app/views/scc_accounts/index.html.erb:3
|
225
|
+
msgid "Add SCC account"
|
226
|
+
msgstr "SCC Konto hinzufügen"
|
227
|
+
|
228
|
+
#: ../app/views/scc_accounts/index.html.erb:9
|
229
|
+
msgid "Products"
|
230
|
+
msgstr "Produkte"
|
231
|
+
|
232
|
+
#: ../app/views/scc_accounts/index.html.erb:10
|
233
|
+
msgid "Last synced"
|
234
|
+
msgstr "Letzte Synchronisation"
|
235
|
+
|
236
|
+
#: ../app/views/scc_accounts/index.html.erb:11
|
237
|
+
msgid "Actions"
|
238
|
+
msgstr "Aktionen"
|
239
|
+
|
240
|
+
#: ../app/views/scc_accounts/index.html.erb:24
|
241
|
+
msgid "Select products"
|
242
|
+
msgstr "Produkte auswählen"
|
243
|
+
|
244
|
+
#: ../app/views/scc_accounts/index.html.erb:25
|
245
|
+
msgid "Sync"
|
246
|
+
msgstr "Synchronisation"
|
247
|
+
|
248
|
+
#: ../app/views/scc_accounts/index.html.erb:28
|
249
|
+
msgid "Delete %s?"
|
250
|
+
msgstr "%s löschen?"
|
251
|
+
|
252
|
+
#: ../app/views/scc_accounts/new.html.erb:1
|
253
|
+
msgid "Add SUSE Customer Center Account"
|
254
|
+
msgstr "SUSE Customer Center Konto hinzufügen"
|
255
|
+
|
256
|
+
#: ../app/views/scc_accounts/show.html.erb:1
|
257
|
+
msgid "Product Selection for Account %s"
|
258
|
+
msgstr ""
|
259
|
+
|
260
|
+
#: ../app/views/scc_accounts/show.html.erb:17
|
261
|
+
msgid "(WARNING: Please check your SUSE subscription)"
|
262
|
+
msgstr ""
|
263
|
+
|
264
|
+
#: ../app/views/scc_accounts/show.html.erb:33
|
265
|
+
msgid "SUSE Customer Center"
|
266
|
+
msgstr "SUSE Customer Center"
|
267
|
+
|
268
|
+
#: ../app/views/scc_accounts/show.html.erb:44
|
269
|
+
msgid "Please sync your SUSE subscriptions first."
|
270
|
+
msgstr "Bitte synchronisieren Sie zuerst Ihre SUSE Abonnements."
|
271
|
+
|
272
|
+
#: ../lib/foreman_scc_manager/engine.rb:77
|
273
|
+
msgid "SUSE Subscriptions"
|
274
|
+
msgstr "SUSE Abonnements"
|
275
|
+
|
276
|
+
#: action_names.rb:6
|
277
|
+
msgid "Action with sub plans"
|
278
|
+
msgstr ""
|
279
|
+
|
280
|
+
#: action_names.rb:7
|
281
|
+
msgid "Import facts"
|
282
|
+
msgstr ""
|
283
|
+
|
284
|
+
#: action_names.rb:8
|
285
|
+
msgid "Import Puppet classes"
|
286
|
+
msgstr ""
|
287
|
+
|
288
|
+
#: action_names.rb:10
|
289
|
+
msgid "Abstract async task"
|
290
|
+
msgstr ""
|
291
|
+
|
292
|
+
#: action_names.rb:11
|
293
|
+
msgid "Export"
|
294
|
+
msgstr ""
|
295
|
+
|
296
|
+
#: action_names.rb:12
|
297
|
+
msgid "Import"
|
298
|
+
msgstr ""
|
299
|
+
|
300
|
+
#: action_names.rb:13
|
301
|
+
msgid "Copy version units to library"
|
302
|
+
msgstr ""
|
303
|
+
|
304
|
+
#: action_names.rb:14
|
305
|
+
msgid "Create"
|
306
|
+
msgstr ""
|
307
|
+
|
308
|
+
#: action_names.rb:15
|
309
|
+
msgid "Delete Activation Key"
|
310
|
+
msgstr ""
|
311
|
+
|
312
|
+
#: action_names.rb:16
|
313
|
+
msgid "Update"
|
314
|
+
msgstr ""
|
315
|
+
|
316
|
+
#: action_names.rb:17
|
317
|
+
msgid "Generate host applicability"
|
318
|
+
msgstr ""
|
319
|
+
|
320
|
+
#: action_names.rb:18
|
321
|
+
msgid "Bulk generate applicability for hosts"
|
322
|
+
msgstr ""
|
323
|
+
|
324
|
+
#: action_names.rb:19
|
325
|
+
msgid "Generate repository applicability"
|
326
|
+
msgstr ""
|
327
|
+
|
328
|
+
#: action_names.rb:20
|
329
|
+
msgid "Synchronize smart proxy"
|
330
|
+
msgstr ""
|
331
|
+
|
332
|
+
#: action_names.rb:21
|
333
|
+
msgid "Sync capsule"
|
334
|
+
msgstr ""
|
335
|
+
|
336
|
+
#: action_names.rb:22
|
337
|
+
msgid "Delete"
|
338
|
+
msgstr ""
|
339
|
+
|
340
|
+
#: action_names.rb:23
|
341
|
+
msgid "Errata mail"
|
342
|
+
msgstr ""
|
343
|
+
|
344
|
+
#: action_names.rb:24
|
345
|
+
msgid "Incremental Update of Content View Version(s) "
|
346
|
+
msgstr ""
|
347
|
+
|
348
|
+
#: action_names.rb:25
|
349
|
+
msgid "Promote"
|
350
|
+
msgstr ""
|
351
|
+
|
352
|
+
#: action_names.rb:26
|
353
|
+
msgid "Promotion to Environment"
|
354
|
+
msgstr ""
|
355
|
+
|
356
|
+
#: action_names.rb:27
|
357
|
+
msgid "Publish"
|
358
|
+
msgstr ""
|
359
|
+
|
360
|
+
#: action_names.rb:28
|
361
|
+
msgid "Remove Versions and Associations"
|
362
|
+
msgstr ""
|
363
|
+
|
364
|
+
#: action_names.rb:29
|
365
|
+
msgid "Remove from Environment"
|
366
|
+
msgstr ""
|
367
|
+
|
368
|
+
#: action_names.rb:30
|
369
|
+
msgid "Remove Version"
|
370
|
+
msgstr ""
|
371
|
+
|
372
|
+
#: action_names.rb:31
|
373
|
+
msgid "Auto attach subscriptions"
|
374
|
+
msgstr ""
|
375
|
+
|
376
|
+
#: action_names.rb:32
|
377
|
+
msgid "Destroy Content Host"
|
378
|
+
msgstr ""
|
379
|
+
|
380
|
+
#: action_names.rb:33
|
381
|
+
msgid "Install Applicable Errata"
|
382
|
+
msgstr ""
|
383
|
+
|
384
|
+
#: action_names.rb:34
|
385
|
+
msgid "Install erratum"
|
386
|
+
msgstr ""
|
387
|
+
|
388
|
+
#: action_names.rb:35
|
389
|
+
msgid "Hypervisors"
|
390
|
+
msgstr ""
|
391
|
+
|
392
|
+
#: action_names.rb:36
|
393
|
+
msgid "Import Content View Version"
|
394
|
+
msgstr ""
|
395
|
+
|
396
|
+
#: action_names.rb:37
|
397
|
+
msgid "Incremental Update"
|
398
|
+
msgstr ""
|
399
|
+
|
400
|
+
#: action_names.rb:38
|
401
|
+
msgid "Republish Version Repositories"
|
402
|
+
msgstr ""
|
403
|
+
|
404
|
+
#: action_names.rb:39
|
405
|
+
msgid "Delete Lifecycle Environment"
|
406
|
+
msgstr ""
|
407
|
+
|
408
|
+
#: action_names.rb:40
|
409
|
+
msgid "Publish Lifecycle Environment Repositories"
|
410
|
+
msgstr ""
|
411
|
+
|
412
|
+
#: action_names.rb:41
|
413
|
+
msgid "Attach subscriptions"
|
414
|
+
msgstr ""
|
415
|
+
|
416
|
+
#: action_names.rb:42
|
417
|
+
msgid "Remove subscriptions"
|
418
|
+
msgstr ""
|
419
|
+
|
420
|
+
#: action_names.rb:43
|
421
|
+
msgid "Update Content Overrides"
|
422
|
+
msgstr ""
|
423
|
+
|
424
|
+
#: action_names.rb:44
|
425
|
+
msgid "Hypervisors update"
|
426
|
+
msgstr ""
|
427
|
+
|
428
|
+
#: action_names.rb:45
|
429
|
+
msgid "Install package"
|
430
|
+
msgstr ""
|
431
|
+
|
432
|
+
#: action_names.rb:46
|
433
|
+
msgid "Remove package"
|
434
|
+
msgstr ""
|
435
|
+
|
436
|
+
#: action_names.rb:47
|
437
|
+
msgid "Update package"
|
438
|
+
msgstr ""
|
439
|
+
|
440
|
+
#: action_names.rb:48
|
441
|
+
msgid "Install package group"
|
442
|
+
msgstr ""
|
443
|
+
|
444
|
+
#: action_names.rb:49
|
445
|
+
msgid "Remove package group"
|
446
|
+
msgstr ""
|
447
|
+
|
448
|
+
#: action_names.rb:50
|
449
|
+
msgid "Updating System Purpose for host"
|
450
|
+
msgstr ""
|
451
|
+
|
452
|
+
#: action_names.rb:51
|
453
|
+
msgid "Package Profile Update"
|
454
|
+
msgstr ""
|
455
|
+
|
456
|
+
#: action_names.rb:52
|
457
|
+
msgid "Update for host"
|
458
|
+
msgstr ""
|
459
|
+
|
460
|
+
#: action_names.rb:53
|
461
|
+
msgid "Update release version for host"
|
462
|
+
msgstr ""
|
463
|
+
|
464
|
+
#: action_names.rb:54
|
465
|
+
msgid "Combined Profile Update"
|
466
|
+
msgstr ""
|
467
|
+
|
468
|
+
#: action_names.rb:55
|
469
|
+
msgid "Destroy"
|
470
|
+
msgstr ""
|
471
|
+
|
472
|
+
#: action_names.rb:56
|
473
|
+
msgid "Run Sync Plan:"
|
474
|
+
msgstr ""
|
475
|
+
|
476
|
+
#: action_names.rb:57
|
477
|
+
msgid "Product Create"
|
478
|
+
msgstr ""
|
479
|
+
|
480
|
+
#: action_names.rb:58
|
481
|
+
msgid "Disable"
|
482
|
+
msgstr ""
|
483
|
+
|
484
|
+
#: action_names.rb:59
|
485
|
+
msgid "Delete Product"
|
486
|
+
msgstr ""
|
487
|
+
|
488
|
+
#: action_names.rb:60
|
489
|
+
msgid "Enable"
|
490
|
+
msgstr ""
|
491
|
+
|
492
|
+
#: action_names.rb:61
|
493
|
+
msgid "Create Package Group"
|
494
|
+
msgstr ""
|
495
|
+
|
496
|
+
#: action_names.rb:62
|
497
|
+
msgid "Reindex subscriptions"
|
498
|
+
msgstr ""
|
499
|
+
|
500
|
+
#: action_names.rb:63
|
501
|
+
msgid "Verify checksum"
|
502
|
+
msgstr ""
|
503
|
+
|
504
|
+
#: action_names.rb:64
|
505
|
+
msgid "Upload into"
|
506
|
+
msgstr ""
|
507
|
+
|
508
|
+
#: action_names.rb:65
|
509
|
+
msgid "Upload errata into"
|
510
|
+
msgstr ""
|
511
|
+
|
512
|
+
#: action_names.rb:66
|
513
|
+
msgid "Update http proxy"
|
514
|
+
msgstr ""
|
515
|
+
|
516
|
+
#: action_names.rb:67
|
517
|
+
msgid "Update redhat repository"
|
518
|
+
msgstr ""
|
519
|
+
|
520
|
+
#: action_names.rb:68
|
521
|
+
msgid "Update http proxy details"
|
522
|
+
msgstr ""
|
523
|
+
|
524
|
+
#: action_names.rb:69
|
525
|
+
msgid "Update content urls"
|
526
|
+
msgstr ""
|
527
|
+
|
528
|
+
#: action_names.rb:70
|
529
|
+
msgid "Synchronize"
|
530
|
+
msgstr ""
|
531
|
+
|
532
|
+
#: action_names.rb:71
|
533
|
+
msgid "Remove Content"
|
534
|
+
msgstr ""
|
535
|
+
|
536
|
+
#: action_names.rb:72
|
537
|
+
msgid "Delete Package Group"
|
538
|
+
msgstr ""
|
539
|
+
|
540
|
+
#: action_names.rb:73
|
541
|
+
msgid "Discover"
|
542
|
+
msgstr ""
|
543
|
+
|
544
|
+
#: action_names.rb:74
|
545
|
+
msgid "Instance update"
|
546
|
+
msgstr ""
|
547
|
+
|
548
|
+
#: action_names.rb:75
|
549
|
+
msgid "Fetch pxe files"
|
550
|
+
msgstr ""
|
551
|
+
|
552
|
+
#: action_names.rb:76
|
553
|
+
msgid "Index module streams"
|
554
|
+
msgstr ""
|
555
|
+
|
556
|
+
#: action_names.rb:77
|
557
|
+
msgid "Index package groups"
|
558
|
+
msgstr ""
|
559
|
+
|
560
|
+
#: action_names.rb:78
|
561
|
+
msgid "Filtered index content"
|
562
|
+
msgstr ""
|
563
|
+
|
564
|
+
#: action_names.rb:79
|
565
|
+
msgid "Index errata"
|
566
|
+
msgstr ""
|
567
|
+
|
568
|
+
#: action_names.rb:80
|
569
|
+
msgid "Index content"
|
570
|
+
msgstr ""
|
571
|
+
|
572
|
+
#: gemspec.rb:2
|
573
|
+
msgid "Foreman plugin to sync SUSE Customer Center products and repositories into Katello."
|
574
|
+
msgstr "Foreman Plugin um SUSE Customer Center Produkte und Repositorien in Katello zu importieren."
|