dynect_rest 0.4.3 → 0.4.4.beta

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 07994682f1515d9cce892c91cf5eb92ce0334cc0
4
+ data.tar.gz: 49137e17b91cbd4ec29b708b077923bee6c91a33
5
+ SHA512:
6
+ metadata.gz: a29ce73f1dc63214d49d1abc15bd8c6a7a913de695534607595aff9c2c48b9e14e9ed5c47aedf664619b34c5af718aef7ba431413dbc35106aa3a85f7a5561df
7
+ data.tar.gz: 0aa2839499464941698332a55c5ec85a25ea368024356ff1e795022856432694ef38177fd10c770748bf7c8939d80ab28437e9fd479168f26c9e4bcfe161370a
data/README.rdoc CHANGED
@@ -14,6 +14,32 @@ Since this is 90% of what you'll be doing, we make it easy.
14
14
 
15
15
  Will add an A record and a CNAME. You can use the chained method syntax for every resource record - we map unknown methods to the resource data you make in the call. See link:"example.rb" for an executable example using environment variables.
16
16
 
17
+ == GSLB
18
+
19
+ Create a new GSLB:
20
+
21
+ require 'dynect_rest'
22
+ dyn = DynectRest.new("CUSTOMER", "USERNAME", "PASSWORD", "ZONE")
23
+ gslb = dyn.gslb()
24
+ gslb.fqdn("sunshine.example.com").ttl(30).region_code("global")
25
+ gslb.min_healthy(1).serve_count(2)
26
+ gslb.monitor(:protocol => "HTTP", :interval => 1, :port => 8000, :path => "/healthcheck", :host => "sunshine.example.com")
27
+ gslb.add_host(:address => "1.1.1.1", :label => "friendly_name", :weight => 10, :serve_mode => "obey")
28
+ gslb.add_host(:address => "1.1.1.2", :label => "friendly_name2", :weight => 10, :serve_mode => "obey")
29
+ gslb.save
30
+
31
+ This will create a GSLB with hosts 1.1.1.1 and 1.1.1.2 in the global region. The parameters are self-explanatory.
32
+
33
+ Add a host to an existing GSLB:
34
+
35
+ require 'dynect_rest'
36
+ dyn = DynectRest.new("CUSTOMER", "USERNAME", "PASSWORD", "ZONE")
37
+ gslb = dyn.gslb.get("sunshine.example.com")
38
+ gslb.add_host(:address => "1.1.1.3", :label => "friendly_name3", :weight => 10, :serve_mode => "obey")
39
+ gslb.save(:replace)
40
+
41
+ This will fetch the GSLB object for "sunshine.example.com", add the host 1.1.1.3, and save the updated configuration back to dynect.
42
+
17
43
  == Everything else
18
44
 
19
45
  We wrap up the lower-level functionality of the API, so you can focus on just making the calls. For example, to get a list of contacts:
data/Rakefile CHANGED
@@ -1,27 +1,8 @@
1
1
  require 'rubygems'
2
2
  require 'rake'
3
-
4
- begin
5
- require 'jeweler'
6
- Jeweler::Tasks.new do |gem|
7
- gem.name = "dynect_rest"
8
- gem.summary = %Q{Dynect REST API library}
9
- gem.description = %Q{Use the Dynect services REST API}
10
- gem.email = "adam@opscode.com"
11
- gem.homepage = "http://github.com/adamhjk/dynect-rest"
12
- gem.authors = ["Adam Jacob"]
13
- gem.add_development_dependency "rspec", ">= 2.0"
14
- gem.add_development_dependency "yard", ">= 0"
15
- gem.add_dependency('json')
16
- gem.add_dependency('rest-client')
17
- # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
18
- end
19
- Jeweler::GemcutterTasks.new
20
- rescue LoadError
21
- puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
22
- end
23
-
3
+ require "bundler/gem_tasks"
24
4
  require 'rspec/core/rake_task'
5
+
25
6
  RSpec::Core::RakeTask.new(:spec)
26
7
 
27
8
  task :default => :spec
data/lib/dynect_rest.rb CHANGED
@@ -19,6 +19,7 @@
19
19
  class DynectRest
20
20
 
