netdot-restclient 1.4 → 2.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/spec/spec_helper.rb CHANGED
@@ -11,5 +11,5 @@ def connect
11
11
  ssl_verify: false
12
12
  }
13
13
  @netdot = Netdot::RestClient.new(args) if @netdot.nil?
14
- return @netdot
14
+ @netdot
15
15
  end
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: '1.4'
4
+ version: 2.0.0
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: 2014-09-30 00:00:00.000000000 Z
12
+ date: 2015-05-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
16
- requirement: !ruby/object:Gem::Requirement
16
+ requirement: &79226940 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,15 +21,10 @@ dependencies:
21
21
  version: '1.6'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
27
- - - ~>
28
- - !ruby/object:Gem::Version
29
- version: '1.6'
24
+ version_requirements: *79226940
30
25
  - !ruby/object:Gem::Dependency
31
26
  name: rake
32
- requirement: !ruby/object:Gem::Requirement
27
+ requirement: &79224860 !ruby/object:Gem::Requirement
33
28
  none: false
34
29
  requirements:
35
30
  - - ! '>='
@@ -37,15 +32,10 @@ dependencies:
37
32
  version: '0'
38
33
  type: :development
39
34
  prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
43
- - - ! '>='
44
- - !ruby/object:Gem::Version
45
- version: '0'
35
+ version_requirements: *79224860
46
36
  - !ruby/object:Gem::Dependency
47
37
  name: rspec
48
- requirement: !ruby/object:Gem::Requirement
38
+ requirement: &79027910 !ruby/object:Gem::Requirement
49
39
  none: false
50
40
  requirements:
51
41
  - - ~>
@@ -53,15 +43,10 @@ dependencies:
53
43
  version: '2.6'
54
44
  type: :development
55
45
  prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
- requirements:
59
- - - ~>
60
- - !ruby/object:Gem::Version
61
- version: '2.6'
46
+ version_requirements: *79027910
62
47
  - !ruby/object:Gem::Dependency
63
48
  name: httpclient
64
- requirement: !ruby/object:Gem::Requirement
49
+ requirement: &79027320 !ruby/object:Gem::Requirement
65
50
  none: false
66
51
  requirements:
67
52
  - - ! '>='
@@ -69,15 +54,10 @@ dependencies:
69
54
  version: '0'
70
55
  type: :runtime
71
56
  prerelease: false
72
- version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
- requirements:
75
- - - ! '>='
76
- - !ruby/object:Gem::Version
77
- version: '0'
57
+ version_requirements: *79027320
78
58
  - !ruby/object:Gem::Dependency
79
59
  name: xml-simple
80
- requirement: !ruby/object:Gem::Requirement
60
+ requirement: &79026340 !ruby/object:Gem::Requirement
81
61
  none: false
82
62
  requirements:
83
63
  - - ! '>='
@@ -85,12 +65,7 @@ dependencies:
85
65
  version: '0'
86
66
  type: :runtime
87
67
  prerelease: false
88
- version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
- requirements:
91
- - - ! '>='
92
- - !ruby/object:Gem::Version
93
- version: '0'
68
+ version_requirements: *79026340
94
69
  description: Talk to Netdot via REST with Ruby
95
70
  email:
96
71
  - cvicente@gmail.com
@@ -99,21 +74,25 @@ extensions: []
99
74
  extra_rdoc_files: []
100
75
  files:
101
76
  - .gitignore
77
+ - .rubocop-bbatsov-default.yml
78
+ - .rubocop-bbatsov-disabled.yml
79
+ - .rubocop-bbatsov-enabled.yml
80
+ - .rubocop.yml
102
81
  - Gemfile
103
82
  - LICENSE.txt
104
83
  - README.md
105
84
  - Rakefile
106
85
  - lib/netdot.rb
107
86
  - lib/netdot/host.rb
87
+ - lib/netdot/ipblock.rb
108
88
  - lib/netdot/restclient.rb
109
89
  - lib/netdot/restclient/version.rb
110
- - lib/netdot/subnet.rb
111
90
  - netdot-restclient.gemspec
112
- - sample/host.rb
91
+ - sample/sample.rb
113
92
  - spec/host_spec.rb
93
+ - spec/ipblock_spec.rb
114
94
  - spec/restclient_spec.rb
115
95
  - spec/spec_helper.rb
116
- - spec/subnet_spec.rb
117
96
  homepage: ''
118
97
  licenses:
119
98
  - Apache-2.0
@@ -135,12 +114,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
135
114
  version: '0'
136
115
  requirements: []
137
116
  rubyforge_project:
138
- rubygems_version: 1.8.23
117
+ rubygems_version: 1.8.11
139
118
  signing_key:
140
119
  specification_version: 3
141
120
  summary: RESTful API client for Netdot
142
121
  test_files:
143
122
  - spec/host_spec.rb
123
+ - spec/ipblock_spec.rb
144
124
  - spec/restclient_spec.rb
145
125
  - spec/spec_helper.rb
