lib/rubber/dns/zerigo.rb in rubber-1.15.0 vs lib/rubber/dns/zerigo.rb in rubber-2.0.0.pre1

- old
+ new

@@ -1,115 +1,20 @@ require 'rubygems' +require 'fog' -begin - require 'zerigo_dns' -rescue LoadError - puts "Missing the zerigo_dns gem. Install with `sudo gem install zerigo_dns`." - raise -end - module Rubber module Dns - class Zerigo < Base + class Zerigo < Fog def initialize(env) - super(env, "zerigo") + super(env) - ::Zerigo::DNS::Base.user = provider_env.email - ::Zerigo::DNS::Base.password = provider_env.token + @client = Fog::DNS.new({ + :provider => 'zerigo', + :zerigo_email => provider_env.email, + :zerigo_token => provider_env.token + }) end - - def host_to_opts(host) - opts = {} - opts[:id] = host.id - opts[:host] = host.hostname || '' - opts[:type] = host.host_type - opts[:data] = host.data if host.data - opts[:ttl] = host.ttl if host.ttl - opts[:priority] = host.priority if host.priority - return opts - end - - def opts_to_host(opts, host={}) - host['hostname'] = opts[:host] - host['host_type'] = opts[:type] - host['data'] = opts[:data] if opts[:data] - host['ttl'] = opts[:ttl] if opts[:ttl] - host['priority'] = opts[:priority] if opts[:priority] - return host - end - - def find_hosts(opts = {}) - opts = setup_opts(opts, [:host, :domain]) - result = [] - zone = ::Zerigo::DNS::Zone.find_or_create(opts[:domain]) - params = { :zone_id => zone.id } - - hn = opts[:host] - ht = opts[:type] - hd = opts[:data] - has_host = hn && hn != '*' - if has_host - url = "" - url << "#{hn}." if hn.strip.size > 0 - url << "#{opts[:domain]}" - params[:fqdn] = url - end - - begin - hosts = ::Zerigo::DNS::Host.find(:all, :params=> params) - - hosts.each do |h| - keep = true - if ht && h.host_type != ht && ht != '*' - keep = false - end - if hd && h.data != hd - keep = false - end - result << h if keep - end if hosts - rescue ActiveResource::ResourceNotFound => e - end - - return result - end - - def find_host_records(opts = {}) - hosts = find_hosts(opts) - result = hosts.collect {|h| host_to_opts(h).merge(:domain => opts[:domain]) } - return result - end - - def create_host_record(opts = {}) - opts = setup_opts(opts, [:host, :data, :domain, :type, :ttl]) - zone = ::Zerigo::DNS::Zone.find_or_create(opts[:domain]) - ::Zerigo::DNS::Host.create(opts_to_host(opts).merge(:zone_id => zone.id)) - end - - def destroy_host_record(opts = {}) - opts = setup_opts(opts, [:host, :domain]) - zone = ::Zerigo::DNS::Zone.find_or_create(opts[:domain]) - - find_hosts(opts).each do |h| - h.destroy || raise("Failed to destroy #{h.hostname}") - end - end - - def update_host_record(old_opts={}, new_opts={}) - old_opts = setup_opts(old_opts, [:host, :domain]) - new_opts = setup_opts(new_opts, [:host, :domain, :type, :data]) - zone = ::Zerigo::DNS::Zone.find_or_create(old_opts[:domain]) - - find_hosts(old_opts).each do |h| - opts_to_host(new_opts).each do |k, v| - h.send("#{k}=", v) - end - h.save || raise("Failed to update host #{h.hostname}, #{h.errors.full_messages.join(', ')}") - end - end - - end end end