[hp|compute_v2] Add request methods for keypairs, along with tests.
This commit is contained in:
parent
5f5919abdf
commit
273bd967b9
|
@ -32,11 +32,11 @@ module Fog
|
|||
#request :change_password_server
|
||||
#request :confirm_resized_server
|
||||
request :create_image
|
||||
#request :create_key_pair
|
||||
request :create_key_pair
|
||||
request :create_server
|
||||
#request :create_persistent_server
|
||||
request :delete_image
|
||||
#request :delete_key_pair
|
||||
request :delete_key_pair
|
||||
#request :delete_meta
|
||||
request :delete_server
|
||||
#request :detach_volume
|
||||
|
@ -45,6 +45,7 @@ module Fog
|
|||
#request :get_console_output
|
||||
request :get_flavor_details
|
||||
request :get_image_details
|
||||
request :get_key_pair
|
||||
#request :get_meta
|
||||
#request :get_windows_password
|
||||
request :get_server_details
|
||||
|
@ -54,7 +55,7 @@ module Fog
|
|||
request :list_flavors_detail
|
||||
request :list_images
|
||||
request :list_images_detail
|
||||
#request :list_key_pairs
|
||||
request :list_key_pairs
|
||||
#request :list_metadata
|
||||
#request :list_server_addresses
|
||||
#request :list_server_private_addresses
|
||||
|
|
|
@ -0,0 +1,77 @@
|
|||
module Fog
|
||||
module Compute
|
||||
class HPV2
|
||||
class Real
|
||||
|
||||
# Create a new keypair
|
||||
#
|
||||
# ==== Parameters
|
||||
# * 'key_name'<~String> - Name of the keypair
|
||||
# * 'public_key'<~String> - The public key for the keypair
|
||||
#
|
||||
# ==== Returns
|
||||
# * response<~Excon::Response>:
|
||||
# * body<~Hash>:
|
||||
# * 'keypair'<~Hash> - The keypair data
|
||||
# * 'public_key'<~String> - The public key for the keypair
|
||||
# * 'private_key'<~String> - The private key for the keypair
|
||||
# * 'user_id'<~String> - The user id
|
||||
# * 'fingerprint'<~String> - SHA-1 digest of DER encoded private key
|
||||
# * 'name'<~String> - Name of key
|
||||
def create_key_pair(key_name, public_key = nil)
|
||||
if public_key.nil?
|
||||
data = {
|
||||
'keypair' => {
|
||||
'name' => key_name
|
||||
}
|
||||
}
|
||||
else
|
||||
data = {
|
||||
'keypair' => {
|
||||
'name' => key_name,
|
||||
'public_key' => public_key
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
request(
|
||||
:body => Fog::JSON.encode(data),
|
||||
:expects => 200,
|
||||
:method => 'POST',
|
||||
:path => 'os-keypairs'
|
||||
)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
class Mock
|
||||
|
||||
def create_key_pair(key_name, public_key = nil)
|
||||
response = Excon::Response.new
|
||||
unless self.data[:key_pairs][key_name]
|
||||
response.status = 200
|
||||
private_key, new_public_key = Fog::HP::Mock.key_material
|
||||
new_public_key = public_key if public_key # if public key was passed in
|
||||
data = {
|
||||
'public_key' => new_public_key,
|
||||
'fingerprint' => Fog::HP::Mock.key_fingerprint,
|
||||
'name' => key_name
|
||||
}
|
||||
self.data[:last_modified][:key_pairs][key_name] = Time.now
|
||||
self.data[:key_pairs][key_name] = { 'keypair' => data }
|
||||
if public_key
|
||||
response.body = { 'keypair' => data.merge({'user_id' => Fog::HP::Mock.user_id,}) }
|
||||
else
|
||||
response.body = { 'keypair' => data.merge({'private_key' => private_key, 'user_id' => Fog::HP::Mock.user_id}) }
|
||||
end
|
||||
else
|
||||
raise Fog::Compute::HPV2::NotFound
|
||||
end
|
||||
response
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
|
@ -0,0 +1,38 @@
|
|||
module Fog
|
||||
module Compute
|
||||
class HPV2
|
||||
class Real
|
||||
|
||||
# Delete a keypair
|
||||
#
|
||||
# ==== Parameters
|
||||
# * 'key_name'<~String> - Name of the keypair to delete
|
||||
#
|
||||
def delete_key_pair(key_name)
|
||||
request(
|
||||
:expects => 202,
|
||||
:method => 'DELETE',
|
||||
:path => "os-keypairs/#{key_name}"
|
||||
)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
class Mock
|
||||
|
||||
def delete_key_pair(key_name)
|
||||
response = Excon::Response.new
|
||||
if self.data[:key_pairs][key_name]
|
||||
self.data[:last_modified][:key_pairs].delete(key_name)
|
||||
self.data[:key_pairs].delete(key_name)
|
||||
response.status = 202
|
||||
response
|
||||
else
|
||||
raise Fog::Compute::HPV2::NotFound
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -0,0 +1,44 @@
|
|||
module Fog
|
||||
module Compute
|
||||
class HPV2
|
||||
class Real
|
||||
|
||||
# Get details about a key pair
|
||||
#
|
||||
# ==== Parameters
|
||||
# * 'key_name'<~String> - Name of the keypair to get
|
||||
#
|
||||
# ==== Returns
|
||||
# * response<~Excon::Response>:
|
||||
# * body<~Hash>:
|
||||
# * 'keypair'<~Hash>:
|
||||
# * 'public_key'<~String> - Public portion of the key
|
||||
# * 'name'<~String> - Name of the key
|
||||
# * 'fingerprint'<~String> - Fingerprint of the key
|
||||
def get_key_pair(key_name)
|
||||
request(
|
||||
:expects => 200,
|
||||
:method => 'GET',
|
||||
:path => "os-keypairs/#{key_name}"
|
||||
)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
class Mock
|
||||
|
||||
def get_key_pair(key_name)
|
||||
response = Excon::Response.new
|
||||
if key_pair = self.data[:key_pairs][key_name]
|
||||
response.status = 200
|
||||
response.body = { 'keypair' => key_pair['keypair'] }
|
||||
response
|
||||
else
|
||||
raise Fog::Compute::HPV2::NotFound
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -0,0 +1,42 @@
|
|||
module Fog
|
||||
module Compute
|
||||
class HPV2
|
||||
class Real
|
||||
|
||||
# List all key pairs
|
||||
#
|
||||
# ==== Returns
|
||||
# * response<~Excon::Response>:
|
||||
# * body<~Hash>:
|
||||
# * 'keypairs'<~Array>:
|
||||
# * 'keypair'<~Hash>:
|
||||
# * 'public_key'<~String> - Public portion of the key
|
||||
# * 'name'<~String> - Name of the key
|
||||
# * 'fingerprint'<~String> - Fingerprint of the key
|
||||
def list_key_pairs
|
||||
request(
|
||||
:expects => [200, 203],
|
||||
:method => 'GET',
|
||||
:path => 'os-keypairs'
|
||||
)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
class Mock
|
||||
|
||||
def list_key_pairs
|
||||
response = Excon::Response.new
|
||||
|
||||
key_pairs = []
|
||||
key_pairs = self.data[:key_pairs].values unless self.data[:key_pairs].nil?
|
||||
|
||||
response.status = [200, 203][rand(1)]
|
||||
response.body = { 'keypairs' => key_pairs }
|
||||
response
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -0,0 +1,66 @@
|
|||
Shindo.tests("Fog::Compute::HPV2 | key pair requests", ['hp', 'v2', 'compute']) do
|
||||
|
||||
service = Fog::Compute.new(:provider => 'HP', :version => :v2)
|
||||
|
||||
tests('success') do
|
||||
|
||||
@keypair_format = {
|
||||
'public_key' => String,
|
||||
'fingerprint' => String,
|
||||
'name' => String
|
||||
}
|
||||
|
||||
@keypairs_format = {
|
||||
'keypairs' => [{
|
||||
'keypair' => {
|
||||
'public_key' => String,
|
||||
'fingerprint' => String,
|
||||
'name' => Fog::Nullable::String
|
||||
}
|
||||
}]
|
||||
}
|
||||
|
||||
@key_pair_name = 'fog_create_key_pair'
|
||||
@public_key_material = 'ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA1SL+kgze8tvSFW6Tyj3RyZc9iFVQDiCKzjgwn2tS7hyWxaiDhjfY2mBYSZwFdKN+ZdsXDJL4CPutUg4DKoQneVgIC1zuXrlpPbaT0Btu2aFd4qNfJ85PBrOtw2GrWZ1kcIgzZ1mMbQt6i1vhsySD2FEj+5kGHouNxQpI5dFR5K+nGgcTLFGnzb/MPRBk136GVnuuYfJ2I4va/chstThoP8UwnoapRHcBpwTIfbmmL91BsRVqjXZEUT73nxpxFeXXidYwhHio+5dXwE0aM/783B/3cPG6FVoxrBvjoNpQpAcEyjtRh9lpwHZtSEW47WNzpIW3PhbQ8j4MryznqF1Rhw=='
|
||||
|
||||
tests("#create_key_pair('#{@key_pair_name}')").formats({'keypair' => @keypair_format.merge({'private_key' => String, 'user_id' => String})}) do
|
||||
body = service.create_key_pair(@key_pair_name).body
|
||||
tests("private_key").returns(OpenSSL::PKey::RSA, "is a valid private RSA key") do
|
||||
OpenSSL::PKey::RSA.new(body['keypair']['private_key']).class
|
||||
end
|
||||
body
|
||||
end
|
||||
|
||||
tests('#list_key_pairs').formats(@keypairs_format) do
|
||||
service.list_key_pairs.body
|
||||
end
|
||||
|
||||
tests("#get_key_pair(#{@key_pair_name})").formats({'keypair' => @keypair_format}) do
|
||||
service.get_key_pair(@key_pair_name).body
|
||||
end
|
||||
|
||||
tests("#delete_key_pair('#{@key_pair_name}')").succeeds do
|
||||
service.delete_key_pair(@key_pair_name)
|
||||
end
|
||||
|
||||
tests("#create_key_pair('fog_import_key_pair', '#{@public_key_material}')").formats({'keypair' => @keypair_format.merge({'user_id' => String})}) do
|
||||
service.create_key_pair('fog_import_key_pair', @public_key_material).body
|
||||
end
|
||||
|
||||
tests("#delete_key_pair('fog_import_key_pair)").succeeds do
|
||||
service.delete_key_pair('fog_import_key_pair')
|
||||
end
|
||||
|
||||
end
|
||||
tests('failure') do
|
||||
|
||||
tests("#get_key_pair('not_a_key_name')").raises(Fog::Compute::HPV2::NotFound) do
|
||||
service.get_key_pair('not_a_key_name')
|
||||
end
|
||||
|
||||
tests("#delete_key_pair('not_a_key_name')").raises(Fog::Compute::HPV2::NotFound) do
|
||||
service.delete_key_pair('not_a_key_name')
|
||||
end
|
||||
end
|
||||
|
||||
end
|
Loading…
Reference in New Issue