Class: ProviderDSL::Zone
- Inherits:
-
Object
- Object
- ProviderDSL::Zone
- Defined in:
- lib/provider_dsl/zone.rb
Overview
Manage a DNS zone
Instance Attribute Summary collapse
-
#records ⇒ Object
readonly
Returns the value of attribute records.
Instance Method Summary collapse
- #a(ip_addresses) ⇒ Object
- #aaaa(ip_addresses) ⇒ Object
- #changed? ⇒ Boolean
- #cname(value) ⇒ Object
- #create(&block) ⇒ Object
- #hash ⇒ Object
-
#initialize(original_records, parameters = {}) ⇒ Zone
constructor
A new instance of Zone.
- #mx(values) ⇒ Object
- #name(name = nil, &block) ⇒ Object
- #new_records ⇒ Object
- #removed_records ⇒ Object
- #to_s(prefix = '', suffix = '') ⇒ Object
- #ttl(ttl = 3600) ⇒ Object
- #txt(values) ⇒ Object
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
#records ⇒ Object (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
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 |
#hash ⇒ Object
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_records ⇒ Object
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_records ⇒ Object
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 |