21
21
  require 'dynect_rest/exceptions'
22
+ require 'dynect_rest/gslb'
22
23
  require 'dynect_rest/resource'
23
24
  require 'rest_client'
24
25
  require 'json'
@@ -33,11 +34,11 @@ class DynectRest
33
34
  # @param [String] The zone you are going to be editing
34
35
  # @param [Boolean] Whether to connect immediately or not - runs login for you
35
36
  # @param [Boolean] Verbosity
36
- def initialize(customer_name, user_name, password, zone=nil, connect=true, verbose=false)
37
+ def initialize(customer_name, user_name, password, zone=nil, connect=true, verbose=false, max_redirects=10)
37
38
  @customer_name = customer_name
38
39
  @user_name = user_name
39
40
  @password = password
40
- @rest = RestClient::Resource.new('https://api2.dynect.net/REST/', :headers => { :content_type => 'application/json' })
41
+ @rest = RestClient::Resource.new('https://api2.dynect.net/REST/', :headers => { :content_type => 'application/json' }, :max_redirects=>max_redirects)
41
42
  @zone = zone
42
43
  @verbose = verbose
43
44
  login if connect
@@ -134,6 +135,13 @@ class DynectRest
134
135
  end
135
136
  end
136
137
 
138
+ ##
139
+ # GSLB Service
140
+ ##
141
+ def gslb
142
+ DynectRest::GSLB.new(:dynect => self, :zone => @zone)
143
+ end
144
+
137
145
  # Raw GET request, formatted for Dyn. See list of endpoints at:
138
146
  #
139
147
  # https://manage.dynect.net/help/docs/api2/rest/resources/
@@ -190,18 +198,29 @@ class DynectRest
190
198
  puts "I have #{e.inspect} with #{e.http_code}"
191
199
  end
192
200
  if e.http_code == 307
201
+ e.response.sub!('/REST/','') if e.response =~ /^\/REST\//
193
202
  get(e.response)
194
203
  end
195
204
  e.response
196
205
  end
197
- parse_response(JSON.parse(response_body))
206
+
207
+ parse_response(JSON.parse(response_body || '{}'))
198
208
  end
199
209
 
200
210
  def parse_response(response)
201
211
  case response["status"]
202
212
  when "success"
203
213
  response["data"]
204
- when "failure", "incomplete"
214
+ when "incomplete"
215
+ # we get 'incomplete' when the API is running slow and claims the session has a previous job running
216
+ # raise an error and return the job ID in case we want to ask the API what the job's status is
217
+ error_messages = []
218
+ error_messages.push( "This session may have a job _still_ running (slowly). Call /REST/Job/#{response["job_id"]} to get its status." )
219
+ response["msgs"].each do |error_message|
220
+ error_messages << "#{error_message["LVL"]} #{error_message["ERR_CD"]} #{error_message["SOURCE"]} - #{error_message["INFO"]}"
221
+ end
222
+ raise DynectRest::Exceptions::IncompleteRequest.new( "#{error_messages.join("\n")}", response["job_id"] )
223
+ when "failure"
205
224
  error_messages = []
206
225
  response["msgs"].each do |error_message|
207
226
  error_messages << "#{error_message["LVL"]} #{error_message["ERR_CD"]} #{error_message["SOURCE"]} - #{error_message["INFO"]}"
@@ -209,6 +228,4 @@ class DynectRest
209
228
  raise DynectRest::Exceptions::RequestFailed, "Request failed: #{error_messages.join("\n")}"
210
229
  end
211
230
  end
212
-
213
-
214
231
  end
@@ -19,5 +19,16 @@
19
19
  class DynectRest
20
20
  class Exceptions
21
21
  class RequestFailed < RuntimeError; end
22
+ # we need to handle API calls that return a status of 'incomplete' and return the job_id
23
+ class IncompleteRequest < RuntimeError
24
+
25
+ attr_reader :job_id, :message
26
+
27
+ def initialize( message, job_id )
28
+ @message = message
29
+ @job_id = job_id
30
+ end
31
+
32
+ end
22
33
  end
23
34
  end
