misty 0.6.2 → 0.7.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0b46444639b793223b76621ff379c0bf749ba3a1
4
- data.tar.gz: 6866fbf4eb5b156f9e630b4b4a812a485f0645a9
3
+ metadata.gz: 8cceca72756e7b5ac049400a5dd97043be65bb7d
4
+ data.tar.gz: 52dfc65c6b4054a6b605b66af4ee2a4f63e87199
5
5
  SHA512:
6
- metadata.gz: e720372b9ea867e4dc8a5ad1a4b71fc2a9bbdbb93180c96a1c08a406ad4e41142afd076e43af7beafeb7fb6155e293205573abaa5bf5aae90932432c47cb2acc
7
- data.tar.gz: cb9cbf61569180b18c59593f6732406492e16f6d4b2c61be05d00e78a4f67df12cc2cf86d97a4687d7ccc0f6b51f6a29d7ab44fc469e56fced081f2c4227d708
6
+ metadata.gz: 2395f2cbe462561f24239d559cf972aa41b3a7259e42855ef7406eea894180ae062bf8446bb3b02a23ca754b6efe21f5dfbd0b5af84b263b83c32b98e5d442dc
7
+ data.tar.gz: 727fd1657060393641224ba738189d4ee6283eaabdbabb3ee31abb9b0bd568320ed41ba1264b7f0c9407a9b860bc3832390124a5b3844feb502172ce49b11266
data/README.md CHANGED
@@ -3,35 +3,34 @@ Misty is a HTTP client for OpenStack APIs, aiming to be fast and to provide a fl
3
3
  APIs experience.
4
4
 
5
5
  ## Features
