smart_proxy_ipam 0.0.21 → 0.0.22

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7332a15117cab62b21214132d6e95eb6b97c025ed8ffd4b38b6ad053c1673a3c
4
- data.tar.gz: 29f5d76007278fc6e0124ee2438e434d96cbbd02caf6375a4f8afdaf12a650a2
3
+ metadata.gz: 0f0b5b073c4b57b12c9ca83fd64a21422ec79a2ad2f9e2207a024e3d7a36ea27
4
+ data.tar.gz: dcee04479c5e2862e24b8195c4b22bf614869e865b35ca55516cb8c37e75b946
5
5
  SHA512:
6
- metadata.gz: 69d737e1a77f8a9487793f8efed346539ce461433e222e94debcb4d43f9365b92a4d43dfd35966122377d4e90d5c34852a684ea91d1f8aeca866abc8f894947b
7
- data.tar.gz: 2d0a3ff8288589413c3b896a849d747263ff78a4bba0736088282d0bdc09059578c20b34dc65bbacf7cd85fa21623a28e5b40a07af1e65476b77488bff0ba4fb
6
+ metadata.gz: b9b297ff0d4baa62b0d5423ec74b203aa114802f461eb4ab8a6cdb575d80bbc45b9695d5b7f1da9e7e069a2a48cf9bd06c700ca3c40e407f989d79e66ae8c19c
7
+ data.tar.gz: 4b4368f41022d1d9c778a9767d558f8a4c782165631dfddc06bb63c24f4b15a78fb0e28c6d189e81b6c5a0d95dfcec4391641bf169c1fecc0b15ff0cfe5b0539
@@ -38,12 +38,12 @@ module Proxy::Phpipam
38
38
 
39
39
  subnet = JSON.parse(phpipam_client.get_subnet(cidr, section_name))
40
40
 
41
- return {:code => subnet['code'], :error => subnet['error']}.to_json if no_subnets_found?(subnet)
41
+ return {:error => subnet['error']}.to_json if no_subnets_found?(subnet)
42
42
 
43
43
  ipaddr = phpipam_client.get_next_ip(subnet['data']['id'], mac, cidr, section_name)
44
44
  ipaddr_parsed = JSON.parse(ipaddr)
45
45
 
46
- return {:code => 404, :error => ipaddr_parsed['error']}.to_json if no_free_ip_found?(ipaddr_parsed)
46
+ return {:error => ipaddr_parsed['error']}.to_json if no_free_ip_found?(ipaddr_parsed)
47
47
 
48
48
  ipaddr
49
49
  rescue Errno::ECONNREFUSED, Errno::ECONNRESET
@@ -113,7 +113,7 @@ module Proxy::Phpipam
113
113
  return auth_error unless phpipam_client.authenticated?
114
114
 
115
115
  sections = phpipam_client.get_sections
116
- return {:code => 200, :data => []}.to_json if no_sections_found?(JSON.parse(sections))
116
+ return {:data => []}.to_json if no_sections_found?(JSON.parse(sections))
117
117
 
118
118
  sections
119
119
  rescue Errno::ECONNREFUSED, Errno::ECONNRESET
@@ -122,7 +122,7 @@ module Proxy::Phpipam
122
122
  end
123
123
  end
124
124
 
125
- # Get a single sections from external ipam
125
+ # Get a single section from external ipam
126
126
  #
127
127
  # Input: Section name
128
128
  # Returns: A JSON section on success, hash with "error" key otherwise
@@ -146,9 +146,9 @@ module Proxy::Phpipam
146
146
  return auth_error unless phpipam_client.authenticated?
147
147
 
148
148
  section = JSON.parse(phpipam_client.get_section(params[:group]))
149
- return {:code => section['code'], :message => section['message']}.to_json if no_section_found?(section)
149
+ return {}.to_json if no_section_found?(section)
150
150
 
151
- section.to_json
151
+ section['data'].to_json
152
152
  rescue Errno::ECONNREFUSED, Errno::ECONNRESET
153
153
  logger.debug(errors[:no_connection])
154
154
  raise
@@ -221,7 +221,7 @@ module Proxy::Phpipam
221
221
  return auth_error unless phpipam_client.authenticated?
222
222
 
223
223
  section = JSON.parse(phpipam_client.get_section(params[:group]))
