yao 0.13.2 → 0.15.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (64) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/rubocop.yml +19 -0
  3. data/.github/workflows/ubuntu-rvm.yml +1 -1
  4. data/.github/workflows/ubuntu.yml +1 -1
  5. data/.rubocop.yml +3 -6
  6. data/README.md +2 -1
  7. data/lib/yao/auth.rb +19 -1
  8. data/lib/yao/client.rb +12 -8
  9. data/lib/yao/config.rb +19 -0
  10. data/lib/yao/faraday_middlewares.rb +37 -3
  11. data/lib/yao/mode.rb +4 -0
  12. data/lib/yao/plugins/default_client_generator.rb +0 -1
  13. data/lib/yao/plugins/registry.rb +2 -1
  14. data/lib/yao/resources/action.rb +7 -0
  15. data/lib/yao/resources/aggregates.rb +1 -0
  16. data/lib/yao/resources/base.rb +22 -1
  17. data/lib/yao/resources/compute_services.rb +8 -1
  18. data/lib/yao/resources/flavor.rb +2 -0
  19. data/lib/yao/resources/floating_ip.rb +2 -0
  20. data/lib/yao/resources/hypervisor.rb +1 -1
  21. data/lib/yao/resources/image.rb +2 -0
  22. data/lib/yao/resources/loadbalancer.rb +4 -0
  23. data/lib/yao/resources/loadbalancer_healthmonitor.rb +3 -0
  24. data/lib/yao/resources/loadbalancer_listener.rb +2 -0
  25. data/lib/yao/resources/loadbalancer_pool.rb +6 -0
  26. data/lib/yao/resources/loadbalancer_pool_member.rb +21 -0
  27. data/lib/yao/resources/metadata_available.rb +21 -0
  28. data/lib/yao/resources/meter.rb +8 -1
  29. data/lib/yao/resources/network.rb +1 -0
  30. data/lib/yao/resources/network_associationable.rb +1 -0
  31. data/lib/yao/resources/old_sample.rb +4 -0
  32. data/lib/yao/resources/port.rb +2 -0
  33. data/lib/yao/resources/port_associationable.rb +1 -0
  34. data/lib/yao/resources/project.rb +11 -0
  35. data/lib/yao/resources/resource.rb +8 -2
  36. data/lib/yao/resources/restfully_accessible.rb +15 -0
  37. data/lib/yao/resources/role.rb +6 -4
  38. data/lib/yao/resources/role_assignment.rb +36 -3
  39. data/lib/yao/resources/router.rb +9 -0
  40. data/lib/yao/resources/sample.rb +4 -0
  41. data/lib/yao/resources/security_group.rb +1 -0
  42. data/lib/yao/resources/security_group_rule.rb +10 -0
  43. data/lib/yao/resources/server.rb +20 -0
  44. data/lib/yao/resources/server_group.rb +1 -1
  45. data/lib/yao/resources/server_usage_associationable.rb +12 -0
  46. data/lib/yao/resources/subnet.rb +1 -0
  47. data/lib/yao/resources/tenant.rb +11 -0
  48. data/lib/yao/resources/tenant_associationable.rb +1 -0
  49. data/lib/yao/resources/user.rb +8 -1
  50. data/lib/yao/resources/volume.rb +12 -1
  51. data/lib/yao/resources/volume_action.rb +13 -0
  52. data/lib/yao/resources.rb +3 -0
  53. data/lib/yao/token.rb +1 -0
  54. data/lib/yao/version.rb +1 -1
  55. data/test/yao/resources/test_base.rb +11 -0
  56. data/test/yao/resources/test_image.rb +5 -0
  57. data/test/yao/resources/test_project.rb +45 -6
  58. data/test/yao/resources/test_role_assignment.rb +98 -1
  59. data/test/yao/resources/test_server_group.rb +1 -1
  60. data/test/yao/resources/test_user.rb +28 -1
  61. data/test/yao/resources/test_volume.rb +60 -1
  62. data/test/yao/test_client.rb +2 -1
  63. data/yao.gemspec +1 -1
  64. metadata +8 -5
@@ -1,5 +1,7 @@
1
1
  module Yao::Resources
2
2
  class Tenant < Base
3
+ include ServerUsageAssociationable
4
+
3
5
  friendly_attributes :id, :name, :description, :enabled
4
6
 
5
7
  self.service = "identity"
