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 @persistent = options[:persistent] || true
@port = options[:port] || 443 @port = options[:port] || 443
@scheme = options[:scheme] || 'https' @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) @connection = Fog::Connection.new("#{@scheme}://#{@host}:#{@port}#{@path}", @persistent, @connection_options)
end end

View file

@ -18,6 +18,9 @@ module Fog
attribute :created_at, :aliases => ['SubmittedAt'] attribute :created_at, :aliases => ['SubmittedAt']
attribute :alias_target, :aliases => ['AliasTarget'] attribute :alias_target, :aliases => ['AliasTarget']
attribute :change_id, :aliases => ['Id'] attribute :change_id, :aliases => ['Id']
attribute :region, :aliases => ['Region']
attribute :weight, :aliases => ['Weight']
attribute :set_identifier,:aliases => ['SetIdentifier']
def initialize(attributes={}) def initialize(attributes={})
self.ttl ||= 3600 self.ttl ||= 3600
@ -89,7 +92,10 @@ module Fog
:resource_records => [*value], :resource_records => [*value],
:alias_target => symbolize_keys(alias_target), :alias_target => symbolize_keys(alias_target),
:ttl => ttl, :ttl => ttl,
:type => type :type => type,
:weight => weight,
:set_identifier => set_identifier,
:region => region
} }
end end

View file

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

View file

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

View file

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

View file

@ -58,6 +58,17 @@ module Fog
ttl_tag = '' ttl_tag = ''
ttl_tag += %Q{<TTL>#{change_item[:ttl]}</TTL>} unless change_item[:alias_target] 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_records = change_item[:resource_records] || []
resource_record_tags = '' resource_record_tags = ''
resource_records.each do |record| 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>} alias_target_tag += %Q{<AliasTarget><HostedZoneId>#{hosted_zone_id}</HostedZoneId><DNSName>#{dns_name}</DNSName></AliasTarget>}
end 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 changes += change_tags
end end
changes += '</Changes></ChangeBatch>' changes += '</Changes></ChangeBatch>'
end 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({ request({
:body => body, :body => body,
:parser => Fog::Parsers::DNS::AWS::ChangeResourceRecordSets.new, :parser => Fog::Parsers::DNS::AWS::ChangeResourceRecordSets.new,

View file

@ -44,7 +44,7 @@ module Fog
end end
request({ 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, :parser => Fog::Parsers::DNS::AWS::CreateHostedZone.new,
:expects => 201, :expects => 201,
:method => 'POST', :method => 'POST',