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/get_health_check.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_health_checks.rb,
lib/fog/aws/requests/dns/create_health_check.rb,
lib/fog/aws/requests/dns/delete_health_check.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_health_check(ip_address, port, type, options = {}) ⇒ Object
This action creates a new health check.
-
#create_hosted_zone(name, options = {}) ⇒ Object
Creates a new hosted zone.
-
#delete_health_check(id) ⇒ Object
This action deletes a health check.
-
#delete_hosted_zone(zone_id) ⇒ Object
Delete a hosted zone.
-
#get_change(change_id) ⇒ Object
returns the current state of a change request.
-
#get_health_check(id) ⇒ Object
This action gets information about a specified health check.
-
#get_hosted_zone(zone_id) ⇒ Object
retrieve information about a hosted zone.
-
#initialize(options = {}) ⇒ Real
constructor
Initialize connection to Route 53 DNS service.
-
#list_health_checks ⇒ Object
This action gets a list of the health checks that are associated with the current AWS account.
-
#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.
92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
# File 'lib/fog/aws/dns.rb', line 92 def initialize(={}) @use_iam_profile = [:use_iam_profile] setup_credentials() @instrumentor = [:instrumentor] @instrumentor_name = [:instrumentor_name] || 'fog.aws.dns' @connection_options = [:connection_options] || {} @host = [:host] || 'route53.amazonaws.com' @path = [:path] || '/' @persistent = .fetch(:persistent, true) @port = [:port] || 443 @scheme = [:scheme] || 'https' @version = [:version] || '2013-04-01' @connection = Fog::XML::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
-
weight<~Integer> - Time-to-live value - omit if using an alias record
-
set_identifier<~String> - An identifier that differentiates among multiple resource record sets that have the same combination of DNS name and type.
-
region<~String> - The Amazon EC2 region where the resource that is specified in this resource record set resides. (Latency only)
-
failover<~String> - To configure failover, you add the Failover element to two resource record sets. For one resource record set, you specify PRIMARY as the value for Failover; for the other resource record set, you specify SECONDARY.
-
geo_location<~String XML> - A complex type currently requiring XML that lets you control how Amazon Route 53 responds to DNS queries based on the geographic origin of the query.
-
health_check_id<~String> - If you want Amazon Route 53 to return this resource record set in response to a DNS query only when a health check is passing, include the HealthCheckId element and specify the ID of the applicable health check.
-
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
-
evaluate_target_health<~Boolean> - Applies only to alias, weighted alias, latency alias, and failover alias resource record sets: If you set the value of EvaluateTargetHealth to true, the alias resource record sets inherit the health of the referenced resource record sets.
-
-
-
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", )
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 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 |
# File 'lib/fog/aws/requests/dns/change_resource_record_sets.rb', line 63 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 failover_tag = if change_item[:failover] %Q{<Failover>#{change_item[:failover]}</Failover>} end geolocation_tag = if change_item[:geo_location] %Q{<GeoLocation>#{change_item[:geo_location]}</GeoLocation>} 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) 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 = %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 += 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_health_check(ip_address, port, type, options = {}) ⇒ Object
This action creates a new health check. docs.aws.amazon.com/Route53/latest/APIReference/API_CreateHealthCheck.html
Parameters (options as symbols Hash)
-
ip_address<~String> - (optional if fqdn) The IPv4 IP address of the endpoint on which you want Amazon Route 53 to perform health checks
-
port<~Integer> - The port on the endpoint on which you want Amazon Route 53 to perform health checks
-
type<~String> - HTTP | HTTPS | HTTP_STR_MATCH | HTTPS_STR_MATCH | TCP
-
resource_path<~Stringy> - (required for all types except TCP) The path that you want Amazon Route 53 to request when performing health checks. The path can be any value for which your endpoint will return an HTTP status code of 2xx or 3xx when the endpoint is healthy
-
fqdn<~String> - (optional if ip_address) The value that you want Amazon Route 53 to pass in the Host header in all health checks except TCP health checks
-
search_string<~String> - If the value of Type is HTTP_STR_MATCH or HTTP_STR_MATCH, the string that you want Amazon Route 53 to search for in the response body from the specified resource
-
request_interval<~String> - 10 | 30 (optional) The number of seconds between the time that Amazon Route 53 gets a response from your endpoint and the time that it sends the next health-check request
-
failure_threshold<~Integer> - 1-10 (optional) The number of consecutive health checks that an endpoint must pass or fail for Amazon Route 53 to change the current status of the endpoint from unhealthy to healthy or vice versa
Returns
-
response<~Excon::Response>:
-
body<~Hash>:
-
‘HealthCheck’<~Hash>
-
‘Id’<~String> - The ID of the request
-
‘CallerReference’<~String> - A unique string that identifies the request and that allows failed CreateHealthCheck requests to be retried without the risk of executing the operation twice.
-
‘HealthCheckConfig’<~Hash>
-
‘IPAddress’
-
‘Port’
-
‘Type’
-
‘ResourcePath’
-
‘FullyQualifiedDomainName’
-
‘RequestInterval’
-
‘FailureThreshold’
-
-
-
-
status<~Integer> - 201 when successful
-
35 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/create_health_check.rb', line 35 def create_health_check(ip_address, port, type, = {}) version = @version builder = Nokogiri::XML::Builder.new(:encoding => 'UTF-8') do CreateHealthCheckRequest(:xmlns => "https://route53.amazonaws.com/doc/#{version}/") do CallerReference [:caller_reference] || "#{Time.now.to_i.to_s}-#{SecureRandom.hex(6)}" HealthCheckConfig do IPAddress ip_address unless ip_address.nil? Port port Type type ResourcePath [:resource_path] if .has_key?(:resource_path) FullyQualifiedDomainName [:fqdn] if .has_key?(:fqdn) SearchString [:search_string] if .has_key?(:search_string) RequestInterval [:request_interval] if .has_key?(:request_interval) FailureThreshold [:failure_threshold] if .has_key?(:failure_threshold) end end end request({ :body => builder.to_xml.to_s, :expects => 201, :method => 'POST', :path => 'healthcheck', :parser => Fog::Parsers::DNS::AWS::HealthCheck.new }) 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
-
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/fog/aws/requests/dns/create_hosted_zone.rb', line 31 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_health_check(id) ⇒ Object
This action deletes a health check. docs.aws.amazon.com/Route53/latest/APIReference/API_DeleteHealthCheck.html
Parameters
-
id<~String> - Health check ID
Returns
-
response<~Excon::Response>:
-
status<~Integer> - 200 when successful
-
14 15 16 17 18 19 20 |
# File 'lib/fog/aws/requests/dns/delete_health_check.rb', line 14 def delete_health_check(id) request({ :expects => 200, :method => 'DELETE', :path => "healthcheck/#{id}" }) 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
-
20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/fog/aws/requests/dns/delete_hosted_zone.rb', line 20 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
-
19 20 21 22 23 24 25 26 27 28 29 30 |
# File 'lib/fog/aws/requests/dns/get_change.rb', line 19 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_health_check(id) ⇒ Object
This action gets information about a specified health check. docs.aws.amazon.com/Route53/latest/APIReference/API_GetHealthCheck.html
Parameters
-
id<~String> - The ID of the health check
Returns
-
response<~Excon::Response>:
-
body<~Hash>:
-
‘HealthCheck’<~Hash>:
-
‘Id’<~String> -
-
‘CallerReference’<~String>
-
‘HealthCheckConfig’<~Hash>:
-
‘IPAddress’<~String> -
-
‘Port’<~String> -
-
‘Type’<~String> -
-
‘ResourcePath’<~String> -
-
‘FullyQualifiedDomainName’<~String> -
-
‘SearchString’<~String> -
-
‘RequestInterval’<~Integer> -
-
‘FailureThreshold’<~String> -
-
-
‘HealthCheckVersion’<~Integer> -
-
-
-
status<~Integer> - 200 when successful
-
30 31 32 33 34 35 36 37 |
# File 'lib/fog/aws/requests/dns/get_health_check.rb', line 30 def get_health_check(id) request({ :expects => 200, :parser => Fog::Parsers::DNS::AWS::HealthCheck.new, :method => 'GET', :path => "healthcheck/#{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
-
23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/fog/aws/requests/dns/get_hosted_zone.rb', line 23 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_health_checks ⇒ Object
This action gets a list of the health checks that are associated with the current AWS account. docs.aws.amazon.com/Route53/latest/APIReference/API_ListHealthChecks.html
Returns
-
response<~Excon::Response>:
-
body<~Hash>:
-
‘HealthChecks’<~Array>:
-
‘HealthCheck’<~Hash>:
-
‘Id’<~String> -
-
‘CallerReference’<~String>
-
‘HealthCheckVersion’<~Integer> -
-
-
-
‘Marker’<~String> -
-
‘MaxItems’<~Integer> -
-
‘IsTruncated’<~String> -
-
‘NextMarker’<~String>
-
-
status<~Integer> - 200 when successful
-
24 25 26 27 28 29 30 31 |
# File 'lib/fog/aws/requests/dns/list_health_checks.rb', line 24 def list_health_checks request({ :expects => 200, :method => 'GET', :path => "healthcheck", :parser => Fog::Parsers::DNS::AWS::ListHealthChecks.new }) 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> -
-
‘NextMarker’<~String>
-
-
status<~Integer> - 200 when successful
-
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/fog/aws/requests/dns/list_hosted_zones.rb', line 28 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
-
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/fog/aws/requests/dns/list_resource_record_sets.rb', line 35 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
109 110 111 |
# File 'lib/fog/aws/dns.rb', line 109 def reload @connection.reset end |