fog-softlayer 0.0.8 → 0.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +8 -8
- data/CONTRIBUTORS.md +2 -0
- data/README.md +3 -3
- data/examples/dns.md +93 -0
- data/examples/storage.md +3 -2
- data/lib/fog/softlayer.rb +1 -0
- data/lib/fog/softlayer/core.rb +1 -0
- data/lib/fog/softlayer/dns.rb +162 -0
- data/lib/fog/softlayer/models/dns/domain.rb +53 -0
- data/lib/fog/softlayer/models/dns/domains.rb +57 -0
- data/lib/fog/softlayer/models/dns/record.rb +68 -0
- data/lib/fog/softlayer/models/dns/records.rb +32 -0
- data/lib/fog/softlayer/requests/dns/create_domain.rb +79 -0
- data/lib/fog/softlayer/requests/dns/create_record.rb +49 -0
- data/lib/fog/softlayer/requests/dns/delete_domain.rb +34 -0
- data/lib/fog/softlayer/requests/dns/delete_record.rb +38 -0
- data/lib/fog/softlayer/requests/dns/get_domain.rb +33 -0
- data/lib/fog/softlayer/requests/dns/get_domain_by_name.rb +36 -0
- data/lib/fog/softlayer/requests/dns/get_domains.rb +28 -0
- data/lib/fog/softlayer/requests/dns/get_records.rb +33 -0
- data/lib/fog/softlayer/requests/dns/update_record.rb +49 -0
- data/lib/fog/softlayer/version.rb +1 -1
- data/tests/helper.rb +3 -0
- data/tests/softlayer/models/dns/domain_tests.rb +48 -0
- data/tests/softlayer/models/dns/domains_tests.rb +72 -0
- data/tests/softlayer/models/dns/record_tests.rb +55 -0
- data/tests/softlayer/models/dns/records_tests.rb +27 -0
- metadata +21 -1
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
NDIyZDM4MDM4OTQzOGJhNmFlNDc1Mzc0ZDY2YTRkYzg1OThiNTlmMQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ZDE3ZmZlY2FmMTlkMjA0ZjYxZjc1YjI2NzU1ZmNlYmFhYzdhYTdmNQ==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
YzE4MzU0MzliMWQ0ZWJmMGEyNjg5ZmZjNzlkM2Y0NjlkMzIxODgzZmJjNzQz
|
10
|
+
YjJhMjZhZmM4ZjExMjI3ZGUzYjM3N2Q4Y2Q5MWZhNDBmY2Y0NTMwNjM0ZThi
|
11
|
+
MmYxOTNmN2Y0MjI4NTcwMWIwOWU0ODQyNjlhNTA2NGJmNGRmNDU=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
NDdhY2IyMGRmMDFiNzYwZTkyMTkzNThkMGVjYjc2NGQ1NDBlNjM1NmZlMTg0
|
14
|
+
ZWIyMWFhMWQyMTY5NTg3ZDQwZGE4MDM2Yzc0ZjA2MzEwMzExYzFkMmFjNWU2
|
15
|
+
OGFlMWM5MTAxZDJmMzgyOTY4OGJlN2Q1YjJkNjdlYjJhNTYzYmY=
|
data/CONTRIBUTORS.md
ADDED
data/README.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
### `fog-softlayer` - SoftLayer module for fog (The Ruby cloud services library).
|
2
|
-
[](http://badge.fury.io/rb/
|
3
|
-
[](https://travis-ci.org/softlayer/
|
4
|
-
[](https://gemnasium.com/softlayer/
|
2
|
+
[](http://badge.fury.io/rb/fog-softlayer)
|
3
|
+
[](https://travis-ci.org/softlayer/fog-softlayer)
|
4
|
+
[](https://gemnasium.com/softlayer/fog-softlayer)
|
5
5
|
|
6
6
|
This gem is a module for the `fog` gem that allows you to manage resources in
|
7
7
|
the SoftLayer Cloud.
|
data/examples/dns.md
ADDED
@@ -0,0 +1,93 @@
|
|
1
|
+
### DNS Examples
|
2
|
+
|
3
|
+
These examples all assume you have `~/.fog` which contains the following
|
4
|
+
|
5
|
+
|
6
|
+
```yaml
|
7
|
+
:softlayer_username: example-username
|
8
|
+
:softlayer_api_key: 1a1a1a1a1a1a1a1a1a11a1a1a1a1a1a1a1a1a1
|
9
|
+
```
|
10
|
+
|
11
|
+
#### Create a connection to SoftLayer DNS Service
|
12
|
+
|
13
|
+
```ruby
|
14
|
+
require 'fog/softlayer'
|
15
|
+
@sl = Fog::DNS[:softlayer]
|
16
|
+
```
|
17
|
+
|
18
|
+
1. Create Operations
|
19
|
+
|
20
|
+
* Create Domain
|
21
|
+
|
22
|
+
```ruby
|
23
|
+
@domain = @sl.domains.create('yourdomain.com')
|
24
|
+
```
|
25
|
+
|
26
|
+
* Create Record
|
27
|
+
|
28
|
+
```ruby
|
29
|
+
record = {
|
30
|
+
'data' => '127.0.0.1',
|
31
|
+
'host' => '@',
|
32
|
+
'type' => 'a'
|
33
|
+
}
|
34
|
+
@domain.create_record(record)
|
35
|
+
```
|
36
|
+
|
37
|
+
1. Read Operations
|
38
|
+
|
39
|
+
* List all domains
|
40
|
+
|
41
|
+
```ruby
|
42
|
+
@domains = @sl.domains.all
|
43
|
+
@domain = @domains.first
|
44
|
+
```
|
45
|
+
|
46
|
+
* Get specific domain by id
|
47
|
+
|
48
|
+
```ruby
|
49
|
+
@domain = @sl.domains.get(123456)
|
50
|
+
```
|
51
|
+
|
52
|
+
* Get specific domain by name
|
53
|
+
|
54
|
+
```ruby
|
55
|
+
@domain = @sl.domains.get_by_name('yourdomain.com')
|
56
|
+
```
|
57
|
+
|
58
|
+
* Get Domains Records
|
59
|
+
|
60
|
+
```ruby
|
61
|
+
@domain = @sl.domains.get(123456)
|
62
|
+
@domain.records
|
63
|
+
```
|
64
|
+
|
65
|
+
1. Update Operations
|
66
|
+
|
67
|
+
After this point we consider you have a Fog::DNS::Softlayer::Domain on @domain variable
|
68
|
+
|
69
|
+
* Update Record Entry
|
70
|
+
|
71
|
+
```ruby
|
72
|
+
@domain.records
|
73
|
+
@domain.records[3].value = "192.168.0.3"
|
74
|
+
@domain.records[3].save
|
75
|
+
```
|
76
|
+
|
77
|
+
1. Destroy Operations
|
78
|
+
|
79
|
+
After this point we consider you have a Fog::DNS::Softlayer::Domain on @domain variable
|
80
|
+
|
81
|
+
* Destroy Domain
|
82
|
+
|
83
|
+
```ruby
|
84
|
+
@domain = @sl.domains.get(123456)
|
85
|
+
@domain.destroy
|
86
|
+
```
|
87
|
+
|
88
|
+
* Destroy Record
|
89
|
+
|
90
|
+
```ruby
|
91
|
+
@domain = @sl.domains.get(123456)
|
92
|
+
@domain.records.last.destroy
|
93
|
+
```
|
data/examples/storage.md
CHANGED
@@ -42,7 +42,7 @@ These examples all assume you have `~/.fog` which contains the following
|
|
42
42
|
```ruby
|
43
43
|
dir = @sl.directories.get('a-container')
|
44
44
|
# Pass a string.
|
45
|
-
dir.files.create(:key => 'data.txt', :body => 'The quick brown fox jumps over the lazy dog.
|
45
|
+
dir.files.create(:key => 'data.txt', :body => 'The quick brown fox jumps over the lazy dog.')
|
46
46
|
# From a file.
|
47
47
|
dir.files.create(:key => 'file-data.txt', :body => File.open('/path/to/file-data.txt')
|
48
48
|
```
|
@@ -91,6 +91,7 @@ These examples all assume you have `~/.fog` which contains the following
|
|
91
91
|
```ruby
|
92
92
|
file = @sl.directories.get('a-container').files.get('data.txt')
|
93
93
|
file.url(Time.now + 300) # url expires in 5 minutes
|
94
|
+
# => "https://dal05.objectstorage.softlayer.net:443/v1/AUTH_1a1a1a1a-1a1a-1a1a-1a1a-1a1a1a1a1a1a/a-container/data.txt?temp_url_sig=1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a&temp_url_expires=1401901023"
|
94
95
|
```
|
95
96
|
|
96
97
|
1. Delete files/objects from a directory/container.
|
@@ -104,4 +105,4 @@ These examples all assume you have `~/.fog` which contains the following
|
|
104
105
|
dir.destroy
|
105
106
|
```
|
106
107
|
|
107
|
-
|
108
|
+
|
data/lib/fog/softlayer.rb
CHANGED
data/lib/fog/softlayer/core.rb
CHANGED
@@ -0,0 +1,162 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Celso Fernandes (<fernandes@zertico.com>)
|
3
|
+
# © Copyright IBM Corporation 2014.
|
4
|
+
#
|
5
|
+
# LICENSE: MIT (http://opensource.org/licenses/MIT)
|
6
|
+
#
|
7
|
+
|
8
|
+
require 'fog/softlayer/core'
|
9
|
+
require 'fog/softlayer/compute/shared'
|
10
|
+
|
11
|
+
module Fog
|
12
|
+
module DNS
|
13
|
+
class Softlayer < Fog::Service
|
14
|
+
class MissingRequiredParameter < Fog::Errors::Error; end
|
15
|
+
|
16
|
+
# Client credentials
|
17
|
+
requires :softlayer_username, :softlayer_api_key
|
18
|
+
|
19
|
+
# Excon connection settings
|
20
|
+
recognizes :softlayer_api_url
|
21
|
+
recognizes :softlayer_default_domain
|
22
|
+
|
23
|
+
|
24
|
+
model_path 'fog/softlayer/models/dns'
|
25
|
+
collection :domains
|
26
|
+
model :domain
|
27
|
+
collection :records
|
28
|
+
model :record
|
29
|
+
|
30
|
+
request_path 'fog/softlayer/requests/dns'
|
31
|
+
request :create_domain
|
32
|
+
request :create_record
|
33
|
+
request :delete_domain
|
34
|
+
request :delete_record
|
35
|
+
request :get_domain
|
36
|
+
request :get_domain_by_name
|
37
|
+
request :get_domains
|
38
|
+
request :get_records
|
39
|
+
request :update_record
|
40
|
+
|
41
|
+
# The Mock Service allows you to run a fake instance of the Service
|
42
|
+
# which makes no real connections.
|
43
|
+
#
|
44
|
+
#
|
45
|
+
class Mock
|
46
|
+
attr_accessor :default_domain
|
47
|
+
include Fog::Softlayer::Compute::Shared
|
48
|
+
|
49
|
+
def initialize(args)
|
50
|
+
@softlayer_domains = []
|
51
|
+
super(args)
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
|
56
|
+
##
|
57
|
+
# Makes real connections to Softlayer.
|
58
|
+
#
|
59
|
+
class Real
|
60
|
+
attr_accessor :default_domain
|
61
|
+
include Fog::Softlayer::Compute::Shared
|
62
|
+
|
63
|
+
# Sends the real request to the real SoftLayer service.
|
64
|
+
#
|
65
|
+
# @param [String] service
|
66
|
+
# ...ayer.com/rest/v3/Softlayer_Service_Name...
|
67
|
+
# @param path [String]
|
68
|
+
# ...ayer.com/rest/v3/Softlayer_Service_Name/path.json
|
69
|
+
# @param [Hash] options
|
70
|
+
# @option options [Array<Hash>] :body
|
71
|
+
# HTTP request body parameters
|
72
|
+
# @option options [String] :softlayer_api_url
|
73
|
+
# Override the default (or configured) API endpoint
|
74
|
+
# @option options [String] :softlayer_username
|
75
|
+
# Email or user identifier for user based authentication
|
76
|
+
# @option options [String] :softlayer_api_key
|
77
|
+
# Password for user based authentication
|
78
|
+
# @return [Excon::Response]
|
79
|
+
def request(service, path, options={})
|
80
|
+
|
81
|
+
# default HTTP method to get if not passed
|
82
|
+
http_method = options[:http_method] || :get
|
83
|
+
# set the target base url
|
84
|
+
@request_url = options[:softlayer_api_url] || Fog::Softlayer::SL_API_URL
|
85
|
+
# tack on the username and password
|
86
|
+
credentialize_url(@credentials[:username], @credentials[:api_key])
|
87
|
+
# set the SoftLayer Service name
|
88
|
+
set_sl_service(service)
|
89
|
+
# set the request path (known as the "method" in SL docs)
|
90
|
+
set_sl_path(path)
|
91
|
+
# set the query params if any
|
92
|
+
|
93
|
+
|
94
|
+
# build request params
|
95
|
+
params = { :headers => user_agent_header }
|
96
|
+
params[:headers]['Content-Type'] = 'application/json'
|
97
|
+
params[:expects] = options[:expected] || [200,201]
|
98
|
+
params[:body] = Fog::JSON.encode({:parameters => [ options[:body] ]}) unless options[:body].nil?
|
99
|
+
params[:query] = options[:query] unless options[:query].nil?
|
100
|
+
|
101
|
+
# initialize connection object
|
102
|
+
@connection = Fog::Core::Connection.new(@request_url, false, params)
|
103
|
+
|
104
|
+
# send it
|
105
|
+
response = @connection.request(:method => http_method)
|
106
|
+
|
107
|
+
# decode it
|
108
|
+
response.body = Fog::JSON.decode(response.body)
|
109
|
+
response
|
110
|
+
end
|
111
|
+
|
112
|
+
private
|
113
|
+
|
114
|
+
def credentialize_url(username, apikey)
|
115
|
+
@request_url = "https://#{username}:#{apikey}@#{@request_url}"
|
116
|
+
end
|
117
|
+
|
118
|
+
##
|
119
|
+
# Prepend "SoftLayer_" to the service name and Snake_Camel_Case the string before appending it to the @request_url.
|
120
|
+
#
|
121
|
+
# On DNS we have the service: SoftLayer_Dns_Domain_ResourceRecord
|
122
|
+
# As it does NOT follow any pattern, you can specify
|
123
|
+
# :dns_domain_resourceRecord
|
124
|
+
# So set_sl_service will NOT change you service name case (just first letters), pay attention
|
125
|
+
def set_sl_service(service)
|
126
|
+
service = "SoftLayer_" << service.to_s.gsub(/^softlayer_/i, '').split('_').map{|i| i[0].upcase + i[1..-1]}.join('_')
|
127
|
+
@request_url += "/#{service}"
|
128
|
+
end
|
129
|
+
|
130
|
+
##
|
131
|
+
# Try to smallCamelCase the path before appending it to the @request_url
|
132
|
+
#
|
133
|
+
def set_sl_path(path)
|
134
|
+
path = path.to_s.underscore.camelize
|
135
|
+
@request_url += "/#{path}.json"
|
136
|
+
end
|
137
|
+
|
138
|
+
def user_agent_header
|
139
|
+
{"User-Agent" => "Fog SoftLayer Adapter #{Fog::Softlayer::VERSION}"}
|
140
|
+
end
|
141
|
+
|
142
|
+
end
|
143
|
+
|
144
|
+
end
|
145
|
+
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
## some helpers for some dirty work
|
150
|
+
class String
|
151
|
+
def camelize
|
152
|
+
self.split('_').inject([]){ |buffer,e| buffer.push(buffer.empty? ? e : e.capitalize) }.join
|
153
|
+
end
|
154
|
+
|
155
|
+
def underscore
|
156
|
+
self.gsub(/::/, '/').
|
157
|
+
gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
|
158
|
+
gsub(/([a-z\d])([A-Z])/,'\1_\2').
|
159
|
+
tr("-", "_").
|
160
|
+
downcase
|
161
|
+
end
|
162
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Celso Fernandes (<fernandes@zertico.com>)
|
3
|
+
# © Copyright IBM Corporation 2014.
|
4
|
+
#
|
5
|
+
# LICENSE: MIT (http://opensource.org/licenses/MIT)
|
6
|
+
#
|
7
|
+
require 'fog/core/model'
|
8
|
+
require 'fog/softlayer/models/dns/records'
|
9
|
+
|
10
|
+
module Fog
|
11
|
+
module DNS
|
12
|
+
class Softlayer
|
13
|
+
|
14
|
+
class Domain < Fog::Model
|
15
|
+
|
16
|
+
identity :id, :type => :integer
|
17
|
+
attribute :name, :aliases => 'domain'
|
18
|
+
attribute :serial, :type => :integer
|
19
|
+
|
20
|
+
# Times
|
21
|
+
attribute :updated_at, :aliases => 'updateDate', :type => :time
|
22
|
+
|
23
|
+
def initialize(attributes = {})
|
24
|
+
super(attributes)
|
25
|
+
end
|
26
|
+
|
27
|
+
def records(reload = false)
|
28
|
+
@records = nil if reload
|
29
|
+
@records ||= begin
|
30
|
+
Fog::DNS::Softlayer::Records.new(
|
31
|
+
:domain => self,
|
32
|
+
:service => service
|
33
|
+
)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def create_record(opts = {})
|
38
|
+
opts.merge!({:domain_id => self.id, :service => service})
|
39
|
+
record = Fog::DNS::Softlayer::Record.new(opts)
|
40
|
+
record.save
|
41
|
+
records(true)
|
42
|
+
record
|
43
|
+
end
|
44
|
+
|
45
|
+
def destroy
|
46
|
+
requires :id
|
47
|
+
response = service.delete_domain self.id
|
48
|
+
response.body
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Celso Fernandes (<fernandes@zertico.com>)
|
3
|
+
# © Copyright IBM Corporation 2014.
|
4
|
+
#
|
5
|
+
# LICENSE: MIT (http://opensource.org/licenses/MIT)
|
6
|
+
#
|
7
|
+
require 'fog/core/collection'
|
8
|
+
require 'fog/softlayer/models/compute/server'
|
9
|
+
|
10
|
+
module Fog
|
11
|
+
module DNS
|
12
|
+
class Softlayer
|
13
|
+
|
14
|
+
class Domains < Fog::Collection
|
15
|
+
|
16
|
+
model Fog::DNS::Softlayer::Domain
|
17
|
+
|
18
|
+
def all
|
19
|
+
data = service.get_domains.body
|
20
|
+
load(data)
|
21
|
+
end
|
22
|
+
|
23
|
+
def get(identifier)
|
24
|
+
return nil if identifier.nil? || identifier == ""
|
25
|
+
response = service.get_domain(identifier)
|
26
|
+
data = response.body
|
27
|
+
new.merge_attributes(data)
|
28
|
+
rescue Excon::Errors::NotFound
|
29
|
+
nil
|
30
|
+
end
|
31
|
+
|
32
|
+
def get_by_name(name)
|
33
|
+
return nil if name.nil? || name == ""
|
34
|
+
response = service.get_domain_by_name(name)
|
35
|
+
data = response.body
|
36
|
+
return false if data.empty?
|
37
|
+
new.merge_attributes(data.first)
|
38
|
+
rescue Excon::Errors::NotFound
|
39
|
+
nil
|
40
|
+
end
|
41
|
+
|
42
|
+
|
43
|
+
def create(name)
|
44
|
+
template_object = {
|
45
|
+
'name' => name,
|
46
|
+
'resourceRecords' => {},
|
47
|
+
}
|
48
|
+
response = service.create_domain(template_object)
|
49
|
+
data = response.body
|
50
|
+
new.merge_attributes(data)
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Celso Fernandes (<fernandes@zertico.com>)
|
3
|
+
# © Copyright IBM Corporation 2014.
|
4
|
+
#
|
5
|
+
# LICENSE: MIT (http://opensource.org/licenses/MIT)
|
6
|
+
#
|
7
|
+
require 'fog/core/model'
|
8
|
+
|
9
|
+
module Fog
|
10
|
+
module DNS
|
11
|
+
class Softlayer
|
12
|
+
class Record < Fog::Model
|
13
|
+
identity :id
|
14
|
+
attribute :domain_id, :aliases => "domainId"
|
15
|
+
attribute :name, :aliases => "host"
|
16
|
+
attribute :value, :aliases => "data"
|
17
|
+
attribute :ttl
|
18
|
+
attribute :priority, :aliases => "mxPriority"
|
19
|
+
attribute :type
|
20
|
+
attribute :expire
|
21
|
+
attribute :minimum
|
22
|
+
attribute :refresh
|
23
|
+
attribute :retry
|
24
|
+
|
25
|
+
def initialize(attributes={})
|
26
|
+
self.domain_id = attributes[:domain_id]
|
27
|
+
super(attributes)
|
28
|
+
end
|
29
|
+
|
30
|
+
def destroy
|
31
|
+
response = service.delete_record(identity)
|
32
|
+
response.body
|
33
|
+
end
|
34
|
+
|
35
|
+
def save
|
36
|
+
requires :name, :type, :value, :domain_id
|
37
|
+
opts = generate_template
|
38
|
+
|
39
|
+
# to save or to update, thats the question
|
40
|
+
if id.nil?
|
41
|
+
data = service.create_record(opts)
|
42
|
+
merge_attributes(data.body)
|
43
|
+
else
|
44
|
+
data = service.update_record(self.id, opts)
|
45
|
+
end
|
46
|
+
true
|
47
|
+
end
|
48
|
+
|
49
|
+
private
|
50
|
+
def generate_template
|
51
|
+
template = {}
|
52
|
+
template[:host] = self.name
|
53
|
+
template[:data] = self.value
|
54
|
+
template[:type] = self.type
|
55
|
+
template[:domainId] = self.domain_id
|
56
|
+
|
57
|
+
template[:ttl] = self.ttl if self.ttl
|
58
|
+
template[:mxPriority] = self.priority if self.priority
|
59
|
+
template[:expire] = self.expire if self.expire
|
60
|
+
template[:minimum] = self.minimum if self.minimum
|
61
|
+
template[:refresh] = self.refresh if self.refresh
|
62
|
+
template[:retry] = self.retry if self.retry
|
63
|
+
template
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Celso Fernandes (<fernandes@zertico.com>)
|
3
|
+
# © Copyright IBM Corporation 2014.
|
4
|
+
#
|
5
|
+
# LICENSE: MIT (http://opensource.org/licenses/MIT)
|
6
|
+
#
|
7
|
+
require 'fog/core/collection'
|
8
|
+
require 'fog/softlayer/models/dns/record'
|
9
|
+
|
10
|
+
module Fog
|
11
|
+
module DNS
|
12
|
+
class Softlayer
|
13
|
+
class Records < Fog::Collection
|
14
|
+
attribute :domain
|
15
|
+
|
16
|
+
model Fog::DNS::Softlayer::Record
|
17
|
+
|
18
|
+
def all
|
19
|
+
requires :domain
|
20
|
+
clear
|
21
|
+
data = service.get_records(domain.id).body
|
22
|
+
load(data)
|
23
|
+
end
|
24
|
+
|
25
|
+
def new(attributes = {})
|
26
|
+
requires :domain
|
27
|
+
super({ :domain => domain }.merge!(attributes))
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Celso Fernandes (<fernandes@zertico.com>)
|
3
|
+
# © Copyright IBM Corporation 2014.
|
4
|
+
#
|
5
|
+
# LICENSE: MIT (http://opensource.org/licenses/MIT)
|
6
|
+
#
|
7
|
+
module Fog
|
8
|
+
module DNS
|
9
|
+
class Softlayer
|
10
|
+
|
11
|
+
class Mock
|
12
|
+
def create_domain(opts)
|
13
|
+
response = Excon::Response.new
|
14
|
+
updated_at = Time.now
|
15
|
+
domain_id = Fog::Mock.random_numbers(7)
|
16
|
+
body = {
|
17
|
+
:id => domain_id,
|
18
|
+
:name => opts["name"],
|
19
|
+
:serial => updated_at.strftime("%Y%m%d")+"00",
|
20
|
+
:updated_at => updated_at,
|
21
|
+
:resourceRecords => [
|
22
|
+
{
|
23
|
+
"data"=>"ns1."+opts["name"]+".",
|
24
|
+
"domainId"=>domain_id,
|
25
|
+
"expire"=>604800,
|
26
|
+
"host"=>"@",
|
27
|
+
"id"=>Fog::Mock.random_numbers(8),
|
28
|
+
"minimum"=>3600,
|
29
|
+
"mxPriority"=>nil,
|
30
|
+
"refresh"=>3600,
|
31
|
+
"responsiblePerson"=>"admin."+opts["name"]+".",
|
32
|
+
"retry"=>300,
|
33
|
+
"ttl"=>86400,
|
34
|
+
"type"=>"SOA",
|
35
|
+
},
|
36
|
+
{
|
37
|
+
"data"=>"ns1.softlayer.com.",
|
38
|
+
"domainId"=>domain_id,
|
39
|
+
"expire"=>nil,
|
40
|
+
"host"=>"@",
|
41
|
+
"id"=>Fog::Mock.random_numbers(8),
|
42
|
+
"minimum"=>nil,
|
43
|
+
"mxPriority"=>nil,
|
44
|
+
"refresh"=>nil,
|
45
|
+
"retry"=>nil,
|
46
|
+
"ttl"=>86400,
|
47
|
+
"type"=>"NS",
|
48
|
+
},
|
49
|
+
{
|
50
|
+
"data"=>"ns2.softlayer.com.",
|
51
|
+
"domainId"=>domain_id,
|
52
|
+
"expire"=>nil,
|
53
|
+
"host"=>"@",
|
54
|
+
"id"=>Fog::Mock.random_numbers(8),
|
55
|
+
"minimum"=>nil,
|
56
|
+
"mxPriority"=>nil,
|
57
|
+
"refresh"=>nil,
|
58
|
+
"retry"=>nil,
|
59
|
+
"ttl"=>86400,
|
60
|
+
"type"=>"NS",
|
61
|
+
}
|
62
|
+
]
|
63
|
+
}
|
64
|
+
response.body = body
|
65
|
+
@softlayer_domains << body
|
66
|
+
response.status = 200
|
67
|
+
response
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
71
|
+
|
72
|
+
class Real
|
73
|
+
def create_domain(opts)
|
74
|
+
request(:dns_domain, :create_object, :body => opts, :http_method => :POST)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Celso Fernandes (<fernandes@zertico.com>)
|
3
|
+
# © Copyright IBM Corporation 2014.
|
4
|
+
#
|
5
|
+
# LICENSE: MIT (http://opensource.org/licenses/MIT)
|
6
|
+
#
|
7
|
+
module Fog
|
8
|
+
module DNS
|
9
|
+
class Softlayer
|
10
|
+
|
11
|
+
class Mock
|
12
|
+
def create_record(opts)
|
13
|
+
new_record = {
|
14
|
+
"id" => Fog::Mock.random_numbers(8),
|
15
|
+
"data" => opts[:data],
|
16
|
+
"domainId" => opts[:domainId],
|
17
|
+
"host" => opts[:host],
|
18
|
+
"type" => opts[:type],
|
19
|
+
"minimum" => nil,
|
20
|
+
"expire" => nil,
|
21
|
+
"mxPriority" => nil,
|
22
|
+
"refresh" => nil,
|
23
|
+
"responsiblePerson" => nil,
|
24
|
+
"retry" => nil,
|
25
|
+
"ttl" => nil,
|
26
|
+
}
|
27
|
+
@softlayer_domains.each do |domain|
|
28
|
+
if domain[:id].to_i == opts[:domainId]
|
29
|
+
domain[:serial] = domain[:serial].to_i + 1
|
30
|
+
domain[:resourceRecords] << new_record
|
31
|
+
response = Excon::Response.new
|
32
|
+
response.body = new_record
|
33
|
+
response.status = 200
|
34
|
+
return response
|
35
|
+
end
|
36
|
+
end
|
37
|
+
raise Excon::Errors::NotFound
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
|
42
|
+
class Real
|
43
|
+
def create_record(opts)
|
44
|
+
request(:dns_domain_resourceRecord, :create_object, :body => opts, :http_method => :POST)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Celso Fernandes (<fernandes@zertico.com>)
|
3
|
+
# © Copyright IBM Corporation 2014.
|
4
|
+
#
|
5
|
+
# LICENSE: MIT (http://opensource.org/licenses/MIT)
|
6
|
+
#
|
7
|
+
module Fog
|
8
|
+
module DNS
|
9
|
+
class Softlayer
|
10
|
+
|
11
|
+
class Mock
|
12
|
+
def delete_domain(id)
|
13
|
+
@softlayer_domains.each do |domain|
|
14
|
+
if domain[:id].to_i == id
|
15
|
+
@softlayer_domains.delete(domain)
|
16
|
+
response = Excon::Response.new
|
17
|
+
response.body = true
|
18
|
+
response.status = 200
|
19
|
+
return response
|
20
|
+
end
|
21
|
+
end
|
22
|
+
raise Excon::Errors::NotFound
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
class Real
|
28
|
+
def delete_domain(id)
|
29
|
+
request(:dns_domain, id.to_s, :http_method => :DELETE)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Celso Fernandes (<fernandes@zertico.com>)
|
3
|
+
# © Copyright IBM Corporation 2014.
|
4
|
+
#
|
5
|
+
# LICENSE: MIT (http://opensource.org/licenses/MIT)
|
6
|
+
#
|
7
|
+
module Fog
|
8
|
+
module DNS
|
9
|
+
class Softlayer
|
10
|
+
|
11
|
+
class Mock
|
12
|
+
def delete_record(id)
|
13
|
+
# Get the domain
|
14
|
+
@domain = @softlayer_domains.each do |domain|
|
15
|
+
domain[:resourceRecords].each do |record|
|
16
|
+
if record["id"] == id
|
17
|
+
domain[:serial] = domain[:serial] + 1
|
18
|
+
domain[:resourceRecords].delete(record)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
response = Excon::Response.new
|
24
|
+
response.body = true
|
25
|
+
response.status = 200
|
26
|
+
response
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
class Real
|
32
|
+
def delete_record(id)
|
33
|
+
request(:dns_domain_resourceRecord, id.to_s, :http_method => :DELETE)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Celso Fernandes (<fernandes@zertico.com>)
|
3
|
+
# © Copyright IBM Corporation 2014.
|
4
|
+
#
|
5
|
+
# LICENSE: MIT (http://opensource.org/licenses/MIT)
|
6
|
+
#
|
7
|
+
module Fog
|
8
|
+
module DNS
|
9
|
+
class Softlayer
|
10
|
+
|
11
|
+
class Mock
|
12
|
+
def get_domain(id)
|
13
|
+
@softlayer_domains.each do |domain|
|
14
|
+
if domain[:id].to_i == id
|
15
|
+
response = Excon::Response.new
|
16
|
+
response.body = domain
|
17
|
+
response.status = 200
|
18
|
+
return response
|
19
|
+
end
|
20
|
+
end
|
21
|
+
raise Excon::Errors::NotFound
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
class Real
|
27
|
+
def get_domain(id)
|
28
|
+
request(:dns_domain, id)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Celso Fernandes (<fernandes@zertico.com>)
|
3
|
+
# © Copyright IBM Corporation 2014.
|
4
|
+
#
|
5
|
+
# LICENSE: MIT (http://opensource.org/licenses/MIT)
|
6
|
+
#
|
7
|
+
module Fog
|
8
|
+
module DNS
|
9
|
+
class Softlayer
|
10
|
+
|
11
|
+
class Mock
|
12
|
+
def get_domain_by_name(name)
|
13
|
+
@softlayer_domains.each do |domain|
|
14
|
+
if domain[:name] == name
|
15
|
+
response = Excon::Response.new
|
16
|
+
response.body = [ domain ]
|
17
|
+
response.status = 200
|
18
|
+
return response
|
19
|
+
end
|
20
|
+
end
|
21
|
+
response = Excon::Response.new
|
22
|
+
response.body = [ ]
|
23
|
+
response.status = 200
|
24
|
+
return response
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
class Real
|
30
|
+
def get_domain_by_name(name)
|
31
|
+
request(:dns_domain, "getByDomainName/" + URI::encode(name.to_s, "-"))
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Celso Fernandes (<fernandes@zertico.com>)
|
3
|
+
# © Copyright IBM Corporation 2014.
|
4
|
+
#
|
5
|
+
# LICENSE: MIT (http://opensource.org/licenses/MIT)
|
6
|
+
#
|
7
|
+
module Fog
|
8
|
+
module DNS
|
9
|
+
class Softlayer
|
10
|
+
|
11
|
+
class Mock
|
12
|
+
def get_domains
|
13
|
+
response = Excon::Response.new
|
14
|
+
response.body = @softlayer_domains
|
15
|
+
response.status = 200
|
16
|
+
return response
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
class Real
|
22
|
+
def get_domains
|
23
|
+
request(:account, :get_domains)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Celso Fernandes (<fernandes@zertico.com>)
|
3
|
+
# © Copyright IBM Corporation 2014.
|
4
|
+
#
|
5
|
+
# LICENSE: MIT (http://opensource.org/licenses/MIT)
|
6
|
+
#
|
7
|
+
module Fog
|
8
|
+
module DNS
|
9
|
+
class Softlayer
|
10
|
+
|
11
|
+
class Mock
|
12
|
+
def get_records(domain_id)
|
13
|
+
@softlayer_domains.each do |domain|
|
14
|
+
if domain[:id].to_i == domain_id
|
15
|
+
response = Excon::Response.new
|
16
|
+
response.body = domain[:resourceRecords]
|
17
|
+
response.status = 200
|
18
|
+
return response
|
19
|
+
end
|
20
|
+
end
|
21
|
+
raise Excon::Errors::NotFound
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
class Real
|
27
|
+
def get_records(domain_id)
|
28
|
+
request(:dns_domain, domain_id.to_s + '/getResourceRecords')
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Celso Fernandes (<fernandes@zertico.com>)
|
3
|
+
# © Copyright IBM Corporation 2014.
|
4
|
+
#
|
5
|
+
# LICENSE: MIT (http://opensource.org/licenses/MIT)
|
6
|
+
#
|
7
|
+
module Fog
|
8
|
+
module DNS
|
9
|
+
class Softlayer
|
10
|
+
|
11
|
+
class Mock
|
12
|
+
def update_record(record_id, opts)
|
13
|
+
|
14
|
+
# Get the domain
|
15
|
+
@domain = @softlayer_domains.each do |domain|
|
16
|
+
if domain[:id].to_i == opts[:domainId]
|
17
|
+
domain
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
# Get the record
|
22
|
+
@domain.first[:resourceRecords].each do |record|
|
23
|
+
if record["id"].to_i == record_id.to_i
|
24
|
+
@domain.first[:serial] = (@domain.first[:serial] + 1)
|
25
|
+
@record = record
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
# Update the data
|
30
|
+
# ps: Separated the update to make easier future refator
|
31
|
+
@record["data"] = opts[:data]
|
32
|
+
@record["host"] = opts[:host]
|
33
|
+
@record["type"] = opts[:type]
|
34
|
+
|
35
|
+
response = Excon::Response.new
|
36
|
+
response.body = @domain
|
37
|
+
response.status = 200
|
38
|
+
return response
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
class Real
|
43
|
+
def update_record(record_id, opts)
|
44
|
+
request(:dns_domain_resourceRecord, record_id, :body => opts, :http_method => :PUT)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
data/tests/helper.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'simplecov'
|
2
|
+
require 'securerandom'
|
2
3
|
|
3
4
|
if ENV['COVERAGE'] == 'true' && RUBY_VERSION != "1.9.2"
|
4
5
|
require 'coveralls'
|
@@ -21,6 +22,8 @@ Excon.defaults.merge!(:debug_request => true, :debug_response => true)
|
|
21
22
|
|
22
23
|
require File.expand_path(File.join(File.dirname(__FILE__), 'helpers', 'mock_helper'))
|
23
24
|
|
25
|
+
Fog.mock! if ENV['FOG_MOCK']
|
26
|
+
|
24
27
|
# This overrides the default 600 seconds timeout during live test runs
|
25
28
|
if Fog.mocking?
|
26
29
|
FOG_TESTING_TIMEOUT = ENV['FOG_TEST_TIMEOUT'] || 2000
|
@@ -0,0 +1,48 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Celso Fernandes (<fernandes@zertico.com>)
|
3
|
+
# © Copyright IBM Corporation 2014.
|
4
|
+
#
|
5
|
+
# LICENSE: MIT (http://opensource.org/licenses/MIT)
|
6
|
+
#
|
7
|
+
|
8
|
+
Shindo.tests("Fog::DNS[:softlayer] | Domain model", ["softlayer"]) do
|
9
|
+
|
10
|
+
tests("success") do
|
11
|
+
|
12
|
+
@service = Fog::DNS[:softlayer]
|
13
|
+
|
14
|
+
# Setup
|
15
|
+
name = "fog-domain-"+SecureRandom.random_number(36**12).to_s(36).rjust(12, "0") + ".com"
|
16
|
+
@domain = @service.domains.create(name)
|
17
|
+
|
18
|
+
tests("#records") do
|
19
|
+
returns(3, "returns 3 default records (SOA / NS1 / NS2)") { @domain.records.count }
|
20
|
+
end
|
21
|
+
|
22
|
+
tests("#create_record") do
|
23
|
+
record = {
|
24
|
+
'data' => '127.0.0.1',
|
25
|
+
'host' => '@',
|
26
|
+
'type' => 'a'
|
27
|
+
}
|
28
|
+
current_serial = @domain.serial
|
29
|
+
@domain.create_record(record)
|
30
|
+
@domain.records(true)
|
31
|
+
@domain.reload
|
32
|
+
returns(true, "returns serial increased") { (current_serial.to_i + 1) <= @domain.serial }
|
33
|
+
returns(4, "returns default plus one created, total 4 records") { @domain.records.count }
|
34
|
+
returns("127.0.0.1", "returns the right value for created record") { @domain.records.last.value }
|
35
|
+
returns("@", "returns the right name for created record") { @domain.records.last.name }
|
36
|
+
returns("a", "returns the right type for created record") { @domain.records.last.type }
|
37
|
+
end
|
38
|
+
|
39
|
+
tests("#destroy") do
|
40
|
+
returns(true, "returns confirmation of domain removal") { @domain.destroy }
|
41
|
+
returns(false, "returns no domain with that name") { @service.domains.get_by_name(@domain.name) }
|
42
|
+
end
|
43
|
+
|
44
|
+
# Teardown
|
45
|
+
# Not needed, domain was already destroyed
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
@@ -0,0 +1,72 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Celso Fernandes (<fernandes@zertico.com>)
|
3
|
+
# © Copyright IBM Corporation 2014.
|
4
|
+
#
|
5
|
+
# LICENSE: MIT (http://opensource.org/licenses/MIT)
|
6
|
+
#
|
7
|
+
|
8
|
+
Shindo.tests("Fog::DNS[:softlayer] | Domains model", ["softlayer"]) do
|
9
|
+
|
10
|
+
@service = Fog::DNS[:softlayer]
|
11
|
+
|
12
|
+
tests("success") do
|
13
|
+
|
14
|
+
tests("#create") do
|
15
|
+
name = "fog-domain-"+SecureRandom.random_number(36**12).to_s(36).rjust(12, "0") + ".com"
|
16
|
+
@domain = @service.domains.create(name)
|
17
|
+
returns(Fog::DNS::Softlayer::Domain) { @service.domains.get(@domain.id).class }
|
18
|
+
returns(@domain.name, "returns the object with correct name") { @service.domains.get(@domain.id).name }
|
19
|
+
@domain.destroy
|
20
|
+
end
|
21
|
+
|
22
|
+
tests("#all") do
|
23
|
+
|
24
|
+
# Setup
|
25
|
+
# Not made on before block to make test fast
|
26
|
+
name1 = "fog-domain1-"+SecureRandom.random_number(36**12).to_s(36).rjust(12, "0") + ".com"
|
27
|
+
@domain1 = @service.domains.create(name1)
|
28
|
+
name2 = "fog-domain2-"+SecureRandom.random_number(36**12).to_s(36).rjust(12, "0") + ".com"
|
29
|
+
@domain2 = @service.domains.create(name2)
|
30
|
+
name3 = "fog-domain3-"+SecureRandom.random_number(36**12).to_s(36).rjust(12, "0") + ".com"
|
31
|
+
@domain3 = @service.domains.create(name3)
|
32
|
+
|
33
|
+
# Tests if we get the 3 domains we created
|
34
|
+
@domains = @service.domains.all
|
35
|
+
@domains.each do |domain|
|
36
|
+
returns(Fog::DNS::Softlayer::Domain, "returns a "+domain.name) { domain.class }
|
37
|
+
end
|
38
|
+
|
39
|
+
# Check ifs domains we created are included
|
40
|
+
domains_names = @domains.map { |domain| domain.name }
|
41
|
+
returns(true, "contains domain 1 with name "+@domain1.name) { domains_names.include? @domain1.name }
|
42
|
+
returns(true, "contains domain 2 with name "+@domain2.name) { domains_names.include? @domain2.name }
|
43
|
+
returns(true, "contains domain 3 with name "+@domain3.name) { domains_names.include? @domain3.name }
|
44
|
+
|
45
|
+
# Made this way so test pass even theres other domains on account
|
46
|
+
returns(true, "returns at least 3 domains") { @domains.count >= 3 }
|
47
|
+
|
48
|
+
# Teardown
|
49
|
+
# Do not leave test domains on my account
|
50
|
+
@domain1.destroy
|
51
|
+
@domain2.destroy
|
52
|
+
@domain3.destroy
|
53
|
+
end
|
54
|
+
|
55
|
+
name = "fog-domain-"+SecureRandom.random_number(36**12).to_s(36).rjust(12, "0") + ".com"
|
56
|
+
@domain = @service.domains.create(name)
|
57
|
+
|
58
|
+
tests("#get") do
|
59
|
+
returns(Fog::DNS::Softlayer::Domain) { @service.domains.get(@domain.id).class }
|
60
|
+
returns(@domain.name, "returns the object with correct name") { @service.domains.get(@domain.id).name }
|
61
|
+
end
|
62
|
+
|
63
|
+
tests("#get_by_name") do
|
64
|
+
returns(Fog::DNS::Softlayer::Domain) { @service.domains.get_by_name(@domain.name).class }
|
65
|
+
returns(@domain.name, "returns the object with correct name") { @service.domains.get_by_name(@domain.name).name }
|
66
|
+
end
|
67
|
+
|
68
|
+
@domain.destroy
|
69
|
+
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
@@ -0,0 +1,55 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Celso Fernandes (<fernandes@zertico.com>)
|
3
|
+
# © Copyright IBM Corporation 2014.
|
4
|
+
#
|
5
|
+
# LICENSE: MIT (http://opensource.org/licenses/MIT)
|
6
|
+
#
|
7
|
+
|
8
|
+
Shindo.tests("Fog::DNS[:softlayer] | Record model", ["softlayer"]) do
|
9
|
+
|
10
|
+
@service = Fog::DNS[:softlayer]
|
11
|
+
|
12
|
+
tests("success") do
|
13
|
+
|
14
|
+
# Setup
|
15
|
+
name = "fog-domain-"+SecureRandom.random_number(36**12).to_s(36).rjust(12, "0") + ".com"
|
16
|
+
@domain = @service.domains.create(name)
|
17
|
+
|
18
|
+
tests("#save") do
|
19
|
+
record = {
|
20
|
+
'data' => '127.0.0.1',
|
21
|
+
'host' => '@',
|
22
|
+
'type' => 'a'
|
23
|
+
}
|
24
|
+
current_serial = @domain.serial
|
25
|
+
@domain.create_record(record)
|
26
|
+
@domain.reload
|
27
|
+
@domain.records(true)
|
28
|
+
returns(4, "returns default plus one created, total 4 records") { @domain.records.count }
|
29
|
+
returns(true, "returns serial increased") { (current_serial + 1) <= @domain.serial }
|
30
|
+
returns("127.0.0.1", "returns the right value for created record") { @domain.records.last.value }
|
31
|
+
@domain.records.last.value = "192.168.0.1"
|
32
|
+
current_serial = @domain.serial
|
33
|
+
@domain.records.last.save
|
34
|
+
@domain.records(true)
|
35
|
+
@domain.reload
|
36
|
+
returns(4, "returns 4 records (no duplicated)") { @domain.records.count }
|
37
|
+
returns("192.168.0.1", "returns the right value for updated record") { @domain.records.last.value }
|
38
|
+
returns(true, "returns serial increased") { (current_serial + 1) <= @domain.serial }
|
39
|
+
end
|
40
|
+
|
41
|
+
tests("#destroy") do
|
42
|
+
current_serial = @domain.serial
|
43
|
+
@domain.records.last.destroy
|
44
|
+
@domain.records(true)
|
45
|
+
@domain.reload
|
46
|
+
returns(true, "returns serial increased") { (current_serial + 1) <= @domain.serial }
|
47
|
+
returns(3, "returns default records for domain (last was deleted)") { @domain.records.count }
|
48
|
+
end
|
49
|
+
|
50
|
+
# Teardown
|
51
|
+
@domain.destroy
|
52
|
+
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
@@ -0,0 +1,27 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Celso Fernandes (<fernandes@zertico.com>)
|
3
|
+
# © Copyright IBM Corporation 2014.
|
4
|
+
#
|
5
|
+
# LICENSE: MIT (http://opensource.org/licenses/MIT)
|
6
|
+
#
|
7
|
+
|
8
|
+
Shindo.tests("Fog::DNS[:softlayer] | Records model", ["softlayer"]) do
|
9
|
+
|
10
|
+
@service = Fog::DNS[:softlayer]
|
11
|
+
|
12
|
+
tests("success") do
|
13
|
+
|
14
|
+
# Setup
|
15
|
+
name = "fog-domain-"+SecureRandom.random_number(36**12).to_s(36).rjust(12, "0") + ".com"
|
16
|
+
@domain = @service.domains.create(name)
|
17
|
+
|
18
|
+
tests("#all") do
|
19
|
+
returns(3, "returns default records for domain") { @domain.records.count }
|
20
|
+
end
|
21
|
+
|
22
|
+
# Teardown
|
23
|
+
@domain.destroy
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fog-softlayer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matt Eldridge
|
@@ -223,6 +223,7 @@ files:
|
|
223
223
|
- .travis.yml
|
224
224
|
- CHANGELOG.md
|
225
225
|
- CONTRIBUTING.md
|
226
|
+
- CONTRIBUTORS.md
|
226
227
|
- Gemfile
|
227
228
|
- LICENSE.txt
|
228
229
|
- README.md
|
@@ -232,6 +233,7 @@ files:
|
|
232
233
|
- docs/fog-softlayer-CCLA.pdf
|
233
234
|
- docs/fog-softlayer-CLA.pdf
|
234
235
|
- examples/compute.md
|
236
|
+
- examples/dns.md
|
235
237
|
- examples/storage.md
|
236
238
|
- fog-softlayer.gemspec
|
237
239
|
- gemfiles/Gemfile-edge
|
@@ -241,12 +243,17 @@ files:
|
|
241
243
|
- lib/fog/softlayer/compute.rb
|
242
244
|
- lib/fog/softlayer/compute/shared.rb
|
243
245
|
- lib/fog/softlayer/core.rb
|
246
|
+
- lib/fog/softlayer/dns.rb
|
244
247
|
- lib/fog/softlayer/models/compute/flavor.rb
|
245
248
|
- lib/fog/softlayer/models/compute/flavors.rb
|
246
249
|
- lib/fog/softlayer/models/compute/image.rb
|
247
250
|
- lib/fog/softlayer/models/compute/images.rb
|
248
251
|
- lib/fog/softlayer/models/compute/server.rb
|
249
252
|
- lib/fog/softlayer/models/compute/servers.rb
|
253
|
+
- lib/fog/softlayer/models/dns/domain.rb
|
254
|
+
- lib/fog/softlayer/models/dns/domains.rb
|
255
|
+
- lib/fog/softlayer/models/dns/record.rb
|
256
|
+
- lib/fog/softlayer/models/dns/records.rb
|
250
257
|
- lib/fog/softlayer/models/storage/directories.rb
|
251
258
|
- lib/fog/softlayer/models/storage/directory.rb
|
252
259
|
- lib/fog/softlayer/models/storage/file.rb
|
@@ -260,6 +267,15 @@ files:
|
|
260
267
|
- lib/fog/softlayer/requests/compute/get_bare_metal_servers.rb
|
261
268
|
- lib/fog/softlayer/requests/compute/get_vm.rb
|
262
269
|
- lib/fog/softlayer/requests/compute/get_vms.rb
|
270
|
+
- lib/fog/softlayer/requests/dns/create_domain.rb
|
271
|
+
- lib/fog/softlayer/requests/dns/create_record.rb
|
272
|
+
- lib/fog/softlayer/requests/dns/delete_domain.rb
|
273
|
+
- lib/fog/softlayer/requests/dns/delete_record.rb
|
274
|
+
- lib/fog/softlayer/requests/dns/get_domain.rb
|
275
|
+
- lib/fog/softlayer/requests/dns/get_domain_by_name.rb
|
276
|
+
- lib/fog/softlayer/requests/dns/get_domains.rb
|
277
|
+
- lib/fog/softlayer/requests/dns/get_records.rb
|
278
|
+
- lib/fog/softlayer/requests/dns/update_record.rb
|
263
279
|
- lib/fog/softlayer/requests/storage/copy_object.rb
|
264
280
|
- lib/fog/softlayer/requests/storage/delete_container.rb
|
265
281
|
- lib/fog/softlayer/requests/storage/delete_multiple_objects.rb
|
@@ -304,6 +320,10 @@ files:
|
|
304
320
|
- tests/softlayer/models/compute/flavor_tests.rb
|
305
321
|
- tests/softlayer/models/compute/image_tests.rb
|
306
322
|
- tests/softlayer/models/compute/server_tests.rb
|
323
|
+
- tests/softlayer/models/dns/domain_tests.rb
|
324
|
+
- tests/softlayer/models/dns/domains_tests.rb
|
325
|
+
- tests/softlayer/models/dns/record_tests.rb
|
326
|
+
- tests/softlayer/models/dns/records_tests.rb
|
307
327
|
- tests/softlayer/models/storage/directory_tests.rb
|
308
328
|
- tests/softlayer/models/storage/file_tests.rb
|
309
329
|
- tests/softlayer/requests/compute/bmc_tests.rb
|