From 67c679854f8708d9ada9d65b62b3810e97ae6c70 Mon Sep 17 00:00:00 2001 From: George Scott Date: Sat, 31 Mar 2012 10:13:53 -0700 Subject: [PATCH] [aws|dns] Reimplemented #get #get was not working correctly. It was not using the :identity attribute of the record as its argument, was calling #get_change which does not return a record. #get now takes a record name as its first argument and returns the first matching argument or nil. It also take two optional arguments, type and identifier, which allow one to select a specific record as needed, without iterating through multiple records. --- lib/fog/aws/models/dns/records.rb | 43 ++++++++++++++++++++++++++++--- 1 file changed, 40 insertions(+), 3 deletions(-) diff --git a/lib/fog/aws/models/dns/records.rb b/lib/fog/aws/models/dns/records.rb index 012f16047..52c2f0061 100644 --- a/lib/fog/aws/models/dns/records.rb +++ b/lib/fog/aws/models/dns/records.rb @@ -37,9 +37,46 @@ module Fog load(data) end - def get(record_id) - data = connection.get_change(record_id).body - new(data) + # + # AWS Route 53 records are uniquely identified by a compound key of name, type, and identifier. + # #get allows one to retrieve a record using one or more of those key components. + # + # ==== Parameters + # * record_name - The name of the record to retrieve. + # * record_type - The type of record to retrieve, if nil, then the first matching record is returned. + # * record_identifier - The record set identifier to retrieve, if nil, then the first matching record is returned. + # + def get(record_name, record_type = nil, record_identifier = nil) + requires :zone + # Append a trailing period to the record_name if absent. + record_name = record_name + "." unless record_name.end_with?(".") + record_type = record_type.upcase unless record_type.nil? + + options = { + :max_items => 1, + :name => record_name, + :type => record_type, + :identifier => record_identifier + } + + data = connection.list_resource_record_sets(zone.id, options).body + # Get first record + data = data['ResourceRecordSets'].shift + + if data + record = new(data) + # make sure everything matches + if record.name == record_name + if (!record_type.nil? && record.type != record_type) || + (!record_identifier.nil? && record.set_identifier != record_identifier) + nil + else + record + end + end + else + nil + end rescue Excon::Errors::NotFound nil end