Parent

Files

Class/Module Index [+]

Quicksearch

Fog::DNS::AWS::Real

Public Class Methods

new(options={}) click to toggle source

Initialize connection to Route 53 DNS service

Notes

options parameter must include values for :aws_access_key_id and :aws_secret_access_key in order to create a connection

Examples

dns = Fog::AWS::DNS.new(
  :aws_access_key_id => your_aws_access_key_id,
  :aws_secret_access_key => your_aws_secret_access_key
)

Parameters

  • options<~Hash> - config arguments for connection. Defaults to {}.

Returns

  • dns object with connection to aws.

# File lib/fog/aws/dns.rb, line 80
def initialize(options={})
  require 'fog/core/parser'

  @aws_access_key_id      = options[:aws_access_key_id]
  @aws_secret_access_key  = options[:aws_secret_access_key]
  @connection_options     = options[:connection_options] || {}
  @hmac       = Fog::HMAC.new('sha1', @aws_secret_access_key)
  @host       = options[:host]        || 'route53.amazonaws.com'
  @path       = options[:path]        || '/'
  @persistent = options[:persistent]  || true
  @port       = options[:port]        || 443
  @scheme     = options[:scheme]      || 'https'
  @version    = options[:version]     || '2010-10-01'

  @connection = Fog::Connection.new("#{@scheme}://#{@host}:#{@port}#{@path}", @persistent, @connection_options)
end

Public Instance Methods

change_resource_record_sets(zone_id, change_batch, options = {}) click to toggle source

Use this action to create or change your authoritative DNS information for a zone

Parameters

  • zone_id<~String> - ID of the zone these changes apply to

  • options<~Hash>

    • comment<~String> - Any comments you want to include about the change.

    • change_batch<~Array> - The information for a change request

      • changes<~Hash> -

        • action<~String> - 'CREATE' or 'DELETE'

        • name<~String> - This must be a fully-specified name, ending with a final period

        • type<~String> - A | AAAA | CNAME | MX | NS | PTR | SOA | SPF | SRV | TXT

        • ttl<~Integer> -

        • resource_record<~String>

Returns

  • response<~Excon::Response>:

    • body<~Hash>:

      • 'ChangeInfo'<~Hash>

        • 'Id'<~String> - The ID of the request

        • 'Status'<~String> - status of the request - PENDING | INSYNC

        • 'SubmittedAt'<~String> - The date and time the change was made

    • status<~Integer> - 201 when successful

