netdot-restclient 2.0.1 → 2.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -51,6 +51,28 @@ module Netdot
51
51
  @connection.post('host', 'name' => name, 'address' => ip)
52
52
  end
53
53
 
54
+ # Creates a DNS A record for the specified name, using the next
55
+ # available IP address in the given subnet.
56
+ # Will also create PTR record if .arpa zone exists.
57
+ # @param name [String]
58
+ # @param subnet [String]
59
+ # @return [String] IP address allocated
60
+ def create_next(name, subnet)
61
+ Netdot.logger.debug("Creating new DNS records with name:#{name}" \
62
+ " and in subnet:#{subnet}")
63
+ host = @connection.post('host', 'name' => name, 'subnet' => subnet)
64
+ r = find_by_name(host['name'])
65
+ # The issue here is that the response only gives us the RR
66
+ # which can have both IPv4 and IPv6 addresses, so we need to
67
+ # try to pick the right one to return
68
+ r['Ipblock'].keys.each do |id|
69
+ if (r['Ipblock'][id]['parent'] == subnet)
70
+ return r['Ipblock'][id]['address']
71
+ end
72
+ end
73
+ fail 'Failed to find the allocated address'
74
+ end
75
+
54
76
  # Updates the DNS A record for the sepcified name and IP.
55
77
  # Will also create PTR record if .arpa zone exists.
56
78
  # @param name [String]
@@ -21,9 +21,8 @@ module Netdot
21
21
  # @return [String] new Ipblock id, or nil
22
22
  def allocate(container, prefix = 24, description = nil)
23
23
  # Netdot currently only supports /24 prefixes
24
- fail ArgumentError,
25
- "Prefix size #{prefix} is not currently supported (must be 24)" \
26
- unless prefix == 24
24
+ fail ArgumentError, "Prefix size #{prefix} is not currently supported \
25
+ (must be 24)" unless prefix == 24
27
26
 
28
27
  # Search for container and get its ID
29
28
  cont_id = find_by_addr(container)
@@ -111,8 +110,8 @@ module Netdot
111
110
  # @return [Array<Ipblock>]
112
111
  def find_by_descr(descr)
113
112
  @connection.get("Ipblock?description=#{descr}")['Ipblock']
114
- rescue => e
115
- raise unless e.message =~ /404/
113
+ rescue => e
114
+ raise unless e.message =~ /404/
116
115
  end
117
116
  end
118
117
  end
@@ -2,7 +2,7 @@
2
2
  module Netdot
3
3
  # RestClient
4
4
  class RestClient
5
- VERSION = '2.0.1'
5
+ VERSION = '2.0.3'
6
6
 
7
7
  def version
8
8
  VERSION
@@ -3,10 +3,14 @@ require 'spec_helper'
3
3
  describe Netdot::Host do
4
4
  before :all do
5
5
  @netdot = connect
6
+ @ipblock = Netdot::Ipblock.new(connection: @netdot)
6
7
  @host = Netdot::Host.new(connection: @netdot) if @host.nil?
7
- pblock = Netdot::Ipblock.new(connection: @netdot)
8
- cidr = pblock.allocate('10.0.0.0/8', 24, 'rspec-Ipblock-host')
9
- @cidr = NetAddr::CIDR.create(cidr)
8
+ @test_net = '198.18.254.0/24' # RFC 2544
9
+ @test_6net = '2001:db8:ffff::/64' # RFC 3839
10
+ @netdot.post('Ipblock', 'address' => @test_net, 'status' => 'Subnet')
11
+ @netdot.post('Ipblock', 'address' => @test_6net, 'status' => 'Subnet')
12
+ @cidr = NetAddr::CIDR.create(@test_net)
13
+ @cidr6 = NetAddr::CIDR.create(@test_6net)
10
14
  end
11
15
 
12
16
  context 'when creating a new Host instance' do
@@ -24,12 +28,24 @@ describe Netdot::Host do
24
28
  end
25
29
 
26
30
  context 'when creating a new host' do
27
- it 'creates a new host allocation' do
31
+ it 'creates new records for given name and IP' do
28
32
  h = @host.create('rspec-test0-01-yyy', @cidr.nth(1))
29
33
  expect(h.key? 'name').to be_truthy
30
34
  expect(h['name']).to match('rspec-test0-01-yyy')
31
35
  end
32
36
 
37
+ it 'creates new records for given name in given v4 subnet' do
38
+ h = @host.create_next('rspec-test0-02-yyy', @cidr.to_s)
39
+ expect(h).to be_truthy
40
+ expect(h).to match(@cidr.nth(2))
41
+ end
42
+
43
+ it 'creates new records for given name in given v6 subnet' do
44
+ h = @host.create_next('rspec-test0-02-yyy', @cidr6.to_s(Short: true))
45
+ expect(h).to be_truthy
46
+ expect(h).to match(@cidr6.nth(1, Short: true))
47
+ end
48
+
33
49
  it 'updates an existing allocation' do