@@ -0,0 +1,170 @@
1
+ #
2
+ # Author:: Evan Gilman (<evan@pagerduty.com>)
3
+ # Copyright:: Copyright (c) 2013 PagerDuty, Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ class DynectRest
20
+ class GSLB
21
+
22
+ def initialize(init_hash={})
23
+ validate(init_hash, [:dynect, :zone])
24
+
25
+ @dynect = init_hash[:dynect]
26
+ @zone = init_hash[:zone]
27
+ @fqdn = init_hash[:fqdn]
28
+ @ttl = init_hash[:ttl] || 30
29
+ @host_list = init_hash[:host_list] || {}
30
+ @contact_nick = init_hash[:contact_nick] || 'owner'
31
+
32
+ @region_code = init_hash[:region_code] || 'global'
33
+ @monitor = init_hash[:monitor] || {}
34
+ @serve_count = init_hash[:serve_count] || 1
35
+ @min_healthy = init_hash[:min_healthy] || 1
36
+ end
37
+
38
+ def [](host_list_key)
39
+ @host_list[host_list_key]
40
+ end
41
+
42
+ def fqdn(value=nil)
43
+ value ? (@fqdn = value; self) : @fqdn
44
+ end
45
+
46
+ def contact_nick(value=nil)
47
+ value ? (@contact_nick = value; self) : @contact_nick
48
+ end
49
+
50
+ def ttl(value=nil)
51
+ value ? (@ttl = value; self) : @ttl
52
+ end
53
+
54
+ def min_healthy(value=nil)
55
+ value ? (@min_healthy = value; self) : @min_healthy
56
+ end
57
+
58
+ def serve_count(value=nil)
59
+ value ? (@serve_count = value; self) : @serve_count
60
+ end
61
+
62
+ def region_code(value=nil)
63
+ # US West, US Central, US East, EU West, EU Central, EU East, Asia, global
64
+ value ? (@region_code = value; self) : @region_code
65
+ end
66
+
67
+ def host_list(value=nil)
68
+ value ? (@host_list = value; self) : @host_list
69
+ end
70
+
71
+ def monitor(value=nil)
72
+ # :protocol => 'HTTP', :interval => 1, :retries => 2, :timeout => 10, :port => 8000,
73
+ # :path => '/healthcheck', :host => 'example.com', :header => 'X-User-Agent: DynECT Health\n', :expected => 'passed'
74
+ value ? (@monitor = value; self) : @monitor
75
+ end
76
+
77
+ def add_host(value)
78
+ # :address => 'x.x.x.x', :label => 'friendly-name', :weight => 10, :serve_mode => 'obey'
79
+ @host_list[value[:address]] = value
80
+ self
81
+ end
82
+
83
+ def resource_path(full=false)
84
+ service_type = "GSLB"
85
+ if (full == true || full == :full)
86
+ "/REST/#{service_type}/#{@zone}"
87
+ else
88
+ "#{service_type}/#{@zone}"
89
+ end
90
+ end
91
+
92
+ def get(fqdn=nil, region_code='global')
93
+ if fqdn
94
+ results = @dynect.get("#{resource_path}/#{fqdn}")
95
+ region = {}
96
+ results["region"].each {|r| region = r if r["region_code"] == region_code}
97
+ raise DynectRest::Exceptions::RequestFailed, "Cannot find #{region_code} GSLB pool for #{fqdn}" if region.empty?
98
+
99
+ # Default monitor timeout is 0, but specifying timeout 0 on a put or post results in an exception
100
+ results["monitor"].delete("timeout") if results["monitor"]["timeout"] == 0
101
+
102
+ host_list = {}
103
+ region["pool"].each do |h|
104
+ host_list[h["address"]] = {
105
+ :address => h["address"],
106
+ :label => h["label"],
107
+ :weight => h["weight"],
108
+ :serve_mode => h["serve_mode"]
109
+ }
110
+ end
111
+ DynectRest::GSLB.new(:dynect => @dynect,
112
+ :zone => results["zone"],
113
+ :fqdn => results["fqdn"],
114
+ :ttl => results["ttl"],
115
+ :host_list => host_list,
116
+ :contact_nick => results["contact_nickname"],
117
+ :region_code => region["region_code"],
118
+ :monitor => results["monitor"],
119
+ :serve_count => region["serve_count"],
120
+ :min_healthy => region["min_healthy"]
121
+ )
122
+ else
123
+ @dynect.get(resource_path)
124
+ end
125
+ end
126
+
127
+ def find(fqdn, query_hash)
128
+ results = []
129
+ get(fqdn).each do |rr|
130
+ query_hash.each do |key, value|
131
+ results << rr if rr[key.to_s] == value
132
+ end
133
+ end
134
+ results
135
+ end
136
+
137
+ def save(replace=false)
138
+ if replace == true || replace == :replace
139
+ @dynect.put("#{resource_path}/#{@fqdn}", self)
140
+ else
141
+ @dynect.post("#{resource_path}/#{@fqdn}", self)
142
+ end
143
+ self
144
+ end
145
+
146
+ def delete
147
+ @dynect.delete("#{resource_path}/#{fqdn}")
148
+ end
149
+
150
+ def validate(init_hash, required_keys)
151
+ required_keys.each do |k|
152
+ raise ArgumentError, "You must provide a value for #{k}" unless init_hash[k]
153
+ end
154
+ end
155
+
156
+ def to_json
157
+ {
158
+ "ttl" => @ttl,
159
+ "monitor" => @monitor,
160
+ "region" => {
161
+ "region_code" => @region_code,
162
+ "serve_count" => @serve_count,
163
+ "min_healthy" => @min_healthy,
164
+ "pool" => @host_list.values
165
+ },
166
+ "contact_nickname" => @contact_nick
167
+ }.to_json
168
+ end
169
+ end
170
+ end
@@ -0,0 +1,21 @@
1
+ #
2
+ # Author:: Ranjib Dey (dey.ranjib@gmail.com)
3
+ # Copyright:: Copyright (c) 2013 Opscode, Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ class DynectRest
20
+ VERSION='0.4.4.beta'
21
+ end
@@ -1,77 +1,74 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
2
 
