yao 0.3.8 → 0.4.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/.travis.yml +6 -3
- data/README.md +1 -1
- data/lib/yao/error.rb +1 -0
- data/lib/yao/resources/hypervisor.rb +27 -0
- data/lib/yao/resources/restfully_accessible.rb +17 -3
- data/lib/yao/version.rb +1 -1
- data/test/config.rb +1 -0
- data/test/support/restfully_accesible_stub.rb +25 -0
- data/test/yao/resources/test_hypervisor.rb +76 -2
- data/test/yao/resources/test_restfully_accessible.rb +55 -12
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 36f84d89c695aac876fb180e51240cfd7740290d9b0c75b3b3450feeac21c569
|
4
|
+
data.tar.gz: 573a38f087cdd5916099693ecf6592cfae29db2a3bbdfedba6f8957a05c64f85
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7ebf7fb5a5256b23591caa47658f7ba1bfaad61217263ac01a171a5729cf3f39617704ed8297abaaded036ddb0da417a6bf01b2d97d0eac71acfe5f565368136
|
7
|
+
data.tar.gz: 1df8f5ae479134251c0c8484a34ceffe2ea792d70e741521bceba9736aa5c72731e86f789554bc087db5628ded10f047bb59d3aee03f30f8cddd8f5942a059b1
|
data/.travis.yml
CHANGED
@@ -1,11 +1,14 @@
|
|
1
1
|
language: ruby
|
2
2
|
|
3
3
|
rvm:
|
4
|
-
- 2.
|
5
|
-
- 2.
|
6
|
-
- 2.
|
4
|
+
- 2.3.7
|
5
|
+
- 2.4.4
|
6
|
+
- 2.5.1
|
7
7
|
- ruby-head
|
8
8
|
|
9
|
+
before_install:
|
10
|
+
- gem update --system --no-document
|
11
|
+
- gem i bundler --no-document
|
9
12
|
install: bundle install --path vendor/bundle
|
10
13
|
|
11
14
|
cache:
|
data/README.md
CHANGED
@@ -62,7 +62,7 @@ end
|
|
62
62
|
|
63
63
|
YAO supports rubies which are supported by Ruby Core Team. Please look into [`.travis.yml`](./.travis.yml) 's directive.
|
64
64
|
|
65
|
-
If you want to use YAO's full functionality, e.g Ruby 2.
|
65
|
+
If you want to use YAO's full functionality, e.g Ruby 2.3 or below, please create an issue or a PR first (PR Recommended ;) ).
|
66
66
|
|
67
67
|
## Pro tips
|
68
68
|
|
data/lib/yao/error.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'ostruct'
|
2
|
+
|
1
3
|
module Yao::Resources
|
2
4
|
class Hypervisor < Base
|
3
5
|
friendly_attributes :hypervisor_hostname, :hypervisor_type, :hypervisor_version, :running_vms, :current_workload,
|
@@ -20,5 +22,30 @@ module Yao::Resources
|
|
20
22
|
self.service = "compute"
|
21
23
|
self.resource_name = "os-hypervisor"
|
22
24
|
self.resources_name = "os-hypervisors"
|
25
|
+
|
26
|
+
class << self
|
27
|
+
def list_detail(query={})
|
28
|
+
return_resources(
|
29
|
+
resources_from_json(
|
30
|
+
GET([resources_path, "detail"].join("/"), query).body
|
31
|
+
)
|
32
|
+
)
|
33
|
+
end
|
34
|
+
|
35
|
+
def statistics
|
36
|
+
json = GET([resources_path, "statistics"].join("/")).body
|
37
|
+
Yao::Resources::Hypervisor::Statistics.new(json["hypervisor_statistics"])
|
38
|
+
end
|
39
|
+
|
40
|
+
def uptime(id)
|
41
|
+
res = resource_from_json(
|
42
|
+
GET([resources_path, id, "uptime"].join("/")).body
|
43
|
+
)
|
44
|
+
Yao::Resources::Hypervisor::Uptime.new(res)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
class Statistics < OpenStruct; end
|
49
|
+
class Uptime < OpenStruct; end
|
23
50
|
end
|
24
51
|
end
|
@@ -85,13 +85,14 @@ module Yao::Resources
|
|
85
85
|
end
|
86
86
|
|
87
87
|
def get(id_or_name_or_permalink, query={})
|
88
|
-
res = if id_or_name_or_permalink
|
89
|
-
GET(
|
88
|
+
res = if id_or_name_or_permalink.start_with?("http://", "https://")
|
89
|
+
GET(id_or_name_or_permalink, query)
|
90
90
|
elsif uuid?(id_or_name_or_permalink)
|
91
91
|
GET([resources_path, id_or_name_or_permalink].join("/"), query)
|
92
92
|
else
|
93
|
-
|
93
|
+
get_by_name(id_or_name_or_permalink, query)
|
94
94
|
end
|
95
|
+
|
95
96
|
return_resource(resource_from_json(res.body))
|
96
97
|
end
|
97
98
|
alias find get
|
@@ -152,5 +153,18 @@ module Yao::Resources
|
|
152
153
|
def uuid?(str)
|
153
154
|
/^[\da-f]{8}-([\da-f]{4}-){3}[\da-f]{12}$/ === str
|
154
155
|
end
|
156
|
+
|
157
|
+
def get_by_name(name, query={})
|
158
|
+
# At first, search by ID. If nothing is found, search by name.
|
159
|
+
begin
|
160
|
+
GET([resources_path, name].join("/"), query)
|
161
|
+
rescue Yao::ItemNotFound
|
162
|
+
item = find_by_name(name)
|
163
|
+
if item.size > 1
|
164
|
+
raise Yao::TooManyItemFonud.new("More than one resource exists with the name '#{name}'")
|
165
|
+
end
|
166
|
+
GET([resources_path, item.first.id].join("/"), query)
|
167
|
+
end
|
168
|
+
end
|
155
169
|
end
|
156
170
|
end
|
data/lib/yao/version.rb
CHANGED
data/test/config.rb
CHANGED
@@ -0,0 +1,25 @@
|
|
1
|
+
module RestfullAccessibleStub
|
2
|
+
def stub_get_request(url, resource_name)
|
3
|
+
stub_request(:get, url)
|
4
|
+
.with(
|
5
|
+
headers: request_headers
|
6
|
+
).to_return(
|
7
|
+
status: 200,
|
8
|
+
body: %Q[{#{resource_name}: "dummy"}]
|
9
|
+
)
|
10
|
+
end
|
11
|
+
|
12
|
+
def stub_get_request_not_found(url)
|
13
|
+
stub_request(:get, url)
|
14
|
+
.with(
|
15
|
+
headers: request_headers
|
16
|
+
).to_return(
|
17
|
+
status: 404,
|
18
|
+
body: "itemNotFound"
|
19
|
+
)
|
20
|
+
end
|
21
|
+
|
22
|
+
def request_headers
|
23
|
+
{'Accept'=>'application/json', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'User-Agent'=>'Faraday v0.12.2'}
|
24
|
+
end
|
25
|
+
end
|
@@ -1,5 +1,3 @@
|
|
1
|
-
require "time"
|
2
|
-
|
3
1
|
class TestHypervisor < Test::Unit::TestCase
|
4
2
|
def test_hypervisor
|
5
3
|
params = {
|
@@ -9,4 +7,80 @@ class TestHypervisor < Test::Unit::TestCase
|
|
9
7
|
host = Yao::Hypervisor.new(params)
|
10
8
|
assert_equal(host.enabled?, true)
|
11
9
|
end
|
10
|
+
|
11
|
+
def setup
|
12
|
+
Yao.default_client.pool["compute"] = Yao::Client.gen_client("https://example.com:12345")
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_list_detail
|
16
|
+
stub_request(:get, "https://example.com:12345/os-hypervisors/detail")
|
17
|
+
.with(headers: {'Accept'=>'application/json', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'User-Agent'=>'Faraday v0.12.2'})
|
18
|
+
.to_return(
|
19
|
+
status: 200,
|
20
|
+
body: <<-JSON,
|
21
|
+
{
|
22
|
+
"hypervisors": [{
|
23
|
+
"id": "dummy"
|
24
|
+
}]
|
25
|
+
}
|
26
|
+
JSON
|
27
|
+
headers: {'Content-Type' => 'application/json'}
|
28
|
+
)
|
29
|
+
|
30
|
+
h = Yao::Resources::Hypervisor.list_detail
|
31
|
+
assert_equal(h.first.id, "dummy")
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_statistics
|
35
|
+
stub_request(:get, "https://example.com:12345/os-hypervisors/statistics")
|
36
|
+
.with(headers: {'Accept'=>'application/json', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'User-Agent'=>'Faraday v0.12.2'})
|
37
|
+
.to_return(
|
38
|
+
status: 200,
|
39
|
+
body: <<-JSON,
|
40
|
+
{
|
41
|
+
"hypervisor_statistics": {
|
42
|
+
"count": 1,
|
43
|
+
"current_workload": 0,
|
44
|
+
"disk_available_least": 0,
|
45
|
+
"free_disk_gb": 1028,
|
46
|
+
"free_ram_mb": 7680,
|
47
|
+
"local_gb": 1028,
|
48
|
+
"local_gb_used": 0,
|
49
|
+
"memory_mb": 8192,
|
50
|
+
"memory_mb_used": 512,
|
51
|
+
"running_vms": 0,
|
52
|
+
"vcpus": 2,
|
53
|
+
"vcpus_used": 0
|
54
|
+
}
|
55
|
+
}
|
56
|
+
JSON
|
57
|
+
headers: {'Content-Type' => 'application/json'}
|
58
|
+
)
|
59
|
+
|
60
|
+
s = Yao::Resources::Hypervisor.statistics
|
61
|
+
assert_equal(s.count, 1)
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_uptime
|
65
|
+
stub_request(:get, "https://example.com:12345/os-hypervisors/1/uptime")
|
66
|
+
.with(headers: {'Accept'=>'application/json', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'User-Agent'=>'Faraday v0.12.2'})
|
67
|
+
.to_return(
|
68
|
+
status: 200,
|
69
|
+
body: <<-JSON,
|
70
|
+
{
|
71
|
+
"hypervisor": {
|
72
|
+
"hypervisor_hostname": "fake-mini",
|
73
|
+
"id": 1,
|
74
|
+
"state": "up",
|
75
|
+
"status": "enabled",
|
76
|
+
"uptime": " 08:32:11 up 93 days, 18:25, 12 users, load average: 0.20, 0.12, 0.14"
|
77
|
+
}
|
78
|
+
}
|
79
|
+
JSON
|
80
|
+
headers: {'Content-Type' => 'application/json'}
|
81
|
+
)
|
82
|
+
|
83
|
+
u = Yao::Resources::Hypervisor.uptime(1)
|
84
|
+
assert_equal(u.uptime, " 08:32:11 up 93 days, 18:25, 12 users, load average: 0.20, 0.12, 0.14")
|
85
|
+
end
|
12
86
|
end
|
@@ -1,26 +1,69 @@
|
|
1
1
|
class TestRestfullyAccesible < Test::Unit::TestCase
|
2
|
-
include
|
2
|
+
include RestfullAccessibleStub
|
3
|
+
class Test
|
4
|
+
class << self
|
5
|
+
attr_accessor :client
|
6
|
+
end
|
7
|
+
extend Yao::Resources::RestfullyAccessible
|
8
|
+
end
|
9
|
+
|
10
|
+
def setup
|
11
|
+
@url = "https://example.com:12345"
|
12
|
+
@resource_name = "dummy_resource"
|
13
|
+
@resources_name = "dummy_resources"
|
14
|
+
|
15
|
+
Test.resource_name = @resource_name
|
16
|
+
Test.resources_name = @resources_name
|
17
|
+
Test.client = Yao::Client.gen_client(@url)
|
18
|
+
end
|
19
|
+
|
20
|
+
sub_test_case 'get' do
|
21
|
+
test 'permalink' do
|
22
|
+
stub_get_request("https://example.com/dummy_resource", @resource_name)
|
23
|
+
mock(Test).new("dummy_resource") { "OK" }
|
24
|
+
assert_equal(Test.get("https://example.com/dummy_resource"), "OK")
|
25
|
+
end
|
26
|
+
|
27
|
+
test 'uuid' do
|
28
|
+
uuid = "00112233-4455-6677-8899-aabbccddeeff"
|
29
|
+
stub_get_request([@url, @resources_name, uuid].join('/'), @resource_name)
|
30
|
+
mock(Test).new("dummy_resource") { "OK" }
|
31
|
+
assert_equal(Test.get(uuid), "OK")
|
32
|
+
end
|
33
|
+
|
34
|
+
test 'id (not uuid)' do
|
35
|
+
id = "1"
|
36
|
+
stub_get_request([@url, @resources_name, id].join('/'), @resource_name)
|
37
|
+
mock(Test).new("dummy_resource") { "OK" }
|
38
|
+
assert_equal(Test.get(id), "OK")
|
39
|
+
end
|
40
|
+
|
41
|
+
test 'name' do
|
42
|
+
Test.return_single_on_querying = true
|
43
|
+
name = "dummy"
|
44
|
+
uuid = "00112233-4455-6677-8899-aabbccddeeff"
|
3
45
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
46
|
+
stub_get_request_not_found([@url, @resources_name, name].join('/'))
|
47
|
+
stub_get_request([@url, "#{@resources_name}?name=dummy"].join('/'), @resources_name)
|
48
|
+
mock(Test).new("dummy_resource") { [Struct.new(:id).new(uuid)] }
|
49
|
+
stub_get_request([@url, @resources_name, uuid].join('/'), @resources_name)
|
50
|
+
mock(Test).new("dummy_resource") { "OK" }
|
8
51
|
|
9
|
-
|
10
|
-
|
52
|
+
assert_equal(Test.get(name), "OK")
|
53
|
+
end
|
11
54
|
end
|
12
55
|
|
13
56
|
def test_find_by_name
|
14
|
-
mock(
|
57
|
+
mock(Test).list({"name" => "dummy"}) { "dummy" }
|
15
58
|
|
16
|
-
assert_equal(find_by_name("dummy"), "dummy")
|
59
|
+
assert_equal(Test.find_by_name("dummy"), "dummy")
|
17
60
|
end
|
18
61
|
|
19
62
|
def test_uuid?
|
20
|
-
assert_equal(uuid
|
63
|
+
assert_equal(Test.send(:uuid?, "00112233-4455-6677-8899-aabbccddeeff"), true)
|
21
64
|
|
22
65
|
# not uuid
|
23
|
-
assert_equal(uuid
|
24
|
-
assert_equal(uuid
|
66
|
+
assert_equal(Test.send(:uuid?, "dummy resource"), false)
|
67
|
+
assert_equal(Test.send(:uuid?, "00112233445566778899aabbccddeeff"), false)
|
25
68
|
end
|
26
69
|
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.4.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: 2018-
|
11
|
+
date: 2018-04-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json
|
@@ -218,6 +218,7 @@ files:
|
|
218
218
|
- test/fixtures/dummy.pem
|
219
219
|
- test/support/auth_stub.rb
|
220
220
|
- test/support/authv3_stub.rb
|
221
|
+
- test/support/restfully_accesible_stub.rb
|
221
222
|
- test/yao/resources/test_aggregates.rb
|
222
223
|
- test/yao/resources/test_base.rb
|
223
224
|
- test/yao/resources/test_hypervisor.rb
|
@@ -262,7 +263,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
262
263
|
version: '0'
|
263
264
|
requirements: []
|
264
265
|
rubyforge_project:
|
265
|
-
rubygems_version: 2.7.
|
266
|
+
rubygems_version: 2.7.6
|
266
267
|
signing_key:
|
267
268
|
specification_version: 4
|
268
269
|
summary: Yet Another OpenStack API Wrapper that rocks!!
|
@@ -272,6 +273,7 @@ test_files:
|
|
272
273
|
- test/fixtures/dummy.pem
|
273
274
|
- test/support/auth_stub.rb
|
274
275
|
- test/support/authv3_stub.rb
|
276
|
+
- test/support/restfully_accesible_stub.rb
|
275
277
|
- test/yao/resources/test_aggregates.rb
|
276
278
|
- test/yao/resources/test_base.rb
|
277
279
|
- test/yao/resources/test_hypervisor.rb
|