@@ -8,22 +10,31 @@ module Yao::Resources
8
10
  self.admin = true
9
11
  self.return_single_on_querying = true
10
12
 
13
+ # @return [Yao::Resources::Server]
11
14
  def servers
12
15
  @servers ||= Yao::Server.list(all_tenants: 1, project_id: id)
13
16
  end
14
17
 
18
+ # @return [Yao::Resources::Meter]
15
19
  def meters
16
20
  @meters ||= Yao::Meter.list({'q.field' => 'project_id', 'q.op' => 'eq', 'q.value' => id})
17
21
  end
18
22
 
23
+ # @return [Yao::Resources::Port]
19
24
  def ports
20
25
  @ports ||= Yao::Port.list(tenant_id: id)
21
26
  end
22
27
 
28
+ # @return [Array<Yao::Resources::Meter>]
23
29
  def meters_by_name(meter_name)
24
30
  meters.select{|m| m.name == meter_name}
25
31
  end
26
32
 
33
+ # @return [Yao::Resources::RoleAssignment]
34
+ def role_assignment
35
+ Yao::RoleAssignment.get(tenant: id)
36
+ end
37
+
27
38
  class << self
28
39
  def accessible
29
40
  as_member { self.list }
@@ -7,6 +7,7 @@ module Yao
7
7
  base.friendly_attributes :tenant_id
8
8
  end
9
9
 
10
+ # @return [Yao::Resources::Tenant]
10
11
  def tenant
11
12
  @tenant ||= Yao::Tenant.find(project_id || tenant_id)
12
13
  end
@@ -1,6 +1,6 @@
1
1
  module Yao::Resources
2
2
  class User < Base
3
- friendly_attributes :name, :email, :enabled, :id
3
+ friendly_attributes :name, :email, :enabled
4
4
 
5
5
  alias enabled? enabled
6
6
 
@@ -9,12 +9,19 @@ module Yao::Resources
9
9
  self.resources_name = "users"
10
10
  self.admin = true
11
11
 
12
+ # @return [Yao::Resources::RoleAssignment]
13
+ def role_assignment
14
+ Yao::RoleAssignment.get(user: self)
15
+ end
16
+
12
17
  class << self
18
+ # @return [Bool]
13
19
  def return_single_on_querying
14
20
  api_verion_v2?
15
21
  end
16
22
 
17
23
  private
24
+ # @return [Bool]
18
25
  def api_verion_v2?
19
26
  client.url_prefix.to_s.match?(/v2\.0/)
20
27
  end
@@ -1,12 +1,23 @@
1
+ require 'yao/resources/volume_action'
2
+
1
3
  module Yao::Resources
2
4
  class Volume < Base
3
- friendly_attributes :name, :size, :volume_type
5
+ friendly_attributes :attachments, :availability_zone, :bootable, :descriptions, :encrypted, :metadata, :multiattach, :name, :replication_status, :size, :snapshot_id, :status, :user_id, :volume_type
6
+ alias :type :volume_type
4
7
 
8
+ map_attribute_to_attribute 'os-vol-host-attr:host' => :host
5
9
  map_attribute_to_attribute 'os-vol-tenant-attr:tenant_id' => :tenant_id
6
10
 
7
11
  self.service = "volumev3"
8
12
  self.resource_name = "volume"
9
13
  self.resources_name = "volumes"
10
14
  self.resources_detail_available = true
15
+
16
+ def status=(s)
17
+ self.class.set_status(self.id, s)
18
+ self['status'] = s
19
+ end
20
+
21
+ extend VolumeAction
11
22
  end
12
23
  end
@@ -0,0 +1,13 @@
1
+ require 'yao/resources/action'
2
+
3
+ module Yao::Resources
4
+ module VolumeAction
5
+ include Action
6
+
7
+ def set_status(id, status)
8
+ action(id, 'os-reset_status' => {
9
+ 'status' => status,
10
+ })
11
+ end
12
+ end
13
+ end
data/lib/yao/resources.rb CHANGED
@@ -4,6 +4,7 @@ module Yao
4
4
  require "yao/resources/tenant_associationable"
5
5
  require "yao/resources/port_associationable"
6
6
  require "yao/resources/network_associationable"
7
+ require "yao/resources/server_usage_associationable"
7
8
 
8
9
  autoload :Server, "yao/resources/server"
9
10
  autoload :ServerGroup, "yao/resources/server_group"
