foreman_kubevirt 0.1.2 → 0.1.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/README.md +5 -3
- data/app/assets/javascripts/bundle.js +1 -0
- data/app/controllers/foreman_kubevirt/concerns/api/compute_resources_controller_extensions.rb +8 -16
- data/app/models/foreman_kubevirt/compute_attribute_extensions.rb +8 -0
- data/app/models/foreman_kubevirt/kubevirt.rb +86 -24
- data/app/validators/volume_validator.rb +13 -0
- data/app/views/compute_resources/form/_kubevirt.html.erb +5 -3
- data/app/views/compute_resources_vms/form/kubevirt/_volume.html.erb +5 -2
- data/app/views/compute_resources_vms/index/_kubevirt.html.erb +1 -1
- data/app/views/compute_resources_vms/show/_kubevirt.html.erb +1 -2
- data/lib/foreman_kubevirt/engine.rb +3 -0
- data/lib/foreman_kubevirt/version.rb +1 -1
- data/locale/action_names.rb +5 -0
- data/locale/ca/LC_MESSAGES/foreman_kubevirt.mo +0 -0
- data/locale/ca/foreman_kubevirt.po +170 -0
- data/locale/cs_CZ/LC_MESSAGES/foreman_kubevirt.mo +0 -0
- data/locale/cs_CZ/foreman_kubevirt.po +170 -0
- data/locale/de/LC_MESSAGES/foreman_kubevirt.mo +0 -0
- data/locale/de/foreman_kubevirt.po +170 -0
- data/locale/en/LC_MESSAGES/foreman_kubevirt.mo +0 -0
- data/locale/en/foreman_kubevirt.edit.po +219 -0
- data/locale/en/foreman_kubevirt.po +162 -11
- data/locale/en/foreman_kubevirt.po.time_stamp +0 -0
- data/locale/en_GB/LC_MESSAGES/foreman_kubevirt.mo +0 -0
- data/locale/en_GB/foreman_kubevirt.po +170 -0
- data/locale/es/LC_MESSAGES/foreman_kubevirt.mo +0 -0
- data/locale/es/foreman_kubevirt.po +170 -0
- data/locale/foreman_kubevirt.pot +232 -8
- data/locale/fr/LC_MESSAGES/foreman_kubevirt.mo +0 -0
- data/locale/fr/foreman_kubevirt.po +170 -0
- data/locale/gemspec.rb +1 -1
- data/locale/gl/LC_MESSAGES/foreman_kubevirt.mo +0 -0
- data/locale/gl/foreman_kubevirt.po +170 -0
- data/locale/it/LC_MESSAGES/foreman_kubevirt.mo +0 -0
- data/locale/it/foreman_kubevirt.po +170 -0
- data/locale/ja/LC_MESSAGES/foreman_kubevirt.mo +0 -0
- data/locale/ja/foreman_kubevirt.po +170 -0
- data/locale/ko/LC_MESSAGES/foreman_kubevirt.mo +0 -0
- data/locale/ko/foreman_kubevirt.po +170 -0
- data/locale/nl_NL/LC_MESSAGES/foreman_kubevirt.mo +0 -0
- data/locale/nl_NL/foreman_kubevirt.po +177 -0
- data/locale/pl/LC_MESSAGES/foreman_kubevirt.mo +0 -0
- data/locale/pl/foreman_kubevirt.po +176 -0
- data/locale/pt_BR/LC_MESSAGES/foreman_kubevirt.mo +0 -0
- data/locale/pt_BR/foreman_kubevirt.po +178 -0
- data/locale/ru/LC_MESSAGES/foreman_kubevirt.mo +0 -0
- data/locale/ru/foreman_kubevirt.po +180 -0
- data/locale/sv_SE/LC_MESSAGES/foreman_kubevirt.mo +0 -0
- data/locale/sv_SE/foreman_kubevirt.po +176 -0
- data/locale/zh_CN/LC_MESSAGES/foreman_kubevirt.mo +0 -0
- data/locale/zh_CN/foreman_kubevirt.po +177 -0
- data/locale/zh_TW/LC_MESSAGES/foreman_kubevirt.mo +0 -0
- data/locale/zh_TW/foreman_kubevirt.po +175 -0
- data/test/factories/compute_resource_factories.rb +6 -6
- data/test/factories/host_factories.rb +41 -41
- data/test/factories/nic_factories.rb +25 -25
- data/test/models/compute_resources/kubevirt_test.rb +15 -1
- data/test/unit/foreman_kubevirt_test.rb +65 -6
- metadata +52 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: b284e744d2f757d5493ff422214f54fd3247f50fc57cdcf3a64fe56f09c8cebe
|
4
|
+
data.tar.gz: c0468a5c9499fe9930d66efdba3519ea251963fdd07fa03b6cbd0ad2cebe28d6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b4882fb3ac0e11da7bb342249518066df95202b87f906a487a82be829544d1a46a1512fa1b71ec2367ce55f8fbaacad40e42fadb2a6bd641581afcc3e88f6750
|
7
|
+
data.tar.gz: c1f5a09d792cebef6f12390f6aefae6c2b47cd7f1ed11bf39d4727208eec825ba7677cb77fe352a9a7ccdd1f1153b1a14463affd05ac0db60e712af60c5362c0
|
data/README.md
CHANGED
@@ -55,9 +55,11 @@ To verify that the installation was successful, go to Foreman, top bar **Adminis
|
|
55
55
|
|
56
56
|
## Compatibility
|
57
57
|
|
58
|
-
|
59
|
-
|
60
|
-
|
|
58
|
+
|
59
|
+
|
60
|
+
| Foreman Version | Plugin Version | Kubevirt API Version |
|
61
|
+
| --------------- | --------------:| -------------------- |
|
62
|
+
| >= 1.21.x | ~> 0.1.x | v1alpha3 |
|
61
63
|
|
62
64
|
## Usage
|
63
65
|
Go to **Infrastructure > Compute Resources** and click on **New Compute Resource**.
|
@@ -0,0 +1 @@
|
|
1
|
+
window.tfm = { kubevirt: { require('./foreman_kubevirt/kubevirt.js') };
|
data/app/controllers/foreman_kubevirt/concerns/api/compute_resources_controller_extensions.rb
CHANGED
@@ -2,25 +2,17 @@ module ForemanKubevirt
|
|
2
2
|
module Concerns
|
3
3
|
module Api
|
4
4
|
module ComputeResourcesControllerExtensions
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
param :
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
param :api_port, String, :desc => N_("API port for KubeVirt only")
|
14
|
-
end
|
5
|
+
extend ::Apipie::DSL::Concern
|
6
|
+
update_api(:create, :update) do
|
7
|
+
param :compute_resource, Hash do
|
8
|
+
param :token, String, :desc => N_("Token for KubeVirt only")
|
9
|
+
param :hostname, String, :desc => N_("Host name for KubeVirt only")
|
10
|
+
param :namespace, String, :desc => N_("Namespace for KubeVirt only")
|
11
|
+
param :ca_crt, String, :desc => N_("CA crt for KubeVirt only")
|
12
|
+
param :api_port, String, :desc => N_("API port for KubeVirt only")
|
15
13
|
end
|
16
14
|
end
|
17
15
|
end
|
18
|
-
|
19
|
-
extend ActiveSupport::Concern
|
20
|
-
|
21
|
-
included do
|
22
|
-
include ApiPieExtensions
|
23
|
-
end
|
24
16
|
end
|
25
17
|
end
|
26
18
|
end
|
@@ -6,7 +6,7 @@ module ForemanKubevirt
|
|
6
6
|
alias_attribute :token, :password
|
7
7
|
alias_attribute :namespace, :user
|
8
8
|
validates :hostname, :api_port, :namespace, :token, :presence => true
|
9
|
-
|
9
|
+
after_validation :validate_connectivity unless Rails.env.test?
|
10
10
|
|
11
11
|
def ca_cert
|
12
12
|
attrs[:ca_cert]
|
@@ -28,6 +28,10 @@ module ForemanKubevirt
|
|
28
28
|
%i[build image new_volume]
|
29
29
|
end
|
30
30
|
|
31
|
+
def user_data_supported?
|
32
|
+
true
|
33
|
+
end
|
34
|
+
|
31
35
|
def provided_attributes
|
32
36
|
{ :uuid => :name, :mac => :mac }
|
33
37
|
end
|
@@ -48,10 +52,29 @@ module ForemanKubevirt
|
|
48
52
|
ComputeResource.model_name
|
49
53
|
end
|
50
54
|
|
51
|
-
def test_connection(
|
55
|
+
def test_connection(options = {})
|
56
|
+
super
|
57
|
+
validate_connectivity(options)
|
58
|
+
end
|
59
|
+
|
60
|
+
def caching_enabled
|
61
|
+
false
|
62
|
+
end
|
63
|
+
|
64
|
+
def validate_connectivity(options = {})
|
65
|
+
return unless connection_properties_valid?
|
66
|
+
return false if errors.any?
|
52
67
|
client&.valid? && client&.virt_supported?
|
53
68
|
rescue StandardError => e
|
54
|
-
|
69
|
+
if e.message =~ /401/
|
70
|
+
errors[:base] << _('The compute resource could not be authenticated')
|
71
|
+
else
|
72
|
+
errors[:base] << e.message
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def connection_properties_valid?
|
77
|
+
errors[:hostname].empty? && errors[:token].empty? && errors[:namespace].empty? && errors[:api_port].empty?
|
55
78
|
end
|
56
79
|
|
57
80
|
def networks
|
@@ -81,11 +104,12 @@ module ForemanKubevirt
|
|
81
104
|
storage_classes.map { |sc| OpenStruct.new(id: sc.name, description: "#{sc.name} (#{sc.provisioner})") }
|
82
105
|
end
|
83
106
|
|
84
|
-
def new_volume(
|
107
|
+
def new_volume(attrs = {})
|
85
108
|
return unless new_volume_errors.empty?
|
86
|
-
|
87
|
-
|
88
|
-
vol
|
109
|
+
capacity = attrs.delete(:capacity)
|
110
|
+
args = {capacity: capacity}.merge(attrs)
|
111
|
+
vol = Fog::Kubevirt::Compute::Volume.new(args)
|
112
|
+
vol.boot_order = 1 if args[:bootable] == "on" || args[:bootable] == "true"
|
89
113
|
vol
|
90
114
|
end
|
91
115
|
|
@@ -135,24 +159,23 @@ module ForemanKubevirt
|
|
135
159
|
options = vm_instance_defaults.merge(args.to_hash.deep_symbolize_keys)
|
136
160
|
logger.debug("creating VM with the following options: #{options.inspect}")
|
137
161
|
|
138
|
-
|
139
|
-
|
140
|
-
# FIXME: Add cloud-init support
|
141
|
-
# init = { 'userData' => "#!/bin/bash\necho \"fedora\" | passwd fedora --stdin"}
|
142
|
-
|
143
|
-
interfaces, networks = create_network_devices_for_vm(options, volumes)
|
162
|
+
# Add clound init user data
|
163
|
+
user_data = { "userData" => options[:user_data] } if options[:user_data].present?
|
144
164
|
|
145
165
|
begin
|
166
|
+
volumes = create_volumes_for_vm(options)
|
167
|
+
interfaces, networks = create_network_devices_for_vm(options, volumes)
|
146
168
|
client.vms.create(:vm_name => options[:name],
|
147
169
|
:cpus => options[:cpu_cores].to_i,
|
148
|
-
:memory_size => options[:memory]
|
170
|
+
:memory_size => convert_memory(options[:memory] + "b", :mi).to_s,
|
171
|
+
:memory_unit => "Mi",
|
149
172
|
:volumes => volumes,
|
150
|
-
|
173
|
+
:cloudinit => user_data,
|
151
174
|
:networks => networks,
|
152
175
|
:interfaces => interfaces)
|
153
176
|
client.servers.get(options[:name])
|
154
|
-
rescue
|
155
|
-
delete_pvcs(volumes)
|
177
|
+
rescue Exception => e
|
178
|
+
delete_pvcs(volumes) if volumes
|
156
179
|
raise e
|
157
180
|
end
|
158
181
|
end
|
@@ -177,7 +200,7 @@ module ForemanKubevirt
|
|
177
200
|
# return 'false'
|
178
201
|
def vm_instance_defaults
|
179
202
|
{
|
180
|
-
:memory => 1024.megabytes,
|
203
|
+
:memory => 1024.megabytes.to_s,
|
181
204
|
:cpu_cores => '1'
|
182
205
|
}
|
183
206
|
end
|
@@ -260,11 +283,41 @@ module ForemanKubevirt
|
|
260
283
|
64.gigabytes
|
261
284
|
end
|
262
285
|
|
286
|
+
# Converts a given memory to bytes
|
287
|
+
#
|
288
|
+
# @param memory - The memory of the VM to convert
|
289
|
+
#
|
290
|
+
def convert_memory_to_bytes(memory)
|
291
|
+
convert_memory(memory, :b)
|
292
|
+
end
|
293
|
+
|
294
|
+
def plain_kubevirt_protocol
|
295
|
+
"plain.kubevirt.io".freeze
|
296
|
+
end
|
297
|
+
|
298
|
+
def token_protocol(token)
|
299
|
+
"base64url.bearer.authorization.k8s.io.#{token}"
|
300
|
+
end
|
301
|
+
|
302
|
+
def console(uuid)
|
303
|
+
vm = find_vm_by_uuid(uuid)
|
304
|
+
vnc_details = client.vminstances.get_vnc_console_details(vm.name, namespace)
|
305
|
+
token = Base64.encode64(vnc_details[:token]).delete!("\n").delete("==")
|
306
|
+
{
|
307
|
+
:host => vnc_details[:host],
|
308
|
+
:port => vnc_details[:port],
|
309
|
+
:path => vnc_details[:path],
|
310
|
+
:token_protocol => token_protocol(token),
|
311
|
+
:plain_protocol => plain_kubevirt_protocol,
|
312
|
+
:type => 'vnc',
|
313
|
+
:encrypt => true
|
314
|
+
}
|
315
|
+
end
|
316
|
+
|
263
317
|
protected
|
264
318
|
|
265
319
|
def client
|
266
320
|
return @client if @client
|
267
|
-
|
268
321
|
@client ||= Fog::Kubevirt::Compute.new(
|
269
322
|
:kubevirt_hostname => hostname,
|
270
323
|
:kubevirt_port => api_port,
|
@@ -272,7 +325,8 @@ module ForemanKubevirt
|
|
272
325
|
:kubevirt_token => token,
|
273
326
|
:kubevirt_log => logger,
|
274
327
|
:kubevirt_verify_ssl => ca_cert.present?,
|
275
|
-
:kubevirt_ca_cert => ca_cert
|
328
|
+
:kubevirt_ca_cert => ca_cert,
|
329
|
+
:kubevirt_version => "v1alpha3"
|
276
330
|
)
|
277
331
|
rescue OpenSSL::X509::CertificateError
|
278
332
|
raise_certification_failure_exception
|
@@ -304,7 +358,7 @@ module ForemanKubevirt
|
|
304
358
|
|
305
359
|
def verify_booting_from_image_is_possible(volumes)
|
306
360
|
raise ::Foreman::Exception.new N_('It is not possible to set a bootable volume and image based provisioning.') if
|
307
|
-
volumes
|
361
|
+
volumes&.any? { |_, v| v[:bootable] == "true" }
|
308
362
|
end
|
309
363
|
|
310
364
|
def add_volume_for_image_provision(options)
|
@@ -321,11 +375,15 @@ module ForemanKubevirt
|
|
321
375
|
end
|
322
376
|
|
323
377
|
def validate_volume_capacity(volumes_attributes)
|
324
|
-
volumes_attributes.each
|
378
|
+
volumes_attributes.each do |_, vol|
|
379
|
+
if vol[:capacity].to_s.empty? || /\A\d+G?\Z/.match(vol[:capacity].to_s).nil?
|
380
|
+
raise Foreman::Exception.new(N_("Volume size #{vol[:capacity]} is not valid"))
|
381
|
+
end
|
382
|
+
end
|
325
383
|
end
|
326
384
|
|
327
385
|
def validate_only_single_bootable_volume(volumes_attributes)
|
328
|
-
raise ::Foreman::Exception.new N_('Only one volume can be bootable') if volumes_attributes.
|
386
|
+
raise ::Foreman::Exception.new N_('Only one volume can be bootable') if volumes_attributes.count { |_, v| v[:bootable] == "true" } > 1
|
329
387
|
end
|
330
388
|
|
331
389
|
def create_new_pvc(pvc_name, capacity, storage_class)
|
@@ -410,8 +468,8 @@ module ForemanKubevirt
|
|
410
468
|
def create_network_devices_for_vm(options, volumes)
|
411
469
|
interfaces = []
|
412
470
|
networks = []
|
413
|
-
|
414
471
|
options[:interfaces_attributes].values.each do |iface|
|
472
|
+
raise ::Foreman::Exception.new N_('cni_provider or network are missing') unless (iface.key?(:cni_provider) && iface.key?(:network))
|
415
473
|
if iface[:cni_provider] == 'pod'
|
416
474
|
nic, net = create_pod_network_element
|
417
475
|
else
|
@@ -428,5 +486,9 @@ module ForemanKubevirt
|
|
428
486
|
|
429
487
|
[interfaces, networks]
|
430
488
|
end
|
489
|
+
|
490
|
+
def convert_memory(memory, unit)
|
491
|
+
::Fog::Kubevirt::Utils::UnitConverter.convert(memory, unit).to_i
|
492
|
+
end
|
431
493
|
end
|
432
494
|
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
class VolumeValidator < ActiveModel::EachValidator
|
2
|
+
def validate_each(record, attribute, value)
|
3
|
+
if value[:volumes_attributes].present?
|
4
|
+
value[:volumes_attributes].each do |_, attrs|
|
5
|
+
if attrs.key?("capacity") && attrs.key?("storage_class")
|
6
|
+
if attrs["capacity"].to_s.empty? || /\A\d+G?\Z/.match(attrs["capacity"].to_s).nil?
|
7
|
+
record.errors.add(attribute, _("Volume size #{attrs['capacity']} is not valid"))
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -1,11 +1,13 @@
|
|
1
|
-
<%= text_f f, :hostname, :label => _("Hostname") %>
|
1
|
+
<%= text_f f, :hostname, :label => _("Hostname"), :required => true %>
|
2
2
|
<%= text_f f, :api_port, :label => _("API Port"), :required => true %>
|
3
3
|
<%= text_f f, :namespace, :label => _("Namespace"), :required => true %>
|
4
|
-
<%= password_f f, :
|
4
|
+
<%= password_f f, :token, :label => _("Token"), :required => true,
|
5
5
|
:keep_value => true, :unset => unset_password?,
|
6
6
|
:help_block => _("e.g. eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9..."),
|
7
7
|
:help_inline => documentation_button('/foreman_kubevirt/0.x/index.html#4.1SettingComputeResourceTokenandX509CAvalues',
|
8
|
-
|
8
|
+
:root_url => 'https://theforeman.org/plugins'),
|
9
|
+
:id => "compute_resource_password"
|
10
|
+
%>
|
9
11
|
|
10
12
|
<%= textarea_f f, :ca_cert, :label => _("X509 Certification Authorities"),
|
11
13
|
:placeholder => _("Optionally provide a CA, or a correctly ordered CA chain or a path to a file. If left blank - insecure.") %>
|
@@ -1,6 +1,10 @@
|
|
1
1
|
<% if f.object.type.nil? || f.object.type == 'persistentVolumeClaim' %>
|
2
|
+
<% if @set %>
|
3
|
+
<% @set.errors[:vm_attrs].each do | error| %>
|
4
|
+
<%= alert :class => 'alert-danger', :header => '', :text => error %>
|
5
|
+
<% end %>
|
6
|
+
<% end %>
|
2
7
|
<% storage_classes = compute_resource.storage_classes %>
|
3
|
-
|
4
8
|
<%= select_f f, :storage_class,
|
5
9
|
compute_resource.storage_classes_for_select,
|
6
10
|
:id,
|
@@ -10,7 +14,6 @@
|
|
10
14
|
:label_size => "col-md-2",
|
11
15
|
:disabled => !new_vm,
|
12
16
|
:class => "col-md-2" %>
|
13
|
-
|
14
17
|
<%= text_f f,:capacity, :label => _('Size (GB)'), :label_size => "col-md-2", :disabled => !new_vm, :class => "col-md-2 pvc-size" %>
|
15
18
|
|
16
19
|
<% bootable = f.object.boot_order.nil? ? false : f.object.bootable %>
|
@@ -12,7 +12,7 @@
|
|
12
12
|
<tr>
|
13
13
|
<td><%= link_to_if_authorized vm.name, hash_for_compute_resource_vm_path(:compute_resource_id => @compute_resource, :id => vm.identity).merge(:auth_object => @compute_resource, :auth_action => 'view', :authorizer => authorizer) %></td>
|
14
14
|
<td><%= vm.cpu_cores %></td>
|
15
|
-
<td><%= vm.memory %></td>
|
15
|
+
<td><%= number_to_human_size @compute_resource.convert_memory_to_bytes(vm.memory) %></td>
|
16
16
|
<td>
|
17
17
|
<span <%= vm_power_class(vm.ready?) %>>
|
18
18
|
<%= vm_state(vm) %></span>
|
@@ -44,6 +44,7 @@ module ForemanKubevirt
|
|
44
44
|
config.to_prepare do
|
45
45
|
begin
|
46
46
|
require "fog/kubevirt"
|
47
|
+
require "fog/kubevirt/compute/utils/unit_converter"
|
47
48
|
require "fog/kubevirt/compute/models/server"
|
48
49
|
require File.expand_path("../../app/models/concerns/fog_extensions/kubevirt/server", __dir__)
|
49
50
|
|
@@ -61,6 +62,8 @@ module ForemanKubevirt
|
|
61
62
|
require "fog/kubevirt/compute/models/networkattachmentdef"
|
62
63
|
require File.expand_path("../../app/models/concerns/fog_extensions/kubevirt/network", __dir__)
|
63
64
|
Fog::Kubevirt::Compute::Networkattachmentdef.send(:include, ::FogExtensions::Kubevirt::Network)
|
65
|
+
ComputeAttribute.send :include, ForemanKubevirt::ComputeAttributeExtensions
|
66
|
+
|
64
67
|
rescue StandardError => e
|
65
68
|
Rails.logger.warn "Foreman-Kubevirt: skipping engine hook (#{e})"
|
66
69
|
end
|
Binary file
|
@@ -0,0 +1,170 @@
|
|
1
|
+
# Catalan translations for foreman_kubevirt package.
|
2
|
+
# Copyright (C) 2020 THE PACKAGE'S COPYRIGHT HOLDER
|
3
|
+
# This file is distributed under the same license as the foreman_kubevirt package.
|
4
|
+
# FIRST AUTHOR <EMAIL@ADDRESS>, 2020.
|
5
|
+
#
|
6
|
+
msgid ""
|
7
|
+
msgstr ""
|
8
|
+
"Project-Id-Version: foreman_kubevirt 1.0.0\n"
|
9
|
+
"Report-Msgid-Bugs-To: \n"
|
10
|
+
"PO-Revision-Date: 2020-05-26 13:16+0530\n"
|
11
|
+
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
12
|
+
"Language-Team: Catalan\n"
|
13
|
+
"Language: ca\n"
|
14
|
+
"MIME-Version: 1.0\n"
|
15
|
+
"Content-Type: text/plain; charset=UTF-8\n"
|
16
|
+
"Content-Transfer-Encoding: 8bit\n"
|
17
|
+
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
18
|
+
"\n"
|
19
|
+
|
20
|
+
msgid "%{cpu_cores} Cores and %{memory} memory"
|
21
|
+
msgstr ""
|
22
|
+
|
23
|
+
msgid "API Port"
|
24
|
+
msgstr ""
|
25
|
+
|
26
|
+
msgid "API port for KubeVirt only"
|
27
|
+
msgstr ""
|
28
|
+
|
29
|
+
msgid "Actions"
|
30
|
+
msgstr ""
|
31
|
+
|
32
|
+
msgid "Bootable"
|
33
|
+
msgstr ""
|
34
|
+
|
35
|
+
msgid "CA crt for KubeVirt only"
|
36
|
+
msgstr ""
|
37
|
+
|
38
|
+
msgid "CNI Provider"
|
39
|
+
msgstr ""
|
40
|
+
|
41
|
+
msgid "CPUs"
|
42
|
+
msgstr ""
|
43
|
+
|
44
|
+
msgid "Disk"
|
45
|
+
msgstr ""
|
46
|
+
|
47
|
+
msgid "Does this image support user data input (e.g. via cloud-init)?"
|
48
|
+
msgstr ""
|
49
|
+
|
50
|
+
msgid "Host name for KubeVirt only"
|
51
|
+
msgstr ""
|
52
|
+
|
53
|
+
msgid "Hostname"
|
54
|
+
msgstr ""
|
55
|
+
|
56
|
+
msgid "Image"
|
57
|
+
msgstr ""
|
58
|
+
|
59
|
+
msgid "It is not possible to set a bootable volume and image based provisioning."
|
60
|
+
msgstr ""
|
61
|
+
|
62
|
+
msgid "Memory"
|
63
|
+
msgstr ""
|
64
|
+
|
65
|
+
msgid "NIC"
|
66
|
+
msgstr ""
|
67
|
+
|
68
|
+
msgid "Name"
|
69
|
+
msgstr ""
|
70
|
+
|
71
|
+
msgid "Namespace"
|
72
|
+
msgstr ""
|
73
|
+
|
74
|
+
msgid "Namespace for KubeVirt only"
|
75
|
+
msgstr ""
|
76
|
+
|
77
|
+
msgid "Network"
|
78
|
+
msgstr ""
|
79
|
+
|
80
|
+
msgid "Only one volume can be bootable"
|
81
|
+
msgstr ""
|
82
|
+
|
83
|
+
msgid "Optionally provide a CA, or a correctly ordered CA chain or a path to a file. If left blank - insecure."
|
84
|
+
msgstr ""
|
85
|
+
|
86
|
+
msgid "Password to authenticate with - used for SSH finish step."
|
87
|
+
msgstr ""
|
88
|
+
|
89
|
+
msgid "Please select an image"
|
90
|
+
msgstr ""
|
91
|
+
|
92
|
+
msgid "Power"
|
93
|
+
msgstr ""
|
94
|
+
|
95
|
+
msgid "Power ON this machine"
|
96
|
+
msgstr ""
|
97
|
+
|
98
|
+
msgid "Properties"
|
99
|
+
msgstr ""
|
100
|
+
|
101
|
+
msgid "Provision and manage Kubevirt Virtual Machines from Foreman."
|
102
|
+
msgstr ""
|
103
|
+
|
104
|
+
msgid "Running on"
|
105
|
+
msgstr ""
|
106
|
+
|
107
|
+
msgid "Size (GB)"
|
108
|
+
msgstr ""
|
109
|
+
|
110
|
+
msgid "Start"
|
111
|
+
msgstr ""
|
112
|
+
|
113
|
+
msgid "Storage Class"
|
114
|
+
msgstr ""
|
115
|
+
|
116
|
+
msgid "The compute resource could not be authenticated"
|
117
|
+
msgstr ""
|
118
|
+
|
119
|
+
msgid "The name of the image in the registry."
|
120
|
+
msgstr ""
|
121
|
+
|
122
|
+
msgid ""
|
123
|
+
"The remote system presented a public key signed by an unidentified certificate authority.\n"
|
124
|
+
" If you are sure the remote system is authentic, go to the compute resource edit page, press the 'Test Connection' button and submit"
|
125
|
+
msgstr ""
|
126
|
+
|
127
|
+
msgid "The user that is used to ssh into the instance, normally cloud-user, ec2-user, ubuntu, root etc"
|
128
|
+
msgstr ""
|
129
|
+
|
130
|
+
msgid "Token"
|
131
|
+
msgstr ""
|
132
|
+
|
133
|
+
msgid "Token for KubeVirt only"
|
134
|
+
msgstr ""
|
135
|
+
|
136
|
+
msgid "Type"
|
137
|
+
msgstr ""
|
138
|
+
|
139
|
+
msgid "UUID"
|
140
|
+
msgstr ""
|
141
|
+
|
142
|
+
msgid "VCPU(s)"
|
143
|
+
msgstr ""
|
144
|
+
|
145
|
+
msgid "VM should be created based on Persistent Volume Claim or Image"
|
146
|
+
msgstr ""
|
147
|
+
|
148
|
+
msgid "VM should be created based on an image"
|
149
|
+
msgstr ""
|
150
|
+
|
151
|
+
msgid "X509 Certification Authorities"
|
152
|
+
msgstr ""
|
153
|
+
|
154
|
+
msgid "cni_provider or network are missing"
|
155
|
+
msgstr ""
|
156
|
+
|
157
|
+
msgid "e.g. eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9..."
|
158
|
+
msgstr ""
|
159
|
+
|
160
|
+
msgid "genie"
|
161
|
+
msgstr ""
|
162
|
+
|
163
|
+
msgid "multus"
|
164
|
+
msgstr ""
|
165
|
+
|
166
|
+
msgid "no Storage Classes available on provider"
|
167
|
+
msgstr ""
|
168
|
+
|
169
|
+
msgid "pod"
|
170
|
+
msgstr ""
|