foreman_scc_manager 1.8.3 → 1.8.8
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/README.md +5 -0
- data/app/controllers/api/v2/scc_accounts_controller.rb +9 -7
- data/app/controllers/scc_accounts_controller.rb +30 -4
- data/app/lib/actions/scc_manager/subscribe_product.rb +26 -13
- 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 +63 -5
- data/app/models/scc_product.rb +20 -2
- data/app/models/scc_repository.rb +11 -9
- data/app/views/scc_accounts/_form.html.erb +6 -0
- data/app/views/scc_accounts/index.html.erb +4 -3
- data/app/views/scc_accounts/show.html.erb +13 -4
- data/db/migrate/20200520281300_fix_scc_permissions.rb +22 -0
- data/db/migrate/20201119084201_add_gpg_key_to_scc_account.rb +6 -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 +28 -0
- data/lib/foreman_scc_manager/engine.rb +36 -25
- data/lib/foreman_scc_manager/version.rb +1 -1
- data/lib/tasks/test.rake +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 +65 -38
- data/test/controllers/api/v2/scc_accounts_test.rb +9 -3
- data/test/controllers/scc_accounts_controller_test.rb +104 -0
- data/test/controllers/scc_accounts_controller_test2.rb +51 -0
- data/test/fixtures/models/scc_extendings.yml +6 -0
- data/test/fixtures/models/scc_products.yml +30 -2
- data/test/fixtures/models/scc_repositories.yml +29 -0
- data/test/models/scc_account_test.rb +70 -0
- data/test/models/scc_product_test.rb +69 -1
- data/test/support/fixtures_support.rb +3 -2
- data/test/test_controller_helper.rb +15 -0
- data/test/test_plugin_helper.rb +9 -0
- metadata +33 -14
data/app/models/scc_product.rb
CHANGED
@@ -2,6 +2,8 @@ class SccProduct < ApplicationRecord
|
|
2
2
|
include Authorizable
|
3
3
|
include ForemanTasks::Concerns::ActionSubject
|
4
4
|
|
5
|
+
scope :only_products_with_repos, -> { joins(:scc_repositories).distinct }
|
6
|
+
|
5
7
|
self.include_root_in_json = false
|
6
8
|
|
7
9
|
belongs_to :scc_account
|
@@ -25,12 +27,28 @@ class SccProduct < ApplicationRecord
|
|
25
27
|
"#{scc_id} " + friendly_name
|
26
28
|
end
|
27
29
|
|
30
|
+
def pretty_name
|
31
|
+
friendly_name + " (id: #{scc_id})"
|
32
|
+
end
|
33
|
+
|
34
|
+
# Remove HTML tags (currently assumed that there are only paragraph tags)
|
35
|
+
# Remove second HTML paragraph if available
|
36
|
+
def pretty_description
|
37
|
+
new_description = Nokogiri::XML(description).xpath('//p')
|
38
|
+
# No tags to remove
|
39
|
+
if new_description.count == 0
|
40
|
+
description
|
41
|
+
else
|
42
|
+
new_description.first.children.first.text.strip
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
28
46
|
def subscribe
|
29
47
|
raise 'Product already subscribed!' if product
|
30
48
|
|
31
49
|
new_product = Katello::Product.new
|
32
|
-
new_product.name =
|
33
|
-
new_product.description =
|
50
|
+
new_product.name = pretty_name
|
51
|
+
new_product.description = pretty_description
|
34
52
|
ForemanTasks.sync_task(::Actions::Katello::Product::Create, new_product, scc_account.organization)
|
35
53
|
new_product.reload
|
36
54
|
scc_repositories.each do |repo|
|
@@ -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,18 +13,19 @@ 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
|
17
|
+
end
|
18
|
+
|
19
|
+
def pretty_name
|
20
|
+
description
|
16
21
|
end
|
17
22
|
|
18
23
|
def token_changed_callback
|
19
24
|
User.current ||= User.anonymous_admin
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
ForemanTasks.async_task(::Actions::Katello::Repository::Update, repository, url: full_url)
|
26
|
-
end
|
27
|
-
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)
|
28
30
|
end
|
29
31
|
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
<!-- see foreman/app/helper/form_helper.rb -->
|
1
2
|
<% javascript 'foreman_scc_manager/scc_accounts' %>
|
2
3
|
|
3
4
|
<%= form_for(@scc_account) do |f| %>
|
@@ -18,6 +19,11 @@
|
|
18
19
|
<%= field f, :sync_date, label: _('Sync Date') do
|
19
20
|
f.datetime_field :sync_date, placeholder: Time.now
|
20
21
|
end %>
|
22
|
+
<%= selectable_f f, :katello_gpg_key_id, @selectable_gpg_keys, {},
|
23
|
+
{ :include_blank => _("None"),
|
24
|
+
:label => _('Use GPG key for SUSE products'),
|
25
|
+
:selected => @scc_account.katello_gpg_key_id,
|
26
|
+
:help_block => _("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.") } %>
|
21
27
|
<div class='clearfix'>
|
22
28
|
<div class='form-group'>
|
23
29
|
<div class='col-md-2'></div>
|
@@ -17,15 +17,16 @@
|
|
17
17
|
<td class="display-two-pane ellipsis">
|
18
18
|
<%= link_to_if_authorized(scc_account.name, hash_for_edit_scc_account_path(:id => scc_account).merge(:auth_object => scc_account, :authorizer => authorizer)) %>
|
19
19
|
</td>
|
20
|
-
<td><%= scc_account.
|
20
|
+
<td><%= scc_account.scc_products_with_repos_count.to_s %></td>
|
21
21
|
<td><%= link_to_if(scc_account.sync_task, scc_account.sync_status, scc_account.sync_task) %></td>
|
22
22
|
<td>
|
23
23
|
<%= action_buttons(
|
24
|
-
display_link_if_authorized(_("Select products"), hash_for_scc_account_path(:id => scc_account).merge(:auth_object => scc_account, :authorizer => authorizer)),
|
24
|
+
display_link_if_authorized(_("Select products"), hash_for_scc_account_path(:id => scc_account).merge(:auth_object => scc_account, :authorizer => authorizer, :permission => 'view_scc_accounts')),
|
25
25
|
display_link_if_authorized(_("Sync"), hash_for_sync_scc_account_path(:id => scc_account).merge(:auth_object => scc_account, :authorizer => authorizer),
|
26
26
|
:method => :put),
|
27
|
-
display_delete_if_authorized(hash_for_scc_account_path(:id => scc_account).merge(:auth_object => scc_account, :authorizer => authorizer),
|
27
|
+
display_delete_if_authorized(hash_for_scc_account_path(:id => scc_account).merge(:auth_object => scc_account, :authorizer => authorizer, :permission => 'delete_scc_accounts'),
|
28
28
|
:data => { :confirm => _("Delete %s?") % scc_account.to_s })
|
29
|
+
|
29
30
|
) %>
|
30
31
|
</td>
|
31
32
|
</tr>
|
@@ -1,3 +1,5 @@
|
|
1
|
+
<% title (_("Product Selection for Account %s") % @scc_account) %>
|
2
|
+
|
1
3
|
<% javascript 'foreman_scc_manager/scc_accounts' %>
|
2
4
|
<%= form_for([:bulk_subscribe, @scc_account], method: :put) do |f| %>
|
3
5
|
<% def render_list_node(f, scc_product, parent_id = "") %>
|
@@ -5,14 +7,20 @@
|
|
5
7
|
<span class="scc_product_checkbox" id="<%= "scc_product_span_#{parent_id + "_" + scc_product.id.to_s}" %>" <%= "data-parent=scc_product_span_#{parent_id}" if parent_id != "" %>>
|
6
8
|
<% if scc_product.product %>
|
7
9
|
<%= check_box_tag("scc_account[scc_unsubscribe_product_ids][]", scc_product.id, true, disabled: true) %>
|
10
|
+
<%= link_to(scc_product.pretty_name, "/products/#{scc_product.product_id}") %>
|
8
11
|
<% else %>
|
9
12
|
<%= check_box_tag("scc_account[scc_subscribe_product_ids][]", scc_product.id, false) %>
|
13
|
+
<%= scc_product.pretty_name %>
|
14
|
+
<% end %>
|
15
|
+
<% unless scc_product.subscription_valid? %>
|
16
|
+
<span style="color:red">
|
17
|
+
<%= _('(WARNING: Please check your SUSE subscription)') %>
|
18
|
+
</span>
|
10
19
|
<% end %>
|
11
20
|
</span>
|
12
|
-
<%= scc_product.friendly_name %>
|
13
21
|
<% if scc_product.scc_extensions.any? %>
|
14
|
-
<ul>
|
15
|
-
<% scc_product.scc_extensions
|
22
|
+
<ul style='padding-left: 20px;'>
|
23
|
+
<% scc_filtered_products(scc_product.scc_extensions, 'extension').each do |scc_extension| %>
|
16
24
|
<% render_list_node(f, scc_extension, parent_id + "_" + scc_product.id.to_s) %>
|
17
25
|
<% end %>
|
18
26
|
</ul>
|
@@ -29,7 +37,7 @@
|
|
29
37
|
<div class="tab-pane active" id="primary">
|
30
38
|
<ul>
|
31
39
|
<% if @scc_account.synced %>
|
32
|
-
<% @scc_account.scc_products
|
40
|
+
<% scc_filtered_products(@scc_account.scc_products).each do |scc_product| %>
|
33
41
|
<% render_list_node(f, scc_product) %>
|
34
42
|
<% end %>
|
35
43
|
<% else %>
|
@@ -41,3 +49,4 @@
|
|
41
49
|
<%= submit_or_cancel f, false, {disabled: submit_disabled || false} %>
|
42
50
|
</div>
|
43
51
|
<% end %>
|
52
|
+
|
@@ -0,0 +1,22 @@
|
|
1
|
+
class FixSccPermissions < ActiveRecord::Migration[5.2]
|
2
|
+
PERMISSION_NAMES = {
|
3
|
+
:view_scc => :view_scc_accounts,
|
4
|
+
:use_scc => :use_scc_accounts,
|
5
|
+
:new_scc => :new_scc_accounts,
|
6
|
+
:edit_scc => :edit_scc_accounts,
|
7
|
+
:delete_scc => :delete_scc_accounts,
|
8
|
+
:sync_scc => :sync_scc_accounts
|
9
|
+
}.freeze
|
10
|
+
|
11
|
+
def up
|
12
|
+
PERMISSION_NAMES.each do |old_n, new_n|
|
13
|
+
Permission.find_by(name: old_n)&.update(name: new_n, resource_type: 'SccAccount')
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def down
|
18
|
+
PERMISSION_NAMES.each do |old_n, new_n|
|
19
|
+
Permission.find_by(name: new_n)&.update(name: old_n, resource_type: nil)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -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,28 @@
|
|
1
|
+
class ConnectKatelloRootRepositoryToSccRepository < ActiveRecord::Migration[5.2]
|
2
|
+
# add SccRepository class, because original one triggers the token_changed_callback
|
3
|
+
# which tried to update Katello root repositories
|
4
|
+
class SccRepository < ApplicationRecord
|
5
|
+
belongs_to :katello_root_repository, class_name: 'Katello::RootRepository'
|
6
|
+
end
|
7
|
+
|
8
|
+
class SccProduct < ApplicationRecord
|
9
|
+
belongs_to :product, class_name: 'Katello::Product'
|
10
|
+
has_and_belongs_to_many :scc_repositories
|
11
|
+
end
|
12
|
+
|
13
|
+
def up
|
14
|
+
SccProduct.where.not(product_id: nil).each do |scc_p|
|
15
|
+
# extract all katello root repository ids from subscribed products
|
16
|
+
katello_root_repositories = scc_p.product.root_repositories.map { |r| [r.label, r.id] }.to_h
|
17
|
+
# match scc repository and katello repository names
|
18
|
+
# katello repository name can be
|
19
|
+
# 1) equal to scc repo name
|
20
|
+
# 2) equal to scc product id + scc product name + scc repo name
|
21
|
+
scc_p.scc_repositories.each do |scc_r|
|
22
|
+
katello_root_repositories.each do |katello_label, katello_id|
|
23
|
+
scc_r.update!(katello_root_repository_id: katello_id) if katello_label.end_with?(::Katello::Util::Model.labelize(scc_r.name))
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -29,37 +29,48 @@ module ForemanSccManager
|
|
29
29
|
|
30
30
|
# Add permissions
|
31
31
|
security_block :foreman_scc_manager do
|
32
|
-
permission :
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
permission :
|
53
|
-
|
54
|
-
|
55
|
-
|
32
|
+
permission :view_scc_accounts,
|
33
|
+
{ :scc_accounts => [:show, :index],
|
34
|
+
:'api/v2/scc_accounts' => [:show, :index] },
|
35
|
+
:resource_type => 'SccAccount'
|
36
|
+
|
37
|
+
permission :use_scc_accounts,
|
38
|
+
{ :scc_accounts => [:bulk_subscribe],
|
39
|
+
:'api/v2/scc_accounts' => [:bulk_subscribe] },
|
40
|
+
:resource_type => 'SccAccount'
|
41
|
+
|
42
|
+
permission :new_scc_accounts,
|
43
|
+
{ :scc_accounts => [:new, :create],
|
44
|
+
:'api/v2/scc_accounts' => [:create] },
|
45
|
+
:resource_type => 'SccAccount'
|
46
|
+
|
47
|
+
permission :edit_scc_accounts,
|
48
|
+
{ :scc_accounts => [:edit, :update],
|
49
|
+
:'api/v2/scc_accounts' => [:update] },
|
50
|
+
:resource_type => 'SccAccount'
|
51
|
+
|
52
|
+
permission :delete_scc_accounts,
|
53
|
+
{ :scc_accounts => [:destroy],
|
54
|
+
:'api/v2/scc_accounts' => [:destroy] },
|
55
|
+
:resource_type => 'SccAccount'
|
56
|
+
|
57
|
+
permission :sync_scc_accounts,
|
58
|
+
{ :scc_accounts => [:sync],
|
59
|
+
:'api/v2/scc_accounts' => [:sync] },
|
60
|
+
:resource_type => 'SccAccount'
|
56
61
|
end
|
57
62
|
|
58
63
|
# Add a new role called 'SccManager' if it doesn't exist
|
59
64
|
role 'SccManager',
|
60
|
-
%i[
|
65
|
+
%i[view_scc_accounts use_scc_accounts new_scc_accounts edit_scc_accounts delete_scc_accounts sync_scc_accounts],
|
61
66
|
'Role granting permissons to manage SUSE Subscriptions'
|
62
67
|
|
68
|
+
role 'SccViewer',
|
69
|
+
%i[view_scc_accounts use_scc_accounts sync_scc_accounts create_products view_products],
|
70
|
+
'Role granting permissons to view and use SUSE Subscriptions'
|
71
|
+
|
72
|
+
add_all_permissions_to_default_roles
|
73
|
+
|
63
74
|
# add menu entry
|
64
75
|
menu :top_menu, :scc_manager,
|
65
76
|
url_hash: { controller: :scc_accounts, action: :index },
|
data/lib/tasks/test.rake
CHANGED
@@ -14,7 +14,7 @@ end
|
|
14
14
|
|
15
15
|
namespace :jenkins do
|
16
16
|
desc 'Test ForemanSccManager with XML output for jenkins'
|
17
|
-
task 'foreman_scc_manager' do
|
17
|
+
task 'foreman_scc_manager' => :environment do
|
18
18
|
Rake::Task['jenkins:setup:minitest'].invoke
|
19
19
|
Rake::Task['rake:test:foreman_scc_manager'].invoke
|
20
20
|
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."
|