From 790454bf54237701ab93c2feb34aa4b545ed6281 Mon Sep 17 00:00:00 2001 From: "Stepan G. Fedorov" Date: Mon, 28 Nov 2011 00:01:56 +0400 Subject: [PATCH] [clodo|compute] Add ip-address management. --- .../clodo/requests/compute/add_ip_address.rb | 49 +++++++++++++++++++ .../requests/compute/delete_ip_address.rb | 47 ++++++++++++++++++ .../clodo/requests/compute/move_ip_address.rb | 33 +++++++++++++ 3 files changed, 129 insertions(+) create mode 100644 lib/fog/clodo/requests/compute/add_ip_address.rb create mode 100644 lib/fog/clodo/requests/compute/delete_ip_address.rb create mode 100644 lib/fog/clodo/requests/compute/move_ip_address.rb diff --git a/lib/fog/clodo/requests/compute/add_ip_address.rb b/lib/fog/clodo/requests/compute/add_ip_address.rb new file mode 100644 index 000000000..e2bb4966a --- /dev/null +++ b/lib/fog/clodo/requests/compute/add_ip_address.rb @@ -0,0 +1,49 @@ +module Fog + module Compute + class Clodo + class Real + + # Bye new IP-address for specified server + # ==== Paramaters + # * server_id<~Integer> - Id of server to bye IP for + # + # ==== Returns + # * response<~Excon::Response> + # + + def add_ip_address(server_id) + request( + :expects => [204], + :method => 'PUT', + :path => "servers/#{server_id}/ips" + ) + end + end + + class Mock + def add_ip_address(server_id) + + raise Excon::Errors::BadRequest.new( + "Invalid image ID" + ) unless server_id > 0 + + data = { + 'primary_ip' => false, + 'isp' => false, + 'ip' => "66.6.#{rand(255)}.#{rand(255)}" + } + + raise Excon::Errors::BadRequest unless self.data[:servers][server_id] + + raise Excon::Errors::BadRequest.new "No addresses" unless self.data[:servers][server_id]['addresses'] + + self.data[:servers][server_id]['addresses']['public'] << data + + response = Excon::Response.new + response.status = 204 + response + end + end + end + end +end diff --git a/lib/fog/clodo/requests/compute/delete_ip_address.rb b/lib/fog/clodo/requests/compute/delete_ip_address.rb new file mode 100644 index 000000000..d7ad21c70 --- /dev/null +++ b/lib/fog/clodo/requests/compute/delete_ip_address.rb @@ -0,0 +1,47 @@ +module Fog + module Compute + class Clodo + class Real + + # Delete IP-address from specified server + # ==== Paramaters + # * server_id<~Integer> - Id of server to delete IP from + # * ip<~String> - IP-address to delete + # + # ==== Returns + # * response<~Excon::Response> + # + + def delete_ip_address(server_id, ip) + data = {'ip' => ip} + + request( + :expects => [204], + :method => 'DELETE', + :path => "servers/#{server_id}/ips", + :body => MultiJson.encode(data) + ) + end + end + + class Mock + def delete_ip_address(server_id, ip) + + server = self.data[:servers][server_id] + + raise Excon::Errors::BadRequest.new "Server not found" unless server + + pa = server['addresses']['public'] + + raise Excon::Errors::BadRequest.new "Address not found" unless pa && pa.reject! {|addr| + addr['ip'] == ip + } + + response = Excon::Response.new + response.status = 204 + response + end + end + end + end +end diff --git a/lib/fog/clodo/requests/compute/move_ip_address.rb b/lib/fog/clodo/requests/compute/move_ip_address.rb new file mode 100644 index 000000000..4b4da96d6 --- /dev/null +++ b/lib/fog/clodo/requests/compute/move_ip_address.rb @@ -0,0 +1,33 @@ +module Fog + module Compute + class Clodo + class Real + + # Move IP-address to specified server. + # ==== Paramaters + # * server_id<~Integer> - Id of server to move IP to + # * ip<~String> - IP-address to move + # + # ==== Returns + # * response<~Excon::Response> + # + + def move_ip(server_id, ip) + request( + :expects => [200, 203], + :method => 'GET', + :path => "servers/#{server_id}/ips/moveip/#{ip}" + ) + end + end + + class Mock + def move_ip(server_id, ip) + response = Excon::Response.new + response.status = [200, 203][rand(1)] + response + end + end + end + end +end