stacker_bee 2.1.1.pre324 → 2.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -13
- data/.rspec +0 -1
- data/.travis.yml +1 -0
- data/Gemfile +1 -8
- data/README.md +8 -43
- data/bin/stacker_bee +3 -4
- data/config.default.yml +1 -1
- data/lib/stacker_bee/client.rb +2 -8
- data/lib/stacker_bee/configuration.rb +2 -22
- data/lib/stacker_bee/middleware/adapter.rb +2 -18
- data/lib/stacker_bee/middleware/cloud_stack_api.rb +2 -1
- data/lib/stacker_bee/middleware/console_access.rb +2 -1
- data/lib/stacker_bee/rash.rb +2 -25
- data/lib/stacker_bee/request_error.rb +1 -1
- data/spec/cassettes/A_request_sent_to_CloudStack_for_console_access/returns_html_for_console_access.yml +1 -1
- data/spec/cassettes/A_response_to_a_request_sent_to_the_CloudStack_API/.yml +5 -5
- data/spec/cassettes/A_response_to_a_request_sent_to_the_CloudStack_API/a_nil_request_parameter/properly_executes_the_request.yml +6 -6
- data/spec/cassettes/A_response_to_a_request_sent_to_the_CloudStack_API/a_request_parameter_with_a_map/can_create_an_object.yml +60 -30
- data/spec/cassettes/A_response_to_a_request_sent_to_the_CloudStack_API/a_request_parameter_with_an_Array/.yml +9 -9
- data/spec/cassettes/A_response_to_a_request_sent_to_the_CloudStack_API/a_request_parameter_with_and_empty_string/properly_executes_the_request.yml +6 -6
- data/spec/cassettes/A_response_to_a_request_sent_to_the_CloudStack_API/a_request_that_triggers_an_error/properly_signs_the_request.yml +3 -3
- data/spec/cassettes/A_response_to_a_request_sent_to_the_CloudStack_API/containing_an_error/.yml +37 -0
- data/spec/cassettes/A_response_to_a_request_sent_to_the_CloudStack_API/containing_an_error/should_log_response_as_error.yml +37 -0
- data/spec/cassettes/A_response_to_a_request_sent_to_the_CloudStack_API/first/.yml +33 -0
- data/spec/cassettes/A_response_to_a_request_sent_to_the_CloudStack_API/first_item/.yml +6 -6
- data/spec/cassettes/A_response_to_a_request_sent_to_the_CloudStack_API/first_item/_account_type_/.yml +6 -6
- data/spec/cassettes/A_response_to_a_request_sent_to_the_CloudStack_API/first_item/_accounttype_/.yml +6 -6
- data/spec/cassettes/A_response_to_a_request_sent_to_the_CloudStack_API/middleware/a_middleware_that_doesn_t_match_the_content_type/uses_the_middleware.yml +4 -4
- data/spec/cassettes/A_response_to_a_request_sent_to_the_CloudStack_API/middleware/a_middleware_that_matches_the_content_type/uses_the_middleware.yml +4 -4
- data/spec/cassettes/A_response_to_a_request_sent_to_the_CloudStack_API/should_log_request.yml +33 -0
- data/spec/cassettes/A_response_to_a_request_sent_to_the_CloudStack_API/should_not_log_response_as_error.yml +33 -0
- data/spec/cassettes/A_response_to_a_request_sent_to_the_CloudStack_API/space_character_in_a_request_parameter/properly_signs_the_request.yml +4 -4
- data/spec/integration/configure_middleware_spec.rb +2 -0
- data/spec/integration/console_spec.rb +5 -4
- data/spec/integration/request_spec.rb +10 -26
- data/spec/spec_helper.rb +7 -0
- data/spec/units/stacker_bee/api_spec.rb +2 -0
- data/spec/units/stacker_bee/client_spec.rb +1 -0
- data/spec/units/stacker_bee/configuration_spec.rb +2 -30
- data/spec/units/stacker_bee/connection_spec.rb +2 -0
- data/spec/units/stacker_bee/middleware/adapter_spec.rb +3 -9
- data/spec/units/stacker_bee/middleware/base_spec.rb +2 -0
- data/spec/units/stacker_bee/middleware/cloud_stack_api_spec.rb +15 -6
- data/spec/units/stacker_bee/middleware/console_access_spec.rb +5 -6
- data/spec/units/stacker_bee/middleware/dictionary_flattener_spec.rb +2 -0
- data/spec/units/stacker_bee/middleware/endpoint_normalizer_spec.rb +2 -0
- data/spec/units/stacker_bee/middleware/error_message_spec.rb +2 -0
- data/spec/units/stacker_bee/middleware/format_keys_spec.rb +2 -0
- data/spec/units/stacker_bee/middleware/format_values_spec.rb +2 -0
- data/spec/units/stacker_bee/middleware/http_status_spec.rb +2 -0
- data/spec/units/stacker_bee/middleware/log_response_spec.rb +1 -0
- data/spec/units/stacker_bee/middleware/raise_on_http_errors_spec.rb +2 -0
- data/spec/units/stacker_bee/middleware/remove_empty_strings_spec.rb +2 -0
- data/spec/units/stacker_bee/middleware/remove_nils_spec.rb +2 -0
- data/spec/units/stacker_bee/rash_spec.rb +4 -18
- data/spec/units/stacker_bee/request_error_spec.rb +2 -0
- data/spec/units/stacker_bee/utilities_spec.rb +2 -0
- data/spec/units/stacker_bee_spec.rb +2 -0
- data/stacker_bee.gemspec +5 -4
- metadata +41 -18
- data/spec/cassettes/A_response_to_a_request_sent_to_the_CloudStack_API/with_a_nonexistant_path/raises_a_client_error.yml +0 -47
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
Y2U1ZjVhYWNlN2M0N2QzN2YwZjc3NjZhYTIxOTMyYzM1YTc2ODY0ZA==
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 422b00e43af4e6e36a7193f788c3e2632054b1dd
|
4
|
+
data.tar.gz: 87e7ee5e1079f8d6092be8d787a3f9734f4a3c42
|
7
5
|
SHA512:
|
8
|
-
metadata.gz:
|
9
|
-
|
10
|
-
YTg5MDMxM2JjNjRmZWY4OThkNjZkZTg0ZGQ2OWFmZGFjZGQxMTcyNTIzNmRk
|
11
|
-
MjE1MDg2NTQ2MDc3ODU3YWVmMjI2MzE0YjliZjBkMjI2OWQwNTc=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
ODhkNGRlMTBiODliZTZkYTA1ZjkyYTVhMjgzNzYyMTBhOGVlZTkzNDI4Mzll
|
14
|
-
NzBkNTU0ZGM2MTAzODg5MGZkZGIwZjJiYWE1OGZlMmRiMjYwYzVhZDEwZDUx
|
15
|
-
ZDFiYjA3YThiODY3N2RlOTQyYmEwZGVmZTQ2YWU5MTIxMWMzYzc=
|
6
|
+
metadata.gz: 5d00bc2fedb16a0035d25930fd69233fb7e08313884f3ea09e762e5047097da65b59dcec08a1312fd3e78c4ebc92927459f73d0ba9d9e924ed568c0e58327831
|
7
|
+
data.tar.gz: e89b31a178ed48bba9ddc67ad8ff266dd9645f6a64b8e060e9910072714dba37b632131fb4f5dd10fd5ddb9fe546b49eeb066edfbdab6cfcd8e35ede2129692e
|
data/.rspec
CHANGED
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
@@ -1,11 +1,4 @@
|
|
1
1
|
source 'https://rubygems.org'
|
2
2
|
|
3
|
+
# Specify your gem's dependencies in stacker_bee.gemspec
|
3
4
|
gemspec
|
4
|
-
|
5
|
-
# webmock 1.19.0 breaks VCR cassettes using multiple brackets
|
6
|
-
# Could be related to https://github.com/bblimke/webmock/issues/365
|
7
|
-
gem 'webmock', '1.18.0'
|
8
|
-
|
9
|
-
group :development do
|
10
|
-
gem 'pry'
|
11
|
-
end
|
data/README.md
CHANGED
@@ -29,7 +29,7 @@ And execute:
|
|
29
29
|
|
30
30
|
```ruby
|
31
31
|
cloud_stack = StackerBee::Client.new(
|
32
|
-
url: 'http://localhost:8080',
|
32
|
+
url: 'http://localhost:8080/client/api',
|
33
33
|
api_key: 'MY_API_KEY',
|
34
34
|
secret_key: 'MY_SECRET_KEY'
|
35
35
|
)
|
@@ -85,7 +85,7 @@ Usage:
|
|
85
85
|
|
86
86
|
Example:
|
87
87
|
|
88
|
-
$ stacker_bee -u http://localhost:8080 -a MY_API_KEY -s MY_SECRET_KEY
|
88
|
+
$ stacker_bee -u http://localhost:8080/client/api -a MY_API_KEY -s MY_SECRET_KEY
|
89
89
|
StackerBee CloudStack REPL
|
90
90
|
>> list_virtual_machines state: 'Running'
|
91
91
|
=> [{"id"=>"48b91ab4-dc23-4e24-bc6f-695d58c91087",
|
@@ -100,7 +100,7 @@ Configuring a client:
|
|
100
100
|
|
101
101
|
```ruby
|
102
102
|
cloud_stack = StackerBee::Client.new(
|
103
|
-
url: 'http://localhost:8080',
|
103
|
+
url: 'http://localhost:8080/client/api',
|
104
104
|
api_key: 'API_KEY',
|
105
105
|
secret_key: 'SECRET_KEY'
|
106
106
|
)
|
@@ -109,7 +109,7 @@ cloud_stack = StackerBee::Client.new(
|
|
109
109
|
All configuration parameters set on the `StackerBee::Client` class are used as defaults for `StackerBee::Client` instances.
|
110
110
|
|
111
111
|
```ruby
|
112
|
-
StackerBee::Client.url = 'http://localhost:8080'
|
112
|
+
StackerBee::Client.url = 'http://localhost:8080/client/api'
|
113
113
|
|
114
114
|
user_client = StackerBee::Client.new(
|
115
115
|
api_key: 'USER_API_KEY',
|
@@ -127,52 +127,17 @@ root_client = StackerBee::Client.new(
|
|
127
127
|
The URL of your CloudStack instance's URL.
|
128
128
|
|
129
129
|
```ruby
|
130
|
-
StackerBee::Client.url = 'http://localhost:8080'
|
130
|
+
StackerBee::Client.url = 'http://localhost:8080/client/api'
|
131
131
|
```
|
132
132
|
|
133
133
|
Or:
|
134
134
|
|
135
135
|
```ruby
|
136
136
|
my_client = StackerBee::Client.new(
|
137
|
-
url: 'http://localhost:8080'
|
137
|
+
url: 'http://localhost:8080/client/api'
|
138
138
|
)
|
139
139
|
```
|
140
140
|
|
141
|
-
### API path
|
142
|
-
|
143
|
-
The path of your CloudStack instance's API URL.
|
144
|
-
Defaults to `'/client/api/'`.
|
145
|
-
|
146
|
-
```ruby
|
147
|
-
StackerBee::Client.api_path = '/other-path/client/api'
|
148
|
-
```
|
149
|
-
|
150
|
-
Or:
|
151
|
-
|
152
|
-
```ruby
|
153
|
-
my_client = StackerBee::Client.new(
|
154
|
-
api_path: '/other-path/client/api'
|
155
|
-
)
|
156
|
-
```
|
157
|
-
|
158
|
-
### Console path
|
159
|
-
|
160
|
-
The path of your CloudStack instance's URL for console access.
|
161
|
-
Defaults to `'/client/console/'`.
|
162
|
-
|
163
|
-
```ruby
|
164
|
-
StackerBee::Client.console_path = '/other-path/client/console'
|
165
|
-
```
|
166
|
-
|
167
|
-
Or:
|
168
|
-
|
169
|
-
```ruby
|
170
|
-
my_client = StackerBee::Client.new(
|
171
|
-
console_path: '/other-path/client/console'
|
172
|
-
)
|
173
|
-
```
|
174
|
-
|
175
|
-
|
176
141
|
### Keys
|
177
142
|
|
178
143
|
Your CloudStack credentials, i.e. API key and secret key.
|
@@ -254,7 +219,7 @@ StackerBee supports using SSL. To do so, use an HTTPS URL. In some deployments,
|
|
254
219
|
|
255
220
|
```ruby
|
256
221
|
StackerBee::Client.configuration = {
|
257
|
-
url: 'https://my-cloudstack-server',
|
222
|
+
url: 'https://my-cloudstack-server/client/api',
|
258
223
|
ssl_verify: false # ignore certificate validation errors
|
259
224
|
}
|
260
225
|
```
|
@@ -265,7 +230,7 @@ The `StackerBee::Client` class can be configured with multiple options at once.
|
|
265
230
|
|
266
231
|
```ruby
|
267
232
|
StackerBee::Client.configuration = {
|
268
|
-
url: 'http://localhost:8080',
|
233
|
+
url: 'http://localhost:8080/client/api',
|
269
234
|
api_key: 'API_KEY',
|
270
235
|
secret_key: 'MY_SECRET_KEY'
|
271
236
|
}
|
data/bin/stacker_bee
CHANGED
@@ -58,10 +58,9 @@ begin
|
|
58
58
|
options.merge! Hash[YAML.load(hash).map { |k, v| [k.to_sym, v] }]
|
59
59
|
end
|
60
60
|
unless options.keys.include?(:config) ||
|
61
|
-
|
62
|
-
puts \
|
63
|
-
|
64
|
-
'--api_key, --secret_key and --url'
|
61
|
+
([:api_key, :secret_key, :url] - options.keys).empty?
|
62
|
+
puts 'Please specify a config file or all of the following: ' \
|
63
|
+
'--api_key, --secret_key and --url'
|
65
64
|
exit
|
66
65
|
end
|
67
66
|
rescue OptionParser::InvalidOption, OptionParser::MissingArgument
|
data/config.default.yml
CHANGED
@@ -1,3 +1,3 @@
|
|
1
|
-
url: 'http://127.0.0.1:1234'
|
1
|
+
url: 'http://127.0.0.1:1234/client/api/'
|
2
2
|
api_key: 'MY-KEY-MY-KEY-MY-KEY-MY-KEY-MY-KEY-MY-KEY-MY-KEY-MY-KEY-MY-KEY-MY-KEY-MY-KEY-MY-KEY-MY'
|
3
3
|
secret_key: 'TOP-SECRET-TOP-SECRET-TOP-SECRET-TOP-SECRET-TOP-SECRET-TOP-SECRET-TOP-SECRET-TOP-SECRE'
|
data/lib/stacker_bee/client.rb
CHANGED
@@ -31,17 +31,13 @@ module StackerBee
|
|
31
31
|
)
|
32
32
|
|
33
33
|
# rubocop:disable MethodLength
|
34
|
-
# rubocop:disable Metrics/AbcSize
|
35
34
|
def middlewares
|
36
35
|
# request
|
37
|
-
builder.use Middleware::ConsoleAccess
|
38
|
-
console_path: configuration.console_path
|
36
|
+
builder.use Middleware::ConsoleAccess
|
39
37
|
|
40
38
|
builder.use Middleware::EndpointNormalizer, api: self.class.api
|
41
39
|
builder.use Middleware::RemoveEmptyStrings
|
42
|
-
builder.use Middleware::CloudStackAPI,
|
43
|
-
api_path: configuration.api_path,
|
44
|
-
api_key: configuration.api_key
|
40
|
+
builder.use Middleware::CloudStackAPI, api_key: configuration.api_key
|
45
41
|
|
46
42
|
configuration.middlewares.call builder
|
47
43
|
|
@@ -64,8 +60,6 @@ module StackerBee
|
|
64
60
|
|
65
61
|
builder.build
|
66
62
|
end
|
67
|
-
# rubocop:enable Metrics/AbcSize
|
68
|
-
# rubocop:enable MethodLength
|
69
63
|
|
70
64
|
def builder
|
71
65
|
@builder ||= Builder.new
|
@@ -6,8 +6,6 @@ module StackerBee
|
|
6
6
|
ATTRIBUTES = [
|
7
7
|
:ssl_verify,
|
8
8
|
:url,
|
9
|
-
:api_path,
|
10
|
-
:console_path,
|
11
9
|
:secret_key,
|
12
10
|
:api_key,
|
13
11
|
:middlewares,
|
@@ -39,14 +37,6 @@ module StackerBee
|
|
39
37
|
attribute :url
|
40
38
|
end
|
41
39
|
|
42
|
-
def api_path
|
43
|
-
attribute :api_path, '/client/api'
|
44
|
-
end
|
45
|
-
|
46
|
-
def console_path
|
47
|
-
attribute :console_path, '/client/console'
|
48
|
-
end
|
49
|
-
|
50
40
|
def secret_key
|
51
41
|
attribute :secret_key
|
52
42
|
end
|
@@ -77,18 +67,8 @@ module StackerBee
|
|
77
67
|
|
78
68
|
private
|
79
69
|
|
80
|
-
def attribute(key,
|
81
|
-
|
82
|
-
|
83
|
-
if blank?(value)
|
84
|
-
default_value
|
85
|
-
else
|
86
|
-
value
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
def blank?(value)
|
91
|
-
value.nil? || value == ''
|
70
|
+
def attribute(key, value = nil)
|
71
|
+
@attributes.fetch(key, value)
|
92
72
|
end
|
93
73
|
end
|
94
74
|
end
|
@@ -2,29 +2,13 @@ module StackerBee
|
|
2
2
|
module Middleware
|
3
3
|
class Adapter < Base
|
4
4
|
def call(env)
|
5
|
-
|
6
|
-
|
7
|
-
pluck_body env
|
8
|
-
end
|
9
|
-
|
10
|
-
def pluck_content_type(env)
|
5
|
+
params = env.request.params.to_a.sort
|
6
|
+
env.raw_response = connection.get(env.request.path, params)
|
11
7
|
env.response.content_type =
|
12
8
|
env.raw_response.env[:response_headers]['content-type']
|
13
|
-
end
|
14
|
-
|
15
|
-
def pluck_body(env)
|
16
9
|
env.response.body = env.raw_response.body
|
17
10
|
end
|
18
11
|
|
19
|
-
def perform_request(env)
|
20
|
-
params = env.request.params.to_a.sort
|
21
|
-
env.raw_response = connection.get(path(env), params)
|
22
|
-
end
|
23
|
-
|
24
|
-
def path(env)
|
25
|
-
env.request.path.to_s.gsub(/\/$/, '')
|
26
|
-
end
|
27
|
-
|
28
12
|
def endpoint_name_for(*)
|
29
13
|
end
|
30
14
|
end
|
@@ -2,6 +2,7 @@ module StackerBee
|
|
2
2
|
module Middleware
|
3
3
|
class CloudStackAPI < Base
|
4
4
|
RESPONSE_TYPE = 'json'
|
5
|
+
DEFAULT_PATH = '/client/api/'
|
5
6
|
|
6
7
|
def before(env)
|
7
8
|
env.request.params.merge!(
|
@@ -9,7 +10,7 @@ module StackerBee
|
|
9
10
|
command: env.request.endpoint_name,
|
10
11
|
response: RESPONSE_TYPE
|
11
12
|
)
|
12
|
-
env.request.path ||=
|
13
|
+
env.request.path ||= DEFAULT_PATH
|
13
14
|
end
|
14
15
|
end
|
15
16
|
end
|
@@ -4,12 +4,13 @@ module StackerBee
|
|
4
4
|
include Utilities
|
5
5
|
|
6
6
|
ENDPOINT = 'consoleAccess'
|
7
|
+
PATH = '/client/console'
|
7
8
|
PARAMS = { cmd: 'access' }
|
8
9
|
|
9
10
|
def before(env)
|
10
11
|
return unless matches_endpoint?(env.request.endpoint_name)
|
11
12
|
super
|
12
|
-
env.request.path =
|
13
|
+
env.request.path = PATH
|
13
14
|
env.request.endpoint_name = ENDPOINT
|
14
15
|
end
|
15
16
|
|
data/lib/stacker_bee/rash.rb
CHANGED
@@ -12,11 +12,8 @@ module StackerBee
|
|
12
12
|
:flatten, :invert, :keys, :key, :merge, :rassoc, :to_a, :to_h, :to_hash
|
13
13
|
]
|
14
14
|
|
15
|
-
def initialize(hash = {}
|
15
|
+
def initialize(hash = {})
|
16
16
|
@hash = {}
|
17
|
-
|
18
|
-
save_preferred_keys preferred_keys
|
19
|
-
|
20
17
|
hash.each_pair do |key, value|
|
21
18
|
@hash[convert_key(key)] = convert_value(value)
|
22
19
|
end
|
@@ -81,27 +78,7 @@ module StackerBee
|
|
81
78
|
end
|
82
79
|
|
83
80
|
def convert_key(key)
|
84
|
-
|
85
|
-
key
|
86
|
-
elsif preferred_key_format?(key)
|
87
|
-
preferred_key_format(key)
|
88
|
-
else
|
89
|
-
uncase(key)
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
def save_preferred_keys(keys)
|
94
|
-
@preferred_keys = keys.each_with_object({}) do |key, mapping|
|
95
|
-
mapping[uncase(key)] = key
|
96
|
-
end
|
97
|
-
end
|
98
|
-
|
99
|
-
def preferred_key_format?(key)
|
100
|
-
@preferred_keys.key?(uncase(key))
|
101
|
-
end
|
102
|
-
|
103
|
-
def preferred_key_format(key)
|
104
|
-
@preferred_keys[uncase(key)]
|
81
|
+
key.is_a?(Numeric) ? key : uncase(key)
|
105
82
|
end
|
106
83
|
|
107
84
|
def convert_value(value)
|
@@ -2,7 +2,7 @@
|
|
2
2
|
http_interactions:
|
3
3
|
- request:
|
4
4
|
method: get
|
5
|
-
uri: <CLOUD_STACK_HOST>/client/console?apiKey=<CLOUD_STACK_API_KEY>&cmd=access&command=consoleAccess&response=json&signature=
|
5
|
+
uri: <CLOUD_STACK_HOST>/client/console?apiKey=<CLOUD_STACK_API_KEY>&cmd=access&command=consoleAccess&response=json&signature=DsI/kxaNO7AgzDCgE1j/3rtq3xU&vm=36f9c08b-f17a-4d0e-ac9b-d45ce2d34fcd
|
6
6
|
body:
|
7
7
|
encoding: US-ASCII
|
8
8
|
string: ''
|
@@ -2,13 +2,13 @@
|
|
2
2
|
http_interactions:
|
3
3
|
- request:
|
4
4
|
method: get
|
5
|
-
uri: <
|
5
|
+
uri: <CLOUD_STACK_URL>?apiKey=<CLOUD_STACK_API_KEY>&command=listAccounts&response=json&signature=oftBcJm8kFc%2Buxul8pAL2%2Bh0bdU=
|
6
6
|
body:
|
7
7
|
encoding: US-ASCII
|
8
8
|
string: ''
|
9
9
|
headers:
|
10
10
|
User-Agent:
|
11
|
-
- Faraday v0.8.
|
11
|
+
- Faraday v0.8.8
|
12
12
|
Accept-Encoding:
|
13
13
|
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
14
14
|
Accept:
|
@@ -26,8 +26,8 @@ http_interactions:
|
|
26
26
|
- Jetty(6.1.26)
|
27
27
|
body:
|
28
28
|
encoding: UTF-8
|
29
|
-
string: '{ "listaccountsresponse" : { "count":1 ,"account" : [ {"id":"
|
29
|
+
string: '{ "listaccountsresponse" : { "count":1 ,"account" : [ {"id":"fdc009b8-2034-11e3-a44b-d6558ad1fb9f","name":"admin","accounttype":1,"domainid":"fdbfec94-2034-11e3-a44b-d6558ad1fb9f","domain":"ROOT","vmlimit":"Unlimited","vmtotal":0,"vmavailable":"Unlimited","iplimit":"Unlimited","iptotal":0,"ipavailable":"Unlimited","volumelimit":"Unlimited","volumetotal":0,"volumeavailable":"Unlimited","snapshotlimit":"Unlimited","snapshottotal":0,"snapshotavailable":"Unlimited","templatelimit":"Unlimited","templatetotal":0,"templateavailable":"Unlimited","projectlimit":"Unlimited","projecttotal":0,"projectavailable":"Unlimited","networklimit":"Unlimited","networktotal":0,"networkavailable":"Unlimited","vpclimit":"Unlimited","vpctotal":0,"vpcavailable":"Unlimited","cpulimit":"Unlimited","cputotal":0,"cpuavailable":"Unlimited","memorylimit":"Unlimited","memorytotal":0,"memoryavailable":"Unlimited","primarystoragelimit":"Unlimited","primarystoragetotal":0,"primarystorageavailable":"Unlimited","secondarystoragelimit":"Unlimited","secondarystoragetotal":0,"secondarystorageavailable":"Unlimited","state":"enabled","user":[{"id":"fdc03456-2034-11e3-a44b-d6558ad1fb9f","username":"admin","firstname":"Admin","lastname":"User","email":"admin@mailprovider.com","created":"2013-09-17T23:36:11-0400","state":"enabled","account":"admin","accounttype":1,"domainid":"fdbfec94-2034-11e3-a44b-d6558ad1fb9f","domain":"ROOT","apikey":"<CLOUD_STACK_API_KEY>","secretkey":"<CLOUD_STACK_SECRET_KEY>","accountid":"fdc009b8-2034-11e3-a44b-d6558ad1fb9f","iscallerchilddomain":false,"isdefault":true}],"isdefault":true}
|
30
30
|
] } }'
|
31
31
|
http_version:
|
32
|
-
recorded_at:
|
33
|
-
recorded_with: VCR 2.
|
32
|
+
recorded_at: Thu, 24 Oct 2013 18:42:15 GMT
|
33
|
+
recorded_with: VCR 2.6.0
|
@@ -2,13 +2,13 @@
|
|
2
2
|
http_interactions:
|
3
3
|
- request:
|
4
4
|
method: get
|
5
|
-
uri: <
|
5
|
+
uri: <CLOUD_STACK_URL>?apiKey=<CLOUD_STACK_API_KEY>&command=listAccounts&response=json&signature=oftBcJm8kFc%2Buxul8pAL2%2Bh0bdU=
|
6
6
|
body:
|
7
7
|
encoding: US-ASCII
|
8
8
|
string: ''
|
9
9
|
headers:
|
10
10
|
User-Agent:
|
11
|
-
- Faraday v0.8.
|
11
|
+
- Faraday v0.8.8
|
12
12
|
Accept-Encoding:
|
13
13
|
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
14
14
|
Accept:
|
@@ -21,13 +21,13 @@ http_interactions:
|
|
21
21
|
Content-Type:
|
22
22
|
- text/javascript; charset=UTF-8
|
23
23
|
Content-Length:
|
24
|
-
- '
|
24
|
+
- '1778'
|
25
25
|
Server:
|
26
26
|
- Jetty(6.1.26)
|
27
27
|
body:
|
28
28
|
encoding: UTF-8
|
29
|
-
string: '{ "listaccountsresponse" : { "count":1 ,"account" : [ {"id":"
|
29
|
+
string: '{ "listaccountsresponse" : { "count":1 ,"account" : [ {"id":"fdc009b8-2034-11e3-a44b-d6558ad1fb9f","name":"admin","accounttype":1,"domainid":"fdbfec94-2034-11e3-a44b-d6558ad1fb9f","domain":"ROOT","receivedbytes":100,"sentbytes":100,"vmlimit":"Unlimited","vmtotal":1,"vmavailable":"Unlimited","iplimit":"Unlimited","iptotal":1,"ipavailable":"Unlimited","volumelimit":"Unlimited","volumetotal":1,"volumeavailable":"Unlimited","snapshotlimit":"Unlimited","snapshottotal":0,"snapshotavailable":"Unlimited","templatelimit":"Unlimited","templatetotal":0,"templateavailable":"Unlimited","vmrunning":1,"projectlimit":"Unlimited","projecttotal":0,"projectavailable":"Unlimited","networklimit":"Unlimited","networktotal":1,"networkavailable":"Unlimited","vpclimit":"Unlimited","vpctotal":0,"vpcavailable":"Unlimited","cpulimit":"Unlimited","cputotal":1,"cpuavailable":"Unlimited","memorylimit":"Unlimited","memorytotal":32,"memoryavailable":"Unlimited","primarystoragelimit":"Unlimited","primarystoragetotal":2,"primarystorageavailable":"Unlimited","secondarystoragelimit":"Unlimited","secondarystoragetotal":0,"secondarystorageavailable":"Unlimited","state":"enabled","user":[{"id":"fdc03456-2034-11e3-a44b-d6558ad1fb9f","username":"admin","firstname":"Admin","lastname":"User","email":"admin@mailprovider.com","created":"2013-09-17T23:36:11-0400","state":"enabled","account":"admin","accounttype":1,"domainid":"fdbfec94-2034-11e3-a44b-d6558ad1fb9f","domain":"ROOT","apikey":"<CLOUD_STACK_API_KEY>","secretkey":"<CLOUD_STACK_SECRET_KEY>","accountid":"fdc009b8-2034-11e3-a44b-d6558ad1fb9f","iscallerchilddomain":false,"isdefault":true}],"isdefault":true}
|
30
30
|
] } }'
|
31
31
|
http_version:
|
32
|
-
recorded_at: Mon,
|
33
|
-
recorded_with: VCR 2.
|
32
|
+
recorded_at: Mon, 28 Oct 2013 17:22:52 GMT
|
33
|
+
recorded_with: VCR 2.6.0
|
@@ -2,13 +2,13 @@
|
|
2
2
|
http_interactions:
|
3
3
|
- request:
|
4
4
|
method: get
|
5
|
-
uri: <
|
5
|
+
uri: <CLOUD_STACK_URL>?apiKey=<CLOUD_STACK_API_KEY>&command=listZones&response=json&signature=/MnHgTBKGc%2BXx0Z8KwMllvw92vg=
|
6
6
|
body:
|
7
7
|
encoding: US-ASCII
|
8
8
|
string: ''
|
9
9
|
headers:
|
10
10
|
User-Agent:
|
11
|
-
- Faraday v0.8.
|
11
|
+
- Faraday v0.8.8
|
12
12
|
Accept-Encoding:
|
13
13
|
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
14
14
|
Accept:
|
@@ -26,19 +26,19 @@ http_interactions:
|
|
26
26
|
- Jetty(6.1.26)
|
27
27
|
body:
|
28
28
|
encoding: UTF-8
|
29
|
-
string: '{ "listzonesresponse" : { "count":1 ,"zone" : [ {"id":"
|
29
|
+
string: '{ "listzonesresponse" : { "count":1 ,"zone" : [ {"id":"39e9e31e-925c-4b55-8d33-f99912b73dfc","name":"Sandbox-simulator","dns1":"10.147.28.6","internaldns1":"10.147.28.6","guestcidraddress":"10.1.1.0/24","networktype":"Advanced","securitygroupsenabled":false,"allocationstate":"Enabled","zonetoken":"ea3acbc4-cae8-3b82-b42f-7492ddfede00","dhcpprovider":"VirtualRouter","localstorageenabled":false}
|
30
30
|
] } }'
|
31
31
|
http_version:
|
32
|
-
recorded_at:
|
32
|
+
recorded_at: Thu, 19 Dec 2013 17:34:44 GMT
|
33
33
|
- request:
|
34
34
|
method: get
|
35
|
-
uri: <
|
35
|
+
uri: <CLOUD_STACK_URL>?apiKey=<CLOUD_STACK_API_KEY>&command=listNetworkOfferings&response=json&signature=BAdYatJ5Rjcffi6sU8P%2BZtLhSF8=&supportedServices=sourcenat&type=isolated
|
36
36
|
body:
|
37
37
|
encoding: US-ASCII
|
38
38
|
string: ''
|
39
39
|
headers:
|
40
40
|
User-Agent:
|
41
|
-
- Faraday v0.8.
|
41
|
+
- Faraday v0.8.8
|
42
42
|
Accept-Encoding:
|
43
43
|
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
44
44
|
Accept:
|
@@ -57,26 +57,26 @@ http_interactions:
|
|
57
57
|
body:
|
58
58
|
encoding: UTF-8
|
59
59
|
string: '{ "listnetworkofferingsresponse" : { "count":4 ,"networkoffering" :
|
60
|
-
[ {"id":"
|
61
|
-
for Isolated networks with Source Nat service enabled","traffictype":"Guest","isdefault":true,"specifyvlan":false,"conservemode":true,"specifyipranges":false,"availability":"Required","networkrate":200,"state":"Enabled","guestiptype":"Isolated","serviceofferingid":"
|
62
|
-
{"id":"
|
63
|
-
for Isolated Vpc networks with Source Nat service enabled","traffictype":"Guest","isdefault":true,"specifyvlan":false,"conservemode":false,"specifyipranges":false,"availability":"Optional","networkrate":200,"state":"Enabled","guestiptype":"Isolated","serviceofferingid":"
|
64
|
-
{"id":"
|
65
|
-
for Isolated Vpc networks with Source Nat service enabled and LB service Disabled","traffictype":"Guest","isdefault":true,"specifyvlan":false,"conservemode":false,"specifyipranges":false,"availability":"Optional","networkrate":200,"state":"Enabled","guestiptype":"Isolated","serviceofferingid":"
|
66
|
-
{"id":"
|
67
|
-
for Isolated Vpc networks with Internal LB support","traffictype":"Guest","isdefault":true,"specifyvlan":false,"conservemode":false,"specifyipranges":false,"availability":"Optional","networkrate":200,"state":"Enabled","guestiptype":"Isolated","serviceofferingid":"
|
60
|
+
[ {"id":"fa126319-f822-4786-9cd3-30bd0c55ca94","name":"DefaultIsolatedNetworkOfferingWithSourceNatService","displaytext":"Offering
|
61
|
+
for Isolated networks with Source Nat service enabled","traffictype":"Guest","isdefault":true,"specifyvlan":false,"conservemode":true,"specifyipranges":false,"availability":"Required","networkrate":200,"state":"Enabled","guestiptype":"Isolated","serviceofferingid":"983410fa-b51b-439c-b8ba-be973804c38f","service":[{"name":"PortForwarding","provider":[{"name":"VirtualRouter"}]},{"name":"StaticNat","provider":[{"name":"VirtualRouter"}],"capability":[{"name":"ElasticIp","value":"false","canchooseservicecapability":false},{"name":"AssociatePublicIP","value":"true","canchooseservicecapability":false}]},{"name":"Dhcp","provider":[{"name":"VirtualRouter"}]},{"name":"Firewall","provider":[{"name":"VirtualRouter"}]},{"name":"Lb","provider":[{"name":"VirtualRouter"}],"capability":[{"name":"SupportedLBIsolation","value":"dedicated","canchooseservicecapability":false},{"name":"ElasticLb","value":"false","canchooseservicecapability":false},{"name":"InlineMode","value":"false","canchooseservicecapability":false}]},{"name":"UserData","provider":[{"name":"VirtualRouter"}]},{"name":"Dns","provider":[{"name":"VirtualRouter"}]},{"name":"SourceNat","provider":[{"name":"VirtualRouter"}],"capability":[{"name":"SupportedSourceNatTypes","value":"peraccount","canchooseservicecapability":false},{"name":"RedundantRouter","value":"false","canchooseservicecapability":false}]},{"name":"Vpn","provider":[{"name":"VirtualRouter"}]}],"forvpc":false,"ispersistent":false,"egressdefaultpolicy":false},
|
62
|
+
{"id":"7e70b3b5-5e2c-42cb-9b49-93a87c13a675","name":"DefaultIsolatedNetworkOfferingForVpcNetworks","displaytext":"Offering
|
63
|
+
for Isolated Vpc networks with Source Nat service enabled","traffictype":"Guest","isdefault":true,"specifyvlan":false,"conservemode":false,"specifyipranges":false,"availability":"Optional","networkrate":200,"state":"Enabled","guestiptype":"Isolated","serviceofferingid":"983410fa-b51b-439c-b8ba-be973804c38f","service":[{"name":"PortForwarding","provider":[{"name":"VpcVirtualRouter"}]},{"name":"StaticNat","provider":[{"name":"VpcVirtualRouter"}],"capability":[{"name":"ElasticIp","value":"false","canchooseservicecapability":false},{"name":"AssociatePublicIP","value":"true","canchooseservicecapability":false}]},{"name":"Dhcp","provider":[{"name":"VpcVirtualRouter"}]},{"name":"NetworkACL","provider":[{"name":"VpcVirtualRouter"}]},{"name":"Lb","provider":[{"name":"VpcVirtualRouter"}],"capability":[{"name":"SupportedLBIsolation","value":"dedicated","canchooseservicecapability":false},{"name":"ElasticLb","value":"false","canchooseservicecapability":false},{"name":"InlineMode","value":"false","canchooseservicecapability":false}]},{"name":"UserData","provider":[{"name":"VpcVirtualRouter"}]},{"name":"Dns","provider":[{"name":"VpcVirtualRouter"}]},{"name":"SourceNat","provider":[{"name":"VpcVirtualRouter"}],"capability":[{"name":"SupportedSourceNatTypes","value":"peraccount","canchooseservicecapability":false},{"name":"RedundantRouter","value":"false","canchooseservicecapability":false}]},{"name":"Vpn","provider":[{"name":"VpcVirtualRouter"}]}],"forvpc":true,"ispersistent":false,"egressdefaultpolicy":false},
|
64
|
+
{"id":"a9d78d52-f306-44c5-bb6d-c121a507db05","name":"DefaultIsolatedNetworkOfferingForVpcNetworksNoLB","displaytext":"Offering
|
65
|
+
for Isolated Vpc networks with Source Nat service enabled and LB service Disabled","traffictype":"Guest","isdefault":true,"specifyvlan":false,"conservemode":false,"specifyipranges":false,"availability":"Optional","networkrate":200,"state":"Enabled","guestiptype":"Isolated","serviceofferingid":"983410fa-b51b-439c-b8ba-be973804c38f","service":[{"name":"PortForwarding","provider":[{"name":"VpcVirtualRouter"}]},{"name":"StaticNat","provider":[{"name":"VpcVirtualRouter"}],"capability":[{"name":"ElasticIp","value":"false","canchooseservicecapability":false},{"name":"AssociatePublicIP","value":"true","canchooseservicecapability":false}]},{"name":"Dhcp","provider":[{"name":"VpcVirtualRouter"}]},{"name":"NetworkACL","provider":[{"name":"VpcVirtualRouter"}]},{"name":"UserData","provider":[{"name":"VpcVirtualRouter"}]},{"name":"Dns","provider":[{"name":"VpcVirtualRouter"}]},{"name":"SourceNat","provider":[{"name":"VpcVirtualRouter"}],"capability":[{"name":"SupportedSourceNatTypes","value":"peraccount","canchooseservicecapability":false},{"name":"RedundantRouter","value":"false","canchooseservicecapability":false}]},{"name":"Vpn","provider":[{"name":"VpcVirtualRouter"}]}],"forvpc":true,"ispersistent":false,"egressdefaultpolicy":false},
|
66
|
+
{"id":"f9a7b0d0-ce61-4f8d-a360-be1040d67287","name":"DefaultIsolatedNetworkOfferingForVpcNetworksWithInternalLB","displaytext":"Offering
|
67
|
+
for Isolated Vpc networks with Internal LB support","traffictype":"Guest","isdefault":true,"specifyvlan":false,"conservemode":false,"specifyipranges":false,"availability":"Optional","networkrate":200,"state":"Enabled","guestiptype":"Isolated","serviceofferingid":"983410fa-b51b-439c-b8ba-be973804c38f","service":[{"name":"Dhcp","provider":[{"name":"VpcVirtualRouter"}]},{"name":"NetworkACL","provider":[{"name":"VpcVirtualRouter"}]},{"name":"Lb","provider":[{"name":"InternalLbVm"}],"capability":[{"name":"SupportedLBIsolation","value":"dedicated","canchooseservicecapability":false},{"name":"ElasticLb","value":"false","canchooseservicecapability":false},{"name":"InlineMode","value":"false","canchooseservicecapability":false}]},{"name":"UserData","provider":[{"name":"VpcVirtualRouter"}]},{"name":"Dns","provider":[{"name":"VpcVirtualRouter"}]},{"name":"SourceNat","provider":[{"name":"VpcVirtualRouter"}],"capability":[{"name":"SupportedSourceNatTypes","value":"peraccount","canchooseservicecapability":false},{"name":"RedundantRouter","value":"false","canchooseservicecapability":false}]}],"forvpc":true,"ispersistent":false,"egressdefaultpolicy":false}
|
68
68
|
] } }'
|
69
69
|
http_version:
|
70
|
-
recorded_at:
|
70
|
+
recorded_at: Thu, 19 Dec 2013 17:34:44 GMT
|
71
71
|
- request:
|
72
72
|
method: get
|
73
|
-
uri: <
|
73
|
+
uri: <CLOUD_STACK_URL>?apiKey=<CLOUD_STACK_API_KEY>&command=createNetwork&displaytext=John&name=John&networkOfferingId=fa126319-f822-4786-9cd3-30bd0c55ca94&response=json&signature=UDcfFqlzwpHJib/9kLKzR0%2BCbyc=&zoneId=39e9e31e-925c-4b55-8d33-f99912b73dfc
|
74
74
|
body:
|
75
75
|
encoding: US-ASCII
|
76
76
|
string: ''
|
77
77
|
headers:
|
78
78
|
User-Agent:
|
79
|
-
- Faraday v0.8.
|
79
|
+
- Faraday v0.8.8
|
80
80
|
Accept-Encoding:
|
81
81
|
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
82
82
|
Accept:
|
@@ -94,8 +94,11 @@ http_interactions:
|
|
94
94
|
- Jetty(6.1.26)
|
95
95
|
body:
|
96
96
|
encoding: UTF-8
|
97
|
-
string: '{ "createnetworkresponse" : { "network" : {"id":"
|
98
|
-
for Isolated networks with Source Nat service enabled","networkofferingconservemode":true,"networkofferingavailability":"Required","issystem":false,"state":"Allocated","related":"
|
97
|
+
string: '{ "createnetworkresponse" : { "network" : {"id":"18772181-9674-4a30-81e7-99ebb6a5baed","name":"John","displaytext":"John","broadcastdomaintype":"Vlan","traffictype":"Guest","gateway":"10.1.1.1","netmask":"255.255.255.0","cidr":"10.1.1.0/24","zoneid":"39e9e31e-925c-4b55-8d33-f99912b73dfc","zonename":"Sandbox-simulator","networkofferingid":"fa126319-f822-4786-9cd3-30bd0c55ca94","networkofferingname":"DefaultIsolatedNetworkOfferingWithSourceNatService","networkofferingdisplaytext":"Offering
|
98
|
+
for Isolated networks with Source Nat service enabled","networkofferingconservemode":true,"networkofferingavailability":"Required","issystem":false,"state":"Allocated","related":"18772181-9674-4a30-81e7-99ebb6a5baed","dns1":"10.147.28.6","type":"Isolated","acltype":"Account","account":"admin","domainid":"ce4585b8-41f5-11e3-aaa7-d6558ad1fb9f","domain":"ROOT","service":[{"name":"PortForwarding"},{"name":"StaticNat"},{"name":"Dhcp","capability":[{"name":"DhcpAccrossMultipleSubnets","value":"true","canchooseservicecapability":false}]},{"name":"Firewall","capability":[{"name":"TrafficStatistics","value":"per
|
99
|
+
public ip","canchooseservicecapability":false},{"name":"SupportedTrafficDirection","value":"ingress,
|
100
|
+
egress","canchooseservicecapability":false},{"name":"SupportedEgressProtocols","value":"tcp,udp,icmp,
|
101
|
+
all","canchooseservicecapability":false},{"name":"SupportedProtocols","value":"tcp,udp,icmp","canchooseservicecapability":false},{"name":"MultipleIps","value":"true","canchooseservicecapability":false}]},{"name":"Lb","capability":[{"name":"SupportedLbAlgorithms","value":"roundrobin,leastconn,source","canchooseservicecapability":false},{"name":"SupportedLBIsolation","value":"dedicated","canchooseservicecapability":false},{"name":"SupportedStickinessMethods","value":"[{\"methodname\":\"LbCookie\",\"paramlist\":[{\"paramname\":\"cookie-name\",\"required\":false,\"isflag\":false,\"description\":\"
|
99
102
|
\"},{\"paramname\":\"mode\",\"required\":false,\"isflag\":false,\"description\":\"
|
100
103
|
\"},{\"paramname\":\"nocache\",\"required\":false,\"isflag\":true,\"description\":\"
|
101
104
|
\"},{\"paramname\":\"indirect\",\"required\":false,\"isflag\":true,\"description\":\"
|
@@ -112,23 +115,50 @@ http_interactions:
|
|
112
115
|
http traffic\"},{\"methodname\":\"SourceBased\",\"paramlist\":[{\"paramname\":\"tablesize\",\"required\":false,\"isflag\":false,\"description\":\"
|
113
116
|
\"},{\"paramname\":\"expire\",\"required\":false,\"isflag\":false,\"description\":\"
|
114
117
|
\"}],\"description\":\"This is source based Stickiness method, it can be used
|
115
|
-
for any type of protocol.\"}]","canchooseservicecapability":false},{"name":"SupportedProtocols","value":"tcp,
|
116
|
-
udp","canchooseservicecapability":false},{"name":"
|
117
|
-
all","canchooseservicecapability":false},{"name":"SupportedTrafficDirection","value":"ingress,
|
118
|
-
egress","canchooseservicecapability":false},{"name":"SupportedProtocols","value":"tcp,udp,icmp","canchooseservicecapability":false},{"name":"MultipleIps","value":"true","canchooseservicecapability":false},{"name":"TrafficStatistics","value":"per
|
119
|
-
public ip","canchooseservicecapability":false}]},{"name":"Vpn","capability":[{"name":"SupportedVpnTypes","value":"pptp,l2tp,ipsec","canchooseservicecapability":false},{"name":"VpnTypes","value":"removeaccessvpn","canchooseservicecapability":false}]},{"name":"SourceNat","capability":[{"name":"RedundantRouter","value":"true","canchooseservicecapability":false},{"name":"SupportedSourceNatTypes","value":"peraccount","canchooseservicecapability":false}]},{"name":"PortForwarding"}],"networkdomain":"cs2sandbox.simulator","physicalnetworkid":"25b674fb-96c2-4c8c-80b4-051ef4dbde22","restartrequired":false,"specifyipranges":false,"canusefordeploy":true,"ispersistent":false,"tags":[],"displaynetwork":true}
|
118
|
+
for any type of protocol.\"}]","canchooseservicecapability":false},{"name":"LbSchemes","value":"Public","canchooseservicecapability":false},{"name":"SupportedProtocols","value":"tcp,
|
119
|
+
udp","canchooseservicecapability":false}]},{"name":"UserData"},{"name":"Dns","capability":[{"name":"AllowDnsSuffixModification","value":"true","canchooseservicecapability":false}]},{"name":"SourceNat","capability":[{"name":"RedundantRouter","value":"true","canchooseservicecapability":false},{"name":"SupportedSourceNatTypes","value":"peraccount","canchooseservicecapability":false}]},{"name":"Vpn","capability":[{"name":"SupportedVpnTypes","value":"pptp,l2tp,ipsec","canchooseservicecapability":false},{"name":"VpnTypes","value":"removeaccessvpn","canchooseservicecapability":false}]}],"networkdomain":"cs2sandbox.simulator","physicalnetworkid":"46d08659-81e9-4f31-a589-a15aca972af0","restartrequired":false,"specifyipranges":false,"canusefordeploy":true,"ispersistent":false,"tags":[],"displaynetwork":true}
|
120
120
|
} }'
|
121
121
|
http_version:
|
122
|
-
recorded_at:
|
122
|
+
recorded_at: Thu, 19 Dec 2013 17:34:44 GMT
|
123
123
|
- request:
|
124
124
|
method: get
|
125
|
-
uri: <
|
125
|
+
uri: <CLOUD_STACK_URL>?apiKey=<CLOUD_STACK_API_KEY>&command=createTags&resourceIds=18772181-9674-4a30-81e7-99ebb6a5baed&resourceType=Network&response=json&signature=xFXocwxqx4V1VH1EGVtjwdGZ0Yw=&tags%5B0%5D%5B%7D.key%5D=speed%20%5Blab%5D&tags%5B0%5D%5B%7D.name%5D=speed%20%5Blab%5D&tags%5B0%5D%5B%7D.value%5D=real%20fast!
|
126
126
|
body:
|
127
127
|
encoding: US-ASCII
|
128
128
|
string: ''
|
129
129
|
headers:
|
130
130
|
User-Agent:
|
131
|
-
- Faraday v0.8.
|
131
|
+
- Faraday v0.8.8
|
132
|
+
Accept-Encoding:
|
133
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
134
|
+
Accept:
|
135
|
+
- '*/*'
|
136
|
+
response:
|
137
|
+
status:
|
138
|
+
code: 401
|
139
|
+
message: Unauthorized
|
140
|
+
headers:
|
141
|
+
Content-Type:
|
142
|
+
- text/javascript; charset=UTF-8
|
143
|
+
Content-Length:
|
144
|
+
- '131'
|
145
|
+
Server:
|
146
|
+
- Jetty(6.1.26)
|
147
|
+
body:
|
148
|
+
encoding: UTF-8
|
149
|
+
string: '{ "createtagsresponse" : {"uuidList":[],"errorcode":401,"errortext":"unable
|
150
|
+
to verify user credentials and/or request signature"} }'
|
151
|
+
http_version:
|
152
|
+
recorded_at: Thu, 19 Dec 2013 17:34:44 GMT
|
153
|
+
- request:
|
154
|
+
method: get
|
155
|
+
uri: <CLOUD_STACK_URL>?apiKey=<CLOUD_STACK_API_KEY>&command=createTags&resourceIds=18772181-9674-4a30-81e7-99ebb6a5baed&resourceType=Network&response=json&signature=IqPennOpZ2NWFlJIBomJG9Ys9Zg=&tags%5B0%5D%5B.key%5D=speed%20%5Blab%5D&tags%5B0%5D%5B.name%5D=speed%20%5Blab%5D&tags%5B0%5D%5B.value%5D=real%20fast!
|
156
|
+
body:
|
157
|
+
encoding: US-ASCII
|
158
|
+
string: ''
|
159
|
+
headers:
|
160
|
+
User-Agent:
|
161
|
+
- Faraday v0.8.8
|
132
162
|
Accept-Encoding:
|
133
163
|
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
134
164
|
Accept:
|
@@ -146,8 +176,8 @@ http_interactions:
|
|
146
176
|
- Jetty(6.1.26)
|
147
177
|
body:
|
148
178
|
encoding: UTF-8
|
149
|
-
string: '{ "createtagsresponse" : {"jobid":"
|
179
|
+
string: '{ "createtagsresponse" : {"jobid":"7f37bba8-dd8e-4ba2-b5a4-bb97f3cf0cab"}
|
150
180
|
}'
|
151
181
|
http_version:
|
152
|
-
recorded_at:
|
153
|
-
recorded_with: VCR 2.
|
182
|
+
recorded_at: Thu, 19 Dec 2013 17:42:02 GMT
|
183
|
+
recorded_with: VCR 2.8.0
|