[hp|compute_v2] Fix mocks for server addresses. Fix create_server and server model to accept networks and availability zones params.

This commit is contained in:
Rupak Ganguly 2013-05-08 16:50:02 -04:00
parent 13e312116f
commit 36ec19f035
4 changed files with 37 additions and 15 deletions

View File

@ -28,6 +28,10 @@ module Fog
attribute :security_groups
attribute :config_drive
attribute :user_data_encoded
attribute :availability_zone, :aliases => 'OS-EXT-AZ:availability_zone'
attribute :power_state, :aliases => 'OS-EXT-STS:power_state'
attribute :task_state, :aliases => 'OS-EXT-STS:task_state'
attribute :vm_state, :aliases => 'OS-EXT-STS:vm_state'
# these are implemented as methods
attribute :image_id
attribute :flavor_id
@ -44,6 +48,7 @@ module Fog
self.min_count = attributes.delete(:min_count)
self.max_count = attributes.delete(:max_count)
#self.block_device_mapping = attributes.delete(:block_device_mapping)
self.networks = attributes.delete(:networks)
super
end
@ -167,6 +172,10 @@ module Fog
# @block_device_mapping = new_block_device_mapping
#end
def networks=(new_networks)
@networks = new_networks
end
def ready?
self.state == 'ACTIVE'
end
@ -233,7 +242,9 @@ module Fog
'key_name' => key_name,
'security_groups' => security_groups,
'config_drive' => config_drive,
'user_data' => user_data_encoded
'user_data' => user_data_encoded,
'availability_zone' => availability_zone,
'networks' => @networks
}
options = options.reject {|key, value| value.nil?}
# either create a regular server or a persistent server based on input

View File

@ -122,12 +122,20 @@ module Fog
if options['security_groups']
sec_group_name = options['security_groups'][0]
else
sec_group_name = "default"
sec_group_name = 'default'
end
# add the default network
addresses = {'hpcloud' => [{'version'=>4, 'addr'=>Fog::HP::Mock.ip_address}] }
if networks = options['networks']
networks.each do |_|
addresses["Network #{rand(100)}"] = [{'version'=>4, 'addr'=>Fog::HP::Mock.ip_address}]
end
end
id = Fog::HP::Mock.uuid.to_s
data = {
'addresses' => { "custom"=>[{"version"=>4, "addr"=>Fog::HP::Mock.ip_address}] },
'addresses' => addresses,
'flavor' => {"id"=>"#{flavor_id}", "links"=>[{"href"=>"http://nova1:8774/admin/flavors/#{flavor_id}", "rel"=>"bookmark"}]},
'id' => id,
'image' => {"id"=>"#{image_id}", "links"=>[{"href"=>"http://nova1:8774/admin/images/#{image_id}", "rel"=>"bookmark"}]},

View File

@ -7,17 +7,19 @@ module Fog
#
# ==== Parameters
# * 'server_id'<~String> - UUId of server to list addresses for
# * 'network_id'<~String> - UUId of the network to list addresses for
# * 'network_name'<~String> - Name of the network to list addresses for
#
# ==== Returns
# * response<~Excon::Response>:
# * body<~Hash>:
# * 'custom'<~Array> - IP addresses for the server, for the network. The network name can change based on setup.
def list_server_addresses_by_network(server_id, network_id)
# * 'version'<~Integer> - IP version, 4 or 6
# * 'addr'<~String> - IP address
def list_server_addresses_by_network(server_id, network_name)
request(
:expects => [200,203],
:method => 'GET',
:path => "servers/#{server_id}/ips/#{network_id}"
:path => "servers/#{server_id}/ips/#{Fog::HP.escape(network_name)}"
)
end
@ -25,12 +27,13 @@ module Fog
class Mock
def list_server_addresses_by_network(server_id, network_id)
def list_server_addresses_by_network(server_id, network_name)
response = Excon::Response.new
if server = list_servers_detail.body['servers'].detect {|_| _['id'] == server_id}
response.status = 200
# since we cannot get to networks from compute, just return all addresses
response.body = { 'addresses' => server['addresses'] }
# get the addresses for the network, which is 'custom' in case of mocks
address = server['addresses'].select { |key, _| key == network_name}
response.body = address
response
else
raise Fog::Compute::HPV2::NotFound

View File

@ -2,7 +2,7 @@ Shindo.tests("Fog::Compute::HPV2 | server address requests", ['hp', 'v2', 'compu
service = Fog::Compute.new(:provider => 'HP', :version => :v2)
@base_image_id = ENV["BASE_IMAGE_ID"] || "7f60b54c-cd15-433f-8bed-00acbcd25a17"
@base_image_id = ENV['BASE_IMAGE_ID'] || '7f60b54c-cd15-433f-8bed-00acbcd25a17'
tests('success') do
@server_name = 'fogaddresstests'
@ -19,12 +19,12 @@ Shindo.tests("Fog::Compute::HPV2 | server address requests", ['hp', 'v2', 'compu
end
# the network name is currently named 'private'
tests("#list_server_addresses(#{@server_id})").formats({'addresses' => {'custom' => [{'version' => Integer, 'addr' => String}]}}) do
tests("#list_server_addresses(#{@server_id})").formats({'addresses' => {'hpcloud' => [{'version' => Integer, 'addr' => String}]}}) do
service.list_server_addresses(@server_id).body
end
tests("#list_server_addresses_by_network(#{@server_id}, 'network_uuid')").formats({'addresses' => {'custom' => [{'version' => Integer, 'addr' => String}]}}) do
service.list_server_addresses_by_network(@server_id, 'network_uuid').body
tests("#list_server_addresses_by_network(#{@server_id}, 'network_name')").succeeds do
service.list_server_addresses_by_network(@server_id, 'network_name').body
end
service.delete_server(@server_id)
@ -37,8 +37,8 @@ Shindo.tests("Fog::Compute::HPV2 | server address requests", ['hp', 'v2', 'compu
service.list_server_addresses(0)
end
tests("#list_server_addresses_by_network(0, 'network_uuid')").raises(Fog::Compute::HPV2::NotFound) do
service.list_server_addresses_by_network(0, 'network_uuid')
tests("#list_server_addresses_by_network(0, 'network_name')").raises(Fog::Compute::HPV2::NotFound) do
service.list_server_addresses_by_network(0, 'network_name')
end
end