Class: RightAws::Route53Interface

Inherits:
RightAwsBase show all
Includes:
RightAwsBaseInterface
Defined in:
lib/route_53/right_route_53_interface.rb

Overview

RightAws::Route53Interface – Amazon Route 53 web service interface.

The RightAws::Route53Interface class provides a complete interface to Amazon Route 53: a web service that enables you to manage your DNS service.

For explanations of the semantics of each call, please refer to Amazon’s documentation at aws.amazon.com/documentation/route53/

Examples:

# Create Route53 handler
r53 = RightAws::Route53Interface.new(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY)

#------------------------
# Create Hosted Zone
#------------------------

hosted_zone_config = {
  :name   => 'my-awesome-site.com.',
  :config => {
    :comment => 'My test site!'
   }
}
r53.create_hosted_zone(hosted_zone_config) #=>
  {:name_servers=>
    ["ns-1115.awsdns-11.org",
     "ns-696.awsdns-23.net",
     "ns-1963.awsdns-53.co.uk",
     "ns-362.awsdns-45.com"],
   :aws_id=>"/hostedzone/Z1K6NCF0EB26FB",
   :caller_reference=>"1295424990-710392-gqMuw-KcY8F-LFlrB-SQhp9",
   :config=>{:comment=>"My test site!"},
   :change_info=>
    {:status=>"PENDING",
     :aws_id=>"/change/C23QGMT8XTCAJY",
     :submitted_at=>"2011-01-19T08:16:31.046Z"},
   :name=>"my-awesome-site.com."}

# List Hosted Zones
r53.list_hosted_zones #=> []
  [{:aws_id=>"/hostedzone/Z1K6NCF0EB26FB",
    :caller_reference=>"1295424990-710392-gqMuw-KcY8F-LFlrB-SQhp9",
    :config=>{:comment=>"My test site!"},
    :name=>"my-awesome-site.com."}]

#--------------------------------
# Manage DNS Records and Changes
#--------------------------------

# Create DNS Records
resource_record_sets = [ { :name => 'www1.my-awesome-site.com.',
                           :type => 'NS',
                           :ttl => 600,
                           :resource_records => 'www.mysite.com' },
                         { :name => 'www2.my-awesome-site.com.',
                           :type => 'A',
                           :ttl => 600,
                           :resource_records => ['10.0.0.1'] } ]
r53.create_resource_record_sets("/hostedzone/Z1K6NCF0EB26FB", resource_record_sets, 'my first set of records') #=>
  { :status=>"PENDING",
    :aws_id=>"/change/C2C6IGNRTKA0AY",
    :submitted_at=>"2011-01-19T08:29:26.160Z" }

# Delete DNS records
r53.delete_resource_record_sets("/hostedzone/Z1K6NCF0EB26FB", resource_record_sets, 'I dont need them any more') #=>
  { :status=>"PENDING",
    :aws_id=>"/change/C1CYJ10EZBFLO7",
    :submitted_at=>"2011-01-19T08:26:41.220Z" }

# Create or delete DNS records (:action key must be provided):
resource_record_sets = [ { :action => :create,
                           :name => 'www1.my-awesome-site.com.',
                           :type => 'NS',
                           :ttl => 600,
                           :resource_records => 'www.mysite.com' },
                         { :action => :delete,
                           :name => 'www2.my-awesome-site.com.',
                           :type => 'A',
                           :ttl => 600,
                           :resource_records => ['10.0.0.1'] } ]
r53.change_resource_record_sets("/hostedzone/Z1K6NCF0EB26FB", resource_record_sets, 'do change records')
  { :status=>"PENDING",
    :aws_id=>"/change/C2PWXVECN794LK",
    :submitted_at=>"2011-01-19T08:31:33.301Z" }

