icinga2 0.5.2 → 0.6.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|