3
3
  describe DynectRest do
4
- let(:d) do
4
+
5
+ let(:dynect) do
5
6
  DynectRest.new("customer", "username", "password", "zone", false)
6
7
  end
7
8
 
8
- describe "a" do
9
- subject { d.a }
10
- its(:resource_path) { should == 'ARecord/zone' }
9
+ it "A Record" do
10
+ expect(dynect.a.resource_path).to eq('ARecord/zone')
11
+ end
12
+
13
+ it "AAAA Record" do
14
+ expect(dynect.aaaa.resource_path).to eq('AAAARecord/zone')
11
15
  end
12
16
 
13
- describe "aaaa" do
14
- subject { d.aaaa }
15
- its(:resource_path) { should == 'AAAARecord/zone' }
17
+ it "CNAME Record" do
18
+ expect(dynect.cname.resource_path).to eq('CNAMERecord/zone')
16
19
  end
17
20
 
18
- describe "cname" do
19
- subject { d.cname }
20
- its(:resource_path) { should == 'CNAMERecord/zone' }
21
+ it "DNSKEY Record" do
22
+ expect(dynect.dnskey.resource_path).to eq('DNSKEYRecord/zone')
21
23
  end
22
24
 
23
- describe "dnskey" do
24
- subject { d.dnskey }
25
- its(:resource_path) { should == 'DNSKEYRecord/zone' }
25
+ it "DS Record" do
26
+ expect(dynect.ds.resource_path).to eq('DSRecord/zone')
26
27
  end
27
28
 
28
- describe "ds" do
29
- subject { d.ds }
30
- its(:resource_path) { should == 'DSRecord/zone' }
29
+ describe "gslb" do
30
+ subject { dynect.gslb }
31
+ its(:resource_path) { should == 'GSLB/zone' }
31
32
  end
32
33
 
33
34
  describe "key" do
34
- subject { d.key }
35
+ subject { dynect.key }
35
36
  its(:resource_path) { should == 'KEYRecord/zone' }
36
37
  end
37
38
 
38
- describe "loc" do
39
- subject { d.loc }
40
- its(:resource_path) { should == 'LOCRecord/zone' }
39
+ it "KEY Record" do
40
+ expect(dynect.key.resource_path).to eq('KEYRecord/zone')
41
+ end
42
+
43
+ it "LOC Record" do
44
+ expect(dynect.loc.resource_path).to eq('LOCRecord/zone')
41
45
  end
