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.
Files changed (60) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +5 -3
  3. data/app/assets/javascripts/bundle.js +1 -0
  4. data/app/controllers/foreman_kubevirt/concerns/api/compute_resources_controller_extensions.rb +8 -16
  5. data/app/models/foreman_kubevirt/compute_attribute_extensions.rb +8 -0
  6. data/app/models/foreman_kubevirt/kubevirt.rb +86 -24
  7. data/app/validators/volume_validator.rb +13 -0
  8. data/app/views/compute_resources/form/_kubevirt.html.erb +5 -3
  9. data/app/views/compute_resources_vms/form/kubevirt/_volume.html.erb +5 -2
  10. data/app/views/compute_resources_vms/index/_kubevirt.html.erb +1 -1
  11. data/app/views/compute_resources_vms/show/_kubevirt.html.erb +1 -2
  12. data/lib/foreman_kubevirt/engine.rb +3 -0
  13. data/lib/foreman_kubevirt/version.rb +1 -1
  14. data/locale/action_names.rb +5 -0
  15. data/locale/ca/LC_MESSAGES/foreman_kubevirt.mo +0 -0
  16. data/locale/ca/foreman_kubevirt.po +170 -0
  17. data/locale/cs_CZ/LC_MESSAGES/foreman_kubevirt.mo +0 -0
  18. data/locale/cs_CZ/foreman_kubevirt.po +170 -0
  19. data/locale/de/LC_MESSAGES/foreman_kubevirt.mo +0 -0
  20. data/locale/de/foreman_kubevirt.po +170 -0
  21. data/locale/en/LC_MESSAGES/foreman_kubevirt.mo +0 -0
  22. data/locale/en/foreman_kubevirt.edit.po +219 -0
  23. data/locale/en/foreman_kubevirt.po +162 -11
  24. data/locale/en/foreman_kubevirt.po.time_stamp +0 -0
  25. data/locale/en_GB/LC_MESSAGES/foreman_kubevirt.mo +0 -0
  26. data/locale/en_GB/foreman_kubevirt.po +170 -0
  27. data/locale/es/LC_MESSAGES/foreman_kubevirt.mo +0 -0
  28. data/locale/es/foreman_kubevirt.po +170 -0
  29. data/locale/foreman_kubevirt.pot +232 -8
  30. data/locale/fr/LC_MESSAGES/foreman_kubevirt.mo +0 -0
  31. data/locale/fr/foreman_kubevirt.po +170 -0
  32. data/locale/gemspec.rb +1 -1
  33. data/locale/gl/LC_MESSAGES/foreman_kubevirt.mo +0 -0
  34. data/locale/gl/foreman_kubevirt.po +170 -0
  35. data/locale/it/LC_MESSAGES/foreman_kubevirt.mo +0 -0
  36. data/locale/it/foreman_kubevirt.po +170 -0
  37. data/locale/ja/LC_MESSAGES/foreman_kubevirt.mo +0 -0
  38. data/locale/ja/foreman_kubevirt.po +170 -0
  39. data/locale/ko/LC_MESSAGES/foreman_kubevirt.mo +0 -0
  40. data/locale/ko/foreman_kubevirt.po +170 -0
  41. data/locale/nl_NL/LC_MESSAGES/foreman_kubevirt.mo +0 -0
  42. data/locale/nl_NL/foreman_kubevirt.po +177 -0
  43. data/locale/pl/LC_MESSAGES/foreman_kubevirt.mo +0 -0
  44. data/locale/pl/foreman_kubevirt.po +176 -0
  45. data/locale/pt_BR/LC_MESSAGES/foreman_kubevirt.mo +0 -0
  46. data/locale/pt_BR/foreman_kubevirt.po +178 -0
  47. data/locale/ru/LC_MESSAGES/foreman_kubevirt.mo +0 -0
  48. data/locale/ru/foreman_kubevirt.po +180 -0
  49. data/locale/sv_SE/LC_MESSAGES/foreman_kubevirt.mo +0 -0
  50. data/locale/sv_SE/foreman_kubevirt.po +176 -0
  51. data/locale/zh_CN/LC_MESSAGES/foreman_kubevirt.mo +0 -0
  52. data/locale/zh_CN/foreman_kubevirt.po +177 -0
  53. data/locale/zh_TW/LC_MESSAGES/foreman_kubevirt.mo +0 -0
  54. data/locale/zh_TW/foreman_kubevirt.po +175 -0
  55. data/test/factories/compute_resource_factories.rb +6 -6
  56. data/test/factories/host_factories.rb +41 -41
  57. data/test/factories/nic_factories.rb +25 -25
  58. data/test/models/compute_resources/kubevirt_test.rb +15 -1
  59. data/test/unit/foreman_kubevirt_test.rb +65 -6
  60. metadata +52 -12
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: f2ab728beaf6449390b9686a3578738848ac1da3
4
- data.tar.gz: dc79c8e150b8d7cb02c679c9e1ffd4cf63495e0b
2
+ SHA256:
3
+ metadata.gz: b284e744d2f757d5493ff422214f54fd3247f50fc57cdcf3a64fe56f09c8cebe
4
+ data.tar.gz: c0468a5c9499fe9930d66efdba3519ea251963fdd07fa03b6cbd0ad2cebe28d6
5
5
  SHA512:
6
- metadata.gz: 53d8317d77b47588d0b049ae083aa4e261ac4983c6a047870f4dc4eb899c77fa3b1b32d2edbe1f4e23201bec197a6c171708b9a77710fde52bf78a5805a612f9
7
- data.tar.gz: d961f6dff0ebf22b0e8a326b08c7c20d555b9e2ce6aed4bae7e4b39c6922c512a1c3f04c2215371f55a13b461bc0d3836d5938a47e1bd65e2cb746877ef29655
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
- | Foreman Version | Plugin Version |
59
- | --------------- | --------------:|
60
- | >= 1.21.x | ~> 0.1.x |
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') };
@@ -2,25 +2,17 @@ module ForemanKubevirt
2
2
  module Concerns
3
3
  module Api
4
4
  module ComputeResourcesControllerExtensions
5
- module ApiPieExtensions
6
- extend ::Apipie::DSL::Concern
7
- update_api(:create, :update) do
8
- param :compute_resource, Hash do
9
- param :token, String, :desc => N_("Token for KubeVirt only")
10
- param :hostname, String, :desc => N_("Host name for KubeVirt only")
11
- param :namespace, String, :desc => N_("Namespace for KubeVirt only")
12
- param :ca_crt, String, :desc => N_("CA crt for KubeVirt only")
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
@@ -0,0 +1,8 @@
1
+ module ForemanKubevirt
2
+ module ComputeAttributeExtensions
3
+ extend ActiveSupport::Concern
4
+ included do
5
+ validates :vm_attrs, :volume => true
6
+ end
7
+ end
8
+ 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
- validate :test_connection
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(_options = {})
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
- errors[:base] << e.message
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(attr = {})
107
+ def new_volume(attrs = {})
85
108
  return unless new_volume_errors.empty?
86
-
87
- vol = Fog::Kubevirt::Compute::Volume.new(attr)
88
- vol.boot_order = 1 if attr[:bootable] == "on" || attr[:bootable] == "true"
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
- volumes = create_volumes_for_vm(options)
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].to_i / 2**20,
170
+ :memory_size => convert_memory(options[:memory] + "b", :mi).to_s,
171
+ :memory_unit => "Mi",
149
172
  :volumes => volumes,
150
- # :cloudinit => init,
173
+ :cloudinit => user_data,
151
174
  :networks => networks,
152
175
  :interfaces => interfaces)
153
176
  client.servers.get(options[:name])
154
- rescue Fog::Kubevirt::Errors::ClientError => e
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.any? { |_, v| v[:bootable] == "true" }
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 { |_, v| raise ::Foreman::Exception.new N_('Capacity was not found') if v[:capacity].empty? }
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.select { |_, v| v[:bootable] == "true" }.count > 1
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, :password, :label => _("Token"), :required => true,
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
- root_url: 'https://theforeman.org/plugins') %>
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>
@@ -20,8 +20,7 @@
20
20
  </tr>
21
21
  <tr>
22
22
  <td><%= _('Memory') %></td>
23
- <td><%= number_to_human_size @vm.memory %>
24
- </td>
23
+ <td><%= number_to_human_size @compute_resource.convert_memory_to_bytes(@vm.memory) %></td>
25
24
  </tr>
26
25
  <tr>
27
26
  <td><%= _('Namespace') %></td>
@@ -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
@@ -1,3 +1,3 @@
1
1
  module ForemanKubevirt
2
- VERSION = '0.1.2'.freeze
2
+ VERSION = '0.1.8'.freeze
3
3
  end
@@ -0,0 +1,5 @@
1
+ # Autogenerated!
2
+ _("Action with sub plans")
3
+ _("Import facts")
4
+ _("Import Puppet classes")
5
+ _("Remote action:")
@@ -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 ""