Parent

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 90
def initialize(options={})
  require 'fog/core/parser'

  @use_iam_profile = options[:use_iam_profile]
  setup_credentials(options)
  @connection_options     = options[:connection_options] || {}
  @host       = options[:host]        || 'route53.amazonaws.com'
  @path       = options[:path]        || '/'
  @persistent = options.fetch(:persistent, true)
  @port       = options[:port]        || 443
  @scheme     = options[:scheme]      || 'https'
  @version    = options[:version]     || '2012-02-29'

  @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 docs.amazonwebservices.com/Route53/latest/DeveloperGuide/RRSchanges.html#RRSchanges_API

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> - Time-to-live value - omit if using an alias record

      • resource_records<~Array> - Omit if using an alias record

      • alias_target<~Hash> - Information about the domain to which you are redirecting traffic (Alias record sets only)

        • dns_name<~String> - The Elastic Load Balancing domain to which you want to reroute traffic

        • hosted_zone_id<~String> - The ID of the hosted zone that contains the Elastic Load Balancing domain to which you want to reroute traffic

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> - 200 when successful

Examples

Example changing a CNAME record:

change_batch_options = [
  {
    :action => "DELETE",
    :name => "foo.example.com.",
    :type => "CNAME",
    :ttl => 3600,
    :resource_records => [ "baz.example.com." ]
  },
  {
    :action => "CREATE",
    :name => "foo.example.com.",
    :type => "CNAME",
    :ttl => 3600,
    :resource_records => [ "bar.example.com." ]
  }
]

change_resource_record_sets("ABCDEFGHIJKLMN", change_batch_options)
# File lib/fog/aws/requests/dns/change_resource_record_sets.rb, line 57
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 do |option, value|
    case option
    when :comment
      optional_tags += "<Comment>#{value}</Comment>"
    end
  end

  #build XML
  if change_batch.count > 0

    changes = "<ChangeBatch>#{optional_tags}<Changes>"

    change_batch.each do |change_item|
      action_tag = %{<Action>#{change_item[:action]}</Action>}
      name_tag   = %{<Name>#{change_item[:name]}</Name>}
      type_tag   = %{<Type>#{change_item[:type]}</Type>}

      # TTL must be omitted if using an alias record
      ttl_tag = ''
      ttl_tag += %{<TTL>#{change_item[:ttl]}</TTL>} unless change_item[:alias_target]

      weight_tag = ''
      set_identifier_tag = ''
      region_tag = ''
      if change_item[:set_identifier]
        set_identifier_tag += %{<SetIdentifier>#{change_item[:set_identifier]}</SetIdentifier>}
        if change_item[:weight] # Weighted Record
          weight_tag += %{<Weight>#{change_item[:weight]}</Weight>}
        elsif change_item[:region] # Latency record
          region_tag += %{<Region>#{change_item[:region]}</Region>}
        end
      end
      resource_records = change_item[:resource_records] || []
      resource_record_tags = ''
      resource_records.each do |record|
        resource_record_tags += %{<ResourceRecord><Value>#{record}</Value></ResourceRecord>}
      end

      # ResourceRecords must be omitted if using an alias record
      resource_tag = ''
      resource_tag += %{<ResourceRecords>#{resource_record_tags}</ResourceRecords>} if resource_records.any?

      alias_target_tag = ''
      if change_item[:alias_target]
        # Accept either underscore or camel case for hash keys.
        dns_name = change_item[:alias_target][:dns_name] || change_item[:alias_target][:DNSName]
        hosted_zone_id = change_item[:alias_target][:hosted_zone_id] || change_item[:alias_target][:HostedZoneId] || AWS.hosted_zone_for_alias_target(dns_name)
        alias_target_tag += %{<AliasTarget><HostedZoneId>#{hosted_zone_id}</HostedZoneId><DNSName>#{dns_name}</DNSName></AliasTarget>}
      end

      change_tags = %{<Change>#{action_tag}<ResourceRecordSet>#{name_tag}#{type_tag}#{set_identifier_tag}#{weight_tag}#{region_tag}#{ttl_tag}#{resource_tag}#{alias_target_tag}</ResourceRecordSet></Change>}
      changes += change_tags
    end

    changes += '</Changes></ChangeBatch>'
  end


  body = %{<?xml version="1.0" encoding="UTF-8"?><ChangeResourceRecordSetsRequest xmlns="https://route53.amazonaws.com/doc/#{@version}/">#{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<~String> -

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/#{@version}/"><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> - 200 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 do |option, value|
    case option
    when :marker
      parameters[option] = value
    when :max_items
      parameters[:maxitems] = value
    end
  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> -

    • identifier<~String> -

    • max_items<~Integer> -

Returns

  • response<~Excon::Response>:

    • body<~Hash>:

      • 'ResourceRecordSet'<~Array>:

        • 'Name'<~String> -

        • 'Type'<~String> -

        • 'TTL'<~Integer> -

        • 'AliasTarget'<~Hash> -

          • 'HostedZoneId'<~String> -

          • 'DNSName'<~String> -

        • 'ResourceRecords'<~Array>

          • 'Value'<~String> -

      • 'IsTruncated'<~String> -

      • 'MaxItems'<~String> -

      • 'NextRecordName'<~String>

      • 'NextRecordType'<~String>

      • 'NextRecordIdentifier'<~String>

    • status<~Integer> - 201 when successful

# File lib/fog/aws/requests/dns/list_resource_record_sets.rb, line 36
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 do |option, value|
    case option
    when :type, :name, :identifier
      parameters[option] = "#{value}"
    when :max_items
      parameters['maxitems'] = "#{value}"
    end
  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 106
def reload
  @connection.reset
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.