42
46
 
43
- describe "mx" do
44
- subject { d.mx }
45
- its(:resource_path) { should == 'MXRecord/zone' }
47
+ it "MX Record" do
48
+ expect(dynect.mx.resource_path).to eq('MXRecord/zone')
46
49
  end
47
50
 
48
- describe "ns" do
49
- subject { d.ns }
50
- its(:resource_path) { should == 'NSRecord/zone' }
51
+ it "NS Record" do
52
+ expect(dynect.ns.resource_path).to eq('NSRecord/zone')
51
53
  end
52
54
 
53
- describe "ptr" do
54
- subject { d.ptr }
55
- its(:resource_path) { should == 'PTRRecord/zone' }
55
+ it "PTR Record" do
56
+ expect(dynect.ptr.resource_path).to eq('PTRRecord/zone')
56
57
  end
57
58
 
58
- describe "rp" do
59
- subject { d.rp }
60
- its(:resource_path) { should == 'RPRecord/zone' }
59
+ it "RPR Record" do
60
+ expect(dynect.rp.resource_path).to eq('RPRecord/zone')
61
61
  end
62
62
 
63
- describe "soa" do
64
- subject { d.soa }
65
- its(:resource_path) { should == 'SOARecord/zone' }
63
+ it "SOA Record" do
64
+ expect(dynect.soa.resource_path).to eq('SOARecord/zone')
66
65
  end
67
66
 
68
- describe "srv" do
69
- subject { d.srv }
70
- its(:resource_path) { should == 'SRVRecord/zone' }
67
+ it "SRV Record" do
68
+ expect(dynect.srv.resource_path).to eq('SRVRecord/zone')
71
69
  end
72
70
 
73
- describe "txt" do
74
- subject { d.txt }
75
- its(:resource_path) { should == 'TXTRecord/zone' }
71
+ it "TXT Record" do
72
+ expect(dynect.txt.resource_path).to eq('TXTRecord/zone')
76
73
  end
77
74
  end
data/spec/spec_helper.rb CHANGED
@@ -3,7 +3,3 @@ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
3
  require 'dynect_rest'
4
4
  require 'rspec'
5
5
  require 'rspec/autorun'
6
-
7
- RSpec.configure do |config|
8
-
9
- end
metadata CHANGED
@@ -1,126 +1,86 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dynect_rest
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.3
5
- prerelease:
4
+ version: 0.4.4.beta
6
5
  platform: ruby
7
6
  authors:
8
7
  - Adam Jacob
8
+ - Ranjib Dey
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-04-11 00:00:00.000000000 Z
12
+ date: 2013-08-23 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rest-client
16
- requirement: &17352460 !ruby/object:Gem::Requirement
17
- none: false
16
+ requirement: !ruby/object:Gem::Requirement
18
17
  requirements:
19
- - - ! '>='
18
+ - - '>='
20
19
  - !ruby/object:Gem::Version
21
20
  version: '0'
22
21
  type: :runtime
23
22
  prerelease: false
24
- version_requirements: *17352460
25
- - !ruby/object:Gem::Dependency
26
- name: json
27
- requirement: &17351940 !ruby/object:Gem::Requirement
28
- none: false
23
+ version_requirements: !ruby/object:Gem::Requirement
29
24
  requirements:
30
- - - ! '>='
25
+ - - '>='
31
26
  - !ruby/object:Gem::Version
32
27
  version: '0'
33
- type: :runtime
34
- prerelease: false
35
- version_requirements: *17351940
36
28
  - !ruby/object:Gem::Dependency
37
- name: rake
38
- requirement: &17369800 !ruby/object:Gem::Requirement
39
- none: false
29
+ name: json
30
+ requirement: !ruby/object:Gem::Requirement
40
31
  requirements:
41
- - - ! '>='
32
+ - - '>='
42
33
  - !ruby/object:Gem::Version
43
34
  version: '0'
44
- type: :development
35
+ type: :runtime
45
36
  prerelease: false