# List DNS Records
r53.list_resource_record_sets("/hostedzone/Z1K6NCF0EB26FB") #=>
  [{:type=>"NS",
    :ttl=>172800,
    :resource_records=>
     ["ns-1115.awsdns-11.org.",
      "ns-696.awsdns-23.net.",
      "ns-1963.awsdns-53.co.uk.",
      "ns-362.awsdns-45.com."],
    :name=>"my-awesome-site.com."},
   {:type=>"SOA",
    :ttl=>900,
    :resource_records=>
     ["ns-1115.awsdns-11.org. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400"],
    :name=>"my-awesome-site.com."},
   {:type=>"NS",
    :ttl=>600,
    :resource_records=>["www.mysite.com"],
    :name=>"www1.my-awesome-site.com."}]

# Get Change info
r53.get_change("/change/C2C6IGNRTKA0AY")
  {:status=>"INSYNC",
   :aws_id=>"/change/C2C6IGNRTKA0AY",
   :submitted_at=>"2011-01-19T08:29:26.160Z"}

#------------------------
# Delete Hosted Zone
#------------------------

# Get a list of DNS records I have created (the first 2 records were added by Amazon and cannot be deleted)
resource_record_sets = r53.list_resource_record_sets("/hostedzone/Z1K6NCF0EB26FB")
resource_record_sets.shift
resource_record_sets.shift

# Delete them all
delete_resource_record_sets("/hostedzone/Z1K6NCF0EB26FB", resource_record_sets, 'kill all records I have created') #=>
  { :status=>"PENDING",
    :aws_id=>"/change/C6NCO8Z50MHXV",
    :submitted_at=>"2011-01-19T08:46:37.307Z" }

# Delete Hosted Zone
r53.delete_hosted_zone("/hostedzone/Z1K6NCF0EB26FB") #=> 
  { :status=>"PENDING",
    :aws_id=>"/change/C3OJ31D4V5P2LU",
    :submitted_at=>"2011-01-19T08:46:37.530Z" }

Defined Under Namespace

Classes: GetChangeParser, GetHostedZoneParser, ListHostedZonesParser, ListResourceRecordSetsParser

Constant Summary collapse

API_VERSION =
"2011-05-05"
DEFAULT_HOST =
"route53.amazonaws.com"
DEFAULT_PATH =
'/'
DEFAULT_PROTOCOL =
'https'
DEFAULT_PORT =
443
@@bench =
AwsBenchmarkingBlock.new

Constants included from RightAwsBaseInterface

RightAws::RightAwsBaseInterface::BLOCK_DEVICE_KEY_MAPPING, RightAws::RightAwsBaseInterface::DEFAULT_SIGNATURE_VERSION

Constants inherited from RightAwsBase

RightAws::RightAwsBase::AMAZON_PROBLEMS, RightAws::RightAwsBase::RAISE_ON_TIMEOUT_ON_ACTIONS

Instance Attribute Summary

Attributes included from RightAwsBaseInterface

#aws_access_key_id, #aws_secret_access_key, #cache, #connection, #last_errors, #last_request, #last_request_id, #last_response, #logger, #params, #signature_version

Class Method Summary collapse

Instance Method Summary collapse

Methods included from RightAwsBaseInterface

#amazonize_block_device_mappings, #amazonize_hash_with_key_mapping, #amazonize_list, #amazonize_list_with_key_mapping, #cache_hits?, caching, caching=, #caching?, #destroy_connection, #generate_request_impl, #get_connection, #get_connections_storage, #get_server_url, #incrementally_list_items, #init, #map_api_keys_and_values, #on_exception, #request_cache_or_info, #request_info_impl, #signed_service_params, #update_cache, #with_connection_options

Methods inherited from RightAwsBase

amazon_problems, amazon_problems=, raise_on_timeout_on_actions, raise_on_timeout_on_actions=

Constructor Details

#initialize(aws_access_key_id = nil, aws_secret_access_key = nil, params = {}) ⇒ Route53Interface

