yao 0.18.0 → 0.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/yao/resources/aggregates.rb +3 -4
- data/lib/yao/resources/base.rb +28 -15
- data/lib/yao/resources/compute_services.rb +3 -0
- data/lib/yao/resources/floating_ip.rb +4 -0
- data/lib/yao/resources/loadbalancer.rb +4 -0
- data/lib/yao/resources/loadbalancer_healthmonitor.rb +4 -0
- data/lib/yao/resources/loadbalancer_listener.rb +4 -0
- data/lib/yao/resources/loadbalancer_pool.rb +4 -0
- data/lib/yao/resources/loadbalancer_pool_member.rb +4 -0
- data/lib/yao/resources/server.rb +66 -1
- data/lib/yao/version.rb +1 -1
- data/test/support/restfully_accesible_stub.rb +11 -0
- data/test/yao/resources/test_aggregates.rb +1 -1
- data/test/yao/resources/test_server.rb +95 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4995f4848c6b4d4fe74b39999648c0d1fe4cb473d086ea35017ad5d7611b07e3
|
4
|
+
data.tar.gz: 6fddaff2cd5e2118f7652559e7f3d3f36cceb03961c39c4e54d9cd940f6f733e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d3d72831ab303bac1453d3cfeda3e98f73554ebc3960d324cb4d701d4f15e59c0d90279c249e64bfc5b598e805b8f1b2647c21dbcf798845a38c8d7c9822ba76
|
7
|
+
data.tar.gz: 9c5b6ab144c089554c0c245ec93ecce895d14121447c7f70058cfa8e6e8682e71190a0c1d8776b89d6f0994183f40c8fd6df9de24e05a96ba162e88eac291c52
|
@@ -4,10 +4,9 @@ module Yao::Resources
|
|
4
4
|
class Aggregates < Base
|
5
5
|
friendly_attributes :availability_zone, :deleted, :hosts, :metadata, :name
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
end
|
7
|
+
map_attributes_to_time :created_at, :updated_at, :deleted_at
|
8
|
+
alias :created :created_at
|
9
|
+
alias :updated :updated_at
|
11
10
|
|
12
11
|
self.service = "compute"
|
13
12
|
self.resources_name = "aggregates"
|
data/lib/yao/resources/base.rb
CHANGED
@@ -4,9 +4,22 @@ require 'time'
|
|
4
4
|
module Yao::Resources
|
5
5
|
class Base
|
6
6
|
|
7
|
+
# @param name [String]
|
8
|
+
def self.add_instantiation_name_list(name)
|
9
|
+
@instantiation_list ||= []
|
10
|
+
@instantiation_list << name
|
11
|
+
end
|
12
|
+
|
13
|
+
# @param name [String]
|
14
|
+
# @return [bool]
|
15
|
+
def self.instantiation?(name)
|
16
|
+
@instantiation_list.include?(name)
|
17
|
+
end
|
18
|
+
|
7
19
|
# @param name [Array]
|
8
20
|
def self.friendly_attributes(*names)
|
9
21
|
names.map(&:to_s).each do |name|
|
22
|
+
add_instantiation_name_list(name)
|
10
23
|
define_method(name) do
|
11
24
|
self[name]
|
12
25
|
end
|
@@ -17,6 +30,7 @@ module Yao::Resources
|
|
17
30
|
# @return [Symbol]
|
18
31
|
def self.map_attribute_to_attribute(k_and_v)
|
19
32
|
as_json, as_method = *k_and_v.to_a.first.map(&:to_s)
|
33
|
+
add_instantiation_name_list(as_method)
|
20
34
|
define_method(as_method) do
|
21
35
|
self[as_json]
|
22
36
|
end
|
@@ -27,6 +41,7 @@ module Yao::Resources
|
|
27
41
|
def self.map_attribute_to_resource(k_and_v)
|
28
42
|
_name, klass = *k_and_v.to_a.first
|
29
43
|
name = _name.to_s
|
44
|
+
add_instantiation_name_list(name)
|
30
45
|
define_method(name) do
|
31
46
|
unless self[name].empty?
|
32
47
|
self[[name, klass].join("__")] ||= klass.new(self[name])
|
@@ -39,6 +54,7 @@ module Yao::Resources
|
|
39
54
|
def self.map_attribute_to_resources(k_and_v)
|
40
55
|
_name, klass = *k_and_v.to_a.first
|
41
56
|
name = _name.to_s
|
57
|
+
add_instantiation_name_list(name)
|
42
58
|
define_method(name) do
|
43
59
|
self[[name, klass].join("__")] ||= self[name].map {|d|
|
44
60
|
klass.new(d)
|
@@ -46,6 +62,17 @@ module Yao::Resources
|
|
46
62
|
end
|
47
63
|
end
|
48
64
|
|
65
|
+
# @param names [Array<Symbol>]
|
66
|
+
# @return [Symbol]
|
67
|
+
def self.map_attributes_to_time(*names)
|
68
|
+
names.map(&:to_s).each do |name|
|
69
|
+
add_instantiation_name_list(name)
|
70
|
+
define_method(name) do
|
71
|
+
Time.parse(self[name])
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
49
76
|
# @param data_via_json [Hash]
|
50
77
|
# @return [Hash]
|
51
78
|
def initialize(data_via_json)
|
@@ -55,7 +82,7 @@ module Yao::Resources
|
|
55
82
|
# @param name [String]
|
56
83
|
# @return [String]
|
57
84
|
def [](name)
|
58
|
-
|
85
|
+
if @data["id"] && !@data.key?(name) && self.class.instantiation?(name)
|
59
86
|
@data = self.class.get(@data["id"]).to_hash
|
60
87
|
end
|
61
88
|
@data[name]
|
@@ -78,20 +105,6 @@ module Yao::Resources
|
|
78
105
|
self["id"]
|
79
106
|
end
|
80
107
|
|
81
|
-
# @return [Date]
|
82
|
-
def created
|
83
|
-
if date = self["created_at"] || self["created"]
|
84
|
-
Time.parse(date)
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
# @return [Date]
|
89
|
-
def updated
|
90
|
-
if date = self["updated_at"] || self["updated"]
|
91
|
-
Time.parse(date)
|
92
|
-
end
|
93
|
-
end
|
94
|
-
|
95
108
|
# @param resource_params [Hash]
|
96
109
|
# @return [Yao::Resources::*]
|
97
110
|
def update(resource_params)
|
@@ -2,6 +2,9 @@ module Yao::Resources
|
|
2
2
|
class ComputeServices < Base
|
3
3
|
friendly_attributes :status, :binary, :host, :zone, :state, :disabled_reason, :forced_down
|
4
4
|
|
5
|
+
map_attributes_to_time :updated_at
|
6
|
+
alias :updated :updated_at
|
7
|
+
|
5
8
|
self.service = "compute"
|
6
9
|
self.resource_name = "service"
|
7
10
|
self.resources_name = "os-services"
|
@@ -10,6 +10,10 @@ module Yao::Resources
|
|
10
10
|
:floating_ip_address,
|
11
11
|
:status, :port_details, :tags, :port_forwardings
|
12
12
|
|
13
|
+
map_attributes_to_time :created_at, :updated_at
|
14
|
+
alias :created :created_at
|
15
|
+
alias :updated :updated_at
|
16
|
+
|
13
17
|
self.service = "network"
|
14
18
|
self.resource_name = "floatingip"
|
15
19
|
self.resources_name = "floatingips"
|
@@ -6,6 +6,10 @@ module Yao::Resources
|
|
6
6
|
map_attribute_to_resources listeners: LoadBalancerListener
|
7
7
|
map_attribute_to_resources pools: LoadBalancerPool
|
8
8
|
|
9
|
+
map_attributes_to_time :created_at, :updated_at
|
10
|
+
alias :created :created_at
|
11
|
+
alias :updated :updated_at
|
12
|
+
|
9
13
|
# @return [Yao::Resources::Tenant]
|
10
14
|
def project
|
11
15
|
if project_id = self["project_id"]
|
@@ -7,6 +7,10 @@ module Yao::Resources
|
|
7
7
|
|
8
8
|
map_attribute_to_resources pools: LoadBalancerListener
|
9
9
|
|
10
|
+
map_attributes_to_time :created_at, :updated_at
|
11
|
+
alias :created :created_at
|
12
|
+
alias :updated :updated_at
|
13
|
+
|
10
14
|
# @return [Date]
|
11
15
|
def created_at
|
12
16
|
Date.parse(self["created_at"])
|
@@ -8,6 +8,10 @@ module Yao::Resources
|
|
8
8
|
|
9
9
|
map_attribute_to_resources loadbalancers: LoadBalancer
|
10
10
|
|
11
|
+
map_attributes_to_time :created_at, :updated_at
|
12
|
+
alias :created :created_at
|
13
|
+
alias :updated :updated_at
|
14
|
+
|
11
15
|
# @return [Yao::Resources::Tenant]
|
12
16
|
def project
|
13
17
|
if project_id = self["project_id"]
|
@@ -7,6 +7,10 @@ module Yao::Resources
|
|
7
7
|
map_attribute_to_resources loadbalancers: LoadBalancer
|
8
8
|
map_attribute_to_resources listeners: LoadBalancerListener
|
9
9
|
|
10
|
+
map_attributes_to_time :created_at, :updated_at
|
11
|
+
alias :created :created_at
|
12
|
+
alias :updated :updated_at
|
13
|
+
|
10
14
|
# @return [Yao::Resources::LoadBalancerListener]
|
11
15
|
def listeners
|
12
16
|
@listeners ||= self["listeners"].map do |listener|
|
@@ -5,6 +5,10 @@ module Yao::Resources
|
|
5
5
|
:monitor_address, :address,
|
6
6
|
:protocol_port, :operating_status
|
7
7
|
|
8
|
+
map_attributes_to_time :created_at, :updated_at
|
9
|
+
alias :created :created_at
|
10
|
+
alias :updated :updated_at
|
11
|
+
|
8
12
|
# @return [Yao::Resources::Tenant]
|
9
13
|
def project
|
10
14
|
if project_id = self["project_id"]
|
data/lib/yao/resources/server.rb
CHANGED
@@ -20,6 +20,10 @@ module Yao::Resources
|
|
20
20
|
map_attribute_to_attribute 'OS-EXT-STS:task_state' => :ext_sts_task_state
|
21
21
|
map_attribute_to_attribute 'OS-EXT-STS:vm_state' => :ext_sts_vm_state
|
22
22
|
|
23
|
+
map_attributes_to_time :created, :updated
|
24
|
+
alias :created_at :created
|
25
|
+
alias :updated_at :updated
|
26
|
+
|
23
27
|
self.service = "compute"
|
24
28
|
self.resource_name = "server"
|
25
29
|
self.resources_name = "servers"
|
@@ -43,6 +47,52 @@ module Yao::Resources
|
|
43
47
|
action(id, "os-start" => nil)
|
44
48
|
end
|
45
49
|
|
50
|
+
# @return [Hash]
|
51
|
+
def start
|
52
|
+
self.class.start(id)
|
53
|
+
end
|
54
|
+
|
55
|
+
# @return [Hash]
|
56
|
+
def shutoff
|
57
|
+
self.class.shutoff(id)
|
58
|
+
end
|
59
|
+
alias :stop :shutoff
|
60
|
+
|
61
|
+
# @return [Hash]
|
62
|
+
def reboot
|
63
|
+
self.class.reboot(id)
|
64
|
+
end
|
65
|
+
|
66
|
+
# @return [Hash]
|
67
|
+
def resize(flavor_id)
|
68
|
+
self.class.resize(id, flavor_id)
|
69
|
+
end
|
70
|
+
|
71
|
+
# @param id [String]
|
72
|
+
# @param host [String]
|
73
|
+
# @param block_migration [Boolean]
|
74
|
+
# @param disk_over_commit [Boolean]
|
75
|
+
# @param opts [Hash]
|
76
|
+
# @return [Hash]
|
77
|
+
def live_migrate(host = nil, block_migration = false, disk_over_commit = false, opts = {})
|
78
|
+
self.class.live_migrate(id, host, block_migration, disk_over_commit, opts)
|
79
|
+
end
|
80
|
+
|
81
|
+
# @return [Hash]
|
82
|
+
def add_security_group(sg_name)
|
83
|
+
self.class.add_security_group(id, sg_name)
|
84
|
+
end
|
85
|
+
|
86
|
+
# @return [Hash]
|
87
|
+
def remove_security_group(sg_name)
|
88
|
+
self.class.remove_security_group(id, sg_name)
|
89
|
+
end
|
90
|
+
|
91
|
+
# @return [Hash]
|
92
|
+
def get_vnc_console
|
93
|
+
self.class.get_vnc_console(id)
|
94
|
+
end
|
95
|
+
|
46
96
|
# @param id [String]
|
47
97
|
# @return [Hash]
|
48
98
|
def self.shutoff(id)
|
@@ -62,6 +112,21 @@ module Yao::Resources
|
|
62
112
|
action(id,"resize" => { "flavorRef" => flavor_id })
|
63
113
|
end
|
64
114
|
|
115
|
+
# @param id [String]
|
116
|
+
# @param host [String]
|
117
|
+
# @param block_migration [Boolean]
|
118
|
+
# @param disk_over_commit [Boolean]
|
119
|
+
# @param opts [Hash]
|
120
|
+
# @return [Hash]
|
121
|
+
def self.live_migrate(id, host = nil, block_migration = false, disk_over_commit = false, opts ={})
|
122
|
+
query = {
|
123
|
+
"host" => host,
|
124
|
+
"block_migration" => block_migration,
|
125
|
+
"disk_over_commit" => disk_over_commit,
|
126
|
+
}.merge(opts)
|
127
|
+
action(id, "os-migrateLive" => query)
|
128
|
+
end
|
129
|
+
|
65
130
|
# @param id [String]
|
66
131
|
# @param sg_name [String]
|
67
132
|
# @return [Hash]
|
@@ -77,7 +142,7 @@ module Yao::Resources
|
|
77
142
|
end
|
78
143
|
|
79
144
|
# @param id [String]
|
80
|
-
# @return [
|
145
|
+
# @return [String]
|
81
146
|
def self.get_vnc_console(id)
|
82
147
|
response = action(id, {"os-getVNCConsole": {"type": "novnc"}})
|
83
148
|
response.dig("console", "url")
|
data/lib/yao/version.rb
CHANGED
@@ -40,6 +40,17 @@ module RestfullyAccessibleStub
|
|
40
40
|
)
|
41
41
|
end
|
42
42
|
|
43
|
+
def stub_post_request(url, body, response = {})
|
44
|
+
stub_request(:post,url)
|
45
|
+
.with(
|
46
|
+
headers: request_headers
|
47
|
+
).to_return(
|
48
|
+
status: 202,
|
49
|
+
headers: {'Content-Type' => 'application/json'},
|
50
|
+
body: response.to_json
|
51
|
+
)
|
52
|
+
end
|
53
|
+
|
43
54
|
def request_headers
|
44
55
|
{'Accept'=>'application/json', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'User-Agent'=>"Yao/#{Yao::VERSION} Faraday/#{Faraday::VERSION}"}
|
45
56
|
end
|
@@ -19,6 +19,6 @@ class TestAggregates < TestYaoResource
|
|
19
19
|
assert_equal("nova", aggregates.name)
|
20
20
|
assert_equal(Time.parse("2015-08-27T09:49:58-05:00"), aggregates.created)
|
21
21
|
assert_equal(Time.parse("2015-08-27T09:49:58-05:00"), aggregates.updated)
|
22
|
-
assert_equal(
|
22
|
+
assert_equal(Time.parse("2015-08-27T09:49:58-05:00"), aggregates.deleted_at)
|
23
23
|
end
|
24
24
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
class TestServer < TestYaoResource
|
2
|
+
include RestfullyAccessibleStub
|
2
3
|
|
3
4
|
def test_server
|
4
5
|
|
@@ -273,4 +274,98 @@ class TestServer < TestYaoResource
|
|
273
274
|
assert_equal(0, ports.size)
|
274
275
|
assert_requested(stub)
|
275
276
|
end
|
277
|
+
|
278
|
+
def test_start
|
279
|
+
server_id = '2ce4c5b3-2866-4972-93ce-77a2ea46a7f9'
|
280
|
+
stub = stub_post_request(
|
281
|
+
"https://example.com:12345/servers/#{server_id}/action",
|
282
|
+
[{"os-start": nil}]
|
283
|
+
)
|
284
|
+
|
285
|
+
Yao::Server.new('id' => server_id).start
|
286
|
+
assert_requested(stub)
|
287
|
+
end
|
288
|
+
|
289
|
+
def test_shutoff
|
290
|
+
server_id = '2ce4c5b3-2866-4972-93ce-77a2ea46a7f9'
|
291
|
+
stub = stub_post_request(
|
292
|
+
"https://example.com:12345/servers/#{server_id}/action",
|
293
|
+
[{"os-stop": nil}]
|
294
|
+
)
|
295
|
+
|
296
|
+
Yao::Server.new('id' => server_id).stop
|
297
|
+
assert_requested(stub)
|
298
|
+
assert_equal(Yao::Server.method(:stop), Yao::Server.method(:shutoff))
|
299
|
+
end
|
300
|
+
|
301
|
+
def test_reboot
|
302
|
+
server_id = '2ce4c5b3-2866-4972-93ce-77a2ea46a7f9'
|
303
|
+
stub = stub_post_request(
|
304
|
+
"https://example.com:12345/servers/#{server_id}/action",
|
305
|
+
[{"reboot": { "type" => "HARD" }}]
|
306
|
+
)
|
307
|
+
|
308
|
+
Yao::Server.new('id' => server_id).reboot
|
309
|
+
assert_requested(stub)
|
310
|
+
end
|
311
|
+
|
312
|
+
def test_resize
|
313
|
+
server_id = '2ce4c5b3-2866-4972-93ce-77a2ea46a7f9'
|
314
|
+
stub = stub_post_request(
|
315
|
+
"https://example.com:12345/servers/#{server_id}/action",
|
316
|
+
[{"resize": { "flavorRef": "test-flavor" }}]
|
317
|
+
)
|
318
|
+
|
319
|
+
Yao::Server.new('id' => server_id).resize("test-flavor")
|
320
|
+
assert_requested(stub)
|
321
|
+
end
|
322
|
+
|
323
|
+
def test_live_migrate
|
324
|
+
server_id = '2ce4c5b3-2866-4972-93ce-77a2ea46a7f9'
|
325
|
+
stub = stub_post_request(
|
326
|
+
"https://example.com:12345/servers/#{server_id}/action",
|
327
|
+
[{"os-migrateLive": {
|
328
|
+
"host": "test-node-1",
|
329
|
+
"block_migration": false,
|
330
|
+
"disk_over_commit": false
|
331
|
+
}}]
|
332
|
+
)
|
333
|
+
|
334
|
+
Yao::Server.new('id' => server_id).live_migrate("test-node-1", false, false)
|
335
|
+
assert_requested(stub)
|
336
|
+
end
|
337
|
+
|
338
|
+
def test_add_security_group
|
339
|
+
server_id = '2ce4c5b3-2866-4972-93ce-77a2ea46a7f9'
|
340
|
+
stub = stub_post_request(
|
341
|
+
"https://example.com:12345/servers/#{server_id}/action",
|
342
|
+
[{"addSecurityGroup": { "name": "test-sg" }}]
|
343
|
+
)
|
344
|
+
|
345
|
+
Yao::Server.new('id' => server_id).add_security_group("test-sg")
|
346
|
+
assert_requested(stub)
|
347
|
+
end
|
348
|
+
|
349
|
+
def test_remove_security_group
|
350
|
+
server_id = '2ce4c5b3-2866-4972-93ce-77a2ea46a7f9'
|
351
|
+
stub = stub_post_request(
|
352
|
+
"https://example.com:12345/servers/#{server_id}/action",
|
353
|
+
[{"removeSecurityGroup": { "name": "test-sg" }}]
|
354
|
+
)
|
355
|
+
|
356
|
+
Yao::Server.new('id' => server_id).remove_security_group("test-sg")
|
357
|
+
assert_requested(stub)
|
358
|
+
end
|
359
|
+
|
360
|
+
def test_get_vnc_concolse
|
361
|
+
server_id = '2ce4c5b3-2866-4972-93ce-77a2ea46a7f9'
|
362
|
+
stub = stub_post_request(
|
363
|
+
"https://example.com:12345/servers/#{server_id}/action",
|
364
|
+
[{"os-getVNCConsole": { "type": "novnc" }}],
|
365
|
+
{"console": { "url": "https://example.com/vnc" }}
|
366
|
+
)
|
367
|
+
|
368
|
+
Yao::Server.new('id' => server_id).get_vnc_console
|
369
|
+
assert_requested(stub)
|
370
|
+
end
|
276
371
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: yao
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.19.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Uchio, KONDO
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-05-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json
|