diff --git a/lib/fog/zerigo/compute.rb b/lib/fog/zerigo/compute.rb index dd55fcfb4..d7a5a01e3 100644 --- a/lib/fog/zerigo/compute.rb +++ b/lib/fog/zerigo/compute.rb @@ -15,15 +15,15 @@ module Fog request :get_zone request :get_zone_stats request :create_zone - # request :update_zone - # request :delete_zone - # request :list_hosts - # request :count_hosts - # request :get_host - # request :get_blank_host - # request :create_host - # request :update_host - # request :delete_host + request :update_zone + request :delete_zone + request :list_hosts + request :find_hosts + request :count_hosts + request :get_host + request :create_host + request :update_host + request :delete_host class Mock diff --git a/lib/fog/zerigo/parsers/compute/create_record.rb b/lib/fog/zerigo/parsers/compute/count_hosts.rb similarity index 57% rename from lib/fog/zerigo/parsers/compute/create_record.rb rename to lib/fog/zerigo/parsers/compute/count_hosts.rb index 5b487e777..a2d3f2541 100644 --- a/lib/fog/zerigo/parsers/compute/create_record.rb +++ b/lib/fog/zerigo/parsers/compute/count_hosts.rb @@ -1,9 +1,9 @@ module Fog module Parsers - module Slicehost + module Zerigo module Compute - class CreateRecord < Fog::Parsers::Base + class CountHosts < Fog::Parsers::Base def reset @response = {} @@ -11,10 +11,8 @@ module Fog def end_element(name) case name - when 'zone-id', 'ttl', 'id' + when 'count' @response[name] = @value.to_i - when 'record-type', 'name', 'data', 'active', 'aux' - @response[name] = @value end end diff --git a/lib/fog/zerigo/parsers/compute/create_host.rb b/lib/fog/zerigo/parsers/compute/create_host.rb new file mode 100644 index 000000000..0ec0c8590 --- /dev/null +++ b/lib/fog/zerigo/parsers/compute/create_host.rb @@ -0,0 +1,29 @@ +module Fog + module Parsers + module Zerigo + module Compute + + class CreateHost < Fog::Parsers::Base + + def reset + @host = {} + @response = {} + end + + def end_element(name) + case name + when 'id', 'priority', 'ttl', 'zone-id' + @host[name] = @value.to_i + when 'data', 'fqdn', 'host-type', 'hostname', 'notes', 'zone-id', 'created-at', 'updated-at' + @host[name] = @value + when 'host' + @response['host'] = @host + end + end + + end + + end + end + end +end diff --git a/lib/fog/zerigo/parsers/compute/create_zone.rb b/lib/fog/zerigo/parsers/compute/create_zone.rb index 21d3db89a..dd7bf95bf 100644 --- a/lib/fog/zerigo/parsers/compute/create_zone.rb +++ b/lib/fog/zerigo/parsers/compute/create_zone.rb @@ -13,7 +13,7 @@ module Fog case name when 'default-ttl', 'id', 'nx-ttl', 'hosts-count' @response[name] = @value.to_i - when 'created-at', 'custom-nameservers', 'custom-ns', 'domain', 'hostmaster', 'notes', 'ns1', 'ns-type', 'slave-nameservers', 'tag-list', 'updated-at', 'hosts' + when 'created-at', 'custom-nameservers', 'custom-ns', 'domain', 'hostmaster', 'notes', 'ns1', 'ns-type', 'slave-nameservers', 'tag-list', 'updated-at', 'hosts', 'axfr-ips', 'restrict-axfr' @response[name] = @value end end diff --git a/lib/fog/zerigo/parsers/compute/find_hosts.rb b/lib/fog/zerigo/parsers/compute/find_hosts.rb new file mode 100644 index 000000000..887afbfc2 --- /dev/null +++ b/lib/fog/zerigo/parsers/compute/find_hosts.rb @@ -0,0 +1,30 @@ +module Fog + module Parsers + module Zerigo + module Compute + + class FindZones < Fog::Parsers::Base + + def reset + @host = {} + @response = { 'hosts' => [] } + end + + def end_element(name) + case name + when 'id', 'priority', 'ttl', 'zone-id' + @host[name] = @value.to_i + when 'data', 'fqdn', 'host-type', 'hostname', 'notes', 'zone-id', 'created-at', 'updated-at' + @host[name] = @value + when 'host' + @response['hosts'] << @host + @host = {} + end + end + + end + + end + end + end +end diff --git a/lib/fog/zerigo/parsers/compute/get_host.rb b/lib/fog/zerigo/parsers/compute/get_host.rb new file mode 100644 index 000000000..b4cc17491 --- /dev/null +++ b/lib/fog/zerigo/parsers/compute/get_host.rb @@ -0,0 +1,30 @@ +module Fog + module Parsers + module Zerigo + module Compute + + class GetHost < Fog::Parsers::Base + + def reset + @host = {} + @response = { 'hosts' => [] } + end + + def end_element(name) + case name + when 'id', 'priority', 'ttl', 'zone-id' + @host[name] = @value.to_i + when 'data', 'fqdn', 'host-type', 'hostname', 'notes', 'zone-id', 'created-at', 'updated-at' + @host[name] = @value + when 'host' + @response['hosts'] << @host + @host = {} + end + end + + end + + end + end + end +end diff --git a/lib/fog/zerigo/parsers/compute/get_record.rb b/lib/fog/zerigo/parsers/compute/get_record.rb deleted file mode 100644 index 32d2e300f..000000000 --- a/lib/fog/zerigo/parsers/compute/get_record.rb +++ /dev/null @@ -1,26 +0,0 @@ -module Fog - module Parsers - module Slicehost - module Compute - - class GetRecord < Fog::Parsers::Base - - def reset - @response = { } - end - - def end_element(name) - case name - when 'zone-id', 'ttl' - @response[name] = @value.to_i - when 'record-type', 'name', 'data', 'active', 'aux' - @response[name] = @value - end - end - - end - - end - end - end -end diff --git a/lib/fog/zerigo/parsers/compute/get_records.rb b/lib/fog/zerigo/parsers/compute/get_records.rb deleted file mode 100644 index b7822bcdc..000000000 --- a/lib/fog/zerigo/parsers/compute/get_records.rb +++ /dev/null @@ -1,30 +0,0 @@ -module Fog - module Parsers - module Slicehost - module Compute - - class GetRecords < Fog::Parsers::Base - - def reset - @record = {} - @response = { 'records' => [] } - end - - def end_element(name) - case name - when 'zone-id', 'ttl' - @record[name] = @value.to_i - when 'record-type', 'name', 'data', 'active', 'aux' - @record[name] = @value - when 'record' - @response['records'] << @record - @record = {} - end - end - - end - - end - end - end -end diff --git a/lib/fog/zerigo/parsers/compute/get_zone.rb b/lib/fog/zerigo/parsers/compute/get_zone.rb index 9148ff0bc..8be212a45 100644 --- a/lib/fog/zerigo/parsers/compute/get_zone.rb +++ b/lib/fog/zerigo/parsers/compute/get_zone.rb @@ -1,5 +1,3 @@ -require 'date' - module Fog module Parsers module Zerigo @@ -27,9 +25,9 @@ module Fog if (@in_hosts) #in hosts part of response case name - when 'id', 'priority', 'ttl' + when 'id', 'priority', 'ttl', 'zone-id' @host[name] = @value.to_i - when 'data', 'fgdn', 'host-type', 'hostname', 'notes', 'zone-id', 'created-at type', 'updated-at' + when 'data', 'fqdn', 'host-type', 'hostname', 'notes', 'zone-id', 'created-at', 'updated-at' @host[name] = @value when 'host' @hosts << @host @@ -41,9 +39,9 @@ module Fog else #in zone part of data case name - when 'default-ttl', 'id', 'nx-ttl' + when 'default-ttl', 'id', 'nx-ttl', 'hosts-count' @response[name] = @value.to_i - when 'created-at', 'updated-at', 'domain', 'hostmaster', 'custom-nameservers', 'slave-nameservers', 'custom-ns', 'ns-type', 'ns1', 'notes' + when 'created-at', 'custom-nameservers', 'custom-ns', 'domain', 'hostmaster', 'notes', 'ns1', 'ns-type', 'slave-nameservers', 'tag-list', 'updated-at', 'hosts', 'axfr-ips', 'restrict-axfr' @response[name] = @value end end diff --git a/lib/fog/zerigo/parsers/compute/list_hosts.rb b/lib/fog/zerigo/parsers/compute/list_hosts.rb new file mode 100644 index 000000000..63d2053cf --- /dev/null +++ b/lib/fog/zerigo/parsers/compute/list_hosts.rb @@ -0,0 +1,30 @@ +module Fog + module Parsers + module Zerigo + module Compute + + class ListHosts < Fog::Parsers::Base + + def reset + @host = {} + @response = { 'hosts' => [] } + end + + def end_element(name) + case name + when 'id', 'priority', 'ttl', 'zone-id' + @host[name] = @value.to_i + when 'data', 'fqdn', 'host-type', 'hostname', 'notes', 'zone-id', 'created-at', 'updated-at' + @host[name] = @value + when 'host' + @response['hosts'] << @host + @host = {} + end + end + + end + + end + end + end +end diff --git a/lib/fog/zerigo/parsers/compute/list_zones.rb b/lib/fog/zerigo/parsers/compute/list_zones.rb index 1a9b65d7b..cc6f60b24 100644 --- a/lib/fog/zerigo/parsers/compute/list_zones.rb +++ b/lib/fog/zerigo/parsers/compute/list_zones.rb @@ -12,9 +12,9 @@ module Fog def end_element(name) case name - when 'default-ttl', 'id', 'nx-ttl' + when 'default-ttl', 'id', 'nx-ttl', 'hosts-count' @zone[name] = @value.to_i - when 'created-at', 'updated-at', 'domain', 'hostmaster', 'custom-nameservers', 'slave-nameservers', 'custom-ns', 'ns-type', 'ns1', 'notes' + when 'created-at', 'custom-nameservers', 'custom-ns', 'domain', 'hostmaster', 'notes', 'ns1', 'ns-type', 'slave-nameservers', 'tag-list', 'updated-at', 'hosts', 'axfr-ips', 'restrict-axfr' @zone[name] = @value when 'zone' @response['zones'] << @zone diff --git a/lib/fog/zerigo/parsers/compute/update_host.rb b/lib/fog/zerigo/parsers/compute/update_host.rb new file mode 100644 index 000000000..d474b4aed --- /dev/null +++ b/lib/fog/zerigo/parsers/compute/update_host.rb @@ -0,0 +1,29 @@ +module Fog + module Parsers + module Zerigo + module Compute + + class UpdateHost < Fog::Parsers::Base + + def reset + @host = {} + @response = {} + end + + def end_element(name) + case name + when 'id', 'priority', 'ttl', 'zone-id' + @host[name] = @value.to_i + when 'data', 'fqdn', 'host-type', 'hostname', 'notes', 'zone-id', 'created-at', 'updated-at' + @host[name] = @value + when 'host' + @response['host'] = @host + end + end + + end + + end + end + end +end diff --git a/lib/fog/zerigo/parsers/compute/update_zone.rb b/lib/fog/zerigo/parsers/compute/update_zone.rb new file mode 100644 index 000000000..d81984627 --- /dev/null +++ b/lib/fog/zerigo/parsers/compute/update_zone.rb @@ -0,0 +1,26 @@ +module Fog + module Parsers + module Zerigo + module Compute + + class UpdateZone < Fog::Parsers::Base + + def reset + @response = {} + end + + def end_element(name) + case name + when 'default-ttl', 'id', 'nx-ttl', 'hosts-count' + @response[name] = @value.to_i + when 'created-at', 'custom-nameservers', 'custom-ns', 'domain', 'hostmaster', 'notes', 'ns1', 'ns-type', 'slave-nameservers', 'tag-list', 'updated-at', 'hosts', 'axfr-ips', 'restrict-axfr' + @response[name] = @value + end + end + + end + + end + end + end +end diff --git a/lib/fog/zerigo/requests/compute/count_hosts.rb b/lib/fog/zerigo/requests/compute/count_hosts.rb new file mode 100644 index 000000000..3d6a051aa --- /dev/null +++ b/lib/fog/zerigo/requests/compute/count_hosts.rb @@ -0,0 +1,34 @@ +module Fog + module Zerigo + class Compute + class Real + + require 'fog/zerigo/parsers/compute/count_hosts' + + # Total number of zones hosted Zerigo for this account. It is the same value as provided + # in the X-Query-Count header in the list_zones API method + # + # ==== Returns + # * response<~Excon::Response>: + # * 'count'<~Integer> + def count_hosts( zone_id) + request( + :expects => 200, + :method => 'GET', + :parser => Fog::Parsers::Zerigo::Compute::CountZones.new, + :path => "/api/1.1/zones/#{zone_id}/hosts/count.xml" + ) + end + + end + + class Mock + + def count_hosts( zone_id) + Fog::Mock.not_implemented + end + + end + end + end +end diff --git a/lib/fog/zerigo/requests/compute/count_zones.rb b/lib/fog/zerigo/requests/compute/count_zones.rb index 42a408977..ecce132eb 100644 --- a/lib/fog/zerigo/requests/compute/count_zones.rb +++ b/lib/fog/zerigo/requests/compute/count_zones.rb @@ -5,8 +5,8 @@ module Fog require 'fog/zerigo/parsers/compute/count_zones' - # Total number of zones available. It is the same value as provided in the X-Query-Count - # header in the list_zones API method + # Total number of zones hosted Zerigo for this account. It is the same value as provided + # in the X-Query-Count header in the list_zones API method # # ==== Returns # * response<~Excon::Response>: @@ -16,7 +16,7 @@ module Fog :expects => 200, :method => 'GET', :parser => Fog::Parsers::Zerigo::Compute::CountZones.new, - :path => "/api/1.1./zones/count.xml" + :path => "/api/1.1/zones/count.xml" ) end diff --git a/lib/fog/zerigo/requests/compute/create_host.rb b/lib/fog/zerigo/requests/compute/create_host.rb new file mode 100644 index 000000000..5e3a48d54 --- /dev/null +++ b/lib/fog/zerigo/requests/compute/create_host.rb @@ -0,0 +1,34 @@ +module Fog + module Zerigo + class Compute + class Real + + require 'fog/zerigo/parsers/compute/create_host' + + # Total number of zones hosted Zerigo for this account. It is the same value as provided + # in the X-Query-Count header in the list_zones API method + # + # ==== Returns + # * response<~Excon::Response>: + # * 'count'<~Integer> + def create_host( zone_id, hostname, host-type, data, options) + request( + :expects => 200, + :method => 'POST', + :parser => Fog::Parsers::Zerigo::Compute::CreateHost.new, + :path => "/api/1.1/zones/#{zone_id}/hosts.xml" + ) + end + + end + + class Mock + + def create_host( host_id) + Fog::Mock.not_implemented + end + + end + end + end +end diff --git a/lib/fog/zerigo/requests/compute/create_record.rb b/lib/fog/zerigo/requests/compute/create_record.rb deleted file mode 100644 index 12ced2726..000000000 --- a/lib/fog/zerigo/requests/compute/create_record.rb +++ /dev/null @@ -1,61 +0,0 @@ -module Fog - module Slicehost - class Compute - class Real - - require 'fog/slicehost/parsers/compute/create_record' - - # Create a new record in a DNS zone - or update an existing one - # ==== Parameters - # * record_type<~String> - type of DNS record to create (A, CNAME, etc) - # * zone_id<~Integer> - ID of the zone to update - # * name<~String> - host name this DNS record is for - # * data<~String> - data for the DNS record (ie for an A record, the IP address) - # * options<~Hash> - extra parameters that are not mandatory - # * ttl<~Integer> - time to live in seconds - # * active<~String> - whether this record is active or not ('Y' or 'N') - # * aux<~String> - extra data required by the record - # ==== Returns - # * response<~Excon::Response>: - # * body<~Hash>: - # * 'name'<~String> - as above - # * 'id'<~Integer> - Id of zone/domain - used in future API calls for this zone - # * 'ttl'<~Integer> - as above - # * 'data'<~String> - as above - # * 'active'<~String> - as above - # * 'aux'<~String> - as above - def create_record( record_type, zone_id, name, data, options = {}) - - optional_tags= '' - options.each { |option, value| - case option - when :ttl - optional_tags+= "#{value}" - when :active - optional_tags+= "#{value}" - when :aux - optional_tags+= "#{value}" - end - } - - request( - :body => %Q{#{record_type}#{zone_id}#{name}#{data}#{optional_tags}}, - :expects => 201, - :method => 'POST', - :parser => Fog::Parsers::Slicehost::Compute::CreateRecord.new, - :path => '/api/1.1./records.xml' - ) - end - - end - - class Mock - - def create_record( record_type, zone_id, name, data) - Fog::Mock.not_implemented - end - - end - end - end -end diff --git a/lib/fog/zerigo/requests/compute/create_zone.rb b/lib/fog/zerigo/requests/compute/create_zone.rb index bfb9b67e6..d8f58636b 100644 --- a/lib/fog/zerigo/requests/compute/create_zone.rb +++ b/lib/fog/zerigo/requests/compute/create_zone.rb @@ -15,6 +15,13 @@ module Fog # * ns1<~String> - required if ns_type == sec # * nx_ttl<~Integer> - # * slave_nameservers<~String> - required if ns_type == pri + # * axfr_ips<~String> - comma-separated list of IPs or IP blocks allowed to perform AXFRs + # * custom_nameservers<~String> - comma-separated list of custom nameservers + # * custom_ns<~String> - indicates if vanity (custom) nameservers are enabled for this domain + # * hostmaster<~String> - email of the DNS administrator or hostmaster + # * notes<~String> - notes about the domain + # * restrict_axfr<~String> - indicates if AXFR transfers should be restricted to IPs in axfr-ips + # * tag_list<~String> - List of all tags associated with this domain # # ==== Returns # * response<~Excon::Response>: @@ -34,6 +41,20 @@ module Fog optional_tags+= "#{value}" when :slave_nameservers optional_tags+= "#{value}" + when :axfr_ips + optional_tags+= "#{value}" + when :custom_nameservers + optional_tags+= "#{value}" + when :custom_ns + optional_tags+= "#{value}" + when :hostmaster + optional_tags+= "#{value}" + when :notes + optional_tags+= "#{value}" + when :restrict_axfr + optional_tags+= "#{value}" + when :tag_list + optional_tags+= "#{value}" end } diff --git a/lib/fog/zerigo/requests/compute/delete_record.rb b/lib/fog/zerigo/requests/compute/delete_host.rb similarity index 59% rename from lib/fog/zerigo/requests/compute/delete_record.rb rename to lib/fog/zerigo/requests/compute/delete_host.rb index fa6c9eb7d..0e427a815 100644 --- a/lib/fog/zerigo/requests/compute/delete_record.rb +++ b/lib/fog/zerigo/requests/compute/delete_host.rb @@ -1,19 +1,19 @@ module Fog - module Slicehost + module Zerigo class Compute class Real - # Delete a record from the specified DNS zone + # Delete a zone from Zerigo # ==== Parameters - # * record_id<~Integer> - Id of DNS record to delete + # * zone_id<~Integer> - Id of zone to delete # # ==== Returns # * response<~Excon::Response>: - HTTP status code will be result - def delete_record(record_id) + def delete_host(host_id) request( :expects => 200, :method => 'DELETE', - :path => "/api/1.1./records/#{record_id}.xml" + :path => "/api/1.1/hosts/#{host_id}.xml" ) end @@ -21,7 +21,7 @@ module Fog class Mock - def delete_record(record_id) + def delete_host(host_id) Fog::Mock.not_implemented end diff --git a/lib/fog/zerigo/requests/compute/delete_zone.rb b/lib/fog/zerigo/requests/compute/delete_zone.rb index d98dba4f1..260a42d1f 100644 --- a/lib/fog/zerigo/requests/compute/delete_zone.rb +++ b/lib/fog/zerigo/requests/compute/delete_zone.rb @@ -1,9 +1,9 @@ module Fog - module Slicehost + module Zerigo class Compute class Real - # Delete a zone from Slicehost's DNS + # Delete a zone from Zerigo # ==== Parameters # * zone_id<~Integer> - Id of zone to delete # @@ -13,7 +13,7 @@ module Fog request( :expects => 200, :method => 'DELETE', - :path => "/api/1.1./zones/#{zone_id}.xml" + :path => "/api/1.1/zones/#{zone_id}.xml" ) end diff --git a/lib/fog/zerigo/requests/compute/find_hosts.rb b/lib/fog/zerigo/requests/compute/find_hosts.rb new file mode 100644 index 000000000..a95643b33 --- /dev/null +++ b/lib/fog/zerigo/requests/compute/find_hosts.rb @@ -0,0 +1,48 @@ +module Fog + module Zerigo + class Compute + class Real + + require 'fog/zerigo/parsers/compute/find_hosts' + + # Get list of all DNS zones hosted on Slicehost (for this account) + # + # ==== Returns + # * response<~Excon::Response>: + # * body<~Array>: + # * 'origin'<~String> - domain name to host (ie example.com) + # * 'id'<~Integer> - Id of the zone + # * 'ttl'<~Integer> - TimeToLive (ttl) for the domain, in seconds (> 60) + # * 'active'<~String> - whether zone is active in Slicehost DNS server - 'Y' or 'N' + def find_hosts( fqdn, zone_id = nil) + if zone_id.nil? + #look for matching host across all zones + request( + :expects => 200, + :method => 'GET', + :parser => Fog::Parsers::Zerigo::Compute::FindHosts.new, + :path => "/api/1.1/hosts.xml" + ) + else + #look for hosts in a specific zone + request( + :expects => 200, + :method => 'GET', + :parser => Fog::Parsers::Zerigo::Compute::FindHosts.new, + :path => "/api/1.1/zones/#{zone_id}/hosts.xml" + ) + end + end + + end + + class Mock + + def find_hosts( fqdn, zone_id = nil) + Fog::Mock.not_implemented + end + + end + end + end +end diff --git a/lib/fog/zerigo/requests/compute/get_host.rb b/lib/fog/zerigo/requests/compute/get_host.rb new file mode 100644 index 000000000..1fb387262 --- /dev/null +++ b/lib/fog/zerigo/requests/compute/get_host.rb @@ -0,0 +1,34 @@ +module Fog + module Zerigo + class Compute + class Real + + require 'fog/zerigo/parsers/compute/get_hosts' + + # Total number of zones hosted Zerigo for this account. It is the same value as provided + # in the X-Query-Count header in the list_zones API method + # + # ==== Returns + # * response<~Excon::Response>: + # * 'count'<~Integer> + def get_host( host_id) + request( + :expects => 200, + :method => 'GET', + :parser => Fog::Parsers::Zerigo::Compute::GetZone.new, + :path => "/api/1.1/hosts/#{host_id}.xml" + ) + end + + end + + class Mock + + def get_host( host_id) + Fog::Mock.not_implemented + end + + end + end + end +end diff --git a/lib/fog/zerigo/requests/compute/get_record.rb b/lib/fog/zerigo/requests/compute/get_record.rb deleted file mode 100644 index aefb4f98b..000000000 --- a/lib/fog/zerigo/requests/compute/get_record.rb +++ /dev/null @@ -1,40 +0,0 @@ -module Fog - module Slicehost - class Compute - class Real - - require 'fog/slicehost/parsers/compute/get_record' - - # Get an individual DNS record from the specified zone - # - # ==== Returns - # * response<~Excon::Response>: - # * body<~Hash>: - # * 'record_type'<~String> - type of DNS record to create (A, CNAME, etc) - # * 'zone_id'<~Integer> - ID of the zone to update - # * 'name'<~String> - host name this DNS record is for - # * 'data'<~String> - data for the DNS record (ie for an A record, the IP address) - # * 'ttl'<~Integer> - time to live in seconds - # * 'active'<~String> - whether this record is active or not ('Y' or 'N') - # * 'aux'<~String> - extra data required by the record - def get_record( record_id) - request( - :expects => 200, - :method => 'GET', - :parser => Fog::Parsers::Slicehost::Compute::GetRecords.new, - :path => "/api/1.1/records/#{record_id}.xml" - ) - end - - end - - class Mock - - def get_record(record_id) - Fog::Mock.not_implemented - end - - end - end - end -end diff --git a/lib/fog/zerigo/requests/compute/get_records.rb b/lib/fog/zerigo/requests/compute/get_records.rb deleted file mode 100644 index a02e793a1..000000000 --- a/lib/fog/zerigo/requests/compute/get_records.rb +++ /dev/null @@ -1,41 +0,0 @@ -module Fog - module Slicehost - class Compute - class Real - - require 'fog/slicehost/parsers/compute/get_records' - - # Get all the DNS records across all the DNS zones for this account - # - # ==== Returns - # * response<~Excon::Response>: - # * body<~Array>: - # * 'addresses'<~Array> - Ip addresses for the slice - # * 'backup-id'<~Integer> - Id of backup slice was booted from - # * 'flavor_id'<~Integer> - Id of flavor slice was booted from - # * 'id'<~Integer> - Id of the slice - # * 'image-id'<~Integer> - Id of image slice was booted from - # * 'name'<~String> - Name of the slice - # * 'progress'<~Integer> - Progress of current action, in percentage - # * 'status'<~String> - Current status of the slice - def get_records - request( - :expects => 200, - :method => 'GET', - :parser => Fog::Parsers::Slicehost::Compute::GetRecords.new, - :path => "/api/1.1/records.xml" - ) - end - - end - - class Mock - - def get_records - Fog::Mock.not_implemented - end - - end - end - end -end diff --git a/lib/fog/zerigo/requests/compute/list_hosts.rb b/lib/fog/zerigo/requests/compute/list_hosts.rb new file mode 100644 index 000000000..be2ef64ce --- /dev/null +++ b/lib/fog/zerigo/requests/compute/list_hosts.rb @@ -0,0 +1,37 @@ +module Fog + module Zerigo + class Compute + class Real + + require 'fog/zerigo/parsers/compute/list_hosts' + + # Get list of all DNS zones hosted on Slicehost (for this account) + # + # ==== Returns + # * response<~Excon::Response>: + # * body<~Array>: + # * 'origin'<~String> - domain name to host (ie example.com) + # * 'id'<~Integer> - Id of the zone + # * 'ttl'<~Integer> - TimeToLive (ttl) for the domain, in seconds (> 60) + # * 'active'<~String> - whether zone is active in Slicehost DNS server - 'Y' or 'N' + def list_hosts( zone_id) + request( + :expects => 200, + :method => 'GET', + :parser => Fog::Parsers::Zerigo::Compute::ListHosts.new, + :path => "/api/1.1/zones/#{zone_id}/hosts.xml" + ) + end + + end + + class Mock + + def list_hosts( zone_id) + Fog::Mock.not_implemented + end + + end + end + end +end diff --git a/lib/fog/zerigo/requests/compute/update_host.rb b/lib/fog/zerigo/requests/compute/update_host.rb new file mode 100644 index 000000000..1e2dbe8c8 --- /dev/null +++ b/lib/fog/zerigo/requests/compute/update_host.rb @@ -0,0 +1,34 @@ +module Fog + module Zerigo + class Compute + class Real + + require 'fog/zerigo/parsers/compute/update_host' + + # Total number of zones hosted Zerigo for this account. It is the same value as provided + # in the X-Query-Count header in the list_zones API method + # + # ==== Returns + # * response<~Excon::Response>: + # * 'count'<~Integer> + def update_host( host_id, options = {}) + request( + :expects => 200, + :method => 'PUT', + :parser => Fog::Parsers::Zerigo::Compute::UpdateHost.new, + :path => "/api/1.1/hosts/#{host_id}.xml" + ) + end + + end + + class Mock + + def update_host( host_id, options = {}) + Fog::Mock.not_implemented + end + + end + end + end +end diff --git a/lib/fog/zerigo/requests/compute/update_zone.rb b/lib/fog/zerigo/requests/compute/update_zone.rb new file mode 100644 index 000000000..98de6415e --- /dev/null +++ b/lib/fog/zerigo/requests/compute/update_zone.rb @@ -0,0 +1,85 @@ +module Fog + module Zerigo + class Compute + class Real + + require 'fog/zerigo/parsers/compute/update_zone' + + # Update the parameters of a zone + # ==== Parameters + # + # * zone_id<~Integer> + # * options<~Hash> - optional paramaters + # * default_ttl<~Integer> + # * ns_type<~String> + # * ns1<~String> - required if ns_type == sec + # * nx_ttl<~Integer> - + # * slave_nameservers<~String> - required if ns_type == pri + # * axfr_ips<~String> - comma-separated list of IPs or IP blocks allowed to perform AXFRs + # * custom_nameservers<~String> - comma-separated list of custom nameservers + # * custom_ns<~String> - indicates if vanity (custom) nameservers are enabled for this domain + # * hostmaster<~String> - email of the DNS administrator or hostmaster + # * notes<~String> - notes about the domain + # * restrict_axfr<~String> - indicates if AXFR transfers should be restricted to IPs in axfr-ips + # * tag_list<~String> - List of all tags associated with this domain + # + # ==== Returns + # * response<~Excon::Response>: + # * body<~Hash>: + # * 'origin'<~String> - as above + # * 'id'<~Integer> - Id of zone/domain - used in future API calls + # * 'ttl'<~Integer> - as above + # * 'active'<~String> - as above + def update_zone( zone_id, options = {}) + + optional_tags= '' + options.each { |option, value| + case option + when :default_ttl + optional_tags+= "#{value}" + when :ns_type + optional_tags+= "#{value}" + when :ns1 + optional_tags+= "#{value}" + when :nx_ttl + optional_tags+= "#{value}" + when :slave_nameservers + optional_tags+= "#{value}" + when :axfr_ips + optional_tags+= "#{value}" + when :custom_nameservers + optional_tags+= "#{value}" + when :custom_ns + optional_tags+= "#{value}" + when :hostmaster + optional_tags+= "#{value}" + when :notes + optional_tags+= "#{value}" + when :restrict_axfr + optional_tags+= "#{value}" + when :tag_list + optional_tags+= "#{value}" + end + } + + request( + :body => %Q{#{domain}#{default_ttl}#{ns_type}#{optional_tags}}, + :expects => 201, + :method => 'POST', + :parser => Fog::Parsers::Slicehost::Compute::UpdateZone.new, + :path => '/api/1.1/zones.xml' + ) + end + + end + + class Mock + + def update_zone(domain, default_ttl, ns_type, options = {}) + Fog::Mock.not_implemented + end + + end + end + end +end