Create a new handle to an Route53 account. All handles share the same per process or per thread HTTP connection to Amazon Route53. Each handle is for a specific account. The params have the following options:

  • :endpoint_url a fully qualified url to Amazon API endpoint (this overwrites: :server, :port, :service, :protocol).

  • :server: Route53 service host, default: DEFAULT_HOST

  • :port: Route53 service port, default: DEFAULT_PORT

  • :protocol: ‘http’ or ‘https’, default: DEFAULT_PROTOCOL

  • :logger: for log messages, default: RAILS_DEFAULT_LOGGER else STDOUT

  • :signature_version: The signature version : ‘0’,‘1’ or ‘2’(default)



185
186
187
188
189
190
191
192
193
194
195
# File 'lib/route_53/right_route_53_interface.rb', line 185

def initialize(aws_access_key_id=nil, aws_secret_access_key=nil, params={})
  init({ :name                => 'ROUTE_53',
         :default_host        => ENV['ROUTE_53_URL'] ? URI.parse(ENV['ROUTE_53_URL']).host   : DEFAULT_HOST,
         :default_port        => ENV['ROUTE_53_URL'] ? URI.parse(ENV['ROUTE_53_URL']).port   : DEFAULT_PORT,
         :default_service     => ENV['ROUTE_53_URL'] ? URI.parse(ENV['ROUTE_53_URL']).path   : DEFAULT_PATH,
         :default_protocol    => ENV['ROUTE_53_URL'] ? URI.parse(ENV['ROUTE_53_URL']).scheme : DEFAULT_PROTOCOL,
         :default_api_version => ENV['ROUTE_53_API_VERSION'] || API_VERSION },
       aws_access_key_id    || ENV['AWS_ACCESS_KEY_ID'] ,
       aws_secret_access_key|| ENV['AWS_SECRET_ACCESS_KEY'],
       params)
end

Class Method Details

.bench_serviceObject



171
172
173
# File 'lib/route_53/right_route_53_interface.rb', line 171

def self.bench_service
  @@bench.service
end

.bench_xmlObject



168
169
170
# File 'lib/route_53/right_route_53_interface.rb', line 168

def self.bench_xml
  @@bench.xml
end

Instance Method Details

#change_resource_record_sets(hosted_zone_aws_id, resource_record_sets, comment = '') ⇒ Object

Create or delete DNS records.

resource_record_sets = [{ :action => :create,
                          :name => 'm3.mysite.patch-island.com',
                          :type => 'NS',
                          :ttl => 600,
                          :resource_records => 'xxx.mysite.com' },
                        { :action => :delete,
                          :name => 'm2.mysite.patch-island.com',
                          :type => 'A',
                          :ttl => 600,
                          :resource_records => ['10.0.0.1'] }]
r53.change_resource_record_sets("/hostedzone/Z1K6NCF0EB26FB", resource_record_sets, 'KD: Comment#1') #=>
  {:status=>"PENDING",
   :submitted_at=>"2011-01-18T20:21:56.828Z",
   :aws_id=>"/change/C394PNLM1B2P08"}

PS: resource_record_sets must have an :action key set (== :create or :delete) PPS: docs.amazonwebservices.com/Route53/latest/APIReference/API_ChangeResourceRecordSets.html



481
482
483
484
# File 'lib/route_53/right_route_53_interface.rb', line 481

def change_resource_record_sets(hosted_zone_aws_id, resource_record_sets, comment = '')
  link = generate_request('POST', "#{expand_hosted_zone_id(hosted_zone_aws_id)}/rrset", {}, resource_record_sets_to_xml(resource_record_sets, comment))
  request_info(link, GetChangeParser.new(:logger => @logger))
end

#create_hosted_zone(config) ⇒ Object

Create new hosted zone

config = {
  :name => 'mysite.patch-island.com.',
  :config => {
    :comment => 'My awesome site!'
   }
}
r53.create_hosted_zone(config) #=>
  {:config=>{:comment=>"My awesome site!"},
   :change_info=>
    {:status=>"PENDING",
     :aws_id=>"/change/C2NOTVGL7IOFFF",
     :submitted_at=>"2011-01-18T15:34:18.086Z"},
   :aws_id=>"/hostedzone/ZWEC7PPVACGQ4",
   :caller_reference=>"1295365357-227168-NfZ4P-VGHWi-Yq0p7-nuN6q",
   :name_servers=>
    ["ns-794.awsdns-35.net",
     "ns-459.awsdns-57.com",
     "ns-1537.awsdns-00.co.uk",
     "ns-1165.awsdns-17.org"],
   :name=>"mysite.patch-island.com."}

