Class: Fog::DNS::AWS::Real
- Inherits:
-
Object
- Object
- Fog::DNS::AWS::Real
- Defined in:
- lib/fog/aws/dns.rb,
lib/fog/aws/requests/dns/get_change.rb,
lib/fog/aws/requests/dns/get_hosted_zone.rb,
lib/fog/aws/requests/dns/list_hosted_zones.rb,
lib/fog/aws/requests/dns/create_hosted_zone.rb,
lib/fog/aws/requests/dns/delete_hosted_zone.rb,
lib/fog/aws/requests/dns/list_resource_record_sets.rb,
lib/fog/aws/requests/dns/change_resource_record_sets.rb
Instance Method Summary collapse
-
#change_resource_record_sets(zone_id, change_batch, options = {}) ⇒ Object
Use this action to create or change your authoritative DNS information for a zone docs.amazonwebservices.com/Route53/latest/DeveloperGuide/RRSchanges.html#RRSchanges_API.
-
#create_hosted_zone(name, options = {}) ⇒ Object
Creates a new hosted zone.
-
#delete_hosted_zone(zone_id) ⇒ Object
Delete a hosted zone.
-
#get_change(change_id) ⇒ Object
returns the current state of a change request.
-
#get_hosted_zone(zone_id) ⇒ Object
retrieve information about a hosted zone.
-
#initialize(options = {}) ⇒ Real
constructor
Initialize connection to Route 53 DNS service.
-
#list_hosted_zones(options = {}) ⇒ Object
Describe all or specified instances.
-
#list_resource_record_sets(zone_id, options = {}) ⇒ Object
list your resource record sets.
- #reload ⇒ Object
Methods included from AWS::CredentialFetcher::ConnectionMethods
#refresh_credentials_if_expired
Constructor Details
#initialize(options = {}) ⇒ Real
Initialize connection to Route 53 DNS service
Notes
options parameter must include values for :aws_access_key_id and :aws_secret_access_key in order to create a connection
Examples
dns = Fog::AWS::DNS.new(
:aws_access_key_id => your_aws_access_key_id,
:aws_secret_access_key => your_aws_secret_access_key
)
Parameters
-
options<~Hash> - config arguments for connection. Defaults to {}.
Returns
-
dns object with connection to aws.
90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
# File 'lib/fog/aws/dns.rb', line 90 def initialize(={}) require 'fog/core/parser' @use_iam_profile = [:use_iam_profile] setup_credentials() @connection_options = [:connection_options] || {} @host = [:host] || 'route53.amazonaws.com' @path = [:path] || '/' @persistent = .fetch(:persistent, true) @port = [:port] || 443 @scheme = [:scheme] || 'https' @version = [:version] || '2012-02-29' @connection = Fog::Connection.new("#{@scheme}://#{@host}:#{@port}#{@path}", @persistent, @connection_options) end |
Instance Method Details
#change_resource_record_sets(zone_id, change_batch, options = {}) ⇒ Object
Use this action to create or change your authoritative DNS information for a zone docs.amazonwebservices.com/Route53/latest/DeveloperGuide/RRSchanges.html#RRSchanges_API
Parameters
-
zone_id<~String> - ID of the zone these changes apply to
-
options<~Hash>
-
comment<~String> - Any comments you want to include about the change.
-
-
change_batch<~Array> - The information for a change request
-
changes<~Hash> -
-
action<~String> - ‘CREATE’ or ‘DELETE’
-
name<~String> - This must be a fully-specified name, ending with a final period
-
type<~String> - A | AAAA | CNAME | MX | NS | PTR | SOA | SPF | SRV | TXT
-
ttl<~Integer> - Time-to-live value - omit if using an alias record
-
resource_records<~Array> - Omit if using an alias record
-
alias_target<~Hash> - Information about the domain to which you are redirecting traffic (Alias record sets only)
-
dns_name<~String> - The Elastic Load Balancing domain to which you want to reroute traffic
-
hosted_zone_id<~String> - The ID of the hosted zone that contains the Elastic Load Balancing domain to which you want to reroute traffic
-
-
-
Returns
-
response<~Excon::Response>:
-
body<~Hash>:
-
‘ChangeInfo’<~Hash>
-
‘Id’<~String> - The ID of the request
-
‘Status’<~String> - status of the request - PENDING | INSYNC
-
‘SubmittedAt’<~String> - The date and time the change was made
-
-
-
status<~Integer> - 200 when successful
-
Examples
Example changing a CNAME record:
= [
{
:action => "DELETE",
:name => "foo.example.com.",
:type => "CNAME",
:ttl => 3600,
:resource_records => [ "baz.example.com." ]
},
{
:action => "CREATE",
:name => "foo.example.com.",
:type => "CNAME",
:ttl => 3600,
:resource_records => [ "bar.example.com." ]
}
]
change_resource_record_sets("ABCDEFGHIJKLMN", )
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
# File 'lib/fog/aws/requests/dns/change_resource_record_sets.rb', line 57 def change_resource_record_sets(zone_id, change_batch, = {}) # 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/', '') = '' .each do |option, value| case option when :comment += "<Comment>#{value}</Comment>" end end #build XML if change_batch.count > 0 changes = "<ChangeBatch>#{}<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 resource_records = change_item[:resource_records] || [] = '' resource_records.each do |record| += %Q{<ResourceRecord><Value>#{record}</Value></ResourceRecord>} end # ResourceRecords must be omitted if using an alias record resource_tag = '' resource_tag += %Q{<ResourceRecords>#{}</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) alias_target_tag += %Q{<AliasTarget><HostedZoneId>#{hosted_zone_id}</HostedZoneId><DNSName>#{dns_name}</DNSName></AliasTarget>} end = %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 += end changes += '</Changes></ChangeBatch>' end 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, :expects => 200, :method => 'POST', :path => "hostedzone/#{zone_id}/rrset" }) end |
#create_hosted_zone(name, options = {}) ⇒ Object
Creates a new hosted zone
Parameters
-
name<~String> - The name of the domain. Must be a fully-specified domain that ends with a period
-
options<~Hash>
-
caller_ref<~String> - unique string that identifies the request & allows failed
calls to be retried without the risk of executing the operation twice
-
comment<~String> -
-
Returns
-
response<~Excon::Response>:
-
body<~Hash>:
-
‘HostedZone’<~Hash>:
-
‘Id’<~String> -
-
‘Name’<~String> -
-
‘CallerReference’<~String>
-
‘Comment’<~String> -
-
-
‘ChangeInfo’<~Hash> -
-
‘Id’<~String>
-
‘Status’<~String>
-
‘SubmittedAt’<~String>
-
-
‘NameServers’<~Array>
-
‘NameServer’<~String>
-
-
-
status<~Integer> - 201 when successful
-
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/fog/aws/requests/dns/create_hosted_zone.rb', line 32 def create_hosted_zone(name, = {}) = '' if [:caller_ref] += "<CallerReference>#{[:caller_ref]}</CallerReference>" else #make sure we have a unique call reference caller_ref = "ref-#{rand(1000000).to_s}" += "<CallerReference>#{caller_ref}</CallerReference>" end if [:comment] += "<HostedZoneConfig><Comment>#{[:comment]}</Comment></HostedZoneConfig>" end request({ :body => %Q{<?xml version="1.0" encoding="UTF-8"?><CreateHostedZoneRequest xmlns="https://route53.amazonaws.com/doc/#{@version}/"><Name>#{name}</Name>#{}</CreateHostedZoneRequest>}, :parser => Fog::Parsers::DNS::AWS::CreateHostedZone.new, :expects => 201, :method => 'POST', :path => "hostedzone" }) end |
#delete_hosted_zone(zone_id) ⇒ Object
Delete a hosted zone
Parameters
-
zone_id<~String> -
Returns
-
response<~Excon::Response>:
-
body<~Hash>:
-
‘ChangeInfo’<~Hash> -
-
‘Id’<~String> The ID of the request
-
‘Status’<~String> The current state of the hosted zone
-
‘SubmittedAt’<~String> The date and time the change was made
-
-
-
status<~Integer> - 200 when successful
-
21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/fog/aws/requests/dns/delete_hosted_zone.rb', line 21 def delete_hosted_zone(zone_id) # 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/', '') request({ :expects => 200, :parser => Fog::Parsers::DNS::AWS::DeleteHostedZone.new, :method => 'DELETE', :path => "hostedzone/#{zone_id}" }) end |
#get_change(change_id) ⇒ Object
returns the current state of a change request
Parameters
-
change_id<~String>
Returns
-
response<~Excon::Response>:
-
body<~Hash>:
-
‘Id’<~String>
-
‘Status’<~String>
-
‘SubmittedAt’<~String>
-
-
status<~Integer> - 200 when successful
-
20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/fog/aws/requests/dns/get_change.rb', line 20 def get_change(change_id) # AWS methods return change_ids that looks like '/change/id'. Let the caller either use # that form or just the actual id (which is what this request needs) change_id = change_id.sub('/change/', '') request({ :expects => 200, :parser => Fog::Parsers::DNS::AWS::GetChange.new, :method => 'GET', :path => "change/#{change_id}" }) end |
#get_hosted_zone(zone_id) ⇒ Object
retrieve information about a hosted zone
Parameters
-
zone_id<~String> - The ID of the hosted zone
Returns
-
response<~Excon::Response>:
-
body<~Hash>:
-
‘HostedZone’<~Hash>:
-
‘Id’<~String> -
-
‘Name’<~String> -
-
‘CallerReference’<~String>
-
‘Comment’<~String> -
-
-
‘NameServers’<~Array>
-
‘NameServer’<~String>
-
-
-
status<~Integer> - 200 when successful
-
24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/fog/aws/requests/dns/get_hosted_zone.rb', line 24 def get_hosted_zone(zone_id) # 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/', '') request({ :expects => 200, :parser => Fog::Parsers::DNS::AWS::GetHostedZone.new, :method => 'GET', :path => "hostedzone/#{zone_id}" }) end |
#list_hosted_zones(options = {}) ⇒ Object
Describe all or specified instances
Parameters
-
options<~Hash>
-
marker<~String> - Indicates where to begin in your list of hosted zones.
-
max_items<~Integer> - The maximum number of hosted zones to be included in the response body
-
Returns
-
response<~Excon::Response>:
-
body<~Hash>:
-
‘HostedZones’<~Array>:
-
‘HostedZone’<~Hash>:
-
‘Id’<~String> -
-
‘Name’<~String> -
-
‘CallerReference’<~String>
-
‘Comment’<~String> -
-
-
-
‘Marker’<~String> -
-
‘MaxItems’<~Integer> -
-
‘IsTruncated’<~String> -
-
‘NextMarket’<~String>
-
-
status<~Integer> - 200 when successful
-
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/fog/aws/requests/dns/list_hosted_zones.rb', line 29 def list_hosted_zones( = {}) parameters = {} .each do |option, value| case option when :marker parameters[option] = value when :max_items parameters[:maxitems] = value end end request({ :query => parameters, :parser => Fog::Parsers::DNS::AWS::ListHostedZones.new, :expects => 200, :method => 'GET', :path => "hostedzone" }) end |
#list_resource_record_sets(zone_id, options = {}) ⇒ Object
list your resource record sets
Parameters
-
zone_id<~String> -
-
options<~Hash>
-
type<~String> -
-
name<~String> -
-
identifier<~String> -
-
max_items<~Integer> -
-
Returns
-
response<~Excon::Response>:
-
body<~Hash>:
-
‘ResourceRecordSet’<~Array>:
-
‘Name’<~String> -
-
‘Type’<~String> -
-
‘TTL’<~Integer> -
-
‘AliasTarget’<~Hash> -
-
‘HostedZoneId’<~String> -
-
‘DNSName’<~String> -
-
-
‘ResourceRecords’<~Array>
-
‘Value’<~String> -
-
-
-
‘IsTruncated’<~String> -
-
‘MaxItems’<~String> -
-
‘NextRecordName’<~String>
-
‘NextRecordType’<~String>
-
‘NextRecordIdentifier’<~String>
-
-
status<~Integer> - 201 when successful
-
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/fog/aws/requests/dns/list_resource_record_sets.rb', line 36 def list_resource_record_sets(zone_id, = {}) # 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/', '') parameters = {} .each do |option, value| case option when :type, :name, :identifier parameters[option] = "#{value}" when :max_items parameters['maxitems'] = "#{value}" end end request({ :query => parameters, :parser => Fog::Parsers::DNS::AWS::ListResourceRecordSets.new, :expects => 200, :method => 'GET', :path => "hostedzone/#{zone_id}/rrset" }) end |
#reload ⇒ Object
106 107 108 |
# File 'lib/fog/aws/dns.rb', line 106 def reload @connection.reset end |