fog/fog-terremark

View on GitHub
lib/fog/compute/terremark/requests/get_public_ips.rb

Summary

Maintainability
A
2 hrs
Test Coverage
module Fog
  module Compute
    class Terremark
      class Real
        # Get list of public ips
        #
        # ==== Parameters
        # * vdc_id<~Integer> - Id of vdc to find public ips for
        #
        # ==== Returns
        # * response<~Excon::Response>:
        #   * body<~Hash>:
        #     * "PublicIpAddresses"<~Array>
        #       * "href"<~String> - link to item
        #       * "name"<~String> - name of item
        def get_public_ips(vdc_id)
          opts = {
            :expects  => 200,
            :method   => "GET",
            :parser   => Fog::Parsers::Terremark::GetPublicIps.new,
            :path     => "vdc/#{vdc_id}/publicIps"
          }
          if self.class == Fog::Terremark::Ecloud::Real
            opts[:path] = "extensions/vdc/#{vdc_id}/publicIps"
          end
          request(opts)
        end
      end

      class Mock
        def get_public_ips(vdc_id)
          vdc_id = vdc_id.to_i
          response = Excon::Response.new

          vdc = self.data[:organizations].map { |org| org[:vdcs] }.flatten.find { |vdc| vdc[:id] == vdc_id }
          if vdc
            body = { "PublicIpAddresses" => [] }
            vdc[:public_ips].each do |ip|
              ip = { "name" => ip[:name],
                     "href" => case self
                               when Fog::Terremark::Ecloud::Mock
                                 "#{@base_url}/extensions/publicIp/#{ip[:id]}"
                               when Fog::Terremark::Vcloud::Mock
                                 "#{@base_url}/PublicIps/#{ip[:id]}"
                               end,
                     "id"   => ip[:id].to_s }
              body["PublicIpAddresses"] << ip
            end
            response.status = 200
            response.body = body
            response.headers = Fog::Compute::Terremark::Mock.headers(response.body,
                                                                    case self
                                                                    when Fog::Terremark::Ecloud::Mock
                                                                      "application/vnd.tmrk.ecloud.publicIpsList+xml"
                                                                    when Fog::Terremark::Vcloud::Mock
                                                                      "application/xml; charset=utf-8"
                                                                    end
            )
          else
            response.status = Fog::Compute::Terremark::Mock.unathorized_status
            response.headers = Fog::Compute::Terremark::Mock.error_headers
          end

          response
        end
      end
    end
  end
end