6
- * Exhaustive and latest Openstack APIs
7
- * Multiple Service versions
8
- * Microversions
9
- * Based upon Net/HTTP
10
- * Minimalistic gem dependencies - Only json is required
11
- * Dynamic services by autoloading only required service's version
12
- * Token automatically refreshed when expired
13
- * Raw JSON or Ruby format for queries and responses
6
+ * Flexible Openstack APIs integration
7
+ * Standardized Openstack APIs: [Based upon API-ref](https://developer.openstack.org/api-guide/quick-start/)
8
+ * Multiple Service versions and Microversions
9
+ * On demand services - Auto loads required versions
10
+ * Low dependency - Use standard Net/HTTP and JSON gem only
11
+ * I/O format choice: JSON or Ruby structures for queries and responses
14
12
  * Persistent HTTP connections (default since HTTP 1.1 anyway) but for the authentication bootstrapping
15
13
  * Direct HTTP Methods for custom needs
16
14
 
17
15
  ## A solid KISS
18
- For REST transactions, Misty relies on Net/HTTP, from the Standard Library, therefore no other gem is required
19
- besides 'json'.
16
+ For REST transactions Misty relies on standard Net/HTTP library.
17
+ No other gems are required besides 'json'.
20
18
 
21
- The choice to not use the help of a more complex HTTP framework reduces dependencies.
22
- Effectively, once taken care of, the authentication process provides a Service Catalog which allow to serve all
23
- available APIs.
19
+ Not having to use the help of a more complex HTTP framework is a choice that reduces dependencies.
20
+ Meanwhile a better reason would be because Openstack offers a common modus operandi across all APIs.
21
+ The authentication process provides a Service Catalog serving all available APIs entry points.
24
22
 
25
23
  ## APIs Definitions
26
24
  The rich variety of OpenStack projects requires lots of Application Program Interfaces to handle.
27
- Maintaining and extending those APIs is a structural complexity challenge.
25
+ Maintaining and extending those APIs implies a structural complexity challenge.
28
26
  Therefore the more automated the process, the better.
29
- Thanks to the help of Phoenix project, the OpenStack API-ref [1] provides standardization of the OpenStack APIs.
30
- The APIs can be processed almost automatically from the API-ref reference manuals (misty-builder).
31
- This allows:
32
- * More consistent APIs using automated control
27
+ Thanks to the help of Phoenix project [OpenStack API-ref](https://developer.openstack.org/api-guide/quick-start/)
28
+ providing the latest standard of OpenStack APIs.
29
+ The APIs interface definitions are generated automatically from the API-ref reference manuals (misty-builder) which
30
+ allows:
31
+ * More consistent APIs
33
32
  * More recent APIs definitions
34
- * Easier to add APIs
33
+ * Easier addition of a new service's API
35
34
 
36
35
  [1] https://developer.openstack.org/api-guide/quick-start/
37
36
 
@@ -48,10 +47,11 @@ require 'misty'
48
47
 
49
48
  auth_v3 = {
50
49
  :url => "http://localhost:5000",
51
- :user => "admin",
52
- :password => "secret",
53
- :project => "admin",
54
- :domain => "default"
50
+ :user => "admin",
51
+ :password => "secret",
52
+ :domain => "default",
53
+ :project => "admin",
54
+ :project_domain_id => 'default'
55
55
  }
56
56
 
57
57
  openstack = Misty::Cloud.new(:auth => auth_v3)
@@ -67,11 +67,10 @@ puts network.body
67
67
  ## Services
68
68
  Once the Misty::Cloud object is created, the Openstack services can be used.
69
69
 
70
- The Cloud object authenticates against the identity server (bootstrap process) and obtains the service catalog.
71
- When an OpenStack API service is used, its endpoint is determined from the catalog and the service is dynamically called
72
- by Misty so only the services used are loaded.
70
+ The Cloud object is authenticated by the identity server (bootstrap) and is provided with a service catalog.
71
+ When an OpenStack API service is required, the catalog entry's endpoint is used and the service is dynamically called.
73
72
 
74
- The service generic name, such as `compute`, is used to submit requests with an OpenStack service API.
73
+ Each service name (i.e. `compute`) is the object handling API requests.
75
74
 
76
75
  ```ruby
77
76
  openstack = Misty::Cloud.new(:auth => { ... })
@@ -90,9 +89,11 @@ Which produces the equivalent of the following:
90
89
 
91
90
  name | project | versions
92
91
  --- | --- | ---
92
+ application_catalog | murano | ["v1"]
93
93
  alarming | aodh | ["v2"]
94
+ backup | freezer | ["v1"]
94
95
  baremetal | ironic | ["v1"]
95
- block_storage | cinder | ["v3", "v1"]
96
+ block_storage | cinder | ["v3", "v2", "v1"]
96
97
  clustering | senlin | ["v1"]
97
98
  compute | nova | ["v2.1"]
98
99
  container | magnum | ["v1"]
@@ -102,9 +103,11 @@ database | trove | ["v1.0"]
102
103
  dns | designate | ["v2"]
103
104
  identity | keystone | ["v3", "v2.0"]
104
105
  image | glance | ["v2", "v1"]
106
+ load_balancer | octavia | ["v2.0"]
105
107
  messaging | zaqar | ["v2"]
106
108
  metering | ceilometer | ["v2"]
107
- network | neutron | ["v2.0"]
109
+ networking | neutron | ["v2.0"]
110
+ nfv_orchestration | tacker | ["v1.0"]
108
111
  object_storage | swift | ["v1"]
109
112
  orchestration | heat | ["v1"]
110
113
  search | searchlight | ["v1"]
@@ -112,6 +115,9 @@ shared_file_systems | manila | ["v2"]
112
115
 
113
116
  * Notes
114
117
  When an Openstack service requires a different service name, the :service_names option can be used (see below).
118
+ `volume` is an alias for `block_storage`.
119
+ Unique prefixed service names can be used: For instance `network` (or even `net`) instead of `networking`. Meanwhile
120
+ `data` doesn't work because it's ambiguous between `data_processing` and `data_protection`
115
121
 
116
122
  The #requests method provides the available requests for a service, for example:
117
123
  ```ruby
@@ -158,8 +164,8 @@ The following parameters can be used:
158
164
  * `:token`
159
165
  User provided token, overrides all user and password parameters.
160
166
  * `:context`
161
- I you have a proper context with `token id`, `service catalog` and `expire date` you can bypass the authentication to save the api call
162
- Overrides all user and password parameters
167
+ I you have a proper context with `token id`, `service catalog` and `expire date` you can bypass the authentication
168
+ Overrides all user and password parameters
163
169
  Example: ``{:context => { :token => token_id, :catalog => service_catalog, :expires => expire_date }}``
164
170
 
165
171
  #### Keystone v3
@@ -14,7 +14,7 @@ module Misty
14
14
 
15
15
  include Misty::HTTP::NetHTTP
16
16
 
17
- attr_reader :catalog
17
+ attr_reader :catalog, :token
18
18
 
19
19
  def self.factory(auth, config)
20
20
  http = nil
@@ -10,6 +10,7 @@ module Misty
10
10
 
11
11
  module Cinder
12
12
  autoload :V1, "misty/openstack/cinder/v1"
13
+ autoload :V2, "misty/openstack/cinder/v2"
13
14
  autoload :V3, "misty/openstack/cinder/v3"
14
15
  end
15
16
 
@@ -17,6 +18,10 @@ module Misty
17
18
  autoload :V2, "misty/openstack/designate/v2"
18
19
  end
19
20
 
21
+ module Freezer
22
+ autoload :V1, "misty/openstack/freezer/v1"
23
+ end
24
+
20
25
  module Glance
21
26
  autoload :V1, "misty/openstack/glance/v1"
22
27
  autoload :V2, "misty/openstack/glance/v2"
@@ -47,6 +52,10 @@ module Misty
47
52
  autoload :V2, "misty/openstack/manila/v2"
48
53
  end
49
54
 
55
+ module Murano
56
+ autoload :V1, "misty/openstack/murano/v1"
57
+ end
58
+
50
59
  module Neutron
51
60
  autoload :V2_0, "misty/openstack/neutron/v2_0"
52
61
  end
@@ -55,6 +64,10 @@ module Misty
55
64
  autoload :V2_1, "misty/openstack/nova/v2_1"
56
65
  end
57
66
 
67
+ module Octavia
68
+ autoload :V2_0, "misty/openstack/octavia/v2_0"
69
+ end
70
+
58
71
  module Sahara
59
72
  autoload :V1_1, "misty/openstack/sahara/v1_1"
60
73
  end
@@ -71,6 +84,10 @@ module Misty
71
84
  autoload :V1, "misty/openstack/swift/v1"
72
85
  end
73
86
 
87
+ module Tacker
88
+ autoload :V1_0, "misty/openstack/tacker/v1_0"
89
+ end
90
+
74
91
  module Trove
75
92
  autoload :V1_0, "misty/openstack/trove/v1_0"
76
93
  end
@@ -7,6 +7,8 @@ module Misty
7
7
  attr_accessor :auth, :content_type, :interface, :log, :region_id, :ssl_verify_mode
8
8
  end
9
9
 
10
+ attr_reader :auth
11
+
10
12
  def self.dot_to_underscore(val)
11
13
  val.gsub(/\./,'_')
12
14
  end
@@ -38,10 +40,18 @@ module Misty
38
40
  klass.new(@auth, @config, service.options)
39
41
  end
40
42
 
43
+ def application_catalog
44
+ @application_catalog ||= build_service(:application_catalog)
45
+ end
46
+
41
47
  def alarming
42
48
  @alarming ||= build_service(:alarming)
43
49
  end
44
50
 
51
+ def backup
52
+ @backup ||= build_service(:backup)
53
+ end
54
+
45
55
  def baremetal
46
56
  @baremetal ||= build_service(:baremetal)
47
57
  end
@@ -50,8 +60,6 @@ module Misty
50
60
  @block_storage ||= build_service(:block_storage)
51
61
  end
52
62
 
53
- alias volume block_storage
54
-
55
63
  def clustering
56
64
  @clustering ||= build_service(:clustering)
57
65
  end
@@ -88,6 +96,10 @@ module Misty
88
96
  @image ||= build_service(:image)
89
97
  end
90
98
 
99
+ def load_balancer
100
+ @load_balancer ||= build_service(:load_balancer)
101
+ end
102
+
91
103
  def messaging
92
104
  @messaging ||= build_service(:messaging)
93
105
  end
@@ -96,8 +108,12 @@ module Misty
96
108
  @metering ||= build_service(:metering)
97
109
  end
98
110
 
99
- def network
100
- @network ||= build_service(:network)
111
+ def networking
112
+ @networking ||= build_service(:networking)
113
+ end
114
+
115
+ def nfv_orchestration
116
+ @nfv_orchestration ||= build_service(:nfv_orchestration)
101
117
  end
102
118
 
103
119
  def object_storage
@@ -115,5 +131,25 @@ module Misty
115
131
  def shared_file_systems
116
132
  @shared_file_systems ||= build_service(:shared_file_systems)
117
133
  end
134
+
135
+ alias volume block_storage
136
+
137
+ private
138
+
139
+ def method_missing(method_name)
140
+ services_avail = []
141
+ @services.names.each do |service_name|
142
+ services_avail << service_name if /#{method_name}/.match(service_name)
143
+ end
144
+
145
+ if services_avail.size == 1
146
+ self.send(services_avail[0])
147
+ return self.instance_variable_get("@#{services_avail[0]}")
148
+ elsif services_avail.size > 1
149
+ raise NoMethodError, "Ambiguous Cloud Service: #{method_name}"
150
+ else
151
+ raise NoMethodError, "No such Cloud Service: #{method_name}"
152
+ end
153
+ end
118
154
  end
119
155
  end
@@ -30,9 +30,11 @@ module Misty
30
30
 
31
31
  def self.services
32
32
  services = Misty::Services.new
33
+ services.add(:application_catalog, :murano, ["v1"])
33
34
  services.add(:alarming, :aodh, ["v2"])
35
+ services.add(:backup, :freezer, ["v1"])
34
36
  services.add(:baremetal, :ironic, ["v1"])
35
- services.add(:block_storage, :cinder, ["v3", "v1"])
37
+ services.add(:block_storage, :cinder, ["v3", "v2", "v1"])
36
38
  services.add(:clustering, :senlin, ["v1"])
37
39
  services.add(:compute, :nova, ["v2.1"])
38
40
  services.add(:container, :magnum, ["v1"])
@@ -42,9 +44,11 @@ module Misty
42
44
  services.add(:dns, :designate, ["v2"])
43
45
  services.add(:identity, :keystone, ["v3", "v2.0"])
44
46
  services.add(:image, :glance, ["v2", "v1"])
47
+ services.add(:load_balancer, :octavia, ["v2.0"])
45
48
  services.add(:messaging, :zaqar, ["v2"])
46
49
  services.add(:metering, :ceilometer, ["v2"])
47
- services.add(:network, :neutron, ["v2.0"])
50
+ services.add(:networking, :neutron, ["v2.0"])
51
+ services.add(:nfv_orchestration, :tacker, ["v1.0"])
48
52
  services.add(:object_storage, :swift, ["v1"])
49
53
  services.add(:orchestration, :heat, ["v1"])
50
54
  services.add(:search, :searchlight, ["v1"])
@@ -0,0 +1,125 @@
1
+ module Misty::Openstack::CinderV2
2
+ def v2
3
+ {"/"=>{:GET=>[:list_api_versions]},
4
+ "/v2/{tenant_id}/backups/detail"=>{:GET=>[:list_backups_with_details]},
5
+ "/v2/{tenant_id}/backups/{backup_id}"=>
6
+ {:GET=>[:show_backup_details], :DELETE=>[:delete_backup]},
7
+ "/v2/{tenant_id}/backups/{backup_id}/restore"=>{:POST=>[:restore_backup]},
8
+ "/v2/{tenant_id}/backups"=>{:POST=>[:create_backup], :GET=>[:list_backups]},
9
+ "/v2/{tenant_id}/backups/{backup_id}/action"=>{:POST=>[:force_delete_backup]},
10
+ "/v2/{tenant_id}/capabilities/{hostname}"=>
11
+ {:GET=>[:show_back_end_capabilities]},
12
+ "/v2/{tenant_id}/cgsnapshots/{cgsnapshot_id}"=>
13
+ {:DELETE=>[:delete_consistency_group_snapshot],
14
+ :GET=>[:show_consistency_group_snapshot_details]},
15
+ "/v2/{tenant_id}/cgsnapshots/detail"=>
16
+ {:GET=>[:list_consistency_group_snapshots_with_details]},
17
+ "/v2/{tenant_id}/cgsnapshots"=>
18
+ {:GET=>[:list_consistency_group_snapshots],
19
+ :POST=>[:create_consistency_group_snapshot]},
20
+ "/v2/{tenant_id}/consistencygroups"=>
21
+ {:GET=>[:list_consistency_groups], :POST=>[:create_consistency_group]},
22
+ "/v2/{tenant_id}/consistencygroups/{consistencygroup_id}"=>
23
+ {:GET=>[:show_consistency_group_details]},
24
+ "/v2/{tenant_id}/consistencygroups/create_from_src"=>
25
+ {:POST=>[:create_consistency_group_from_source]},
26
+ "/v2/{tenant_id}/consistencygroups/{consistencygroup_id}/delete"=>
27
+ {:POST=>[:delete_consistency_group]},
28
+ "/v2/{tenant_id}/consistencygroups/detail"=>
29
+ {:GET=>[:list_consistency_groups_with_details]},
30
+ "/v2/{tenant_id}/consistencygroups/{consistencygroup_id}/update"=>
31
+ {:PUT=>[:update_consistency_group]},
32
+ "/v2/{admin_tenant_id}/os-hosts"=>{:GET=>[:list_all_hosts]},
33
+ "/v2/{admin_tenant_id}/os-hosts/{host_name}"=>{:GET=>[:show_host_details]},
34
+ "/v2/{tenant_id}/limits"=>{:GET=>[:show_absolute_limits]},
35
+ "/v2/{tenant_id}/os-vol-image-meta"=>
36
+ {:GET=>[:show_image_metadata_for_volume]},
37
+ "/v2/{tenant_id}/scheduler-stats/get_pools"=>
38
+ {:GET=>[:list_back_end_storage_pools]},
39
+ "/v2/{tenant_id}/os-volume-transfer/{transfer_id}/accept"=>
40
+ {:POST=>[:accept_volume_transfer]},
41
+ "/v2/{tenant_id}/os-volume-transfer"=>
42
+ {:POST=>[:create_volume_transfer], :GET=>[:list_volume_transfers]},
43
+ "/v2/{tenant_id}/os-volume-transfer/{transfer_id}"=>
44
+ {:GET=>[:show_volume_transfer_details], :DELETE=>[:delete_volume_transfer]},
45
+ "/v2/{tenant_id}/os-volume-transfer/detail"=>
46
+ {:GET=>[:list_volume_transfers_with_details]},
47
+ "/v2/{tenant_id}/qos-specs/{qos_id}/disassociate_all"=>
48
+ {:GET=>[:disassociate_qos_specification_from_all_associations]},
49
+ "/v2/{tenant_id}/qos-specs/{qos_id}/delete_keys"=>
50
+ {:PUT=>[:unset_keys_in_qos_specification]},
51
+ "/v2/{tenant_id}/qos-specs/{qos_id}/associations"=>
52
+ {:GET=>[:get_all_associations_for_qos_specification]},
53
+ "/v2/{tenant_id}/qos-specs/{qos_id}/associate"=>
54
+ {:GET=>[:associate_qos_specification_with_volume_type]},
55
+ "/v2/{tenant_id}/qos-specs/{qos_id}/disassociate"=>
56
+ {:GET=>[:disassociate_qos_specification_from_volume_type]},
57
+ "/v2/{tenant_id}/qos-specs/{qos_id}"=>
58
+ {:GET=>[:show_qos_specification_details],
59
+ :PUT=>[:set_keys_in_qos_specification],
60
+ :DELETE=>[:delete_qos_specification]},
61
+ "/v2/{tenant_id}/qos-specs"=>
62
+ {:POST=>[:create_qos_specification], :GET=>[:list_qos_specs]},
63
+ "/v2/{admin_tenant_id}/os-quota-sets/{tenant_id}"=>
64
+ {:GET=>[:show_quotas], :PUT=>[:update_quotas], :DELETE=>[:delete_quotas]},
65
+ "/v2/{admin_tenant_id}/os-quota-sets/{tenant_id}/defaults"=>
66
+ {:GET=>[:get_default_quotas]},
67
+ "/v2/{tenant_id}/os-volume-manage"=>{:POST=>[:manage_existing_volume]},
68
+ "/v2/{tenant_id}/types/{volume_type}/action"=>
69
+ {:POST=>
70
+ [:add_private_volume_type_access, :remove_private_volume_type_access]},
71
+ "/v2/{tenant_id}/types/{volume_type}/os-volume-type-access"=>
72
+ {:GET=>[:list_private_volume_type_access_details]},
73
+ "/v2/{tenant_id}/extensions"=>{:GET=>[:list_api_extensions]},
74
+ "/v2/{tenant_id}/snapshots/detail"=>{:GET=>[:list_snapshots_with_details]},
75
+ "/v2/{tenant_id}/snapshots"=>
76
+ {:POST=>[:create_snapshot], :GET=>[:list_snapshots]},
77
+ "/v2/{tenant_id}/snapshots/{snapshot_id}/metadata"=>
78
+ {:GET=>[:show_snapshot_metadata],
79
+ :POST=>[:create_snapshot_metadata],
80
+ :PUT=>[:update_snapshot_metadata]},
81
+ "/v2/{tenant_id}/snapshots/{snapshot_id}"=>
82
+ {:GET=>[:show_snapshot_details],
83
+ :PUT=>[:update_snapshot],
84
+ :DELETE=>[:delete_snapshot]},
85
+ "/v2/{tenant_id}/types/{volume_type_id}"=>
86
+ {:PUT=>[:update_volume_type, :update_extra_specs_for_a_volume_type],
87
+ :GET=>[:show_volume_type_details_for_v2],
88
+ :DELETE=>[:delete_volume_type]},
89
+ "/v2/{tenant_id}/types"=>
90
+ {:GET=>[:list_all_volume_types_for_v2], :POST=>[:create_volume_type_for_v2]},
91
+ "/v2/{tenant_id}/types/{volume_type_id}/encryption"=>
92
+ {:GET=>[:show_an_encryption_type_for_v2],
93
+ :POST=>[:create_an_encryption_type_for_v2]},
94
+ "/v2/{tenant_id}/types/{volume_type_id}/encryption/{encryption_id}"=>
95
+ {:GET=>[:delete_an_encryption_type_for_v2],
96
+ :POST=>[:update_an_encryption_type_for_v2]},
97
+ "/v2"=>{:GET=>[:show_api_v2_details]},
98
+ "/v2/{tenant_id}/volumes/{volume_id}/action"=>
99
+ {:POST=>
100
+ [:extend_volume_size,
101
+ :reset_volume_statuses,
102
+ :set_image_metadata_for_volume,
103
+ :remove_image_metadata_from_volume,
104
+ :attach_volume_to_server,
105
+ :detach_volume_from_a_server,
106
+ :unmanage_volume,
107
+ :force_detach_volume,
108
+ :force_delete_volume,
109
+ :update_volume_bootable_status]},
110
+ "/v2/{project_id}/volumes/{volume_id}/action"=>{:POST=>[:retype_volume]},
111
+ "/v2/{tenant_id}/volumes/detail"=>{:GET=>[:list_volumes_with_details]},
112
+ "/v2/{tenant_id}/volumes"=>{:POST=>[:create_volume], :GET=>[:list_volumes]},
113
+ "/v2/{tenant_id}/volumes/{volume_id}"=>
114
+ {:GET=>[:show_volume_details],
115
+ :PUT=>[:update_volume],
116
+ :DELETE=>[:delete_volume]},
117
+ "/v2/{tenant_id}/volumes/{volume_id}/metadata"=>
118
+ {:POST=>[:create_volume_metadata],
119
+ :GET=>[:show_volume_metadata],
120
+ :PUT=>[:update_volume_metadata]},
121
+ "/v2/{tenant_id}/volumes/{volume_id}/metadata/{key}"=>
122
+ {:GET=>[:show_volume_metadata_for_a_specific_key],
123
+ :DELETE=>[:delete_volume_metadata]}}
124
+ end
125
+ end
@@ -1,9 +1,108 @@
1
1
  module Misty::Openstack::CinderV3
2
2
  def v3
3
- {"/"=>{:GET=>[:list_all_api_versions, :list_known_api_versions]},
3
+ {"/"=>{:GET=>[:list_all_api_versions]},
4
+ "/v3"=>{:GET=>[:show_api_v3_details]},
5
+ "/v3/{project_id}/extensions"=>{:GET=>[:list_known_api_extensions]},
6
+ "/v3/{project_id}/types/{volume_type_id}"=>
7
+ {:PUT=>[:update_a_volume_type, :update_extra_specs_for_volume_type],
8
+ :GET=>[:show_volume_type_detail],
9
+ :DELETE=>[:delete_a_volume_type]},
10
+ "/v3/{project_id}/types"=>
11
+ {:GET=>[:list_all_volume_types], :POST=>[:create_a_volume_type]},
12
+ "/v3/{project_id}/types/{volume_type_id}/encryption"=>
13
+ {:GET=>[:show_an_encryption_type], :POST=>[:create_an_encryption_type]},
14
+ "/v3/{project_id}/types/{volume_type_id}/encryption/{encryption_id}"=>
15
+ {:GET=>[:delete_an_encryption_type], :POST=>[:update_an_encryption_type]},
16
+ "/v3/{project_id}/types/{volume_type}/action"=>
17
+ {:POST=>
18
+ [:add_private_volume_type_access_to_project,
19
+ :remove_private_volume_type_access_from_project]},
20
+ "/v3/{project_id}/types/{volume_type}/os-volume-type-access"=>
21
+ {:GET=>[:list_private_volume_type_access_detail]},
22
+ "/v3/{project_id}/volumes/detail"=>
23
+ {:GET=>[:list_accessible_volumes_with_details]},
24
+ "/v3/{project_id}/volumes"=>
25
+ {:POST=>[:create_a_volume], :GET=>[:list_accessible_volumes]},
26
+ "/v3/{project_id}/volumes/{volume_id}"=>
27
+ {:GET=>[:show_a_volume_s_details],
28
+ :PUT=>[:update_a_volume],
29
+ :DELETE=>[:delete_a_volume]},
30
+ "/v3/{project_id}/volumes/{volume_id}/metadata"=>
31
+ {:POST=>[:create_metadata_for_volume],
32
+ :GET=>[:show_a_volume_s_metadata],
33
+ :PUT=>[:update_a_volume_s_metadata]},
34
+ "/v3/{project_id}/volumes/{volume_id}/metadata/{key}"=>
35
+ {:GET=>[:show_a_volume_s_metadata_for_a_specific_key],
36
+ :DELETE=>[:delete_a_volume_s_metadata],
37
+ :PUT=>[:update_a_volume_s_metadata_for_a_specific_key]},
38
+ "/v3/{project_id}/volumes/summary"=>{:GET=>[:get_volumes_summary]},
39
+ "/v3/{project_id}/volumes/{volume_id}/action"=>
40
+ {:POST=>
41
+ [:extend_a_volume_size,
42
+ :reset_a_volume_s_statuses,
43
+ :revert_volume_to_snapshot,
44
+ :set_image_metadata_for_a_volume,
45
+ :remove_image_metadata_from_a_volume,
46
+ :attach_volume_to_a_server,
47
+ :detach_volume_from_server,
48
+ :unmanage_a_volume,
49
+ :force_detach_a_volume,
50
+ :retype_a_volume,
51
+ :force_delete_a_volume,
52
+ :update_a_volume_s_bootable_status,
53
+ :upload_volume_to_image]},
54
+ "/v3/{project_id}/os-vol-image-meta"=>
55
+ {:GET=>[:show_image_metadata_for_a_volume]},
56
+ "/v3/{project_id}/manageable_volumes"=>
57
+ {:POST=>[:manage_an_existing_volume],
58
+ :GET=>[:list_summary_of_volumes_available_to_manage]},
59
+ "/v3/{project_id}/manageable_volumes/detail"=>
60
+ {:GET=>[:list_detail_of_volumes_available_to_manage]},
61
+ "/v3/{project_id}/snapshots/detail"=>{:GET=>[:list_snapshots_and_details]},
62
+ "/v3/{project_id}/snapshots"=>
63
+ {:POST=>[:create_a_snapshot], :GET=>[:list_accessible_snapshots]},
64
+ "/v3/{project_id}/snapshots/{snapshot_id}/metadata"=>
65
+ {:GET=>[:show_a_snapshot_s_metadata],
66
+ :POST=>[:create_a_snapshot_s_metadata],
67
+ :PUT=>[:update_a_snapshot_s_metadata]},
68
+ "/v3/{project_id}/snapshots/{snapshot_id}"=>
69
+ {:GET=>[:show_a_snapshot_s_details],
70
+ :PUT=>[:update_a_snapshot],
71
+ :DELETE=>[:delete_a_snapshot]},
72
+ "/v3/{project_id}/snapshot/{snapshot_id}/metadata/{key}"=>
73
+ {:GET=>[:show_a_snapshot_s_metadata_for_a_specific_key]},
74
+ "/v3/{project_id}/snapshots/{snapshot_id}/metadata/{key}"=>
75
+ {:DELETE=>[:delete_a_snapshot_s_metadata],
76
+ :PUT=>[:update_a_snapshot_s_metadata_for_a_specific_key]},
77
+ "/v3/{project_id}/manageable_snapshots"=>
78
+ {:POST=>[:manage_an_existing_snapshot],
79
+ :GET=>[:list_summary_of_snapshots_available_to_manage]},
80
+ "/v3/{project_id}/manageable_snapshots/detail"=>
81
+ {:GET=>[:list_detail_of_snapshots_available_to_manage]},
82
+ "/v3/{project_id}/os-volume-transfer/{transfer_id}/accept"=>
83
+ {:POST=>[:accept_a_volume_transfer]},
84
+ "/v3/{project_id}/os-volume-transfer"=>
85
+ {:POST=>[:create_a_volume_transfer],
86
+ :GET=>[:list_volume_transfers_for_a_project]},
87
+ "/v3/{project_id}/os-volume-transfer/{transfer_id}"=>
88
+ {:GET=>[:show_volume_transfer_detail], :DELETE=>[:delete_a_volume_transfer]},
89
+ "/v3/{project_id}/os-volume-transfer/detail"=>
90
+ {:GET=>[:list_volume_transfers_and_details]},
91
+ "/v3/{project_id}/attachments/{attachment_id}"=>
92
+ {:DELETE=>[:delete_attachment],
93
+ :GET=>[:show_attachment_details],
94
+ :PUT=>[:update_an_attachment]},
95
+ "/v3/{project_id}/attachments/detail"=>
96
+ {:GET=>[:list_attachments_with_details]},
97
+ "/v3/{project_id}/attachments"=>
98
+ {:GET=>[:list_attachments], :POST=>[:create_attachment]},
99
+ "/v3/{project_id}/scheduler-stats/get_pools"=>
100
+ {:GET=>[:list_all_back_end_storage_pools]},
4
101
  "/v3/{project_id}/backups/detail"=>{:GET=>[:list_backups_with_detail]},
5
102
  "/v3/{project_id}/backups/{backup_id}"=>
6
- {:GET=>[:show_backup_detail], :DELETE=>[:delete_a_backup]},
103
+ {:GET=>[:show_backup_detail],
104
+ :DELETE=>[:delete_a_backup],
105
+ :PUT=>[:update_a_backup]},
7
106
  "/v3/{project_id}/backups/{backup_id}/restore"=>{:POST=>[:restore_a_backup]},
8
107
  "/v3/{project_id}/backups"=>
9
108
  {:POST=>[:create_a_backup], :GET=>[:list_backups_for_project]},
@@ -11,14 +110,6 @@ module Misty::Openstack::CinderV3
11
110
  {:POST=>[:force_delete_a_backup]},
12
111
  "/v3/{project_id}/capabilities/{hostname}"=>
13
112
  {:GET=>[:show_all_back_end_capabilities]},
14
- "/v3/{project_id}/cgsnapshots/{cgsnapshot_id}"=>
15
- {:DELETE=>[:delete_a_consistency_group_snapshot],
16
- :GET=>[:show_consistency_group_snapshot_detail]},
17
- "/v3/{project_id}/cgsnapshots/detail"=>
18
- {:GET=>[:list_all_consistency_group_snapshots_with_details]},
19
- "/v3/{project_id}/cgsnapshots"=>
20
- {:GET=>[:list_all_consistency_group_snapshots],
21
- :POST=>[:create_a_consistency_group_snapshot]},
22
113
  "/v3/{project_id}/consistencygroups"=>
23
114
  {:GET=>[:list_project_s_consistency_groups],
24
115
  :POST=>[:create_a_consistency_group]},
@@ -32,11 +123,20 @@ module Misty::Openstack::CinderV3
32
123
  {:GET=>[:list_consistency_groups_and_details]},
33
124
  "/v3/{project_id}/consistencygroups/{consistencygroup_id}/update"=>
34
125
  {:PUT=>[:update_a_consistency_group]},
126
+ "/v3/{project_id}/cgsnapshots/{cgsnapshot_id}"=>
127
+ {:DELETE=>[:delete_a_consistency_group_snapshot],
128
+ :GET=>[:show_consistency_group_snapshot_detail]},
129
+ "/v3/{project_id}/cgsnapshots/detail"=>
130
+ {:GET=>[:list_all_consistency_group_snapshots_with_details]},
131
+ "/v3/{project_id}/cgsnapshots"=>
132
+ {:GET=>[:list_all_consistency_group_snapshots],
133
+ :POST=>[:create_a_consistency_group_snapshot]},
35
134
  "/v3/{project_id}/groups"=>{:GET=>[:list_groups], :POST=>[:create_group]},
36
135
  "/v3/{project_id}/groups/{group_id}"=>
37
136
  {:GET=>[:show_group_details], :PUT=>[:update_group]},
38
137
  "/v3/{project_id}/groups/action"=>{:POST=>[:create_group_from_source]},
39
- "/v3/{project_id}/groups/{group_id}/action"=>{:POST=>[:delete_group]},
138
+ "/v3/{project_id}/groups/{group_id}/action"=>
139
+ {:POST=>[:delete_group, :reset_group_status]},
40
140
  "/v3/{project_id}/groups/detail"=>{:GET=>[:list_groups_with_details]},
41
141
  "/v3/{project_id}/group_snapshots/{group_snapshot_id}"=>
42
142
  {:DELETE=>[:delete_group_snapshot], :GET=>[:show_group_snapshot_details]},
@@ -44,6 +144,8 @@ module Misty::Openstack::CinderV3
44
144
  {:GET=>[:list_group_snapshots_with_details]},
45
145
  "/v3/{project_id}/group_snapshots"=>
46
146
  {:GET=>[:list_group_snapshots], :POST=>[:create_group_snapshot]},
147
+ "/v3/{project_id}/group_snapshots/{group_snapshot_id}/action"=>
148
+ {:POST=>[:reset_group_snapshot_status]},
47
149
  "/v3/{project_id}/group_types/{group_type_id}"=>
48
150
  {:PUT=>[:update_group_type],
49
151
  :GET=>[:show_group_type_details],
@@ -52,20 +154,14 @@ module Misty::Openstack::CinderV3
52
154
  {:POST=>[:create_group_specs_for_a_group_type]},
53
155
  "/v3/{project_id}/group_types"=>
54
156
  {:GET=>[:list_group_types], :POST=>[:create_group_type]},
157
+ "/v3/{admin_project_id}/os-hosts"=>{:GET=>[:list_all_hosts_for_a_project]},
158
+ "/v3/{admin_project_id}/os-hosts/{host_name}"=>
159
+ {:GET=>[:show_host_details_for_a_project]},
55
160
  "/v3/{project_id}/limits"=>{:GET=>[:show_absolute_limits_for_project]},
56
- "/v3/{project_id}/os-vol-image-meta"=>
57
- {:GET=>[:show_image_metadata_for_a_volume]},
58
- "/v3/{project_id}/scheduler-stats/get_pools"=>
59
- {:GET=>[:list_all_back_end_storage_pools]},
60
- "/v3/{project_id}/os-volume-transfer/{transfer_id}/accept"=>
61
- {:POST=>[:accept_a_volume_transfer]},
62
- "/v3/{project_id}/os-volume-transfer"=>
63
- {:POST=>[:create_a_volume_transfer],
64
- :GET=>[:list_volume_transfers_for_a_project]},
65
- "/v3/{project_id}/os-volume-transfer/{transfer_id}"=>
66
- {:GET=>[:show_volume_transfer_detail], :DELETE=>[:delete_a_volume_transfer]},
67
- "/v3/{project_id}/os-volume-transfer/detail"=>
68
- {:GET=>[:list_volume_transfers_and_details]},
161
+ "/v3/{project_id}/messages/{message_id}"=>
162
+ {:DELETE=>[:delete_message], :GET=>[:show_message_details]},
163
+ "/v3/{project_id}/messages"=>{:GET=>[:list_messages]},
164
+ "/v3/{project_id}/resource_filters"=>{:GET=>[:list_resource_filters]},
69
165
  "/v3/{project_id}/qos-specs/{qos_id}/disassociate_all"=>
70
166
  {:GET=>[:disassociate_a_qos_specification_from_all_associations]},
71
167
  "/v3/{project_id}/qos-specs/{qos_id}/delete_keys"=>
@@ -82,67 +178,11 @@ module Misty::Openstack::CinderV3
82
178
  :DELETE=>[:delete_a_qos_specification]},
83
179
  "/v3/{project_id}/qos-specs"=>
84
180
  {:POST=>[:create_a_qos_specification], :GET=>[:list_qos_specifications]},
85
- "/v3/{admin_project_id}/os-quota-sets/{project_id}/{user_id}"=>
86
- {:GET=>[:show_quotas_for_a_user],
87
- :PUT=>[:update_quotas_for_a_user],
88
- :DELETE=>[:delete_quotas_for_a_user]},
89
181
  "/v3/{admin_project_id}/os-quota-sets/{project_id}"=>
90
182
  {:GET=>[:show_quotas_for_a_project],
91
183
  :PUT=>[:update_quotas_for_a_project],
92
184
  :DELETE=>[:delete_quotas_for_a_project]},
93
- "/v3/{admin_project_id}/os-quota-sets/{project_id}/detail/{user_id}"=>
94
- {:GET=>[:show_quota_details_for_a_user]},
95
- "/v3/{project_id}/os-quota-sets/defaults"=>
96
- {:GET=>[:get_default_quotas_for_a_project]},
97
- "/v3/{project_id}/os-volume-manage"=>{:POST=>[:manage_an_existing_volume]},
98
- "/v3/{project_id}/types/{volume_type}/action"=>
99
- {:POST=>
100
- [:add_private_volume_type_access_to_project,
101
- :remove_private_volume_type_access_from_project]},
102
- "/v3/{project_id}/types/{volume_type}/os-volume-type-access"=>
103
- {:GET=>[:list_private_volume_type_access_detail]},
104
- "/v3/{project_id}/extensions"=>{:GET=>[:list_known_api_extensions]},
105
- "/v3/{project_id}/snapshots/detail"=>{:GET=>[:list_snapshots_and_details]},
106
- "/v3/{project_id}/snapshots"=>
107
- {:POST=>[:create_a_snapshot], :GET=>[:list_accessible_snapshots]},
108
- "/v3/{project_id}/snapshots/{snapshot_id}/metadata"=>
109
- {:GET=>[:show_a_snapshot_s_metadata], :PUT=>[:update_a_snapshot_s_metadata]},
110
- "/v3/{project_id}/snapshots/{snapshot_id}"=>
111
- {:GET=>[:show_a_snapshot_s_details],
112
- :PUT=>[:update_a_snapshot],
113
- :DELETE=>[:delete_a_snapshot]},
114
- "/v3/{project_id}/types/{volume_type_id}"=>
115
- {:PUT=>[:update_a_volume_type, :update_extra_specs_for_volume_type],
116
- :GET=>[:show_volume_type_detail],
117
- :DELETE=>[:delete_a_volume_type]},
118
- "/v3/{project_id}/types"=>
119
- {:GET=>[:list_all_volume_types], :POST=>[:create_a_volume_type]},
120
- "/v3/{project_id}/types/{volume_type_id}/encryption"=>
121
- {:GET=>[:show_an_encryption_type], :POST=>[:create_an_encryption_type]},
122
- "/v3/{project_id}/types/{volume_type_id}/encryption/{encryption_id}"=>
123
- {:GET=>[:delete_an_encryption_type], :POST=>[:update_an_encryption_type]},
124
- "/v3"=>{:GET=>[:show_api_v3_details]},
125
- "/v3/{project_id}/volumes/{volume_id}/action"=>
126
- {:POST=>
127
- [:extend_a_volume_size,
128
- :reset_a_volume_s_statuses,
129
- :set_image_metadata_for_a_volume,
130
- :remove_image_metadata_from_a_volume,
131
- :attach_volume_to_a_server,
132
- :unmanage_a_volume,
133
- :force_detach_a_volume]},
134
- "/v3/{project_id}/volumes/detail"=>
135
- {:GET=>[:list_accessbile_volumes_with_details]},
136
- "/v3/{project_id}/volumes"=>
137
- {:POST=>[:create_a_volume], :GET=>[:list_accessible_volumes]},
138
- "/v3/{project_id}/volumes/{volume_id}"=>
139
- {:GET=>[:show_a_volume_s_details],
140
- :PUT=>[:update_a_volume],
141
- :DELETE=>[:delete_a_volume]},
142
- "/v3/{project_id}/volumes/{volume_id}/metadata"=>
143
- {:POST=>[:create_metadata_for_volume],
144
- :GET=>[:show_a_volume_s_metadata],
145
- :PUT=>[:update_a_volume_s_metadata]},
146
- "/v3/{project_id}/volumes/summary"=>{:GET=>[:get_volumes_summary]}}
185
+ "/v3/{admin_project_id}/os-quota-sets/{project_id}/defaults"=>
186
+ {:GET=>[:get_default_quotas_for_a_project]}}
147
187
  end
148
188
  end