class Fog::AWS::DNS
Public Class Methods
change_resource_record_sets_data(zone_id, change_batch, version, options = {})
click to toggle source
Returns the xml request for a given changeset
# File lib/fog/aws/dns.rb, line 218 def self.change_resource_record_sets_data(zone_id, change_batch, version, 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 = %Q{<Action>#{change_item[:action]}</Action>} name_tag = %Q{<Name>#{change_item[:name]}</Name>} type_tag = %Q{<Type>#{change_item[:type]}</Type>} # TTL must be omitted if using an alias record 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 failover_tag = if change_item[:failover] %Q{<Failover>#{change_item[:failover]}</Failover>} end geolocation_tag = if change_item[:geo_location] xml_geo = change_item[:geo_location].map { |k,v| "<#{k}>#{v}</#{k}>" }.join %Q{<GeoLocation>#{xml_geo}</GeoLocation>} end resource_records = change_item[:resource_records] || [] resource_record_tags = '' resource_records.each do |record| resource_record_tags += %Q{<ResourceRecord><Value>#{record}</Value></ResourceRecord>} end # ResourceRecords must be omitted if using an alias record resource_tag = '' resource_tag += %Q{<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) evaluate_target_health = change_item[:alias_target][:evaluate_target_health] || change_item[:alias_target][:EvaluateTargetHealth] || false evaluate_target_health_xml = !evaluate_target_health.nil? ? %Q{<EvaluateTargetHealth>#{evaluate_target_health}</EvaluateTargetHealth>} : '' alias_target_tag += %Q{<AliasTarget><HostedZoneId>#{hosted_zone_id}</HostedZoneId><DNSName>#{dns_name}</DNSName>#{evaluate_target_health_xml}</AliasTarget>} end health_check_id_tag = if change_item[:health_check_id] %Q{<HealthCheckId>#{change_item[:health_check_id]}</HealthCheckId>} end change_tags = %Q{<Change>#{action_tag}<ResourceRecordSet>#{name_tag}#{type_tag}#{set_identifier_tag}#{weight_tag}#{region_tag}#{failover_tag}#{geolocation_tag}#{ttl_tag}#{resource_tag}#{alias_target_tag}#{health_check_id_tag}</ResourceRecordSet></Change>} changes += change_tags end changes += '</Changes></ChangeBatch>' end %Q{<?xml version="1.0" encoding="UTF-8"?><ChangeResourceRecordSetsRequest xmlns="https://route53.amazonaws.com/doc/#{version}/">#{changes}</ChangeResourceRecordSetsRequest>} end
elb_dualstack_hosted_zone_mapping()
click to toggle source
See docs.aws.amazon.com/general/latest/gr/rande.html#elb_region This needs to be kept in sync manually sadly for now as seemingly this data is not available via an API
# File lib/fog/aws/dns.rb, line 196 def self.elb_dualstack_hosted_zone_mapping @elb_dualstack_hosted_zone_mapping ||= { "ap-northeast-1" => "Z14GRHDCWA56QT", "ap-northeast-2" => "ZWKZPGTI48KDX", "ap-northeast-3" => "Z5LXEXXYW11ES", "ap-south-1" => "ZP97RAFLXTNZK", "ap-southeast-1" => "Z1LMS91P8CMLE5", "ap-southeast-2" => "Z1GM3OXH4ZPM65", "ca-central-1" => "ZQSVJUPU6J1EY", "eu-central-1" => "Z215JYRZR1TBD5", "eu-west-1" => "Z32O12XQLNTSW2", "eu-west-2" => "ZHURV8PSTC4K8", "eu-west-3" => "Z3Q77PNBQS71R4", "us-east-1" => "Z35SXDOTRQ7X7K", "us-east-2" => "Z3AADJGX6KTTL2", "us-west-1" => "Z368ELLRRE2KJ0", "us-west-2" => "Z1H1FL5HABSF5", "sa-east-1" => "Z2P70J7HTTTPLU", } end
elb_hosted_zone_mapping()
click to toggle source
# File lib/fog/aws/dns.rb, line 180 def self.elb_hosted_zone_mapping @elb_hosted_zone_mapping ||= { "ap-northeast-1" => "Z2YN17T5R711GT", "ap-southeast-1" => "Z1WI8VXHPB1R38", "ap-southeast-2" => "Z2999QAZ9SRTIC", "eu-west-1" => "Z3NF1Z3NOM5OY2", "eu-central-1" => "Z215JYRZR1TBD5", "sa-east-1" => "Z2ES78Y61JGQKS", "us-east-1" => "Z3DZXE0Q79N41H", "us-west-1" => "Z1M58G0W56PQJA", "us-west-2" => "Z33MTJ483KN6FU", } end
hosted_zone_for_alias_target(dns_name)
click to toggle source
# File lib/fog/aws/dns.rb, line 168 def self.hosted_zone_for_alias_target(dns_name) hosted_zones = if dns_name.match(/^dualstack\./) elb_dualstack_hosted_zone_mapping else elb_hosted_zone_mapping end Hash[hosted_zones.select { |k, _| dns_name =~ /\A.+\.#{k}\.elb\.amazonaws\.com\.?\z/ }].values.last end