46
- version_requirements: *17369800
47
- - !ruby/object:Gem::Dependency
48
- name: rspec
49
- requirement: &17368800 !ruby/object:Gem::Requirement
50
- none: false
37
+ version_requirements: !ruby/object:Gem::Requirement
51
38
  requirements:
52
- - - ~>
39
+ - - '>='
53
40
  - !ruby/object:Gem::Version
54
- version: 2.0.0
55
- type: :development
56
- prerelease: false
57
- version_requirements: *17368800
41
+ version: '0'
58
42
  - !ruby/object:Gem::Dependency
59
- name: yard
60
- requirement: &17368240 !ruby/object:Gem::Requirement
61
- none: false
43
+ name: rake
44
+ requirement: !ruby/object:Gem::Requirement
62
45
  requirements:
63
- - - ! '>='
46
+ - - '>='
64
47
  - !ruby/object:Gem::Version
65
48
  version: '0'
66
49
  type: :development
67
50
  prerelease: false
68
- version_requirements: *17368240
69
- - !ruby/object:Gem::Dependency
70
- name: jeweler
71
- requirement: &17367600 !ruby/object:Gem::Requirement
72
- none: false
51
+ version_requirements: !ruby/object:Gem::Requirement
73
52
  requirements:
74
- - - ! '>='
53
+ - - '>='
75
54
  - !ruby/object:Gem::Version
76
55
  version: '0'
77
- type: :development
78
- prerelease: false
79
- version_requirements: *17367600
80
56
  - !ruby/object:Gem::Dependency
81
57
  name: rspec
82
- requirement: &17366920 !ruby/object:Gem::Requirement
83
- none: false
58
+ requirement: !ruby/object:Gem::Requirement
84
59
  requirements:
85
- - - ! '>='
60
+ - - '>='
86
61
  - !ruby/object:Gem::Version
87
- version: '2.0'
62
+ version: 2.10.0
88
63
  type: :development
89
64
  prerelease: false
90
- version_requirements: *17366920
91
- - !ruby/object:Gem::Dependency
92
- name: yard
93
- requirement: &17366360 !ruby/object:Gem::Requirement
94
- none: false
65
+ version_requirements: !ruby/object:Gem::Requirement
95
66
  requirements:
96
- - - ! '>='
67
+ - - '>='
97
68
  - !ruby/object:Gem::Version
98
- version: '0'
99
- type: :development
100
- prerelease: false
101
- version_requirements: *17366360
69
+ version: 2.10.0
102
70
  - !ruby/object:Gem::Dependency
103
- name: json
104
- requirement: &17365740 !ruby/object:Gem::Requirement
105
- none: false
71
+ name: yard
72
+ requirement: !ruby/object:Gem::Requirement
106
73
  requirements:
107
- - - ! '>='
74
+ - - '>='
108
75
  - !ruby/object:Gem::Version
109
76
  version: '0'
110
- type: :runtime
77
+ type: :development
111
78
  prerelease: false
112
- version_requirements: *17365740
113
- - !ruby/object:Gem::Dependency
114
- name: rest-client
115
- requirement: &17364880 !ruby/object:Gem::Requirement
116
- none: false
79
+ version_requirements: !ruby/object:Gem::Requirement
117
80
  requirements:
118
- - - ! '>='
81
+ - - '>='
119
82
  - !ruby/object:Gem::Version
120
83
  version: '0'
121
- type: :runtime
122
- prerelease: false
123
- version_requirements: *17364880
124
84
  description: Use the Dynect services REST API
125
85
  email: adam@opscode.com
126
86
  executables: []
@@ -129,43 +89,38 @@ extra_rdoc_files:
129
89
  - LICENSE
130
90
  - README.rdoc
131
91
  files:
132
- - .document
133
- - .rspec
134
- - Gemfile
135
- - Gemfile.lock
136
- - LICENSE
137
- - README.rdoc
138
92
  - Rakefile
139
- - VERSION
140
- - dynect_rest.gemspec
141
- - example.rb
93
+ - LICENSE
142
94
  - lib/dynect_rest.rb
95
+ - lib/dynect_rest/version.rb
143
96
  - lib/dynect_rest/exceptions.rb
97
+ - lib/dynect_rest/gslb.rb
144
98
  - lib/dynect_rest/resource.rb
