class Fog::DNS::Rackspace::Real

Public Class Methods

new(options={}) click to toggle source
# File lib/fog/rackspace/dns.rb, line 92
def initialize(options={})
  @rackspace_api_key = options[:rackspace_api_key]
  @rackspace_username = options[:rackspace_username]
  @rackspace_auth_url = options[:rackspace_auth_url]
  @connection_options = options[:connection_options] || {}
  @rackspace_endpoint = Fog::Rackspace.normalize_url(options[:rackspace_dns_url] || options[:rackspace_dns_endpoint])
  @rackspace_region = options[:rackspace_region]

  authenticate

  deprecation_warnings(options)

  @persistent = options[:persistent] || false
  @connection = Fog::Connection.new(endpoint_uri.to_s, @persistent, @connection_options)
end

Public Instance Methods

add_records(domain_id, records) click to toggle source
# File lib/fog/rackspace/requests/dns/add_records.rb, line 5
def add_records(domain_id, records)

  validate_path_fragment :domain_id, domain_id

  data = {
    'records' => records.collect do |record|
      record_data = {
        'name' => record[:name],
        'type' => record[:type],
        'data' => record[:data]
      }
      
      if record.has_key? :ttl
        record_data['ttl'] = record[:ttl]
      end
      
      if record.has_key? :priority
        record_data['priority'] = record[:priority]
      end
      record_data
    end
  }

  request(
    :expects  => 202,
    :method   => 'POST',
    :path     => "domains/#{domain_id}/records",
    :body     => Fog::JSON.encode(data)
  )
end
callback(job_id, show_details=true) click to toggle source
# File lib/fog/rackspace/requests/dns/callback.rb, line 5
def callback(job_id, show_details=true)

  validate_path_fragment :job_id, job_id

  request(
    :expects  => [200, 202, 204],
    :method   => 'GET',
    :path     => "status/#{job_id}",
    :query    => "showDetails=#{show_details}"
  )
end
create_domains(domains) click to toggle source
# File lib/fog/rackspace/requests/dns/create_domains.rb, line 5
def create_domains(domains)
  data = {
    'domains' => []
  }

  domains.each do |domain|
    domain_data =
      {
        'name' => domain[:name],
        'emailAddress' => domain[:email]
      }

    if domain.has_key? :records
      domain_data['recordsList'] = {
        'records' => domain[:records].collect do |record|
          record_data = {
            'ttl' => record[:ttl],
            'data' => record[:data],
            'name' => record[:name],
            'type' => record[:type],
          }

          if record.has_key? :priority
            record_data.merge!({'priority' => record[:priority]})
          else
            record_data
          end
        end
      }
    end
    data['domains'] << domain_data
  end

  request(
    :expects  => 202,
    :method   => 'POST',
    :path     => 'domains',
    :body     => Fog::JSON.encode(data)
  )
end
endpoint_uri(service_endpoint_url=nil) click to toggle source
Calls superclass method Fog::Rackspace::Service#endpoint_uri
# File lib/fog/rackspace/dns.rb, line 108
def endpoint_uri(service_endpoint_url=nil)
  @uri = super(@rackspace_endpoint || service_endpoint_url, :rackspace_dns_url)
end
list_domain_details(domain_id, options={}) click to toggle source
# File lib/fog/rackspace/requests/dns/list_domain_details.rb, line 5
def list_domain_details(domain_id, options={})

  validate_path_fragment :domain_id, domain_id

  path = "domains/#{domain_id}"
  query_data = {}

  if options.has_key? :show_records
    query_data['showRecords'] = options[:show_records]
  end
  if options.has_key? :show_subdomains
    query_data['showSubdomains'] = options[:show_subdomains]
  end

  if !query_data.empty?
    path = path + '?' + array_to_query_string(query_data)
  end

  request(
    :expects  => 200,
    :method   => 'GET',
    :path     => path
  )
end
list_domains(options={}) click to toggle source
# File lib/fog/rackspace/requests/dns/list_domains.rb, line 5
def list_domains(options={})

  path = 'domains'
  unless options.empty?
    path += "?#{array_to_query_string(options)}"
  end

  request(
    :expects  => 200,
    :method   => 'GET',
    :path     => path
  )