@@ -42,6 +43,8 @@ module Yao
42
43
  autoload :Sample, "yao/resources/sample"
43
44
  end
44
45
 
46
+ # @param name [String]
47
+ # @return [object]
45
48
  def self.const_missing(name)
46
49
  new_klass = Yao::Resources.const_get(name)
47
50
  Yao.const_set(name, new_klass)
data/lib/yao/token.rb CHANGED
@@ -2,6 +2,7 @@ require 'yao/client'
2
2
 
3
3
  module Yao
4
4
  class Token
5
+
5
6
  def self.issue(cli, auth_info)
6
7
  t = new(auth_info)
7
8
  t.refresh(cli)
data/lib/yao/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Yao
2
- VERSION = "0.13.2"
2
+ VERSION = "0.15.0"
3
3
  end
@@ -12,4 +12,15 @@ class TestResourceBase < TestYaoResource
12
12
  base.class.friendly_attributes(:name)
13
13
  assert_equal("bar", base.name)
14
14
  end
15
+
16
+ def test_map_attribute_to_resource
17
+ base = Yao::Resources::Base.new("string" => "hoge")
18
+ base.class.map_attribute_to_resource string: String
19
+ assert_equal("hoge", base.string)
20
+
21
+ base = Yao::Resources::Base.new({"empty" => ""})
22
+ base.class.map_attribute_to_resource empty: NilClass
23
+ assert_equal(nil, base.empty)
24
+ end
25
+
15
26
  end
@@ -41,6 +41,11 @@ class TestImage < TestYaoResource
41
41
 
42
42
  end
43
43
 
44
+ def test_empty_image
45
+ image = Yao::Server.new("image"=>"").image
46
+ assert_equal(image, nil)
47
+ end
48
+
44
49
  def test_to_hash
