misty 1.3.3 → 1.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +332 -267
- data/lib/misty.rb +1 -1
- data/lib/misty/auth.rb +17 -6
- data/lib/misty/auth/auth_v2.rb +3 -0
- data/lib/misty/auth/auth_v3.rb +13 -5
- data/lib/misty/auth/name.rb +3 -3
- data/lib/misty/client_pack.rb +2 -2
- data/lib/misty/cloud.rb +111 -76
- data/lib/misty/config.rb +138 -0
- data/lib/misty/{auth/errors.rb → errors.rb} +9 -1
- data/lib/misty/http/direct.rb +18 -1
- data/lib/misty/http/method_builder.rb +10 -17
- data/lib/misty/http/net_http.rb +1 -1
- data/lib/misty/http/request.rb +26 -14
- data/lib/misty/microversion.rb +22 -41
- data/lib/misty/misty.rb +14 -24
- data/lib/misty/openstack/cinder/v3.rb +8 -0
- data/lib/misty/openstack/ironic/v1.rb +8 -0
- data/lib/misty/openstack/magnum/v1.rb +5 -1
- data/lib/misty/openstack/manila/v2.rb +8 -0
- data/lib/misty/openstack/nova/v2_1.rb +13 -8
- data/lib/misty/openstack/service.rb +88 -0
- data/lib/misty/openstack/swift/v1.rb +2 -2
- data/lib/misty/service.rb +9 -12
- data/lib/misty/version.rb +1 -1
- data/test/integration/{network_test.rb → networking_test.rb} +8 -8
- data/test/integration/test_helper.rb +1 -0
- data/test/integration/vcr/{network_using_neutron_v2_0.yml → networking_using_neutron_v2_0.yml} +0 -0
- data/test/unit/auth/name_test.rb +31 -27
- data/test/unit/auth_helper.rb +4 -4
- data/test/unit/auth_test.rb +44 -30
- data/test/unit/cloud/config_test.rb +165 -0
- data/test/unit/cloud/requests_test.rb +0 -12
- data/test/unit/cloud/services_test.rb +41 -12
- data/test/unit/cloud_test.rb +35 -44
- data/test/unit/http/request_test.rb +1 -1
- data/test/unit/microversion_test.rb +59 -35
- data/test/unit/misty_test.rb +1 -1
- data/test/unit/openstack/service_test.rb +52 -0
- data/test/unit/service_helper.rb +23 -20
- data/test/unit/services_test.rb +1 -1
- data/test/unit/test_helper.rb +0 -4
- metadata +37 -22
- data/lib/misty/client.rb +0 -104
- data/test/unit/client_test.rb +0 -97
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ec633eb5c336342f8a86380b8c9b624520ac1e2b
|
4
|
+
data.tar.gz: 51a3e89f79256a33c926ed55800135084ab1e0e3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0bcb3e7a8b98d4b599700e65d59d89ff83d44fe86c3badee004f6579e4cd3939950c397f042d9c629c92d25ffde06b690a782d4cee803e0886a2861146e2361e
|
7
|
+
data.tar.gz: 5360efb6444ee46248d0f4d7467f90d33bf930985044082b7519e1e57935512feb90dd4039ce3ecc6aed4dffa33c60ed28cc82f826ace38082f0f1948a219dda
|
data/README.md
CHANGED
@@ -1,103 +1,264 @@
|
|
1
1
|
# Introduction
|
2
|
-
Misty is a HTTP client for OpenStack APIs, aiming to be
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
*
|
7
|
-
|
8
|
-
|
9
|
-
*
|
10
|
-
|
11
|
-
*
|
2
|
+
Misty is a HTTP client for OpenStack APIs, aiming to be slick and dynamic.
|
3
|
+
|
4
|
+
Misty handles OpenStack APIs requests as Transparently as possible by:
|
5
|
+
* Directly submitting request to Openstack Service endpoints
|
6
|
+
* Or by using APIs Schema defined functions which are dynamically extracted from OpenStackAPI reference.
|
7
|
+
|
8
|
+
## Main features
|
9
|
+
* Standardized OpenStack APIs: [Based upon API-ref](https://developer.openstack.org/api-guide/quick-start/) offering
|
10
|
+
flexibility to easily integrate new OpenStack services. Any request can be overridden or completed
|
11
|
+
* Microversions & Legacy Versions
|
12
|
+
* Transparent request data handling and response data format of choice: JSON or Hash
|
12
13
|
* Custom HTTP Methods for special needs
|
13
|
-
*
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
providing the latest standard of OpenStack APIs.
|
31
|
-
The APIs interface definitions are generated automatically from the API-ref reference manuals (misty-builder) which
|
32
|
-
allows:
|
33
|
-
* More consistent APIs
|
34
|
-
* More recent APIs definitions
|
35
|
-
* Easier addition of a new service's API
|
36
|
-
|
37
|
-
[1] https://developer.openstack.org/api-guide/quick-start/
|
38
|
-
|
39
|
-
# Install & Use
|
40
|
-
|
41
|
-
## Fetch and install
|
14
|
+
* And also: Lazy service loading, Low gem dependency (use only Net/HTTP and JSON), Persistent HTTP connections (default since HTTP 1.1 anyway)
|
15
|
+
|
16
|
+
### Current Microversion support
|
17
|
+
* Cinder
|
18
|
+
v3.44
|
19
|
+
* Ironic
|
20
|
+
v1.32
|
21
|
+
* Magnum
|
22
|
+
v1.4
|
23
|
+
* Manilla
|
24
|
+
v2.40
|
25
|
+
* Nova
|
26
|
+
v2.60
|
27
|
+
|
28
|
+
|
29
|
+
# How To
|
30
|
+
Fetch and install
|
42
31
|
``` ruby
|
43
32
|
gem install misty
|
44
33
|
```
|
34
|
+
## Get started
|
35
|
+
Create a `Misty::Cloud` object with mandatory `:auth` parameter such as:
|
45
36
|
|
46
|
-
## Quick start
|
47
37
|
```ruby
|
48
38
|
require 'misty'
|
39
|
+
cloud = Misty::Cloud.new(
|
40
|
+
:auth => {
|
41
|
+
:url => 'http://localhost:5000',
|
42
|
+
:user => 'admin',
|
43
|
+
:password => 'secret',
|
44
|
+
:domain => 'default',
|
45
|
+
:project => 'admin',
|
46
|
+
:project_domain_id => 'default'
|
47
|
+
})
|
48
|
+
```
|
49
|
+
|
50
|
+
Then requets can be made against OpenStack services:
|
49
51
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
:
|
56
|
-
|
52
|
+
```
|
53
|
+
servers = cloud.compute.list_servers.body
|
54
|
+
networks = cloud.networking.list_networks
|
55
|
+
first_network_id = networks.body['networks'][0]['id']
|
56
|
+
first_network = cloud.networking.show_network_details(first_network_id)
|
57
|
+
network = Misty.to_json(:network => {:name => 'misty-example'})
|
58
|
+
cloud.network.create_network(network)
|
59
|
+
v1 = cloud.baremetal.show_v1_api
|
60
|
+
```
|
61
|
+
## Configuration
|
62
|
+
To provide the maximum flexibility, there are 4 levels of configuration which are always propagated from top to bottom.
|
63
|
+
* The Cloud global defaults
|
64
|
+
* The Cloud global parameters
|
65
|
+
* The service level parameters
|
66
|
+
* The request level ephemeral parameters
|
67
|
+
|
68
|
+
No global parameters provided, the defaults are applied.
|
69
|
+
```ruby
|
70
|
+
cloud = Misty::Cloud.new(:auth => { ... })
|
71
|
+
```
|
72
|
+
|
73
|
+
Some provided global parameters, which override respective global and apply at service level.
|
74
|
+
```ruby
|
75
|
+
cloud = Misty::Cloud.new(:auth => { ... }, :log_file => './misty.log', :headers => {"x-tra:" => "value"})
|
76
|
+
```
|
77
|
+
|
78
|
+
Provided service level parameters are applied for all service requests.
|
79
|
+
Some such as the headers are cumulative.
|
80
|
+
Others such as the microversion feature, don't have global definition.
|
81
|
+
```ruby
|
82
|
+
cloud = Misty::Cloud.new(:auth => { ... }, compute {:version => 2.60})
|
83
|
+
# All following requests are going to be with version 2.60, unless overridden at request level
|
84
|
+
cloud.compute.list_servers
|
85
|
+
```
|
86
|
+
|
87
|
+
And finally, at requests level, provided parameters are ephemeral
|
88
|
+
```ruby
|
89
|
+
cloud = Misty::Cloud.new(:auth => { ... })
|
90
|
+
cloud.compute(:version => 'latest', :content_type => :json, :headers => {"key" => "value"}).list_servers
|
91
|
+
# Back to defaults (since there are no global or service level parameters provided)
|
92
|
+
cloud.compute.list_servers
|
93
|
+
```
|
94
|
+
|
95
|
+
### Authentication
|
96
|
+
Openstack Identity service Keystone version 3 is the default, version 2.0, although deprecated, is available.
|
97
|
+
|
98
|
+
#### Parameters
|
99
|
+
The following parameters can be used:
|
100
|
+
To authenticate with credentials details:
|
101
|
+
* `:context` - Allow to provide already authenticated context(catalog, token, expiry time). Used for v2.0 only.
|
102
|
+
Exclusive with other parameters.
|
103
|
+
* `:domain_id` - Domain id, default: "default"
|
104
|
+
* `:domain` - Domain name, default: "Default"
|
105
|
+
* `:password` - User password. Exclusive with :token.
|
106
|
+
* `:project_id` - Project id
|
107
|
+
* `:project` - Project name
|
108
|
+
* `:project_domain_id` - Project domain id
|
109
|
+
* `:project_domain` - Project domain name
|
110
|
+
* `:ssl_verify_mode` - Boolean flag for SSL client verification. SSL is defined when URI scheme => "https://".
|
111
|
+
* `:tenant_id` - Tenant id, used for v2.0 only.
|
112
|
+
* `:tenant` - Tenant name, used for v2.0 only.
|
113
|
+
* `:token` - Allow to provide unscoped token.
|
114
|
+
* `:user_id` - User id
|
115
|
+
* `:user` - User name
|
116
|
+
* `:user_domain_id` - User domain id
|
117
|
+
* `:user_domain` - User domain name
|
118
|
+
|
119
|
+
##### Keystone v3
|
120
|
+
Version 3 relies on the concept of domain name or id to authenticates
|
121
|
+
|
122
|
+
`Misty::AuthV3` is used by default unless authentication credentials contains a tenant name or id in wich case it
|
123
|
+
will use on `Misty::AuthV2`.
|
124
|
+
|
125
|
+
The credentials are a combination of "id" and "name" used to uniquely identify projects, users and their domains.
|
126
|
+
When using only the name, a domain must be specified to guarantee a unique record from the Identity service.
|
127
|
+
|
128
|
+
###### Examples
|
129
|
+
```ruby
|
130
|
+
auth = {
|
131
|
+
:url => 'http://localhost:5000',
|
132
|
+
:user => 'admin',
|
133
|
+
:user_domain => 'default',
|
134
|
+
:password => 'secret',
|
135
|
+
:project => 'admin',
|
136
|
+
:project_domain => 'default'
|
137
|
+
}
|
57
138
|
}
|
139
|
+
cloud = Misty::Cloud.new(:auth => auth_v3)
|
140
|
+
# The API requests are of course specific to this version:
|
141
|
+
cloud.identity.list_projects
|
142
|
+
```
|
58
143
|
|
59
|
-
|
144
|
+
Using IDs:
|
145
|
+
```ruby
|
146
|
+
auth = {
|
147
|
+
:url => 'http://localhost:5000',
|
148
|
+
:user_id => '48985e6b8da145699d411f12a3459fca',
|
149
|
+
:password => 'secret',
|
150
|
+
:project_id => '8e1e232f6cbb4116bbef715d8a0afe6e',
|
151
|
+
}
|
152
|
+
}
|
153
|
+
```
|
60
154
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
network = openstack.network.show_network_details(network_id)
|
66
|
-
puts network.body
|
155
|
+
Or alternatively using a context
|
156
|
+
```ruby
|
157
|
+
context = { :context => { :token => token_id, :catalog => service_catalog, :expires => expire_date } }
|
158
|
+
cloud = Misty::Cloud.new(:auth => context)
|
67
159
|
```
|
68
160
|
|
69
|
-
|
70
|
-
|
161
|
+
##### Keystone v2.0
|
162
|
+
By providing tenant details Misty will detect it's using v2.0 for authentication:
|
163
|
+
|
164
|
+
```ruby
|
165
|
+
auth = {
|
166
|
+
:url => 'http://localhost:5000',
|
167
|
+
:user => 'admin',
|
168
|
+
:password => 'secret',
|
169
|
+
:tenant => 'admin',
|
170
|
+
}
|
171
|
+
cloud = Misty::Cloud.new(:auth => auth_v2)
|
172
|
+
# The API requests are of course specific to this version:
|
173
|
+
cloud.identity.list_tenants
|
174
|
+
```
|
175
|
+
|
176
|
+
##### Note
|
177
|
+
It's possible to authenticate against Keystone V3 and use the identity service v2.0, for instance:
|
178
|
+
In which case API set for v2.0 applies: tenants are available but not the projects.
|
179
|
+
```ruby
|
180
|
+
cloud = Misty::Cloud.new(:auth => auth_v3)
|
181
|
+
cloud.identity(:api_version => 'v2.0')
|
182
|
+
```
|
71
183
|
|
72
|
-
|
73
|
-
|
184
|
+
### Global configuration options
|
185
|
+
The configuration parameters used to initialize `Misty::Cloud` are global. They are optionals and Misty::Config
|
186
|
+
defaults are applied if needed.
|
187
|
+
|
188
|
+
* `:auth` - Authentication credentials hash containing 'auth_url' and user context. See `Misty::Auth`.
|
189
|
+
* `:content_type` - HTTP responses body format. :json or :hash structures. Default is `Misty::Config::CONTENT_TYPE`.
|
190
|
+
* `:headers` - Hash of extra HTTP headers to be applied to all services
|
191
|
+
* `:interface` - Endpoint interface, allowed values are: "public", "internal", "admin".
|
192
|
+
* `:log_file` - Log destination, Value is either file path (./misty.log) or IO object (SDOUT). Default is '/dev/null'
|
193
|
+
* `:log_level` - Value is Fixnum - Default is 1 (Logger::INFO) - See Logger from Ruby standard Library
|
194
|
+
* `:region_id` - Alternative Region identifier. Default is `Misty::Config::REGION_ID`
|
195
|
+
Default is `Misty::Config::INTERFACE`
|
196
|
+
* `:ssl_verify_mode` - Boolean flag for SSL client verification. SSL is defined when URI scheme => "https://".
|
197
|
+
Default is `Misty::Config::SSL_VERIFY_MODE`
|
198
|
+
See `Misty::Config` for more details
|
74
199
|
|
75
|
-
|
200
|
+
### Headers
|
201
|
+
Headers are cumulative, applied from Cloud top level, then at Service level and finally at request level.
|
202
|
+
|
203
|
+
HTTP headers can effectively be optionally added to any request.
|
204
|
+
An Header object must be created and passed as the last parameter of a request.
|
76
205
|
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
206
|
+
For example for an already initialized cloud:
|
207
|
+
```ruby
|
208
|
+
header = Misty::HTTP::Header.new(
|
209
|
+
'x-container-meta-web-listings' => false,
|
210
|
+
'x-container-meta-quota-count' => "",
|
211
|
+
'x-container-meta-quota-bytes' => nil,
|
212
|
+
'x-versions-location' => "",
|
213
|
+
'x-container-meta-web-index' => ""
|
214
|
+
)
|
215
|
+
openstack.object_storage.create_update_or_delete_container_metadata(container_name, header)
|
83
216
|
```
|
84
217
|
|
85
|
-
|
218
|
+
### Service and Request levels configuration parameters
|
219
|
+
The same parameters used at the global configuration variables can be applied at Service level or at a Request level.
|
220
|
+
The global values passed from `Misty::Cloud` level are then overridden at the Service level.
|
221
|
+
|
222
|
+
The following parameters can be also used:
|
223
|
+
* `:api_version` - String for specifying Openstack API service version to use. Default is latest supported version.
|
224
|
+
Applies only at service level as it's needed for service creation.
|
225
|
+
* `:base_path` - Allows to force the base path for every URL requests Default nil.
|
226
|
+
* `:base_url` - Allows to force the base URL for every requests. Default nil.
|
227
|
+
* `:version` - Version to be used when microversion is supported by the service. Default: `nil`
|
228
|
+
Allowed values: `'latest'`, or a version number such as '2.10'
|
229
|
+
|
230
|
+
#### Examples
|
231
|
+
Initialize cloud
|
232
|
+
```ruby
|
233
|
+
cloud = Misty::Cloud.new(:auth => { ... }, region_id => 'regionOne', :log_level => 0)
|
234
|
+
```
|
235
|
+
|
236
|
+
Then use different options, for example, the identify service, therefore overriding respective global defaults or
|
237
|
+
specified values
|
86
238
|
```ruby
|
87
|
-
|
88
|
-
|
239
|
+
cloud.identity => {:region_id => 'regionTwo', :interface => 'admin'}
|
240
|
+
Provide service specific option
|
241
|
+
cloud.compute => {:version => '2.27'})
|
242
|
+
```
|
243
|
+
|
244
|
+
## Services
|
245
|
+
The latest list of supported service can be obtain from `Misty.services`:
|
246
|
+
```
|
247
|
+
require 'misty'
|
248
|
+
puts Misty.services
|
249
|
+
=>
|
89
250
|
application_catalog: murano, versions: ["v1"]
|
90
251
|
alarming: aodh, versions: ["v2"]
|
91
252
|
backup: freezer, versions: ["v1"]
|
92
|
-
baremetal: ironic, microversion: v1
|
93
|
-
block_storage: cinder, versions: ["v2", "v1"], microversion: v3
|
253
|
+
baremetal: ironic, versions: ["v1"], microversion: v1
|
254
|
+
block_storage: cinder, versions: ["v3", "v2", "v1"], microversion: v3
|
94
255
|
clustering: senlin, versions: ["v1"]
|
95
|
-
compute: nova, microversion: v2.1
|
96
|
-
container_infrastructure_management: magnum, microversion: v1
|
256
|
+
compute: nova, versions: ["v2.1"], microversion: v2.1
|
257
|
+
container_infrastructure_management: magnum, versions: ["v1"], microversion: v1
|
97
258
|
data_processing: sahara, versions: ["v1.1"]
|
98
259
|
data_protection_orchestration: karbor, versions: ["v1"]
|
99
260
|
database: trove, versions: ["v1.0"]
|
100
|
-
|
261
|
+
dns: designate, versions: ["v2"]
|
101
262
|
identity: keystone, versions: ["v3", "v2.0"]
|
102
263
|
image: glance, versions: ["v2", "v1"]
|
103
264
|
load_balancer: octavia, versions: ["v2.0"]
|
@@ -108,35 +269,25 @@ nfv_orchestration: tacker, versions: ["v1.0"]
|
|
108
269
|
object_storage: swift, versions: ["v1"]
|
109
270
|
orchestration: heat, versions: ["v1"]
|
110
271
|
search: searchlight, versions: ["v1"]
|
111
|
-
shared_file_systems: manila, microversion: v2
|
272
|
+
shared_file_systems: manila, versions: ["v2"], microversion: v2
|
112
273
|
```
|
113
274
|
|
114
|
-
###
|
115
|
-
HTTP headers can be defined at 3 different levels:
|
116
|
-
* Global headers are applied across all services, see `:headers` in "Global parameters" section.
|
117
|
-
* Service level headers are applied on every request of an involved service, see "Services options" section.
|
118
|
-
* Request level header are passed on per request basis.
|
119
|
-
|
120
|
-
The Headers are cumulative, therefore a request level header will be added on top of the global and Service levels
|
121
|
-
headers.
|
122
|
-
|
123
|
-
### Prefixes
|
275
|
+
### Service Prefix
|
124
276
|
A shorter name can be used to call a service only if it's unique among all services.
|
125
|
-
For instance `net` or `network` can be used instead of `networking
|
277
|
+
For instance `net` or `network` can be used instead of `networking` because it's not ambiguous.
|
126
278
|
Meanwhile `data` doesn't work because it's ambiguous between `data_processing` and `data_protection_orchestration`
|
127
279
|
|
128
280
|
### Aliases
|
129
|
-
* `
|
130
|
-
* `volume` is an alias for `block_storage`
|
131
|
-
|
132
|
-
## Openstack service name
|
133
|
-
Different service names can be used for a specific Openstack Service by using the :service_names option (see below).
|
281
|
+
* `domain_name_server` is an alias for `dns`
|
282
|
+
* `volume` is an alias for `block_storage`
|
134
283
|
|
135
|
-
|
136
|
-
The
|
137
|
-
|
138
|
-
openstack.compute.requests
|
284
|
+
### Requests
|
285
|
+
The exhaustive list of requests, extracted from the current service API's and cumulated with Misty service defined
|
286
|
+
requests if any, is available as follow:
|
139
287
|
|
288
|
+
#### Example (Output truncated)
|
289
|
+
```
|
290
|
+
cloud.compute.requests
|
140
291
|
=> [:add_a_single_tag,
|
141
292
|
:add_associate_fixed_ip_addfixedip_action_deprecated,
|
142
293
|
:add_associate_floating_ip_addfloatingip_action_deprecated,
|
@@ -159,204 +310,118 @@ openstack.compute.requests
|
|
159
310
|
:create_cell,
|
160
311
|
:create_cloudpipe,
|
161
312
|
:create_console,
|
162
|
-
.../...
|
163
313
|
```
|
164
314
|
|
165
|
-
|
166
|
-
|
167
|
-
### Authentication information parameter
|
168
|
-
The URL and credentials details are necessary to authenticate with the identity server (Keystone).
|
169
|
-
|
170
|
-
The credentials are a combination of "id" and "name" used to uniquely identify projects, users and their domains.
|
171
|
-
When using only the name, a domain must be specified to guarantee a unique record from the Identity service.
|
172
|
-
|
173
|
-
The following parameters can be used:
|
174
|
-
* `:domain_id`
|
175
|
-
Domain id used for authentication scope
|
176
|
-
Default: `"default"`
|
177
|
-
* `:domain`
|
178
|
-
Domain name used for authentication scope
|
179
|
-
Default: `"Default"`
|
180
|
-
* `:project_id`
|
181
|
-
Project id
|
182
|
-
* `:project`
|
183
|
-
Project name
|
184
|
-
* `:project_domain_id`
|
185
|
-
Project domain id
|
186
|
-
* `:project_domain`
|
187
|
-
Project domain name
|
188
|
-
* `:tenant_id`
|
189
|
-
Tenant id, used only for Keystone v2.0
|
190
|
-
* `:tenant`
|
191
|
-
Tenant name, used only for Keystone v2.0
|
192
|
-
* `:user_id`
|
193
|
-
User id
|
194
|
-
* `:user`
|
195
|
-
User name
|
196
|
-
* `:user_domain_id`
|
197
|
-
User domain id
|
198
|
-
* `:user_domain`
|
199
|
-
User domain name
|
200
|
-
* `:password`
|
201
|
-
Password for user. Cannot be used together with `:token`.
|
202
|
-
* `:token`
|
203
|
-
User provided token, overrides all user and password parameters.
|
204
|
-
* `:context`
|
205
|
-
Bypass the authentication by providing a proper context with `token id`, `service catalog` and `expire date`.
|
206
|
-
Overrides all user and password parameters
|
207
|
-
Example: ``{:context => { :token => token_id, :catalog => service_catalog, :expires => expire_date }}``
|
208
|
-
|
209
|
-
#### Keystone v3
|
210
|
-
Keystone v3 is default recommended version:
|
211
|
-
|
315
|
+
### Direct HTTP requests to REST resources
|
316
|
+
To send requests directly use the 'get', 'delete', 'post' and 'put' methods directly:
|
212
317
|
```ruby
|
213
|
-
|
214
|
-
:url => 'http://localhost:5000',
|
215
|
-
:user => 'admin',
|
216
|
-
:user_domain => 'default',
|
217
|
-
:password => 'secret',
|
218
|
-
:project => 'admin',
|
219
|
-
:project_domain => 'default'
|
220
|
-
}
|
221
|
-
}
|
318
|
+
openstack.network.post('/v2.0/qos/policies/48985e6b8da145699d411f12a3459fca/dscp_marking_rules', data)
|
222
319
|
```
|
223
320
|
|
224
|
-
|
225
|
-
|
321
|
+
### Orchestration
|
322
|
+
#### Example
|
226
323
|
```ruby
|
227
|
-
|
228
|
-
:
|
229
|
-
:
|
230
|
-
:
|
231
|
-
|
232
|
-
}
|
324
|
+
heat_template = {
|
325
|
+
"files": {},
|
326
|
+
"disable_rollback": true,
|
327
|
+
"parameters": {
|
328
|
+
"flavor": "m1.tiny"
|
329
|
+
},
|
330
|
+
"stack_name": "test_stack",
|
331
|
+
"template": {
|
332
|
+
"heat_template_version": "2013-05-23",
|
333
|
+
"description": "Template to test heat",
|
334
|
+
"parameters": {
|
335
|
+
"flavor": {
|
336
|
+
"default": "m1.small",
|
337
|
+
"type": "string"
|
338
|
+
}
|
339
|
+
},
|
340
|
+
"resources": {
|
341
|
+
"hello_world": {
|
342
|
+
"type": "OS::Nova::Server",
|
343
|
+
"properties": {
|
344
|
+
"flavor": { "get_param": "flavor" },
|
345
|
+
"image": "50fd6f2b-d9f0-41b6-b0a9-4482bfe61914",
|
346
|
+
"user_data": "/bin/bash -xv\necho \"hello world\" > /root/hello-world.txt\n"
|
347
|
+
}
|
348
|
+
}
|
349
|
+
}
|
350
|
+
},
|
351
|
+
"timeout_mins": 60
|
233
352
|
}
|
234
|
-
```
|
235
|
-
#### Keystone v2.0
|
236
|
-
Provide the tenant details, Misty will detect it's using v2.0 for authentication:
|
237
353
|
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
354
|
+
require 'misty'
|
355
|
+
require 'pp'
|
356
|
+
cloud = Misty::Cloud.new(:auth => { ... })
|
357
|
+
data_heat_template = Misty.to_json(heat_template)
|
358
|
+
response = cloud.orchestration.create_stack(data_heat_template)
|
359
|
+
id = response.body['stack']['id']
|
360
|
+
stack = cloud.orchestration.show_stack_details('test_stack', id)
|
361
|
+
pp stack.body
|
245
362
|
```
|
246
|
-
### Logging parameters
|
247
|
-
* :log_file
|
248
|
-
File name and path for log file.
|
249
|
-
Value is file path or IO object - Default is `./misty.log`.
|
250
|
-
For example: use STDOUT for terminal output or alternatively use '/dev/null' to avoid the logs entirely.
|
251
|
-
* :log_level
|
252
|
-
Value is Fixnum - Default is 1 (Logger::INFO) - See Logger from Ruby standard Library
|
253
363
|
|
364
|
+
#### Some usage examples
|
254
365
|
```ruby
|
255
|
-
|
366
|
+
cloud = Misty::Cloud.new(:auth => { ... })
|
367
|
+
pp cloud.compute.versions
|
368
|
+
=> [{"status"=>"SUPPORTED",
|
369
|
+
"updated"=>"2011-01-21T11:33:21Z",
|
370
|
+
"links"=>[{"href"=>"http://192.0.2.1:8774/v2/", "rel"=>"self"}],
|
371
|
+
"min_version"=>"",
|
372
|
+
"version"=>"",
|
373
|
+
"id"=>"v2.0"},
|
374
|
+
{"status"=>"CURRENT",
|
375
|
+
"updated"=>"2013-07-23T11:33:21Z",
|
376
|
+
"links"=>[{"href"=>"http://192.0.2.1:8774/v2.1/", "rel"=>"self"}],
|
377
|
+
"min_version"=>"2.1",
|
378
|
+
"version"=>"2.53",
|
379
|
+
"id"=>"v2.1"}]
|
256
380
|
```
|
257
381
|
|
258
|
-
#### Global parameters
|
259
|
-
The following options are applied to each service unless specifically provided for a service.
|
260
|
-
|
261
|
-
* :content_type
|
262
|
-
Format of the body of the successful HTTP responses to be JSON or Ruby structures.
|
263
|
-
Type: Symbol
|
264
|
-
Allowed values: `:json`, `:ruby`
|
265
|
-
Default: `:ruby`
|
266
|
-
* :headers
|
267
|
-
HTTP Headers to be applied to all services
|
268
|
-
Type: Hash
|
269
|
-
Default: {}
|
270
|
-
* :region_id
|
271
|
-
Type: String
|
272
|
-
Default: "regionOne"
|
273
|
-
* :interface
|
274
|
-
Type: String
|
275
|
-
Allowed values: "public", "internal", "admin"
|
276
|
-
Default: "public"
|
277
|
-
* :ssl_verify_mode
|
278
|
-
When using SSL mode (defined by URI scheme => "https://")
|
279
|
-
Type: Boolean
|
280
|
-
Default: `true`
|
281
|
-
|
282
|
-
### Services Options
|
283
|
-
Each service can have specific parameters.
|
284
|
-
|
285
382
|
```ruby
|
286
|
-
|
383
|
+
cloud.compute(:version => '2.25')
|
384
|
+
data_keypair = Misty.to_json('keypair': {'name': 'admin-keypair'})
|
385
|
+
admin_keypair = cloud.compute.create_or_import_keypair(data_keypair)
|
386
|
+
user_id = admin_keypair.body['keypair']['user_id']
|
387
|
+
keypairs = cloud.compute.list_keypairs
|
388
|
+
pp keypairs.body
|
287
389
|
```
|
288
390
|
|
289
|
-
|
290
|
-
* :api_version
|
291
|
-
Type: String
|
292
|
-
Default: The latest supported version - See Misty.services for other versions.
|
293
|
-
* :base_path
|
294
|
-
Allows to force the base path for every URL requests.
|
295
|
-
Type: String
|
296
|
-
* :base_url
|
297
|
-
Allows to force the base URL for every requests.
|
298
|
-
Type: String
|
299
|
-
* :headers
|
300
|
-
Optional headers
|
301
|
-
Type: Hash
|
302
|
-
* :interface
|
303
|
-
Allows to provide an alternate interface. Allowed values are "public", "internal" or "admin"
|
304
|
-
Type: String
|
305
|
-
Default: Determined from global value
|
306
|
-
* :region_id
|
307
|
-
Type: String
|
308
|
-
Default: Determined from global value
|
309
|
-
* :service_names
|
310
|
-
Allows to use a difference name for the service. For instance "identity3" for the identity service.
|
311
|
-
Type: String
|
312
|
-
Default: Determined from Misty.services
|
313
|
-
* :ssl_verify_mode
|
314
|
-
Type: Boolean
|
315
|
-
Default: Determined from global value
|
316
|
-
* :version
|
317
|
-
Version to be used when microversion is supported by the service.
|
318
|
-
Type: String
|
319
|
-
Allowed values: "CURRENT", "LATEST", "SUPPORTED", or a version number such as "2.0" or "3"
|
320
|
-
Default: `"CURRENT"`
|
321
|
-
|
322
|
-
Example:
|
391
|
+
Nova version 2.10+, a keypair name can be filtered by user_id
|
323
392
|
```ruby
|
324
|
-
|
393
|
+
user_id=1e50c2f0995446fd9b135a1a549cabdb
|
394
|
+
cloud.compute(:version => '2.10').show_keypair_details("admin-keypair?user_id=#{user_id}")
|
325
395
|
```
|
326
396
|
|
327
|
-
|
328
|
-
HTTP headers can be optionally added to any request.
|
329
|
-
A Header object must be created and passed as the last parameter of a request.
|
330
|
-
|
331
|
-
For example for an already initialized cloud:
|
397
|
+
With Nova version 2.2+, the type field is also returned when showing keypair details
|
332
398
|
```ruby
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
399
|
+
cloud.compute(:version => '2.2')
|
400
|
+
pp admin_keypair.body
|
401
|
+
=> {'keypair'=>
|
402
|
+
{'public_key'=>
|
403
|
+
'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDjenEe7B87OQHYjZAdJWmaY13mF0N3VooviHypEXaSDfEmFj4GinXorKD0kdXAL30orT0wgAVtpAvRhH2iFTPF2VKCdq4VMzLuai60e3oB3vsTWdZQIJtvaW0mpTNVUQKczbFhRFUi4CNsAijjmGJJgxhihd6rAfynFtalLO0yNn3dKtEMbsvs7KeMxT9SXbfLmEXD4reAK/WXQBVjrEjJIgpC3+SXOO6vsavaOTFu7/Nbha/p4g4yJ3rHUU+7lj79a7iy0sNeExBSZ2aKTq7FQ5XDmtZjjpUeas16kMMX5HdxISYkbq3QnG9iTrIy+GEAYKkZPzhuAa76Qpze35aV Generated-by-Nova\n',
|
404
|
+
'user_id'=>'1e50c2f0995446fd9b135a1a549cabdb',
|
405
|
+
'name'=>'admin-keypair',
|
406
|
+
'deleted'=>false,
|
407
|
+
'created_at'=>'2016-11-23T01:23:53.000000',
|
408
|
+
'updated_at'=>nil,
|
409
|
+
'fingerprint'=>'4e:db:2d:bd:93:70:01:b8:61:17:96:23:e0:78:e2:69',
|
410
|
+
'deleted_at'=>nil,
|
411
|
+
'type'=>'ssh',
|
412
|
+
'id'=>8}}
|
342
413
|
```
|
343
414
|
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
# Requirements
|
415
|
+
# OpenstackAPI notes
|
416
|
+
## Neutron
|
417
|
+
Driver Vendor Passthru (drivers) has 2 methods call with same name.
|
418
|
+
One for Node Vendor Passthru and one for Drivers Passthru.
|
419
|
+
They are respectively associated with the methods #call_a_vendor_method and #call_a_driver_method.
|
350
420
|
|
351
|
-
|
421
|
+
# Ruby versions tested
|
422
|
+
* Ruby MRI 2.5.0
|
352
423
|
* Ruby MRI 2.4.2
|
353
|
-
* Ruby MRI 2.4.1
|
354
|
-
* Ruby MRI 2.4.0
|
355
424
|
* Ruby MRI 2.3.4
|
356
|
-
* Ruby MRI 2.3.3
|
357
|
-
* Ruby MRI 2.3.2
|
358
|
-
* Ruby MRI 2.3.1
|
359
|
-
* Ruby MRI 2.3.0
|
360
425
|
|
361
426
|
# Contributing
|
362
427
|
Contributors are welcome and must adhere to the [Contributor covenant code of conduct](http://contributor-covenant.org/).
|