PS: docs.amazonwebservices.com/Route53/latest/APIReference/index.html?API_CreateHostedZone.html



383
384
385
386
387
# File 'lib/route_53/right_route_53_interface.rb', line 383

def create_hosted_zone(config)
  config[:caller_reference] ||= AwsUtils::generate_unique_token
  link = generate_request('POST', 'hostedzone', {}, hosted_zone_config_to_xml(config))
  request_info(link, GetHostedZoneParser.new(:logger => @logger))
end

#create_resource_record_sets(hosted_zone_aws_id, resource_record_sets, comment = '') ⇒ Object

Create DNS records.

resource_record_sets = [{ :name => 'm3.mysite.patch-island.com',
                          :type => 'NS',
                          :ttl => 600,
                          :resource_records => 'xxx.mysite.com' },
                        { :name => 'm2.mysite.patch-island.com',
                          :type => 'A',
                          :ttl => 600,
                          :resource_records => ['10.0.0.1'] }]
r53.create_resource_record_sets("/hostedzone/Z1K6NCF0EB26FB", resource_record_sets, 'KD: Comment#1') #=>
  {:status=>"PENDING",
   :submitted_at=>"2011-01-18T20:21:56.828Z",
   :aws_id=>"/change/C394PNLM1B2P08"}

PS: docs.amazonwebservices.com/Route53/latest/APIReference/API_ChangeResourceRecordSets.html



503
504
505
506
# File 'lib/route_53/right_route_53_interface.rb', line 503

def create_resource_record_sets(hosted_zone_aws_id, resource_record_sets, comment = '')
  resource_record_sets.each{|rrs| rrs[:action] = :create}
  change_resource_record_sets(hosted_zone_aws_id, resource_record_sets, comment)
end

#delete_hosted_zone(hosted_zone_aws_id) ⇒ Object

Delete hosted zone.

r53.delete_hosted_zone("/hostedzone/Z2P714ENJN23PN") #=>
  {:status=>"PENDING",
   :submitted_at=>"2011-01-18T15:45:45.060Z",
   :aws_id=>"/change/C1PN1SDWZKPTAC"}

PS: docs.amazonwebservices.com/Route53/latest/APIReference/API_DeleteHostedZone.html



418
419
420
421
# File 'lib/route_53/right_route_53_interface.rb', line 418

def delete_hosted_zone(hosted_zone_aws_id)
  link = generate_request('DELETE', expand_hosted_zone_id(hosted_zone_aws_id))
  request_info(link, GetChangeParser.new(:logger => @logger))
end

#delete_resource_record_sets(hosted_zone_aws_id, resource_record_sets, comment = '') ⇒ Object

Delete DNS records.

resource_record_sets = [{ :name => 'm3.mysite.patch-island.com',
                          :type => 'NS',
                          :ttl => 600,
                          :resource_records => 'xxx.mysite.com' },
                        { :name => 'm2.mysite.patch-island.com',
                          :type => 'A',
                          :ttl => 600,
                          :resource_records => ['10.0.0.1'] }]
r53.create_resource_record_sets("/hostedzone/Z1K6NCF0EB26FB", resource_record_sets, 'KD: Comment#1') #=>
  {:status=>"PENDING",
   :submitted_at=>"2011-01-18T20:21:56.828Z",
   :aws_id=>"/change/C394PNLM1B2P08"}

PS: docs.amazonwebservices.com/Route53/latest/APIReference/API_ChangeResourceRecordSets.html



525
526
527
528
# File 'lib/route_53/right_route_53_interface.rb', line 525

