netbox-client-ruby 0.1.2 → 0.1.3
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 +4 -4
- data/Gemfile.lock +2 -2
- data/README.md +31 -3
- data/VERSION +1 -1
- data/docker-compose.yml +0 -20
- data/lib/netbox_client_ruby/api/dcim.rb +8 -0
- data/lib/netbox_client_ruby/api/dcim/power_outlet.rb +18 -0
- data/lib/netbox_client_ruby/api/dcim/power_outlets.rb +21 -0
- data/lib/netbox_client_ruby/api/dcim/power_port.rb +18 -0
- data/lib/netbox_client_ruby/api/dcim/power_ports.rb +21 -0
- data/lib/netbox_client_ruby/communication.rb +32 -15
- data/lib/netbox_client_ruby/entity.rb +16 -28
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 06b586e73594396dd7fdcffce33dde0a8a7c5ae6
|
4
|
+
data.tar.gz: 6c10c27dc81db8f26a3f5a5c319ef06b7d2b8688
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 792d23f9938ea1e8a974db2a53fd67d6de86899f2a1f4cce6e5778e16d7ea1f3a72f97cfff2c738d03b59fe62a33e8d0faa4c8c1ff6e2942b660d4ed1d07db0d
|
7
|
+
data.tar.gz: 7ee301dccf03b6c31691871416d65cdb8dded5a4c46f4a26cd313abe2b23855e9c6112289fea316055c6f70dc436184d43182b585db1eca8d5e0399293255f03
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
netbox-client-ruby (0.1.
|
4
|
+
netbox-client-ruby (0.1.3)
|
5
5
|
dry-configurable (~> 0.1)
|
6
6
|
faraday (>= 0.11.0)
|
7
7
|
faraday-detailed_logger (~> 2.1)
|
@@ -18,7 +18,7 @@ GEM
|
|
18
18
|
diff-lcs (1.3)
|
19
19
|
dry-configurable (0.7.0)
|
20
20
|
concurrent-ruby (~> 1.0)
|
21
|
-
faraday (0.
|
21
|
+
faraday (0.13.1)
|
22
22
|
multipart-post (>= 1.2, < 3)
|
23
23
|
faraday-detailed_logger (2.1.2)
|
24
24
|
faraday (~> 0.8)
|
data/README.md
CHANGED
@@ -76,6 +76,32 @@ puts "The first site is called #{first_site.name}."
|
|
76
76
|
devices_of_site = NetboxClientRuby.dcim.devices.filter(site: first_site.slug)
|
77
77
|
puts "#{devices_of_site.total} devices belong to the site. #{devices_of_site}.length devices have been fetched."
|
78
78
|
|
79
|
+
# get a site by id
|
80
|
+
s = NetboxClientRuby.dcim.site(1)
|
81
|
+
|
82
|
+
# update a site
|
83
|
+
s.update(name: 'Zurich', slug: 'zrh')
|
84
|
+
|
85
|
+
# update a site (alternative)
|
86
|
+
s.name = 'Amsterdam'
|
87
|
+
s.slug = 'ams'
|
88
|
+
s.save
|
89
|
+
|
90
|
+
# create a site
|
91
|
+
new_s = NetboxClientRuby::DCIM::Site.new
|
92
|
+
new_s.name = 'Berlin'
|
93
|
+
new_s.slug = 'ber'
|
94
|
+
new_s.save
|
95
|
+
|
96
|
+
# create a site (alternative)
|
97
|
+
new_s = NetboxClientRuby::DCIM::Site
|
98
|
+
.new(name: 'Berlin', slug: 'ber')
|
99
|
+
.save
|
100
|
+
|
101
|
+
# delete a site
|
102
|
+
s = NetboxClientRuby.dcim.site(1)
|
103
|
+
s.delete
|
104
|
+
|
79
105
|
# working with secrets
|
80
106
|
secrets = NetboxClientRuby.secrets.secrets
|
81
107
|
puts "#{secrets.total} secrets are in your Netbox."
|
@@ -106,6 +132,8 @@ Not all objects which the Netbox API exposes are currently implemented. Implemen
|
|
106
132
|
* Interfaces
|
107
133
|
* Manufacturers
|
108
134
|
* Platforms
|
135
|
+
* Power Outlets
|
136
|
+
* Power Ports
|
109
137
|
* Racks
|
110
138
|
* Regions
|
111
139
|
* Sites
|
@@ -126,7 +154,7 @@ Not all objects which the Netbox API exposes are currently implemented. Implemen
|
|
126
154
|
* Tenancy:
|
127
155
|
* Tenant
|
128
156
|
* Tenant Groups
|
129
|
-
|
157
|
+
|
130
158
|
If you can't find the object you need, also check
|
131
159
|
[the source code](https://github.com/ninech/netbox-client-ruby/tree/master/lib/netbox_client_ruby/api)
|
132
160
|
if it was added in the meantime without the list above having been updated.
|
@@ -159,6 +187,6 @@ The gem is available as open source under the terms of the [MIT License](http://
|
|
159
187
|
|
160
188
|
## About
|
161
189
|
|
162
|
-
This gem is currently maintained and funded by [nine
|
190
|
+
This gem is currently maintained and funded by [nine](https://nine.ch).
|
163
191
|
|
164
|
-
[](https://www.nine.ch)
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.3
|
data/docker-compose.yml
CHANGED
@@ -1,25 +1,5 @@
|
|
1
1
|
version: '2'
|
2
2
|
services:
|
3
|
-
app:
|
4
|
-
build:
|
5
|
-
context: .
|
6
|
-
args:
|
7
|
-
RUBY_VERSION: 2.3.4
|
8
|
-
image: netbox-client-ruby:2.3.4
|
9
|
-
depends_on:
|
10
|
-
- nginx
|
11
|
-
volumes:
|
12
|
-
- .:/app
|
13
|
-
app24:
|
14
|
-
build:
|
15
|
-
context: .
|
16
|
-
args:
|
17
|
-
RUBY_VERSION: 2.4.1
|
18
|
-
image: netbox-client-ruby:2.4.1
|
19
|
-
depends_on:
|
20
|
-
- nginx
|
21
|
-
volumes:
|
22
|
-
- .:/app
|
23
3
|
nginx:
|
24
4
|
image: nginx:1.11-alpine
|
25
5
|
command: nginx -g 'daemon off;' -c /etc/netbox-nginx/nginx.conf
|
@@ -12,6 +12,10 @@ require 'netbox_client_ruby/api/dcim/manufacturer'
|
|
12
12
|
require 'netbox_client_ruby/api/dcim/manufacturers'
|
13
13
|
require 'netbox_client_ruby/api/dcim/platform'
|
14
14
|
require 'netbox_client_ruby/api/dcim/platforms'
|
15
|
+
require 'netbox_client_ruby/api/dcim/power_outlet'
|
16
|
+
require 'netbox_client_ruby/api/dcim/power_outlets'
|
17
|
+
require 'netbox_client_ruby/api/dcim/power_port'
|
18
|
+
require 'netbox_client_ruby/api/dcim/power_ports'
|
15
19
|
require 'netbox_client_ruby/api/dcim/rack'
|
16
20
|
require 'netbox_client_ruby/api/dcim/racks'
|
17
21
|
require 'netbox_client_ruby/api/dcim/region'
|
@@ -30,6 +34,8 @@ module NetboxClientRuby
|
|
30
34
|
inventory_items: InventoryItems,
|
31
35
|
manufacturers: Manufacturers,
|
32
36
|
platforms: Platforms,
|
37
|
+
power_outlets: PowerOutlets,
|
38
|
+
power_ports: PowerPorts,
|
33
39
|
racks: Racks,
|
34
40
|
regions: Regions,
|
35
41
|
sites: Sites
|
@@ -46,6 +52,8 @@ module NetboxClientRuby
|
|
46
52
|
inventory_item: InventoryItem,
|
47
53
|
manufacturer: Manufacturer,
|
48
54
|
platform: Platform,
|
55
|
+
power_outlet: PowerOutlet,
|
56
|
+
power_port: PowerPort,
|
49
57
|
rack: Rack,
|
50
58
|
region: Region,
|
51
59
|
site: Site
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'netbox_client_ruby/entity'
|
2
|
+
require 'netbox_client_ruby/api/dcim/device'
|
3
|
+
require 'netbox_client_ruby/api/dcim/power_port'
|
4
|
+
|
5
|
+
module NetboxClientRuby
|
6
|
+
module DCIM
|
7
|
+
class PowerOutlet
|
8
|
+
include Entity
|
9
|
+
|
10
|
+
id id: :id
|
11
|
+
deletable true
|
12
|
+
path 'dcim/power-outlets/:id.json'
|
13
|
+
creation_path 'dcim/power-outlets/'
|
14
|
+
object_fields device: proc { |raw_data| Device.new raw_data['id'] }
|
15
|
+
object_fields connected_port: proc { |raw_data| PowerPort.new raw_data }
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'netbox_client_ruby/entities'
|
2
|
+
require 'netbox_client_ruby/api/dcim/interface'
|
3
|
+
|
4
|
+
module NetboxClientRuby
|
5
|
+
module DCIM
|
6
|
+
class PowerOutlets
|
7
|
+
include Entities
|
8
|
+
|
9
|
+
path 'dcim/power-outlets.json'
|
10
|
+
data_key 'results'
|
11
|
+
count_key 'count'
|
12
|
+
entity_creator :entity_creator
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def entity_creator(raw_entity)
|
17
|
+
PowerOutlet.new raw_entity['id']
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'netbox_client_ruby/entity'
|
2
|
+
require 'netbox_client_ruby/api/dcim/device'
|
3
|
+
require 'netbox_client_ruby/api/dcim/power_outlet'
|
4
|
+
|
5
|
+
module NetboxClientRuby
|
6
|
+
module DCIM
|
7
|
+
class PowerPort
|
8
|
+
include Entity
|
9
|
+
|
10
|
+
id id: :id
|
11
|
+
deletable true
|
12
|
+
path 'dcim/power-ports/:id.json'
|
13
|
+
creation_path 'dcim/power-ports/'
|
14
|
+
object_fields device: proc { |raw_data| Device.new raw_data['id'] }
|
15
|
+
object_fields power_outlet: proc { |raw_data| PowerOutlet.new raw_data['id'] }
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'netbox_client_ruby/entities'
|
2
|
+
require 'netbox_client_ruby/api/dcim/interface'
|
3
|
+
|
4
|
+
module NetboxClientRuby
|
5
|
+
module DCIM
|
6
|
+
class PowerPorts
|
7
|
+
include Entities
|
8
|
+
|
9
|
+
path 'dcim/power-ports.json'
|
10
|
+
data_key 'results'
|
11
|
+
count_key 'count'
|
12
|
+
entity_creator :entity_creator
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def entity_creator(raw_entity)
|
17
|
+
PowerPort.new raw_entity['id']
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -8,7 +8,7 @@ module NetboxClientRuby
|
|
8
8
|
return nil if response.status == 304
|
9
9
|
return {} if response.status == 204
|
10
10
|
|
11
|
-
raise_on_http_error response
|
11
|
+
raise_on_http_error response
|
12
12
|
|
13
13
|
read response
|
14
14
|
end
|
@@ -32,43 +32,60 @@ module NetboxClientRuby
|
|
32
32
|
|
33
33
|
private
|
34
34
|
|
35
|
+
def sanitize_variable_name(raw_name)
|
36
|
+
raw_name.gsub(/[^a-zA-Z0-9_]/, '_')
|
37
|
+
end
|
38
|
+
|
35
39
|
def read(response)
|
36
40
|
response.body
|
37
41
|
end
|
38
42
|
|
39
|
-
def raise_on_http_error(
|
43
|
+
def raise_on_http_error(response)
|
44
|
+
status = response.status
|
45
|
+
body = response.body
|
46
|
+
|
40
47
|
case status
|
41
48
|
when 200..399 then
|
42
49
|
when 400..499 then
|
43
|
-
raise_on_http_client_error
|
50
|
+
raise_on_http_client_error response
|
44
51
|
when 500..599 then
|
45
|
-
raise NetboxClientRuby::RemoteError, "#{status} Remote Error"
|
52
|
+
raise NetboxClientRuby::RemoteError, "#{status} Remote Error#{formatted_body(body)}"
|
46
53
|
else
|
47
|
-
raise NetboxClientRuby::RemoteError, "#{status} Unknown Error Code"
|
54
|
+
raise NetboxClientRuby::RemoteError, "#{status} Unknown Error Code#{formatted_body(body)}"
|
48
55
|
end
|
49
56
|
end
|
50
57
|
|
51
|
-
def raise_on_http_client_error(
|
58
|
+
def raise_on_http_client_error(response)
|
59
|
+
status = response.status
|
60
|
+
body = response.body
|
61
|
+
|
52
62
|
case status
|
53
63
|
when 400 then
|
54
|
-
|
64
|
+
raise_client_error '400 Bad Request', body
|
55
65
|
when 401 then
|
56
|
-
|
66
|
+
raise_client_error '401 Unauthorized', body
|
57
67
|
when 403 then
|
58
|
-
|
68
|
+
raise_client_error '403 Forbidden', body
|
59
69
|
when 405 then
|
60
|
-
|
70
|
+
raise_client_error '405 Method Not Allowed', body
|
61
71
|
when 415 then
|
62
|
-
|
72
|
+
raise_client_error '415 Unsupported Media Type', body
|
63
73
|
when 429 then
|
64
|
-
|
74
|
+
raise_client_error '429 Too Many Requests', body
|
65
75
|
else
|
66
|
-
|
76
|
+
raise_client_error "#{status} Request Error", body
|
67
77
|
end
|
68
78
|
end
|
69
79
|
|
70
|
-
def
|
71
|
-
|
80
|
+
def raise_client_error(message, body = nil)
|
81
|
+
raise NetboxClientRuby::ClientError, "#{message}#{formatted_body(body)}"
|
82
|
+
end
|
83
|
+
|
84
|
+
def formatted_body(body)
|
85
|
+
return '' if body.nil? || body.empty?
|
86
|
+
shortened = body.to_s[0, 50]
|
87
|
+
one_line = shortened.gsub(/\n/, '\n')
|
88
|
+
" (#{one_line})"
|
72
89
|
end
|
73
90
|
end
|
74
91
|
end
|
@@ -104,17 +104,22 @@ module NetboxClientRuby
|
|
104
104
|
end
|
105
105
|
end
|
106
106
|
|
107
|
-
def initialize(
|
108
|
-
return self if
|
107
|
+
def initialize(given_values = nil)
|
108
|
+
return self if given_values.nil?
|
109
109
|
|
110
|
-
if id_fields.count == 1 && !
|
111
|
-
instance_variable_set("@#{id_fields.keys.first}",
|
110
|
+
if id_fields.count == 1 && !given_values.is_a?(Hash)
|
111
|
+
instance_variable_set("@#{id_fields.keys.first}", given_values)
|
112
112
|
return self
|
113
113
|
end
|
114
114
|
|
115
|
-
|
116
|
-
|
117
|
-
|
115
|
+
given_values.each do |field, value|
|
116
|
+
if id_fields.key? field.to_s
|
117
|
+
instance_variable_set "@#{field}", value
|
118
|
+
else
|
119
|
+
# via method_missing, because it checks for readonly fields, etc.
|
120
|
+
method_missing("#{field}=", value)
|
121
|
+
end
|
122
|
+
end
|
118
123
|
|
119
124
|
self
|
120
125
|
end
|
@@ -189,12 +194,10 @@ module NetboxClientRuby
|
|
189
194
|
is_instance_variable = instance_variables.include?("@#{name[0..-2]}".to_sym)
|
190
195
|
not_this_classes_business = is_readonly_field || is_instance_variable
|
191
196
|
|
192
|
-
if not_this_classes_business
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
return args[0]
|
197
|
-
end
|
197
|
+
return super if not_this_classes_business
|
198
|
+
|
199
|
+
dirty_data[name[0..-2]] = args[0]
|
200
|
+
return args[0]
|
198
201
|
end
|
199
202
|
|
200
203
|
return dirty_data[name] if dirty_data.key? name
|
@@ -247,21 +250,6 @@ module NetboxClientRuby
|
|
247
250
|
self
|
248
251
|
end
|
249
252
|
|
250
|
-
def check_given_ids(given_ids)
|
251
|
-
if !given_ids.is_a? Hash
|
252
|
-
raise ArgumentError, "'#{self.class}.new' expects the argument to be a Hash when multiple ids are defined"
|
253
|
-
elsif given_ids.empty?
|
254
|
-
raise ArgumentError, "'#{self.class}.new' expects a the argument to not be empty."
|
255
|
-
end
|
256
|
-
|
257
|
-
missing_ids = id_fields.keys - given_ids.keys.map(&:to_s)
|
258
|
-
|
259
|
-
unless missing_ids.empty?
|
260
|
-
raise ArgumentError,
|
261
|
-
"'#{self.class}.new' expects a value for all defined IDs. The following values are missing: '#{missing_ids.join(', ')}'"
|
262
|
-
end
|
263
|
-
end
|
264
|
-
|
265
253
|
def data
|
266
254
|
@data ||= get
|
267
255
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: netbox-client-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Christian Mäder
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-10-
|
11
|
+
date: 2017-10-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: dry-configurable
|
@@ -222,6 +222,10 @@ files:
|
|
222
222
|
- lib/netbox_client_ruby/api/dcim/manufacturers.rb
|
223
223
|
- lib/netbox_client_ruby/api/dcim/platform.rb
|
224
224
|
- lib/netbox_client_ruby/api/dcim/platforms.rb
|
225
|
+
- lib/netbox_client_ruby/api/dcim/power_outlet.rb
|
226
|
+
- lib/netbox_client_ruby/api/dcim/power_outlets.rb
|
227
|
+
- lib/netbox_client_ruby/api/dcim/power_port.rb
|
228
|
+
- lib/netbox_client_ruby/api/dcim/power_ports.rb
|
225
229
|
- lib/netbox_client_ruby/api/dcim/rack.rb
|
226
230
|
- lib/netbox_client_ruby/api/dcim/racks.rb
|
227
231
|
- lib/netbox_client_ruby/api/dcim/region.rb
|