From d5740ab24dc10da02706e5d575b1f3a5e57879eb Mon Sep 17 00:00:00 2001 From: Joshua Gross Date: Fri, 17 Jan 2014 15:21:40 -0500 Subject: [PATCH 01/17] adding Rage4 module file --- lib/fog/rage4.rb | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 lib/fog/rage4.rb diff --git a/lib/fog/rage4.rb b/lib/fog/rage4.rb new file mode 100644 index 000000000..9444ee57d --- /dev/null +++ b/lib/fog/rage4.rb @@ -0,0 +1,11 @@ +require 'fog/core' + +module Fog + module Rage4 + + extend Fog::Provider + + service(:dns, 'rage4/dns', 'DNS') + + end +end From 341ccf56f349d008a42854dfb7edb9ca76fb2dba Mon Sep 17 00:00:00 2001 From: Joshua Gross Date: Tue, 21 Jan 2014 14:39:48 -0500 Subject: [PATCH 02/17] all request types support by the rage4 api without mocks or tests --- lib/fog.rb | 1 + lib/fog/bin.rb | 1 + lib/fog/bin/rage4.rb | 31 +++++ lib/fog/core/errors.rb | 2 + lib/fog/rage4/dns.rb | 110 ++++++++++++++++++ lib/fog/rage4/models/dns/record.rb | 66 +++++++++++ lib/fog/rage4/models/dns/records.rb | 38 ++++++ lib/fog/rage4/models/dns/zone.rb | 48 ++++++++ lib/fog/rage4/models/dns/zones.rb | 29 +++++ lib/fog/rage4/requests/dns/create_domain.rb | 30 +++++ .../requests/dns/create_domain_vanity.rb | 33 ++++++ lib/fog/rage4/requests/dns/create_record.rb | 65 +++++++++++ .../requests/dns/create_reverse_domain_4.rb | 32 +++++ .../requests/dns/create_reverse_domain_6.rb | 32 +++++ lib/fog/rage4/requests/dns/delete_domain.rb | 28 +++++ lib/fog/rage4/requests/dns/delete_record.rb | 28 +++++ .../rage4/requests/dns/export_zone_file.rb | 28 +++++ lib/fog/rage4/requests/dns/get_domain.rb | 44 +++++++ .../rage4/requests/dns/get_domain_by_name.rb | 44 +++++++ lib/fog/rage4/requests/dns/import_domain.rb | 29 +++++ lib/fog/rage4/requests/dns/list_domains.rb | 41 +++++++ .../rage4/requests/dns/list_geo_regions.rb | 25 ++++ .../rage4/requests/dns/list_record_types.rb | 25 ++++ lib/fog/rage4/requests/dns/list_records.rb | 44 +++++++ .../rage4/requests/dns/set_record_failover.rb | 29 +++++ .../rage4/requests/dns/show_current_usage.rb | 28 +++++ .../rage4/requests/dns/show_global_usage.rb | 23 ++++ lib/fog/rage4/requests/dns/sync_domain.rb | 29 +++++ lib/fog/rage4/requests/dns/update_domain.rb | 43 +++++++ lib/fog/rage4/requests/dns/update_record.rb | 64 ++++++++++ 30 files changed, 1070 insertions(+) create mode 100644 lib/fog/bin/rage4.rb create mode 100644 lib/fog/rage4/dns.rb create mode 100644 lib/fog/rage4/models/dns/record.rb create mode 100644 lib/fog/rage4/models/dns/records.rb create mode 100644 lib/fog/rage4/models/dns/zone.rb create mode 100644 lib/fog/rage4/models/dns/zones.rb create mode 100644 lib/fog/rage4/requests/dns/create_domain.rb create mode 100644 lib/fog/rage4/requests/dns/create_domain_vanity.rb create mode 100644 lib/fog/rage4/requests/dns/create_record.rb create mode 100644 lib/fog/rage4/requests/dns/create_reverse_domain_4.rb create mode 100644 lib/fog/rage4/requests/dns/create_reverse_domain_6.rb create mode 100644 lib/fog/rage4/requests/dns/delete_domain.rb create mode 100644 lib/fog/rage4/requests/dns/delete_record.rb create mode 100644 lib/fog/rage4/requests/dns/export_zone_file.rb create mode 100644 lib/fog/rage4/requests/dns/get_domain.rb create mode 100644 lib/fog/rage4/requests/dns/get_domain_by_name.rb create mode 100644 lib/fog/rage4/requests/dns/import_domain.rb create mode 100644 lib/fog/rage4/requests/dns/list_domains.rb create mode 100644 lib/fog/rage4/requests/dns/list_geo_regions.rb create mode 100644 lib/fog/rage4/requests/dns/list_record_types.rb create mode 100644 lib/fog/rage4/requests/dns/list_records.rb create mode 100644 lib/fog/rage4/requests/dns/set_record_failover.rb create mode 100644 lib/fog/rage4/requests/dns/show_current_usage.rb create mode 100644 lib/fog/rage4/requests/dns/show_global_usage.rb create mode 100644 lib/fog/rage4/requests/dns/sync_domain.rb create mode 100644 lib/fog/rage4/requests/dns/update_domain.rb create mode 100644 lib/fog/rage4/requests/dns/update_record.rb diff --git a/lib/fog.rb b/lib/fog.rb index 55df15726..3cc507221 100644 --- a/lib/fog.rb +++ b/lib/fog.rb @@ -30,6 +30,7 @@ require 'fog/local' require 'fog/bare_metal_cloud' require 'fog/ninefold' require 'fog/rackspace' +require 'fog/rage4' require 'fog/riakcs' require 'fog/openstack' require 'fog/ovirt' diff --git a/lib/fog/bin.rb b/lib/fog/bin.rb index 7ee63d118..c76716410 100644 --- a/lib/fog/bin.rb +++ b/lib/fog/bin.rb @@ -81,6 +81,7 @@ require 'fog/bin/local' require 'fog/bin/bare_metal_cloud' require 'fog/bin/ninefold' require 'fog/bin/rackspace' +require 'fog/bin/rage4' require 'fog/bin/riakcs' require 'fog/bin/openstack' require 'fog/bin/ovirt' diff --git a/lib/fog/bin/rage4.rb b/lib/fog/bin/rage4.rb new file mode 100644 index 000000000..0d78c9f5c --- /dev/null +++ b/lib/fog/bin/rage4.rb @@ -0,0 +1,31 @@ +class Rage4 < Fog::Bin + class << self + + def class_for(key) + case key + when :dns + Fog::DNS::Rage4 + else + raise ArgumentError, "Unrecognized service: #{key}" + end + end + + def [](service) + @@connections ||= Hash.new do |hash, key| + hash[key] = case key + when :dns + Fog::Logger.warning("Rage4[:dns] is not recommended, use DNS[:rage4] for portability") + Fog::DNS.new(:provider => 'Rage4') + else + raise ArgumentError, "Unrecognized service: #{key.inspect}" + end + end + @@connections[service] + end + + def services + Fog::Rage4.services + end + + end +end diff --git a/lib/fog/core/errors.rb b/lib/fog/core/errors.rb index fa2cb5c83..a4caf572f 100644 --- a/lib/fog/core/errors.rb +++ b/lib/fog/core/errors.rb @@ -74,6 +74,8 @@ An alternate file may be used by placing its path in the FOG_RC environment vari :rackspace_username: :rackspace_servicenet: :rackspace_cdn_ssl: + :rage4_email: + :rage4_password: :riakcs_access_key_id: :riakcs_secret_access_key: :stormondemand_username: diff --git a/lib/fog/rage4/dns.rb b/lib/fog/rage4/dns.rb new file mode 100644 index 000000000..b3d4dbd61 --- /dev/null +++ b/lib/fog/rage4/dns.rb @@ -0,0 +1,110 @@ +require 'fog/rage4' +require 'fog/dns' + +module Fog + module DNS + class Rage4 < Fog::Service + + requires :rage4_email, :rage4_api_key + recognizes :rage4_url, :host, :path, :port, :scheme, :persistent + + model_path 'fog/rage4/models/dns' + model :record + collection :records + model :zone + collection :zones + + request_path 'fog/rage4/requests/dns' + request :list_domains + request :get_domain + request :get_domain_by_name + request :create_domain + request :create_domain_vanity + request :create_reverse_domain_4 + request :create_reverse_domain_6 + request :update_domain + request :delete_domain + request :import_domain + request :sync_domain + + request :export_zone_file + request :show_current_usage + request :show_global_usage + request :list_record_types + request :list_geo_regions + request :list_records + + request :create_record + request :update_record + request :delete_record + request :set_record_failover + + class Mock + + def self.data + @data ||= Hash.new do |hash, key| + hash[key] = { + :domains => [], + :records => {} + } + end + end + + def self.reset + @data = nil + end + + def initialize(options={}) + @rage4_email = options[:rage4_email] + @rage4_password = options[:rage4_api_key] + end + + def data + self.class.data[@rage4_email] + end + + def reset_data + self.class.data.delete(@rage4_email) + end + + end + + class Real + + def initialize(options={}) + @rage4_email = options[:rage4_email] + @rage4_password = options[:rage4_api_key] + @connection_options = options[:connection_options] || {} + if options[:rage4_url] + uri = URI.parse(options[:rage4_url]) + options[:host] = uri.host + options[:port] = uri.port + options[:scheme] = uri.scheme + end + @host = options[:host] || "secure.rage4.com" + @persistent = options[:persistent] || false + @port = options[:port] || 443 + @scheme = options[:scheme] || 'https' + @connection = Fog::Connection.new("#{@scheme}://#{@host}:#{@port}", @persistent, @connection_options) + end + + def reload + @connection.reset + end + + def request(params) + params[:headers] ||= {} + key = "#{@rage4_email}:#{@rage4_password}" + params[:headers].merge!({ "Authorization" => "Basic " + Base64.encode64(key).gsub("\n",'')}) + + response = @connection.request(params) + + unless response.body.empty? + response.body = Fog::JSON.decode(response.body) + end + response + end + end + end + end +end diff --git a/lib/fog/rage4/models/dns/record.rb b/lib/fog/rage4/models/dns/record.rb new file mode 100644 index 000000000..97eb4947c --- /dev/null +++ b/lib/fog/rage4/models/dns/record.rb @@ -0,0 +1,66 @@ +require 'fog/core/model' + +module Fog + module DNS + class Rage4 + + class Record < Fog::Model + extend Fog::Deprecation + deprecate :ip, :value + deprecate :ip=, :value= + + identity :id + + attribute :name + attribute :value, :aliases => "content" + attribute :ttl + attribute :created_at + attribute :updated_at + attribute :zone_id, :aliases => "domain_id" + attribute :type, :aliases => "record_type" + attribute :priority, :aliases => "prio" + + def initialize(attributes={}) + super + end + + def destroy + service.delete_record(zone.id, identity) + true + end + + def zone + @zone + end + + def save + requires :name, :type, :value + options = {} + options[:prio] = priority if priority + options[:ttl] = ttl if ttl + + # decide whether its a new record or update of an existing + if id.nil? + data = service.create_record(zone.id, name, type, value, options) + else + options[:name] = name if name + options[:content] = value if value + options[:type] = type if type + data = service.update_record(zone.id, id, options) + end + + merge_attributes(data.body["record"]) + true + end + + private + + def zone=(new_zone) + @zone = new_zone + end + + end + + end + end +end diff --git a/lib/fog/rage4/models/dns/records.rb b/lib/fog/rage4/models/dns/records.rb new file mode 100644 index 000000000..78dcfa318 --- /dev/null +++ b/lib/fog/rage4/models/dns/records.rb @@ -0,0 +1,38 @@ +require 'fog/core/collection' +require 'fog/rage4/models/dns/record' + +module Fog + module DNS + class Rage4 + + class Records < Fog::Collection + + attribute :zone + + model Fog::DNS::Rage4::Record + + def all + requires :zone + clear + data = service.list_records(zone.id).body.map {|record| record['record']} + load(data) + end + + def get(record_id) + requires :zone + data = service.get_record(zone.id, record_id).body["record"] + new(data) + rescue Excon::Errors::NotFound + nil + end + + def new(attributes = {}) + requires :zone + super({ :zone => zone }.merge!(attributes)) + end + + end + + end + end +end diff --git a/lib/fog/rage4/models/dns/zone.rb b/lib/fog/rage4/models/dns/zone.rb new file mode 100644 index 000000000..8fe375f64 --- /dev/null +++ b/lib/fog/rage4/models/dns/zone.rb @@ -0,0 +1,48 @@ +require 'fog/core/model' +require 'fog/rage4/models/dns/records' + +module Fog + module DNS + class Rage4 + + class Zone < Fog::Model + + identity :id + + attribute :domain, :aliases => 'name' + attribute :created_at + attribute :updated_at + + def destroy + service.delete_domain(identity) + true + end + + def records + @records ||= begin + Fog::DNS::Rage4::Records.new( + :zone => self, + :service => service + ) + end + end + + def nameservers + [ + "ns1.r4ns.com", + "ns2.r4ns.com", + ] + end + + def save + requires :domain + data = service.create_domain(domain).body["domain"] + merge_attributes(data) + true + end + + end + + end + end +end diff --git a/lib/fog/rage4/models/dns/zones.rb b/lib/fog/rage4/models/dns/zones.rb new file mode 100644 index 000000000..b90d13746 --- /dev/null +++ b/lib/fog/rage4/models/dns/zones.rb @@ -0,0 +1,29 @@ +require 'fog/core/collection' +require 'fog/rage4/models/dns/zone' + +module Fog + module DNS + class Rage4 + + class Zones < Fog::Collection + + model Fog::DNS::Rage4::Zone + + def all + clear + data = service.list_domains.body.map {|zone| zone['domain']} + load(data) + end + + def get(zone_id) + data = service.get_domain(zone_id).body['domain'] + new(data) + rescue Excon::Errors::NotFound + nil + end + + end + + end + end +end diff --git a/lib/fog/rage4/requests/dns/create_domain.rb b/lib/fog/rage4/requests/dns/create_domain.rb new file mode 100644 index 000000000..c693173c5 --- /dev/null +++ b/lib/fog/rage4/requests/dns/create_domain.rb @@ -0,0 +1,30 @@ +module Fog + module DNS + class Rage4 + class Real + + # Create a domain. + # ==== Parameters + # * name<~String> - domain name + # + # ==== Returns + # * response<~Excon::Response>: + # * body<~Hash>: + # * 'status'<~Boolean> + # * 'id'<~Integer> + # * 'error'<~String> + def create_domain(name, options = {}) + email = options[:email] || @rage4_email + request( + :expects => 200, + :method => 'GET', + :path => "/rapi/createregulardomain/?name=#{name}&email=#{email}" + ) + end + + end + + + end + end +end diff --git a/lib/fog/rage4/requests/dns/create_domain_vanity.rb b/lib/fog/rage4/requests/dns/create_domain_vanity.rb new file mode 100644 index 000000000..7235c08fb --- /dev/null +++ b/lib/fog/rage4/requests/dns/create_domain_vanity.rb @@ -0,0 +1,33 @@ +module Fog + module DNS + class Rage4 + class Real + + # Create a domain with a vanity name server. + # ==== Parameters + # * name<~String> - domain name + # * nsname<~String> - vanity ns domain name + # + # ==== Returns + # * response<~Excon::Response>: + # * body<~Hash>: + # * 'status'<~Boolean> + # * 'id'<~Integer> + # * 'error'<~String> + def create_domain_vanity(name, nsname, options = {}) + email = options[:email] || @rage4_email + nsprefix = options[:nsprefix] || 'ns' + request( + :expects => 200, + :method => 'GET', + :path => "/rapi/createregulardomain/?name=#{name}&email=#{email}" + + "&nsname=#{nsname}&nsprefix=#{nsprefix}" + ) + end + + end + + + end + end +end diff --git a/lib/fog/rage4/requests/dns/create_record.rb b/lib/fog/rage4/requests/dns/create_record.rb new file mode 100644 index 000000000..fed153795 --- /dev/null +++ b/lib/fog/rage4/requests/dns/create_record.rb @@ -0,0 +1,65 @@ +module Fog + module DNS + class Rage4 + class Real + + # Create a record + # ==== Parameters + # * domain id <~Integer> The id of the domain you wish to create a record for + # * name <~String> Name of record, include domain name + # * content <~String> IP address or Domain name + # * type <~Integer> The type of record to create see list_record_types + # * priority <~Integer> - Record prioirity (nullable) + # * failover <~Boolean> Enable/disable failover default false + # * failovercontent <~String> Failover value, only valid for A/AAAA records + # * ttl <~Integer> - Time to live + # * geozone <~Long> Geo region id, see list_geo_regions + # * geolock <~Boolean> Lock geo coordinates, default false + # * geolat <~Double> Geo latitude, (nullable) + # * geolong <~Double> Geo longitude, (nullable) + # + # ==== Returns + # * response<~Excon::Response>: + # * body<~Hash>: + # * 'status'<~Boolean> + # * 'id'<~Integer> + # * 'error'<~String> + + +# https://secure.rage4.com/rapi/createrecord/ + + + def create_record(domain_id, name, content, type, options = {}) + + + path = "/rapi/createregulardomain/#{domain_id}?" + path << "?name=#{name}&content=#{content}&type=#{type}" + + path << "&priority=#{options[:priority]}" if options[:priority] + + failovercontent = options[:failover] || false + path << "&failover=#{options[:failover]}" + + path << "&failovercontent=#{failovercontent}" if options[:failovercontent] + + ttl = options[:ttl] || 3600 + path << "&ttl=#{ttl}" + + path << "&geozone=#{options[:geozone]}" if options[:geozone] + path << "&geozone=#{options[:geolock]}" if options[:geolock] + path << "&geozone=#{options[:geolat]}" if options[:geolat] + path << "&geozone=#{options[:geolong]}" if options[:geolong] + + request( + :expects => 200, + :method => 'GET', + :path => path + ) + end + + end + + + end + end +end diff --git a/lib/fog/rage4/requests/dns/create_reverse_domain_4.rb b/lib/fog/rage4/requests/dns/create_reverse_domain_4.rb new file mode 100644 index 000000000..7f7bef9b9 --- /dev/null +++ b/lib/fog/rage4/requests/dns/create_reverse_domain_4.rb @@ -0,0 +1,32 @@ +module Fog + module DNS + class Rage4 + class Real + + # Create a domain. + # ==== Parameters + # * name<~String> - domain name + # * subnet<~Integer> - subnet integer + # + # ==== Returns + # * response<~Excon::Response>: + # * body<~Hash>: + # * 'status'<~Boolean> + # * 'id'<~Integer> + # * 'error'<~String> + def create_reverse_domain_4(name, subnet, options = {}) + email = options[:email] || @rage4_email + request( + :expects => 200, + :method => 'GET', + :path => "/rapi/createreversedomain4/?name=#{name}&email=#{email}" + + "&subnet=#{subnet}" + ) + end + + end + + + end + end +end diff --git a/lib/fog/rage4/requests/dns/create_reverse_domain_6.rb b/lib/fog/rage4/requests/dns/create_reverse_domain_6.rb new file mode 100644 index 000000000..ef7f8775a --- /dev/null +++ b/lib/fog/rage4/requests/dns/create_reverse_domain_6.rb @@ -0,0 +1,32 @@ +module Fog + module DNS + class Rage4 + class Real + + # Create a domain. + # ==== Parameters + # * name<~String> - domain name + # * subnet<~Integer> - subnet integer + # + # ==== Returns + # * response<~Excon::Response>: + # * body<~Hash>: + # * 'status'<~Boolean> + # * 'id'<~Integer> + # * 'error'<~String> + def create_reverse_domain_6(name, subnet, options = {}) + email = options[:email] || @rage4_email + request( + :expects => 200, + :method => 'GET', + :path => "/rapi/createreversedomain4/?name=#{name}&email=#{email}" + + "&subnet=#{subnet}" + ) + end + + end + + + end + end +end diff --git a/lib/fog/rage4/requests/dns/delete_domain.rb b/lib/fog/rage4/requests/dns/delete_domain.rb new file mode 100644 index 000000000..ea39eb01d --- /dev/null +++ b/lib/fog/rage4/requests/dns/delete_domain.rb @@ -0,0 +1,28 @@ +module Fog + module DNS + class Rage4 + class Real + + # Delete a specific omain + # ==== Parameters + # * id<~Integer> - numeric ID + # + # ==== Returns + # * response<~Excon::Response>: + # * body<~Hash>: + # * 'status'<~Boolean> + # * 'id'<~Integer> + # * 'error'<~String> + def delete_domain(id) + request( + :expects => 200, + :method => 'GET', + :path => "/rapi/deletedomain/#{id}" ) + + end + + end + + end + end +end diff --git a/lib/fog/rage4/requests/dns/delete_record.rb b/lib/fog/rage4/requests/dns/delete_record.rb new file mode 100644 index 000000000..a7a6084a4 --- /dev/null +++ b/lib/fog/rage4/requests/dns/delete_record.rb @@ -0,0 +1,28 @@ +module Fog + module DNS + class Rage4 + class Real + + # Delete a specific omrecordain + # ==== Parameters + # * id<~Integer> - numeric ID + # + # ==== Returns + # * response<~Excon::Response>: + # * body<~Hash>: + # * 'status'<~Boolean> + # * 'id'<~Integer> + # * 'error'<~String> + def delete_record(id) + request( + :expects => 200, + :method => 'GET', + :path => "/rapi/deleterecord/#{id}" ) + + end + + end + + end + end +end diff --git a/lib/fog/rage4/requests/dns/export_zone_file.rb b/lib/fog/rage4/requests/dns/export_zone_file.rb new file mode 100644 index 000000000..15565b618 --- /dev/null +++ b/lib/fog/rage4/requests/dns/export_zone_file.rb @@ -0,0 +1,28 @@ +module Fog + module DNS + class Rage4 + class Real + + # Delete a specific omain + # ==== Parameters + # * id<~Integer> - numeric ID + # + # ==== Returns + # * response<~Excon::Response>: + # * body<~Hash>: + # * 'status'<~Boolean> + # * 'id'<~Integer> + # * 'error'<~String> + def export_zone_file(id) + request( + :expects => 200, + :method => 'GET', + :path => "/rapi/exportzonefile/#{id}" ) + + end + + end + + end + end +end diff --git a/lib/fog/rage4/requests/dns/get_domain.rb b/lib/fog/rage4/requests/dns/get_domain.rb new file mode 100644 index 000000000..710e9f015 --- /dev/null +++ b/lib/fog/rage4/requests/dns/get_domain.rb @@ -0,0 +1,44 @@ +module Fog + module DNS + class Rage4 + class Real + + # Get the details for a specific domain in your account. . + # ==== Parameters + # * id<~Integer> - numeric ID + # + # ==== Returns + # * response<~Excon::Response>: + # * body<~Hash>: + # * 'id'<~Integer> + # * 'name'<~String> + # * 'owner_email'<~String> + # * 'type'<~Integer> + # * 'subnet_mask'<~Integer> + def get_domain(id) + request( + :expects => 200, + :method => 'GET', + :path => "/rapi/getdomain/#{id}" ) + + end + + end + + class Mock + + def get_domain(id) + domain = self.data[:domains].detect do |domain| + domain["domain"]["id"] == id + end + response = Excon::Response.new + response.status = 200 + response.body = domain + response + end + + end + + end + end +end diff --git a/lib/fog/rage4/requests/dns/get_domain_by_name.rb b/lib/fog/rage4/requests/dns/get_domain_by_name.rb new file mode 100644 index 000000000..12bf92cf1 --- /dev/null +++ b/lib/fog/rage4/requests/dns/get_domain_by_name.rb @@ -0,0 +1,44 @@ +module Fog + module DNS + class Rage4 + class Real + + # Get the details for a specific domain in your account. + # ==== Parameters + # * id<~String> - name of domain + # + # ==== Returns + # * response<~Excon::Response>: + # * body<~Hash>: + # * 'id'<~Integer> + # * 'name'<~String> + # * 'owner_email'<~String> + # * 'type'<~Integer> + # * 'subnet_mask'<~Integer> + def get_domain_by_name(name) + request( + :expects => 200, + :method => 'GET', + :path => "/rapi/getdomainbyname/?name=#{name}") + + end + + end + + class Mock + + def get_domain_by_name(name) + domain = self.data[:domains].detect do |domain| + domain["domain"]["name"] == id + end + response = Excon::Response.new + response.status = 200 + response.body = domain + response + end + + end + + end + end +end diff --git a/lib/fog/rage4/requests/dns/import_domain.rb b/lib/fog/rage4/requests/dns/import_domain.rb new file mode 100644 index 000000000..c85f04d3f --- /dev/null +++ b/lib/fog/rage4/requests/dns/import_domain.rb @@ -0,0 +1,29 @@ +module Fog + module DNS + class Rage4 + class Real + + # Import a domain. You need to allow AXFR transfers. + # Only regular domains are supported. + # ==== Parameters + # * name<~String> - name of the domain + # + # ==== Returns + # * response<~Excon::Response>: + # * body<~Hash>: + # * 'status'<~Boolean> + # * 'id'<~Integer> + # * 'error'<~String> + def import_domain(name) + request( + :expects => 200, + :method => 'GET', + :path => "/rapi/importdomain/#{name}" ) + + end + + end + + end + end +end diff --git a/lib/fog/rage4/requests/dns/list_domains.rb b/lib/fog/rage4/requests/dns/list_domains.rb new file mode 100644 index 000000000..146b2e391 --- /dev/null +++ b/lib/fog/rage4/requests/dns/list_domains.rb @@ -0,0 +1,41 @@ +module Fog + module DNS + class Rage4 + class Real + + # Get the details for all domains in your account. + # ==== Parameters + # + # ==== Returns + # * response<~Excon::Response>: + # * body<~Array>: + # * 'domains'<~Hash> + # * 'id'<~Integer> + # * 'name'<~String> + # * 'owner_email'<~String> + # * 'type'<~Integer> + # * 'subnet_mask'<~Integer> + def list_domains + request( + :expects => 200, + :method => 'GET', + :path => '/rapi/getdomains' + ) + end + + end + + class Mock + + def list_domains + response = Excon::Response.new + response.status = 200 + response.body = self.data[:domains] + response + end + + end + + end + end +end diff --git a/lib/fog/rage4/requests/dns/list_geo_regions.rb b/lib/fog/rage4/requests/dns/list_geo_regions.rb new file mode 100644 index 000000000..4985ab98b --- /dev/null +++ b/lib/fog/rage4/requests/dns/list_geo_regions.rb @@ -0,0 +1,25 @@ +module Fog + module DNS + class Rage4 + class Real + + # List all the record types available + # ==== Parameters + # + # ==== Returns + # * response<~Excon::Response>: + # * body<~Array>: + # * 'domains'<~Hash> + + def list_geo_regions + request( + :expects => 200, + :method => 'GET', + :path => '/rapi/listgeoregions' + ) + end + + end + end + end +end diff --git a/lib/fog/rage4/requests/dns/list_record_types.rb b/lib/fog/rage4/requests/dns/list_record_types.rb new file mode 100644 index 000000000..34244f964 --- /dev/null +++ b/lib/fog/rage4/requests/dns/list_record_types.rb @@ -0,0 +1,25 @@ +module Fog + module DNS + class Rage4 + class Real + + # List all the record types available + # ==== Parameters + # + # ==== Returns + # * response<~Excon::Response>: + # * body<~Array>: + # * 'domains'<~Hash> + + def list_record_types + request( + :expects => 200, + :method => 'GET', + :path => '/rapi/listrecordtypes' + ) + end + + end + end + end +end diff --git a/lib/fog/rage4/requests/dns/list_records.rb b/lib/fog/rage4/requests/dns/list_records.rb new file mode 100644 index 000000000..b1dfa2649 --- /dev/null +++ b/lib/fog/rage4/requests/dns/list_records.rb @@ -0,0 +1,44 @@ +module Fog + module DNS + class Rage4 + class Real + + # Get the list of records for the specific domain. + # + # ==== Parameters + # * id<~Integer> + # ==== Returns + # * response<~Excon::Response>: + # * records + # * name<~String> + # * ttl<~Integer> + # * created_at<~String> + # * special_type<~String> + # * updated_at<~String> + # * domain_id<~Integer> + # * id<~Integer> + # * content<~String> + # * record_type<~String> + # * prio<~Integer> + def list_records(id) + request( :expects => 200, + :method => "GET", + :path => "/rapi/getrecords/#{id}" ) + end + + end + + class Mock + + def list_records(domain) + response = Excon::Response.new + response.status = 200 + response.body = self.data[:records][domain] || [] + response + end + + end + + end + end +end diff --git a/lib/fog/rage4/requests/dns/set_record_failover.rb b/lib/fog/rage4/requests/dns/set_record_failover.rb new file mode 100644 index 000000000..dc4596212 --- /dev/null +++ b/lib/fog/rage4/requests/dns/set_record_failover.rb @@ -0,0 +1,29 @@ +module Fog + module DNS + class Rage4 + class Real + + # Set a failover to on or off + # ==== Parameters + # * id<~Integer> - numeric ID + # + # ==== Returns + # * response<~Excon::Response>: + # * body<~Hash>: + # * 'status'<~Boolean> + # * 'id'<~Integer> + # * 'error'<~String> + def set_record_failover(id, active, failover) + request( + :expects => 200, + :method => 'GET', + :path => "/rapi/setrecordfailover/#{id}&active=#{active}&failover=#{failover}" + ) + + end + + end + + end + end +end diff --git a/lib/fog/rage4/requests/dns/show_current_usage.rb b/lib/fog/rage4/requests/dns/show_current_usage.rb new file mode 100644 index 000000000..4c56d400b --- /dev/null +++ b/lib/fog/rage4/requests/dns/show_current_usage.rb @@ -0,0 +1,28 @@ +module Fog + module DNS + class Rage4 + class Real + + # Delete a specific omain + # ==== Parameters + # * id<~Integer> - numeric ID + # + # ==== Returns + # * response<~Excon::Response>: + # * body<~Hash>: + # * 'status'<~Boolean> + # * 'id'<~Integer> + # * 'error'<~String> + def show_current_usage(id) + request( + :expects => 200, + :method => 'GET', + :path => "/rapi/showcurrentusage/#{id}" ) + + end + + end + + end + end +end diff --git a/lib/fog/rage4/requests/dns/show_global_usage.rb b/lib/fog/rage4/requests/dns/show_global_usage.rb new file mode 100644 index 000000000..5e630e35e --- /dev/null +++ b/lib/fog/rage4/requests/dns/show_global_usage.rb @@ -0,0 +1,23 @@ +module Fog + module DNS + class Rage4 + class Real + + # Delete a specific omain + # ==== Parameters + # + # ==== Returns + # * response<~Excon::Response>: + def show_global_usage + request( + :expects => 200, + :method => 'GET', + :path => "/rapi/showcurrentglobalusage/#{id}" ) + + end + + end + + end + end +end diff --git a/lib/fog/rage4/requests/dns/sync_domain.rb b/lib/fog/rage4/requests/dns/sync_domain.rb new file mode 100644 index 000000000..5f0cdcd16 --- /dev/null +++ b/lib/fog/rage4/requests/dns/sync_domain.rb @@ -0,0 +1,29 @@ +module Fog + module DNS + class Rage4 + class Real + + # Sync to external server ("Shadow Master") + # You need to allow AXFR transfers + # Only regular domains are supported + # ==== Parameters + # * name<~String> - domain name + # * ip<~String> - Ip address of remote server + # ==== Returns + # + # + + def sync_domain(name, ip) + request( + :expects => 200, + :method => 'GET', + :path => "/rapi/syncdomain/?name=#{name}&server=#{ip}" + ) + end + + end + + + end + end +end diff --git a/lib/fog/rage4/requests/dns/update_domain.rb b/lib/fog/rage4/requests/dns/update_domain.rb new file mode 100644 index 000000000..9cefb7810 --- /dev/null +++ b/lib/fog/rage4/requests/dns/update_domain.rb @@ -0,0 +1,43 @@ +module Fog + module DNS + class Rage4 + class Real + + # Update an existing domain + # ==== Parameters + # * domain<~Integer> - domain integer value + # * email <~String> - email of domain owner + # * nsprefix<~String> - vanity ns prefix (nullable) + # * nsname<~String> - vanity ns domain name (nullable) + # * enablevanity<~String> - activate/deactivate + # * failover<~Boolean> - failover enable + # + # ==== Returns + # * response<~Excon::Response>: + # * body<~Hash>: + # * 'status'<~Boolean> + # * 'id'<~Integer> + # * 'error'<~String> + def update_domain(name, options = {}) + email = options[:email] || @rage4_email + + path = "/rapi/updatedomain/?name=#{name}&email=#{email}" + + path << "&nsname=#{options[:nsname]}" if options[:nsname] + path << "&nsprefix=#{options[:nsprefix]}" if options[:nsprefix] + path << "&enablevanity=#{options[:enablevanity]}" if options[:enablevanity] + path << "&failover=#{options[:failover]}" if options[:failover] + + request( + :expects => 200, + :method => 'GET', + :path => path + ) + end + + end + + + end + end +end diff --git a/lib/fog/rage4/requests/dns/update_record.rb b/lib/fog/rage4/requests/dns/update_record.rb new file mode 100644 index 000000000..53d385126 --- /dev/null +++ b/lib/fog/rage4/requests/dns/update_record.rb @@ -0,0 +1,64 @@ +module Fog + module DNS + class Rage4 + class Real + + # Create a record + # ==== Parameters + # * record_id <~Integer> The id of the record you wish to update + # * name <~String> Name of record, include domain name + # * content <~String> IP address or Domain name + # * type <~Integer> The type of record to create see list_record_types + # * priority <~Integer> - Record prioirity (nullable) + # * failover <~Boolean> Enable/disable failover default false + # * failovercontent <~String> Failover value, only valid for A/AAAA records + # * ttl <~Integer> - Time to live + # * geozone <~Long> Geo region id, see list_geo_regions + # * geolock <~Boolean> Lock geo coordinates, default false + # * geolat <~Double> Geo latitude, (nullable) + # * geolong <~Double> Geo longitude, (nullable) + # + # ==== Returns + # * response<~Excon::Response>: + # * body<~Hash>: + # * 'status'<~Boolean> + # * 'id'<~Integer> + # * 'error'<~String> + + +# https://secure.rage4.com/rapi/createrecord/ + + + def update_record(record_id, name, content, type, options = {}) + + path = "/rapi/updaterecord/#{record_id}?" + path << "?name=#{name}&content=#{content}&type=#{type}" + + path << "&priority=#{options[:priority]}" if options[:priority] + + failovercontent = options[:failover] || false + path << "&failover=#{options[:failover]}" + + path << "&failovercontent=#{failovercontent}" if options[:failovercontent] + + ttl = options[:ttl] || 3600 + path << "&ttl=#{ttl}" + + path << "&geozone=#{options[:geozone]}" if options[:geozone] + path << "&geozone=#{options[:geolock]}" if options[:geolock] + path << "&geozone=#{options[:geolat]}" if options[:geolat] + path << "&geozone=#{options[:geolong]}" if options[:geolong] + + request( + :expects => 200, + :method => 'GET', + :path => path + ) + end + + end + + + end + end +end From 7e61b90d85544666c25333b2de6409f138503b33 Mon Sep 17 00:00:00 2001 From: Joshua Gross Date: Tue, 21 Jan 2014 17:23:55 -0500 Subject: [PATCH 03/17] setting up testing library to start writing tests --- lib/fog/rage4/requests/dns/list_domains.rb | 2 +- tests/dns/helper.rb | 3 + tests/rage4/requests/dns/dns_tests.rb | 139 +++++++++++++++++++++ 3 files changed, 143 insertions(+), 1 deletion(-) create mode 100644 tests/rage4/requests/dns/dns_tests.rb diff --git a/lib/fog/rage4/requests/dns/list_domains.rb b/lib/fog/rage4/requests/dns/list_domains.rb index 146b2e391..ac57b2ba1 100644 --- a/lib/fog/rage4/requests/dns/list_domains.rb +++ b/lib/fog/rage4/requests/dns/list_domains.rb @@ -3,7 +3,7 @@ module Fog class Rage4 class Real - # Get the details for all domains in your account. + # Get the lsit of all domains for your account. # ==== Parameters # # ==== Returns diff --git a/tests/dns/helper.rb b/tests/dns/helper.rb index bb0f1f98b..5bdf2ace6 100644 --- a/tests/dns/helper.rb +++ b/tests/dns/helper.rb @@ -35,6 +35,9 @@ def dns_providers :zone_attributes => { :email => 'fog@example.com' } + }, + :rage4 => { + :mocked => false, } } end diff --git a/tests/rage4/requests/dns/dns_tests.rb b/tests/rage4/requests/dns/dns_tests.rb new file mode 100644 index 000000000..9d9247b98 --- /dev/null +++ b/tests/rage4/requests/dns/dns_tests.rb @@ -0,0 +1,139 @@ +Shindo.tests('Fog::DNS[:rage4] | DNS requests', ['rage4', 'dns']) do + + @domain = '' + @domain_count = 0 + + tests("success") do + + test("get current domain count") do + pending if Fog.mocking? + + response = Fog::DNS[:rage4].list_domains() + debugger + if response.status == 200 + @domain_count = response.body['list'].size + end + + response.status == 200 + end + + test("create domain") do + pending if Fog.mocking? + + domain = generate_unique_domain + response = Fog::DNS[:rage4].create_domain(domain) + if response.status == 201 + @domain = response.body + end + + response.status == 201 + end + + test("get domain by name") do + pending if Fog.mocking? + + response = Fog::DNS[:rage4].get_domain(@domain["name"]) + response.status == 200 + end + + test("create an A resource record") do + pending if Fog.mocking? + + domain = @domain["name"] + name = "www" + type = "A" + data = "1.2.3.4" + response = Fog::DNS[:rage4].create_record(domain, name, type, data) + + if response.status == 201 + @record = response.body + end + + response.status == 201 + + end + + test("create a MX record") do + pending if Fog.mocking? + + domain = @domain["name"] + name = "" + type = "MX" + data = "10 mail.#{domain}" + options = { :ttl => 60 } + response = Fog::DNS[:rage4].create_record(domain, name, type, data, options) + + response.status == 201 + end + + test("update a record") do + pending if Fog.mocking? + + domain = @domain["name"] + record_id = @record["id"] + options = {:name => '', :type => 'A', :data => "2.3.4.5", :ttl => 600} + + response = Fog::DNS[:rage4].update_record(domain, record_id, options) + + response.status == 200 + end + + test("get record - check ip/ttl") do + pending if Fog.mocking? + + response = Fog::DNS[:rage4].get_record(@domain["name"], @record['id']) + record = response.body + result = false + + if response.status == 200 && record['data'] == '2.3.4.5' && record['ttl'] == 600 + result = true + end + + result + end + + test("list records") do + pending if Fog.mocking? + + response = Fog::DNS[:rage4].list_records(@domain["name"]) + + if response.status == 200 + @records = response.body + end + + (response.status == 200) and (response.body.size == 2) + end + + test("delete records") do + pending if Fog.mocking? + domain = @domain["name"] + + result = true + @records.each do |record| + response = Fog::DNS[:rage4].delete_record(domain, record["id"]) + if(response.status != 200) + result = false + break + end + end + + result + end + + test("delete domain") do + pending if Fog.mocking? + + #puts "Rage4 - Sleeping for 10 seconds, otherwise test fails because DNS Made Easy queues requests, it still might fail if DNS Made Easy is busy! MOCK IT!" + #puts "THIS MOST LIKELY WILL FAIL ON LIVE because it can take while for DNS Made Easy to create a domain/zone, changing the host to api.sandbox.rage4.com should make it work" + #sleep 10 + + response = Fog::DNS[:rage4].delete_domain(@domain["name"]) + response.status == 200 + end + + end + + tests( 'failure') do + end + +end From c7ec9711be73fad638059ca1f43275797d50fc73 Mon Sep 17 00:00:00 2001 From: Joshua Gross Date: Thu, 23 Jan 2014 16:27:04 -0500 Subject: [PATCH 04/17] Wrote shindo tests for all supported requests. Resulted in a lot of debuggin of request methods. As well update zone/record models to work in simple cases. --- lib/fog/rage4/dns.rb | 42 +-- lib/fog/rage4/models/dns/record.rb | 18 +- lib/fog/rage4/models/dns/records.rb | 10 +- lib/fog/rage4/models/dns/zone.rb | 6 +- lib/fog/rage4/models/dns/zones.rb | 6 +- lib/fog/rage4/requests/dns/create_domain.rb | 3 + .../requests/dns/create_domain_vanity.rb | 3 +- lib/fog/rage4/requests/dns/create_record.rb | 14 +- .../requests/dns/create_reverse_domain_4.rb | 6 +- .../requests/dns/create_reverse_domain_6.rb | 32 --- lib/fog/rage4/requests/dns/delete_domain.rb | 2 +- lib/fog/rage4/requests/dns/delete_record.rb | 4 +- .../rage4/requests/dns/export_zone_file.rb | 28 -- lib/fog/rage4/requests/dns/get_domain.rb | 16 +- .../rage4/requests/dns/get_domain_by_name.rb | 16 +- lib/fog/rage4/requests/dns/import_domain.rb | 29 -- .../rage4/requests/dns/list_geo_regions.rb | 6 +- .../rage4/requests/dns/list_record_types.rb | 5 +- lib/fog/rage4/requests/dns/list_records.rb | 13 +- .../rage4/requests/dns/show_current_usage.rb | 9 +- .../rage4/requests/dns/show_global_usage.rb | 6 +- lib/fog/rage4/requests/dns/sync_domain.rb | 29 -- lib/fog/rage4/requests/dns/update_domain.rb | 6 +- lib/fog/rage4/requests/dns/update_record.rb | 16 +- tests/dns/helper.rb | 2 +- tests/dns/models/record_tests.rb | 2 +- tests/dns/models/records_tests.rb | 2 +- tests/dns/models/zone_tests.rb | 2 +- tests/dns/models/zones_tests.rb | 2 +- tests/rage4/requests/dns/dns_tests.rb | 264 ++++++++++++------ 30 files changed, 255 insertions(+), 344 deletions(-) delete mode 100644 lib/fog/rage4/requests/dns/create_reverse_domain_6.rb delete mode 100644 lib/fog/rage4/requests/dns/export_zone_file.rb delete mode 100644 lib/fog/rage4/requests/dns/import_domain.rb delete mode 100644 lib/fog/rage4/requests/dns/sync_domain.rb diff --git a/lib/fog/rage4/dns.rb b/lib/fog/rage4/dns.rb index b3d4dbd61..be21e0405 100644 --- a/lib/fog/rage4/dns.rb +++ b/lib/fog/rage4/dns.rb @@ -16,59 +16,23 @@ module Fog request_path 'fog/rage4/requests/dns' request :list_domains - request :get_domain - request :get_domain_by_name request :create_domain request :create_domain_vanity request :create_reverse_domain_4 - request :create_reverse_domain_6 + request :get_domain + request :get_domain_by_name request :update_domain request :delete_domain - request :import_domain - request :sync_domain - - request :export_zone_file request :show_current_usage request :show_global_usage request :list_record_types request :list_geo_regions - request :list_records - request :create_record request :update_record + request :list_records request :delete_record request :set_record_failover - class Mock - - def self.data - @data ||= Hash.new do |hash, key| - hash[key] = { - :domains => [], - :records => {} - } - end - end - - def self.reset - @data = nil - end - - def initialize(options={}) - @rage4_email = options[:rage4_email] - @rage4_password = options[:rage4_api_key] - end - - def data - self.class.data[@rage4_email] - end - - def reset_data - self.class.data.delete(@rage4_email) - end - - end - class Real def initialize(options={}) diff --git a/lib/fog/rage4/models/dns/record.rb b/lib/fog/rage4/models/dns/record.rb index 97eb4947c..c2febbfa0 100644 --- a/lib/fog/rage4/models/dns/record.rb +++ b/lib/fog/rage4/models/dns/record.rb @@ -5,17 +5,13 @@ module Fog class Rage4 class Record < Fog::Model - extend Fog::Deprecation - deprecate :ip, :value - deprecate :ip=, :value= + identity :id attribute :name attribute :value, :aliases => "content" attribute :ttl - attribute :created_at - attribute :updated_at attribute :zone_id, :aliases => "domain_id" attribute :type, :aliases => "record_type" attribute :priority, :aliases => "prio" @@ -25,7 +21,7 @@ module Fog end def destroy - service.delete_record(zone.id, identity) + service.delete_record(identity) true end @@ -41,15 +37,13 @@ module Fog # decide whether its a new record or update of an existing if id.nil? - data = service.create_record(zone.id, name, type, value, options) + data = service.create_record(zone.id, name, value, type, options) else - options[:name] = name if name - options[:content] = value if value - options[:type] = type if type - data = service.update_record(zone.id, id, options) + data = service.update_record(id, name, value, type, options) end - merge_attributes(data.body["record"]) + merge_attributes(options) + merge_atributes(name: name, value: value, type: type) true end diff --git a/lib/fog/rage4/models/dns/records.rb b/lib/fog/rage4/models/dns/records.rb index 78dcfa318..e2f02910c 100644 --- a/lib/fog/rage4/models/dns/records.rb +++ b/lib/fog/rage4/models/dns/records.rb @@ -14,14 +14,18 @@ module Fog def all requires :zone clear - data = service.list_records(zone.id).body.map {|record| record['record']} + data = service.list_records(zone.id).body load(data) end def get(record_id) requires :zone - data = service.get_record(zone.id, record_id).body["record"] - new(data) + data = service.list_records(zone.id).select {|record| record['id'] == record_id } + if !data.empty? + new(data.first) + else + new() + end rescue Excon::Errors::NotFound nil end diff --git a/lib/fog/rage4/models/dns/zone.rb b/lib/fog/rage4/models/dns/zone.rb index 8fe375f64..f6c7bf5ce 100644 --- a/lib/fog/rage4/models/dns/zone.rb +++ b/lib/fog/rage4/models/dns/zone.rb @@ -10,8 +10,6 @@ module Fog identity :id attribute :domain, :aliases => 'name' - attribute :created_at - attribute :updated_at def destroy service.delete_domain(identity) @@ -21,7 +19,7 @@ module Fog def records @records ||= begin Fog::DNS::Rage4::Records.new( - :zone => self, + :zone => self, :service => service ) end @@ -36,7 +34,7 @@ module Fog def save requires :domain - data = service.create_domain(domain).body["domain"] + data = service.create_domain(domain).body["id"] merge_attributes(data) true end diff --git a/lib/fog/rage4/models/dns/zones.rb b/lib/fog/rage4/models/dns/zones.rb index b90d13746..49433c48d 100644 --- a/lib/fog/rage4/models/dns/zones.rb +++ b/lib/fog/rage4/models/dns/zones.rb @@ -11,12 +11,12 @@ module Fog def all clear - data = service.list_domains.body.map {|zone| zone['domain']} + data = service.list_domains.body load(data) end - def get(zone_id) - data = service.get_domain(zone_id).body['domain'] + def get(zone_name) + data = service.get_domain_by_name(zone_name).body new(data) rescue Excon::Errors::NotFound nil diff --git a/lib/fog/rage4/requests/dns/create_domain.rb b/lib/fog/rage4/requests/dns/create_domain.rb index c693173c5..01239289b 100644 --- a/lib/fog/rage4/requests/dns/create_domain.rb +++ b/lib/fog/rage4/requests/dns/create_domain.rb @@ -6,6 +6,7 @@ module Fog # Create a domain. # ==== Parameters # * name<~String> - domain name + # * email<~String> - email of owner of domain, defaults to email of credentials # # ==== Returns # * response<~Excon::Response>: @@ -13,6 +14,8 @@ module Fog # * 'status'<~Boolean> # * 'id'<~Integer> # * 'error'<~String> + # + def create_domain(name, options = {}) email = options[:email] || @rage4_email request( diff --git a/lib/fog/rage4/requests/dns/create_domain_vanity.rb b/lib/fog/rage4/requests/dns/create_domain_vanity.rb index 7235c08fb..8c0cda1fc 100644 --- a/lib/fog/rage4/requests/dns/create_domain_vanity.rb +++ b/lib/fog/rage4/requests/dns/create_domain_vanity.rb @@ -7,6 +7,7 @@ module Fog # ==== Parameters # * name<~String> - domain name # * nsname<~String> - vanity ns domain name + # * nsprefix<~String> - prefix for the domain name, defaults to 'ns' # # ==== Returns # * response<~Excon::Response>: @@ -20,7 +21,7 @@ module Fog request( :expects => 200, :method => 'GET', - :path => "/rapi/createregulardomain/?name=#{name}&email=#{email}" + + :path => "/rapi/createregulardomainext/?name=#{name}&email=#{email}" + "&nsname=#{nsname}&nsprefix=#{nsprefix}" ) end diff --git a/lib/fog/rage4/requests/dns/create_record.rb b/lib/fog/rage4/requests/dns/create_record.rb index fed153795..9b4690778 100644 --- a/lib/fog/rage4/requests/dns/create_record.rb +++ b/lib/fog/rage4/requests/dns/create_record.rb @@ -32,23 +32,23 @@ module Fog def create_record(domain_id, name, content, type, options = {}) - path = "/rapi/createregulardomain/#{domain_id}?" + path = "/rapi/createrecord/#{domain_id}" path << "?name=#{name}&content=#{content}&type=#{type}" path << "&priority=#{options[:priority]}" if options[:priority] - failovercontent = options[:failover] || false - path << "&failover=#{options[:failover]}" + failover = options[:failover] || 'false' + path << "&failover=#{failover}" - path << "&failovercontent=#{failovercontent}" if options[:failovercontent] + path << "&failovercontent=#{options[:failovercontent]}" if options[:failovercontent] ttl = options[:ttl] || 3600 path << "&ttl=#{ttl}" path << "&geozone=#{options[:geozone]}" if options[:geozone] - path << "&geozone=#{options[:geolock]}" if options[:geolock] - path << "&geozone=#{options[:geolat]}" if options[:geolat] - path << "&geozone=#{options[:geolong]}" if options[:geolong] + path << "&geolock=#{options[:geolock]}" if options[:geolock] + path << "&geolat=#{options[:geolat]}" if options[:geolat] + path << "&geolong=#{options[:geolong]}" if options[:geolong] request( :expects => 200, diff --git a/lib/fog/rage4/requests/dns/create_reverse_domain_4.rb b/lib/fog/rage4/requests/dns/create_reverse_domain_4.rb index 7f7bef9b9..25dfc5df5 100644 --- a/lib/fog/rage4/requests/dns/create_reverse_domain_4.rb +++ b/lib/fog/rage4/requests/dns/create_reverse_domain_4.rb @@ -3,10 +3,10 @@ module Fog class Rage4 class Real - # Create a domain. + # Create a reverse domain for an ipv4 address . # ==== Parameters - # * name<~String> - domain name - # * subnet<~Integer> - subnet integer + # * name<~String> - expects an ipv5 address + # * subnet<~Integer> - subnet ie: 9 for /9, range is /8 to /30 # # ==== Returns # * response<~Excon::Response>: diff --git a/lib/fog/rage4/requests/dns/create_reverse_domain_6.rb b/lib/fog/rage4/requests/dns/create_reverse_domain_6.rb deleted file mode 100644 index ef7f8775a..000000000 --- a/lib/fog/rage4/requests/dns/create_reverse_domain_6.rb +++ /dev/null @@ -1,32 +0,0 @@ -module Fog - module DNS - class Rage4 - class Real - - # Create a domain. - # ==== Parameters - # * name<~String> - domain name - # * subnet<~Integer> - subnet integer - # - # ==== Returns - # * response<~Excon::Response>: - # * body<~Hash>: - # * 'status'<~Boolean> - # * 'id'<~Integer> - # * 'error'<~String> - def create_reverse_domain_6(name, subnet, options = {}) - email = options[:email] || @rage4_email - request( - :expects => 200, - :method => 'GET', - :path => "/rapi/createreversedomain4/?name=#{name}&email=#{email}" + - "&subnet=#{subnet}" - ) - end - - end - - - end - end -end diff --git a/lib/fog/rage4/requests/dns/delete_domain.rb b/lib/fog/rage4/requests/dns/delete_domain.rb index ea39eb01d..a58fec3bd 100644 --- a/lib/fog/rage4/requests/dns/delete_domain.rb +++ b/lib/fog/rage4/requests/dns/delete_domain.rb @@ -3,7 +3,7 @@ module Fog class Rage4 class Real - # Delete a specific omain + # Delete a specific domain # ==== Parameters # * id<~Integer> - numeric ID # diff --git a/lib/fog/rage4/requests/dns/delete_record.rb b/lib/fog/rage4/requests/dns/delete_record.rb index a7a6084a4..087750e1d 100644 --- a/lib/fog/rage4/requests/dns/delete_record.rb +++ b/lib/fog/rage4/requests/dns/delete_record.rb @@ -3,9 +3,9 @@ module Fog class Rage4 class Real - # Delete a specific omrecordain + # Delete a specific record # ==== Parameters - # * id<~Integer> - numeric ID + # * id<~Integer> - numeric record ID # # ==== Returns # * response<~Excon::Response>: diff --git a/lib/fog/rage4/requests/dns/export_zone_file.rb b/lib/fog/rage4/requests/dns/export_zone_file.rb deleted file mode 100644 index 15565b618..000000000 --- a/lib/fog/rage4/requests/dns/export_zone_file.rb +++ /dev/null @@ -1,28 +0,0 @@ -module Fog - module DNS - class Rage4 - class Real - - # Delete a specific omain - # ==== Parameters - # * id<~Integer> - numeric ID - # - # ==== Returns - # * response<~Excon::Response>: - # * body<~Hash>: - # * 'status'<~Boolean> - # * 'id'<~Integer> - # * 'error'<~String> - def export_zone_file(id) - request( - :expects => 200, - :method => 'GET', - :path => "/rapi/exportzonefile/#{id}" ) - - end - - end - - end - end -end diff --git a/lib/fog/rage4/requests/dns/get_domain.rb b/lib/fog/rage4/requests/dns/get_domain.rb index 710e9f015..f9cdbd1ef 100644 --- a/lib/fog/rage4/requests/dns/get_domain.rb +++ b/lib/fog/rage4/requests/dns/get_domain.rb @@ -3,7 +3,7 @@ module Fog class Rage4 class Real - # Get the details for a specific domain in your account. . + # Get the details for a specific domain in your account. # ==== Parameters # * id<~Integer> - numeric ID # @@ -25,20 +25,6 @@ module Fog end - class Mock - - def get_domain(id) - domain = self.data[:domains].detect do |domain| - domain["domain"]["id"] == id - end - response = Excon::Response.new - response.status = 200 - response.body = domain - response - end - - end - end end end diff --git a/lib/fog/rage4/requests/dns/get_domain_by_name.rb b/lib/fog/rage4/requests/dns/get_domain_by_name.rb index 12bf92cf1..57c59a734 100644 --- a/lib/fog/rage4/requests/dns/get_domain_by_name.rb +++ b/lib/fog/rage4/requests/dns/get_domain_by_name.rb @@ -5,7 +5,7 @@ module Fog # Get the details for a specific domain in your account. # ==== Parameters - # * id<~String> - name of domain + # * name<~String> - name of domain # # ==== Returns # * response<~Excon::Response>: @@ -25,20 +25,6 @@ module Fog end - class Mock - - def get_domain_by_name(name) - domain = self.data[:domains].detect do |domain| - domain["domain"]["name"] == id - end - response = Excon::Response.new - response.status = 200 - response.body = domain - response - end - - end - end end end diff --git a/lib/fog/rage4/requests/dns/import_domain.rb b/lib/fog/rage4/requests/dns/import_domain.rb deleted file mode 100644 index c85f04d3f..000000000 --- a/lib/fog/rage4/requests/dns/import_domain.rb +++ /dev/null @@ -1,29 +0,0 @@ -module Fog - module DNS - class Rage4 - class Real - - # Import a domain. You need to allow AXFR transfers. - # Only regular domains are supported. - # ==== Parameters - # * name<~String> - name of the domain - # - # ==== Returns - # * response<~Excon::Response>: - # * body<~Hash>: - # * 'status'<~Boolean> - # * 'id'<~Integer> - # * 'error'<~String> - def import_domain(name) - request( - :expects => 200, - :method => 'GET', - :path => "/rapi/importdomain/#{name}" ) - - end - - end - - end - end -end diff --git a/lib/fog/rage4/requests/dns/list_geo_regions.rb b/lib/fog/rage4/requests/dns/list_geo_regions.rb index 4985ab98b..f61a0434a 100644 --- a/lib/fog/rage4/requests/dns/list_geo_regions.rb +++ b/lib/fog/rage4/requests/dns/list_geo_regions.rb @@ -3,13 +3,15 @@ module Fog class Rage4 class Real - # List all the record types available + # List all the geo regions available # ==== Parameters # # ==== Returns # * response<~Excon::Response>: # * body<~Array>: - # * 'domains'<~Hash> + # * 'record types'<~Hash> + # *'name' <~String> geo record name + # *'value' <~Integer> Integer value of the type def list_geo_regions request( diff --git a/lib/fog/rage4/requests/dns/list_record_types.rb b/lib/fog/rage4/requests/dns/list_record_types.rb index 34244f964..d129b0742 100644 --- a/lib/fog/rage4/requests/dns/list_record_types.rb +++ b/lib/fog/rage4/requests/dns/list_record_types.rb @@ -9,8 +9,9 @@ module Fog # ==== Returns # * response<~Excon::Response>: # * body<~Array>: - # * 'domains'<~Hash> - + # * 'record types'<~Hash> + # *'name' <~String> record type name + # *'value' <~Integer> Integer value of the type def list_record_types request( :expects => 200, diff --git a/lib/fog/rage4/requests/dns/list_records.rb b/lib/fog/rage4/requests/dns/list_records.rb index b1dfa2649..08f0264f8 100644 --- a/lib/fog/rage4/requests/dns/list_records.rb +++ b/lib/fog/rage4/requests/dns/list_records.rb @@ -19,7 +19,7 @@ module Fog # * id<~Integer> # * content<~String> # * record_type<~String> - # * prio<~Integer> + # * priority<~Integer> def list_records(id) request( :expects => 200, :method => "GET", @@ -28,17 +28,6 @@ module Fog end - class Mock - - def list_records(domain) - response = Excon::Response.new - response.status = 200 - response.body = self.data[:records][domain] || [] - response - end - - end - end end end diff --git a/lib/fog/rage4/requests/dns/show_current_usage.rb b/lib/fog/rage4/requests/dns/show_current_usage.rb index 4c56d400b..26bd724f2 100644 --- a/lib/fog/rage4/requests/dns/show_current_usage.rb +++ b/lib/fog/rage4/requests/dns/show_current_usage.rb @@ -3,16 +3,13 @@ module Fog class Rage4 class Real - # Delete a specific omain + # Shows current usage for a single domain # ==== Parameters - # * id<~Integer> - numeric ID + # * id<~Integer> - domain name numeric ID # # ==== Returns # * response<~Excon::Response>: - # * body<~Hash>: - # * 'status'<~Boolean> - # * 'id'<~Integer> - # * 'error'<~String> + # * body<~Array> def show_current_usage(id) request( :expects => 200, diff --git a/lib/fog/rage4/requests/dns/show_global_usage.rb b/lib/fog/rage4/requests/dns/show_global_usage.rb index 5e630e35e..834835e2b 100644 --- a/lib/fog/rage4/requests/dns/show_global_usage.rb +++ b/lib/fog/rage4/requests/dns/show_global_usage.rb @@ -3,16 +3,18 @@ module Fog class Rage4 class Real - # Delete a specific omain + # Shows global usage for all domains # ==== Parameters # # ==== Returns # * response<~Excon::Response>: + # * body<~Array> + def show_global_usage request( :expects => 200, :method => 'GET', - :path => "/rapi/showcurrentglobalusage/#{id}" ) + :path => "/rapi/showcurrentglobalusage/" ) end diff --git a/lib/fog/rage4/requests/dns/sync_domain.rb b/lib/fog/rage4/requests/dns/sync_domain.rb deleted file mode 100644 index 5f0cdcd16..000000000 --- a/lib/fog/rage4/requests/dns/sync_domain.rb +++ /dev/null @@ -1,29 +0,0 @@ -module Fog - module DNS - class Rage4 - class Real - - # Sync to external server ("Shadow Master") - # You need to allow AXFR transfers - # Only regular domains are supported - # ==== Parameters - # * name<~String> - domain name - # * ip<~String> - Ip address of remote server - # ==== Returns - # - # - - def sync_domain(name, ip) - request( - :expects => 200, - :method => 'GET', - :path => "/rapi/syncdomain/?name=#{name}&server=#{ip}" - ) - end - - end - - - end - end -end diff --git a/lib/fog/rage4/requests/dns/update_domain.rb b/lib/fog/rage4/requests/dns/update_domain.rb index 9cefb7810..81e31c76e 100644 --- a/lib/fog/rage4/requests/dns/update_domain.rb +++ b/lib/fog/rage4/requests/dns/update_domain.rb @@ -5,7 +5,7 @@ module Fog # Update an existing domain # ==== Parameters - # * domain<~Integer> - domain integer value + # * id<~Integer> - domain integer value # * email <~String> - email of domain owner # * nsprefix<~String> - vanity ns prefix (nullable) # * nsname<~String> - vanity ns domain name (nullable) @@ -18,10 +18,10 @@ module Fog # * 'status'<~Boolean> # * 'id'<~Integer> # * 'error'<~String> - def update_domain(name, options = {}) + def update_domain(id, options = {}) email = options[:email] || @rage4_email - path = "/rapi/updatedomain/?name=#{name}&email=#{email}" + path = "/rapi/updatedomain/#{id}?email=#{email}" path << "&nsname=#{options[:nsname]}" if options[:nsname] path << "&nsprefix=#{options[:nsprefix]}" if options[:nsprefix] diff --git a/lib/fog/rage4/requests/dns/update_record.rb b/lib/fog/rage4/requests/dns/update_record.rb index 53d385126..bebd311ae 100644 --- a/lib/fog/rage4/requests/dns/update_record.rb +++ b/lib/fog/rage4/requests/dns/update_record.rb @@ -3,7 +3,7 @@ module Fog class Rage4 class Real - # Create a record + # Updates an existing record # ==== Parameters # * record_id <~Integer> The id of the record you wish to update # * name <~String> Name of record, include domain name @@ -31,23 +31,23 @@ module Fog def update_record(record_id, name, content, type, options = {}) - path = "/rapi/updaterecord/#{record_id}?" + path = "/rapi/updaterecord/#{record_id}" path << "?name=#{name}&content=#{content}&type=#{type}" path << "&priority=#{options[:priority]}" if options[:priority] - failovercontent = options[:failover] || false - path << "&failover=#{options[:failover]}" + failover = options[:failover] || 'false' + path << "&failover=#{failover}" - path << "&failovercontent=#{failovercontent}" if options[:failovercontent] + path << "&failovercontent=#{options[:failovercontent]}" if options[:failovercontent] ttl = options[:ttl] || 3600 path << "&ttl=#{ttl}" path << "&geozone=#{options[:geozone]}" if options[:geozone] - path << "&geozone=#{options[:geolock]}" if options[:geolock] - path << "&geozone=#{options[:geolat]}" if options[:geolat] - path << "&geozone=#{options[:geolong]}" if options[:geolong] + path << "&geolock=#{options[:geolock]}" if options[:geolock] + path << "&geolat=#{options[:geolat]}" if options[:geolat] + path << "&geolong=#{options[:geolong]}" if options[:geolong] request( :expects => 200, diff --git a/tests/dns/helper.rb b/tests/dns/helper.rb index 5bdf2ace6..1c85cefe8 100644 --- a/tests/dns/helper.rb +++ b/tests/dns/helper.rb @@ -37,7 +37,7 @@ def dns_providers } }, :rage4 => { - :mocked => false, + :mocked => false } } end diff --git a/tests/dns/models/record_tests.rb b/tests/dns/models/record_tests.rb index 3d4c26431..433e22c20 100644 --- a/tests/dns/models/record_tests.rb +++ b/tests/dns/models/record_tests.rb @@ -1,7 +1,7 @@ for provider, config in dns_providers # FIXME: delay/timing breaks things :( - next if [:dnsmadeeasy].include?(provider) + next if [:dnsmadeeasy, :rage4].include?(provider) domain_name = uniq_id + '.com' diff --git a/tests/dns/models/records_tests.rb b/tests/dns/models/records_tests.rb index 49e0bb49c..51104cf65 100644 --- a/tests/dns/models/records_tests.rb +++ b/tests/dns/models/records_tests.rb @@ -1,7 +1,7 @@ for provider, config in dns_providers # FIXME: delay/timing breaks things :( - next if [:dnsmadeeasy].include?(provider) + next if [:dnsmadeeasy, :rage4].include?(provider) domain_name = uniq_id + '.com' diff --git a/tests/dns/models/zone_tests.rb b/tests/dns/models/zone_tests.rb index 3aa7efab3..ed1336bf8 100644 --- a/tests/dns/models/zone_tests.rb +++ b/tests/dns/models/zone_tests.rb @@ -1,7 +1,7 @@ for provider, config in dns_providers # FIXME: delay/timing breaks things :( - next if [:dnsmadeeasy].include?(provider) + next if [:dnsmadeeasy, :rage4].include?(provider) domain_name = uniq_id + '.com' diff --git a/tests/dns/models/zones_tests.rb b/tests/dns/models/zones_tests.rb index 5bf8cd547..e6249e753 100644 --- a/tests/dns/models/zones_tests.rb +++ b/tests/dns/models/zones_tests.rb @@ -1,7 +1,7 @@ for provider, config in dns_providers # FIXME: delay/timing breaks things :( - next if [:dnsmadeeasy].include?(provider) + next if [:dnsmadeeasy, :rage4].include?(provider) domain_name = uniq_id + '.com' diff --git a/tests/rage4/requests/dns/dns_tests.rb b/tests/rage4/requests/dns/dns_tests.rb index 9d9247b98..3d0537dff 100644 --- a/tests/rage4/requests/dns/dns_tests.rb +++ b/tests/rage4/requests/dns/dns_tests.rb @@ -1,133 +1,235 @@ Shindo.tests('Fog::DNS[:rage4] | DNS requests', ['rage4', 'dns']) do @domain = '' + @domain_id = nil + @record_id = nil @domain_count = 0 + @created_domain_list = [] + tests("success") do test("get current domain count") do pending if Fog.mocking? response = Fog::DNS[:rage4].list_domains() - debugger if response.status == 200 - @domain_count = response.body['list'].size + @domain_count = response.body.size + end + + if response.status == 200 + response.body = [] end response.status == 200 end + test("create domain") do pending if Fog.mocking? domain = generate_unique_domain response = Fog::DNS[:rage4].create_domain(domain) - if response.status == 201 - @domain = response.body + if response.status == 200 + @domain_id = response.body['id'] + @domain = domain end - response.status == 201 + if response.status == 200 && response.body['id'] != 0 + @created_domain_list << response.body['id'] + end + + response.status == 200 && response.body['error'] == "" && + response.body['status'] && !@domain_id.nil? end - test("get domain by name") do + test("create_domain_vanity") do pending if Fog.mocking? - response = Fog::DNS[:rage4].get_domain(@domain["name"]) - response.status == 200 + domain = generate_unique_domain + response = Fog::DNS[:rage4].create_domain_vanity(domain, 'foo.com') + + if response.status == 200 && response.body['id'] != 0 + @created_domain_list << response.body['id'] + end + + response.status == 200 && response.body['error'] == "" && + response.body['status'] end - test("create an A resource record") do + test("create_reverse_domain_4") do pending if Fog.mocking? - domain = @domain["name"] - name = "www" - type = "A" + response = Fog::DNS[:rage4].create_reverse_domain_4('192.168.1.1', 29) + + if response.status == 200 && response.body['id'] != 0 + @created_domain_list << response.body['id'] + end + + response.status == 200 && response.body['error'] == "" && + response.body['status'] + end + + test("get_domain") do + pending if Fog.mocking? + + response = Fog::DNS[:rage4].get_domain(@domain_id) + + returns(200) {response.status} + returns(@domain_id) {response.body['id']} + returns(@domain) {response.body['name']} + returns(Fog.credentials[:rage4_email]) {response.body['owner_email']} + returns(0) {response.body['type']} + returns(0) {response.body['subnet_mask']} + end + + test("get_domain_by_name") do + pending if Fog.mocking? + + response = Fog::DNS[:rage4].get_domain_by_name(@domain) + + returns(200) {response.status} + returns(@domain_id) {response.body['id']} + returns(@domain) {response.body['name']} + returns(Fog.credentials[:rage4_email]) {response.body['owner_email']} + returns(0) {response.body['type']} + returns(0) {response.body['subnet_mask']} + end + + test("update_domain") do + pending if Fog.mocking? + + response = Fog::DNS[:rage4].update_domain(@domain_id, {email: 'test@test.com'}) + + returns(200) { response.status } + returns(true) {response.body['status']} + returns(@domain_id) {response.body['id']} + returns("") {response.body['error'] } + + end + + + test("show_current_usage") do + pending if Fog.mocking? + + response = Fog::DNS[:rage4].show_current_usage(@domain_id) + returns(200) { response.status } + returns([]) { response.body } + end + + test("show_global_usage") do + pending if Fog.mocking? + + response = Fog::DNS[:rage4].show_global_usage() + returns(200) { response.status } + returns([]) { response.body } + end + + test("list_record_types") do + pending if Fog.mocking? + + response = Fog::DNS[:rage4].list_record_types() + response.body.each do |record_type| + returns(true) { !record_type['name'].nil? } + returns(true) { !record_type['value'].nil? } + end + + returns(200) { response.status } + returns(Array) { response.body.class } + end + + test("list_geo_regions") do + pending if Fog.mocking? + + response = Fog::DNS[:rage4].list_geo_regions() + response.body.each do |record_type| + returns(true) { !record_type['name'].nil? } + returns(true) { !record_type['value'].nil? } + end + + returns(200) { response.status } + returns(Array) { response.body.class } + end + + test("create_record") do + pending if Fog.mocking? + + name = "www." + @domain + type = 2 #"A" data = "1.2.3.4" - response = Fog::DNS[:rage4].create_record(domain, name, type, data) - - if response.status == 201 - @record = response.body - end - - response.status == 201 - - end - - test("create a MX record") do - pending if Fog.mocking? - - domain = @domain["name"] - name = "" - type = "MX" - data = "10 mail.#{domain}" - options = { :ttl => 60 } - response = Fog::DNS[:rage4].create_record(domain, name, type, data, options) - - response.status == 201 - end - - test("update a record") do - pending if Fog.mocking? - - domain = @domain["name"] - record_id = @record["id"] - options = {:name => '', :type => 'A', :data => "2.3.4.5", :ttl => 600} - - response = Fog::DNS[:rage4].update_record(domain, record_id, options) - - response.status == 200 - end - - test("get record - check ip/ttl") do - pending if Fog.mocking? - - response = Fog::DNS[:rage4].get_record(@domain["name"], @record['id']) - record = response.body - result = false - - if response.status == 200 && record['data'] == '2.3.4.5' && record['ttl'] == 600 - result = true - end - - result - end - - test("list records") do - pending if Fog.mocking? - - response = Fog::DNS[:rage4].list_records(@domain["name"]) + response = Fog::DNS[:rage4].create_record(@domain_id, name , data, type) if response.status == 200 - @records = response.body + @record_id = response.body['id'] end - (response.status == 200) and (response.body.size == 2) + response.status == 200 && response.body['error'] == "" && + response.body['status'] && !@record_id.nil? end - test("delete records") do + test("update_record") do pending if Fog.mocking? - domain = @domain["name"] - result = true - @records.each do |record| - response = Fog::DNS[:rage4].delete_record(domain, record["id"]) - if(response.status != 200) - result = false - break + name = "www." + @domain + type = 2 #"A" + data = "4.3.2.1" + response = Fog::DNS[:rage4].update_record(@record_id, name, data, type) + + returns(@record_id) { response.body['id'] } + + response.status == 200 && response.body['error'] == "" && + response.body['status'] + end + + test("list_records") do + pending if Fog.mocking? + + response = Fog::DNS[:rage4].list_records(@domain_id) + # returns nameserver records as well, will only verify + # the record we have tracked + + response.body.each do |record| + if record['id'] == @record_id + returns(@record_id) { record['id'] } + returns("www." + @domain) { record['name'] } + returns("A") { record['type'] } + returns(3600) { record['ttl'] } + returns(nil) { record['priority'] } + returns(@domain_id) { record['domain_id'] } + returns(0) { record['geo_region_id'] } + returns(false) { record['failover_enabled'] } + returns(nil) { record['failover_content'] } + returns(true) { record['is_active'] } + returns(false) { record['geo_lock'] } end end - result + response.status == 200 end - test("delete domain") do + test("delete_record") do pending if Fog.mocking? - #puts "Rage4 - Sleeping for 10 seconds, otherwise test fails because DNS Made Easy queues requests, it still might fail if DNS Made Easy is busy! MOCK IT!" - #puts "THIS MOST LIKELY WILL FAIL ON LIVE because it can take while for DNS Made Easy to create a domain/zone, changing the host to api.sandbox.rage4.com should make it work" - #sleep 10 + response = Fog::DNS[:rage4].delete_record(@record_id) + returns(@record_id) { response.body['id'] } + + response.status == 200 && response.body['error'] == "" && + response.body['status'] + end + + test("delete_domain") do + pending if Fog.mocking? + + response = nil + @created_domain_list.each do |domain_id| + response = Fog::DNS[:rage4].delete_domain(domain_id) + + + returns(true) {response.body['status']} + returns(domain_id) {response.body['id']} + returns("") {response.body['error'] } + end - response = Fog::DNS[:rage4].delete_domain(@domain["name"]) response.status == 200 end From 832fefe6db2428d4fcea0fe6c6611acf416c7890 Mon Sep 17 00:00:00 2001 From: Joshua Gross Date: Thu, 23 Jan 2014 16:53:04 -0500 Subject: [PATCH 05/17] using proper hash syntax for ruby 1.8.7 --- lib/fog/rage4/models/dns/record.rb | 2 +- tests/rage4/requests/dns/dns_tests.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/fog/rage4/models/dns/record.rb b/lib/fog/rage4/models/dns/record.rb index c2febbfa0..d68975b9e 100644 --- a/lib/fog/rage4/models/dns/record.rb +++ b/lib/fog/rage4/models/dns/record.rb @@ -43,7 +43,7 @@ module Fog end merge_attributes(options) - merge_atributes(name: name, value: value, type: type) + merge_atributes(:name => name, :value => value, :type => type) true end diff --git a/tests/rage4/requests/dns/dns_tests.rb b/tests/rage4/requests/dns/dns_tests.rb index 3d0537dff..02436427f 100644 --- a/tests/rage4/requests/dns/dns_tests.rb +++ b/tests/rage4/requests/dns/dns_tests.rb @@ -99,7 +99,7 @@ Shindo.tests('Fog::DNS[:rage4] | DNS requests', ['rage4', 'dns']) do test("update_domain") do pending if Fog.mocking? - response = Fog::DNS[:rage4].update_domain(@domain_id, {email: 'test@test.com'}) + response = Fog::DNS[:rage4].update_domain(@domain_id, {:email => 'test@test.com'}) returns(200) { response.status } returns(true) {response.body['status']} From 7d817875d45d145bf79e292ddfd764415aa7a3d6 Mon Sep 17 00:00:00 2001 From: Joshua Gross Date: Thu, 23 Jan 2014 18:07:05 -0500 Subject: [PATCH 06/17] when a zone doesn't exist return nil for rage4 --- lib/fog/rage4/models/dns/records.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/fog/rage4/models/dns/records.rb b/lib/fog/rage4/models/dns/records.rb index e2f02910c..a35c71685 100644 --- a/lib/fog/rage4/models/dns/records.rb +++ b/lib/fog/rage4/models/dns/records.rb @@ -24,7 +24,7 @@ module Fog if !data.empty? new(data.first) else - new() + nil end rescue Excon::Errors::NotFound nil From a5ce18ce6be46f8f9884860b6a4c9bdbffeabbb8 Mon Sep 17 00:00:00 2001 From: Joshua Gross Date: Thu, 23 Jan 2014 18:17:08 -0500 Subject: [PATCH 07/17] previous change was for records, duplicating nil return for zones now --- lib/fog/rage4/models/dns/zones.rb | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/fog/rage4/models/dns/zones.rb b/lib/fog/rage4/models/dns/zones.rb index 49433c48d..6b05a03a1 100644 --- a/lib/fog/rage4/models/dns/zones.rb +++ b/lib/fog/rage4/models/dns/zones.rb @@ -17,7 +17,12 @@ module Fog def get(zone_name) data = service.get_domain_by_name(zone_name).body - new(data) + + if data["status"] + new(data) + else + nil + end rescue Excon::Errors::NotFound nil end From 463a7a819f40949f60f75abe99bfb51a8069f50c Mon Sep 17 00:00:00 2001 From: Joshua Gross Date: Thu, 23 Jan 2014 18:27:35 -0500 Subject: [PATCH 08/17] changing handling of zone returns after testing that data was different on errors and success --- lib/fog/rage4/models/dns/zones.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/fog/rage4/models/dns/zones.rb b/lib/fog/rage4/models/dns/zones.rb index 6b05a03a1..d7b255ff6 100644 --- a/lib/fog/rage4/models/dns/zones.rb +++ b/lib/fog/rage4/models/dns/zones.rb @@ -18,10 +18,10 @@ module Fog def get(zone_name) data = service.get_domain_by_name(zone_name).body - if data["status"] - new(data) - else + if data["status"] && !data["status"] nil + else + new(data) end rescue Excon::Errors::NotFound nil From 83b98a3f6fcfb31b56d617d81570142207fac07c Mon Sep 17 00:00:00 2001 From: Joshua Gross Date: Thu, 23 Jan 2014 18:35:15 -0500 Subject: [PATCH 09/17] adding domain alias to record to match zerigo api in rage4 --- lib/fog/rage4/models/dns/record.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/fog/rage4/models/dns/record.rb b/lib/fog/rage4/models/dns/record.rb index d68975b9e..8eebd082a 100644 --- a/lib/fog/rage4/models/dns/record.rb +++ b/lib/fog/rage4/models/dns/record.rb @@ -9,7 +9,7 @@ module Fog identity :id - attribute :name + attribute :name :aliases => "domain" attribute :value, :aliases => "content" attribute :ttl attribute :zone_id, :aliases => "domain_id" From b3fae0dc8853641bdf5781956ecf9186c79de2fd Mon Sep 17 00:00:00 2001 From: Joshua Gross Date: Thu, 23 Jan 2014 18:40:24 -0500 Subject: [PATCH 10/17] quick syntax fix for an attribute alias --- lib/fog/rage4/models/dns/record.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/fog/rage4/models/dns/record.rb b/lib/fog/rage4/models/dns/record.rb index 8eebd082a..42e022ba2 100644 --- a/lib/fog/rage4/models/dns/record.rb +++ b/lib/fog/rage4/models/dns/record.rb @@ -9,7 +9,7 @@ module Fog identity :id - attribute :name :aliases => "domain" + attribute :name, :aliases => "domain" attribute :value, :aliases => "content" attribute :ttl attribute :zone_id, :aliases => "domain_id" From 7d2b460149e0ff96d5ea8e49487f55b0cacdc137 Mon Sep 17 00:00:00 2001 From: Joshua Gross Date: Thu, 23 Jan 2014 18:47:24 -0500 Subject: [PATCH 11/17] making a reader for domain to duplicate name attribute --- lib/fog/rage4/models/dns/record.rb | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/fog/rage4/models/dns/record.rb b/lib/fog/rage4/models/dns/record.rb index 42e022ba2..a2420cdf1 100644 --- a/lib/fog/rage4/models/dns/record.rb +++ b/lib/fog/rage4/models/dns/record.rb @@ -9,7 +9,7 @@ module Fog identity :id - attribute :name, :aliases => "domain" + attribute :name attribute :value, :aliases => "content" attribute :ttl attribute :zone_id, :aliases => "domain_id" @@ -20,6 +20,10 @@ module Fog super end + def domain + name + end + def destroy service.delete_record(identity) true From 63a1ca94d2cb0204de7312cbe0a846ecc89ac099 Mon Sep 17 00:00:00 2001 From: Joshua Gross Date: Fri, 24 Jan 2014 10:25:51 -0500 Subject: [PATCH 12/17] adding more attributes to rage4 records --- lib/fog/rage4/models/dns/record.rb | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/lib/fog/rage4/models/dns/record.rb b/lib/fog/rage4/models/dns/record.rb index a2420cdf1..91404fe07 100644 --- a/lib/fog/rage4/models/dns/record.rb +++ b/lib/fog/rage4/models/dns/record.rb @@ -14,7 +14,16 @@ module Fog attribute :ttl attribute :zone_id, :aliases => "domain_id" attribute :type, :aliases => "record_type" - attribute :priority, :aliases => "prio" + attribute :priority, :aliases => "priority" + attribute :domain_id + attribute :geo_region_id + attribute :failover_enabled + attribute :failover_content + attribute :geo_lat + attribute :geo_long + attribute :geo_lock + attribute :is_active + def initialize(attributes={}) super @@ -36,8 +45,12 @@ module Fog def save requires :name, :type, :value options = {} - options[:prio] = priority if priority + options[:priority] = priority if priority options[:ttl] = ttl if ttl + options[:geozone] = geo_region_id if geo_region_id + options[:geolock] = geo_lock if geo_lock + options[:geolat] = geo_lat if geo_lat + options[:geolong] = geo_long if geo_long # decide whether its a new record or update of an existing if id.nil? From dfdb7a62ddaa6157af2675793b2fef1a967106fa Mon Sep 17 00:00:00 2001 From: Joshua Gross Date: Mon, 27 Jan 2014 09:05:50 -0500 Subject: [PATCH 13/17] updating documentation for list records in rage4 --- lib/fog/rage4/requests/dns/list_records.rb | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib/fog/rage4/requests/dns/list_records.rb b/lib/fog/rage4/requests/dns/list_records.rb index 08f0264f8..9bd0f4aed 100644 --- a/lib/fog/rage4/requests/dns/list_records.rb +++ b/lib/fog/rage4/requests/dns/list_records.rb @@ -12,8 +12,6 @@ module Fog # * records # * name<~String> # * ttl<~Integer> - # * created_at<~String> - # * special_type<~String> # * updated_at<~String> # * domain_id<~Integer> # * id<~Integer> From e288659a5b9abf1c95f4bd590f69a9f65a1d55b8 Mon Sep 17 00:00:00 2001 From: Joshua Gross Date: Tue, 4 Feb 2014 18:05:01 -0500 Subject: [PATCH 14/17] fixing a typo in rage4 record --- lib/fog/rage4/models/dns/record.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/fog/rage4/models/dns/record.rb b/lib/fog/rage4/models/dns/record.rb index 91404fe07..b231a6f9d 100644 --- a/lib/fog/rage4/models/dns/record.rb +++ b/lib/fog/rage4/models/dns/record.rb @@ -60,7 +60,7 @@ module Fog end merge_attributes(options) - merge_atributes(:name => name, :value => value, :type => type) + merge_attributes(:name => name, :value => value, :type => type) true end From 53c7eb67b6a58a6ce362c98d012e6d23f0e4d4fb Mon Sep 17 00:00:00 2001 From: Joshua Gross Date: Tue, 4 Feb 2014 20:10:48 -0500 Subject: [PATCH 15/17] minor fixes for record and domain destroying --- lib/fog/rage4/models/dns/record.rb | 2 +- lib/fog/rage4/models/dns/zone.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/fog/rage4/models/dns/record.rb b/lib/fog/rage4/models/dns/record.rb index b231a6f9d..c1efacb04 100644 --- a/lib/fog/rage4/models/dns/record.rb +++ b/lib/fog/rage4/models/dns/record.rb @@ -34,7 +34,7 @@ module Fog end def destroy - service.delete_record(identity) + service.delete_record(id) true end diff --git a/lib/fog/rage4/models/dns/zone.rb b/lib/fog/rage4/models/dns/zone.rb index f6c7bf5ce..4bec49031 100644 --- a/lib/fog/rage4/models/dns/zone.rb +++ b/lib/fog/rage4/models/dns/zone.rb @@ -12,7 +12,7 @@ module Fog attribute :domain, :aliases => 'name' def destroy - service.delete_domain(identity) + service.delete_domain(id) true end From 05b15ab7e61da4985dcf7fde729850288443ebcf Mon Sep 17 00:00:00 2001 From: Joshua Gross Date: Wed, 5 Feb 2014 10:04:27 -0500 Subject: [PATCH 16/17] fixing rage4 structure as to recent fog chagnes --- lib/fog/rage4.rb | 11 +---------- lib/fog/rage4/core.rb | 11 +++++++++++ lib/fog/rage4/dns.rb | 2 +- 3 files changed, 13 insertions(+), 11 deletions(-) create mode 100644 lib/fog/rage4/core.rb diff --git a/lib/fog/rage4.rb b/lib/fog/rage4.rb index 9444ee57d..36f648fa4 100644 --- a/lib/fog/rage4.rb +++ b/lib/fog/rage4.rb @@ -1,11 +1,2 @@ -require 'fog/core' +require 'fog/rage4/dns' -module Fog - module Rage4 - - extend Fog::Provider - - service(:dns, 'rage4/dns', 'DNS') - - end -end diff --git a/lib/fog/rage4/core.rb b/lib/fog/rage4/core.rb new file mode 100644 index 000000000..9444ee57d --- /dev/null +++ b/lib/fog/rage4/core.rb @@ -0,0 +1,11 @@ +require 'fog/core' + +module Fog + module Rage4 + + extend Fog::Provider + + service(:dns, 'rage4/dns', 'DNS') + + end +end diff --git a/lib/fog/rage4/dns.rb b/lib/fog/rage4/dns.rb index be21e0405..c653a8dfd 100644 --- a/lib/fog/rage4/dns.rb +++ b/lib/fog/rage4/dns.rb @@ -1,4 +1,4 @@ -require 'fog/rage4' +require 'fog/rage4/core' require 'fog/dns' module Fog From aed512fe247bef32d57fa709abc027ca5491e1ac Mon Sep 17 00:00:00 2001 From: Joshua Gross Date: Wed, 5 Feb 2014 10:19:09 -0500 Subject: [PATCH 17/17] fixing service creation in rage4 --- lib/fog/rage4/core.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/fog/rage4/core.rb b/lib/fog/rage4/core.rb index 9444ee57d..68d2d6b4e 100644 --- a/lib/fog/rage4/core.rb +++ b/lib/fog/rage4/core.rb @@ -5,7 +5,7 @@ module Fog extend Fog::Provider - service(:dns, 'rage4/dns', 'DNS') + service(:dns, 'DNS') end end