def delete_resource_record_sets(hosted_zone_aws_id, resource_record_sets, comment = '')
  resource_record_sets.each{|rrs| rrs[:action] = :delete}
  change_resource_record_sets(hosted_zone_aws_id, resource_record_sets, comment)
end

#expand_change_id(aws_id) ⇒ Object

:nodoc:



267
268
269
# File 'lib/route_53/right_route_53_interface.rb', line 267

def expand_change_id(aws_id) # :nodoc:
  aws_id[%r{^/change/}] ? aws_id : "/change/#{aws_id}"
end

#expand_hosted_zone_id(aws_id) ⇒ Object

:nodoc:



263
264
265
# File 'lib/route_53/right_route_53_interface.rb', line 263

def expand_hosted_zone_id(aws_id) # :nodoc:
  aws_id[%r{^/hostedzone/}] ? aws_id : "/hostedzone/#{aws_id}"
end

#generate_request(method, path, params = {}, body = nil, headers = {}) ⇒ Object

Generates request hash for REST API.



202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
# File 'lib/route_53/right_route_53_interface.rb', line 202

def generate_request(method, path, params={}, body=nil, headers={})  # :nodoc:
# Params
params.delete_if{ |key, val| val.right_blank? }
unless params.right_blank?
  path += "?" + params.to_a.collect{ |key,val| "#{AwsUtils::amz_escape(key)}=#{AwsUtils::amz_escape(val.to_s)}" }.join("&")
end
# Headers
headers = AwsUtils::fix_headers(headers)
headers['content-type'] ||= 'text/xml' if body
headers['date']           = Time.now.httpdate
# Auth
signature = AwsUtils::sign(@aws_secret_access_key, headers['date'])
headers['X-Amzn-Authorization'] = "AWS3-HTTPS AWSAccessKeyId=#{@aws_access_key_id},Algorithm=HmacSHA1,Signature=#{signature}"
# Request
path    = "#{@params[:service]}#{@params[:api_version]}/#{path}"
request = "Net::HTTP::#{method.capitalize}".right_constantize.new(path)
request.body = body if body
# Set request headers
headers.each { |key, value| request[key.to_s] = value }
# prepare output hash
{ :request  => request,
  :server   => @params[:server],
  :port     => @params[:port],
  :protocol => @params[:protocol] }
end

#get_change(change_aws_id) ⇒ Object

Get the current state of a change request.

r53.get_change("/change/C1PN1SDWZKPTAC") #=>
  {:status=>"INSYNC",
   :aws_id=>"/change/C1PN1SDWZKPTAC",
   :submitted_at=>"2011-01-18T15:45:45.060Z"}

PS: docs.amazonwebservices.com/Route53/latest/APIReference/API_GetChange.html



540
541
542
543
# File 'lib/route_53/right_route_53_interface.rb', line 540

def get_change(change_aws_id)
  link = generate_request('GET', expand_change_id(change_aws_id))
  request_info(link, GetChangeParser.new(:logger => @logger))
end

#get_hosted_zone(hosted_zone_aws_id) ⇒ Object

Get your hosted zone.

r53.get_hosted_zone("ZWEC7PPVACGQ4") #=>
  {:config=>{:comment=>"My awesome site!"},
   :aws_id=>"/hostedzone/ZWEC7PPVACGQ4",
   :caller_reference=>"1295422234-657482-hfkeo-JFKid-Ldfle-Sdrty",
   :name_servers=>
    ["ns-794.awsdns-35.net",
     "ns-459.awsdns-57.com",
     "ns-1537.awsdns-00.co.uk",
     "ns-1165.awsdns-17.org"],
   :name=>"mysite.patch-island.com."}

PS: docs.amazonwebservices.com/Route53/latest/APIReference/API_GetHostedZone.html



404
405
406
407
# File 'lib/route_53/right_route_53_interface.rb', line 404

def get_hosted_zone(hosted_zone_aws_id)
  link = generate_request('GET', expand_hosted_zone_id(hosted_zone_aws_id))
  request_info(link, GetHostedZoneParser.new(:logger => @logger))
