Class: Fog::AWS::DNS::Records

Inherits:
Collection
  • Object
show all
Defined in:
lib/fog/aws/models/dns/records.rb

Instance Method Summary collapse

Instance Method Details

#all(options = {}) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/fog/aws/models/dns/records.rb', line 20

def all(options = {})
  requires :zone
  options[:max_items]  ||= max_items
  options[:name]       ||= zone.domain
  options[:type]       ||= type
  options[:identifier] ||= identifier
  options.delete_if {|key, value| value.nil?}

  data = service.list_resource_record_sets(zone.id, options).body
  # NextRecordIdentifier is completely absent instead of nil, so set to nil, or iteration breaks.
  data['NextRecordIdentifier'] = nil unless data.key?('NextRecordIdentifier')

  merge_attributes(data.reject {|key, value| !['IsTruncated', 'MaxItems', 'NextRecordName', 'NextRecordType', 'NextRecordIdentifier'].include?(key)})
  load(data['ResourceRecordSets'])
end

#all!Object

Load all zone records into the collection.



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/fog/aws/models/dns/records.rb', line 39

def all!
  data = []

  merge_attributes({'NextRecordName' => nil,
                    'NextRecordType' => nil,
                    'NextRecordIdentifier' => nil,
                    'IsTruncated' => nil})

  begin
    options = {
        :name => next_record_name,
        :type => next_record_type,
        :identifier => next_record_identifier
    }
    options.delete_if {|key, value| value.nil?}

    batch = service.list_resource_record_sets(zone.id, options).body
    # NextRecordIdentifier is completely absent instead of nil, so set to nil, or iteration breaks.
    batch['NextRecordIdentifier'] = nil unless batch.key?('NextRecordIdentifier')

    merge_attributes(batch.reject {|key, value| !['IsTruncated', 'MaxItems', 'NextRecordName', 'NextRecordType', 'NextRecordIdentifier'].include?(key)})

    data.concat(batch['ResourceRecordSets'])
  end while is_truncated

  load(data)
end

#get(record_name, record_type = nil, record_identifier = nil) ⇒ Object

AWS Route 53 records are uniquely identified by a compound key of name, type, and identifier. #get allows one to retrieve a record using one or more of those key components.

Parameters

  • record_name - The name of the record to retrieve.

  • record_type - The type of record to retrieve, if nil, then the first matching record is returned.

  • record_identifier - The record set identifier to retrieve, if nil, then the first matching record is returned.



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
# File 'lib/fog/aws/models/dns/records.rb', line 76

def get(record_name, record_type = nil, record_identifier = nil)
  requires :zone
  # Append a trailing period to the record_name if absent.
  record_name = record_name + "." unless record_name.end_with?(".")
  record_type = record_type.upcase unless record_type.nil?

  options = {
      :max_items  => 1,
      :name       => record_name,
      :type       => record_type,
      :identifier => record_identifier
  }
  options.delete_if {|key, value| value.nil?}

  data = service.list_resource_record_sets(zone.id, options).body

  # look for an exact match in the records
  (data['ResourceRecordSets'] || []).map do |record_data|
    record = new(record_data)

    if (record.name.casecmp(record_name) == 0) &&
        (record_type.nil? || (record.type == record_type)) &&
        (record_identifier.nil? || (record.set_identifier == record_identifier))
      record
    end
  end.compact.first
rescue Fog::AWS::DNS::NotFound
  nil
end

#new(attributes = {}) ⇒ Object



106
107
108
109
# File 'lib/fog/aws/models/dns/records.rb', line 106

def new(attributes = {})
  requires :zone
  super({ :zone => zone }.merge!(attributes))
end