smart_proxy_ipam 0.0.5 → 0.0.7
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
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: be6ae52f679c0d7be23248d26f179a730d0157569a07a050c72c45db0aeec2eb
|
4
|
+
data.tar.gz: 5a1dbe01a004a626b8e0ece2cfee6b362a96184df6ca37e2245e11986c8f6140
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d85452528e492750756f1d3c0347301c2d80749f85229713d9ea2f56eb70c5edf72935d40877f2f486767d354a1fea70dfe0a618e32bf0674aed755de8235450
|
7
|
+
data.tar.gz: e6155d1c91673dbaba336d90280862f4ae220ec2d46079300557ce6ee6826b572ec2e8fca6bf13914e9d28a51b2ab1734648ef9f599ea724f8f006ccd715a484
|
@@ -12,7 +12,7 @@ module Proxy::Phpipam
|
|
12
12
|
|
13
13
|
get '/providers' do
|
14
14
|
content_type :json
|
15
|
-
{ipam_providers
|
15
|
+
{:ipam_providers => ['phpIPAM']}.to_json
|
16
16
|
end
|
17
17
|
|
18
18
|
# Gets the next available IP address based on a given subnet
|
@@ -22,7 +22,7 @@ module Proxy::Phpipam
|
|
22
22
|
# Examples:
|
23
23
|
# Response if success:
|
24
24
|
# {"cidr":"100.20.20.0/24","next_ip":"100.20.20.11"}
|
25
|
-
# Response if error
|
25
|
+
# Response if :error =>
|
26
26
|
# {"error":"The specified subnet does not exist in phpIPAM."}
|
27
27
|
get '/next_ip' do
|
28
28
|
content_type :json
|
@@ -31,26 +31,26 @@ module Proxy::Phpipam
|
|
31
31
|
cidr = params[:cidr]
|
32
32
|
|
33
33
|
if not cidr
|
34
|
-
return {error
|
34
|
+
return {:error => "A 'cidr' parameter for the subnet must be provided(e.g. 100.10.10.0/24)"}.to_json
|
35
35
|
end
|
36
36
|
|
37
37
|
phpipam_client = PhpipamClient.new
|
38
38
|
response = phpipam_client.get_subnet(cidr)
|
39
39
|
|
40
40
|
if response['message'] && response['message'].downcase == "no subnets found"
|
41
|
-
return {error
|
41
|
+
return {:error => "The specified subnet does not exist in External IPAM."}.to_json
|
42
42
|
end
|
43
43
|
|
44
44
|
subnet_id = JSON.parse(response)[0]['id']
|
45
45
|
response = phpipam_client.get_next_ip(subnet_id)
|
46
46
|
|
47
47
|
if response['message'] && response['message'].downcase == "no free addresses found"
|
48
|
-
return {error
|
48
|
+
return {:error => "There are no more free addresses in subnet #{cidr}"}.to_json
|
49
49
|
end
|
50
50
|
|
51
51
|
{cidr: cidr, next_ip: response['data']}.to_json
|
52
52
|
rescue Errno::ECONNREFUSED
|
53
|
-
return {error
|
53
|
+
return {:error => "Unable to connect to External IPAM server"}.to_json
|
54
54
|
end
|
55
55
|
end
|
56
56
|
|
@@ -80,14 +80,14 @@ module Proxy::Phpipam
|
|
80
80
|
cidr = params[:cidr]
|
81
81
|
|
82
82
|
if not cidr
|
83
|
-
return {error
|
83
|
+
return {:error => "A 'cidr' parameter for the subnet must be provided(e.g. 100.10.10.0/24)"}.to_json
|
84
84
|
end
|
85
85
|
|
86
86
|
phpipam_client = PhpipamClient.new
|
87
87
|
subnet = phpipam_client.get_subnet(cidr)
|
88
88
|
subnet.to_json
|
89
89
|
rescue Errno::ECONNREFUSED
|
90
|
-
return {error
|
90
|
+
return {:error => "Unable to connect to External IPAM server"}.to_json
|
91
91
|
end
|
92
92
|
end
|
93
93
|
|
@@ -101,7 +101,7 @@ module Proxy::Phpipam
|
|
101
101
|
# "permissions":"[]","strictMode":"1","subnetOrdering":"default","order":null,
|
102
102
|
# "editDate":"2019-04-19 21:49:55","showVLAN":"1","showVRF":"1","showSupernetOnly":"1","DNS":null}]
|
103
103
|
# ]
|
104
|
-
# Response if error
|
104
|
+
# Response if :error =>
|
105
105
|
# {"error":"Unable to connect to phpIPAM server"}
|
106
106
|
get '/sections' do
|
107
107
|
content_type :json
|
@@ -111,7 +111,7 @@ module Proxy::Phpipam
|
|
111
111
|
sections = phpipam_client.get_sections
|
112
112
|
sections.to_json
|
113
113
|
rescue Errno::ECONNREFUSED
|
114
|
-
return {error
|
114
|
+
return {:error => "Unable to connect to External IPAM server"}.to_json
|
115
115
|
end
|
116
116
|
end
|
117
117
|
|
@@ -168,7 +168,7 @@ module Proxy::Phpipam
|
|
168
168
|
# ],
|
169
169
|
# "time":0.012
|
170
170
|
# }
|
171
|
-
# Response if error
|
171
|
+
# Response if :error =>
|
172
172
|
# {"error":"Unable to connect to phpIPAM server"}
|
173
173
|
get '/sections/:section_id/subnets' do
|
174
174
|
content_type :json
|
@@ -177,14 +177,14 @@ module Proxy::Phpipam
|
|
177
177
|
section_id = params[:section_id]
|
178
178
|
|
179
179
|
if not section_id
|
180
|
-
return {error
|
180
|
+
return {:error => "A 'section_id' must be provided"}.to_json
|
181
181
|
end
|
182
182
|
|
183
183
|
phpipam_client = PhpipamClient.new
|
184
184
|
subnets = phpipam_client.get_subnets(section_id)
|
185
185
|
subnets.to_json
|
186
186
|
rescue Errno::ECONNREFUSED
|
187
|
-
return {error
|
187
|
+
return {:error => "Unable to connect to External IPAM server"}.to_json
|
188
188
|
end
|
189
189
|
end
|
190
190
|
|
@@ -205,20 +205,20 @@ module Proxy::Phpipam
|
|
205
205
|
cidr = params[:cidr]
|
206
206
|
ip = params[:ip]
|
207
207
|
|
208
|
-
return {error
|
209
|
-
return {error
|
208
|
+
return {:error => "Missing 'cidr' parameter. A CIDR IPv4 address must be provided(e.g. 100.10.10.0/24)"}.to_json if not cidr
|
209
|
+
return {:error => "Missing 'ip' parameter. An IPv4 address must be provided(e.g. 100.10.10.22)"}.to_json if not ip
|
210
210
|
|
211
211
|
phpipam_client = PhpipamClient.new
|
212
212
|
subnet = phpipam_client.get_subnet(cidr)
|
213
213
|
|
214
214
|
if subnet['message'] && subnet['message'].downcase == "no subnets found"
|
215
|
-
return {error
|
215
|
+
return {:error => "The specified subnet does not exist in External IPAM."}.to_json
|
216
216
|
end
|
217
217
|
|
218
218
|
subnet_id = JSON.parse(subnet)[0]['id']
|
219
219
|
phpipam_client.ip_exists(ip, subnet_id)
|
220
220
|
rescue Errno::ECONNREFUSED
|
221
|
-
return {error
|
221
|
+
return {:error => "Unable to connect to External IPAM server"}.to_json
|
222
222
|
end
|
223
223
|
end
|
224
224
|
|
@@ -231,7 +231,7 @@ module Proxy::Phpipam
|
|
231
231
|
# Examples:
|
232
232
|
# Response if success:
|
233
233
|
# {"message":"IP 100.10.10.123 added to subnet 100.10.10.0/24 successfully."}
|
234
|
-
# Response if error
|
234
|
+
# Response if :error =>
|
235
235
|
# {"error":"The specified subnet does not exist in phpIPAM."}
|
236
236
|
post '/add_ip_to_subnet' do
|
237
237
|
content_type :json
|
@@ -240,23 +240,23 @@ module Proxy::Phpipam
|
|
240
240
|
cidr = params[:cidr]
|
241
241
|
ip = params[:ip]
|
242
242
|
|
243
|
-
return {error
|
244
|
-
return {error
|
243
|
+
return {:error => "Missing 'cidr' parameter. A CIDR IPv4 address must be provided(e.g. 100.10.10.0/24)"}.to_json if not cidr
|
244
|
+
return {:error => "Missing 'ip' parameter. An IPv4 address must be provided(e.g. 100.10.10.22)"}.to_json if not ip
|
245
245
|
|
246
246
|
phpipam_client = PhpipamClient.new
|
247
247
|
response = phpipam_client.get_subnet(cidr)
|
248
248
|
|
249
249
|
if response['message'] && response['message'].downcase == "no subnets found"
|
250
|
-
return {error
|
250
|
+
return {:error => "The specified subnet does not exist in External IPAM."}.to_json
|
251
251
|
end
|
252
252
|
|
253
253
|
subnet_id = JSON.parse(response)[0]['id']
|
254
254
|
|
255
255
|
phpipam_client.add_ip_to_subnet(ip, subnet_id, 'Address auto added by Foreman')
|
256
256
|
|
257
|
-
{message
|
257
|
+
{:message => "IP #{ip} added to subnet #{cidr} successfully."}.to_json
|
258
258
|
rescue Errno::ECONNREFUSED
|
259
|
-
return {error
|
259
|
+
return {:error => "Unable to connect to External IPAM server"}.to_json
|
260
260
|
end
|
261
261
|
end
|
262
262
|
|
@@ -268,7 +268,7 @@ module Proxy::Phpipam
|
|
268
268
|
# Example:
|
269
269
|
# Response if success:
|
270
270
|
# {"code": 200, "success": true, "message": "Address deleted", "time": 0.017}
|
271
|
-
# Response if error
|
271
|
+
# Response if :error =>
|
272
272
|
# {"code": 404, "success": 0, "message": "Address does not exist", "time": 0.008}
|
273
273
|
post '/delete_ip_from_subnet' do
|
274
274
|
content_type :json
|
@@ -277,23 +277,23 @@ module Proxy::Phpipam
|
|
277
277
|
cidr = params[:cidr]
|
278
278
|
ip = params[:ip]
|
279
279
|
|
280
|
-
return {error
|
281
|
-
return {error
|
280
|
+
return {:error => "Missing 'cidr' parameter. A CIDR IPv4 address must be provided(e.g. 100.10.10.0/24)"}.to_json if not cidr
|
281
|
+
return {:error => "Missing 'ip' parameter. An IPv4 address must be provided(e.g. 100.10.10.22)"}.to_json if not ip
|
282
282
|
|
283
283
|
phpipam_client = PhpipamClient.new
|
284
284
|
response = phpipam_client.get_subnet(cidr)
|
285
285
|
|
286
286
|
if response['message'] && response['message'].downcase == "no subnets found"
|
287
|
-
return {error
|
287
|
+
return {:error => "The specified subnet does not exist in External IPAM."}.to_json
|
288
288
|
end
|
289
289
|
|
290
290
|
subnet_id = JSON.parse(response)[0]['id']
|
291
291
|
|
292
292
|
phpipam_client.delete_ip_from_subnet(ip, subnet_id)
|
293
293
|
|
294
|
-
{message
|
294
|
+
{:message => "IP #{ip} deleted from subnet #{cidr} successfully."}.to_json
|
295
295
|
rescue Errno::ECONNREFUSED
|
296
|
-
return {error
|
296
|
+
return {:error => "Unable to connect to External IPAM server"}.to_json
|
297
297
|
end
|
298
298
|
end
|
299
299
|
|
@@ -9,7 +9,11 @@ module Proxy::Phpipam
|
|
9
9
|
class PhpipamClient
|
10
10
|
def initialize
|
11
11
|
conf = Proxy::Ipam.get_config[:phpipam]
|
12
|
-
@phpipam_config = {
|
12
|
+
@phpipam_config = {
|
13
|
+
:url => conf[:url],
|
14
|
+
:user => conf[:user],
|
15
|
+
:password => conf[:password]
|
16
|
+
}
|
13
17
|
@api_base = "#{conf[:url]}/api/#{conf[:user]}/"
|
14
18
|
@token = nil
|
15
19
|
end
|
@@ -25,7 +29,7 @@ module Proxy::Phpipam
|
|
25
29
|
|
26
30
|
if subnets
|
27
31
|
if subnets['message'] && subnets['message'].downcase == 'no subnets found'
|
28
|
-
return {
|
32
|
+
return {:message => "no subnets found"}.to_json
|
29
33
|
else
|
30
34
|
# Only return the relevant fields to Foreman
|
31
35
|
subnets['data'].each do |subnet|
|
@@ -43,7 +47,7 @@ module Proxy::Phpipam
|
|
43
47
|
end
|
44
48
|
|
45
49
|
def add_ip_to_subnet(ip, subnet_id, desc)
|
46
|
-
data = {
|
50
|
+
data = {:subnetId => subnet_id, :ip => ip, :description => desc}
|
47
51
|
post('addresses/', data)
|
48
52
|
end
|
49
53
|
|
@@ -91,14 +95,14 @@ module Proxy::Phpipam
|
|
91
95
|
# the ip existence on an empty subnet returns a malformed response from phpIPAM, containing
|
92
96
|
# HTML in the JSON response.
|
93
97
|
if usage['data']['used'] == "0"
|
94
|
-
return {ip
|
98
|
+
return {:ip => ip, :exists => false}.to_json
|
95
99
|
else
|
96
100
|
response = get("subnets/#{subnet_id.to_s}/addresses/#{ip}/")
|
97
101
|
|
98
102
|
if response && response['message'] && response['message'].downcase == 'no addresses found'
|
99
|
-
return {ip
|
103
|
+
return {:ip => ip, :exists => false}.to_json
|
100
104
|
else
|
101
|
-
return {ip
|
105
|
+
return {:ip => ip, :exists => true}.to_json
|
102
106
|
end
|
103
107
|
end
|
104
108
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: smart_proxy_ipam
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Christopher Smith
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-07-
|
11
|
+
date: 2019-07-11 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Smart proxy plugin for IPAM integration with various IPAM providers
|
14
14
|
email: chrisjsmith001@gmail.com
|