224
- return {:code => 404, :error => errors[:no_section]}.to_json if no_section_found?(section)
224
+ return {:error => errors[:no_section]}.to_json if no_section_found?(section)
225
225
 
226
226
  phpipam_client.get_subnets(section['data']['id'].to_s, false)
227
227
  rescue Errno::ECONNREFUSED, Errno::ECONNRESET
@@ -258,14 +258,15 @@ module Proxy::Phpipam
258
258
  return auth_error unless phpipam_client.authenticated?
259
259
 
260
260
  subnet = JSON.parse(phpipam_client.get_subnet(cidr, section_name))
261
- return {:code => 404, :error => subnet['error']}.to_json if no_subnets_found?(subnet)
261
+ return {:error => subnet['error']}.to_json if no_subnets_found?(subnet)
262
262
 
263
- ip_exists = JSON.parse(phpipam_client.ip_exists(ip, subnet['data']['id']))
263
+ response = phpipam_client.ip_exists(ip, subnet['data']['id'])
264
+ ip_exists = JSON.parse(response.body)
264
265
 
265
266
  if ip_exists['data']
266
- return {:code => 200, :exists => true}.to_json
267
+ return Net::HTTPFound.new('HTTP/1.1', 200, 'Found').to_json
267
268
  else
268
- return {:code => 404, :exists => false}.to_json
269
+ return Net::HTTPNotFound.new('HTTP/1.1', 404, 'Not Found').to_json
269
270
  end
270
271
  rescue Errno::ECONNREFUSED, Errno::ECONNRESET
271
272
  logger.debug(errors[:no_connection])
@@ -302,14 +303,15 @@ module Proxy::Phpipam
302
303
  return auth_error unless phpipam_client.authenticated?
303
304
 
304
305
  subnet = JSON.parse(phpipam_client.get_subnet(cidr, section_name))
305
- return {:code => 404, :error => subnet['error']}.to_json if no_subnets_found?(subnet)
306
+ return {:error => subnet['error']}.to_json if no_subnets_found?(subnet)
306
307
 
307
- add_ip = JSON.parse(phpipam_client.add_ip_to_subnet(ip, subnet['data']['id'], 'Address auto added by Foreman'))
308
+ response = phpipam_client.add_ip_to_subnet(ip, subnet['data']['id'], 'Address auto added by Foreman')
309
+ add_ip = JSON.parse(response.body)
308
310
 
309
311
  if add_ip['message'] && add_ip['message'] == "Address created"
310
- return {:code => 200}.to_json
312
+ return Net::HTTPCreated.new('HTTP/1.1', 201, 'Created').to_json
311
313
  else
312
- return {:code => 500, :error => add_ip['message']}.to_json
314
+ return {:error => add_ip['message']}.to_json
313
315
  end
314
316
  rescue Errno::ECONNREFUSED, Errno::ECONNRESET
315
317
  logger.debug(errors[:no_connection])
@@ -343,14 +345,15 @@ module Proxy::Phpipam
343
345
  return auth_error unless phpipam_client.authenticated?
344
346
 
345
347
  subnet = JSON.parse(phpipam_client.get_subnet(cidr, section_name))
346
- return {:code => 404, :error => subnet['error']}.to_json if no_subnets_found?(subnet)
348
+ return {:error => subnet['error']}.to_json if no_subnets_found?(subnet)
347
349
 
348
- delete_ip = JSON.parse(phpipam_client.delete_ip_from_subnet(ip, subnet['data']['id']))
350
+ response = phpipam_client.delete_ip_from_subnet(ip, subnet['data']['id'])
351
+ delete_ip = JSON.parse(response.body)
349
352
 
350
353
  if delete_ip['message'] && delete_ip['message'] == "Address deleted"
351
- return {:code => 200}.to_json
352
- else
353
- return {:code => 500, :error => delete_ip['message']}.to_json
354
+ return Net::HTTPOK.new('HTTP/1.1', 200, 'Address Deleted').to_json
355
+ else
356
+ return {:error => delete_ip['message']}.to_json
354
357
  end
355
358
  rescue Errno::ECONNREFUSED, Errno::ECONNRESET
356
359
  logger.debug(errors[:no_connection])
@@ -39,6 +39,9 @@ module Proxy::Phpipam
39
39
 