# File lib/fog/aws/requests/dns/change_resource_record_sets.rb, line 30
def change_resource_record_sets(zone_id, change_batch, options = {})

  # AWS methods return zone_ids that looks like '/hostedzone/id'.  Let the caller either use 
  # that form or just the actual id (which is what this request needs)
  zone_id = zone_id.sub('/hostedzone/', '')

  optional_tags = ''
  options.each { |option, value|
    case option
    when :comment
      optional_tags+= "<Comment>#{value}</Comment>"
    end
  }
  
  #build XML
  if change_batch.count > 0
    
    changes= "<ChangeBatch>#{optional_tags}<Changes>"
    
    change_batch.each { |change_item|
      action_tag = %{<Action>#{change_item[:action]}</Action>}
      name_tag = %{<Name>#{change_item[:name]}</Name>}
      type_tag = %{<Type>#{change_item[:type]}</Type>}
      ttl_tag = %{<TTL>#{change_item[:ttl]}</TTL>}
      resource_records= change_item[:resource_records]
      resource_record_tags = ''
      resource_records.each { |record|
        resource_record_tags+= %{<ResourceRecord><Value>#{record}</Value></ResourceRecord>}
      }
      resource_tag=  %{<ResourceRecords>#{resource_record_tags}</ResourceRecords>}
      
      change_tags = %{<Change>#{action_tag}<ResourceRecordSet>#{name_tag}#{type_tag}#{ttl_tag}#{resource_tag}</ResourceRecordSet></Change>}
      changes+= change_tags
    }          
    
    changes+= '</Changes></ChangeBatch>'
  end

  body =   %{<?xml version="1.0" encoding="UTF-8"?><ChangeResourceRecordSetsRequest xmlns="https://route53.amazonaws.com/doc/2010-10-01/">#{changes}</ChangeResourceRecordSetsRequest>}
  request({
    :body       => body,
    :parser     => Fog::Parsers::DNS::AWS::ChangeResourceRecordSets.new,
    :expects    => 200,
    :method     => 'POST',
    :path       => "hostedzone/#{zone_id}/rrset"
  })

end
create_hosted_zone(name, options = {}) click to toggle source

Creates a new hosted zone

Parameters

  • name<~String> - The name of the domain. Must be a fully-specified domain that ends with a period

  • options<~Hash>

    • caller_ref<~String> - unique string that identifies the request & allows failed

      calls to be retried without the risk of executing the operation twice
    • comment<~Integer> -

Returns

  • response<~Excon::Response>:

    • body<~Hash>:

      • 'HostedZone'<~Hash>:

        • 'Id'<~String> -

        • 'Name'<~String> -

        • 'CallerReference'<~String>

        • 'Comment'<~String> -

      • 'ChangeInfo'<~Hash> -

        • 'Id'<~String>

        • 'Status'<~String>

        • 'SubmittedAt'<~String>

      • 'NameServers'<~Array>

        • 'NameServer'<~String>

    • status<~Integer> - 201 when successful

# File lib/fog/aws/requests/dns/create_hosted_zone.rb, line 32
def create_hosted_zone(name, options = {})

  optional_tags = ''
  if options[:caller_ref]
      optional_tags+= "<CallerReference>#{options[:caller_ref]}</CallerReference>"
  else
    #make sure we have a unique call reference
    caller_ref = "ref-#{rand(1000000).to_s}"
    optional_tags+= "<CallerReference>#{caller_ref}</CallerReference>"
  end
  if options[:comment]
      optional_tags+= "<HostedZoneConfig><Comment>#{options[:comment]}</Comment></HostedZoneConfig>"
  end

  request({
    :body       => %{<?xml version="1.0" encoding="UTF-8"?><CreateHostedZoneRequest xmlns="https://route53.amazonaws.com/doc/2010-10-01/"><Name>#{name}</Name>#{optional_tags}</CreateHostedZoneRequest>},
    :parser     => Fog::Parsers::DNS::AWS::CreateHostedZone.new,
    :expects    => 201,
    :method     => 'POST',
    :path       => "hostedzone"
  })

end
delete_hosted_zone(zone_id) click to toggle source

Delete a hosted zone

Parameters

  • zone_id<~String> -

Returns

  • response<~Excon::Response>:

    • body<~Hash>:

      • 'ChangeInfo'<~Hash> -

        • 'Id'<~String> The ID of the request

        • 'Status'<~String> The current state of the hosted zone

        • 'SubmittedAt'<~String> The date and time the change was made

    • status<~Integer> - 200 when successful

# File lib/fog/aws/requests/dns/delete_hosted_zone.rb, line 21
def delete_hosted_zone(zone_id)

  # AWS methods return zone_ids that looks like '/hostedzone/id'.  Let the caller either use 
  # that form or just the actual id (which is what this request needs)
  zone_id = zone_id.sub('/hostedzone/', '')
  
  request({
    :expects    => 200,
    :parser     => Fog::Parsers::DNS::AWS::DeleteHostedZone.new,
    :method     => 'DELETE',
    :path       => "hostedzone/#{zone_id}"
  })

end
get_change(change_id) click to toggle source

returns the current state of a change request

Parameters

  • change_id<~String>

Returns

  • response<~Excon::Response>:

    • body<~Hash>:

      • 'Id'<~String>

      • 'Status'<~String>

      • 'SubmittedAt'<~String>

    • status<~Integer> - 200 when successful

# File lib/fog/aws/requests/dns/get_change.rb, line 20
def get_change(change_id)

  # AWS methods return change_ids that looks like '/change/id'.  Let the caller either use 
  # that form or just the actual id (which is what this request needs)
  change_id = change_id.sub('/change/', '')

  request({
    :expects    => 200,
    :parser     => Fog::Parsers::DNS::AWS::GetChange.new,
    :method     => 'GET',
    :path       => "change/#{change_id}"
  })

end
get_hosted_zone(zone_id) click to toggle source

retrieve information about a hosted zone

Parameters

  • zone_id<~String> - The ID of the hosted zone

Returns

  • response<~Excon::Response>:

    • body<~Hash>:

      • 'HostedZone'<~Hash>:

        • 'Id'<~String> -

        • 'Name'<~String> -

        • 'CallerReference'<~String>

        • 'Comment'<~String> -

      • 'NameServers'<~Array>

        • 'NameServer'<~String>

    • status<~Integer> - 201 when successful

# File lib/fog/aws/requests/dns/get_hosted_zone.rb, line 24
def get_hosted_zone(zone_id)

  # AWS methods return zone_ids that looks like '/hostedzone/id'.  Let the caller either use 
  # that form or just the actual id (which is what this request needs)
  zone_id = zone_id.sub('/hostedzone/', '')

  request({
    :expects    => 200,
    :parser     => Fog::Parsers::DNS::AWS::GetHostedZone.new,
    :method     => 'GET',
    :path       => "hostedzone/#{zone_id}"
  })

end
list_hosted_zones(options = {}) click to toggle source

Describe all or specified instances

Parameters

  • options<~Hash>

    • marker<~String> - Indicates where to begin in your list of hosted zones.

    • max_items<~Integer> - The maximum number of hosted zones to be included in the response body

Returns

  • response<~Excon::Response>:

    • body<~Hash>:

      • 'HostedZones'<~Array>:

        • 'HostedZone'<~Hash>:

          • 'Id'<~String> -

          • 'Name'<~String> -

          • 'CallerReference'<~String>

          • 'Comment'<~String> -

      • 'Marker'<~String> -

      • 'MaxItems'<~Integer> -

      • 'IsTruncated'<~String> -

      • 'NextMarket'<~String>

    • status<~Integer> - 200 when successful

# File lib/fog/aws/requests/dns/list_hosted_zones.rb, line 29
def list_hosted_zones(options = {})

  parameters = {}
  options.each { |option, value|
    case option
    when :marker
      parameters[option] = value
    when :max_items
      parameters[:maxitems] = value
    end
  }
  
  request({
    :query      => parameters,
    :parser     => Fog::Parsers::DNS::AWS::ListHostedZones.new,
    :expects    => 200,
    :method     => 'GET',
    :path       => "hostedzone"
  })

end
list_resource_record_sets(zone_id, options = {}) click to toggle source

list your resource record sets

Parameters

  • zone_id<~String> -

  • options<~Hash>

    • type<~String> -

    • name<~String> -

    • max_items<~Integer> -

Returns

  • response<~Excon::Response>:

    • body<~Hash>:

      • 'ResourceRecordSet'<~Array>:

        • 'Name'<~String> -

        • 'Type'<~String> -

        • 'TTL'<~Integer> -

        • 'ResourceRecords'<~Array>

          • 'Value'<~String> -

      • 'IsTruncated'<~String> -

      • 'MaxItems'<~String> -

      • 'NextRecordName'<~String>

      • 'NexRecordType'<~String>

    • status<~Integer> - 201 when successful

# File lib/fog/aws/requests/dns/list_resource_record_sets.rb, line 31
def list_resource_record_sets(zone_id, options = {})

  # AWS methods return zone_ids that looks like '/hostedzone/id'.  Let the caller either use 
  # that form or just the actual id (which is what this request needs)
  zone_id = zone_id.sub('/hostedzone/', '')

  parameters = {}
  options.each { |option, value|
    case option
    when :type, :name
      parameters[option]= "#{value}"
    when :max_items
      parameters['maxitems']= "#{value}"
    end
  }
  
  request({
    :query => parameters,
    :parser     => Fog::Parsers::DNS::AWS::ListResourceRecordSets.new,
    :expects    => 200,
    :method     => 'GET',
    :path       => "hostedzone/#{zone_id}/rrset"
  })

end
reload() click to toggle source
# File lib/fog/aws/dns.rb, line 97
def reload
  @connection.reset
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.