foreman_snapshot_management 1.7.1 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (55) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +3 -1
  3. data/Rakefile +7 -2
  4. data/app/controllers/api/v2/snapshots_controller.rb +22 -6
  5. data/app/models/foreman_snapshot_management/proxmox_extensions.rb +1 -1
  6. data/app/models/foreman_snapshot_management/snapshot.rb +4 -0
  7. data/app/views/api/v2/snapshots/base.json.rabl +2 -0
  8. data/app/views/foreman_snapshot_management/snapshots/_index.html.erb +12 -80
  9. data/app/views/hosts/_snapshots_tab.html.erb +8 -0
  10. data/lib/foreman_snapshot_management/engine.rb +22 -21
  11. data/lib/foreman_snapshot_management/version.rb +1 -1
  12. data/lib/tasks/foreman_snapshot_management_tasks.rake +2 -2
  13. data/locale/de/LC_MESSAGES/foreman_snapshot_management.mo +0 -0
  14. data/locale/de/foreman_snapshot_management.po +52 -19
  15. data/locale/en/LC_MESSAGES/foreman_snapshot_management.mo +0 -0
  16. data/locale/en/foreman_snapshot_management.po +44 -11
  17. data/locale/foreman_snapshot_management.pot +87 -25
  18. data/package.json +46 -0
  19. data/test/controllers/api/v2/snapshots_test.rb +232 -109
  20. data/test/controllers/foreman_snapshot_management/snapshots_controller_test.rb +1 -1
  21. data/test/factories/proxmox_factory.rb +1 -1
  22. data/webpack/components/SnapshotManagement/SnapshotManagement.js +84 -0
  23. data/webpack/components/SnapshotManagement/SnapshotManagementActions.js +212 -0
  24. data/webpack/components/SnapshotManagement/SnapshotManagementConstants.js +9 -0
  25. data/webpack/components/SnapshotManagement/SnapshotManagementReducer.js +100 -0
  26. data/webpack/components/SnapshotManagement/SnapshotManagementSelectors.js +8 -0
  27. data/webpack/components/SnapshotManagement/__tests__/SnapshotManagementActions.test.js +123 -0
  28. data/webpack/components/SnapshotManagement/__tests__/SnapshotManagementReducer.test.js +157 -0
  29. data/webpack/components/SnapshotManagement/__tests__/__snapshots__/SnapshotManagementActions.test.js.snap +314 -0
  30. data/webpack/components/SnapshotManagement/__tests__/__snapshots__/SnapshotManagementReducer.test.js.snap +214 -0
  31. data/webpack/components/SnapshotManagement/components/SnapshotForm/SnapshotForm.js +118 -0
  32. data/webpack/components/SnapshotManagement/components/SnapshotForm/SnapshotFormConstants.js +5 -0
  33. data/webpack/components/SnapshotManagement/components/SnapshotForm/__tests__/SnapshotForm.test.js +26 -0
  34. data/webpack/components/SnapshotManagement/components/SnapshotForm/__tests__/__snapshots__/SnapshotForm.test.js.snap +476 -0
  35. data/webpack/components/SnapshotManagement/components/SnapshotForm/index.js +19 -0
  36. data/webpack/components/SnapshotManagement/components/SnapshotForm/snapshotForm.scss +3 -0
  37. data/webpack/components/SnapshotManagement/components/SnapshotFormModal/SnapshotFormModal.js +37 -0
  38. data/webpack/components/SnapshotManagement/components/SnapshotFormModal/SnapshotFormModalConstants.js +1 -0
  39. data/webpack/components/SnapshotManagement/components/SnapshotFormModal/__tests__/SnapshotFormModal.test.js +19 -0
  40. data/webpack/components/SnapshotManagement/components/SnapshotFormModal/__tests__/__snapshots__/SnapshotFormModal.test.js.snap +19 -0
  41. data/webpack/components/SnapshotManagement/components/SnapshotFormModal/index.js +12 -0
  42. data/webpack/components/SnapshotManagement/components/SnapshotFormModal/useSnapshotFormModal.js +7 -0
  43. data/webpack/components/SnapshotManagement/components/SnapshotList/SnapshotList.js +314 -0
  44. data/webpack/components/SnapshotManagement/components/SnapshotList/SnapshotListHelper.js +70 -0
  45. data/webpack/components/SnapshotManagement/components/SnapshotList/__tests__/SnapshotList.test.js +88 -0
  46. data/webpack/components/SnapshotManagement/components/SnapshotList/__tests__/__snapshots__/SnapshotList.test.js.snap +1081 -0
  47. data/webpack/components/SnapshotManagement/components/SnapshotList/snapshotList.scss +13 -0
  48. data/webpack/components/SnapshotManagement/index.js +33 -0
  49. data/webpack/components/SnapshotManagement/snapshotManagement.scss +5 -0
  50. data/webpack/global_index.js +7 -0
  51. data/webpack/global_test_setup.js +11 -0
  52. data/webpack/index.js +8 -0
  53. data/webpack/reducers.js +7 -0
  54. data/webpack/test_setup.js +17 -0
  55. metadata +39 -33
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c9efa1f527f44cb80179813e24eef241905760743d411098da6627d6ee8975c2
4
- data.tar.gz: 569d6387f7a18d74b7f3bdd916de43aefb91d9938618cba15763a9b18e9e08ae
3
+ metadata.gz: b21ddce3f89248da10faf11e3c9ed617c68b9500be5ef2f0a4557462e670912c
4
+ data.tar.gz: e345def34460802d4491dded6341ff0089c733cbeb1ce7b925e321f0c8be8caf
5
5
  SHA512:
