1
0
Fork 0
mirror of https://github.com/fog/fog.git synced 2022-11-09 13:51:43 -05:00

[aws|dns] Support for latency/weighted resource sets.

Support for CRUD on latency/weighted resource sets for AWS Route 53.
Updated to latest API version.
This commit is contained in:
George Scott 2012-03-28 13:50:56 -07:00
parent 44e5166251
commit 27f3eda915
7 changed files with 31 additions and 13 deletions

View file

@ -89,7 +89,7 @@ module Fog
@persistent = options[:persistent] || true
@port = options[:port] || 443
@scheme = options[:scheme] || 'https'
@version = options[:version] || '2011-05-05'
@version = options[:version] || '2012-02-29'
@connection = Fog::Connection.new("#{@scheme}://#{@host}:#{@port}#{@path}", @persistent, @connection_options)
end

View file

@ -18,6 +18,9 @@ module Fog
attribute :created_at, :aliases => ['SubmittedAt']
attribute :alias_target, :aliases => ['AliasTarget']
attribute :change_id, :aliases => ['Id']
attribute :region, :aliases => ['Region']
attribute :weight, :aliases => ['Weight']
attribute :set_identifier,:aliases => ['SetIdentifier']
def initialize(attributes={})
self.ttl ||= 3600
@ -84,12 +87,15 @@ module Fog
requires :name, :ttl, :type, :zone
requires_one :value, :alias_target
{
:action => action,
:name => name,
:resource_records => [*value],
:alias_target => symbolize_keys(alias_target),
:ttl => ttl,
:type => type
:action => action,
:name => name,
:resource_records => [*value],
:alias_target => symbolize_keys(alias_target),
:ttl => ttl,
:type => type,
:weight => weight,
:set_identifier => set_identifier,
:region => region
}
end

View file

@ -33,7 +33,7 @@ module Fog
def get(record_id)
data = connection.get_change(record_id).body
new(data)
rescue Excon::Errors::Forbidden
rescue Excon::Errors::NotFound
nil
end

View file

@ -22,7 +22,7 @@ module Fog
def get(zone_id)
data = connection.get_hosted_zone(zone_id).body
new(data)
rescue Excon::Errors::Forbidden
rescue Excon::Errors::NotFound
nil
end

View file

@ -18,7 +18,7 @@ module Fog
def end_element(name)
if @section == :resource_record_set
case name
when 'Name', 'Type', 'TTL'
when 'Name', 'Type', 'TTL', 'SetIdentifier', 'Weight', 'Region'
@resource_record_set[name] = value
when 'Value'
@resource_record_set['ResourceRecords'] << value

View file

@ -58,6 +58,17 @@ module Fog
ttl_tag = ''
ttl_tag += %Q{<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 += %Q{<SetIdentifier>#{change_item[:set_identifier]}</SetIdentifier>}
if change_item[:weight] # Weighted Record
weight_tag += %Q{<Weight>#{change_item[:weight]}</Weight>}
elsif change_item[:region] # Latency record
region_tag += %Q{<Region>#{change_item[:region]}</Region>}
end
end
resource_records = change_item[:resource_records] || []
resource_record_tags = ''
resource_records.each do |record|
@ -76,14 +87,15 @@ module Fog
alias_target_tag += %Q{<AliasTarget><HostedZoneId>#{hosted_zone_id}</HostedZoneId><DNSName>#{dns_name}</DNSName></AliasTarget>}
end
change_tags = %Q{<Change>#{action_tag}<ResourceRecordSet>#{name_tag}#{type_tag}#{ttl_tag}#{resource_tag}#{alias_target_tag}</ResourceRecordSet></Change>}
change_tags = %Q{<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 = %Q{<?xml version="1.0" encoding="UTF-8"?><ChangeResourceRecordSetsRequest xmlns="https://route53.amazonaws.com/doc/2011-05-05/">#{changes}</ChangeResourceRecordSetsRequest>}
body = %Q{<?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,

View file

@ -44,7 +44,7 @@ module Fog
end
request({
:body => %Q{<?xml version="1.0" encoding="UTF-8"?><CreateHostedZoneRequest xmlns="https://route53.amazonaws.com/doc/2011-05-05/"><Name>#{name}</Name>#{optional_tags}</CreateHostedZoneRequest>},
:body => %Q{<?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',