40
40
  def get_subnet_by_section(cidr, section_name, include_id = true)
41
41
  section = JSON.parse(get_section(section_name))
42
+
43
+ return {:error => "No section #{URI.unescape(section_name)} found"}.to_json if no_section_found?(section)
44
+
42
45
  subnets = JSON.parse(get_subnets(section['data']['id'], include_id))
43
46
  subnet_id = nil
44
47
 
@@ -47,12 +50,12 @@ module Proxy::Phpipam
47
50
  subnet_id = subnet['id'] if subnet_cidr == cidr
48
51
  end
49
52
 
50
- return {:code => 404, :error => "No subnet #{cidr} found in section #{URI.unescape(section_name)}"}.to_json if subnet_id.nil?
51
-
53
+ return {}.to_json if subnet_id.nil?
54
+
52
55
  response = get("subnets/#{subnet_id.to_s}/")
53
56
  json_body = JSON.parse(response.body)
54
57
  json_body['data'] = filter_hash(json_body['data'], [:id, :subnet, :mask, :description]) if json_body['data']
55
- json_body = filter_hash(json_body, [:code, :data, :error, :message])
58
+ json_body = filter_hash(json_body, [:data, :error, :message])
56
59
  response.body = json_body.to_json
57
60
  response.header['Content-Length'] = json_body.to_s.length
58
61
  response.body
@@ -61,8 +64,9 @@ module Proxy::Phpipam
61
64
  def get_subnet_by_cidr(cidr)
62
65
  response = get("subnets/cidr/#{cidr.to_s}")
63
66
  json_body = JSON.parse(response.body)
67
+ return {}.to_json if json_body['data'].nil?
64
68
  json_body['data'] = filter_fields(json_body, [:id, :subnet, :description, :mask])[0]
65
- json_body = filter_hash(json_body, [:code, :data, :error, :message])
69
+ json_body = filter_hash(json_body, [:data, :error, :message])
66
70
  response.body = json_body.to_json
67
71
  response.header['Content-Length'] = json_body.to_s.length
68
72
  response.body
@@ -72,7 +76,7 @@ module Proxy::Phpipam
72
76
  response = get("sections/#{section_name}/")
73
77
  json_body = JSON.parse(response.body)
74
78
  json_body['data'] = filter_hash(json_body['data'], [:id, :name, :description]) if json_body['data']
75
- json_body = filter_hash(json_body, [:code, :data, :error, :message])
79
+ json_body = filter_hash(json_body, [:data, :error, :message])
76
80
  response.body = json_body.to_json
77
81
  response.header['Content-Length'] = json_body.to_s.length
78
82
  response.body
@@ -82,7 +86,7 @@ module Proxy::Phpipam
82
86
  response = get('sections/')
83
87
  json_body = JSON.parse(response.body)
84
88
  json_body['data'] = filter_fields(json_body, [:id, :name, :description]) if json_body['data']
85
- json_body = filter_hash(json_body, [:code, :data, :error, :message])
89
+ json_body = filter_hash(json_body, [:data, :error, :message])
86
90
  response.body = json_body.to_json
87
91
  response.header['Content-Length'] = json_body.to_s.length
88
92
  response.body
@@ -94,7 +98,7 @@ module Proxy::Phpipam
94
98
  fields.push(:id) if include_id
95
99
  json_body = JSON.parse(response.body)
96
100
  json_body['data'] = filter_fields(json_body, fields) if json_body['data']
97
- json_body = filter_hash(json_body, [:code, :data, :error, :message])
101
+ json_body = filter_hash(json_body, [:data, :error, :message])
98
102
  response.body = json_body.to_json
99
103
  response.header['Content-Length'] = json_body.to_s.length
100
104
  response.body
@@ -104,29 +108,29 @@ module Proxy::Phpipam
104
108
  response = get("subnets/#{subnet_id.to_s}/addresses/#{ip}/")
105
109
  json_body = JSON.parse(response.body)
106
110
  json_body['data'] = filter_fields(json_body, [:ip]) if json_body['data']
107
- json_body = filter_hash(json_body, [:code, :data, :error, :message])
111
+ json_body = filter_hash(json_body, [:data, :error, :message])
108
112
  response.body = json_body.to_json
109
113
  response.header['Content-Length'] = json_body.to_s.length
