class Splicer::Dynect::Provider
@author Matthew A. Johnston <warmwaffles@gmail.com>
Attributes
client[R]
Public Class Methods
new(config)
click to toggle source
# File lib/splicer/dynect/provider.rb, line 8 def initialize(config) @client = Client.new(config.customer, config.username, config.password) end
Public Instance Methods
create_record_in_zone(record, zone)
click to toggle source
# File lib/splicer/dynect/provider.rb, line 62 def create_record_in_zone(record, zone) Splicer.logger.debug "[SPLICER][DYNECT] #create_record_in_zone record=#{record.inspect} zone=#{zone.inspect}" client.login begin get_zone(zone) rescue client.post "Zone/#{zone.name}", rname: "admin@#{zone.name}", ttl: zone.ttl end create_record(record, zone) publish_zone(zone) ensure client.logout end
create_zone(zone)
click to toggle source
# File lib/splicer/dynect/provider.rb, line 12 def create_zone(zone) Splicer.logger.debug "[SPLICER][DYNECT] #create_zone zone=#{zone.inspect}" client.login client.post "Zone/#{zone.name}", rname: "admin@#{zone.name}", ttl: zone.ttl zone.records.each do |record| create_record(record, zone) end publish_zone(zone) ensure client.logout end
delete_record_in_zone(record, zone)
click to toggle source
# File lib/splicer/dynect/provider.rb, line 40 def delete_record_in_zone(record, zone) Splicer.logger.debug "[SPLICER][DYNECT] #delete_record_in_zone record=#{record.inspect} zone=#{zone.inspect}" return false unless can_delete?(record) client.login id = find_record_id(record, zone) url = record_resource_url(record, zone).concat("/#{id}") client.delete(url) publish_zone(zone) ensure client.logout end
delete_zone(zone)
click to toggle source
# File lib/splicer/dynect/provider.rb, line 27 def delete_zone(zone) Splicer.logger.debug "[SPLICER][DYNECT] #delete_zone zone=#{zone.inspect}" client.login begin get_zone(zone) client.delete "Zone/#{zone.name}" rescue Splicer::Errors::RequestError => error Splicer.logger.debug "[SPLICER][DYNECT] response=#{error}" end ensure client.logout end
update_record_in_zone(record, zone)
click to toggle source
# File lib/splicer/dynect/provider.rb, line 52 def update_record_in_zone(record, zone) Splicer.logger.debug "[SPLICER][DYNECT] #update_record_in_zone record=#{record.inspect} zone=#{zone.inspect}" return false unless can_update?(record) client.login update_record(record, zone) publish_zone(zone) ensure client.logout end
Private Instance Methods
can_update?(record)
click to toggle source
TODO: Currently MX Record deleting/updating is not supported
# File lib/splicer/dynect/provider.rb, line 81 def can_update?(record) !record.is_a?(Splicer::Records::TXTRecord) && !record.is_a?(Splicer::Records::MXRecord) end
Also aliased as: can_delete?
create_record(record, zone)
click to toggle source
# File lib/splicer/dynect/provider.rb, line 136 def create_record(record, zone) client.post(record_resource_url(record, zone), record_payload(record)) end
find_record_id(record, zone)
click to toggle source
# File lib/splicer/dynect/provider.rb, line 95 def find_record_id(record, zone) resources = client.get(record_resource_url(record, zone)) if resources['data'].empty? raise Splicer::Errors::RequestError.new('record not found') else resources['data'].first.split('/').last end end
get_zone(zone)
click to toggle source
# File lib/splicer/dynect/provider.rb, line 87 def get_zone(zone) client.get "Zone/#{zone.name}" end
publish_zone(zone)
click to toggle source
# File lib/splicer/dynect/provider.rb, line 91 def publish_zone(zone) client.put "Zone/#{zone.name}", publish: true end
record_payload(record)
click to toggle source
Returns the proper record data for a specific record @param [Splicer::Records::Record] record @return [Hash]
# File lib/splicer/dynect/provider.rb, line 107 def record_payload(record) case record when Splicer::Records::ARecord { rdata: { address: record.ip }, ttl: record.ttl} when Splicer::Records::AAAARecord { rdata: { address: record.ip }, ttl: record.ttl} when Splicer::Records::CNAMERecord { rdata: { cname: record.cname }, ttl: record.ttl} when Splicer::Records::MXRecord { rdata: { exchange: record.exchanger, preference: record.priority }, ttl: record.ttl} when Splicer::Records::NSRecord { rdata: { nsdname: record.server }, ttl: record.ttl} when Splicer::Records::PTRRecord { rdata: { ptrdname: record.host }, ttl: record.ttl} when Splicer::Records::SPFRecord { rdata: { txtdata: record.text }, ttl: record.ttl} when Splicer::Records::SRVRecord { rdata: { port: record.port, priority: record.priority, target: record.target, weight: record.weight }, ttl: record.ttl} when Splicer::Records::TXTRecord { rdata: { txtdata: record.text }, ttl: record.ttl} else { } end end
record_resource_url(record, zone)
click to toggle source
# File lib/splicer/dynect/provider.rb, line 140 def record_resource_url(record, zone) resource = record.class.name.split('::').last if record.name.nil? "#{resource}/#{zone.name}/#{zone.name}" else "#{resource}/#{zone.name}/#{record.name}.#{zone.name}" end end
update_record(record, zone)
click to toggle source
# File lib/splicer/dynect/provider.rb, line 132 def update_record(record, zone) client.put(record_resource_url(record, zone), record_payload(record)) end