end
list_record_details(domain_id, record_id) click to toggle source
# File lib/fog/rackspace/requests/dns/list_record_details.rb, line 5
def list_record_details(domain_id, record_id)

  validate_path_fragment :domain_id, domain_id
  validate_path_fragment :record_id, record_id

  path = "domains/#{domain_id}/records/#{record_id}"

  request(
    :expects  => 200,
    :method   => 'GET',
    :path     => path
  )
end
list_records(domain_id, options={}) click to toggle source
# File lib/fog/rackspace/requests/dns/list_records.rb, line 5
def list_records(domain_id, options={})

  validate_path_fragment :domain_id, domain_id

  path = "domains/#{domain_id}/records"
  if !options.empty?
    path = path + '?' + array_to_query_string(options)
  end

  request(
    :expects  => 200,
    :method   => 'GET',
    :path     => path
  )
end
list_subdomains(domain_id, options={}) click to toggle source
# File lib/fog/rackspace/requests/dns/list_subdomains.rb, line 5
def list_subdomains(domain_id, options={})

  validate_path_fragment :domain_id, domain_id

  path = "domains/#{domain_id}/subdomains"
  if !options.empty?
    path = path + '?' + array_to_query_string(options)
  end

  request(
    :expects  => 200,
    :method   => 'GET',
    :path     => path
  )
end
modify_domain(domain_id, options={}) click to toggle source
# File lib/fog/rackspace/requests/dns/modify_domain.rb, line 5
def modify_domain(domain_id, options={})

  validate_path_fragment :domain_id, domain_id

  path = "domains/#{domain_id}"
  data = {}

  if options.has_key? :ttl
    data['ttl'] = options[:ttl]
  end
  if options.has_key? :comment
    data['comment'] = options[:comment]
  end
  if options.has_key? :email
    data['emailAddress'] = options[:email]
  end

  if data.empty?
    return
  end

  request(
    :expects  => [202, 204],
    :method   => 'PUT',
    :path     => path,
    :body     => Fog::JSON.encode(data)
  )
end
modify_record(domain_id, record_id, options={}) click to toggle source
# File lib/fog/rackspace/requests/dns/modify_record.rb, line 5
def modify_record(domain_id, record_id, options={})

  validate_path_fragment :domain_id, domain_id
  validate_path_fragment :record_id, record_id

  path = "domains/#{domain_id}/records/#{record_id}"
  data = {}

  if options.has_key? :ttl
    data['ttl'] = options[:ttl]
  end
  if options.has_key? :name
    data['name'] = options[:name]
  end
  if options.has_key? :data
    data['data'] = options[:data]
  end

  if data.empty?
    return
  end

  request(
    :expects  => [202, 204],
    :method   => 'PUT',
    :path     => path,
    :body     => Fog::JSON.encode(data)
  )
end
region() click to toggle source
# File lib/fog/rackspace/dns.rb, line 87
def region
  #Note: DNS does not currently support multiple regions
  @rackspace_region
end
remove_domain(domain_id, options={}) click to toggle source
# File lib/fog/rackspace/requests/dns/remove_domain.rb, line 5
def remove_domain(domain_id, options={})

  validate_path_fragment :domain_id, domain_id

  path = "domains/#{domain_id}"
  query_data = {}

  if options.has_key? :delete_subdomains
    query_data['deleteSubdomains'] = options[:delete_subdomains].to_s
  end

  if !query_data.empty?
    path = path + '?' + array_to_query_string(query_data)
  end

  request(
    :expects  => [202, 204],
    :method   => 'DELETE',
    :path     => path
  )
end
remove_domains(domain_ids, options={}) click to toggle source
# File lib/fog/rackspace/requests/dns/remove_domains.rb, line 5
def remove_domains(domain_ids, options={})

  path = "domains?" + domain_ids.collect { |domain_id| "id=#{domain_id}" }.join('&')
  query_data = {}

  if options.has_key? :delete_subdomains
    query_data['deleteSubdomains'] = options[:delete_subdomains]
  end

  if !query_data.empty?
    path = path + '&' + array_to_query_string(query_data)
  end

  request(
    :expects  => [202, 204],
    :method   => 'DELETE',
    :path     => path
  )