34
50
  h = @host.update('rspec-test0-01-zzz', @cidr.nth(1))
35
51
  expect(h.key? 'name').to be_truthy
@@ -56,4 +72,13 @@ describe Netdot::Host do
56
72
  end.not_to raise_error
57
73
  end
58
74
  end
75
+
76
+ context 'when cleaning up' do
77
+ it 'deletes test subnet and all its children' do
78
+ expect(@ipblock.delete(@test_net, true)).to be_truthy
79
+ end
80
+ it 'deletes test v6 subnet and all its children' do
81
+ expect(@ipblock.delete(@test_6net, true)).to be_truthy
82
+ end
83
+ end
59
84
  end
@@ -42,11 +42,11 @@ describe Netdot::Ipblock do
42
42
  it 'raises an exception for an improperly formatted name' do
43
43
  expect do
44
44
  @ipblock.find_by_descr('rspec-Ipblock-one&Foo=bar')
45
- end.to raise_error
45
+ end.to raise_error(RuntimeError)
46
46
  end
47
47
 
48
- it 'return nil for an empty string' do
49
- expect(@ipblock.find_by_descr('')).to be_nil
48
+ it 'return nil for a non-existent string' do
49
+ expect(@ipblock.find_by_descr('21684dfgergscvfwr')).to be_nil
50
50
  end
51
51
 
52
52
  it 'return nil if not found' do
@@ -24,7 +24,7 @@ describe Netdot::RestClient do
24
24
  }
25
25
  expect do
26
26
  Netdot::RestClient.new(args)
27
- end.to raise_error
27
+ end.to raise_error(RuntimeError)
28
28
  end
29
29
 
30
30
  # The following two assume that local server has SSL
@@ -38,7 +38,7 @@ describe Netdot::RestClient do
38
38
  if ENV['SERVER'] =~ /^https:/
39
39
  expect do
40
40
  Netdot::RestClient.new(args)
41
- end.to raise_error
41
+ end.to raise_error(RuntimeError)
42
42
  else
43
43
  STDERR.puts 'Warning: Skipping the following test' \
44
44
  ", as URL scheme is not 'https:'"
@@ -67,7 +67,7 @@ describe Netdot::RestClient do
67
67
  it 'invalid resource raises exception' do
68
68
  expect do
69
69
  @netdot.get('foobar')
70
- end.to raise_error
70
+ end.to raise_error(RuntimeError)
71
71
  end
72
72
 
73
73
  it 'valid resource as hash' do
@@ -90,7 +90,7 @@ describe Netdot::RestClient do
90
90
  it 'fails to update invalid record' do
91
91
  expect do
92
92
  @netdot.post('Foobar/1', 'key' => 'value')
93
- end.to raise_error
93
+ end.to raise_error(RuntimeError)
94
94
  end
95
95
 
96
96
  it 'creates new record' do
@@ -110,7 +110,7 @@ describe Netdot::RestClient do
110
110
  'lastname' => 'Plumber',
111
111
  'username' => 'joetubes'
112
112
  )
113
- end.to raise_error
113
+ end.to raise_error(RuntimeError)
114
114
  end
115
115
  end
116
116
 
@@ -118,7 +118,7 @@ describe Netdot::RestClient do
118
118
  it 'fails to delete invalid record' do
119
119
  expect do
120
120
  @netdot.delete('FooBar/1234')
121
- end.to raise_error
121
+ end.to raise_error(RuntimeError)
122
122
  end
123
123
 
124
124
  it 'deletes exiting record' do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: netdot-restclient
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.1
4
+ version: 2.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-05-12 00:00:00.000000000 Z
12
+ date: 2015-10-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
16
- requirement: &81443330 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,15 @@ dependencies:
21
21
  version: '1.9'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *81443330
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: '1.9'
25
30
  - !ruby/object:Gem::Dependency
26
31
  name: logger
27
- requirement: &81443080 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
28
33
  none: false
29
34
  requirements:
30
35
  - - ~>
@@ -32,10 +37,15 @@ dependencies:
32
37
  version: '1.2'
33
38
  type: :development
34
39
  prerelease: false
35
- version_requirements: *81443080
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: '1.2'
36
46
  - !ruby/object:Gem::Dependency
37
47
  name: netaddr
38
- requirement: &81442850 !ruby/object:Gem::Requirement
48
+ requirement: !ruby/object:Gem::Requirement
39
49
  none: false
40
50
  requirements:
41
51
  - - ~>
