Class: ProviderDSL::Zone

Inherits:
Object
  • Object
show all
Defined in:
lib/provider_dsl/zone.rb

Overview

Manage a DNS zone

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(original_records, parameters = {}) ⇒ Zone

Returns a new instance of Zone.



10
11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/provider_dsl/zone.rb', line 10

def initialize(original_records, parameters = {})
  @logger = Log.instance
  @original_records = original_records.map do |record|
    if record.is_a?(Hash)
      Record.new(record['name'], record['type'], record['value'], record['ttl'])
    else
      record
    end
  end
  @records = parameters[:inherit_records] ? @original_records.clone : []
  @names = []
  name
  ttl
end

Instance Attribute Details

#recordsObject (readonly)

Returns the value of attribute records.



8
9
10
# File 'lib/provider_dsl/zone.rb', line 8

def records
  @records
end

Instance Method Details

#a(ip_addresses) ⇒ Object



52
53
54
55
56
57
# File 'lib/provider_dsl/zone.rb', line 52

def a(ip_addresses)
  record('A', ip_addresses) do |ip_address|
    raise "#{ip_address} is not a valid IPv4 address" unless IPAddress.valid_ipv4?(ip_address)
    IPAddress(ip_address).octets.join('.')
  end
end

#aaaa(ip_addresses) ⇒ Object



45
46
47
48
49
50
# File 'lib/provider_dsl/zone.rb', line 45

def aaaa(ip_addresses)
  record('AAAA', ip_addresses) do |ip_address|
    raise "#{ip_address} is not a valid IPv6 address" unless IPAddress.valid_ipv6?(ip_address)
    IPAddress(ip_address).compressed
  end
end

#changed?Boolean

Returns:

  • (Boolean)


84
85
86
# File 'lib/provider_dsl/zone.rb', line 84

def changed?
  !(new_records + removed_records).count.zero?
end

#cname(value) ⇒ Object



59
60
61
62
63
64
65
66
# File 'lib/provider_dsl/zone.rb', line 59

def cname(value)
  value = String(value)
  raise "CNAME #{value} cannot be defined for a naked domain" if @name == '@'
  record('CNAME', value) do
    @records = records.select { |other| !(other.type == 'CNAME' && other.name == @name) }
    value
  end
end

#create(&block) ⇒ Object



25
26
27
# File 'lib/provider_dsl/zone.rb', line 25

def create(&block)
  instance_eval(&block)
end

#hashObject



92
93
94
# File 'lib/provider_dsl/zone.rb', line 92

def hash
  sorted_records.map(&:hash)
end

#mx(values) ⇒ Object



68
69
70
# File 'lib/provider_dsl/zone.rb', line 68

def mx(values)
  record('MX', values)
end

#name(name = nil, &block) ⇒ Object



29
30
31
32
33
34
35
36
37
38
39
# File 'lib/provider_dsl/zone.rb', line 29

def name(name = nil, &block)
  new_names = name.nil? ? @names : [name] + @names
  effective_name(new_names)
  if block_given?
    saved_names = @names
    @names = new_names
    instance_eval(&block)
    @names = saved_names
    effective_name(@names)
  end
end

#new_recordsObject



76
77
78
# File 'lib/provider_dsl/zone.rb', line 76

def new_records
  records.select { |record| @original_records.select { |original| original == record }.count.zero? }
end

#removed_recordsObject



80
81
82
# File 'lib/provider_dsl/zone.rb', line 80

def removed_records
  @original_records.select { |original| records.select { |record| original == record }.count.zero? }
end

#to_s(prefix = '', suffix = '') ⇒ Object



88
89
90
# File 'lib/provider_dsl/zone.rb', line 88

def to_s(prefix = '', suffix = '')
  "#{prefix}#{sorted_records.join("#{suffix}\n#{prefix}")}#{suffix}"
end

#ttl(ttl = 3600) ⇒ Object



41
42
43
# File 'lib/provider_dsl/zone.rb', line 41

def ttl(ttl = 3600)
  @ttl = ttl
end

#txt(values) ⇒ Object



72
73
74
# File 'lib/provider_dsl/zone.rb', line 72

def txt(values)
  record('TXT', values)
end