6
- metadata.gz: 7b04015470b2427bc450c69c5e008a33250c2decdebc45a52a7a092f221c34a38d1dd184da7938a400491332b97ac393e79e3fb502c2e0ff82de9ea19b1718a7
7
- data.tar.gz: 70a2bca8aea94deda793f1434c7935587ea43beb983db1c9a3e583fee84d5bc73f3d61f2eaa44a83bf19e3d02f3725697b6c4dd84a861a582c439814fd37128e
6
+ metadata.gz: 70868762e401d992c5aeeda419491ccbe294f57c20bd87c4eab30c9bb7299da128f6f50a8ab640fcf83058fd62018c1aecd851ccde34b372656fb72b40e3179e
7
+ data.tar.gz: 2542bb32f1efb8ba220b8a63342313e73994990336252529a5496dc3f95dd8e5c8e41da322042042b617bb8f46bd213141821d94ea1cbfc19fdbd0c7b3210de1
data/README.md CHANGED
@@ -1,4 +1,5 @@
1
- [![Build Status](https://travis-ci.org/ATIX-AG/foreman_snapshot_management.svg?branch=master)](https://travis-ci.org/ATIX-AG/foreman_snapshot_management)
1
+ [![React Testing](https://github.com/ATIX-AG/foreman_snapshot_management/actions/workflows/react.yml/badge.svg)](https://github.com/ATIX-AG/foreman_snapshot_management/actions/workflows/react.yml)
2
+ [![Ruby Testing](https://github.com/ATIX-AG/foreman_snapshot_management/actions/workflows/ruby.yml/badge.svg)](https://github.com/ATIX-AG/foreman_snapshot_management/actions/workflows/ruby.yml)
2
3
 
3
4
  # ForemanSnapshotManagement
4
5
 
@@ -22,6 +23,7 @@ See [How_to_Install_a_Plugin](http://projects.theforeman.org/projects/foreman/wi
22
23
 
23
24
  | Foreman Version | Plugin Version |
24
25
  | --------------- | -------------- |
26
+ | 2.3 | >= 2.0.0 |
25
27
  | 1.24 | >= 1.7.0 |
26
28
  | 1.23 | >= 1.7.0 |
27
29
  | 1.22 | >= 1.6.0 |
data/Rakefile CHANGED
@@ -14,6 +14,13 @@ rescue LoadError
14
14
  RDoc::Task = Rake::RDocTask
15
15
  end
16
16
 
17
+ begin
18
+ require 'rubocop/rake_task'
19
+ RuboCop::RakeTask.new
20
+ rescue StandardError => _e
21
+ puts 'Rubocop not loaded.'
22
+ end
23
+
17
24
  RDoc::Task.new(:rdoc) do |rdoc|
18
25
  rdoc.rdoc_dir = 'rdoc'
19
26
  rdoc.title = 'ForemanSnapshotManagement'
@@ -22,6 +29,4 @@ RDoc::Task.new(:rdoc) do |rdoc|
22
29
  rdoc.rdoc_files.include('lib/**/*.rb')
23
30
  end
24
31
 
25
- APP_RAKEFILE = File.expand_path('test/dummy/Rakefile', __dir__)
26
-
27
32
  Bundler::GemHelper.install_tasks
@@ -6,7 +6,7 @@ module Api
6
6
  include Api::Version2
7
7
  include Foreman::Controller::Parameters::Snapshot
8
8
 
9
- before_action :find_required_nested_object
9
+ before_action :find_host
10
10
  before_action :check_snapshot_capability
11
11
  before_action :find_resource, :only => %w[show update destroy revert]
12
12
 
@@ -19,7 +19,7 @@ module Api
19
19
  search = params[:search].match(/^\s*name\s*=\s*(\w+)\s*$/) || params[:search].match(/^\s*name\s*=\s*\"([^"]+)\"\s*$/)
20
20
  raise "Field '#{params[:search]}' not recognized for searching!" unless search
21
21
 
22
- snapshot = resource_class.find_for_host_by_name(@nested_obj, search[1])
22
+ snapshot = resource_class.find_for_host_by_name(@host, search[1])
23
23
  @snapshots = if snapshot
24
24
  [snapshot].paginate(paginate_options)
25
25
  else
@@ -49,7 +49,7 @@ module Api
49
49
  param_group :snapshot, :as => :create
50
50
 
51
51
  def create
52
- @snapshot = resource_class.new(snapshot_params.to_h.merge(host: @nested_obj).merge(include_ram: params[:include_ram]))
52
+ @snapshot = resource_class.new(snapshot_params.to_h.merge(host: @host).merge(include_ram: params[:include_ram]))
53
53
  process_response @snapshot.create
54
54
  end
55
55
 
@@ -80,9 +80,25 @@ module Api
80
80
 
81
81
  private
82
82
 
83
+ # Find Host
84
+ #
85
+ # This method is responsible that methods of the controller know the current host.
86
+ def find_host
87
+ host_id = params[:host_id]
88
+ if host_id.blank?
89
+ not_found
90
+ return false
91
+ end
92
+ @host = Host.authorized("#{action_permission}_snapshots".to_sym, Host).friendly.find(host_id)
93
+ return @host if @host
94
+
95
+ not_found
96
+ false
97
+ end
98
+
83
99
  def resource_scope(_options = {})
84
100
  # TODO: Ask host for snapshots
85
- @resource_scope ||= resource_class.all_for_host(@nested_obj)
101
+ @resource_scope ||= resource_class.all_for_host(@host)
86
102
  end
87
103
 
88
104
  def resource_scope_for_index
@@ -94,12 +110,12 @@ module Api
94
110
  end
95
111
 
96
112
  def find_resource
97
- @snapshot = resource_class.find_for_host(@nested_obj, params[:id])
113
+ @snapshot = resource_class.find_for_host(@host, params[:id])
98
114
  not_found unless @snapshot
99
115
  end
100
116
 
101
117
  def check_snapshot_capability
102
- not_found unless @nested_obj.compute_resource&.capabilities&.include?(:snapshots)
118
+ not_found unless @host.compute_resource&.capabilities&.include?(:snapshots)
103
119
  end
104
120
 
105
121
  def action_permission
@@ -12,7 +12,7 @@ module ForemanSnapshotManagement
12
12
  # This method creates a Snapshot with a given name and optional description.
13
13
  def create_snapshot(host, name, description, _include_ram = false)
14
14
  server = find_vm_by_uuid host.uuid
15
- raise _('Name must contain at least 2 characters starting with alphabet. Valid characters are A-Z a-z 0-9 _') unless name =~ /^[A-Za-z][\w]{1,}$/
15
+ raise _('Name must contain at least 2 characters starting with alphabet. Valid characters are A-Z a-z 0-9 _') unless /^[A-Za-z][\w]{1,}$/.match?(name)
16
16
 
17
17
  snapshot = server.snapshots.create(name: name)
18
18
  snapshot.description = description
@@ -28,6 +28,10 @@ module ForemanSnapshotManagement
28
28
  )
29
29
  end
30
30
 
31
+ def self.any?
32
+ true
33
+ end
34
+
31
35
  def self.new_for_host(host)
32
36
  host.compute_resource.new_snapshot(host)
33
37
  end
@@ -3,3 +3,5 @@
3
3
  object @snapshot
4
4
 
5
5
  attributes :id, :name
6
+
7
+ node(:formatted_created_at) { |snapshot| snapshot.create_time&.httpdate }
@@ -1,80 +1,12 @@
1
- <%= form_for @new_snapshot, as: :snapshot, url: host_snapshots_path(@host), html: {class: ""} do |f| %>
2
- <table class="<%= table_css_classes %>">
3
- <thead>
4
- <tr>
5
- <th class="col-md-1"><%= _('Snapshot') %></th>
6
- <th class="col-md-2"><%= _('Description') %></th>
7
- <% if @host.compute_resource.capable?(:snapshot_include_ram) %>
8
- <th class="col-md-1"><%= _('Include RAM') %></th>
9
- <% end %>
10
- <th class="col-md-1"><%= _('Action') %></th>
11
- </tr>
12
- </thead>
13
- <tbody>
14
- <% if authorized_for(:auth_object => @host, :permission => :create_snapshots) %>
15
- <tr>
16
- <td>
17
- <%= f.text_field :name, class: 'form-control' %>
18
- </td>
19
- <td>
20
- <%= f.text_field :description, class: 'form-control' %>
21
- </td>
22
- <% if @host.compute_resource.capable?(:snapshot_include_ram) %>
23
- <td>
24
- <%= f.check_box :include_ram, class: 'form-control' %>
25
- </td>
26
- <% end %>
27
- <td>
28
- <%= f.submit _('Create'), class: 'btn btn-success', :onclick => "$(this).attr('disabled', 'disabled'); $(this).parents('form').submit();" %>
29
- </td>
30
- </tr>
31
- <% end %>
32
- <% @snapshots.each do |snapshot| %>
33
- <tr>
34
- <td>
35
- <% if authorized_for(:auth_object => @host, :permission => :edit_snapshots) && @host.compute_resource.capable?(:editable_snapshot_name) %>
36
- <%= edit_textfield snapshot, :name %>
37
- <% else %>
38
- <%= snapshot.name %>
39
- <% end %>
40
- <br /><%= snapshot.formatted_create_time() %>
41
- </td>
42
- <td>
43
- <% if authorized_for(:auth_object => @host, :permission => :edit_snapshots) %>
44
- <%= edit_textarea snapshot, :description %>
45
- <% else %>
46
- <%= snapshot.description %>
47
- <% end %>
48
- </td>
49
- <% if @host.compute_resource.capable?(:snapshot_include_ram) %>
50
- <td>
51
- </td>
52
- <% end %>
53
- <td>
54
- <%= action_buttons(
55
- display_link_if_authorized(_('Rollback'), hash_for_revert_host_snapshot_path(host_id: @host, id: snapshot.id).merge(:auth_object => @host, :permission => :revert_snapshots), method: :put, class: 'btn btn-primary', data: {confirm: _('Are you sure to revert this Snapshot?'), 'disable-with': _('Reverting...')}),
56
- display_delete_if_authorized(hash_for_host_snapshot_path(host_id: @host, id: snapshot.id).merge(:auth_object => @host, :permission => :destroy_snapshots), data: {confirm: _("Are you sure to delete this Snapshot?"), 'disable-with': _('Deleting...')}),
57
- ) %>
58
- </td>
59
- </tr>
60
- <% end %>
61
- </tbody>
62
- </table>
63
- <% end %>
64
-
65
- <script type="text/javascript">
66
- //<![CDATA[
67
- $(document).ready(function() {
68
- $('.editable').editable({
69
- params: {
70
- authenticity_token: AUTH_TOKEN
71
- },
72
- error: function(response) {
73
- return $.parseJSON(response.responseText).errors;
74
- }
75
- });
76
- var hash = window.location.hash;
77
- hash && $('ul.nav a[href="' + hash + '"]').tab('show');
78
- });
79
- //]]>
80
- </script>
1
+ <%= react_component('SnapshotManagement', {
2
+ host: @host,
3
+ canCreate: authorized_for(:auth_object => @host, :permission => :create_snapshots),
4
+ canUpdate: authorized_for(:auth_object => @host, :permission => :edit_snapshots),
5
+ canRevert: authorized_for(:auth_object => @host, :permission => :revert_snapshots),
6
+ canDelete: authorized_for(:auth_object => @host, :permission => :destroy_snapshots),
7
+ capabilities:
8
+ {
9
+ editableSnapshotName: @host.compute_resource.capable?(:editable_snapshot_name),
10
+ limitSnapshotNameFormat: @host.compute_resource.type == "ForemanFogProxmox::Proxmox"
11
+ }
12
+ }) %>
@@ -1,4 +1,12 @@
1
1
  <% if @host.compute_resource && @host.compute_resource.capabilities.include?(:snapshots) && authorized_for(:auth_object => @host, :permission => :view_snapshots) %>
2
+
3
+ <% content_for(:javascripts) do %>
4
+ <%= webpacked_plugins_js_for :foreman_snapshot_management %>
5
+ <% end %>
6
+ <% content_for(:stylesheets) do %>
7
+ <%= webpacked_plugins_css_for :foreman_snapshot_management %>
8
+ <% end %>
9
+
2
10
  <div id='snapshots' class='tab-pane'
3
11
  data-ajax-url='<%= host_snapshots_path(host_id: @host)%>'
4
12
  data-on-complete='onContentLoad'>
@@ -10,7 +10,10 @@ module ForemanSnapshotManagement
10
10
 
11
11
  initializer 'foreman_snapshot_management.register_plugin', before: :finisher_hook do |_app|
12
12
  Foreman::Plugin.register :foreman_snapshot_management do
13
- requires_foreman '>= 1.17'
13
+ requires_foreman '>= 2.0.0'
14
+
15
+ # Add Global files for extending foreman-core components and routes
16
+ register_global_js_file 'global'
14
17
 
15
18
  apipie_documented_controllers ["#{ForemanSnapshotManagement::Engine.root}/app/controllers/api/v2/*.rb"]
16
19
 
@@ -83,33 +86,31 @@ module ForemanSnapshotManagement
83
86
 
84
87
  # Include concerns in this config.to_prepare block
85
88
  config.to_prepare do
86
- begin
87
- # Load Foreman extensions
88
- ::HostsHelper.prepend ForemanSnapshotManagement::HostsHelperExtension
89
+ # Load Foreman extensions
90
+ ::HostsHelper.prepend ForemanSnapshotManagement::HostsHelperExtension
89
91
 
90
- begin
91
- ::ForemanFogProxmox::Proxmox.prepend ForemanSnapshotManagement::ProxmoxExtensions
92
+ begin
93
+ ::ForemanFogProxmox::Proxmox.prepend ForemanSnapshotManagement::ProxmoxExtensions
92
94
 
93
- # Load Fog extensions
94
- Fog::Proxmox::Compute::Mock.prepend FogExtensions::Proxmox::Snapshots::Mock if ForemanFogProxmox::Proxmox.available?
95
- rescue StandardError => e
96
- Rails.logger.warn "Failed to load Proxmox extension #{e}"
97
- end
95
+ # Load Fog extensions
96
+ Fog::Proxmox::Compute::Mock.prepend FogExtensions::Proxmox::Snapshots::Mock if ForemanFogProxmox::Proxmox.available?
97
+ rescue StandardError => e
98
+ Rails.logger.warn "Failed to load Proxmox extension #{e}"
99
+ end
98
100
 
99
- begin
100
- ::Foreman::Model::Vmware.prepend ForemanSnapshotManagement::VmwareExtensions
101
+ begin
102
+ ::Foreman::Model::Vmware.prepend ForemanSnapshotManagement::VmwareExtensions
101
103
 
102
- # Load Fog extensions
103
- if Foreman::Model::Vmware.available?
104
- ForemanSnapshotManagement.fog_vsphere_namespace::Real.prepend FogExtensions::Vsphere::Snapshots::Real
105
- ForemanSnapshotManagement.fog_vsphere_namespace::Mock.prepend FogExtensions::Vsphere::Snapshots::Mock
106
- end
107
- rescue StandardError => e
108
- Rails.logger.warn "Failed to load VMware extension #{e}"
104
+ # Load Fog extensions
105
+ if Foreman::Model::Vmware.available?
106
+ ForemanSnapshotManagement.fog_vsphere_namespace::Real.prepend FogExtensions::Vsphere::Snapshots::Real
107
+ ForemanSnapshotManagement.fog_vsphere_namespace::Mock.prepend FogExtensions::Vsphere::Snapshots::Mock
109
108
  end
110
109
  rescue StandardError => e
111
- Rails.logger.warn "ForemanSnapshotManagement: skipping engine hook (#{e})"
110
+ Rails.logger.warn "Failed to load VMware extension #{e}"
112
111
  end
112
+ rescue StandardError => e
113
+ Rails.logger.warn "ForemanSnapshotManagement: skipping engine hook (#{e})"
113
114
  end
114
115
 
115
116
  rake_tasks do
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ForemanSnapshotManagement
4
- VERSION = '1.7.1'
4
+ VERSION = '2.0.0'
5
5
  end
@@ -20,7 +20,7 @@ begin
20
20
  "#{ForemanSnapshotManagement::Engine.root}/test/**/*.rb"]
21
21
 
22
22
  namespace :foreman_snapshot_management do
23
- task :rubocop do
23
+ task rubocop: :environment do
24
24
  RuboCop::RakeTask.new(:rubocop_foreman_snapshot_management) do |task|
25
25
  task.patterns = test_patterns
26
26
  end
@@ -42,7 +42,7 @@ end
42
42
 
43
43
  namespace :jenkins do
44
44
  desc 'Test ForemanSnapshotManagement with XML output for jenkins'
45
- task 'foreman_snapshot_management' do
45
+ task 'foreman_snapshot_management' => :environment do
46
46
  Rake::Task['jenkins:setup:minitest'].invoke
47
47
  Rake::Task['rake:test:foreman_snapshot_management'].invoke
48
48
  end
@@ -5,19 +5,19 @@
5
5
  #
6
6
  # Translators:
7
7
  # Lukáš Zapletal, 2019
8
- # Ettore Atalan <atalanttore@googlemail.com>, 2019
9
8
  # Wiederoder <stefanwiederoder@googlemail.com>, 2019
10
- # Bryan Kearney <bryan.kearney@gmail.com>, 2019
11
9
  # Martin Zimmermann <martin.zimmermann@gmx.com>, 2019
12
- # Markus Bucher <bucher@atix.de>, 2020
10
+ # Ettore Atalan <atalanttore@googlemail.com>, 2021
11
+ # Bryan Kearney <bryan.kearney@gmail.com>, 2021
12
+ # Markus Bucher <bucher@atix.de>, 2021
13
13
  #
14
14
  #, fuzzy
15
15
  msgid ""
16
16
  msgstr ""
17
- "Project-Id-Version: foreman_snapshot_management 1.7.0\n"
17
+ "Project-Id-Version: foreman_snapshot_management 1.8.1\n"
18
18
  "Report-Msgid-Bugs-To: \n"
19
19
  "PO-Revision-Date: 2019-10-22 11:54+0000\n"
20
- "Last-Translator: Markus Bucher <bucher@atix.de>, 2020\n"
20
+ "Last-Translator: Markus Bucher <bucher@atix.de>, 2021\n"
21
21
  "Language-Team: German (https://www.transifex.com/foreman/teams/114/de/)\n"
22
22
  "MIME-Version: 1.0\n"
23
23
  "Content-Type: text/plain; charset=UTF-8\n"
@@ -28,30 +28,30 @@ msgstr ""
28
28
  msgid "Action"
29
29
  msgstr "Aktion"
30
30
 
31
- msgid "Are you sure to delete this Snapshot?"
32
- msgstr "Wollen Sie diesen Snapshot wirklich löschen?"
33
-
34
- msgid "Are you sure to revert this Snapshot?"
35
- msgstr "Sind Sie sicher, dass Sie diesen Snapshot wiederherstellen wollen?"
36
-
37
- msgid "Create"
38
- msgstr "Erstellen"
31
+ msgid "Action with sub plans"
32
+ msgstr "Aktion mit Unterplänen"
39
33
 
40
34
  msgid "Create Snapshot"
41
35
  msgstr "Snapshot erstellen"
42
36
 
37
+ msgid "Create Snapshot for %s"
38
+ msgstr "Snapshot anlegen für %s"
39
+
43
40
  msgid "Create a snapshot"
44
41
  msgstr "Einen Snapshot erstellen"
45
42
 
46
43
  msgid "Created %{snapshots} for %{num} %{hosts}"
47
44
  msgstr "%{snapshots} für %{num} %{hosts} erstellt"
48
45
 
46
+ msgid "Delete"
47
+ msgstr "Löschen"
48
+
49
+ msgid "Delete Snapshot \"%s\"?"
50
+ msgstr "\"%s\" wirklich löschen?"
51
+
49
52
  msgid "Delete a snapshot"
50
53
  msgstr "Snapshot löschen"
51
54
 
52
- msgid "Deleting..."
53
- msgstr "Löschen..."
54
-
55
55
  msgid "Description"
56
56
  msgstr "Beschreibung"
57
57
 
@@ -70,12 +70,24 @@ msgstr "Beim Löschen des Snapshots ist ein Fehler aufgetreten: %s"
70
70
  msgid "Error occurred while rolling back VM: %s"
71
71
  msgstr "Beim Zurücksetzen der VM ist ein Fehler aufgetreten: %s"
72
72
 
73
+ msgid "Error occurred while updating Snapshot: %s"
74
+ msgstr "Fehler beim Aktualisieren des Snapshots: %s"
75
+
76
+ msgid "Failed to load snapshot list"
77
+ msgstr "Fehler beim Laden der Snapshotliste"
78
+
73
79
  msgid "Failed to update Snapshot: %s"
74
80
  msgstr "Das Aktualisieren des Snapshots ist fehlgeschlagen: %s"
75
81
 
76
82
  msgid "Foreman-plugin to manage snapshots in a virtual-hardware environments."
77
83
  msgstr "Ein Foremanplugin, welches Snapshots in Umgebungen mit virtueller Hardware nutzbar macht."
78
84
 
85
+ msgid "Import Puppet classes"
86
+ msgstr "Puppet-Klassen importieren"
87
+
88
+ msgid "Import facts"
89
+ msgstr "Fakten importieren"
90
+
79
91
  msgid "Include RAM"
80
92
  msgstr "RAM einbeziehen"
81
93
 
@@ -85,6 +97,12 @@ msgstr "Alle Snapshots auflisten"
85
97
  msgid "Loading Snapshots information ..."
86
98
  msgstr "Lade Snapshot Informationen ..."
87
99
 
100
+ msgid "N/A"
101
+ msgstr "N/A"
102
+
103
+ msgid "Name"
104
+ msgstr "Name"
105
+
88
106
  msgid "Name must contain at least 2 characters starting with alphabet. Valid characters are A-Z a-z 0-9 _"
89
107
  msgstr "Der Name muss aus mindestens 2 Zeichen bestehen und mit einem Buchstaben beginnen. Gültige Zeichen: A-Z a-z 0-9 _"
90
108
 
@@ -103,12 +121,12 @@ msgstr "Keine Hosts wurden mit dieser Kennung, Name oder Abfrage-Filter gefunden
103
121
  msgid "Revert Host to a snapshot"
104
122
  msgstr "Host auf einen Snapshot zurücksetzen"
105
123
 
106
- msgid "Reverting..."
107
- msgstr "Zurücksetzen..."
108
-
109
124
  msgid "Rollback"
110
125
  msgstr "Wiederherstellen"
111
126
 
127
+ msgid "Rollback to \"%s\"?"
128
+ msgstr "\"%s\" wirklich wiederherstellen?"
129
+
112
130
  msgid "Snapshot"
113
131
  msgid_plural "Snapshots"
114
132
  msgstr[0] "Snapshot"
@@ -117,12 +135,24 @@ msgstr[1] "Snapshots"
117
135
  msgid "Snapshot name cannot be changed"
118
136
  msgstr "Der Name des Snapshots kann nicht geändert werden"
119
137
 
138
+ msgid "Snapshot successfully created!"
139
+ msgstr "Snapshot erfolgreich erzeugt!"
140
+
120
141
  msgid "Snapshots"
121
142
  msgstr "Snapshots"
122
143
 
123
144
  msgid "Something went wrong while selecting hosts - %s"
124
145
  msgstr "Fehler beim Auswählen der Hosts – %s"
125
146
 
147
+ msgid "Successfully removed Snapshot \"%s\" from host %s"
148
+ msgstr "Snapshot \"%s\" erfolgreich von Host %s entfernt."
149
+
150
+ msgid "Successfully rolled back Snapshot \"%s\" on host %s"
151
+ msgstr "Snapshot \"%s\" erfolgreich auf Host %s zurückgesetzt."
152
+
153
+ msgid "Successfully updated Snapshot \"%s\""
154
+ msgstr "Snapshot \"%s\" erfolgreich aktualisiert."
155
+
126
156
  msgid "Unable to create Proxmox Snapshot"
127
157
  msgstr "Proxmox Snapshot konnte nicht erstellt werden"
128
158
 
@@ -156,6 +186,9 @@ msgstr "Die VM wurde erfolgreich zurückgesetzt."
156
186
  msgid "Whether to include the RAM state in the snapshot"
157
187
  msgstr "Ob auch der aktuelle Hauptspeicherstand im Snapshot gespeichert werden soll"
158
188
 
189
+ msgid "edit entry"
190
+ msgstr "Eintrag bearbeiten"
191
+
159
192
  msgid "host"
160
193
  msgid_plural "hosts"
161
194
  msgstr[0] "Host"