Class: Fog::DNS::AWS::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



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

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.



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

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.



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

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
  # Get first record
  data = data['ResourceRecordSets'].shift

  if data
    record = new(data)
    # make sure everything matches
    if record.name == record_name
      if (!record_type.nil? && record.type != record_type) ||
          (!record_identifier.nil? && record.set_identifier != record_identifier)
        nil
      else
        record
      end
    end
  else
    nil
  end
rescue Excon::Errors::NotFound
  nil
end

#new(attributes = {}) ⇒ Object



113
114
115
116
# File 'lib/fog/aws/models/dns/records.rb', line 113

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