aviator 0.0.8 → 0.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.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
|
+
|