end

#hosted_zone_config_to_xml(config) ⇒ Object

:nodoc:



271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
# File 'lib/route_53/right_route_53_interface.rb', line 271

def hosted_zone_config_to_xml(config) # :nodoc:
  config[:caller_reference] ||= AwsUtils::generate_call_reference
  hosted_zone_config = ''
  unless config[:config].right_blank?
    hosted_zone_config = "  <HostedZoneConfig>\n" +
                         "    <Comment>#{AwsUtils::xml_escape config[:config][:comment]}</Comment>\n" +
                         "  </HostedZoneConfig>\n"
  end
  # XML
  "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
  "<CreateHostedZoneRequest xmlns=\"https://#{@params[:server]}/doc/#{API_VERSION}/\">\n" +
  "  <Name>#{config[:name]}</Name>\n" +
  "  <CallerReference>#{config[:caller_reference]}</CallerReference>\n" +
  hosted_zone_config +
  "</CreateHostedZoneRequest>\n"
end

#incrementally_list_hosted_zones(path, parser, params = {}, &block) ⇒ Object

:nodoc:



234
235
236
237
238
239
240
241
242
243
244
245
246
# File 'lib/route_53/right_route_53_interface.rb', line 234

def incrementally_list_hosted_zones(path, parser, params={}, &block) # :nodoc:
  opts = {}
  opts['MaxItems'] = params[:max_items] if params[:max_items]
  opts['Marker']   = params[:marker]    if params[:marker]
  last_response = nil
  loop do
    link = generate_request('GET', path, opts)
    last_response = request_info(link,  parser.new(:logger => @logger))
    opts['Marker'] = last_response[:next_marker]
    break unless block && block.call(last_response) && !last_response[:next_marker].right_blank?
  end
  last_response
end

#incrementally_list_resource_records(path, parser, params = {}, &block) ⇒ Object

:nodoc:



248
249
250
251
252
253
254
255
256
257
258
259
260
261
# File 'lib/route_53/right_route_53_interface.rb', line 248

def incrementally_list_resource_records(path, parser, params={}, &block) # :nodoc:
  opts = {}
  opts[:maxitems] = params.delete(:max_items) if params[:max_items]
  last_response = nil
  loop do
    link = generate_request('GET', path, opts)
    last_response = request_info(link,  parser.new(:logger => @logger))
    opts[:maxitems] = last_response[:max_items]
    opts[:name]     = last_response[:next_record_name]
    opts[:type]     = last_response[:next_record_type]
    break unless block && block.call(last_response) && last_response[:is_truncated]
  end
  last_response
end

#list_hosted_zonesObject

List your hosted zones.

r53.list_hosted_zones #=>
  [{:config=>{:comment=>"KD1, description"},
    :aws_id=>"/hostedzone/Z2P714ENJN23PN",
    :caller_reference=>"1295424990-710392-gqMuw-KcY8F-LFlrB-SQhp9",
    :name=>"patch-island.com."},
   {:config=>{:comment=>"My awesome site!"},
    :aws_id=>"/hostedzone/ZWEC7PPVACGQ4",
    :caller_reference=>"1295422234-657482-hfkeo-JFKid-Ldfle-Sdrty",
    :name=>"mysite.patch-island.com."}, ...]

PS: docs.amazonwebservices.com/Route53/latest/APIReference/API_ListHostedZones.html



349
350
351
352
353
354
355
356
# File 'lib/route_53/right_route_53_interface.rb', line 349

def list_hosted_zones
  result = []
  incrementally_list_hosted_zones('hostedzone', ListHostedZonesParser) do |response|
    result += response[:items]
    true
  end
  result
end

#list_resource_record_sets(hosted_zone_aws_id, options = {}) ⇒ Object

List your resource record sets. Options: :type, :name, :max_items