145
- - spec/dynect_rest_spec.rb
146
99
  - spec/spec_helper.rb
100
+ - spec/dynect_rest_spec.rb
101
+ - README.rdoc
147
102
  homepage: http://github.com/adamhjk/dynect-rest
148
103
  licenses: []
104
+ metadata: {}
149
105
  post_install_message:
150
106
  rdoc_options: []
151
107
  require_paths:
152
108
  - lib
153
109
  required_ruby_version: !ruby/object:Gem::Requirement
154
- none: false
155
110
  requirements:
156
- - - ! '>='
111
+ - - '>='
157
112
  - !ruby/object:Gem::Version
158
113
  version: '0'
159
114
  required_rubygems_version: !ruby/object:Gem::Requirement
160
- none: false
161
115
  requirements:
162
- - - ! '>='
116
+ - - '>='
163
117
  - !ruby/object:Gem::Version
164
118
  version: '0'
165
119
  requirements: []
166
120
  rubyforge_project:
167
- rubygems_version: 1.8.10
121
+ rubygems_version: 2.0.3
168
122
  signing_key:
169
- specification_version: 3
123
+ specification_version: 4
170
124
  summary: Dynect REST API library
171
125
  test_files: []
126
+ has_rdoc:
data/.document DELETED
@@ -1,5 +0,0 @@
1
- README.rdoc
2
- lib/**/*.rb
3
- bin/*
4
- features/**/*.feature
5
- LICENSE
data/.rspec DELETED
@@ -1 +0,0 @@
1
- --color
data/Gemfile DELETED
@@ -1,15 +0,0 @@
1
- source 'http://rubygems.org'
2
-
3
- gem 'rest-client', :require=>"rest_client"
4
- gem 'json'
5
-
6
-
7
- group :development do
8
- gem 'rake'
9
- gem "rspec", "~> 2.0.0"
10
- gem "yard"
11
- gem 'jeweler'
12
- end
13
-
14
-
15
-
data/Gemfile.lock DELETED
@@ -1,36 +0,0 @@
1
- GEM
2
- remote: http://rubygems.org/
3
- specs:
4
- diff-lcs (1.1.2)
5
- git (1.2.5)
6
- jeweler (1.6.2)
7
- bundler (~> 1.0)
8
- git (>= 1.2.5)
9
- rake
10
- json (1.5.1)
11
- mime-types (1.16)
12
- rake (0.9.1)
13
- rest-client (1.6.3)
14
- mime-types (>= 1.16)
15
- rspec (2.0.1)
16
- rspec-core (~> 2.0.1)
17
- rspec-expectations (~> 2.0.1)
18
- rspec-mocks (~> 2.0.1)
19
- rspec-core (2.0.1)
20
- rspec-expectations (2.0.1)
21
- diff-lcs (>= 1.1.2)
22
- rspec-mocks (2.0.1)
23
- rspec-core (~> 2.0.1)
24
- rspec-expectations (~> 2.0.1)
25
- yard (0.7.1)
26
-
27
- PLATFORMS
28
- ruby
29
-
30
- DEPENDENCIES
31
- jeweler
32
- json
33
- rake
34
- rest-client
35
- rspec (~> 2.0.0)
36
- yard
data/VERSION DELETED
@@ -1 +0,0 @@
1
- 0.4.3
data/dynect_rest.gemspec DELETED
@@ -1,80 +0,0 @@
1
- # Generated by jeweler
2
- # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
- # -*- encoding: utf-8 -*-
5
-
6
- Gem::Specification.new do |s|
7
- s.name = "dynect_rest"
8
- s.version = "0.4.3"
9
-
10
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["Adam Jacob"]
12
- s.date = "2012-04-11"
13
- s.description = "Use the Dynect services REST API"
14
- s.email = "adam@opscode.com"
15
- s.extra_rdoc_files = [
16
- "LICENSE",
17
- "README.rdoc"
18
- ]
19
- s.files = [
20
- ".document",
21
- ".rspec",
22
- "Gemfile",
23
- "Gemfile.lock",
24
- "LICENSE",
25
- "README.rdoc",
26
- "Rakefile",
27
- "VERSION",
28
- "dynect_rest.gemspec",
29
- "example.rb",
30
- "lib/dynect_rest.rb",
31
- "lib/dynect_rest/exceptions.rb",
32
- "lib/dynect_rest/resource.rb",
33
- "spec/dynect_rest_spec.rb",
34
- "spec/spec_helper.rb"
35
- ]
36
- s.homepage = "http://github.com/adamhjk/dynect-rest"
37
- s.require_paths = ["lib"]
38
- s.rubygems_version = "1.8.10"
39
- s.summary = "Dynect REST API library"
40
-
41
- if s.respond_to? :specification_version then
42
- s.specification_version = 3
43
-
44
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
45
- s.add_runtime_dependency(%q<rest-client>, [">= 0"])
46
- s.add_runtime_dependency(%q<json>, [">= 0"])
47
- s.add_development_dependency(%q<rake>, [">= 0"])
48
- s.add_development_dependency(%q<rspec>, ["~> 2.0.0"])
49
- s.add_development_dependency(%q<yard>, [">= 0"])
50
- s.add_development_dependency(%q<jeweler>, [">= 0"])
51
- s.add_development_dependency(%q<rspec>, [">= 2.0"])
52
- s.add_development_dependency(%q<yard>, [">= 0"])
53
- s.add_runtime_dependency(%q<json>, [">= 0"])
54
- s.add_runtime_dependency(%q<rest-client>, [">= 0"])
55
- else
56
- s.add_dependency(%q<rest-client>, [">= 0"])
57
- s.add_dependency(%q<json>, [">= 0"])
58
- s.add_dependency(%q<rake>, [">= 0"])
59
- s.add_dependency(%q<rspec>, ["~> 2.0.0"])
60
- s.add_dependency(%q<yard>, [">= 0"])
61
- s.add_dependency(%q<jeweler>, [">= 0"])
62
- s.add_dependency(%q<rspec>, [">= 2.0"])
63
- s.add_dependency(%q<yard>, [">= 0"])
64
- s.add_dependency(%q<json>, [">= 0"])
65
- s.add_dependency(%q<rest-client>, [">= 0"])
66
- end
67
- else
68
- s.add_dependency(%q<rest-client>, [">= 0"])
69
- s.add_dependency(%q<json>, [">= 0"])
70
- s.add_dependency(%q<rake>, [">= 0"])
71
- s.add_dependency(%q<rspec>, ["~> 2.0.0"])
72
- s.add_dependency(%q<yard>, [">= 0"])
73
- s.add_dependency(%q<jeweler>, [">= 0"])
74
- s.add_dependency(%q<rspec>, [">= 2.0"])
75
- s.add_dependency(%q<yard>, [">= 0"])
76
- s.add_dependency(%q<json>, [">= 0"])
77
- s.add_dependency(%q<rest-client>, [">= 0"])
78
- end
79
- end
80
-
data/example.rb DELETED
@@ -1,27 +0,0 @@
1
- require 'dynect_rest'
2
-
3
- DYNECT_CUST = ENV['DYNECT_CUST'] || 'customer'
4
- DYNECT_USER = ENV['DYNECT_USER'] || 'user'
5
- DYNECT_PASS = ENV['DYNECT_PASS'] || 'secretword'
6
- DYNECT_ZONE = ENV['DYNECT_ZONE'] || 'example.com'
7
-
8
- @dyn = DynectRest.new(DYNECT_CUST, DYNECT_USER, DYNECT_PASS, DYNECT_ZONE, true)
9
-
10
- # Create or Update an A Record for the given host
11
- host = "example.#{DYNECT_ZONE}"
12
- @record = @dyn.a.fqdn(host)
13
- if @record.get(host)
14
- @dyn.a.fqdn(host).ttl(300).address("10.4.5.254").save(true)
15
- # the true flag will use a put instead of a post. This is required if you want to be able to update, as welll as create
16
- else
17
- @dyn.a.fqdn(host).ttl(300).address("10.4.5.254").save(false)
18
- end
19
-
20
- # Create a new cname record
21
- @dyn.cname.fqdn("example-cname.#{DYNECT_ZONE}").cname("ec2-10-10-10-10.amazonaws.com").save
22
-
23
- @dyn.publish
24
- @dyn.logout
25
-
26
-
27
-