fog-dnsimple 0.0.1 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,46 @@
1
+ require 'fog/core/model'
2
+ require 'fog/dnsimple/models/dns/records'
3
+
4
+ module Fog
5
+ module DNS
6
+ class Dnsimple
7
+ class Zone < Fog::Model
8
+ identity :id
9
+
10
+ attribute :domain, :aliases => 'name'
11
+ attribute :created_at
12
+ attribute :updated_at
13
+
14
+ def destroy
15
+ service.delete_domain(identity)
16
+ true
17
+ end
18
+
19
+ def records
20
+ @records ||= begin
21
+ Fog::DNS::Dnsimple::Records.new(
22
+ :zone => self,
23
+ :service => service
24
+ )
25
+ end
26
+ end
27
+
28
+ def nameservers
29
+ %w(
30
+ ns1.dnsimple.com
31
+ ns2.dnsimple.com
32
+ ns3.dnsimple.com
33
+ ns4.dnsimple.com
34
+ )
35
+ end
36
+
37
+ def save
38
+ requires :domain
39
+ data = service.create_domain(domain).body["domain"]
40
+ merge_attributes(data)
41
+ true
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,25 @@
1
+ require 'fog/core/collection'
2
+ require 'fog/dnsimple/models/dns/zone'
3
+
4
+ module Fog
5
+ module DNS
6
+ class Dnsimple
7
+ class Zones < Fog::Collection
8
+ model Fog::DNS::Dnsimple::Zone
9
+
10
+ def all
11
+ clear
12
+ data = service.list_domains.body.map {|zone| zone['domain']}
13
+ load(data)
14
+ end
15
+
16
+ def get(zone_id)
17
+ data = service.get_domain(zone_id).body['domain']
18
+ new(data)
19
+ rescue Excon::Errors::NotFound
20
+ nil
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,62 @@
1
+ module Fog
2
+ module DNS
3
+ class Dnsimple
4
+ class Real
5
+ # Create a single domain in DNSimple in your account.
6
+ #
7
+ # ==== Parameters
8
+ # * name<~String> - domain name to host (ie example.com)
9
+ #
10
+ # ==== Returns
11
+ # * response<~Excon::Response>:
12
+ # * body<~Hash>:
13
+ # * 'domain'<~Hash> The representation of the domain.
14
+ def create_domain(name)
15
+ body = {
16
+ "domain" => {
17
+ "name" => name
18
+ }
19
+ }
20
+
21
+ request(
22
+ :body => Fog::JSON.encode(body),
23
+ :expects => 201,
24
+ :method => 'POST',
25
+ :path => "/domains"
26
+ )
27
+ end
28
+ end
29
+
30
+ class Mock
31
+ def create_domain(name)
32
+ body = {
33
+ "domain" => {
34
+ "id" => Fog::Mock.random_numbers(1).to_i,
35
+ "user_id" => 1,
36
+ "registrant_id" => nil,
37
+ "name" => name,
38
+ "unicode_name" => name,
39
+ "token" => "4fIFYWYiJayvL2tkf_mkBkqC4L+4RtYqDA",
40
+ "state" => "registered",
41
+ "language" => nil,
42
+ "lockable" => true,
43
+ "auto_renew" => nil,
44
+ "whois_protected" => false,
45
+ "record_count" => 0,
46
+ "service_count" => 0,
47
+ "expires_on" => Date.today + 365,
48
+ "created_at" => Time.now.iso8601,
49
+ "updated_at" => Time.now.iso8601,
50
+ }
51
+ }
52
+ self.data[:domains] << body
53
+
54
+ response = Excon::Response.new
55
+ response.status = 201
56
+ response.body = body
57
+ response
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,67 @@
1
+ module Fog
2
+ module DNS
3
+ class Dnsimple
4
+ class Real
5
+ # Create a new host in the specified zone
6
+ #
7
+ # ==== Parameters
8
+ # * domain<~String> - domain name or numeric ID
9
+ # * name<~String>
10
+ # * type<~String>
11
+ # * content<~String>
12
+ # * options<~Hash> - optional
13
+ # * priority<~Integer>
14
+ # * ttl<~Integer>
15
+ #
16
+ # ==== Returns
17
+ # * response<~Excon::Response>:
18
+ # * body<~Hash>:
19
+ # * 'record'<~Hash> The representation of the record.
20
+ def create_record(domain, name, type, content, options = {})
21
+ body = {
22
+ "record" => {
23
+ "name" => name,
24
+ "record_type" => type,
25
+ "content" => content
26
+ }
27
+ }
28
+
29
+ body["record"].merge!(options)
30
+
31
+ request(
32
+ :body => Fog::JSON.encode(body),
33
+ :expects => 201,
34
+ :method => 'POST',
35
+ :path => "/domains/#{domain}/records"
36
+ )
37
+ end
38
+ end
39
+
40
+ class Mock
41
+ def create_record(domain, name, type, content, options = {})
42
+ body = {
43
+ "record" => {
44
+ "id" => Fog::Mock.random_numbers(1).to_i,
45
+ "domain_id" => domain,
46
+ "name" => name,
47
+ "content" => content,
48
+ "ttl" => 3600,
49
+ "prio" => nil,
50
+ "record_type" => type,
51
+ "system_record" => nil,
52
+ "created_at" => Time.now.iso8601,
53
+ "updated_at" => Time.now.iso8601,
54
+ }.merge(options)
55
+ }
56
+ self.data[:records][domain] ||= []
57
+ self.data[:records][domain] << body
58
+
59
+ response = Excon::Response.new
60
+ response.status = 201
61
+ response.body = body
62
+ response
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,35 @@
1
+ module Fog
2
+ module DNS
3
+ class Dnsimple
4
+ class Real
5
+ # Delete the given domain from your account. You may use
6
+ # either the domain ID or the domain name.
7
+ #
8
+ # Please note that for domains which are registered with
9
+ # DNSimple this will not delete the domain from the registry.
10
+ #
11
+ # ==== Parameters
12
+ # * domain<~String> - domain name or numeric ID
13
+ #
14
+ def delete_domain(domain)
15
+ request(
16
+ :expects => 200,
17
+ :method => 'DELETE',
18
+ :path => "/domains/#{domain}"
19
+ )
20
+ end
21
+ end
22
+
23
+ class Mock
24
+ def delete_domain(name)
25
+ self.data[:records].delete name
26
+ self.data[:domains].reject! { |domain| domain["domain"]["name"] == name }
27
+
28
+ response = Excon::Response.new
29
+ response.status = 200
30
+ response
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,30 @@
1
+ module Fog
2
+ module DNS
3
+ class Dnsimple
4
+ class Real
5
+ # Delete the record with the given ID for the given domain.
6
+ #
7
+ # ==== Parameters
8
+ # * domain<~String> - domain name or numeric ID
9
+ # * record_id<~String>
10
+ def delete_record(domain, record_id)
11
+ request(
12
+ :expects => 200,
13
+ :method => "DELETE",
14
+ :path => "/domains/#{domain}/records/#{record_id}"
15
+ )
16
+ end
17
+ end
18
+
19
+ class Mock
20
+ def delete_record(domain, record_id)
21
+ self.data[:records][domain].reject! { |record| record["record"]["id"] == record_id }
22
+
23
+ response = Excon::Response.new
24
+ response.status = 200
25
+ response
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,39 @@
1
+ module Fog
2
+ module DNS
3
+ class Dnsimple
4
+ class Real
5
+ # Get the details for a specific domain in your account. You
6
+ # may pass either the domain numeric ID or the domain name
7
+ # itself.
8
+ #
9
+ # ==== Parameters
10
+ # * domain<~String> - domain name or numeric ID
11
+ #
12
+ # ==== Returns
13
+ # * response<~Excon::Response>:
14
+ # * body<~Hash>:
15
+ # * 'domain'<~Hash> The representation of the domain.
16
+ def get_domain(domain)
17
+ request(
18
+ :expects => 200,
19
+ :method => "GET",
20
+ :path => "/domains/#{domain}"
21
+ )
22
+ end
23
+ end
24
+
25
+ class Mock
26
+ def get_domain(id)
27
+ domain = self.data[:domains].find do |domain|
28
+ domain["domain"]["id"] == id || domain["domain"]["name"] == id
29
+ end
30
+
31
+ response = Excon::Response.new
32
+ response.status = 200
33
+ response.body = domain
34
+ response
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,49 @@
1
+ module Fog
2
+ module DNS
3
+ class Dnsimple
4
+ class Real
5
+ # Gets record from given domain.
6
+ #
7
+ # ==== Parameters
8
+ # * domain<~String> - domain name or numeric ID
9
+ # * record_id<~String>
10
+ #
11
+ # ==== Returns
12
+ # * response<~Excon::Response>:
13
+ # * body<~Hash>:
14
+ # * 'record'<~Hash> The representation of the record.
15
+ def get_record(domain, record_id)
16
+ request(
17
+ :expects => 200,
18
+ :method => "GET",
19
+ :path => "/domains/#{domain}/records/#{record_id}"
20
+ )
21
+ end
22
+ end
23
+
24
+ class Mock
25
+ def get_record(domain, record_id)
26
+ response = Excon::Response.new
27
+
28
+ if self.data[:records].key?(domain)
29
+ response.status = 200
30
+ response.body = self.data[:records][domain].find { |record| record["record"]["id"] == record_id }
31
+
32
+ if response.body.nil?
33
+ response.status = 404
34
+ response.body = {
35
+ "error" => "Couldn't find Record with id = #{record_id}"
36
+ }
37
+ end
38
+ else
39
+ response.status = 404
40
+ response.body = {
41
+ "error" => "Couldn't find Domain with name = #{domain}"
42
+ }
43
+ end
44
+ response
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,34 @@
1
+ module Fog
2
+ module DNS
3
+ class Dnsimple
4
+ class Real
5
+ # Get the details for a specific domain in your account. You
6
+ # may pass either the domain numeric ID or the domain name itself.
7
+ #
8
+ # ==== Parameters
9
+ #
10
+ # ==== Returns
11
+ # * response<~Excon::Response>:
12
+ # * body<~Hash>:
13
+ # * <~Array>:
14
+ # * 'domain'<~Hash> The representation of the domain.
15
+ def list_domains
16
+ request(
17
+ :expects => 200,
18
+ :method => 'GET',
19
+ :path => '/domains'
20
+ )
21
+ end
22
+ end
23
+
24
+ class Mock
25
+ def list_domains
26
+ response = Excon::Response.new
27
+ response.status = 200
28
+ response.body = self.data[:domains]
29
+ response
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,34 @@
1
+ module Fog
2
+ module DNS
3
+ class Dnsimple
4
+ class Real
5
+ # Get the list of records for the specific domain.
6
+ #
7
+ # ==== Parameters
8
+ # * domain<~String> - domain name or numeric ID
9
+ #
10
+ # ==== Returns
11
+ # * response<~Excon::Response>:
12
+ # * body<~Hash>:
13
+ # * <~Array>:
14
+ # * 'record'<~Hash> The representation of the record.
15
+ def list_records(domain)
16
+ request(
17
+ :expects => 200,
18
+ :method => "GET",
19
+ :path => "/domains/#{domain}/records"
20
+ )
21
+ end
22
+ end
23
+
24
+ class Mock
25
+ def list_records(domain)
26
+ response = Excon::Response.new
27
+ response.status = 200
28
+ response.body = self.data[:records][domain] || []
29
+ response
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,53 @@
1
+ module Fog
2
+ module DNS
3
+ class Dnsimple
4
+ class Real
5
+ # Update the given record for the given domain.
6
+ #
7
+ # ==== Parameters
8
+ # * domain<~String> - domain name or numeric ID
9
+ # * record_id<~String>
10
+ # * options<~Hash> - optional
11
+ # * type<~String>
12
+ # * content<~String>
13
+ # * priority<~Integer>
14
+ # * ttl<~Integer>
15
+ #
16
+ # ==== Returns
17
+ # * response<~Excon::Response>:
18
+ # * body<~Hash>:
19
+ # * 'record'<~Hash> The representation of the record.
20
+ def update_record(domain, record_id, options)
21
+ body = {
22
+ "record" => options
23
+ }
24
+
25
+ request(
26
+ :body => Fog::JSON.encode(body),
27
+ :expects => 200,
28
+ :method => "PUT",
29
+ :path => "/domains/#{domain}/records/#{record_id}"
30
+ )
31
+ end
32
+ end
33
+
34
+ class Mock
35
+ def update_record(domain, record_id, options)
36
+ record = self.data[:records][domain].find { |record| record["record"]["id"] == record_id }
37
+ response = Excon::Response.new
38
+
39
+ if record.nil?
40
+ response.status = 400
41
+ else
42
+ response.status = 200
43
+ record["record"].merge!(options)
44
+ record["record"]["updated_at"] = Time.now.iso8601
45
+ response.body = record
46
+ end
47
+
48
+ response
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end