foreman_scc_manager 1.8.2 → 1.8.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +5 -0
  3. data/app/controllers/api/v2/scc_accounts_controller.rb +9 -7
  4. data/app/controllers/scc_accounts_controller.rb +30 -4
  5. data/app/lib/actions/scc_manager/subscribe_product.rb +26 -13
  6. data/app/lib/actions/scc_manager/sync.rb +5 -5
  7. data/app/lib/actions/scc_manager/sync_products.rb +10 -11
  8. data/app/lib/actions/scc_manager/sync_repositories.rb +9 -11
  9. data/app/lib/scc_manager.rb +2 -2
  10. data/app/models/scc_account.rb +70 -11
  11. data/app/models/scc_product.rb +20 -2
  12. data/app/models/scc_repository.rb +11 -9
  13. data/app/views/scc_accounts/_form.html.erb +6 -0
  14. data/app/views/scc_accounts/index.html.erb +4 -3
  15. data/app/views/scc_accounts/show.html.erb +13 -4
  16. data/db/migrate/20200520281300_fix_scc_permissions.rb +22 -0
  17. data/db/migrate/20201119084201_add_gpg_key_to_scc_account.rb +6 -0
  18. data/db/migrate/20210205082733_add_subscription_valid_to_scc_products_and_repos.rb +6 -0
  19. data/db/migrate/20210210104407_add_root_repository_id_to_scc_repository.rb +6 -0
  20. data/db/migrate/20210224095050_connect_katello_root_repository_to_scc_repository.rb +17 -0
  21. data/lib/foreman_scc_manager/engine.rb +36 -25
  22. data/lib/foreman_scc_manager/version.rb +1 -1
  23. data/lib/tasks/test.rake +1 -1
  24. data/locale/de/LC_MESSAGES/foreman_scc_manager.mo +0 -0
  25. data/locale/de/foreman_scc_manager.edit.po +574 -0
  26. data/locale/de/foreman_scc_manager.po +40 -21
  27. data/locale/de/foreman_scc_manager.po.time_stamp +0 -0
  28. data/locale/en/foreman_scc_manager.edit.po +566 -0
  29. data/locale/en/foreman_scc_manager.po +21 -3
  30. data/locale/en/foreman_scc_manager.po.time_stamp +0 -0
  31. data/locale/foreman_scc_manager.pot +65 -38
  32. data/test/controllers/api/v2/scc_accounts_test.rb +9 -3
  33. data/test/controllers/scc_accounts_controller_test.rb +104 -0
  34. data/test/controllers/scc_accounts_controller_test2.rb +51 -0
  35. data/test/fixtures/models/scc_extendings.yml +6 -0
  36. data/test/fixtures/models/scc_products.yml +30 -2
  37. data/test/fixtures/models/scc_repositories.yml +29 -0
  38. data/test/models/scc_account_test.rb +70 -0
  39. data/test/models/scc_product_test.rb +69 -1
  40. data/test/support/fixtures_support.rb +3 -2
  41. data/test/test_controller_helper.rb +15 -0
  42. data/test/test_plugin_helper.rb +9 -0
  43. metadata +33 -14
@@ -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 = uniq_name
33
- new_product.description = 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.uniq_name + ' ' + description
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
- scc_products.where.not(product: nil).find_each do |sp|
21
- reponame = uniq_name(sp)
22
- repository = sp.product.root_repositories.find_by(name: reponame)
23
- unless repository.nil? || repository.url == full_url
24
- ::Foreman::Logging.logger('foreman_scc_manager').info "Update URL-token for repository '#{reponame}'."
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.scc_products.count.to_s %></td>
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.order(:friendly_name).each do |scc_extension| %>
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.where(product_type: 'base').order(:friendly_name).each do |scc_product| %>
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 AddGpgKeyToSccAccount < ActiveRecord::Migration[5.2]
2
+ def change
3
+ add_column :scc_accounts, :katello_gpg_key_id, :integer, null: true
4
+ add_foreign_key :scc_accounts, :katello_gpg_keys, column: :katello_gpg_key_id, on_delete: :nullify
5
+ end
6
+ end
@@ -0,0 +1,6 @@
1
+ class AddSubscriptionValidToSccProductsAndRepos < ActiveRecord::Migration[5.2]
2
+ def change
3
+ add_column :scc_products, :subscription_valid, :boolean, null: true
4
+ add_column :scc_repositories, :subscription_valid, :boolean, null: true
5
+ end
6
+ 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,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
@@ -29,37 +29,48 @@ module ForemanSccManager
29
29
 
30
30
  # Add permissions
31
31
  security_block :foreman_scc_manager do
32
- permission :view_scc, {
33
- :'foreman_scc_manager/scc_accounts' => [:show, :index],
34
- :'api/v2/scc_accounts' => [:show, :index]
35
- }
36
- permission :use_scc, {
37
- :'foreman_scc_manager/scc_accounts' => [:bulk_subscribe],
38
- :'api/v2/scc_accounts' => [:bulk_subscribe]
39
- }
40
- permission :new_scc, {
41
- :'foreman_scc_manager/scc_accounts' => [:new, :create],
42
- :'api/v2/scc_accounts' => [:create]
43
- }
44
- permission :edit_scc, {
45
- :'foreman_scc_manager/scc_accounts' => [:edit, :update],
46
- :'api/v2/scc_accounts' => [:update]
47
- }
48
- permission :delete_scc, {
49
- :'foreman_scc_manager/scc_accounts' => [:destroy],
50
- :'api/v2/scc_accounts' => [:destroy]
51
- }
52
- permission :sync_scc, {
53
- :'foreman_scc_manager/scc_accounts' => [:sync],
54
- :'api/v2/scc_accounts' => [:sync]
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[view_scc use_scc new_scc edit_scc delete_scc sync_scc],
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 },
@@ -1,3 +1,3 @@
1
1
  module ForemanSccManager
2
- VERSION = '1.8.2'.freeze
2
+ VERSION = '1.8.7'.freeze
3
3
  end
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
@@ -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."