r53.list_resource_record_sets("/hostedzone/ZWEC7PPVACGQ4") #=>
    [{:type=>"NS",
      :ttl=>172800,
      :name=>"mysite.patch-island.com.",
      :resource_records=>
       ["ns-459.awsdns-57.com.",
        "ns-794.awsdns-35.net.",
        "ns-1165.awsdns-17.org.",
        "ns-1537.awsdns-00.co.uk."]},
     {:type=>"SOA",
      :ttl=>900,
      :name=>"mysite.patch-island.com.",
      :resource_records=>
       ["ns-794.awsdns-35.net. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400"]},
     {:type=>"NS",
      :ttl=>600,
      :resource_records=>["xxx.mysite.com"],
      :name=>"m1.mysite.patch-island.com."}]

PS: docs.amazonwebservices.com/Route53/latest/APIReference/API_ListResourceRecordSets.html



451
452
453
454
455
456
457
458
459
# File 'lib/route_53/right_route_53_interface.rb', line 451

def list_resource_record_sets(hosted_zone_aws_id, options={})
  options = options.dup
  result = []
  incrementally_list_resource_records("#{expand_hosted_zone_id(hosted_zone_aws_id)}/rrset", ListResourceRecordSetsParser, options) do |response|
    result += response[:items]
    true
  end
  result
end

#request_info(request, parser, &block) ⇒ Object

Sends request to Amazon and parses the response. Raises AwsError if any banana happened.



230
231
232
# File 'lib/route_53/right_route_53_interface.rb', line 230

def request_info(request, parser, &block) # :nodoc:
  request_info_impl(:acf_connection, @@bench, request, parser, &block)
end

#resource_record_sets_to_xml(resource_record_changes, comment) ⇒ Object

:nodoc:



288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
# File 'lib/route_53/right_route_53_interface.rb', line 288

def resource_record_sets_to_xml(resource_record_changes, comment) # :nodoc:
  # Comment
  xml_comment = comment.right_blank? ? '' : "    <Comment>#{AwsUtils::xml_escape(comment)}</Comment>\n"
  # Changes
  xml_changes = ''
  resource_record_changes.each do |change|
    xml_resource_records = Array(change[:resource_records]).map{|record| "            <ResourceRecord><Value>#{AwsUtils::xml_escape(record)}</Value></ResourceRecord>\n" }.join('')
    xml_changes += "      <Change>\n"                                                                +
                   "        <Action>#{AwsUtils::xml_escape(change[:action].to_s.upcase)}</Action>\n" +
                   "        <ResourceRecordSet>\n"                                                   +
                   "          <Name>#{AwsUtils::xml_escape(change[:name])}</Name>\n"                 +
                   "          <Type>#{AwsUtils::xml_escape(change[:type].to_s.upcase)}</Type>\n"
    if change[:alias_target]
      alias_target = change[:alias_target]
      xml_changes +=
                   "          <AliasTarget>\n"                                                                              +
                   "            <HostedZoneId>#{AwsUtils::xml_escape(alias_target[:hosted_zone_id].to_s)}</HostedZoneId>\n" +
                   "            <DNSName>#{AwsUtils::xml_escape(alias_target[:dns_name].to_s)}</DNSName>\n"                 +
                   "          </AliasTarget>\n"
    else
      xml_changes +=
                   "          <TTL>#{AwsUtils::xml_escape(change[:ttl].to_s)}</TTL>\n"               +
                   "          <ResourceRecords>\n"                                                   +
                   xml_resource_records                                                              +
                   "          </ResourceRecords>\n"
    end
    xml_changes +=
                   "        </ResourceRecordSet>\n"                                                  +
                   "      </Change>\n"
  end
  # XML
  "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
  "<ChangeResourceRecordSetsRequest xmlns=\"https://#{@params[:server]}/doc/#{API_VERSION}/\">\n" +
  "  <ChangeBatch>\n"  +
  xml_comment          +
  "    <Changes>\n"    +
  xml_changes          +
  "    </Changes>\n"   +
  "  </ChangeBatch>\n" +
  "</ChangeResourceRecordSetsRequest>\n"
end