yao 0.13.4 → 0.16.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/.github/workflows/rubocop.yml +19 -0
- data/.github/workflows/ubuntu-rvm.yml +1 -1
- data/.github/workflows/ubuntu.yml +2 -2
- data/.rubocop.yml +3 -6
- data/lib/yao/auth.rb +18 -0
- data/lib/yao/client.rb +1 -1
- data/lib/yao/config.rb +19 -0
- data/lib/yao/faraday_middlewares.rb +37 -3
- data/lib/yao/mode.rb +4 -0
- data/lib/yao/plugins/default_client_generator.rb +0 -1
- data/lib/yao/plugins/registry.rb +2 -1
- data/lib/yao/resources/action.rb +7 -0
- data/lib/yao/resources/aggregates.rb +1 -0
- data/lib/yao/resources/base.rb +39 -6
- data/lib/yao/resources/compute_services.rb +8 -1
- data/lib/yao/resources/flavor.rb +12 -0
- data/lib/yao/resources/floating_ip.rb +2 -6
- data/lib/yao/resources/hypervisor.rb +1 -1
- data/lib/yao/resources/image.rb +2 -0
- data/lib/yao/resources/loadbalancer.rb +4 -0
- data/lib/yao/resources/loadbalancer_healthmonitor.rb +3 -0
- data/lib/yao/resources/loadbalancer_listener.rb +2 -0
- data/lib/yao/resources/loadbalancer_pool.rb +13 -17
- data/lib/yao/resources/loadbalancer_pool_member.rb +21 -0
- data/lib/yao/resources/metadata_available.rb +21 -0
- data/lib/yao/resources/meter.rb +9 -2
- data/lib/yao/resources/network.rb +2 -1
- data/lib/yao/resources/network_associationable.rb +1 -0
- data/lib/yao/resources/old_sample.rb +5 -1
- data/lib/yao/resources/port.rb +3 -1
- data/lib/yao/resources/port_associationable.rb +1 -0
- data/lib/yao/resources/project.rb +11 -0
- data/lib/yao/resources/{tenant_associationable.rb → project_associationable.rb} +5 -4
- data/lib/yao/resources/resource.rb +9 -3
- data/lib/yao/resources/restfully_accessible.rb +18 -2
- data/lib/yao/resources/role.rb +6 -4
- data/lib/yao/resources/role_assignment.rb +37 -4
- data/lib/yao/resources/router.rb +26 -8
- data/lib/yao/resources/sample.rb +4 -0
- data/lib/yao/resources/security_group.rb +2 -1
- data/lib/yao/resources/security_group_rule.rb +10 -0
- data/lib/yao/resources/server.rb +21 -1
- data/lib/yao/resources/server_group.rb +1 -1
- data/lib/yao/resources/server_usage_associationable.rb +12 -0
- data/lib/yao/resources/subnet.rb +2 -1
- data/lib/yao/resources/tenant.rb +11 -0
- data/lib/yao/resources/user.rb +8 -1
- data/lib/yao/resources/volume.rb +14 -1
- data/lib/yao/resources/volume_action.rb +13 -0
- data/lib/yao/resources.rb +4 -1
- data/lib/yao/token.rb +1 -0
- data/lib/yao/version.rb +1 -1
- data/test/yao/resources/test_base.rb +32 -0
- data/test/yao/resources/test_flavor.rb +67 -33
- data/test/yao/resources/test_floating_ip.rb +5 -5
- data/test/yao/resources/test_image.rb +5 -0
- data/test/yao/resources/test_loadbalancer_pool.rb +146 -1
- data/test/yao/resources/test_meter.rb +5 -5
- data/test/yao/resources/test_network.rb +6 -6
- data/test/yao/resources/test_port.rb +6 -6
- data/test/yao/resources/test_project.rb +45 -6
- data/test/yao/resources/test_restfully_accessible.rb +46 -4
- data/test/yao/resources/test_role_assignment.rb +100 -3
- data/test/yao/resources/test_router.rb +33 -12
- data/test/yao/resources/test_security_group.rb +5 -5
- data/test/yao/resources/test_server.rb +6 -6
- data/test/yao/resources/test_server_group.rb +1 -1
- data/test/yao/resources/test_subnet.rb +6 -6
- data/test/yao/resources/test_user.rb +28 -1
- data/test/yao/resources/test_volume.rb +81 -1
- data/test/yao/test_client.rb +0 -1
- data/yao.gemspec +1 -1
- metadata +11 -8
@@ -5,6 +5,7 @@ module Yao::Resources
|
|
5
5
|
:monitor_address, :address,
|
6
6
|
:protocol_port, :operating_status
|
7
7
|
|
8
|
+
# @return [Yao::Resources::Tenant]
|
8
9
|
def project
|
9
10
|
if project_id = self["project_id"]
|
10
11
|
Yao::Tenant.find project_id
|
@@ -12,6 +13,7 @@ module Yao::Resources
|
|
12
13
|
end
|
13
14
|
alias :tenant :project
|
14
15
|
|
16
|
+
# @return [Yao::Resources::Subnet]
|
15
17
|
def subnet
|
16
18
|
if subnet_id = self["subnet_id"]
|
17
19
|
Yao::Subnet.find subnet_id
|
@@ -25,33 +27,52 @@ module Yao::Resources
|
|
25
27
|
|
26
28
|
class << self
|
27
29
|
|
30
|
+
# @param pool [Yao::Resources::LoadBalancerPool]
|
31
|
+
# @param query [Hash]
|
32
|
+
# @return [Array<Yao::Resources::LoadBalancerPoolMember>]
|
28
33
|
def list(pool, query={})
|
29
34
|
self.resources_path = member_resources_path(pool)
|
30
35
|
super(query)
|
31
36
|
end
|
32
37
|
|
38
|
+
# @param pool [Yao::Resources::LoadBalancerPool]
|
39
|
+
# @param id_or_permalink [String]
|
40
|
+
# @param query [Hash]
|
41
|
+
# @return [Yao::Resources::LoadBalancerPoolMember]
|
33
42
|
def get(pool, id_or_permalink, query={})
|
34
43
|
self.resources_path = member_resources_path(pool)
|
35
44
|
super(id_or_permalink, query)
|
36
45
|
end
|
37
46
|
alias find get
|
38
47
|
|
48
|
+
# @param pool [Yao::Resources::LoadBalancerPool]
|
49
|
+
# @param resource_params [Hash]
|
50
|
+
# @return [Yao::Resources::LoadBalancerPoolMember]
|
39
51
|
def create(pool, resource_params)
|
40
52
|
self.resources_path = member_resources_path(pool)
|
41
53
|
super(resource_params)
|
42
54
|
end
|
43
55
|
|
56
|
+
# @param pool [Yao::Resources::LoadBalancerPool]
|
57
|
+
# @param id [String]
|
58
|
+
# @param resource_params [Hash]
|
59
|
+
# @return [Yao::Resources::LoadBalancerPoolMember]
|
44
60
|
def update(pool, id, resource_params)
|
45
61
|
self.resources_path = member_resources_path(pool)
|
46
62
|
super(id, resource_params)
|
47
63
|
end
|
48
64
|
|
65
|
+
# @param pool [Yao::Resources::LoadBalancerPool]
|
66
|
+
# @param id [String]
|
67
|
+
# @return [String]
|
49
68
|
def destroy(pool, id)
|
50
69
|
self.resources_path = member_resources_path(pool)
|
51
70
|
super(id)
|
52
71
|
end
|
53
72
|
|
54
73
|
private
|
74
|
+
# @param pool [Yao::Resources::LoadBalancerPool]
|
75
|
+
# @return [String]
|
55
76
|
def member_resources_path(pool)
|
56
77
|
"lbaas/pools/#{pool.id}/#{self.resources_name}"
|
57
78
|
end
|
@@ -1,9 +1,14 @@
|
|
1
1
|
module Yao::Resources
|
2
2
|
module MetadataAvailable
|
3
|
+
# @param id [String]
|
4
|
+
# @return [Hash]
|
3
5
|
def list_metadata(id)
|
4
6
|
GET(metadata_path(id)).body["metadata"]
|
5
7
|
end
|
6
8
|
|
9
|
+
# @param id [String]
|
10
|
+
# @param metadata [Hash]
|
11
|
+
# @return [Hash]
|
7
12
|
def create_metadata(id, metadata)
|
8
13
|
res = POST(metadata_path(id)) do |req|
|
9
14
|
req.body = {"metadata" => metadata}.to_json
|
@@ -13,6 +18,9 @@ module Yao::Resources
|
|
13
18
|
end
|
14
19
|
alias append_metadata create_metadata
|
15
20
|
|
21
|
+
# @param id [String]
|
22
|
+
# @param metadata [Hash]
|
23
|
+
# @return [Hash]
|
16
24
|
def update_metadata(id, metadata)
|
17
25
|
res = PUT(metadata_path(id)) do |req|
|
18
26
|
req.body = {"metadata" => metadata}.to_json
|
@@ -22,10 +30,17 @@ module Yao::Resources
|
|
22
30
|
end
|
23
31
|
alias replace_metadata update_metadata
|
24
32
|
|
33
|
+
# @param id [String]
|
34
|
+
# @param key [String]
|
35
|
+
# @return [Hash]
|
25
36
|
def get_metadata(id, key)
|
26
37
|
GET(metadata_key_path(id, key)).body["meta"]
|
27
38
|
end
|
28
39
|
|
40
|
+
# @param id [String]
|
41
|
+
# @param key [String]
|
42
|
+
# @param value [String]
|
43
|
+
# @return [Hash]
|
29
44
|
def set_metadata(id, key, value)
|
30
45
|
res = PUT(metadata_key_path(id, key)) do |req|
|
31
46
|
req.body = {"meta" => {key => value}}.to_json
|
@@ -34,15 +49,21 @@ module Yao::Resources
|
|
34
49
|
res.body["meta"]
|
35
50
|
end
|
36
51
|
|
52
|
+
# @param id [String]
|
53
|
+
# @param key [String]
|
37
54
|
def delete_metadata(id, key)
|
38
55
|
DELETE(metadata_key_path(id, key)).body
|
39
56
|
end
|
40
57
|
|
41
58
|
private
|
59
|
+
# @param id [String]
|
60
|
+
# @return [String]
|
42
61
|
def metadata_path(id)
|
43
62
|
["servers", id, "metadata"].join("/")
|
44
63
|
end
|
45
64
|
|
65
|
+
# @param id [String]
|
66
|
+
# @param key [String]
|
46
67
|
def metadata_key_path(id, key)
|
47
68
|
["servers", id, "metadata", key].join("/")
|
48
69
|
end
|
data/lib/yao/resources/meter.rb
CHANGED
@@ -1,18 +1,21 @@
|
|
1
1
|
module Yao::Resources
|
2
2
|
class Meter < Base
|
3
3
|
|
4
|
-
include
|
4
|
+
include ProjectAssociationable
|
5
5
|
|
6
6
|
friendly_attributes :meter_id, :name, :user_id, :resource_id, :source, :type, :unit
|
7
7
|
|
8
|
+
# @return [String]
|
8
9
|
def id
|
9
10
|
meter_id
|
10
11
|
end
|
11
12
|
|
13
|
+
# @return [Yao::Resources::Resource]
|
12
14
|
def resource
|
13
15
|
@resource ||= Yao::Resource.get(resource_id)
|
14
16
|
end
|
15
17
|
|
18
|
+
# @return [Yao::Resources::User]
|
16
19
|
def user
|
17
20
|
@user ||= Yao::User.get(user_id)
|
18
21
|
end
|
@@ -23,12 +26,16 @@ module Yao::Resources
|
|
23
26
|
|
24
27
|
class << self
|
25
28
|
private
|
29
|
+
|
30
|
+
# override Yao::Resources::RestfullyAccessible.resource_from_json
|
31
|
+
# @param json [Hash]
|
32
|
+
# @return [Yao::Resources::Meter]
|
26
33
|
def resource_from_json(json)
|
27
34
|
new(json)
|
28
35
|
end
|
29
36
|
|
30
37
|
# override Yao::Resources::RestfullyAccessible.resources_from_json
|
31
|
-
# @param [Array]
|
38
|
+
# @param json [Array<Hash>]
|
32
39
|
# @return [Array<Yao::Resources::Meter>]
|
33
40
|
def resources_from_json(json)
|
34
41
|
json.map{|d| new(d)}
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module Yao::Resources
|
2
2
|
class Network < Base
|
3
|
-
include
|
3
|
+
include ProjectAssociationable
|
4
4
|
|
5
5
|
friendly_attributes :name, :status, :shared, :subnets, :admin_state_up
|
6
6
|
map_attribute_to_attribute "provider:physical_network" => :physical_network
|
@@ -13,6 +13,7 @@ module Yao::Resources
|
|
13
13
|
self.resource_name = "network"
|
14
14
|
self.resources_name = "networks"
|
15
15
|
|
16
|
+
# @return [Array<Yao::Resources::Port>]
|
16
17
|
def ports
|
17
18
|
@ports ||= Yao::Port.list(network_id: id)
|
18
19
|
end
|
@@ -1,24 +1,28 @@
|
|
1
1
|
module Yao::Resources
|
2
2
|
class OldSample < Base
|
3
|
-
include
|
3
|
+
include ProjectAssociationable
|
4
4
|
|
5
5
|
friendly_attributes :counter_name, :counter_type, :counter_unit, :counter_volume,
|
6
6
|
:message_id, :resource_id, :timestamp, :resource_metadata, :user_id,
|
7
7
|
:source
|
8
8
|
|
9
|
+
# @return [Date]
|
9
10
|
def recorded_at
|
10
11
|
Time.parse(self["recorded_at"] || self["timestamp"])
|
11
12
|
end
|
12
13
|
alias timestamp recorded_at
|
13
14
|
|
15
|
+
# @return [String]
|
14
16
|
def id
|
15
17
|
message_id
|
16
18
|
end
|
17
19
|
|
20
|
+
# @return [Yao::Resources::Resource]
|
18
21
|
def resource
|
19
22
|
@resource ||= Yao::Resource.get(resource_id)
|
20
23
|
end
|
21
24
|
|
25
|
+
# @return [Yao::Resources::User]
|
22
26
|
def user
|
23
27
|
@user ||= Yao::User.get(user_id)
|
24
28
|
end
|
data/lib/yao/resources/port.rb
CHANGED
@@ -2,17 +2,19 @@ module Yao::Resources
|
|
2
2
|
class Port < Base
|
3
3
|
|
4
4
|
include NetworkAssociationable
|
5
|
-
include
|
5
|
+
include ProjectAssociationable
|
6
6
|
|
7
7
|
friendly_attributes :name, :mac_address, :status, :allowed_address_pairs,
|
8
8
|
:device_owner, :fixed_ips, :security_groups, :device_id,
|
9
9
|
:admin_state_up
|
10
10
|
map_attribute_to_attribute "binding:host_id" => :host_id
|
11
11
|
|
12
|
+
# @return [String]
|
12
13
|
def primary_ip
|
13
14
|
fixed_ips.first["ip_address"]
|
14
15
|
end
|
15
16
|
|
17
|
+
# @return [Yao::Resources::Subnet]
|
16
18
|
def primary_subnet
|
17
19
|
@subnet ||= Yao::Subnet.find fixed_ips.first["subnet_id"]
|
18
20
|
end
|
@@ -1,5 +1,7 @@
|
|
1
1
|
module Yao::Resources
|
2
2
|
class Project < Base
|
3
|
+
include ServerUsageAssociationable
|
4
|
+
|
3
5
|
friendly_attributes :id, :name, :description, :enabled, :parent_id, :domain_id
|
4
6
|
alias :enabled? :enabled
|
5
7
|
|
@@ -8,19 +10,28 @@ module Yao::Resources
|
|
8
10
|
self.resources_name = "projects"
|
9
11
|
self.admin = true
|
10
12
|
|
13
|
+
# @return [Bool]
|
11
14
|
def domain?
|
12
15
|
@data["is_domain"]
|
13
16
|
end
|
14
17
|
|
18
|
+
# @return [Array<Yao::Resources::Server>]
|
15
19
|
def servers
|
16
20
|
@servers ||= Yao::Server.list(all_tenants: 1, project_id: 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 [Yao::Resources::RoleAssignment]
|
29
|
+
def role_assignment
|
30
|
+
Yao::RoleAssignment.get(project: id)
|
31
|
+
end
|
32
|
+
|
23
33
|
class << self
|
34
|
+
|
24
35
|
def accessible
|
25
36
|
as_member { self.list }
|
26
37
|
end
|
@@ -1,17 +1,18 @@
|
|
1
1
|
module Yao
|
2
2
|
module Resources
|
3
|
-
module
|
3
|
+
module ProjectAssociationable
|
4
4
|
|
5
5
|
def self.included(base)
|
6
6
|
base.friendly_attributes :project_id
|
7
7
|
base.friendly_attributes :tenant_id
|
8
8
|
end
|
9
9
|
|
10
|
-
|
11
|
-
|
10
|
+
# @return [Yao::Resources::Project]
|
11
|
+
def project
|
12
|
+
@project ||= Yao::Project.find(project_id || tenant_id)
|
12
13
|
end
|
13
14
|
|
14
|
-
alias :
|
15
|
+
alias :tenant :project
|
15
16
|
end
|
16
17
|
end
|
17
18
|
end
|
@@ -1,35 +1,41 @@
|
|
1
1
|
require 'time'
|
2
2
|
module Yao::Resources
|
3
3
|
class Resource < Base
|
4
|
-
include
|
4
|
+
include ProjectAssociationable
|
5
5
|
|
6
6
|
friendly_attributes :user_id, :resource_id,
|
7
7
|
:last_sample_timestamp, :first_sample_timestamp,
|
8
8
|
:metadata,
|
9
9
|
:links
|
10
10
|
|
11
|
+
# @return [String]
|
11
12
|
def id
|
12
13
|
resource_id
|
13
14
|
end
|
14
15
|
|
16
|
+
# @return [Yao::User]
|
15
17
|
def user
|
16
18
|
@user ||= Yao::User.get(user_id)
|
17
19
|
end
|
18
20
|
|
21
|
+
# @return [Date]
|
19
22
|
def last_sampled_at
|
20
23
|
Time.parse last_sample_timestamp
|
21
24
|
end
|
22
25
|
|
26
|
+
# @return [Date]
|
23
27
|
def first_sampled_at
|
24
28
|
Time.parse first_sample_timestamp
|
25
29
|
end
|
26
30
|
|
31
|
+
# @return [Array<Yao::Sample>]
|
27
32
|
def get_meter(name)
|
28
33
|
if link = links.find{|l| l["rel"] == name }
|
29
34
|
Yao::Sample.list(link["href"])
|
30
35
|
end
|
31
36
|
end
|
32
37
|
|
38
|
+
# @return [Hash]
|
33
39
|
def meters
|
34
40
|
links.map{|l| l["rel"] }.delete_if{|n| n == 'self' }
|
35
41
|
end
|
@@ -42,14 +48,14 @@ module Yao::Resources
|
|
42
48
|
private
|
43
49
|
|
44
50
|
# override Yao::Resources::RestfullyAccessible.resource_from_json
|
45
|
-
# @param [Hash]
|
51
|
+
# @param json [Hash]
|
46
52
|
# @return [Yao::Resources::Resource]
|
47
53
|
def resource_from_json(json)
|
48
54
|
new(json)
|
49
55
|
end
|
50
56
|
|
51
57
|
# override Yao::Resources::RestfullyAccessible.resources_from_json
|
52
|
-
# @param [Hash]
|
58
|
+
# @param json [Hash]
|
53
59
|
# @return [Yao::Resources::Resource]
|
54
60
|
def resources_from_json(json)
|
55
61
|
new(json)
|
@@ -15,41 +15,55 @@ module Yao::Resources
|
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
18
|
+
# @param name [String]
|
19
|
+
# @return
|
18
20
|
def service=(name)
|
19
21
|
@service = name
|
20
22
|
end
|
21
23
|
attr_reader :service
|
22
24
|
|
25
|
+
# @return [String]
|
23
26
|
def api_version
|
24
27
|
@api_version || ''
|
25
28
|
end
|
26
29
|
|
30
|
+
# @param v [String]
|
31
|
+
# @return [String]
|
27
32
|
def api_version=(v)
|
28
33
|
raise("Set api_version after service is declared") unless service
|
29
34
|
@api_version = v
|
30
35
|
api_version
|
31
36
|
end
|
32
37
|
|
38
|
+
# @param bool [Boolean]
|
39
|
+
# @return [Boolean]
|
33
40
|
def admin=(bool)
|
34
41
|
@admin = bool
|
35
42
|
end
|
36
43
|
|
44
|
+
# @return [Boolean]
|
37
45
|
def return_single_on_querying
|
38
46
|
@return_single_on_querying
|
39
47
|
end
|
40
48
|
|
49
|
+
# @param bool [Boolean]
|
50
|
+
# @return [Boolean]
|
41
51
|
def return_single_on_querying=(bool)
|
42
52
|
@return_single_on_querying = bool
|
43
53
|
end
|
44
54
|
|
55
|
+
# @return [String]
|
45
56
|
def resources_path
|
46
57
|
@resources_path || resources_name
|
47
58
|
end
|
48
59
|
|
60
|
+
# @param path [String]
|
61
|
+
# @return [String]
|
49
62
|
def resources_path=(path)
|
50
63
|
@resources_path = path.sub(%r!^\/!, "")
|
51
64
|
end
|
52
65
|
|
66
|
+
# @return [Faraday::Connection]
|
53
67
|
def client
|
54
68
|
if @admin
|
55
69
|
Yao.default_client.admin_pool[service]
|
@@ -58,6 +72,7 @@ module Yao::Resources
|
|
58
72
|
end or raise "You do not have #{@admin ? 'admin' : 'public'} access to the #{service} service"
|
59
73
|
end
|
60
74
|
|
75
|
+
# @param blk [Proc]
|
61
76
|
def as_member(&blk)
|
62
77
|
if @admin
|
63
78
|
@admin = false
|
@@ -133,7 +148,7 @@ module Yao::Resources
|
|
133
148
|
# @return [Yao::Resources::*]
|
134
149
|
def get!(id_or_name_or_permalink, query={})
|
135
150
|
get(id_or_name_or_permalink, query)
|
136
|
-
rescue Yao::ItemNotFound, Yao::NotFound
|
151
|
+
rescue Yao::ItemNotFound, Yao::NotFound, Yao::InvalidResponse
|
137
152
|
nil
|
138
153
|
end
|
139
154
|
|
@@ -173,6 +188,7 @@ module Yao::Resources
|
|
173
188
|
res = DELETE(create_url(id))
|
174
189
|
res.body
|
175
190
|
end
|
191
|
+
alias delete destroy
|
176
192
|
|
177
193
|
private
|
178
194
|
|
@@ -223,7 +239,7 @@ module Yao::Resources
|
|
223
239
|
GET(create_url(name), query)
|
224
240
|
rescue => e
|
225
241
|
raise e unless e.class == Yao::ItemNotFound || e.class == Yao::NotFound
|
226
|
-
item = find_by_name(name)
|
242
|
+
item = find_by_name(name).select { |r| r.name == name }
|
227
243
|
if item.size > 1
|
228
244
|
raise Yao::TooManyItemFonud.new("More than one resource exists with the name '#{name}'")
|
229
245
|
elsif item.size.zero?
|
data/lib/yao/resources/role.rb
CHANGED
@@ -47,8 +47,8 @@ module Yao::Resources
|
|
47
47
|
end
|
48
48
|
|
49
49
|
# @param role_name [String]
|
50
|
-
# @param to
|
51
|
-
# @param on
|
50
|
+
# @param to [String]
|
51
|
+
# @param on [String]
|
52
52
|
# @return [Faraday::Response]
|
53
53
|
def grant(role_name, to:, on:)
|
54
54
|
role = Yao::Role.get(role_name)
|
@@ -64,8 +64,8 @@ module Yao::Resources
|
|
64
64
|
end
|
65
65
|
|
66
66
|
# @param role_name [String]
|
67
|
-
# @param from
|
68
|
-
# @param on
|
67
|
+
# @param from [String]
|
68
|
+
# @param on [String]
|
69
69
|
# @return [Faraday::Response]
|
70
70
|
def revoke(role_name, from:, on:)
|
71
71
|
role = Yao::Role.get(role_name)
|
@@ -88,6 +88,8 @@ module Yao::Resources
|
|
88
88
|
client.url_prefix.to_s =~ /v2\.0/
|
89
89
|
end
|
90
90
|
|
91
|
+
# @param tenant [String]
|
92
|
+
# @param user [String]
|
91
93
|
def path_for_role_resource(tenant, user, role = nil)
|
92
94
|
if api_version_v2?
|
93
95
|
paths = ["tenants", tenant.id, "users", user.id, "roles"]
|
@@ -1,18 +1,51 @@
|
|
1
1
|
module Yao::Resources
|
2
2
|
class RoleAssignment < Base
|
3
3
|
friendly_attributes :scope, :role, :user
|
4
|
+
|
5
|
+
map_attribute_to_resource role: Role
|
6
|
+
map_attribute_to_resource user: User
|
7
|
+
|
4
8
|
self.service = "identity"
|
5
9
|
self.resource_name = "role_assignment"
|
6
10
|
self.resources_name = "role_assignments"
|
7
11
|
self.admin = true
|
8
12
|
self.api_version = "v3"
|
9
|
-
self.client.url_prefix = Yao.config.auth_url.gsub(/v2.0|v3/, '')
|
10
13
|
|
14
|
+
# @return [Yao::Resources::Project]
|
11
15
|
def project
|
12
|
-
@project ||= Yao::
|
16
|
+
@project ||= Yao::Project.get(scope["project"]["id"])
|
13
17
|
end
|
14
18
|
|
15
|
-
|
16
|
-
|
19
|
+
class << self
|
20
|
+
# @param _subpath [String]
|
21
|
+
# @return [String]
|
22
|
+
def create_url(_subpath='')
|
23
|
+
resources_name
|
24
|
+
end
|
25
|
+
|
26
|
+
# @param query [Hash]
|
27
|
+
def get(opt = {})
|
28
|
+
query = {}
|
29
|
+
|
30
|
+
if (user = opt[:user])
|
31
|
+
query['user.id'] = resource_id_or_string(user)
|
32
|
+
end
|
33
|
+
|
34
|
+
if (project = opt[:project] || opt[:tenant])
|
35
|
+
query['scope.project.id'] = resource_id_or_string(project)
|
36
|
+
end
|
37
|
+
|
38
|
+
list(query)
|
39
|
+
end
|
40
|
+
|
41
|
+
private
|
42
|
+
def resource_id_or_string(item)
|
43
|
+
if item.respond_to?(:id)
|
44
|
+
item.id
|
45
|
+
else
|
46
|
+
item
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
17
50
|
end
|
18
51
|
end
|
data/lib/yao/resources/router.rb
CHANGED
@@ -1,32 +1,50 @@
|
|
1
1
|
module Yao::Resources
|
2
2
|
class Router < Base
|
3
|
-
include
|
3
|
+
include ProjectAssociationable
|
4
4
|
|
5
5
|
friendly_attributes :name, :description, :admin_state_up, :status, :external_gateway_info,
|
6
|
-
:
|
7
|
-
:ha, :availability_zone_hints, :availability_zones
|
6
|
+
:routes, :distributed, :ha, :availability_zone_hints, :availability_zones
|
8
7
|
|
9
8
|
self.service = 'network'
|
10
9
|
self.resource_name = 'router'
|
11
10
|
self.resources_name = 'routers'
|
12
11
|
|
12
|
+
# @return [bool]
|
13
|
+
def enable_snat
|
14
|
+
external_gateway_info["enable_snat"]
|
15
|
+
end
|
16
|
+
|
17
|
+
# @return [Array<Hash>]
|
18
|
+
def external_fixed_ips
|
19
|
+
external_gateway_info["external_fixed_ips"]
|
20
|
+
end
|
21
|
+
|
22
|
+
# @return [Yao::Resource::Network]
|
23
|
+
def external_network
|
24
|
+
@external_network ||= if network_id = external_gateway_info["network_id"]
|
25
|
+
Yao::Network.get(network_id)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
# @return [Array<Yao::Resources::Port>]
|
13
30
|
def interfaces
|
14
31
|
Yao::Port.list(device_id: id)
|
15
32
|
end
|
16
33
|
|
17
34
|
class << self
|
35
|
+
# @param id [String]
|
36
|
+
# @param param [Hash]
|
37
|
+
# @return [Hash]
|
18
38
|
def add_interface(id, param)
|
19
39
|
PUT(['routers', id, 'add_router_interface.json'].join('/'), param.to_json)
|
20
40
|
end
|
21
41
|
|
42
|
+
# @param id [String]
|
43
|
+
# @param param [Hash]
|
44
|
+
# @return [Hash]
|
22
45
|
def remove_interface(id, param)
|
23
46
|
PUT(['routers', id, 'remove_router_interface.json'].join('/'), param.to_json)
|
24
47
|
end
|
25
|
-
|
26
|
-
def get_by_name(name)
|
27
|
-
self.list(name: name)
|
28
|
-
end
|
29
|
-
alias find_by_name get_by_name
|
30
48
|
end
|
31
49
|
end
|
32
50
|
end
|
data/lib/yao/resources/sample.rb
CHANGED
@@ -4,18 +4,22 @@ module Yao::Resources
|
|
4
4
|
:source, :type, :unit, :volume,
|
5
5
|
:resource_id, :user_id
|
6
6
|
|
7
|
+
# @return [Date]
|
7
8
|
def recorded_at
|
8
9
|
Time.parse(self["recorded_at"])
|
9
10
|
end
|
10
11
|
|
12
|
+
# @return [Date]
|
11
13
|
def timestamp
|
12
14
|
Time.parse(self["timestamp"])
|
13
15
|
end
|
14
16
|
|
17
|
+
# @return [Yao::Resources::Resource]
|
15
18
|
def resource
|
16
19
|
@resource ||= Yao::Resource.get(resource_id)
|
17
20
|
end
|
18
21
|
|
22
|
+
# @return [Yao::Resources::User]
|
19
23
|
def user
|
20
24
|
@user ||= Yao::User.get(user_id)
|
21
25
|
end
|
@@ -1,10 +1,11 @@
|
|
1
1
|
require 'yao/resources/security_group_rule'
|
2
2
|
module Yao::Resources
|
3
3
|
class SecurityGroup < Base
|
4
|
-
include
|
4
|
+
include ProjectAssociationable
|
5
5
|
|
6
6
|
friendly_attributes :name, :description
|
7
7
|
|
8
|
+
# @return [Array<Yao::Resources::SecurityGroupRule>]
|
8
9
|
def rules
|
9
10
|
self[["rules", SecurityGroupRule].join("__")] ||= (case self.class.service
|
10
11
|
when "compute"
|