Class: Rubber::Dns::Dyndns
Instance Attribute Summary
Attributes inherited from Base
#env, #provider_env, #provider_name
Instance Method Summary collapse
- #create_host_record(opts = {}) ⇒ Object
- #destroy_host_record(opts = {}) ⇒ Object
- #find_host_records(opts = {}) ⇒ Object
-
#initialize(env) ⇒ Dyndns
constructor
A new instance of Dyndns.
-
#up_to_date(host, ip) ⇒ Object
def nameserver “ns1.mydyndns.org” end.
- #update_host_record(old_opts = {}, new_opts = {}) ⇒ Object
Methods inherited from Base
#destroy, #host_records_equal?, #setup_opts, #update
Constructor Details
#initialize(env) ⇒ Dyndns
Returns a new instance of Dyndns.
6 7 8 9 10 11 |
# File 'lib/rubber/dns/dyndns.rb', line 6 def initialize(env) super(env, 'dyndns') @user, @pass, @nameserver = provider_env.user, provider_env.password, provider_env.nameserver @update_url = provider_env.update_url || 'https://members.dyndns.org/nic/update?hostname=%host%&myip=%ip%' @update_url = @update_url.gsub(/%([^%]+)%/, '#{\1}') end |
Instance Method Details
#create_host_record(opts = {}) ⇒ Object
40 41 42 |
# File 'lib/rubber/dns/dyndns.rb', line 40 def create_host_record(opts={}) puts "WARNING: No create record available for dyndns, you need to do so manually" end |
#destroy_host_record(opts = {}) ⇒ Object
44 45 46 |
# File 'lib/rubber/dns/dyndns.rb', line 44 def destroy_host_record(opts={}) puts "WARNING: No destroy record available for dyndns, you need to do so manually" end |
#find_host_records(opts = {}) ⇒ Object
26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/rubber/dns/dyndns.rb', line 26 def find_host_records(opts={}) opts = setup_opts(opts, [:host, :domain]) hostname = "#{opts[:host]}.#{opts[:domain]}" begin Resolv::DNS.open(:nameserver => [@nameserver], :search => [], :ndots => 1) do |dns| r = dns.getresource(hostname, Resolv::DNS::Resource::IN::A) result = [{:host =>opts[:host], :data => r.address}] end rescue Exception => e puts "Rescue #{e} #{e.}" raise "Domain needs to exist in dyndns as an A record before record can be updated" end end |
#up_to_date(host, ip) ⇒ Object
def nameserver
"ns1.mydyndns.org"
end
17 18 19 20 21 22 23 24 |
# File 'lib/rubber/dns/dyndns.rb', line 17 def up_to_date(host, ip) # This queries dns server directly instead of using hosts file current_ip = nil Resolv::DNS.open(:nameserver => [@nameserver], :search => [], :ndots => 1) do |dns| current_ip = dns.getaddress("#{host}.#{provider_env.domain}").to_s rescue nil end return ip == current_ip end |
#update_host_record(old_opts = {}, new_opts = {}) ⇒ Object
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
# File 'lib/rubber/dns/dyndns.rb', line 48 def update_host_record(old_opts={}, new_opts={}) old_opts = setup_opts(old_opts, [:host, :domain]) host = "#{old_opts[:host]}.#{old_opts[:domain]}" ip = new_opts[:data] update_url = eval('%Q{' + @update_url + '}') # puts update_url # This header is required by dyndns.org headers = { "User-Agent" => "Capistrano - Rubber - 0.1" } uri = URI.parse(update_url) http = Net::HTTP.new(uri.host, uri.port) # switch on SSL http.use_ssl = true if uri.scheme == "https" # suppress verification warning http.verify_mode = OpenSSL::SSL::VERIFY_NONE req = Net::HTTP::Get.new(update_url.gsub(/.*:\/\/[^\/]*/, ''), headers) # authentication details req.basic_auth @user, @pass resp = http.request(req) # print out the response for the update puts "DynDNS Update result: #{resp.body}" end |