splicer-dynect 1.0.2 → 1.1.1
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 +15 -0
- data/lib/splicer/dynect/provider.rb +95 -84
- data/lib/splicer/dynect/version.rb +1 -1
- data/spec/splicer/dynect/provider_spec.rb +26 -42
- data/splicer-dynect.gemspec +1 -1
- metadata +7 -25
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
N2VlNGRiOWEwYzM3N2M3MTJkOGRmNjY0ODE5MjRlMDVjNTdmYTVhZg==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
ZWYzNzliNTA4MmRhYmVkNGRiYmMwNzNjMzdkNzYzNDc2YmI5ZTkzMw==
|
7
|
+
!binary "U0hBNTEy":
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
Yzg1MTZiMzRlYzI2OTNiZTYxN2FhMTRmMGRiNTIxMDFkM2FmYTc0ZDE3ZGEz
|
10
|
+
ZGJjODdhNGMyMzM5ZTY5YzY4NmJiM2Y5MDcyMmQxYmVkMWJiMTZiNjIyYjg1
|
11
|
+
NjBhZDkzMDM4NTU1ZjM1ZTJkY2FlODQ1YTYwNWQ1ZDc5NGU5MDU=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
ZmU5MWY1ZjI3OWIxNjkzNzAwMWE5ODY4MTRhZDUxOWJjNjQ4N2E0MTE5OWM0
|
14
|
+
N2QyODUyZmQxZWJiNzQ4ZjUyYzA2YjkwMzZlNzc0OTc3OTAyYjBjZjFkNGJm
|
15
|
+
Njk5MTcwZmEwOWIzNzc3ZDAzMzQ4NzgxZjFjNDUyOGU0MjI4NGQ=
|
@@ -2,7 +2,7 @@ module Splicer
|
|
2
2
|
module Dynect
|
3
3
|
|
4
4
|
# @author Matthew A. Johnston <warmwaffles@gmail.com>
|
5
|
-
class Provider
|
5
|
+
class Provider < Splicer::Provider
|
6
6
|
attr_reader :client
|
7
7
|
|
8
8
|
def initialize(config)
|
@@ -10,121 +10,132 @@ module Splicer
|
|
10
10
|
@client = config.client
|
11
11
|
end
|
12
12
|
|
13
|
-
|
14
|
-
# @param [Symbol] method the way you want the zone published
|
15
|
-
def publish(zone, method)
|
13
|
+
def create_zone(zone)
|
16
14
|
client.login
|
17
15
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
merge(zone)
|
23
|
-
else
|
24
|
-
false
|
16
|
+
client.post "Zone/#{zone.name}", rname: "admin@#{zone.name}", ttl: zone.ttl
|
17
|
+
|
18
|
+
zone.records.each do |record|
|
19
|
+
create_record(record, zone)
|
25
20
|
end
|
26
21
|
|
22
|
+
publish_zone(zone)
|
27
23
|
ensure
|
28
24
|
client.logout
|
29
25
|
end
|
30
26
|
|
31
|
-
def
|
27
|
+
def update_zone(zone)
|
32
28
|
client.login
|
33
|
-
|
29
|
+
get_zone(zone)
|
30
|
+
|
31
|
+
zone.records.each do |record|
|
32
|
+
update_record(record, zone)
|
33
|
+
end
|
34
|
+
|
35
|
+
publish_zone(zone)
|
34
36
|
ensure
|
35
37
|
client.logout
|
36
38
|
end
|
37
39
|
|
38
|
-
|
39
|
-
|
40
|
-
def rewrite(zone)
|
40
|
+
def rewrite_zone(zone)
|
41
41
|
delete_zone(zone)
|
42
|
+
create_zone(zone)
|
43
|
+
end
|
42
44
|
|
43
|
-
|
45
|
+
def delete_zone(zone)
|
46
|
+
client.login
|
47
|
+
get_zone(zone)
|
48
|
+
client.delete "Zone/#{zone.name}"
|
49
|
+
ensure
|
50
|
+
client.logout
|
51
|
+
end
|
44
52
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
when Splicer::Records::AAAARecord
|
50
|
-
create_record('AAAARecord', record, zone, rdata: { address: record.ip }, ttl: record.ttl)
|
51
|
-
when Splicer::Records::CNAMERecord
|
52
|
-
create_record('CNAMERecord', record, zone, rdata: { cname: record.cname }, ttl: record.ttl)
|
53
|
-
when Splicer::Records::MXRecord
|
54
|
-
create_record('MXRecord', record, zone, rdata: { exchange: record.exchanger, preference: record.priority }, ttl: record.ttl)
|
55
|
-
when Splicer::Records::NSRecord
|
56
|
-
create_record('NSRecord', record, zone, rdata: { nsdname: record.server }, ttl: record.ttl)
|
57
|
-
when Splicer::Records::PTRRecord
|
58
|
-
create_record('PTRRecord', record, zone,rdata: { ptrdname: record.host }, ttl: record.ttl)
|
59
|
-
when Splicer::Records::SPFRecord
|
60
|
-
create_record('SPFRecord', record, zone, rdata: { txtdata: record.text }, ttl: record.ttl)
|
61
|
-
when Splicer::Records::SRVRecord
|
62
|
-
create_record('SRVRecord', record, zone, rdata: { port: record.port, priority: record.priority, target: record.target, weight: record.weight }, ttl: record.ttl)
|
63
|
-
when Splicer::Records::TXTRecord
|
64
|
-
create_record('TXTRecord', record, zone, rdata: { txtdata: record.text }, ttl: record.ttl)
|
65
|
-
end
|
66
|
-
end
|
53
|
+
def delete_record_in_zone(record, zone)
|
54
|
+
client.login
|
55
|
+
id = find_record_id(record, zone)
|
56
|
+
return false unless id
|
67
57
|
|
68
|
-
|
58
|
+
url = record_resource_url(record, zone).concat("/#{id}")
|
59
|
+
client.delete(url)
|
60
|
+
publish_zone(zone)
|
61
|
+
ensure
|
62
|
+
client.logout
|
69
63
|
end
|
70
64
|
|
71
|
-
def
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
zone.records.each do |record|
|
79
|
-
case record
|
80
|
-
when Splicer::Records::ARecord
|
81
|
-
update_or_create_record('ARecord', record, zone, rdata: { address: record.ip }, ttl: record.ttl)
|
82
|
-
when Splicer::Records::AAAARecord
|
83
|
-
update_or_create_record('AAAARecord', record, zone, rdata: { address: record.ip }, ttl: record.ttl)
|
84
|
-
when Splicer::Records::CNAMERecord
|
85
|
-
update_or_create_record('CNAMERecord', record, zone, rdata: { cname: record.cname }, ttl: record.ttl)
|
86
|
-
when Splicer::Records::MXRecord
|
87
|
-
update_or_create_record('MXRecord', record, zone, rdata: { exchange: record.exchanger, preference: record.priority }, ttl: record.ttl)
|
88
|
-
when Splicer::Records::NSRecord
|
89
|
-
update_or_create_record('NSRecord', record, zone, rdata: { nsdname: record.server }, ttl: record.ttl)
|
90
|
-
when Splicer::Records::PTRRecord
|
91
|
-
update_or_create_record('PTRRecord', record, zone,rdata: { ptrdname: record.host }, ttl: record.ttl)
|
92
|
-
when Splicer::Records::SPFRecord
|
93
|
-
update_or_create_record('SPFRecord', record, zone, rdata: { txtdata: record.text }, ttl: record.ttl)
|
94
|
-
when Splicer::Records::SRVRecord
|
95
|
-
update_or_create_record('SRVRecord', record, zone, rdata: { port: record.port, priority: record.priority, target: record.target, weight: record.weight }, ttl: record.ttl)
|
96
|
-
when Splicer::Records::TXTRecord
|
97
|
-
update_or_create_record('TXTRecord', record, zone, rdata: { txtdata: record.text }, ttl: record.ttl)
|
98
|
-
end
|
99
|
-
end
|
65
|
+
def update_record_in_zone(record, zone)
|
66
|
+
client.login
|
67
|
+
update_record(record, zone)
|
68
|
+
publish_zone(zone)
|
69
|
+
ensure
|
70
|
+
client.logout
|
71
|
+
end
|
100
72
|
|
101
|
-
|
73
|
+
def create_record_in_zone(record, zone)
|
74
|
+
client.login
|
75
|
+
create_record(record, zone)
|
76
|
+
publish_zone(zone)
|
77
|
+
ensure
|
78
|
+
client.logout
|
102
79
|
end
|
103
80
|
|
104
81
|
private
|
105
82
|
|
106
|
-
def
|
83
|
+
def get_zone(zone)
|
107
84
|
client.get "Zone/#{zone.name}"
|
108
|
-
client.delete "Zone/#{zone.name}"
|
109
|
-
true
|
110
|
-
rescue Splicer::Errors::RequestError => error
|
111
|
-
false
|
112
85
|
end
|
113
86
|
|
114
|
-
def
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
87
|
+
def publish_zone(zone)
|
88
|
+
client.put "Zone/#{zone.name}", publish: true
|
89
|
+
end
|
90
|
+
|
91
|
+
def find_record_id(record, zone)
|
92
|
+
resources = client.get(record_resource_url(record, zone))
|
93
|
+
if resources['data'].empty?
|
94
|
+
return false
|
95
|
+
else
|
96
|
+
resources['data'].first.split('/').last
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
# Returns the proper record data for a specific record
|
101
|
+
# @param [Splicer::Records::Record] record
|
102
|
+
# @return [Hash]
|
103
|
+
def record_payload(record)
|
104
|
+
case record
|
105
|
+
when Splicer::Records::ARecord
|
106
|
+
{ rdata: { address: record.ip }, ttl: record.ttl}
|
107
|
+
when Splicer::Records::AAAARecord
|
108
|
+
{ rdata: { address: record.ip }, ttl: record.ttl}
|
109
|
+
when Splicer::Records::CNAMERecord
|
110
|
+
{ rdata: { cname: record.cname }, ttl: record.ttl}
|
111
|
+
when Splicer::Records::MXRecord
|
112
|
+
{ rdata: { exchange: record.exchanger, preference: record.priority }, ttl: record.ttl}
|
113
|
+
when Splicer::Records::NSRecord
|
114
|
+
{ rdata: { nsdname: record.server }, ttl: record.ttl}
|
115
|
+
when Splicer::Records::PTRRecord
|
116
|
+
{ rdata: { ptrdname: record.host }, ttl: record.ttl}
|
117
|
+
when Splicer::Records::SPFRecord
|
118
|
+
{ rdata: { txtdata: record.text }, ttl: record.ttl}
|
119
|
+
when Splicer::Records::SRVRecord
|
120
|
+
{ rdata: { port: record.port, priority: record.priority, target: record.target, weight: record.weight }, ttl: record.ttl}
|
121
|
+
when Splicer::Records::TXTRecord
|
122
|
+
{ rdata: { txtdata: record.text }, ttl: record.ttl}
|
123
|
+
else
|
124
|
+
{ }
|
119
125
|
end
|
120
126
|
end
|
121
127
|
|
122
|
-
def
|
123
|
-
client.
|
128
|
+
def update_record(record, zone)
|
129
|
+
client.put(record_resource_url(record, zone), record_payload(record))
|
130
|
+
end
|
131
|
+
|
132
|
+
def create_record(record, zone)
|
133
|
+
client.post(record_resource_url(record, zone), record_payload(record))
|
124
134
|
end
|
125
135
|
|
126
|
-
def
|
127
|
-
|
136
|
+
def record_resource_url(record, zone)
|
137
|
+
resource = record.class.name.split('::').last
|
138
|
+
if record.name.nil?
|
128
139
|
"#{resource}/#{zone.name}/#{zone.name}"
|
129
140
|
else
|
130
141
|
"#{resource}/#{zone.name}/#{record.name}.#{zone.name}"
|
@@ -4,47 +4,31 @@ describe Splicer::Dynect::Provider do
|
|
4
4
|
let(:config) { Splicer::Dynect::Config.new('customer','user','password') }
|
5
5
|
let(:provider) { Splicer::Dynect::Provider.new(config) }
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
before { provider.stub(:rewrite).and_return(true) }
|
34
|
-
it { should eq(true) }
|
35
|
-
end
|
36
|
-
|
37
|
-
context 'and dynect returns an error' do
|
38
|
-
before { provider.stub(:rewrite).and_raise(Splicer::Errors::RequestError) }
|
39
|
-
it 'should raise and Splicer::Errors::RequestError' do
|
40
|
-
expect { subject }.to raise_error(Splicer::Errors::RequestError)
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
context 'when doing something undefined' do
|
46
|
-
subject { provider.publish(zone, :something) }
|
47
|
-
it { should eq(false) }
|
48
|
-
end
|
7
|
+
describe '#create_zone' do
|
8
|
+
subject { provider.create_zone(zone) }
|
9
|
+
end
|
10
|
+
|
11
|
+
describe '#update_zone' do
|
12
|
+
subject { provider.update_zone(zone) }
|
13
|
+
end
|
14
|
+
|
15
|
+
describe '#rewrite_zone' do
|
16
|
+
subject { provider.rewrite_zone(zone) }
|
17
|
+
end
|
18
|
+
|
19
|
+
describe '#delete_zone' do
|
20
|
+
subject { provider.delete_zone(zone) }
|
21
|
+
end
|
22
|
+
|
23
|
+
describe '#delete_record_in_zone' do
|
24
|
+
subject { provider.delete_record_in_zone(record, zone) }
|
25
|
+
end
|
26
|
+
|
27
|
+
describe '#update_record_in_zone' do
|
28
|
+
subject { provider.update_record_in_zone(record, zone) }
|
29
|
+
end
|
30
|
+
|
31
|
+
describe '#create_record_in_zone' do
|
32
|
+
subject { provider.create_record_in_zone(record, zone) }
|
49
33
|
end
|
50
34
|
end
|
data/splicer-dynect.gemspec
CHANGED
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
-
spec.add_dependency('splicer', '~> 1.
|
21
|
+
spec.add_dependency('splicer', '~> 1.1')
|
22
22
|
spec.add_dependency('rest-client')
|
23
23
|
|
24
24
|
spec.add_development_dependency "bundler", "~> 1.3"
|
metadata
CHANGED
@@ -1,36 +1,32 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: splicer-dynect
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
5
|
-
prerelease:
|
4
|
+
version: 1.1.1
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Matthew Johnston
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2013-05-
|
11
|
+
date: 2013-05-13 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: splicer
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
17
|
- - ~>
|
20
18
|
- !ruby/object:Gem::Version
|
21
|
-
version: '1.
|
19
|
+
version: '1.1'
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
24
|
- - ~>
|
28
25
|
- !ruby/object:Gem::Version
|
29
|
-
version: '1.
|
26
|
+
version: '1.1'
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: rest-client
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
31
|
- - ! '>='
|
36
32
|
- !ruby/object:Gem::Version
|
@@ -38,7 +34,6 @@ dependencies:
|
|
38
34
|
type: :runtime
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
38
|
- - ! '>='
|
44
39
|
- !ruby/object:Gem::Version
|
@@ -46,7 +41,6 @@ dependencies:
|
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: bundler
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
45
|
- - ~>
|
52
46
|
- !ruby/object:Gem::Version
|
@@ -54,7 +48,6 @@ dependencies:
|
|
54
48
|
type: :development
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
52
|
- - ~>
|
60
53
|
- !ruby/object:Gem::Version
|
@@ -62,7 +55,6 @@ dependencies:
|
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
56
|
name: rake
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
58
|
requirements:
|
67
59
|
- - ! '>='
|
68
60
|
- !ruby/object:Gem::Version
|
@@ -70,7 +62,6 @@ dependencies:
|
|
70
62
|
type: :development
|
71
63
|
prerelease: false
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
65
|
requirements:
|
75
66
|
- - ! '>='
|
76
67
|
- !ruby/object:Gem::Version
|
@@ -78,7 +69,6 @@ dependencies:
|
|
78
69
|
- !ruby/object:Gem::Dependency
|
79
70
|
name: rspec
|
80
71
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
72
|
requirements:
|
83
73
|
- - ! '>='
|
84
74
|
- !ruby/object:Gem::Version
|
@@ -86,7 +76,6 @@ dependencies:
|
|
86
76
|
type: :development
|
87
77
|
prerelease: false
|
88
78
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
79
|
requirements:
|
91
80
|
- - ! '>='
|
92
81
|
- !ruby/object:Gem::Version
|
@@ -119,33 +108,26 @@ files:
|
|
119
108
|
homepage: https://github.com/zippykid/splicer-dynect
|
120
109
|
licenses:
|
121
110
|
- MIT
|
111
|
+
metadata: {}
|
122
112
|
post_install_message:
|
123
113
|
rdoc_options: []
|
124
114
|
require_paths:
|
125
115
|
- lib
|
126
116
|
required_ruby_version: !ruby/object:Gem::Requirement
|
127
|
-
none: false
|
128
117
|
requirements:
|
129
118
|
- - ! '>='
|
130
119
|
- !ruby/object:Gem::Version
|
131
120
|
version: '0'
|
132
|
-
segments:
|
133
|
-
- 0
|
134
|
-
hash: -2750849641139883288
|
135
121
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
136
|
-
none: false
|
137
122
|
requirements:
|
138
123
|
- - ! '>='
|
139
124
|
- !ruby/object:Gem::Version
|
140
125
|
version: '0'
|
141
|
-
segments:
|
142
|
-
- 0
|
143
|
-
hash: -2750849641139883288
|
144
126
|
requirements: []
|
145
127
|
rubyforge_project:
|
146
|
-
rubygems_version:
|
128
|
+
rubygems_version: 2.0.3
|
147
129
|
signing_key:
|
148
|
-
specification_version:
|
130
|
+
specification_version: 4
|
149
131
|
summary: The splicer adapter for interacting Dynect
|
150
132
|
test_files:
|
151
133
|
- spec/spec_helper.rb
|