aviator 0.0.8 → 0.0.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +2 -0
- data/aviator.gemspec +4 -2
- data/bin/aviator +4 -2
- data/lib/aviator/core/cli/describer.rb +26 -11
- data/lib/aviator/core/service.rb +12 -4
- data/lib/aviator/core/session.rb +1 -2
- data/lib/aviator/openstack/common/requests/v0/public/base.rb +6 -0
- data/lib/aviator/openstack/compute/requests/v2/admin/list_hypervisors.rb +27 -0
- data/lib/aviator/openstack/compute/requests/v2/public/add_floating_ip.rb +38 -0
- data/lib/aviator/openstack/compute/requests/v2/public/allocate_floating_ip.rb +35 -0
- data/lib/aviator/openstack/compute/requests/v2/public/create_keypair.rb +39 -0
- data/lib/aviator/openstack/compute/requests/v2/public/create_server.rb +2 -1
- data/lib/aviator/openstack/compute/requests/v2/public/list_floating_ips.rb +26 -0
- data/lib/aviator/openstack/compute/requests/v2/public/list_keypairs.rb +26 -0
- data/lib/aviator/openstack/identity/requests/v2/admin/get_user.rb +33 -0
- data/lib/aviator/version.rb +1 -1
- data/test/aviator/core/session_test.rb +6 -7
- data/test/aviator/openstack/common/requests/v0/public/base_test.rb +13 -0
- data/test/aviator/openstack/compute/requests/v2/admin/list_hypervisors_test.rb +112 -0
- data/test/aviator/openstack/compute/requests/v2/public/add_floating_ip_test.rb +115 -0
- data/test/aviator/openstack/compute/requests/v2/public/allocate_floating_ip_test.rb +107 -0
- data/test/aviator/openstack/compute/requests/v2/public/create_keypair_test.rb +135 -0
- data/test/aviator/openstack/compute/requests/v2/public/create_server_test.rb +2 -1
- data/test/aviator/openstack/compute/requests/v2/public/list_floating_ips_test.rb +101 -0
- data/test/aviator/openstack/compute/requests/v2/public/list_keypairs_test.rb +101 -0
- data/test/aviator/openstack/identity/requests/v2/admin/get_user_test.rb +116 -0
- data/test/cassettes/openstack/compute/requests/v2/admin/list_hypervisors/leads_to_a_valid_response_when_no_parameters_are_provided.yml +103 -0
- data/test/cassettes/openstack/compute/requests/v2/admin/list_hypervisors/returns_the_correct_value_for_body_.yml +70 -0
- data/test/cassettes/openstack/compute/requests/v2/admin/list_hypervisors/returns_the_correct_value_for_headers_.yml +70 -0
- data/test/cassettes/openstack/compute/requests/v2/admin/list_hypervisors/returns_the_correct_value_for_http_method_.yml +70 -0
- data/test/cassettes/openstack/compute/requests/v2/admin/list_hypervisors/returns_the_correct_value_for_url_.yml +70 -0
- data/test/cassettes/openstack/compute/requests/v2/public/add_floating_ip/leads_to_a_valid_response_when_valid_params_are_provided.yml +104 -0
- data/test/cassettes/openstack/compute/requests/v2/public/add_floating_ip/returns_the_correct_value_for_body_.yml +71 -0
- data/test/cassettes/openstack/compute/requests/v2/public/add_floating_ip/returns_the_correct_value_for_headers_.yml +71 -0
- data/test/cassettes/openstack/compute/requests/v2/public/add_floating_ip/returns_the_correct_value_for_http_method_.yml +71 -0
- data/test/cassettes/openstack/compute/requests/v2/public/add_floating_ip/returns_the_correct_value_for_url_.yml +71 -0
- data/test/cassettes/openstack/compute/requests/v2/public/allocate_floating_ip/leads_to_a_valid_response_when_valid_params_are_provided.yml +112 -0
- data/test/cassettes/openstack/compute/requests/v2/public/allocate_floating_ip/returns_the_correct_value_for_body_.yml +78 -0
- data/test/cassettes/openstack/compute/requests/v2/public/allocate_floating_ip/returns_the_correct_value_for_headers_.yml +78 -0
- data/test/cassettes/openstack/compute/requests/v2/public/allocate_floating_ip/returns_the_correct_value_for_http_method_.yml +78 -0
- data/test/cassettes/openstack/compute/requests/v2/public/allocate_floating_ip/returns_the_correct_value_for_url_.yml +78 -0
- data/test/cassettes/openstack/compute/requests/v2/public/create_keypair/leads_to_a_valid_response_when_an_invalid_public_key_is_provided.yml +105 -0
- data/test/cassettes/openstack/compute/requests/v2/public/create_keypair/leads_to_a_valid_response_when_valid_parameters_are_provided.yml +107 -0
- data/test/cassettes/openstack/compute/requests/v2/public/create_keypair/returns_the_correct_value_for_body_.yml +71 -0
- data/test/cassettes/openstack/compute/requests/v2/public/create_keypair/returns_the_correct_value_for_headers_.yml +71 -0
- data/test/cassettes/openstack/compute/requests/v2/public/create_keypair/returns_the_correct_value_for_http_method_.yml +71 -0
- data/test/cassettes/openstack/compute/requests/v2/public/create_keypair/returns_the_correct_value_for_url_.yml +71 -0
- data/test/cassettes/openstack/compute/requests/v2/public/list_floating_ips/leads_to_a_valid_response_when_no_parameters_are_provided.yml +105 -0
- data/test/cassettes/openstack/compute/requests/v2/public/list_floating_ips/returns_the_correct_value_for_body_.yml +71 -0
- data/test/cassettes/openstack/compute/requests/v2/public/list_floating_ips/returns_the_correct_value_for_headers_.yml +71 -0
- data/test/cassettes/openstack/compute/requests/v2/public/list_floating_ips/returns_the_correct_value_for_http_method_.yml +71 -0
- data/test/cassettes/openstack/compute/requests/v2/public/list_floating_ips/returns_the_correct_value_for_url_.yml +71 -0
- data/test/cassettes/openstack/compute/requests/v2/public/list_keypairs/leads_to_a_valid_response_when_no_parameters_are_provided.yml +105 -0
- data/test/cassettes/openstack/compute/requests/v2/public/list_keypairs/returns_the_correct_value_for_body_.yml +71 -0
- data/test/cassettes/openstack/compute/requests/v2/public/list_keypairs/returns_the_correct_value_for_headers_.yml +71 -0
- data/test/cassettes/openstack/compute/requests/v2/public/list_keypairs/returns_the_correct_value_for_http_method_.yml +71 -0
- data/test/cassettes/openstack/compute/requests/v2/public/list_keypairs/returns_the_correct_value_for_url_.yml +71 -0
- data/test/cassettes/openstack/identity/requests/v2/admin/get_user/leads_to_a_valid_response_when_name_is_provided.yml +105 -0
- data/test/cassettes/openstack/identity/requests/v2/admin/get_user/returns_the_correct_value_for_body_.yml +70 -0
- data/test/cassettes/openstack/identity/requests/v2/admin/get_user/returns_the_correct_value_for_headers_.yml +70 -0
- data/test/cassettes/openstack/identity/requests/v2/admin/get_user/returns_the_correct_value_for_http_method_.yml +70 -0
- data/test/cassettes/openstack/identity/requests/v2/admin/get_user/returns_the_correct_value_for_url_.yml +70 -0
- data/test/support/vcr_setup.rb +12 -1
- metadata +99 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a9501d71ef567ef9bfe2a511a7122a23f8faca48
|
4
|
+
data.tar.gz: 9ae86b5df08bbceafb3481b6a4693ab2783996c1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aed3dc71e256f15c8e314f4d781e369d23b6648fa7406c2e84a34f3326457e5c93fc1c2d2b073a0f71904947081da6191412e346d76ff8a5806184ffed1fd9af
|
7
|
+
data.tar.gz: 435d8acd62fcbf0fc8ed08f2ee9fabd6baf87f17b8258eea76f7fae30faaee19b3b36f6e74239bab1914b3603a2f10ca3cf474ca22a19e69c70edde26f0b72d1
|
data/.gitignore
CHANGED
data/aviator.gemspec
CHANGED
@@ -21,10 +21,12 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
22
22
|
spec.require_paths = ["lib"]
|
23
23
|
|
24
|
-
|
25
|
-
spec.add_dependency '
|
24
|
+
# Runtime dependencies
|
25
|
+
spec.add_dependency 'faraday', '>= 0.8.8'
|
26
|
+
spec.add_dependency 'thor', '>= 0.18.1'
|
26
27
|
spec.add_dependency 'terminal-table', '>= 1.4.5'
|
27
28
|
|
29
|
+
# Development dependencies. See Gemfile for more development deps.
|
28
30
|
spec.add_development_dependency "bundler", ">= 1.0"
|
29
31
|
spec.add_development_dependency 'rb-fsevent', '~> 0.9.0'
|
30
32
|
spec.add_development_dependency 'guard', '~> 1.8.0'
|
data/bin/aviator
CHANGED
@@ -8,7 +8,7 @@ module Aviator
|
|
8
8
|
module CLI
|
9
9
|
|
10
10
|
class Main < Thor
|
11
|
-
|
11
|
+
|
12
12
|
desc 'describe [PROVIDER] [SERVICE] [API_VERSION ENDPOINT_TYPE REQUEST_NAME]', 'Describes various parts of Aviator.'
|
13
13
|
def describe(provider=nil, service=nil, api_version=nil, endpoint_type=nil, request=nil)
|
14
14
|
if request
|
@@ -20,6 +20,8 @@ module CLI
|
|
20
20
|
else
|
21
21
|
puts Aviator::Describer.describe_aviator
|
22
22
|
end
|
23
|
+
rescue Aviator::Describer::InvalidProviderNameError => e
|
24
|
+
puts e.message
|
23
25
|
end
|
24
26
|
|
25
27
|
end
|
@@ -27,4 +29,4 @@ module CLI
|
|
27
29
|
end
|
28
30
|
end
|
29
31
|
|
30
|
-
Aviator::CLI::Main.start(ARGV)
|
32
|
+
Aviator::CLI::Main.start(ARGV)
|
@@ -2,6 +2,13 @@ module Aviator
|
|
2
2
|
|
3
3
|
class Describer
|
4
4
|
|
5
|
+
class InvalidProviderNameError < StandardError
|
6
|
+
def initialize(name)
|
7
|
+
super "Provider '#{ name }' does not exist."
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
|
5
12
|
def self.describe_aviator
|
6
13
|
str = "Available providers:\n"
|
7
14
|
|
@@ -104,13 +111,19 @@ module Aviator
|
|
104
111
|
|
105
112
|
|
106
113
|
def self.describe_service(provider_name, service_name)
|
107
|
-
|
114
|
+
requests = request_classes(provider_name, service_name)
|
108
115
|
|
109
|
-
|
110
|
-
str
|
111
|
-
|
116
|
+
if requests.empty?
|
117
|
+
str = "No requests found for #{ provider_name } #{ service_name }_service."
|
118
|
+
else
|
119
|
+
str = "Available requests for #{ provider_name } #{ service_name }_service:\n"
|
112
120
|
|
113
|
-
|
121
|
+
requests.each do |klass|
|
122
|
+
str << " #{ klass.api_version } #{ klass.endpoint_type } #{ klass.name.split('::').last.underscore }\n"
|
123
|
+
end
|
124
|
+
|
125
|
+
str
|
126
|
+
end
|
114
127
|
end
|
115
128
|
|
116
129
|
|
@@ -132,12 +145,14 @@ module Aviator
|
|
132
145
|
end
|
133
146
|
|
134
147
|
|
135
|
-
def service_names(
|
136
|
-
Pathname.new(__FILE__)
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
148
|
+
def service_names(name)
|
149
|
+
provider = Pathname.new(__FILE__).join('..', '..', '..', name)
|
150
|
+
|
151
|
+
raise InvalidProviderNameError.new(name) unless provider.exist?
|
152
|
+
|
153
|
+
provider.children \
|
154
|
+
.select{|c| c.directory? } \
|
155
|
+
.map{|c| c.basename.to_s }
|
141
156
|
end
|
142
157
|
end
|
143
158
|
|
data/lib/aviator/core/service.rb
CHANGED
@@ -21,9 +21,17 @@ module Aviator
|
|
21
21
|
end
|
22
22
|
|
23
23
|
class SessionDataNotProvidedError < StandardError
|
24
|
-
def initialize
|
25
|
-
super "default_session_data is not initialized and no session data was "\
|
26
|
-
"
|
24
|
+
def initialize(service_name, request_name)
|
25
|
+
super "\n\nERROR: default_session_data is not initialized and no session data was provided in\n"\
|
26
|
+
"the method call. You have two ways to fix this:\n\n"\
|
27
|
+
" 1) Call Session#authenticate before calling Session##{service_name}_service, or\n\n"\
|
28
|
+
" 2) If you're really sure you don't want to authenticate beforehand,\n"\
|
29
|
+
" construct the method call this way:\n\n"\
|
30
|
+
" service = session.#{service_name}_service\n"\
|
31
|
+
" service.request :#{request_name}, :api_version => :v2, :session_data => sessiondatavar\n\n"\
|
32
|
+
" Replace :v2 with whatever available version you want to use and make sure sessiondatavar\n"\
|
33
|
+
" is a hash that contains, at least, the :base_url key. Other keys, such as :service_token may\n"\
|
34
|
+
" be needed depending on what the request class you are calling requires.\n\n"
|
27
35
|
end
|
28
36
|
end
|
29
37
|
|
@@ -75,7 +83,7 @@ module Aviator
|
|
75
83
|
|
76
84
|
session_data = options[:session_data] || default_session_data
|
77
85
|
|
78
|
-
raise SessionDataNotProvidedError.new unless session_data
|
86
|
+
raise SessionDataNotProvidedError.new(@service, request_name) unless session_data
|
79
87
|
|
80
88
|
[:base_url].each do |k|
|
81
89
|
session_data[k] = options[k] if options[k]
|
data/lib/aviator/core/session.rb
CHANGED
@@ -76,6 +76,7 @@ module Aviator
|
|
76
76
|
else
|
77
77
|
raise AuthenticationError.new(response.body)
|
78
78
|
end
|
79
|
+
self
|
79
80
|
end
|
80
81
|
|
81
82
|
|
@@ -152,8 +153,6 @@ module Aviator
|
|
152
153
|
|
153
154
|
|
154
155
|
def get_service_obj(service_name)
|
155
|
-
raise NotAuthenticatedError.new unless self.authenticated?
|
156
|
-
|
157
156
|
@services ||= {}
|
158
157
|
|
159
158
|
if @services[service_name].nil?
|
@@ -12,6 +12,12 @@ module Aviator
|
|
12
12
|
if self.anonymous?
|
13
13
|
# do nothing
|
14
14
|
|
15
|
+
elsif session_data.has_key? :service_token
|
16
|
+
# service_token is the token that one would bootstrap OpenStack
|
17
|
+
# with during the installation process. This token can be used
|
18
|
+
# directly and does not require authentication beforehand.
|
19
|
+
h['X-Auth-Token'] = session_data[:service_token]
|
20
|
+
|
15
21
|
elsif keystone_v2_style_session_data?
|
16
22
|
h['X-Auth-Token'] = session_data[:body][:access][:token][:id]
|
17
23
|
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Aviator
|
2
|
+
|
3
|
+
define_request :list_hypervisors, :inherit => [:openstack, :common, :v2, :admin, :base] do
|
4
|
+
|
5
|
+
meta :service, :compute
|
6
|
+
|
7
|
+
link 'documentation',
|
8
|
+
'http://api.openstack.org/api-ref-compute-v2-ext.html#ext-os-hypervisors'
|
9
|
+
|
10
|
+
def headers
|
11
|
+
super
|
12
|
+
end
|
13
|
+
|
14
|
+
|
15
|
+
def http_method
|
16
|
+
:get
|
17
|
+
end
|
18
|
+
|
19
|
+
|
20
|
+
def url
|
21
|
+
"#{ base_url }/os-hypervisors"
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Aviator
|
2
|
+
|
3
|
+
define_request :add_floating_ip, :inherit => [:openstack, :common, :v2, :public, :base] do
|
4
|
+
|
5
|
+
meta :service, :compute
|
6
|
+
|
7
|
+
link 'documentation',
|
8
|
+
'http://docs.openstack.org/api/openstack-compute/2/content/POST_os-floating-ips-v2_AddFloatingIP__v2__tenant_id__servers__server_id__action_ext-os-floating-ips.html#POST_os-floating-ips-v2_AddFloatingIP__v2__tenant_id__servers__server_id__action_ext-os-floating-ips-Request'
|
9
|
+
|
10
|
+
param :server_id, :required => true
|
11
|
+
param :address, :required => true
|
12
|
+
|
13
|
+
def body
|
14
|
+
{
|
15
|
+
:addFloatingIp => {
|
16
|
+
:address => params[:address]
|
17
|
+
}
|
18
|
+
}
|
19
|
+
end
|
20
|
+
|
21
|
+
|
22
|
+
def headers
|
23
|
+
super
|
24
|
+
end
|
25
|
+
|
26
|
+
|
27
|
+
def http_method
|
28
|
+
:post
|
29
|
+
end
|
30
|
+
|
31
|
+
|
32
|
+
def url
|
33
|
+
"#{ base_url }/servers/#{ params[:server_id] }/action"
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module Aviator
|
2
|
+
|
3
|
+
define_request :allocate_floating_ip, :inherit => [:openstack, :common, :v2, :public, :base] do
|
4
|
+
|
5
|
+
meta :service, :compute
|
6
|
+
|
7
|
+
link 'documentation',
|
8
|
+
'http://docs.openstack.org/api/openstack-compute/2/content/POST_os-floating-ips-v2_AllocateFloatingIP__v2__tenant_id__os-floating-ips_ext-os-floating-ips.html'
|
9
|
+
|
10
|
+
param :pool, :required => false
|
11
|
+
|
12
|
+
def body
|
13
|
+
{
|
14
|
+
:pool => params[:pool]
|
15
|
+
}
|
16
|
+
end
|
17
|
+
|
18
|
+
|
19
|
+
def headers
|
20
|
+
super
|
21
|
+
end
|
22
|
+
|
23
|
+
|
24
|
+
def http_method
|
25
|
+
:post
|
26
|
+
end
|
27
|
+
|
28
|
+
|
29
|
+
def url
|
30
|
+
"#{ base_url }/os-floating-ips"
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module Aviator
|
2
|
+
|
3
|
+
define_request :create_keypair, :inherit => [:openstack, :common, :v2, :public, :base] do
|
4
|
+
|
5
|
+
meta :service, :compute
|
6
|
+
|
7
|
+
link 'documentation',
|
8
|
+
'http://docs.openstack.org/api/openstack-compute/2/content/POST_os-keypairs-v2_createKeypair__v2__tenant_id__os-keypairs_ext-os-keypairs.html'
|
9
|
+
|
10
|
+
param :name, :required => true
|
11
|
+
param :public_key, :required => false
|
12
|
+
|
13
|
+
def body
|
14
|
+
{
|
15
|
+
:keypair => {
|
16
|
+
:name => params[:name],
|
17
|
+
:public_key => params[:public_key],
|
18
|
+
}
|
19
|
+
}
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
def headers
|
24
|
+
super
|
25
|
+
end
|
26
|
+
|
27
|
+
|
28
|
+
def http_method
|
29
|
+
:post
|
30
|
+
end
|
31
|
+
|
32
|
+
|
33
|
+
def url
|
34
|
+
"#{ base_url }/os-keypairs"
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
@@ -12,6 +12,7 @@ module Aviator
|
|
12
12
|
param :adminPass, :required => false, :alias => :admin_pass
|
13
13
|
param :imageRef, :required => true, :alias => :image_ref
|
14
14
|
param :flavorRef, :required => true, :alias => :flavor_ref
|
15
|
+
param :key_name, :required => false
|
15
16
|
param :metadata, :required => false
|
16
17
|
param :name, :required => true
|
17
18
|
param :networks, :required => false
|
@@ -27,7 +28,7 @@ module Aviator
|
|
27
28
|
}
|
28
29
|
}
|
29
30
|
|
30
|
-
[:adminPass, :metadata, :personality, :networks, :accessIPv4, :accessIPv6].each do |key|
|
31
|
+
[:adminPass, :metadata, :personality, :networks, :accessIPv4, :accessIPv6, :key_name].each do |key|
|
31
32
|
p[:server][key] = params[key] if params[key]
|
32
33
|
end
|
33
34
|
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Aviator
|
2
|
+
|
3
|
+
define_request :list_floating_ips, :inherit => [:openstack, :common, :v2, :public, :base] do
|
4
|
+
|
5
|
+
meta :service, :compute
|
6
|
+
|
7
|
+
link 'documentation',
|
8
|
+
'http://docs.openstack.org/api/openstack-compute/2/content/GET_os-floating-ips-v2_ListFloatingIPs__v2__tenant_id__os-floating-ips_ext-os-floating-ips.html'
|
9
|
+
|
10
|
+
def headers
|
11
|
+
super
|
12
|
+
end
|
13
|
+
|
14
|
+
|
15
|
+
def http_method
|
16
|
+
:get
|
17
|
+
end
|
18
|
+
|
19
|
+
|
20
|
+
def url
|
21
|
+
str = "#{ base_url }/os-floating-ips"
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Aviator
|
2
|
+
|
3
|
+
define_request :list_keypairs, :inherit => [:openstack, :common, :v2, :public, :base] do
|
4
|
+
|
5
|
+
meta :service, :compute
|
6
|
+
|
7
|
+
link 'documentation',
|
8
|
+
'http://docs.openstack.org/api/openstack-compute/2/content/GET_os-keypairs-v2_getKeypair__v2__tenant_id__os-keypairs_ext-os-keypairs.html'
|
9
|
+
|
10
|
+
def headers
|
11
|
+
super
|
12
|
+
end
|
13
|
+
|
14
|
+
|
15
|
+
def http_method
|
16
|
+
:get
|
17
|
+
end
|
18
|
+
|
19
|
+
|
20
|
+
def url
|
21
|
+
str = "#{ base_url }/os-keypairs"
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'cgi'
|
2
|
+
|
3
|
+
module Aviator
|
4
|
+
|
5
|
+
define_request :get_user, :inherit => [:openstack, :common, :v2, :public, :base] do
|
6
|
+
|
7
|
+
meta :provider, :openstack
|
8
|
+
meta :service, :identity
|
9
|
+
meta :api_version, :v2
|
10
|
+
meta :endpoint_type, :admin
|
11
|
+
|
12
|
+
link 'documentation',
|
13
|
+
'http://docs.openstack.org/api/openstack-identity-service/2.0/content/GET_getUserByName_v2.0_users__User_Operations.html'
|
14
|
+
|
15
|
+
param :name, :required => true
|
16
|
+
|
17
|
+
def headers
|
18
|
+
super
|
19
|
+
end
|
20
|
+
|
21
|
+
|
22
|
+
def http_method
|
23
|
+
:get
|
24
|
+
end
|
25
|
+
|
26
|
+
|
27
|
+
def url
|
28
|
+
"#{ base_url }/users?name=#{ CGI::escape(params.name) }"
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
data/lib/aviator/version.rb
CHANGED
@@ -261,13 +261,6 @@ class Aviator::Test
|
|
261
261
|
|
262
262
|
describe '#xxx_service' do
|
263
263
|
|
264
|
-
it 'raises a NotAuthenticatedError if called without authenticating first' do
|
265
|
-
the_method = lambda { new_session.identity_service }
|
266
|
-
|
267
|
-
the_method.must_raise Aviator::Session::NotAuthenticatedError
|
268
|
-
end
|
269
|
-
|
270
|
-
|
271
264
|
it 'returns an instance of the indicated service' do
|
272
265
|
session = new_session
|
273
266
|
session.authenticate
|
@@ -275,6 +268,12 @@ class Aviator::Test
|
|
275
268
|
session.identity_service.wont_be_nil
|
276
269
|
end
|
277
270
|
|
271
|
+
it 'returns an instance of the indicated service even if not authenticated' do
|
272
|
+
session = new_session
|
273
|
+
session.compute_service.wont_be_nil
|
274
|
+
session.authenticated?.must_equal false
|
275
|
+
end
|
276
|
+
|
278
277
|
end
|
279
278
|
|
280
279
|
end # describe 'aviator/core/service'
|
@@ -66,6 +66,19 @@ class Aviator::Test
|
|
66
66
|
|
67
67
|
describe '#headers' do
|
68
68
|
|
69
|
+
it 'must know to extract a service token if provided' do
|
70
|
+
session_data = {
|
71
|
+
:base_url => 'http://example.com',
|
72
|
+
:service_token => 'sometokenipickedupfromsomewhere'
|
73
|
+
}
|
74
|
+
headers = { 'X-Auth-Token' => session_data[:service_token] }
|
75
|
+
|
76
|
+
request = create_request(session_data)
|
77
|
+
|
78
|
+
request.headers.must_equal headers
|
79
|
+
end
|
80
|
+
|
81
|
+
|
69
82
|
it 'must know to extract token from a Keystone v2 auth info' do
|
70
83
|
session_data = get_session_data(:v2)
|
71
84
|
headers = { 'X-Auth-Token' => session_data[:body][:access][:token][:id] }
|
@@ -0,0 +1,112 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class Aviator::Test
|
4
|
+
|
5
|
+
describe 'aviator/openstack/compute/requests/v2/admin/list_hypervisors' do
|
6
|
+
|
7
|
+
def create_request(session_data = get_session_data, &block)
|
8
|
+
klass.new(session_data, &block)
|
9
|
+
end
|
10
|
+
|
11
|
+
|
12
|
+
def get_session_data
|
13
|
+
session.send :auth_response
|
14
|
+
end
|
15
|
+
|
16
|
+
|
17
|
+
def helper
|
18
|
+
Aviator::Test::RequestHelper
|
19
|
+
end
|
20
|
+
|
21
|
+
|
22
|
+
def klass
|
23
|
+
@klass ||= helper.load_request('openstack', 'compute', 'v2', 'admin', 'list_hypervisors.rb')
|
24
|
+
end
|
25
|
+
|
26
|
+
|
27
|
+
def session
|
28
|
+
unless @session
|
29
|
+
@session = Aviator::Session.new(
|
30
|
+
:config_file => Environment.path,
|
31
|
+
:environment => 'openstack_admin'
|
32
|
+
)
|
33
|
+
@session.authenticate
|
34
|
+
end
|
35
|
+
|
36
|
+
@session
|
37
|
+
end
|
38
|
+
|
39
|
+
|
40
|
+
validate_attr :anonymous? do
|
41
|
+
klass.anonymous?.must_equal false
|
42
|
+
end
|
43
|
+
|
44
|
+
|
45
|
+
validate_attr :api_version do
|
46
|
+
klass.api_version.must_equal :v2
|
47
|
+
end
|
48
|
+
|
49
|
+
|
50
|
+
validate_attr :body do
|
51
|
+
klass.body?.must_equal false
|
52
|
+
create_request.body?.must_equal false
|
53
|
+
end
|
54
|
+
|
55
|
+
|
56
|
+
validate_attr :endpoint_type do
|
57
|
+
klass.endpoint_type.must_equal :admin
|
58
|
+
end
|
59
|
+
|
60
|
+
|
61
|
+
validate_attr :headers do
|
62
|
+
session_data = get_session_data
|
63
|
+
|
64
|
+
headers = { 'X-Auth-Token' => session_data[:body][:access][:token][:id] }
|
65
|
+
|
66
|
+
request = create_request(session_data)
|
67
|
+
|
68
|
+
request.headers.must_equal headers
|
69
|
+
end
|
70
|
+
|
71
|
+
|
72
|
+
validate_attr :http_method do
|
73
|
+
create_request.http_method.must_equal :get
|
74
|
+
end
|
75
|
+
|
76
|
+
|
77
|
+
validate_attr :optional_params do
|
78
|
+
klass.optional_params.must_equal []
|
79
|
+
end
|
80
|
+
|
81
|
+
|
82
|
+
validate_attr :required_params do
|
83
|
+
klass.required_params.must_equal []
|
84
|
+
end
|
85
|
+
|
86
|
+
|
87
|
+
validate_attr :url do
|
88
|
+
session_data = get_session_data
|
89
|
+
service_spec = session_data[:body][:access][:serviceCatalog].find{|s| s[:type] == 'compute' }
|
90
|
+
url = "#{ service_spec[:endpoints][0][:adminURL] }/os-hypervisors"
|
91
|
+
request = klass.new(session_data)
|
92
|
+
|
93
|
+
request.url.must_equal url
|
94
|
+
end
|
95
|
+
|
96
|
+
|
97
|
+
validate_response 'no parameters are provided' do
|
98
|
+
service = session.compute_service
|
99
|
+
|
100
|
+
response = service.request :list_hypervisors, :api_version => :v2
|
101
|
+
|
102
|
+
response.status.must_equal 200
|
103
|
+
response.body.wont_be_nil
|
104
|
+
response.body[:hypervisors].must_be_kind_of Array
|
105
|
+
response.body[:hypervisors].length.wont_equal 0
|
106
|
+
response.headers.wont_be_nil
|
107
|
+
end
|
108
|
+
|
109
|
+
end
|
110
|
+
|
111
|
+
end
|
112
|
+
|