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.
- checksums.yaml +4 -4
- data/README.md +3 -1
- data/Rakefile +7 -2
- data/app/controllers/api/v2/snapshots_controller.rb +22 -6
- data/app/models/foreman_snapshot_management/proxmox_extensions.rb +1 -1
- data/app/models/foreman_snapshot_management/snapshot.rb +4 -0
- data/app/views/api/v2/snapshots/base.json.rabl +2 -0
- data/app/views/foreman_snapshot_management/snapshots/_index.html.erb +12 -80
- data/app/views/hosts/_snapshots_tab.html.erb +8 -0
- data/lib/foreman_snapshot_management/engine.rb +22 -21
- data/lib/foreman_snapshot_management/version.rb +1 -1
- data/lib/tasks/foreman_snapshot_management_tasks.rake +2 -2
- data/locale/de/LC_MESSAGES/foreman_snapshot_management.mo +0 -0
- data/locale/de/foreman_snapshot_management.po +52 -19
- data/locale/en/LC_MESSAGES/foreman_snapshot_management.mo +0 -0
- data/locale/en/foreman_snapshot_management.po +44 -11
- data/locale/foreman_snapshot_management.pot +87 -25
- data/package.json +46 -0
- data/test/controllers/api/v2/snapshots_test.rb +232 -109
- data/test/controllers/foreman_snapshot_management/snapshots_controller_test.rb +1 -1
- data/test/factories/proxmox_factory.rb +1 -1
- data/webpack/components/SnapshotManagement/SnapshotManagement.js +84 -0
- data/webpack/components/SnapshotManagement/SnapshotManagementActions.js +212 -0
- data/webpack/components/SnapshotManagement/SnapshotManagementConstants.js +9 -0
- data/webpack/components/SnapshotManagement/SnapshotManagementReducer.js +100 -0
- data/webpack/components/SnapshotManagement/SnapshotManagementSelectors.js +8 -0
- data/webpack/components/SnapshotManagement/__tests__/SnapshotManagementActions.test.js +123 -0
- data/webpack/components/SnapshotManagement/__tests__/SnapshotManagementReducer.test.js +157 -0
- data/webpack/components/SnapshotManagement/__tests__/__snapshots__/SnapshotManagementActions.test.js.snap +314 -0
- data/webpack/components/SnapshotManagement/__tests__/__snapshots__/SnapshotManagementReducer.test.js.snap +214 -0
- data/webpack/components/SnapshotManagement/components/SnapshotForm/SnapshotForm.js +118 -0
- data/webpack/components/SnapshotManagement/components/SnapshotForm/SnapshotFormConstants.js +5 -0
- data/webpack/components/SnapshotManagement/components/SnapshotForm/__tests__/SnapshotForm.test.js +26 -0
- data/webpack/components/SnapshotManagement/components/SnapshotForm/__tests__/__snapshots__/SnapshotForm.test.js.snap +476 -0
- data/webpack/components/SnapshotManagement/components/SnapshotForm/index.js +19 -0
- data/webpack/components/SnapshotManagement/components/SnapshotForm/snapshotForm.scss +3 -0
- data/webpack/components/SnapshotManagement/components/SnapshotFormModal/SnapshotFormModal.js +37 -0
- data/webpack/components/SnapshotManagement/components/SnapshotFormModal/SnapshotFormModalConstants.js +1 -0
- data/webpack/components/SnapshotManagement/components/SnapshotFormModal/__tests__/SnapshotFormModal.test.js +19 -0
- data/webpack/components/SnapshotManagement/components/SnapshotFormModal/__tests__/__snapshots__/SnapshotFormModal.test.js.snap +19 -0
- data/webpack/components/SnapshotManagement/components/SnapshotFormModal/index.js +12 -0
- data/webpack/components/SnapshotManagement/components/SnapshotFormModal/useSnapshotFormModal.js +7 -0
- data/webpack/components/SnapshotManagement/components/SnapshotList/SnapshotList.js +314 -0
- data/webpack/components/SnapshotManagement/components/SnapshotList/SnapshotListHelper.js +70 -0
- data/webpack/components/SnapshotManagement/components/SnapshotList/__tests__/SnapshotList.test.js +88 -0
- data/webpack/components/SnapshotManagement/components/SnapshotList/__tests__/__snapshots__/SnapshotList.test.js.snap +1081 -0
- data/webpack/components/SnapshotManagement/components/SnapshotList/snapshotList.scss +13 -0
- data/webpack/components/SnapshotManagement/index.js +33 -0
- data/webpack/components/SnapshotManagement/snapshotManagement.scss +5 -0
- data/webpack/global_index.js +7 -0
- data/webpack/global_test_setup.js +11 -0
- data/webpack/index.js +8 -0
- data/webpack/reducers.js +7 -0
- data/webpack/test_setup.js +17 -0
- metadata +39 -33
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b21ddce3f89248da10faf11e3c9ed617c68b9500be5ef2f0a4557462e670912c
|
4
|
+
data.tar.gz: e345def34460802d4491dded6341ff0089c733cbeb1ce7b925e321f0c8be8caf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 70868762e401d992c5aeeda419491ccbe294f57c20bd87c4eab30c9bb7299da128f6f50a8ab640fcf83058fd62018c1aecd851ccde34b372656fb72b40e3179e
|
7
|
+
data.tar.gz: 2542bb32f1efb8ba220b8a63342313e73994990336252529a5496dc3f95dd8e5c8e41da322042042b617bb8f46bd213141821d94ea1cbfc19fdbd0c7b3210de1
|
data/README.md
CHANGED
@@ -1,4 +1,5 @@
|
|
1
|
-
[![
|
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 :
|
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(@
|
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: @
|
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(@
|
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(@
|
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 @
|
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
|
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
|
@@ -1,80 +1,12 @@
|
|
1
|
-
<%=
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
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 '>=
|
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
|
-
|
87
|
-
|
88
|
-
::HostsHelper.prepend ForemanSnapshotManagement::HostsHelperExtension
|
89
|
+
# Load Foreman extensions
|
90
|
+
::HostsHelper.prepend ForemanSnapshotManagement::HostsHelperExtension
|
89
91
|
|
90
|
-
|
91
|
-
|
92
|
+
begin
|
93
|
+
::ForemanFogProxmox::Proxmox.prepend ForemanSnapshotManagement::ProxmoxExtensions
|
92
94
|
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
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
|
-
|
100
|
-
|
101
|
+
begin
|
102
|
+
::Foreman::Model::Vmware.prepend ForemanSnapshotManagement::VmwareExtensions
|
101
103
|
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
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 "
|
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
|
@@ -20,7 +20,7 @@ begin
|
|
20
20
|
"#{ForemanSnapshotManagement::Engine.root}/test/**/*.rb"]
|
21
21
|
|
22
22
|
namespace :foreman_snapshot_management do
|
23
|
-
task :
|
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
|
Binary file
|
@@ -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
|
-
#
|
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.
|
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>,
|
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 "
|
32
|
-
msgstr "
|
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"
|