end
remove_record(domain_id, record_id) click to toggle source
# File lib/fog/rackspace/requests/dns/remove_record.rb, line 5
def remove_record(domain_id, record_id)

  validate_path_fragment :domain_id, domain_id
  validate_path_fragment :record_id, record_id

  path = "domains/#{domain_id}/records/#{record_id}"

  request(
    :expects  => [202, 204],
    :method   => 'DELETE',
    :path     => path
  )
end
remove_records(domain_id, record_ids) click to toggle source
# File lib/fog/rackspace/requests/dns/remove_records.rb, line 5
def remove_records(domain_id, record_ids)

  validate_path_fragment :domain_id, domain_id

  path = "domains/#{domain_id}/records?" + record_ids.collect { |record_id| "id=#{record_id}" }.join('&')

  request(
    :expects  => [202, 204],
    :method   => 'DELETE',
    :path     => path
  )
end
service_name() click to toggle source
# File lib/fog/rackspace/dns.rb, line 83
def service_name
  :cloudDNS
end

Private Instance Methods

array_to_query_string(arr) click to toggle source
# File lib/fog/rackspace/dns.rb, line 132
def array_to_query_string(arr)
  return "" unless arr
  query_array = arr.collect do | k, v |
    val_str = v.is_a?(Array) ? v.join(",") : v.to_s
    "#{k}=#{val_str}"
  end

  query_array.join('&')
end
authenticate(options={}) click to toggle source
Calls superclass method Fog::Rackspace::Service#authenticate
# File lib/fog/rackspace/dns.rb, line 167
def authenticate(options={})
  super({
    :rackspace_api_key  => @rackspace_api_key,
    :rackspace_username => @rackspace_username,
    :rackspace_auth_url => @rackspace_auth_url,
    :connection_options => @connection_options
  })
end
authenticate_v1(options) click to toggle source
# File lib/fog/rackspace/dns.rb, line 161
def authenticate_v1(options)
  credentials = Fog::Rackspace.authenticate(options, @connection_options)
  setup_endpoint credentials
  @auth_token = credentials['X-Auth-Token']
end
deprecation_warnings(options) click to toggle source
# File lib/fog/rackspace/dns.rb, line 150
def deprecation_warnings(options)
  Fog::Logger.deprecation("The :rackspace_dns_endpoint option is deprecated. Please use :rackspace_dns_url for custom endpoints") if options[:rackspace_dns_endpoint]
end
request(params, parse_json = true, &block) click to toggle source
Calls superclass method Fog::Rackspace::Service#request
# File lib/fog/rackspace/dns.rb, line 114
def request(params, parse_json = true, &block)
  begin
    super(params, parse_json, &block)
  rescue Excon::Errors::NotFound => error
    raise NotFound.slurp(error, region)
  rescue Excon::Errors::BadRequest => error
    raise BadRequest.slurp error
  rescue Excon::Errors::InternalServerError => error
    raise InternalServerError.slurp error
  rescue Excon::Errors::ServiceUnavailable => error
    raise ServiceUnavailable.slurp error
  rescue Excon::Errors::Conflict => error
    raise Conflict.slurp error
  rescue Excon::Errors::HTTPStatusError => error
    raise ServiceError.slurp error
  end
end
setup_endpoint(credentials) click to toggle source
# File lib/fog/rackspace/dns.rb, line 154
def setup_endpoint(credentials)
  account_id = credentials['X-Server-Management-Url'].match(/.*\/([\d]+)$/)[1]

  @uri = URI.parse(@rackspace_endpoint || US_ENDPOINT)
  @uri.path = "#{@uri.path}/#{account_id}"
end
validate_path_fragment(name, fragment) click to toggle source
# File lib/fog/rackspace/dns.rb, line 142
def validate_path_fragment(name, fragment)
  if fragment.nil? or fragment.to_s.empty?
    raise ArgumentError.new("#{name} cannot be null or empty")
  end
end