zerigo_dns 1.0.0
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.
- data/.document +5 -0
- data/.gitignore +21 -0
- data/LICENSE +20 -0
- data/README.rdoc +18 -0
- data/Rakefile +54 -0
- data/VERSION +1 -0
- data/example/sample.rb +194 -0
- data/lib/zerigo_ns.rb +52 -0
- data/test/helper.rb +10 -0
- data/test/test_zerigo_dns.rb +7 -0
- metadata +85 -0
data/.document
ADDED
data/.gitignore
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2009 Tom Wilson
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.rdoc
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
= zerigo_dns
|
2
|
+
|
3
|
+
Zerigo DNS Gem
|
4
|
+
|
5
|
+
== Credit goes to Zerigo DNS
|
6
|
+
|
7
|
+
Copyright 2009 Zerigo, Inc. See MIT-LICENSE for license information.
|
8
|
+
Visit http://www.zerigo.com/docs/managed-dns for updates and documentation.
|
9
|
+
|
10
|
+
I just put there sample code into a gem library for deployment ease. And chef
|
11
|
+
integration.
|
12
|
+
|
13
|
+
If you have any questions contact zerigo_dns_gem@jackhq.com
|
14
|
+
|
15
|
+
|
16
|
+
== Copyright
|
17
|
+
|
18
|
+
Copyright 2009 Zerigo, Inc. See MIT-LICENSE for license information.
|
data/Rakefile
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
|
4
|
+
begin
|
5
|
+
require 'jeweler'
|
6
|
+
Jeweler::Tasks.new do |gem|
|
7
|
+
gem.name = "zerigo_dns"
|
8
|
+
gem.summary = %Q{Zerigo DNS Gem}
|
9
|
+
gem.description = %Q{This gem is a resource wrapper of the example provide by zerigo dns}
|
10
|
+
gem.email = "tom@jackhq.com"
|
11
|
+
gem.homepage = "http://github.com/twilson63/zerigo_dns"
|
12
|
+
gem.authors = ["Tom Wilson"]
|
13
|
+
gem.add_dependency "active_resource"
|
14
|
+
gem.add_development_dependency "thoughtbot-shoulda", ">= 0"
|
15
|
+
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
16
|
+
end
|
17
|
+
Jeweler::GemcutterTasks.new
|
18
|
+
rescue LoadError
|
19
|
+
puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
|
20
|
+
end
|
21
|
+
|
22
|
+
require 'rake/testtask'
|
23
|
+
Rake::TestTask.new(:test) do |test|
|
24
|
+
test.libs << 'lib' << 'test'
|
25
|
+
test.pattern = 'test/**/test_*.rb'
|
26
|
+
test.verbose = true
|
27
|
+
end
|
28
|
+
|
29
|
+
begin
|
30
|
+
require 'rcov/rcovtask'
|
31
|
+
Rcov::RcovTask.new do |test|
|
32
|
+
test.libs << 'test'
|
33
|
+
test.pattern = 'test/**/test_*.rb'
|
34
|
+
test.verbose = true
|
35
|
+
end
|
36
|
+
rescue LoadError
|
37
|
+
task :rcov do
|
38
|
+
abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
task :test => :check_dependencies
|
43
|
+
|
44
|
+
task :default => :test
|
45
|
+
|
46
|
+
require 'rake/rdoctask'
|
47
|
+
Rake::RDocTask.new do |rdoc|
|
48
|
+
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
49
|
+
|
50
|
+
rdoc.rdoc_dir = 'rdoc'
|
51
|
+
rdoc.title = "zerigo_dns #{version}"
|
52
|
+
rdoc.rdoc_files.include('README*')
|
53
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
54
|
+
end
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
1.0.0
|
data/example/sample.rb
ADDED
@@ -0,0 +1,194 @@
|
|
1
|
+
# Copyright 2009 Zerigo, Inc. See MIT-LICENSE for license information.
|
2
|
+
# Visit http://www.zerigo.com/docs/managed-dns for updates and documentation.
|
3
|
+
|
4
|
+
# First, require the Zerigo DNS library for ActiveResource.
|
5
|
+
|
6
|
+
require 'zerigo_ns'
|
7
|
+
|
8
|
+
# All API request require a Zerigo account and an Account API key. We'll set
|
9
|
+
# them here for later reference. The 'user' is your regular login email.
|
10
|
+
# The 'password' is your API key and comes from the Preferences page
|
11
|
+
# (Manage Account -> NS -> Preferences).
|
12
|
+
|
13
|
+
Zerigo::NS::Base.user = 'you@email.com'
|
14
|
+
|
15
|
+
Zerigo::NS::Base.password = 'api_token'
|
16
|
+
|
17
|
+
|
18
|
+
|
19
|
+
# Note: This example assumes that there is at least one domain/zone already
|
20
|
+
# existing for the above referenced account.
|
21
|
+
|
22
|
+
|
23
|
+
|
24
|
+
# We'll start by retrieving a list of domains for this account. Note that the
|
25
|
+
# API refers to domains as zones. Note that API attributes are addressed as
|
26
|
+
# instance methods: the_zone.domain
|
27
|
+
# All attributes will have underscores in the name instead of dashes.
|
28
|
+
# eg: zone.default_ttl, not zone.default-ttl
|
29
|
+
|
30
|
+
puts '', "Retrieving list of first 20 zones..."
|
31
|
+
zones = Zerigo::NS::Zone.find(:all, :params=>{:per_page=>20, :page=>1})
|
32
|
+
|
33
|
+
# Now print a list of those zones
|
34
|
+
zones.each do |zone|
|
35
|
+
puts " #{zone.domain} (id: #{zone.id})"
|
36
|
+
end
|
37
|
+
|
38
|
+
# And show exactly how many results there were. Note that total_count is
|
39
|
+
# attached to each zone object, so we just pick the first one here.
|
40
|
+
if zones.empty?
|
41
|
+
puts " (0 of 0 displayed)"
|
42
|
+
else
|
43
|
+
puts " (1-#{zones.size} of #{zones.first.last_count} displayed)"
|
44
|
+
end
|
45
|
+
|
46
|
+
|
47
|
+
# We'll list all hosts for the first zone from the last request.
|
48
|
+
|
49
|
+
zone = zones.first
|
50
|
+
puts '', "Hosts for zone #{zone.domain} (id: #{zone.id})"
|
51
|
+
|
52
|
+
hosts = Zerigo::NS::Host.find(:all, :params=>{:zone_id=>zone.id, :per_page=>20, :page=>1})
|
53
|
+
hosts.each do |host|
|
54
|
+
puts " #{host.hostname} (id: #{host.id})"
|
55
|
+
end
|
56
|
+
|
57
|
+
# While not demonstrated here, host.last_count works just like for
|
58
|
+
# zones.
|
59
|
+
|
60
|
+
|
61
|
+
# Now we'll load a single zone. In this case, it's the first zone returned in
|
62
|
+
# the last request.
|
63
|
+
|
64
|
+
puts '', "Loading a single zone..."
|
65
|
+
zone = Zerigo::NS::Zone.find(zones.first.id)
|
66
|
+
|
67
|
+
puts " Loaded zone #{zone.id} (#{zone.domain})"
|
68
|
+
|
69
|
+
|
70
|
+
# Now we'll try to load a non-existent zone and catch the error.
|
71
|
+
|
72
|
+
puts '', "Loading a non-existent zone..."
|
73
|
+
begin
|
74
|
+
zone2 = Zerigo::NS::Zone.find(987654321)
|
75
|
+
puts " Loaded zone #{zone2.id} (#{zone2.domain})"
|
76
|
+
rescue ActiveResource::ResourceNotFound
|
77
|
+
puts " Zone not found"
|
78
|
+
end
|
79
|
+
|
80
|
+
|
81
|
+
# Let's create a random zone with a validation error
|
82
|
+
|
83
|
+
puts '', "Creating a random zone that is invalid..."
|
84
|
+
|
85
|
+
now = Time.now.to_i
|
86
|
+
vals = {:domain=>"example-#{now}.org", :ns_type=>'not_valid' }
|
87
|
+
|
88
|
+
newzone = Zerigo::NS::Zone.create(vals)
|
89
|
+
if newzone.errors.empty?
|
90
|
+
puts " Zone #{newzone.domain} created successfully with id #{newzone.id}."
|
91
|
+
else
|
92
|
+
puts " There was an error saving the new zone."
|
93
|
+
newzone.errors.each {|attr, msg| puts " #{attr} #{msg}"}
|
94
|
+
end
|
95
|
+
|
96
|
+
# now do it right
|
97
|
+
|
98
|
+
puts '', "Fixing and resubmitting that random zone..."
|
99
|
+
|
100
|
+
vals[:ns_type] = 'pri_sec' # options for this are 'pri_sec' (the default and most common), 'pri', and 'sec' -- see the API docs for details
|
101
|
+
|
102
|
+
newzone = Zerigo::NS::Zone.create(vals)
|
103
|
+
if newzone.errors.empty?
|
104
|
+
puts " Zone #{newzone.domain} created successfully with id #{newzone.id}."
|
105
|
+
else
|
106
|
+
puts " There was an error saving the new zone."
|
107
|
+
newzone.errors.each {|attr, msg| puts " #{attr} #{msg}"}
|
108
|
+
end
|
109
|
+
|
110
|
+
|
111
|
+
# Then we'll update that same zone.
|
112
|
+
|
113
|
+
puts '', "Now adding slave_nameservers and changing to 'pri'..."
|
114
|
+
|
115
|
+
newzone.ns_type = 'pri'
|
116
|
+
newzone.slave_nameservers = "ns8.example-#{now}.org,ns9.example-#{now}.org"
|
117
|
+
if newzone.save
|
118
|
+
puts " Changes saved successfully."
|
119
|
+
else
|
120
|
+
puts " There was an error saving the changes."
|
121
|
+
newzone.errors.each {|attr, msg| puts " #{attr} #{msg}"}
|
122
|
+
end
|
123
|
+
|
124
|
+
|
125
|
+
# Add a host to the zone.
|
126
|
+
|
127
|
+
puts '', "Adding a host to the zone."
|
128
|
+
|
129
|
+
vals2 = {:hostname=>'www',
|
130
|
+
:host_type=>'A',
|
131
|
+
:data=>'10.10.10.10',
|
132
|
+
:ttl=>86400,
|
133
|
+
:zone_id=>newzone.id
|
134
|
+
}
|
135
|
+
|
136
|
+
# A host has to be assigned to a zone. This is done by including 'zone_id'
|
137
|
+
# in the vals2 hash.
|
138
|
+
newhost = Zerigo::NS::Host.create(vals2)
|
139
|
+
if newhost.errors.empty?
|
140
|
+
puts " Host #{newhost.hostname} created successfully with id #{newhost.id}."
|
141
|
+
else
|
142
|
+
puts " There was an error saving the new host."
|
143
|
+
newhost.errors.each {|attr, msg| puts " #{attr} #{msg}"}
|
144
|
+
end
|
145
|
+
|
146
|
+
|
147
|
+
# To make the new host show up in the zone, either the zone needs to be
|
148
|
+
# reloaded or just the hosts can be reloaded. We'll also reload the host
|
149
|
+
# just for fun.
|
150
|
+
|
151
|
+
puts '', "Reloading the host..."
|
152
|
+
|
153
|
+
newhost.reload
|
154
|
+
|
155
|
+
puts '', "Reloading the zone..."
|
156
|
+
|
157
|
+
newzone.reload
|
158
|
+
|
159
|
+
|
160
|
+
# Update the host.
|
161
|
+
|
162
|
+
puts '', "Changing the host ttl to use the zone's default..."
|
163
|
+
|
164
|
+
host = newzone.hosts.first
|
165
|
+
host.ttl = nil
|
166
|
+
if host.save
|
167
|
+
puts " Changes saved successfully."
|
168
|
+
else
|
169
|
+
puts " There was an error saving the changes."
|
170
|
+
host.errors.each {|attr, msg| puts " #{attr} #{msg}"}
|
171
|
+
end
|
172
|
+
|
173
|
+
|
174
|
+
# Delete the host.
|
175
|
+
|
176
|
+
puts '', "Deleting this host..."
|
177
|
+
|
178
|
+
if newhost.destroy
|
179
|
+
puts " Successful."
|
180
|
+
else
|
181
|
+
puts " Failed."
|
182
|
+
end
|
183
|
+
|
184
|
+
|
185
|
+
# Now delete this zone.
|
186
|
+
|
187
|
+
puts '', "Deleting the zone..."
|
188
|
+
|
189
|
+
if newzone.destroy
|
190
|
+
puts " Successful."
|
191
|
+
else
|
192
|
+
puts " Failed."
|
193
|
+
end
|
194
|
+
|
data/lib/zerigo_ns.rb
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
# Copyright 2009 Zerigo, Inc. See MIT-LICENSE for license information.
|
2
|
+
# Visit http://www.zerigo.com/docs/managed-dns for updates and documentation.
|
3
|
+
|
4
|
+
require 'activeresource-ext'
|
5
|
+
|
6
|
+
module Zerigo
|
7
|
+
module NS
|
8
|
+
|
9
|
+
class Base < ActiveResource::Base
|
10
|
+
self.site='http://ns.zerigo.com/api/1.1/'
|
11
|
+
self.user = 'test@example.com'
|
12
|
+
self.password = 'ca01ffae311a7854ea366b05cd02bd50'
|
13
|
+
self.timeout = 5 # timeout after 5 seconds
|
14
|
+
|
15
|
+
|
16
|
+
# fix load() so that it no longer clobbers @prefix_options
|
17
|
+
# also fix bug exposed by reload() where attributes is effectively parsed twice, causing the first line to raise an exception the 2nd time
|
18
|
+
def load(attributes)
|
19
|
+
raise ArgumentError, "expected an attributes Hash, got #{attributes.inspect}" unless attributes.is_a?(Hash)
|
20
|
+
new_prefix_options, attributes = split_options(attributes)
|
21
|
+
@prefix_options.merge!(new_prefix_options)
|
22
|
+
attributes.each do |key, value|
|
23
|
+
@attributes[key.to_s] =
|
24
|
+
case value
|
25
|
+
when Array
|
26
|
+
if value.all?{|v2| v2.kind_of?(ActiveResource::Base)}
|
27
|
+
value.dup rescue value
|
28
|
+
else
|
29
|
+
resource = find_or_create_resource_for_collection(key)
|
30
|
+
value.map { |attrs| attrs.is_a?(String) ? attrs.dup : resource.new(attrs) }
|
31
|
+
end
|
32
|
+
when Hash
|
33
|
+
resource = find_or_create_resource_for(key)
|
34
|
+
resource.new(value)
|
35
|
+
else
|
36
|
+
value.dup rescue value
|
37
|
+
end
|
38
|
+
end
|
39
|
+
self
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
|
44
|
+
|
45
|
+
class Zone < Base
|
46
|
+
end
|
47
|
+
|
48
|
+
class Host < Base
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
end
|
data/test/helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,85 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: zerigo_dns
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Tom Wilson
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2010-02-06 00:00:00 -05:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: active_resource
|
17
|
+
type: :runtime
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: "0"
|
24
|
+
version:
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: thoughtbot-shoulda
|
27
|
+
type: :development
|
28
|
+
version_requirement:
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: "0"
|
34
|
+
version:
|
35
|
+
description: This gem is a resource wrapper of the example provide by zerigo dns
|
36
|
+
email: tom@jackhq.com
|
37
|
+
executables: []
|
38
|
+
|
39
|
+
extensions: []
|
40
|
+
|
41
|
+
extra_rdoc_files:
|
42
|
+
- LICENSE
|
43
|
+
- README.rdoc
|
44
|
+
files:
|
45
|
+
- .document
|
46
|
+
- .gitignore
|
47
|
+
- LICENSE
|
48
|
+
- README.rdoc
|
49
|
+
- Rakefile
|
50
|
+
- VERSION
|
51
|
+
- example/sample.rb
|
52
|
+
- lib/zerigo_ns.rb
|
53
|
+
- test/helper.rb
|
54
|
+
- test/test_zerigo_dns.rb
|
55
|
+
has_rdoc: true
|
56
|
+
homepage: http://github.com/twilson63/zerigo_dns
|
57
|
+
licenses: []
|
58
|
+
|
59
|
+
post_install_message:
|
60
|
+
rdoc_options:
|
61
|
+
- --charset=UTF-8
|
62
|
+
require_paths:
|
63
|
+
- lib
|
64
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: "0"
|
69
|
+
version:
|
70
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: "0"
|
75
|
+
version:
|
76
|
+
requirements: []
|
77
|
+
|
78
|
+
rubyforge_project:
|
79
|
+
rubygems_version: 1.3.5
|
80
|
+
signing_key:
|
81
|
+
specification_version: 3
|
82
|
+
summary: Zerigo DNS Gem
|
83
|
+
test_files:
|
84
|
+
- test/helper.rb
|
85
|
+
- test/test_zerigo_dns.rb
|