45
50
  server = Yao::Resources::Server.new(
46
51
  "OS-DCF:diskConfig" => "AUTO",
@@ -1,9 +1,4 @@
1
1
  class TestProject < TestYaoResource
2
- def setup
3
- super
4
- Yao.default_client.admin_pool["identity"] = Yao::Client.gen_client("https://example.com:12345/v2.0")
5
- end
6
-
7
2
  # https://docs.openstack.org/api-ref/identity/v3/?expanded=list-projects-detail#projects
8
3
  def test_project
9
4
  params = {
@@ -254,4 +249,48 @@ class TestProject < TestYaoResource
254
249
  assert_instance_of(Array, project.servers)
255
250
  assert_requested(stub)
256
251
  end
257
- end
252
+
253
+ def test_server_usage
254
+ stub = stub_request(:get, "https://example.com:12345/os-simple-tenant-usage/0123456789abcdef0123456789abcdef")
255
+ .to_return(
256
+ status: 200,
257
+ body: <<-JSON,
258
+ {
259
+ "tenant_usage": {
260
+ "total_memory_mb_usage": 1024
261
+ }
262
+ }
263
+ JSON
264
+ headers: {'Content-Type' => 'application/json'}
265
+ )
266
+
267
+ project = Yao::Project::new("id" => "0123456789abcdef0123456789abcdef")
268
+ usage = project.server_usage
269
+ assert_equal(1024, usage["total_memory_mb_usage"])
270
+ end
271
+
272
+ def test_role_assignment
273
+ project_id = 'aaaa166533fd49f3b11b1cdce2430000'
274
+ stub = stub_request(:get, "https://example.com:12345/role_assignments?scope.project.id=#{project_id}").
275
+ to_return(
276
+ status: 200,
277
+ body: <<-JSON,
278
+ {
279
+ "role_assignments": [{
280
+ "scope": {
281
+ "project": {
282
+ "id": "aaaa166533fd49f3b11b1cdce2430000"
283
+ }
284
+ }
285
+ }]
286
+ }
287
+ JSON
288
+ headers: {'Content-Type' => 'application/json'}
289
+ )
290
+
291
+ project = Yao::Project.new('id' => project_id)
292
+ role_assignment = project.role_assignment
293
+ assert_equal('aaaa166533fd49f3b11b1cdce2430000', role_assignment.first.scope['project']['id'])
294
+ assert_requested(stub)
295
+ end
296
+ end
@@ -32,8 +32,105 @@ class TestRoleAssignment < TestYaoResource
32
32
  assert_equal("313233", role_assignment.user.id)
33
33
  end
34
34
 
35
+ def test_list
36
+ stub = stub_request(:get, "https://example.com:12345/role_assignments").
37
+ to_return(
38
+ status: 200,
39
+ body: <<-JSON,
40
+ {
41
+ "role_assignments": [{
42
+ "scope": {
43
+ "project": {
44
+ "id": "aaaa166533fd49f3b11b1cdce2430000"
45
+ }
46
+ }
47
+ }]
48
+ }
49
+ JSON
50
+ headers: {'Content-Type' => 'application/json'}
51
+ )
52
+ role_assignment = Yao::RoleAssignment.list
53
+ assert_equal('aaaa166533fd49f3b11b1cdce2430000', role_assignment.first.scope['project']['id'])
54
+ assert_requested(stub)
55
+ end
56
+
57
+ def test_get_user
58
+ user_id = '123456'
59
+ stub = stub_request(:get, "https://example.com:12345/role_assignments?user.id=#{user_id}").
60
+ to_return(
61
+ status: 200,
62
+ body: <<-JSON,
63
+ {
64
+ "role_assignments": [{
65
+ "scope": {
66
+ "project": {
67
+ "id": "aaaa166533fd49f3b11b1cdce2430000"
68
+ }
69
+ }
70
+ }]
71
+ }
72
+ JSON
73
+ headers: {'Content-Type' => 'application/json'}
74
+ )
75
+
76
+ user = Yao::User.new('id' => user_id)
77
+ role_assignment = Yao::RoleAssignment.get(user: user)
78
+ assert_equal('aaaa166533fd49f3b11b1cdce2430000', role_assignment.first.scope['project']['id'])
79
+ assert_requested(stub)
80
+ end
81
+
82
+ def test_get_project
83
+ project_id = 'aaaa166533fd49f3b11b1cdce2430000'
84
+ stub = stub_request(:get, "https://example.com:12345/role_assignments?scope.project.id=#{project_id}").
85
+ to_return(
86
+ status: 200,
87
+ body: <<-JSON,
88
+ {
89
+ "role_assignments": [{
90
+ "scope": {
91
+ "project": {
92
+ "id": "aaaa166533fd49f3b11b1cdce2430000"
93
+ }
94
+ }
95
+ }]
96
+ }
97
+ JSON
98
+ headers: {'Content-Type' => 'application/json'}
99
+ )
100
+
101
+ project = Yao::Project.new('id' => project_id)
102
+ role_assignment = Yao::RoleAssignment.get(project: project)
103
+ assert_equal('aaaa166533fd49f3b11b1cdce2430000', role_assignment.first.scope['project']['id'])
104
+ assert_requested(stub)
105
+ end
106
+
107
+ def test_get_tenant
108
+ tenant_id = 'aaaa166533fd49f3b11b1cdce2430000'
109
+ stub = stub_request(:get, "https://example.com:12345/role_assignments?scope.project.id=#{tenant_id}").
110
+ to_return(
111
+ status: 200,
112
+ body: <<-JSON,
113
+ {
114
+ "role_assignments": [{
115
+ "scope": {
116
+ "project": {
117
+ "id": "aaaa166533fd49f3b11b1cdce2430000"
118
+ }
119
+ }
120
+ }]
121
+ }
122
+ JSON
123
+ headers: {'Content-Type' => 'application/json'}
124
+ )
125
+
126
+ tenant = Yao::Project.new('id' => tenant_id)
127
+ role_assignment = Yao::RoleAssignment.get(tenant: tenant)
128
+ assert_equal('aaaa166533fd49f3b11b1cdce2430000', role_assignment.first.scope['project']['id'])
129
+ assert_requested(stub)
130
+ end
131
+
35
132
  def test_project
36
- stub = stub_request(:get, "http://example.com:12345/tenants/456789").
133
+ stub = stub_request(:get, "https://example.com:12345/tenants/456789").
37
134
  to_return(
38
135
  status: 200,
39
136
  body: <<-JSON,
@@ -20,4 +20,4 @@ class TestServerGroup < TestYaoResource
20
20
  assert_equal("6f70656e737461636b20342065766572", sg.project_id)
21
21
  assert_equal("fake", sg.user_id)
22
22
  end
23
- end
23
+ end
@@ -1,16 +1,43 @@
1
1
  class TestUser < TestYaoResource
2
- def test_sg_attributes
2
+ def test_user
3
3
  params = {
4
+ "id" => '1234567890',
4
5
  "name" => "test_user",
5
6
  "email" => "test-user@example.com",
6
7
  "password" => "passw0rd"
7
8
  }
8
9
 
9
10
  user = Yao::User.new(params)
11
+ assert_equal("1234567890", user.id)
10
12
  assert_equal("test_user", user.name)
11
13
  assert_equal("test-user@example.com", user.email)
12
14
  end
13
15
 
16
+ def test_role_assignment
17
+ user_id = '123456'
18
+ stub = stub_request(:get, "https://example.com:12345/role_assignments?user.id=#{user_id}").
19
+ to_return(
20
+ status: 200,
21
+ body: <<-JSON,
22
+ {
23
+ "role_assignments": [{
24
+ "scope": {
25
+ "project": {
26
+ "id": "aaaa166533fd49f3b11b1cdce2430000"
27
+ }
28
+ }
29
+ }]
30
+ }
31
+ JSON
32
+ headers: {'Content-Type' => 'application/json'}
33
+ )
34
+
35
+ user = Yao::User.new('id' => user_id)
36
+ role_assignment = user.role_assignment
37
+ assert_equal('aaaa166533fd49f3b11b1cdce2430000', role_assignment.first.scope['project']['id'])
38
+ assert_requested(stub)
39
+ end
40
+
14
41
  sub_test_case 'with keystone v2.0' do
15
42
  def setup
16
43
  super
@@ -1,13 +1,35 @@
1
1
  class TestVolume < TestYaoResource
2
2
  def test_volume
3
3
  params = {
4
+ 'attachments' => [],
5
+ 'availability_zone' => 'test',
6
+ 'bootable' => true,
7
+ 'encrypted' => false,
8
+ 'metadata' => {},
9
+ 'multiattach' => false,
4
10
  'name' => 'cinder',
5
- 'size' => 10
11
+ 'replication_status' => 'disabled',
12
+ 'size' => 10,
13
+ 'snapshot_id' => nil,
14
+ 'status' => 'available',
15
+ 'user_id' => 'aaaa166533fd49f3b11b1cdce2430000',
16
+ 'volume_type' => 'test'
6
17
  }
7
18
 
8
19
  volume = Yao::Volume.new(params)
20
+ assert_equal(volume.attachments, [])
21
+ assert_equal(volume.availability_zone, 'test')
22
+ assert_equal(volume.bootable, true)
23
+ assert_equal(volume.encrypted, false)
24
+ assert_equal(volume.metadata, {})
25
+ assert_equal(volume.multiattach, false)
9
26
  assert_equal(volume.name, 'cinder')
27
+ assert_equal(volume.replication_status, 'disabled')
10
28
  assert_equal(volume.size, 10)
29
+ assert_equal(volume.snapshot_id, nil)
30
+ assert_equal(volume.user_id, 'aaaa166533fd49f3b11b1cdce2430000')
31
+ assert_equal(volume.volume_type, 'test')
32
+ assert_equal(volume.type, 'test')
11
33
  end
12
34
 
13
35
  def test_list
@@ -39,4 +61,41 @@ class TestVolume < TestYaoResource
39
61
  def test_list_detail
40
62
  assert_equal(Yao::Volume.method(:list), Yao::Volume.method(:list_detail))
41
63
  end
64
+
65
+ def stub_action_request(id, body)
66
+ # https://docs.openstack.org/api-ref/block-storage/v3/index.html?expanded=list-accessible-volumes-with-details-detail,reset-a-volume-s-statuses-detail#reset-a-volume-s-statuses
67
+ stub_request(:post, "https://example.com:12345/volumes/#{id}/action").
68
+ with(
69
+ body: body,
70
+ headers: {
71
+ 'Accept'=>'application/json',
72
+ 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3',
73
+ 'Content-Type'=>'application/json',
74
+ 'User-Agent'=>"Yao/#{Yao::VERSION} Faraday/#{Faraday::VERSION}"
75
+ }).
76
+ to_return(
77
+ status: 202,
78
+ body: '',
79
+ headers: {'Content-Type' => 'application/json'}
80
+ )
81
+ end
82
+
83
+ def test_set_status
84
+ volume_id = '00000000-0000-0000-0000-000000000000'
85
+
86
+ stub = stub_action_request(volume_id, {'os-reset_status': {'status': 'error'}})
87
+ Yao::Volume.set_status(volume_id, 'error')
88
+ assert_requested(stub)
89
+ end
90
+
91
+ def test_set_status_on_instance
92
+ volume_id = '00000000-0000-0000-0000-000000000000'
93
+ stub = stub_action_request(volume_id, {'os-reset_status': {'status': 'error'}})
94
+ params = {
95
+ 'id' => volume_id,
96
+ }
97
+ volume = Yao::Volume.new(params)
98
+ volume.status = 'error'
99
+ assert_requested(stub)
100
+ end
42
101
  end
@@ -51,7 +51,6 @@ class TestClient < Test::Unit::TestCase
51
51
  Faraday::Request::ReadOnly,
52
52
  Faraday::Response::OSErrorDetector,
53
53
  FaradayMiddleware::ParseJson,
54
- Faraday::Response::Logger,
55
54
  Faraday::Response::OSDumper
56
55
  ]
57
56
  assert { cli.builder.handlers == handlers }
@@ -64,6 +63,7 @@ class TestClient < Test::Unit::TestCase
64
63
  end
65
64
 
66
65
  def test_cert_key
66
+ stub(Yao.config).ca_cert { File.expand_path("../../fixtures/dummy.pem", __FILE__) }
67
67
  stub(Yao.config).client_cert { File.expand_path("../../fixtures/dummy.pem", __FILE__) }
68
68
  stub(Yao.config).client_key { File.expand_path("../../fixtures/dummy.key", __FILE__) }
69
69
  stub(OpenSSL::X509::Certificate).new { "DummyCert" }
@@ -71,6 +71,7 @@ class TestClient < Test::Unit::TestCase
71
71
 
72
72
  cli = Yao::Client.gen_client("http://cool-api.example.com:12345/v3.0")
73
73
  ssl = cli.ssl
74
+ assert { ssl[:ca_file] == File.expand_path("../../fixtures/dummy.pem", __FILE__) }
74
75
  assert { ssl[:client_cert] == "DummyCert" }
75
76
  assert { ssl[:client_key] == "DummyKey" }
76
77
  end
data/yao.gemspec CHANGED
@@ -19,6 +19,6 @@ Gem::Specification.new do |spec|
19
19
 
20
20
  spec.add_dependency "json"
21
21
  spec.add_dependency "deep_merge"
22
- spec.add_dependency "faraday", "~> 1.0.1"
22
+ spec.add_dependency "faraday", "~> 1.8.0"
23
23
  spec.add_dependency "faraday_middleware"
24
24
  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.13.2
4
+ version: 0.15.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: 2020-07-16 00:00:00.000000000 Z
11
+ date: 2021-12-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 1.0.1
47
+ version: 1.8.0
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 1.0.1
54
+ version: 1.8.0
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: faraday_middleware
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -74,6 +74,7 @@ extensions: []
74
74
  extra_rdoc_files: []
75
75
  files:
76
76
  - ".github/workflows/macos.yml"
77
+ - ".github/workflows/rubocop.yml"
77
78
  - ".github/workflows/ubuntu-rvm.yml"
78
79
  - ".github/workflows/ubuntu.yml"
79
80
  - ".gitignore"
@@ -131,11 +132,13 @@ files:
131
132
  - lib/yao/resources/security_group_rule.rb
132
133
  - lib/yao/resources/server.rb
133
134
  - lib/yao/resources/server_group.rb
135
+ - lib/yao/resources/server_usage_associationable.rb
134
136
  - lib/yao/resources/subnet.rb
135
137
  - lib/yao/resources/tenant.rb
136
138
  - lib/yao/resources/tenant_associationable.rb
137
139
  - lib/yao/resources/user.rb
138
140
  - lib/yao/resources/volume.rb
141
+ - lib/yao/resources/volume_action.rb
139
142
  - lib/yao/resources/volume_type.rb
140
143
  - lib/yao/setup.rb
141
144
  - lib/yao/token.rb
@@ -213,7 +216,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
213
216
  - !ruby/object:Gem::Version
214
217
  version: '0'
215
218
  requirements: []
216
- rubygems_version: 3.0.6
219
+ rubygems_version: 3.2.32
217
220
  signing_key:
218
221
  specification_version: 4
219
222
  summary: Yet Another OpenStack API Wrapper that rocks!!