fog-kubevirt 1.1.0 → 1.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/fog/kubevirt/compute/compute.rb +50 -1
- data/lib/fog/kubevirt/compute/models/vm_data.rb +12 -7
- data/lib/fog/kubevirt/compute/models/volume.rb +0 -1
- data/lib/fog/kubevirt/compute/requests/get_vm.rb +84 -1
- data/lib/fog/kubevirt/compute/requests/get_vminstance.rb +106 -41
- data/lib/fog/kubevirt/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '0943d37da16b3d47be971ecd55a253508275a834'
|
4
|
+
data.tar.gz: f8b23b0d7c2ef8ef6769e5f9318b4efc8b80c07a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2fbdd1c0d3aaccba43a1f3270dc0fe2eeadb0b90f3dfe30df2442b16866bc2211913096b0b52d1d5022905362cb2e80cd79b2ff4f431817d2fa201eafbf9ad8e
|
7
|
+
data.tar.gz: 50a64408a54c66330c31e6c9b74db16eb70c16dbaf3bd45496e8fd705d85079267c7171a1370f1deeed169f3cd511ab7197aa5afb7cb370c6c12b1df0c3a28f8
|
@@ -7,7 +7,8 @@ require "fog/core"
|
|
7
7
|
module Fog
|
8
8
|
module Kubevirt
|
9
9
|
class Compute < Fog::Service
|
10
|
-
recognizes :kubevirt_token, :kubevirt_hostname, :kubevirt_port, :kubevirt_namespace,
|
10
|
+
recognizes :kubevirt_token, :kubevirt_hostname, :kubevirt_port, :kubevirt_namespace, \
|
11
|
+
:kubevirt_log, :kubevirt_verify_ssl, :kubevirt_ca_cert
|
11
12
|
|
12
13
|
model_path 'fog/kubevirt/compute/models'
|
13
14
|
model :vminstance
|
@@ -191,6 +192,12 @@ module Fog
|
|
191
192
|
@log ||= ::Logger.new(STDOUT)
|
192
193
|
|
193
194
|
@namespace = options[:kubevirt_namespace] || 'default'
|
195
|
+
@opts = {
|
196
|
+
:ssl_options => obtain_ssl_options(options),
|
197
|
+
:auth_options => {
|
198
|
+
:bearer_token => @kubevirt_token
|
199
|
+
}
|
200
|
+
}
|
194
201
|
|
195
202
|
# Kubeclient needs different client objects for different API groups. We will keep in this hash the
|
196
203
|
# client objects, indexed by API path/version.
|
@@ -211,6 +218,13 @@ module Fog
|
|
211
218
|
end
|
212
219
|
|
213
220
|
def valid?
|
221
|
+
begin
|
222
|
+
kube_client.get_namespace(namespace)
|
223
|
+
rescue => err
|
224
|
+
@log.warn("The namespace [#{namespace}] does not exist on the kubernetes cluster: #{err.message}")
|
225
|
+
raise "The namespace '#{namespace}' does not exist on the kubernetes cluster"
|
226
|
+
end
|
227
|
+
|
214
228
|
kube_client.api_valid?
|
215
229
|
end
|
216
230
|
|
@@ -466,6 +480,41 @@ module Fog
|
|
466
480
|
def log
|
467
481
|
@log
|
468
482
|
end
|
483
|
+
|
484
|
+
#
|
485
|
+
# Prepare the TLS and authentication options that will be used for the
|
486
|
+
# standard Kubernetes API and also for the KubeVirt extension
|
487
|
+
#
|
488
|
+
# @param options [Hash] a hash with connection options
|
489
|
+
#
|
490
|
+
def obtain_ssl_options(options)
|
491
|
+
verify_ssl = options[:kubevirt_verify_ssl]
|
492
|
+
if verify_ssl == true
|
493
|
+
ca = options[:kubevirt_ca_cert] || ""
|
494
|
+
ca = IO.read(ca) if File.file?(ca)
|
495
|
+
certs = ca.split(/(?=-----BEGIN)/).reject(&:empty?).collect do |pem|
|
496
|
+
OpenSSL::X509::Certificate.new(pem)
|
497
|
+
end
|
498
|
+
|
499
|
+
cert_store = OpenSSL::X509::Store.new
|
500
|
+
certs.each do |cert|
|
501
|
+
cert_store.add_cert(cert)
|
502
|
+
end
|
503
|
+
|
504
|
+
ssl_options = {
|
505
|
+
:verify_ssl => OpenSSL::SSL::VERIFY_PEER,
|
506
|
+
:cert_store => cert_store
|
507
|
+
}
|
508
|
+
elsif verify_ssl == false || verify_ssl.to_s.empty?
|
509
|
+
ssl_options = {
|
510
|
+
:verify_ssl => OpenSSL::SSL::VERIFY_NONE
|
511
|
+
}
|
512
|
+
else
|
513
|
+
ssl_options = {
|
514
|
+
:verify_ssl => verify_ssl
|
515
|
+
}
|
516
|
+
end
|
517
|
+
end
|
469
518
|
end
|
470
519
|
|
471
520
|
class Mock
|
@@ -134,14 +134,19 @@ module Fog
|
|
134
134
|
volumes
|
135
135
|
end
|
136
136
|
|
137
|
-
class VmNic
|
138
|
-
attr_accessor :name
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
137
|
+
class VmNic < Fog::Model
|
138
|
+
attr_accessor :name
|
139
|
+
|
140
|
+
attribute :mac_address
|
141
|
+
attribute :type # values: bridge, slirp
|
142
|
+
attribute :model
|
143
|
+
attribute :ports
|
144
|
+
attribute :boot_order
|
144
145
|
alias :mac :mac_address
|
146
|
+
|
147
|
+
def persisted?
|
148
|
+
!name.nil?
|
149
|
+
end
|
145
150
|
end
|
146
151
|
|
147
152
|
class VmNetwork
|
@@ -12,11 +12,94 @@ module Fog
|
|
12
12
|
end
|
13
13
|
|
14
14
|
class Mock
|
15
|
-
# TODO provide implementation
|
16
15
|
def get_vm(name)
|
16
|
+
Vm.parse get_raw_vm(name)
|
17
17
|
end
|
18
18
|
|
19
19
|
def get_raw_vm(name)
|
20
|
+
{
|
21
|
+
:apiVersion=>"kubevirt.io/v1alpha3",
|
22
|
+
:kind=>"VirtualMachine",
|
23
|
+
:metadata=>{
|
24
|
+
:creationTimestamp=>"2019-04-02T13:28:47Z",
|
25
|
+
:generation=>1,
|
26
|
+
:labels=>{
|
27
|
+
:special=>"vm-multus-multiple-net"
|
28
|
+
},
|
29
|
+
:name=>"vm-multus-multiple-net",
|
30
|
+
:namespace=>"default",
|
31
|
+
:resourceVersion=>"24453",
|
32
|
+
:selfLink=>"/apis/kubevirt.io/v1alpha3/namespaces/default/virtualmachines/vm-multus-multiple-net",
|
33
|
+
:uid=>"3e959de9-554b-11e9-a3d6-525500d15501"
|
34
|
+
},
|
35
|
+
:spec=>{
|
36
|
+
:running=>false,
|
37
|
+
:template=>{
|
38
|
+
:metadata=>{
|
39
|
+
:labels=>{
|
40
|
+
:"kubevirt.io/vm"=>"vm-multus-multiple-net"
|
41
|
+
}
|
42
|
+
},
|
43
|
+
:spec=>{
|
44
|
+
:domain=>{
|
45
|
+
:devices=>{
|
46
|
+
:disks=>[
|
47
|
+
{
|
48
|
+
:disk=>{:bus=>"virtio"},
|
49
|
+
:name=>"containerdisk"
|
50
|
+
},
|
51
|
+
{
|
52
|
+
:disk=>{:bus=>"virtio"},
|
53
|
+
:name=>"cloudinitdisk"
|
54
|
+
}
|
55
|
+
],
|
56
|
+
:interfaces=>[
|
57
|
+
{
|
58
|
+
:bridge=>{},
|
59
|
+
:name=>"default"
|
60
|
+
},
|
61
|
+
{
|
62
|
+
:bridge=>{},
|
63
|
+
:name=>"ptp"
|
64
|
+
}
|
65
|
+
]
|
66
|
+
},
|
67
|
+
:machine=>{
|
68
|
+
:type=>""
|
69
|
+
},
|
70
|
+
:resources=>{
|
71
|
+
:requests=>{
|
72
|
+
:memory=>"1024M"
|
73
|
+
}
|
74
|
+
}
|
75
|
+
},
|
76
|
+
:networks=>[
|
77
|
+
{
|
78
|
+
:name=>"default",
|
79
|
+
:pod=>{}
|
80
|
+
},
|
81
|
+
{
|
82
|
+
:multus=>{
|
83
|
+
:networkName=>"ptp-conf"
|
84
|
+
},
|
85
|
+
:name=>"ptp"
|
86
|
+
}
|
87
|
+
],
|
88
|
+
:terminationGracePeriodSeconds=>0,
|
89
|
+
:volumes=>[
|
90
|
+
{
|
91
|
+
:containerDisk=>{:image=>"registry:5000/kubevirt/fedora-cloud-container-disk-demo:devel"},
|
92
|
+
:name=>"containerdisk"
|
93
|
+
},
|
94
|
+
{
|
95
|
+
:cloudInitNoCloud=>{:userData=>"#!/bin/bash\necho \"fedora\" |passwd fedora --stdin\ndhclient eth1\n"},
|
96
|
+
:name=>"cloudinitdisk"
|
97
|
+
}
|
98
|
+
]
|
99
|
+
}
|
100
|
+
}
|
101
|
+
}
|
102
|
+
}
|
20
103
|
end
|
21
104
|
end
|
22
105
|
end
|
@@ -12,47 +12,112 @@ module Fog
|
|
12
12
|
|
13
13
|
class Mock
|
14
14
|
def get_vminstance(name)
|
15
|
-
vm = {
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
15
|
+
vm = {
|
16
|
+
:apiVersion=>"kubevirt.io/v1alpha3",
|
17
|
+
:kind=>"VirtualMachineInstance",
|
18
|
+
:metadata=>{
|
19
|
+
:creationTimestamp=>"2019-04-02T13:46:08Z",
|
20
|
+
:finalizers=>["foregroundDeleteVirtualMachine"],
|
21
|
+
:generation=>7,
|
22
|
+
:labels=>{
|
23
|
+
:"kubevirt.io/nodeName"=>"node02",
|
24
|
+
:special=>"vmi-multus-multiple-net"
|
25
|
+
},
|
26
|
+
:name=>"vmi-multus-multiple-net",
|
27
|
+
:namespace=>"default",
|
28
|
+
:resourceVersion=>"27047",
|
29
|
+
:selfLink=>"/apis/kubevirt.io/v1alpha3/namespaces/default/virtualmachineinstances/vmi-multus-multiple-net",
|
30
|
+
:uid=>"ab5e450c-554d-11e9-a3d6-525500d15501"
|
31
|
+
},
|
32
|
+
:spec=>{
|
33
|
+
:domain=>{
|
34
|
+
:devices=>{
|
35
|
+
:disks=>[
|
36
|
+
{
|
37
|
+
:disk=>{:bus=>"virtio"},
|
38
|
+
:name=>"containerdisk"
|
39
|
+
},
|
40
|
+
{
|
41
|
+
:disk=>{:bus=>"virtio"},
|
42
|
+
:name=>"cloudinitdisk"
|
43
|
+
}
|
44
|
+
],
|
45
|
+
:interfaces=>[
|
46
|
+
{
|
47
|
+
:bridge=>{},
|
48
|
+
:name=>"default"
|
49
|
+
},
|
50
|
+
{
|
51
|
+
:bridge=>{},
|
52
|
+
:name=>"ptp"
|
53
|
+
}
|
54
|
+
]
|
55
|
+
},
|
56
|
+
:features=>{
|
57
|
+
:acpi=>{:enabled=>true}
|
58
|
+
},
|
59
|
+
:firmware=>{:uuid=>"ff1ff019-c799-400f-9be1-375c3cee8b59"},
|
60
|
+
:machine=>{:type=>"q35"},
|
61
|
+
:resources=>{
|
62
|
+
:requests=>{
|
63
|
+
:memory=>"1024M"
|
64
|
+
}
|
65
|
+
}
|
66
|
+
},
|
67
|
+
:networks=>[
|
68
|
+
{
|
69
|
+
:name=>"default",
|
70
|
+
:pod=>{}
|
71
|
+
},
|
72
|
+
{
|
73
|
+
:multus=>{:networkName=>"ptp-conf"},
|
74
|
+
:name=>"ptp"
|
75
|
+
}
|
76
|
+
],
|
77
|
+
:terminationGracePeriodSeconds=>0,
|
78
|
+
:volumes=>[
|
79
|
+
{
|
80
|
+
:containerDisk=>{:image=>"registry:5000/kubevirt/fedora-cloud-container-disk-demo:devel"},
|
81
|
+
:name=>"containerdisk"
|
82
|
+
},
|
83
|
+
{
|
84
|
+
:cloudInitNoCloud=>{:userData=>"#!/bin/bash\necho \"fedora\" |passwd fedora --stdin\ndhclient eth1\n"},
|
85
|
+
:name=>"cloudinitdisk"
|
86
|
+
}
|
87
|
+
]
|
88
|
+
},
|
89
|
+
:status=>{
|
90
|
+
:conditions=>[
|
91
|
+
{
|
92
|
+
:lastProbeTime=>nil,
|
93
|
+
:lastTransitionTime=>nil,
|
94
|
+
:status=>"True",
|
95
|
+
:type=>"LiveMigratable"
|
96
|
+
},
|
97
|
+
{
|
98
|
+
:lastProbeTime=>nil,
|
99
|
+
:lastTransitionTime=>"2019-04-02T13:46:24Z",
|
100
|
+
:status=>"True",
|
101
|
+
:type=>"Ready"
|
102
|
+
}
|
103
|
+
],
|
104
|
+
:interfaces=>[
|
105
|
+
{
|
106
|
+
:ipAddress=>"10.244.1.14",
|
107
|
+
:mac=>"0e:fc:6c:c3:20:ec",
|
108
|
+
:name=>"default"
|
109
|
+
},
|
110
|
+
{
|
111
|
+
:mac=>"4a:90:1c:2e:fe:d7",
|
112
|
+
:name=>"ptp"
|
113
|
+
}
|
114
|
+
],
|
115
|
+
:migrationMethod=>"BlockMigration",
|
116
|
+
:nodeName=>"node02",
|
117
|
+
:phase=>"Running"
|
118
|
+
}
|
119
|
+
}
|
120
|
+
Vminstance.parse object_to_hash(vm)
|
56
121
|
end
|
57
122
|
end
|
58
123
|
end
|
data/lib/fog/kubevirt/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fog-kubevirt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Piotr Kliczewski
|
@@ -13,7 +13,7 @@ authors:
|
|
13
13
|
autorequire:
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
|
-
date: 2019-04-
|
16
|
+
date: 2019-04-04 00:00:00.000000000 Z
|
17
17
|
dependencies:
|
18
18
|
- !ruby/object:Gem::Dependency
|
19
19
|
name: minitest
|