146
- - spec/subnet_spec.rb
126
+ has_rdoc:
data/lib/netdot/subnet.rb DELETED
@@ -1,107 +0,0 @@
1
- module Netdot
2
- class Subnet
3
- attr_accessor :connection
4
-
5
- def initialize(argv = {})
6
- [:connection].each do |k|
7
- raise ArgumentError, "Missing required argument '#{k}'" unless argv[k]
8
- end
9
-
10
- argv.each { |k,v| instance_variable_set("@#{k}", v) }
11
- end
12
-
13
- # Get next available subnet in given container
14
- #
15
- # Arguments:
16
- # IP container block (string)
17
- # CIDR subnet size (optional integer)
18
- # description (optional string)
19
- # Returns:
20
- # New subnet ID when successful
21
- #
22
- def allocate(container, prefix=24, description=nil)
23
-
24
- # Netdot currently only supports /24 prefixes
25
- raise ArgumentError, "Prefix size #{prefix} is not currently supported (must be 24)" unless prefix==24
26
-
27
- # Search for container and get its ID
28
- cont_id = get_ipblock_id(container)
29
-
30
- # Get container's children blocks
31
- begin
32
- resp = @connection.get("Ipblock?parent=#{cont_id}")
33
- rescue Exception => e
34
- # Not Found is ok, otherwise re-raise
35
- raise unless (e.message =~ /404/)
36
- end
37
-
38
- # store existing subnets in hash (if any)
39
- subnets = Hash.new
40
- if ( resp )
41
- resp.values.each do |b|
42
- b.each do |k,v|
43
- address = v['address']
44
- subnets[address] = 1
45
- end
46
- end
47
- end
48
-
49
- # Iterate over all possible subnets
50
- # This assumes that subnets are /24
51
- spref = container.split('/')[0]
52
- spref.gsub!(/(\d+\.\d+)\..*/, '\1')
53
-
54
- (1..255).each do |n|
55
- saddr = spref.dup
56
- saddr = spref + ".#{n}.0"
57
- if !subnets.empty? && subnets.key?(saddr)
58
- next # subnet exists
59
- end
60
-
61
- # Create subnet
62
- args = { 'address' => saddr, 'prefix' => prefix.to_s, 'status' => 'Subnet' }
63
- args['description'] = description unless description.nil?
64
- resp = @connection.post("Ipblock", args)
65
- return resp['address'] + '/' + resp['prefix']
66
- end
67
-
68
- raise "Could not allocate subnet in #{container}"
69
- end
70
-
71
- ######################################################################
72
- # Delete subnet and all its records
73
- #
74
- # Arguments:
75
- # subnet address (CIDR)
76
- # Returns:
77
- # True if successful
78
- #
79
- def delete(subnet)
80
- resp = @connection.get("host?subnet=#{subnet}")
81
-
82
- if ! resp.empty?
83
- resp['Ipblock'].keys.each do |id|
84
- @connection.delete("Ipblock/#{id}")
85
- end
86
- end
87
-
88
- sid = get_ipblock_id(subnet)
89
- @connection.delete("Ipblock/#{sid}")
90
- end
91
-
92
- private
93
- ######################################################################
94
- # Get Ipblock ID given its address in CIDR format
95
- #
96
- # Arguments:
97
- # subnet address (CIDR)
98
- # Returns:
99
- # ID (number)
100
- #
101
- def get_ipblock_id(cidr)
102
- (address, prefix) = cidr.split('/')
103
- resp = @connection.get("Ipblock?address=#{address}&prefix=#{prefix}")
104
- resp['Ipblock'].keys[0]
105
- end
106
- end
107
- end
data/sample/host.rb DELETED
@@ -1,36 +0,0 @@
1
- #
2
- # Example: Use the special-purpose 'host' resource
3
- # to allocate a new IP and assign DNS records
4
- #
5
- #
6
- require 'netdot/restclient'
7
-
8
- require 'pp'
9
-
10
- netdot = Netdot::RestClient.new(
11
- :server => 'http://localhost/netdot',
12
- :username => 'admin',
13
- :password => 'admin',
14
- )
15
- # Add
16
- # This allocates the first available IP in the given subnet
17
- # and creates A and PTR records, assuming that the subnet
18
- # is associated with the appropriate forward and reverse zones
19
- netdot.post('host', { 'name' => 'testhost1', 'subnet' => '192.168.1.0/24'})
20
-
21
- # Find
22
- resp = netdot.get('host?name=testhost1.defaultdomain')
23
-
24
- pp resp
25
-
26
- ipid = resp['Ipblock'].keys[0]
27
-
28
- # Delete DNS records associated with new IP
29
- netdot.delete("host?ipid=#{ipid}")
30
-
31
- # Notice that the above does not delete the Ipblock object, but
32
- # marks it as "available"
33
- # If user has admin privileges and really wants to delete the
34
- # Ipblock, then they can do:
35
-
36
- netdot.delete("Ipblock/#{ipid}")
data/spec/subnet_spec.rb DELETED
@@ -1,46 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Netdot::Subnet do
4
-
5
- before :all do
6
- @netdot = connect
7
- @subnet = Netdot::Subnet.new(:connection => @netdot) if @subnet.nil?
8
- end
9
-
10
- context 'when creating a new Subnet instance' do
11
- it 'creates a new instance' do
12
- expect {
13
- subnet = Netdot::Subnet.new(:connection => @netdot)
14
- }.not_to raise_error
15
- end
16
-
17
- it 'raises an exception for invalid arguments' do
18
- expect {
19
- subnet = Netdot::Subnet.new
20
- }.to raise_error(ArgumentError)
21
- end
22
- end
23
-
24
- context 'creating a new subnet' do
25
- it 'allocates a new subnet' do
26
- subnet_id = @subnet.allocate('10.0.0.0/8', 24, 'test')
27
- expect(subnet_id).to match('10.0.*.0/24')
28
- end
29
-
30
- it 'throws an exception if the prefix is not /24' do
31
- expect {
32
- subnet_id = @subnet.allocate('10.0.0.0/8', 26)
33
- }.to raise_error(ArgumentError)
34
- end
35
- end
36
-
37
- context 'deleting a subnet' do
38
- let(:subnet_id) do
39
- @subnet.allocate('10.0.0.0/8', 24)
40
- end
41
-
42
- it 'deletes a subnet' do
43
- expect(@subnet.delete(subnet_id)).to be_truthy
44
- end
45
- end
46
- end