@@ -43,10 +53,15 @@ dependencies:
43
53
  version: '1.5'
44
54
  type: :development
45
55
  prerelease: false
46
- version_requirements: *81442850
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: '1.5'
47
62
  - !ruby/object:Gem::Dependency
48
63
  name: rake
49
- requirement: &81442620 !ruby/object:Gem::Requirement
64
+ requirement: !ruby/object:Gem::Requirement
50
65
  none: false
51
66
  requirements:
52
67
  - - ~>
@@ -54,10 +69,15 @@ dependencies:
54
69
  version: '10.4'
55
70
  type: :development
56
71
  prerelease: false
57
- version_requirements: *81442620
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: '10.4'
58
78
  - !ruby/object:Gem::Dependency
59
79
  name: redcarpet
60
- requirement: &81442390 !ruby/object:Gem::Requirement
80
+ requirement: !ruby/object:Gem::Requirement
61
81
  none: false
62
82
  requirements:
63
83
  - - ~>
@@ -65,10 +85,15 @@ dependencies:
65
85
  version: '3.2'
66
86
  type: :development
67
87
  prerelease: false
68
- version_requirements: *81442390
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ~>
92
+ - !ruby/object:Gem::Version
93
+ version: '3.2'
69
94
  - !ruby/object:Gem::Dependency
70
95
  name: rspec
71
- requirement: &81442160 !ruby/object:Gem::Requirement
96
+ requirement: !ruby/object:Gem::Requirement
72
97
  none: false
73
98
  requirements:
74
99
  - - ~>
@@ -76,10 +101,15 @@ dependencies:
76
101
  version: '2.99'
77
102
  type: :development
78
103
  prerelease: false
79
- version_requirements: *81442160
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ~>
108
+ - !ruby/object:Gem::Version
109
+ version: '2.99'
80
110
  - !ruby/object:Gem::Dependency
81
111
  name: rubocop
82
- requirement: &81441930 !ruby/object:Gem::Requirement
112
+ requirement: !ruby/object:Gem::Requirement
83
113
  none: false
84
114
  requirements:
85
115
  - - ~>
@@ -87,10 +117,15 @@ dependencies:
87
117
  version: '0.31'
88
118
  type: :development
89
119
  prerelease: false
90
- version_requirements: *81441930
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ~>
124
+ - !ruby/object:Gem::Version
125
+ version: '0.31'
91
126
  - !ruby/object:Gem::Dependency
92
127
  name: yard
93
- requirement: &81441700 !ruby/object:Gem::Requirement
128
+ requirement: !ruby/object:Gem::Requirement
94
129
  none: false
95
130
  requirements:
96
131
  - - ~>
@@ -98,10 +133,15 @@ dependencies:
98
133
  version: '0.8'
99
134
  type: :development
100
135
  prerelease: false
101
- version_requirements: *81441700
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ~>
140
+ - !ruby/object:Gem::Version
141
+ version: '0.8'
102
142
  - !ruby/object:Gem::Dependency
103
143
  name: httpclient
104
- requirement: &81441470 !ruby/object:Gem::Requirement
144
+ requirement: !ruby/object:Gem::Requirement
105
145
  none: false
106
146
  requirements:
107
147
  - - ~>
@@ -109,10 +149,15 @@ dependencies:
109
149
  version: '2.6'
110
150
  type: :runtime
111
151
  prerelease: false
112
- version_requirements: *81441470
152
+ version_requirements: !ruby/object:Gem::Requirement
153
+ none: false
154
+ requirements:
155
+ - - ~>
156
+ - !ruby/object:Gem::Version
157
+ version: '2.6'
113
158
  - !ruby/object:Gem::Dependency
114
159
  name: xml-simple
115
- requirement: &81441240 !ruby/object:Gem::Requirement
160
+ requirement: !ruby/object:Gem::Requirement
116
161
  none: false
117
162
  requirements:
118
163
  - - ~>
@@ -120,7 +165,12 @@ dependencies:
120
165
  version: '1.1'
121
166
  type: :runtime
122
167
  prerelease: false
123
- version_requirements: *81441240
168
+ version_requirements: !ruby/object:Gem::Requirement
169
+ none: false
170
+ requirements:
171
+ - - ~>
172
+ - !ruby/object:Gem::Version
173
+ version: '1.1'
124
174
  description: Talk to Netdot via REST with Ruby
125
175
  email:
126
176
  - cvicente@gmail.com
@@ -170,7 +220,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
170
220
  version: '0'
171
221
  requirements: []
172
222
  rubyforge_project:
173
- rubygems_version: 1.8.11
223
+ rubygems_version: 1.8.23.2
174
224
  signing_key:
175
225
  specification_version: 3
176
226
  summary: RESTful API client for Netdot