110
- response.body
114
+ response
111
115
  end
112
116
 
113
117
  def add_ip_to_subnet(ip, subnet_id, desc)
114
118
  data = {:subnetId => subnet_id, :ip => ip, :description => desc}
115
119
  response = post('addresses/', data)
116
120
  json_body = JSON.parse(response.body)
117
- json_body = filter_hash(json_body, [:code, :error, :message])
121
+ json_body = filter_hash(json_body, [:error, :message])
118
122
  response.body = json_body.to_json
119
123
  response.header['Content-Length'] = json_body.to_s.length
120
- response.body
124
+ response
121
125
  end
122
126
 
123
127
  def delete_ip_from_subnet(ip, subnet_id)
124
128
  response = delete("addresses/#{ip}/#{subnet_id.to_s}/")
125
129
  json_body = JSON.parse(response.body)
126
- json_body = filter_hash(json_body, [:code, :error, :message])
130
+ json_body = filter_hash(json_body, [:error, :message])
127
131
  response.body = json_body.to_json
128
132
  response.header['Content-Length'] = json_body.to_s.length
129
- response.body
133
+ response
130
134
  end
131
135
 
132
136
  def get_next_ip(subnet_id, mac, cidr, section_name)
@@ -136,7 +140,7 @@ module Proxy::Phpipam
136
140
  @@ip_cache[section.to_sym] = {} if @@ip_cache[section.to_sym].nil?
137
141
  subnet_hash = @@ip_cache[section.to_sym][cidr.to_sym]
138
142
 
139
- return {:code => json_body['code'], :error => json_body['message']}.to_json if json_body['message']
143
+ return {:error => json_body['message']}.to_json if json_body['message']
140
144
 
141
145
  if subnet_hash && subnet_hash.key?(mac.to_sym)
142
146
  json_body['data'] = @@ip_cache[section_name.to_sym][cidr.to_sym][mac.to_sym][:ip]
@@ -152,13 +156,13 @@ module Proxy::Phpipam
152
156
  next_ip = find_new_ip(subnet_id, new_ip, mac, cidr, section)
153
157
  end
154
158
 
155
- return {:code => 404, :error => "Unable to find another available IP address in subnet #{cidr}"}.to_json if next_ip.nil?
156
- return {:code => 404, :error => "It is possible that there are no more free addresses in subnet #{cidr}. Available IP's may be cached, and could become available after in-memory IP cache is cleared(up to #{DEFAULT_CLEANUP_INTERVAL} seconds)."}.to_json unless usable_ip(next_ip, cidr)
159
+ return {:error => "Unable to find another available IP address in subnet #{cidr}"}.to_json if next_ip.nil?
160
+ return {:error => "It is possible that there are no more free addresses in subnet #{cidr}. Available IP's may be cached, and could become available after in-memory IP cache is cleared(up to #{DEFAULT_CLEANUP_INTERVAL} seconds)."}.to_json unless usable_ip(next_ip, cidr)
157
161
 
158
162
  json_body['data'] = next_ip
159
163
  end
160
164
 
161
- json_body = {:code => json_body['code'], :data => json_body['data']}
165
+ json_body = {:data => json_body['data']}
162
166
 
163
167
  response.body = json_body.to_json
164
168
  response.header['Content-Length'] = json_body.to_s.length
@@ -261,7 +265,7 @@ module Proxy::Phpipam
261
265
 
262
266
  loop do
263
267
  new_ip = increment_ip(temp_ip)
264
- verify_ip = JSON.parse(ip_exists(new_ip, subnet_id))
268
+ verify_ip = JSON.parse(ip_exists(new_ip, subnet_id).body)
265
269
 
266
270
  # If new IP doesn't exist in IPAM and not in the cache
267
271
  if ip_not_found_in_ipam?(verify_ip) && !ip_exists_in_cache(new_ip, cidr, mac, section_name)
@@ -1,6 +1,6 @@
1
1
 
2
2
  module Proxy
3
3
  module Ipam
4
- VERSION = '0.0.21'
4
+ VERSION = '0.0.22'
5
5
  end
6
6
  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.21
4
+ version: 0.0.22
5
5
  platform: ruby
6
6
  authors:
7
7
  - Christopher Smith
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-03-11 00:00:00.000000000 Z
11
+ date: 2020-03-19 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