icinga2 0.5.2 → 0.6.1
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/README.md +63 -38
- data/doc/downtimes.md +4 -3
- data/doc/hostgroups.md +10 -7
- data/doc/hosts.md +19 -7
- data/doc/notifications.md +24 -7
- data/doc/servicegroups.md +11 -8
- data/doc/services.md +29 -6
- data/doc/usergroups.md +8 -4
- data/doc/users.md +12 -11
- data/examples/test.rb +117 -113
- data/lib/icinga2.rb +71 -61
- data/lib/icinga2/converts.rb +68 -53
- data/lib/icinga2/downtimes.rb +73 -90
- data/lib/icinga2/hostgroups.rb +50 -73
- data/lib/icinga2/hosts.rb +133 -170
- data/lib/icinga2/network.rb +182 -117
- data/lib/icinga2/notifications.rb +82 -79
- data/lib/icinga2/servicegroups.rb +50 -71
- data/lib/icinga2/services.rb +144 -162
- data/lib/icinga2/status.rb +32 -32
- data/lib/icinga2/tools.rb +10 -4
- data/lib/icinga2/usergroups.rb +49 -67
- data/lib/icinga2/users.rb +65 -70
- data/lib/icinga2/version.rb +7 -3
- data/lib/logging.rb +10 -6
- metadata +2 -2
data/lib/icinga2/network.rb
CHANGED
@@ -1,7 +1,15 @@
|
|
1
|
+
|
2
|
+
# frozen_string_literal: true
|
1
3
|
module Icinga2
|
2
4
|
|
5
|
+
#
|
6
|
+
#
|
7
|
+
#
|
3
8
|
module Network
|
4
9
|
|
10
|
+
#
|
11
|
+
#
|
12
|
+
#
|
5
13
|
def self.get( params = {} )
|
6
14
|
|
7
15
|
host = params.dig(:host)
|
@@ -10,25 +18,23 @@ module Icinga2
|
|
10
18
|
options = params.dig(:options)
|
11
19
|
payload = params.dig(:payload) || {}
|
12
20
|
result = {}
|
21
|
+
max_retries = 3
|
22
|
+
times_retried = 0
|
13
23
|
|
14
|
-
|
15
|
-
|
16
|
-
return self.get2( params )
|
17
|
-
end
|
18
|
-
|
24
|
+
return get_with_payload( params ) if payload.count >= 1
|
19
25
|
|
20
26
|
headers.delete( 'X-HTTP-Method-Override' )
|
21
27
|
|
22
28
|
result = {}
|
23
29
|
|
24
|
-
|
30
|
+
rest_client = RestClient::Resource.new(
|
25
31
|
URI.encode( url ),
|
26
32
|
options
|
27
33
|
)
|
28
34
|
|
29
35
|
begin
|
30
36
|
|
31
|
-
data =
|
37
|
+
data = rest_client.get( headers )
|
32
38
|
results = JSON.parse( data.body )
|
33
39
|
results = results.dig('results')
|
34
40
|
|
@@ -41,12 +47,12 @@ module Icinga2
|
|
41
47
|
# name = r.dig('name')
|
42
48
|
attrs = r.dig('attrs')
|
43
49
|
|
44
|
-
if( attrs
|
50
|
+
if( !attrs.nil? )
|
45
51
|
|
46
52
|
result[:data][attrs['name']] = {
|
47
|
-
:
|
48
|
-
:
|
49
|
-
:
|
53
|
+
name: attrs['name'],
|
54
|
+
display_name: attrs['display_name'],
|
55
|
+
type: attrs['type']
|
50
56
|
}
|
51
57
|
else
|
52
58
|
result = r
|
@@ -61,22 +67,38 @@ module Icinga2
|
|
61
67
|
error = JSON.parse( error )
|
62
68
|
|
63
69
|
result = {
|
64
|
-
:
|
65
|
-
:
|
66
|
-
:
|
70
|
+
status: error['error'].to_i,
|
71
|
+
name: host,
|
72
|
+
message: error['status']
|
67
73
|
}
|
68
74
|
rescue Errno::ECONNREFUSED => e
|
69
75
|
|
70
|
-
|
76
|
+
if( times_retried < max_retries )
|
77
|
+
|
78
|
+
times_retried += 1
|
79
|
+
$stderr.puts( format( 'Cannot execute request to %s, cause: %s', url, e ) )
|
80
|
+
$stderr.puts( format( ' retry %d%d', times_retried, max_retries ) )
|
81
|
+
|
82
|
+
sleep( 2 )
|
83
|
+
retry
|
84
|
+
else
|
85
|
+
$stderr.puts( 'Exiting request ...' )
|
71
86
|
|
87
|
+
return {
|
88
|
+
status: 500,
|
89
|
+
message: format( 'Errno::ECONNREFUSED for request: %s', url )
|
90
|
+
}
|
91
|
+
end
|
72
92
|
end
|
73
93
|
|
74
|
-
|
94
|
+
result
|
75
95
|
|
76
96
|
end
|
77
97
|
|
78
|
-
|
79
|
-
|
98
|
+
#
|
99
|
+
#
|
100
|
+
#
|
101
|
+
def self.get_with_payload( params = {} )
|
80
102
|
|
81
103
|
host = params.dig(:host)
|
82
104
|
url = params.dig(:url)
|
@@ -84,31 +106,31 @@ module Icinga2
|
|
84
106
|
options = params.dig(:options)
|
85
107
|
payload = params.dig(:payload) || {}
|
86
108
|
result = {}
|
109
|
+
max_retries = 3
|
110
|
+
times_retried = 0
|
87
111
|
|
88
112
|
headers['X-HTTP-Method-Override'] = 'GET'
|
89
113
|
|
90
|
-
|
114
|
+
rest_client = RestClient::Resource.new(
|
91
115
|
URI.encode( url ),
|
92
116
|
options
|
93
117
|
)
|
94
118
|
|
95
119
|
begin
|
96
120
|
|
97
|
-
response =
|
121
|
+
response = rest_client.post(
|
98
122
|
JSON.generate( payload ),
|
99
123
|
headers
|
100
124
|
)
|
101
125
|
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
node = Hash.new()
|
106
|
-
|
107
|
-
data = JSON.parse( responseBody )
|
126
|
+
response_code = response.code
|
127
|
+
response_body = response.body
|
128
|
+
node = {}
|
108
129
|
|
130
|
+
data = JSON.parse( response_body )
|
109
131
|
results = data.dig('results')
|
110
132
|
|
111
|
-
|
133
|
+
unless( results.nil? )
|
112
134
|
|
113
135
|
results.each do |r|
|
114
136
|
|
@@ -116,8 +138,8 @@ module Icinga2
|
|
116
138
|
end
|
117
139
|
|
118
140
|
result = {
|
119
|
-
:
|
120
|
-
:
|
141
|
+
status: response_code,
|
142
|
+
nodes: node
|
121
143
|
}
|
122
144
|
end
|
123
145
|
|
@@ -127,42 +149,58 @@ module Icinga2
|
|
127
149
|
error = JSON.parse( error )
|
128
150
|
|
129
151
|
result = {
|
130
|
-
:
|
131
|
-
:
|
132
|
-
:
|
152
|
+
status: error['error'].to_i,
|
153
|
+
name: host,
|
154
|
+
message: error['status']
|
133
155
|
}
|
134
156
|
rescue Errno::ECONNREFUSED => e
|
135
157
|
|
136
|
-
|
158
|
+
if( times_retried < max_retries )
|
137
159
|
|
138
|
-
|
160
|
+
times_retried += 1
|
161
|
+
$stderr.puts( format( 'Cannot execute request to %s, cause: %s', url, e ) )
|
162
|
+
$stderr.puts( format( ' retry %d%d', times_retried, max_retries ) )
|
139
163
|
|
140
|
-
|
164
|
+
sleep( 2 )
|
165
|
+
retry
|
166
|
+
else
|
167
|
+
$stderr.puts( 'Exiting request ...' )
|
141
168
|
|
142
|
-
|
169
|
+
return {
|
170
|
+
status: 500,
|
171
|
+
message: format( 'Errno::ECONNREFUSED for request: %s', url )
|
172
|
+
}
|
173
|
+
end
|
174
|
+
end
|
143
175
|
|
176
|
+
result
|
144
177
|
|
178
|
+
end
|
145
179
|
|
180
|
+
#
|
181
|
+
#
|
182
|
+
#
|
146
183
|
def self.post( params = {} )
|
147
184
|
|
148
|
-
host = params.dig(:host)
|
149
185
|
url = params.dig(:url)
|
150
186
|
headers = params.dig(:headers)
|
151
187
|
options = params.dig(:options)
|
152
188
|
payload = params.dig(:payload)
|
189
|
+
max_retries = 3
|
190
|
+
times_retried = 0
|
153
191
|
|
154
192
|
headers['X-HTTP-Method-Override'] = 'POST'
|
155
193
|
|
156
194
|
result = {}
|
157
195
|
|
158
|
-
|
196
|
+
rest_client = RestClient::Resource.new(
|
159
197
|
URI.encode( url ),
|
160
198
|
options
|
161
199
|
)
|
162
200
|
|
163
201
|
begin
|
164
202
|
|
165
|
-
data =
|
203
|
+
data = rest_client.post(
|
166
204
|
JSON.generate( payload ),
|
167
205
|
headers
|
168
206
|
)
|
@@ -170,12 +208,12 @@ module Icinga2
|
|
170
208
|
data = JSON.parse( data )
|
171
209
|
results = data.dig('results').first
|
172
210
|
|
173
|
-
|
211
|
+
unless( results.nil? )
|
174
212
|
|
175
213
|
result = {
|
176
|
-
:
|
177
|
-
:
|
178
|
-
:
|
214
|
+
status: results.dig('code').to_i,
|
215
|
+
name: results.dig('name'),
|
216
|
+
message: results.dig('status')
|
179
217
|
}
|
180
218
|
|
181
219
|
end
|
@@ -183,52 +221,53 @@ module Icinga2
|
|
183
221
|
rescue RestClient::ExceptionWithResponse => e
|
184
222
|
|
185
223
|
error = e.response ? e.response : nil
|
186
|
-
|
187
|
-
if( error.is_a?( String ) )
|
188
|
-
error = JSON.parse( error )
|
189
|
-
end
|
190
|
-
|
191
|
-
$stderr.puts( JSON.pretty_generate( error ) )
|
224
|
+
error = JSON.parse( error ) if error.is_a?( String )
|
192
225
|
|
193
226
|
results = error.dig( 'results' )
|
194
227
|
|
195
|
-
if( results
|
228
|
+
if( !results.nil? )
|
196
229
|
|
197
230
|
result = result.first
|
198
231
|
|
199
232
|
result = {
|
200
|
-
:
|
201
|
-
:
|
202
|
-
:
|
203
|
-
:
|
233
|
+
status: results.dig('code').to_i,
|
234
|
+
name: results.dig('name'),
|
235
|
+
message: results.dig('status'),
|
236
|
+
error: results.dig('errors')
|
204
237
|
}
|
205
|
-
|
206
238
|
else
|
207
|
-
|
208
239
|
result = {
|
209
|
-
:
|
210
|
-
:
|
240
|
+
status: error.dig( 'error' ).to_i,
|
241
|
+
message: error.dig( 'status' )
|
211
242
|
}
|
212
|
-
|
213
243
|
end
|
214
244
|
|
215
245
|
rescue Errno::ECONNREFUSED => e
|
216
246
|
|
217
|
-
|
247
|
+
if( times_retried < max_retries )
|
218
248
|
|
219
|
-
|
249
|
+
times_retried += 1
|
250
|
+
$stderr.puts( format( 'Cannot execute request to %s, cause: %s', url, e ) )
|
251
|
+
$stderr.puts( format( ' retry %d%d', times_retried, max_retries ) )
|
220
252
|
|
221
|
-
|
253
|
+
sleep( 2 )
|
254
|
+
retry
|
255
|
+
else
|
256
|
+
$stderr.puts( 'Exiting request ...' )
|
222
257
|
|
258
|
+
return {
|
259
|
+
status: 500,
|
260
|
+
message: format( 'Errno::ECONNREFUSED for request: %s', url )
|
261
|
+
}
|
262
|
+
end
|
223
263
|
end
|
224
264
|
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
265
|
+
result
|
229
266
|
end
|
230
267
|
|
231
|
-
|
268
|
+
#
|
269
|
+
#
|
270
|
+
#
|
232
271
|
def self.put( params = {} )
|
233
272
|
|
234
273
|
host = params.dig(:host)
|
@@ -236,19 +275,21 @@ module Icinga2
|
|
236
275
|
headers = params.dig(:headers)
|
237
276
|
options = params.dig(:options)
|
238
277
|
payload = params.dig(:payload)
|
278
|
+
max_retries = 3
|
279
|
+
times_retried = 0
|
239
280
|
|
240
281
|
headers['X-HTTP-Method-Override'] = 'PUT'
|
241
282
|
|
242
283
|
result = {}
|
243
284
|
|
244
|
-
|
285
|
+
rest_client = RestClient::Resource.new(
|
245
286
|
URI.encode( url ),
|
246
287
|
options
|
247
288
|
)
|
248
289
|
|
249
290
|
begin
|
250
291
|
|
251
|
-
data =
|
292
|
+
data = rest_client.put(
|
252
293
|
JSON.generate( payload ),
|
253
294
|
headers
|
254
295
|
)
|
@@ -256,12 +297,12 @@ module Icinga2
|
|
256
297
|
data = JSON.parse( data )
|
257
298
|
results = data.dig('results').first
|
258
299
|
|
259
|
-
|
300
|
+
unless( results.nil? )
|
260
301
|
|
261
302
|
result = {
|
262
|
-
:
|
263
|
-
:
|
264
|
-
:
|
303
|
+
status: results.dig('code').to_i,
|
304
|
+
name: results.dig('name'),
|
305
|
+
message: results.dig('status')
|
265
306
|
}
|
266
307
|
|
267
308
|
end
|
@@ -270,85 +311,98 @@ module Icinga2
|
|
270
311
|
|
271
312
|
error = e.response ? e.response : nil
|
272
313
|
|
273
|
-
|
274
|
-
error = JSON.parse( error )
|
275
|
-
end
|
314
|
+
error = JSON.parse( error ) if error.is_a?( String )
|
276
315
|
|
277
316
|
results = error.dig( 'results' )
|
278
317
|
|
279
|
-
if( results
|
318
|
+
if( !results.nil? )
|
280
319
|
|
281
|
-
if( result.is_a?( Hash ) && result.count
|
320
|
+
if( result.is_a?( Hash ) && result.count != 0 )
|
282
321
|
|
283
322
|
result = result.first
|
284
323
|
|
285
324
|
result = {
|
286
|
-
:
|
287
|
-
:
|
288
|
-
:
|
289
|
-
:
|
325
|
+
status: results.dig('code').to_i,
|
326
|
+
name: results.dig('name'),
|
327
|
+
message: results.dig('status'),
|
328
|
+
error: results.dig('errors')
|
290
329
|
}
|
291
330
|
|
292
331
|
else
|
293
332
|
|
294
333
|
result = {
|
295
|
-
:
|
296
|
-
:
|
297
|
-
:
|
334
|
+
status: 204,
|
335
|
+
name: host,
|
336
|
+
message: 'unknown result'
|
298
337
|
}
|
299
338
|
end
|
300
339
|
|
301
340
|
else
|
302
341
|
|
303
342
|
result = {
|
304
|
-
:
|
305
|
-
:
|
343
|
+
status: error.dig( 'error' ).to_i,
|
344
|
+
message: error.dig( 'status' )
|
306
345
|
}
|
307
346
|
|
308
347
|
end
|
309
348
|
|
310
349
|
rescue Errno::ECONNREFUSED => e
|
311
350
|
|
312
|
-
|
351
|
+
if( times_retried < max_retries )
|
313
352
|
|
314
|
-
|
353
|
+
times_retried += 1
|
354
|
+
$stderr.puts( format( 'Cannot execute request to %s, cause: %s', url, e ) )
|
355
|
+
$stderr.puts( format( ' retry %d%d', times_retried, max_retries ) )
|
315
356
|
|
316
|
-
|
357
|
+
sleep( 2 )
|
358
|
+
retry
|
359
|
+
else
|
360
|
+
$stderr.puts( 'Exiting request ...' )
|
317
361
|
|
318
|
-
|
362
|
+
return {
|
363
|
+
status: 500,
|
364
|
+
message: format( 'Errno::ECONNREFUSED for request: %s', url )
|
365
|
+
}
|
366
|
+
end
|
367
|
+
end
|
319
368
|
|
369
|
+
result
|
370
|
+
end
|
320
371
|
|
372
|
+
#
|
373
|
+
#
|
374
|
+
#
|
321
375
|
def self.delete( params = {} )
|
322
376
|
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
377
|
+
url = params.dig(:url)
|
378
|
+
headers = params.dig(:headers)
|
379
|
+
options = params.dig(:options)
|
380
|
+
max_retries = 3
|
381
|
+
times_retried = 0
|
328
382
|
|
329
383
|
headers['X-HTTP-Method-Override'] = 'DELETE'
|
330
384
|
|
331
385
|
result = {}
|
332
386
|
|
333
|
-
|
387
|
+
rest_client = RestClient::Resource.new(
|
334
388
|
URI.encode( url ),
|
335
389
|
options
|
336
390
|
)
|
337
391
|
|
338
392
|
begin
|
339
|
-
data =
|
393
|
+
data = rest_client.get( headers )
|
340
394
|
|
341
395
|
if( data )
|
342
396
|
|
343
397
|
data = JSON.parse( data ) #.body )
|
344
398
|
results = data.dig('results').first
|
345
399
|
|
346
|
-
|
400
|
+
unless( results.nil? )
|
347
401
|
|
348
402
|
result = {
|
349
|
-
:
|
350
|
-
:
|
351
|
-
:
|
403
|
+
status: results.dig('code').to_i,
|
404
|
+
name: results.dig('name'),
|
405
|
+
message: results.dig('status')
|
352
406
|
}
|
353
407
|
|
354
408
|
end
|
@@ -358,37 +412,48 @@ module Icinga2
|
|
358
412
|
|
359
413
|
error = e.response ? e.response : nil
|
360
414
|
|
361
|
-
|
362
|
-
error = JSON.parse( error )
|
363
|
-
end
|
415
|
+
error = JSON.parse( error ) if error.is_a?( String )
|
364
416
|
|
365
417
|
results = error.dig('results')
|
366
418
|
|
367
|
-
if( results
|
419
|
+
result = if( !results.nil? )
|
368
420
|
|
369
|
-
|
370
|
-
:
|
371
|
-
:
|
372
|
-
:
|
421
|
+
{
|
422
|
+
status: results.dig('code').to_i,
|
423
|
+
name: results.dig('name'),
|
424
|
+
message: results.dig('status')
|
373
425
|
}
|
374
426
|
|
375
427
|
else
|
376
428
|
|
377
|
-
|
378
|
-
:
|
429
|
+
{
|
430
|
+
status: error.dig( 'error' ).to_i,
|
379
431
|
# :name => results.dig('name'),
|
380
|
-
:
|
432
|
+
message: error.dig( 'status' )
|
381
433
|
}
|
382
434
|
|
383
|
-
|
435
|
+
end
|
384
436
|
rescue Errno::ECONNREFUSED => e
|
385
437
|
|
386
|
-
|
438
|
+
if( times_retried < max_retries )
|
387
439
|
|
388
|
-
|
440
|
+
times_retried += 1
|
441
|
+
$stderr.puts( format( 'Cannot execute request to %s, cause: %s', url, e ) )
|
442
|
+
$stderr.puts( format( ' retry %d%d', times_retried, max_retries ) )
|
443
|
+
|
444
|
+
sleep( 2 )
|
445
|
+
retry
|
446
|
+
else
|
447
|
+
$stderr.puts( 'Exiting request ...' )
|
389
448
|
|
390
|
-
|
449
|
+
return {
|
450
|
+
status: 500,
|
451
|
+
message: format( 'Errno::ECONNREFUSED for request: %s', url )
|
452
|
+
}
|
453
|
+
end
|
454
|
+
end
|
391
455
|
|
456
|
+
result
|
392
457
|
end
|
393
458
|
|
394
459
|
end
|