icinga2 0.9.2.8 → 1.0.0
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 +1 -9
- data/doc/downtimes.md +39 -0
- data/lib/icinga2/actions.rb +152 -0
- data/lib/icinga2/client.rb +29 -22
- data/lib/icinga2/configuration_management.rb +312 -0
- data/lib/icinga2/downtimes.rb +72 -4
- data/lib/icinga2/hostgroups.rb +6 -6
- data/lib/icinga2/hosts.rb +23 -23
- data/lib/icinga2/network.rb +115 -10
- data/lib/icinga2/notifications.rb +17 -9
- data/lib/icinga2/servicegroups.rb +5 -5
- data/lib/icinga2/services.rb +32 -30
- data/lib/icinga2/statistics.rb +17 -14
- data/lib/icinga2/tools.rb +31 -10
- data/lib/icinga2/usergroups.rb +5 -5
- data/lib/icinga2/users.rb +5 -5
- data/lib/icinga2/validator.rb +40 -34
- data/lib/icinga2/version.rb +1 -3
- data/lib/monkey_patches.rb +67 -14
- data/spec/icinga2_spec.rb +1013 -0
- data/spec/spec_helper.rb +13 -0
- metadata +9 -22
- data/doc/Array.html +0 -200
- data/doc/Boolean.html +0 -122
- data/doc/FalseClass.html +0 -132
- data/doc/Hash.html +0 -332
- data/doc/Icinga2.html +0 -247
- data/doc/Logging.html +0 -328
- data/doc/Object.html +0 -286
- data/doc/Time.html +0 -200
- data/doc/TrueClass.html +0 -132
- data/doc/_index.html +0 -352
- data/doc/class_list.html +0 -51
- data/doc/examples +0 -122
- data/doc/file.README.html +0 -349
- data/doc/file_list.html +0 -56
- data/doc/frames.html +0 -17
- data/doc/index.html +0 -349
- data/doc/method_list.html +0 -755
- data/doc/top-level-namespace.html +0 -112
data/lib/icinga2/users.rb
CHANGED
@@ -28,7 +28,7 @@ module Icinga2
|
|
28
28
|
# pager: '0000',
|
29
29
|
# groups: ['icingaadmins']
|
30
30
|
# }
|
31
|
-
#
|
31
|
+
# add_user(param)
|
32
32
|
#
|
33
33
|
# @return [Hash] result
|
34
34
|
# * code [Integer]
|
@@ -96,7 +96,7 @@ module Icinga2
|
|
96
96
|
# @param [String] user_name user to delete
|
97
97
|
#
|
98
98
|
# @example
|
99
|
-
#
|
99
|
+
# delete_user('foo')
|
100
100
|
#
|
101
101
|
# @return [Hash] result
|
102
102
|
#
|
@@ -117,10 +117,10 @@ module Icinga2
|
|
117
117
|
# @param [String] user_name ('') optional for a single user
|
118
118
|
#
|
119
119
|
# @example to get all users
|
120
|
-
#
|
120
|
+
# users
|
121
121
|
#
|
122
122
|
# @example to get one user
|
123
|
-
#
|
123
|
+
# users('icingaadmin')
|
124
124
|
#
|
125
125
|
# @return [Array]
|
126
126
|
#
|
@@ -141,7 +141,7 @@ module Icinga2
|
|
141
141
|
# @param [String] user_name the name of the user
|
142
142
|
#
|
143
143
|
# @example
|
144
|
-
#
|
144
|
+
# exists_user?('icingaadmin')
|
145
145
|
#
|
146
146
|
# @return [Bool] returns true if the user exists
|
147
147
|
#
|
data/lib/icinga2/validator.rb
CHANGED
@@ -1,20 +1,20 @@
|
|
1
1
|
|
2
|
-
class Hash
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
end
|
2
|
+
# class Hash
|
3
|
+
# def assert_required_keys(*keys)
|
4
|
+
# keys.flatten.each do |key|
|
5
|
+
# raise ArgumentError.new("Required key: #{key.inspect}") unless key?(key)
|
6
|
+
# end
|
7
|
+
# end
|
8
|
+
#
|
9
|
+
# def assert_valid_keys(params, *valid_keys)
|
10
|
+
# valid_keys.flatten!
|
11
|
+
# params.each_key do |k|
|
12
|
+
# unless valid_keys.include?(k)
|
13
|
+
# raise ArgumentError.new("Unknown key: #{k.inspect}. Valid keys are: #{valid_keys.map(&:inspect).join(', ')}")
|
14
|
+
# end
|
15
|
+
# end
|
16
|
+
# end
|
17
|
+
# end
|
18
18
|
|
19
19
|
|
20
20
|
module Icinga2
|
@@ -22,34 +22,40 @@ module Icinga2
|
|
22
22
|
# namespace for validate options
|
23
23
|
module Validator
|
24
24
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
#
|
25
|
+
# def validate_options!(params, options)
|
26
|
+
# options[:optional] ||= []
|
27
|
+
# options[:required] ||= []
|
28
|
+
#
|
29
|
+
# params = params.deep_symbolize_keys
|
30
|
+
# params.assert_required_keys(options[:required])
|
31
|
+
# params.assert_valid_keys(params, options[:required] + options[:optional])
|
32
|
+
# end
|
33
|
+
|
34
|
+
# function to validate function parameters
|
35
|
+
#
|
36
|
+
# @param [Hash] params
|
37
|
+
# @param [Hash] options
|
38
|
+
# @option options [Bool] requiered
|
39
|
+
# @option options [String] vat
|
40
|
+
# @option options [Object] type Ruby Object to check the valid type. e.g String, Ineger Hash, ...
|
41
|
+
#
|
42
|
+
# @example
|
43
|
+
# name = validate( params, required: true, var: 'name', type: String )
|
44
|
+
# vars = validate( params, required: false, var: 'vars', type: Hash )
|
45
|
+
#
|
46
|
+
# @return [Mixed] the variable from the parmas Hash or nil
|
47
|
+
#
|
35
48
|
def validate( params, options )
|
36
49
|
required = options.dig(:required) || false
|
37
50
|
var = options.dig(:var)
|
38
51
|
type = options.dig(:type)
|
39
52
|
|
40
53
|
params = params.deep_symbolize_keys
|
41
|
-
|
42
54
|
variable = params.dig(var.to_sym)
|
43
55
|
|
44
|
-
# puts params
|
45
|
-
# puts options
|
46
|
-
|
47
56
|
clazz = Object.const_get(type.to_s)
|
48
57
|
|
49
|
-
if(required == true )
|
50
|
-
raise ArgumentError.new(format('\'%s\' is requiered and missing!', var)) if(variable.nil?)
|
51
|
-
end
|
52
|
-
|
58
|
+
raise ArgumentError.new(format('\'%s\' is requiered and missing!', var)) if(variable.nil? && required == true )
|
53
59
|
raise ArgumentError.new(format('wrong type. \'%s\' must be an %s, given \'%s\'', var, type, variable.class.to_s)) unless( variable.nil? || variable.is_a?(clazz) )
|
54
60
|
|
55
61
|
variable
|
data/lib/icinga2/version.rb
CHANGED
data/lib/monkey_patches.rb
CHANGED
@@ -2,19 +2,22 @@
|
|
2
2
|
# -----------------------------------------------------------------------------
|
3
3
|
# Monkey patches
|
4
4
|
|
5
|
-
# Modify `Object`
|
6
|
-
|
5
|
+
# Modify `Object`
|
6
|
+
#
|
7
|
+
# original from (https://gist.github.com/Integralist/9503099)
|
8
|
+
#
|
7
9
|
# None of the above solutions work with a multi-level hash
|
8
10
|
# They only work on the first level: {:foo=>"bar", :level1=>{"level2"=>"baz"}}
|
9
11
|
# The following two variations solve the problem in the same way
|
10
12
|
# transform hash keys to symbols
|
11
|
-
#
|
12
|
-
#
|
13
|
-
|
13
|
+
#
|
14
|
+
# @example
|
15
|
+
# multi_hash = { 'foo' => 'bar', 'level1' => { 'level2' => 'baz' } }
|
16
|
+
# multi_hash = multi_hash.deep_string_keys
|
17
|
+
#
|
14
18
|
class Object
|
15
19
|
|
16
20
|
def deep_symbolize_keys
|
17
|
-
|
18
21
|
if( is_a?( Hash ) )
|
19
22
|
return inject({}) do |memo, (k, v)|
|
20
23
|
memo.tap { |m| m[k.to_sym] = v.deep_string_keys }
|
@@ -27,7 +30,6 @@ class Object
|
|
27
30
|
end
|
28
31
|
|
29
32
|
def deep_string_keys
|
30
|
-
|
31
33
|
if( is_a?( Hash ) )
|
32
34
|
return inject({}) do |memo, (k, v)|
|
33
35
|
memo.tap { |m| m[k.to_s] = v.deep_string_keys }
|
@@ -43,7 +45,19 @@ end
|
|
43
45
|
|
44
46
|
# -----------------------------------------------------------------------------
|
45
47
|
|
48
|
+
# Monkey Patch for Array
|
49
|
+
#
|
46
50
|
class Array
|
51
|
+
|
52
|
+
# add a compare function to Array class
|
53
|
+
#
|
54
|
+
# @example
|
55
|
+
# a = ['aaa','bbb']
|
56
|
+
# b = ['ccc','xxx']
|
57
|
+
# a.compare(b)
|
58
|
+
#
|
59
|
+
# @return [Bool]
|
60
|
+
#
|
47
61
|
def compare( comparate )
|
48
62
|
to_set == comparate.to_set
|
49
63
|
end
|
@@ -51,12 +65,18 @@ end
|
|
51
65
|
|
52
66
|
# -----------------------------------------------------------------------------
|
53
67
|
|
54
|
-
#
|
55
|
-
#
|
56
|
-
# tags = [ 'foo', 'bar', 'fii' ]
|
57
|
-
# useableTags = tags.filter( 'fii' )
|
58
|
-
|
68
|
+
# Monkey Patch for Hash
|
69
|
+
#
|
59
70
|
class Hash
|
71
|
+
|
72
|
+
# add a filter function to Hash Class
|
73
|
+
#
|
74
|
+
# @example
|
75
|
+
# tags = [ 'foo', 'bar', 'fii' ]
|
76
|
+
# useableTags = tags.filter( 'fii' )
|
77
|
+
#
|
78
|
+
# @return [Hash]
|
79
|
+
#
|
60
80
|
def filter( *args )
|
61
81
|
if( args.size == 1 )
|
62
82
|
args[0] = args[0].to_s if args[0].is_a?( Symbol )
|
@@ -69,7 +89,18 @@ end
|
|
69
89
|
|
70
90
|
# -----------------------------------------------------------------------------
|
71
91
|
|
92
|
+
# Monkey Patch for Time
|
93
|
+
#
|
72
94
|
class Time
|
95
|
+
|
96
|
+
# add function add_minutes to Time Class
|
97
|
+
#
|
98
|
+
# @example
|
99
|
+
# time = Time.now
|
100
|
+
# time = time.add_minutes(10)
|
101
|
+
#
|
102
|
+
# @return [Time]
|
103
|
+
#
|
73
104
|
def add_minutes(m)
|
74
105
|
self + (60 * m)
|
75
106
|
end
|
@@ -77,8 +108,10 @@ end
|
|
77
108
|
|
78
109
|
# -----------------------------------------------------------------------------
|
79
110
|
|
80
|
-
#
|
81
|
-
|
111
|
+
# Monkey Patch to implement an Boolean Check
|
112
|
+
# original from: https://stackoverflow.com/questions/3028243/check-if-ruby-object-is-a-boolean/3028378#3028378
|
113
|
+
#
|
114
|
+
#
|
82
115
|
module Boolean; end
|
83
116
|
class TrueClass; include Boolean; end
|
84
117
|
class FalseClass; include Boolean; end
|
@@ -87,3 +120,23 @@ true.is_a?(Boolean) #=> true
|
|
87
120
|
false.is_a?(Boolean) #=> true
|
88
121
|
|
89
122
|
# -----------------------------------------------------------------------------
|
123
|
+
|
124
|
+
# Monkey Patch for String Class
|
125
|
+
#
|
126
|
+
class String
|
127
|
+
|
128
|
+
# get the first character in a string
|
129
|
+
#
|
130
|
+
# original from https://stackoverflow.com/a/2730984
|
131
|
+
#
|
132
|
+
# @example
|
133
|
+
# 'foo'.initial
|
134
|
+
#
|
135
|
+
# @return [String]
|
136
|
+
#
|
137
|
+
def initial
|
138
|
+
self[0,1]
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
# -----------------------------------------------------------------------------
|
@@ -0,0 +1,1013 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
require 'rspec'
|
5
|
+
require 'icinga2'
|
6
|
+
|
7
|
+
RSpec.configure do |config|
|
8
|
+
config.mock_with :rspec
|
9
|
+
end
|
10
|
+
|
11
|
+
describe Icinga2 do
|
12
|
+
|
13
|
+
before do
|
14
|
+
config = {
|
15
|
+
icinga: {
|
16
|
+
host: ENV.fetch( 'ICINGA_HOST', 'localhost' ),
|
17
|
+
api: {
|
18
|
+
username: 'root',
|
19
|
+
password: 'icinga'
|
20
|
+
}
|
21
|
+
}
|
22
|
+
}
|
23
|
+
@icinga2 = Icinga2::Client.new( config )
|
24
|
+
end
|
25
|
+
|
26
|
+
describe 'Available' do
|
27
|
+
it 'available' do
|
28
|
+
expect(@icinga2.available?).to be_truthy
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe 'Converts' do
|
33
|
+
|
34
|
+
it 'host state to string' do
|
35
|
+
expect(@icinga2.state_to_string(0, true)).to be == 'Up'
|
36
|
+
expect(@icinga2.state_to_string(1, true)).to be == 'Down'
|
37
|
+
expect(@icinga2.state_to_string(5, true)).to be == 'Undefined'
|
38
|
+
end
|
39
|
+
it 'service state to string' do
|
40
|
+
expect(@icinga2.state_to_string(0, false)).to be == 'OK'
|
41
|
+
expect(@icinga2.state_to_string(1, false)).to be == 'Warning'
|
42
|
+
expect(@icinga2.state_to_string(2, false)).to be == 'Critical'
|
43
|
+
expect(@icinga2.state_to_string(3, false)).to be == 'Unknown'
|
44
|
+
expect(@icinga2.state_to_string(5, false)).to be == 'Undefined'
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'host state to color' do
|
48
|
+
expect(@icinga2.state_to_color(0, true)).to be == 'green'
|
49
|
+
expect(@icinga2.state_to_color(1, true)).to be == 'red'
|
50
|
+
expect(@icinga2.state_to_color(5, true)).to be == 'blue'
|
51
|
+
end
|
52
|
+
|
53
|
+
it 'service state to color' do
|
54
|
+
expect(@icinga2.state_to_color(0, false)).to be == 'green'
|
55
|
+
expect(@icinga2.state_to_color(1, false)).to be == 'yellow'
|
56
|
+
expect(@icinga2.state_to_color(2, false)).to be == 'red'
|
57
|
+
expect(@icinga2.state_to_color(3, false)).to be == 'purple'
|
58
|
+
expect(@icinga2.state_to_color(5, false)).to be == 'blue'
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
describe 'Information' do
|
63
|
+
|
64
|
+
it 'status_data' do
|
65
|
+
expect(@icinga2.status_data).to be_a(Hash)
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'application_data' do
|
69
|
+
expect(@icinga2.application_data).to be_a(Hash)
|
70
|
+
end
|
71
|
+
|
72
|
+
it 'cib_data' do
|
73
|
+
expect(@icinga2.cib_data).to be_a(Hash)
|
74
|
+
end
|
75
|
+
it 'api_listener' do
|
76
|
+
expect(@icinga2.api_listener).to be_a(Hash)
|
77
|
+
end
|
78
|
+
|
79
|
+
it 'version' do
|
80
|
+
@icinga2.application_data
|
81
|
+
v = @icinga2.version
|
82
|
+
expect(v).to be_a(Hash)
|
83
|
+
expect(v.count).to be == 2
|
84
|
+
expect(v.dig(:version)).to be_a(String)
|
85
|
+
expect(v.dig(:revision)).to be_a(String)
|
86
|
+
end
|
87
|
+
|
88
|
+
it 'node name' do
|
89
|
+
@icinga2.application_data
|
90
|
+
n = @icinga2.node_name
|
91
|
+
expect(n).to be_a(String)
|
92
|
+
end
|
93
|
+
|
94
|
+
it 'start time' do
|
95
|
+
@icinga2.application_data
|
96
|
+
expect(@icinga2.start_time).to be_a(Time)
|
97
|
+
end
|
98
|
+
|
99
|
+
it 'uptime' do
|
100
|
+
@icinga2.cib_data
|
101
|
+
expect(@icinga2.uptime).to be_a(String)
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
describe 'Module Statistics' do
|
106
|
+
|
107
|
+
it 'average' do
|
108
|
+
@icinga2.cib_data
|
109
|
+
latency, execution_time = @icinga2.average_statistics.values
|
110
|
+
expect(latency).to be_a(Float)
|
111
|
+
expect(execution_time).to be_a(Float)
|
112
|
+
end
|
113
|
+
|
114
|
+
it 'interval' do
|
115
|
+
@icinga2.cib_data
|
116
|
+
i = @icinga2.interval_statistics
|
117
|
+
expect(i).to be_a(Hash)
|
118
|
+
expect(i.count).to be == 4
|
119
|
+
expect(i.dig(:hosts_active_checks)).to be_a(Float)
|
120
|
+
expect(i.dig(:hosts_passive_checks)).to be_a(Float)
|
121
|
+
expect(i.dig(:services_active_checks)).to be_a(Float)
|
122
|
+
expect(i.dig(:services_passive_checks)).to be_a(Float)
|
123
|
+
end
|
124
|
+
|
125
|
+
it 'service' do
|
126
|
+
@icinga2.cib_data
|
127
|
+
s = @icinga2.service_statistics
|
128
|
+
expect(s).to be_a(Hash)
|
129
|
+
expect(s.count).to be == 7
|
130
|
+
expect(s.dig(:ok)).to be_a(Integer)
|
131
|
+
expect(s.dig(:warning)).to be_a(Integer)
|
132
|
+
expect(s.dig(:critical)).to be_a(Integer)
|
133
|
+
expect(s.dig(:unknown)).to be_a(Integer)
|
134
|
+
expect(s.dig(:pending)).to be_a(Integer)
|
135
|
+
expect(s.dig(:in_downtime)).to be_a(Integer)
|
136
|
+
expect(s.dig(:acknowledged)).to be_a(Integer)
|
137
|
+
end
|
138
|
+
|
139
|
+
it 'host' do
|
140
|
+
@icinga2.cib_data
|
141
|
+
s = @icinga2.host_statistics
|
142
|
+
expect(s).to be_a(Hash)
|
143
|
+
expect(s.count).to be == 6
|
144
|
+
expect(s.dig(:up)).to be_a(Integer)
|
145
|
+
expect(s.dig(:down)).to be_a(Integer)
|
146
|
+
expect(s.dig(:pending)).to be_a(Integer)
|
147
|
+
expect(s.dig(:unreachable)).to be_a(Integer)
|
148
|
+
expect(s.dig(:in_downtime)).to be_a(Integer)
|
149
|
+
expect(s.dig(:acknowledged)).to be_a(Integer)
|
150
|
+
end
|
151
|
+
|
152
|
+
it 'work queue' do
|
153
|
+
r = @icinga2.work_queue_statistics
|
154
|
+
expect(r).to be_a(Hash)
|
155
|
+
expect(r.count).to be >= 1
|
156
|
+
r.each_value do |v|
|
157
|
+
expect(v).to be_a(Float)
|
158
|
+
end
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
describe 'Module Host' do
|
163
|
+
|
164
|
+
it 'list all hosts' do
|
165
|
+
h = @icinga2.hosts
|
166
|
+
expect(h).to be_a(Array)
|
167
|
+
expect(h.count).to be >= 1
|
168
|
+
end
|
169
|
+
|
170
|
+
it 'create host \'foo\'' do
|
171
|
+
options = {
|
172
|
+
name: 'foo',
|
173
|
+
address: '127.0.0.1',
|
174
|
+
display_name: 'test node',
|
175
|
+
max_check_attempts: 5,
|
176
|
+
notes: 'test node',
|
177
|
+
vars: {
|
178
|
+
description: 'spec test',
|
179
|
+
os: 'Docker',
|
180
|
+
partitions: {
|
181
|
+
'/' => {
|
182
|
+
crit: '95%',
|
183
|
+
warn: '90%'
|
184
|
+
}
|
185
|
+
}
|
186
|
+
}
|
187
|
+
}
|
188
|
+
h = @icinga2.add_host(options)
|
189
|
+
expect(h).to be_a(Hash)
|
190
|
+
status_code = h['code']
|
191
|
+
expect(status_code).to be_a(Integer)
|
192
|
+
expect(status_code).to be == 200
|
193
|
+
end
|
194
|
+
|
195
|
+
it 'list host \'foo\'' do
|
196
|
+
h = @icinga2.hosts( name: 'foo')
|
197
|
+
expect(h).to be_a(Array)
|
198
|
+
name = h.first['attrs']['name']
|
199
|
+
expect(name).to be_a(String)
|
200
|
+
expect(name).to be == 'foo'
|
201
|
+
expect(h.count).to be == 1
|
202
|
+
end
|
203
|
+
|
204
|
+
it 'list host \'foo\'' do
|
205
|
+
h = @icinga2.hosts(
|
206
|
+
name: 'foo',
|
207
|
+
attrs: %w[display_name name address]
|
208
|
+
)
|
209
|
+
expect(h).to be_a(Array)
|
210
|
+
name = h.first['attrs']['name']
|
211
|
+
expect(name).to be_a(String)
|
212
|
+
expect(name).to be == 'foo'
|
213
|
+
expect(h.count).to be == 1
|
214
|
+
end
|
215
|
+
|
216
|
+
it 'exists host \'foo\'' do
|
217
|
+
expect(@icinga2.exists_host?('foo')).to be_truthy
|
218
|
+
end
|
219
|
+
|
220
|
+
it 'modify host \'foo\' with merge (must be failed)' do
|
221
|
+
options = {
|
222
|
+
name: 'foo-2',
|
223
|
+
display_name: 'test node (changed)',
|
224
|
+
max_check_attempts: 10,
|
225
|
+
notes: 'spec test',
|
226
|
+
vars: {
|
227
|
+
description: 'changed at ...'
|
228
|
+
},
|
229
|
+
merge_vars: true
|
230
|
+
}
|
231
|
+
h = @icinga2.modify_host(options)
|
232
|
+
expect(h).to be_a(Hash)
|
233
|
+
status_code = h['code']
|
234
|
+
expect(status_code).to be_a(Integer)
|
235
|
+
expect(status_code).to be == 404
|
236
|
+
end
|
237
|
+
|
238
|
+
it 'modify host \'foo\' with merge' do
|
239
|
+
options = {
|
240
|
+
name: 'foo',
|
241
|
+
display_name: 'test node (changed)',
|
242
|
+
max_check_attempts: 10,
|
243
|
+
notes: 'spec test',
|
244
|
+
vars: {
|
245
|
+
description: 'changed at ...'
|
246
|
+
},
|
247
|
+
merge_vars: true
|
248
|
+
}
|
249
|
+
h = @icinga2.modify_host(options)
|
250
|
+
expect(h).to be_a(Hash)
|
251
|
+
status_code = h['code']
|
252
|
+
expect(status_code).to be_a(Integer)
|
253
|
+
expect(status_code).to be == 200
|
254
|
+
|
255
|
+
# # check values
|
256
|
+
# h = @icinga2.hosts(host: 'foo')
|
257
|
+
# h = h.first
|
258
|
+
# puts JSON.pretty_generate h
|
259
|
+
# display_name = h['attrs']['display_name']
|
260
|
+
# expect(display_name).to be_a(String)
|
261
|
+
# max_check_attempts = h['attrs']['max_check_attempts']
|
262
|
+
# expect(max_check_attempts).to be_a(Float)
|
263
|
+
end
|
264
|
+
|
265
|
+
it 'modify host \'foo\' without merge' do
|
266
|
+
options = {
|
267
|
+
name: 'foo',
|
268
|
+
display_name: 'test node (changed)',
|
269
|
+
max_check_attempts: 10,
|
270
|
+
notes: 'spec test',
|
271
|
+
vars: {
|
272
|
+
description: 'changed only the description'
|
273
|
+
}
|
274
|
+
}
|
275
|
+
h = @icinga2.modify_host(options)
|
276
|
+
expect(h).to be_a(Hash)
|
277
|
+
status_code = h['code']
|
278
|
+
expect(status_code).to be_a(Integer)
|
279
|
+
expect(status_code).to be == 200
|
280
|
+
end
|
281
|
+
|
282
|
+
it 'delete host \'foo\'' do
|
283
|
+
h = @icinga2.delete_host( name: 'foo', cascade: true )
|
284
|
+
expect(h).to be_a(Hash)
|
285
|
+
status_code = h['code']
|
286
|
+
expect(status_code).to be_a(Integer)
|
287
|
+
expect(status_code).to be == 200
|
288
|
+
end
|
289
|
+
|
290
|
+
it 'delete host \'foo\' (again)' do
|
291
|
+
h = @icinga2.delete_host( name: 'foo' )
|
292
|
+
expect(h).to be_a(Hash)
|
293
|
+
status_code = h['code']
|
294
|
+
expect(status_code).to be_a(Integer)
|
295
|
+
expect(status_code).to be == 404
|
296
|
+
end
|
297
|
+
|
298
|
+
|
299
|
+
it 'exists_host \'test\'' do
|
300
|
+
expect(@icinga2.exists_host?('test')).to be_falsey
|
301
|
+
end
|
302
|
+
|
303
|
+
it 'count of all hosts' do
|
304
|
+
@icinga2.host_objects
|
305
|
+
c = @icinga2.hosts_all
|
306
|
+
expect(c).to be_a(Integer)
|
307
|
+
expect(c).to be >= 1
|
308
|
+
end
|
309
|
+
|
310
|
+
it 'count of all hosts with filter' do
|
311
|
+
@icinga2.host_objects(
|
312
|
+
filter: '"icinga-satellites" in host.groups'
|
313
|
+
)
|
314
|
+
c = @icinga2.hosts_all
|
315
|
+
expect(c).to be_a(Integer)
|
316
|
+
expect(c).to be >= 1
|
317
|
+
end
|
318
|
+
|
319
|
+
it 'count_hosts_with_problems' do
|
320
|
+
expect(@icinga2.count_hosts_with_problems).to be_a(Integer)
|
321
|
+
end
|
322
|
+
|
323
|
+
it 'list_hosts_with_problems 5' do
|
324
|
+
h = @icinga2.list_hosts_with_problems
|
325
|
+
expect(h).to be_a(Hash)
|
326
|
+
expect(h.count).to be <= 5
|
327
|
+
end
|
328
|
+
|
329
|
+
it 'list_hosts_with_problems 15' do
|
330
|
+
h = @icinga2.list_hosts_with_problems(15)
|
331
|
+
expect(h).to be_a(Hash)
|
332
|
+
expect(h.count).to be <= 15
|
333
|
+
end
|
334
|
+
|
335
|
+
|
336
|
+
it 'data with host problems' do
|
337
|
+
@icinga2.host_objects
|
338
|
+
h = @icinga2.host_problems
|
339
|
+
expect(h).to be_a(Hash)
|
340
|
+
expect(h.count).to be == 6
|
341
|
+
expect(h.dig(:all)).to be_a(Integer)
|
342
|
+
expect(h.dig(:down)).to be_a(Integer)
|
343
|
+
expect(h.dig(:critical)).to be_a(Integer)
|
344
|
+
expect(h.dig(:unknown)).to be_a(Integer)
|
345
|
+
expect(h.dig(:handled)).to be_a(Integer)
|
346
|
+
expect(h.dig(:adjusted)).to be_a(Integer)
|
347
|
+
end
|
348
|
+
end
|
349
|
+
|
350
|
+
describe 'Module Hostgroups' do
|
351
|
+
|
352
|
+
it 'list hostgroup \'icinga-satellites\'' do
|
353
|
+
h = @icinga2.hostgroups('icinga-satellites')
|
354
|
+
name = h.first.dig('attrs','__name')
|
355
|
+
expect(h).to be_a(Array)
|
356
|
+
expect(h.count).to be == 1
|
357
|
+
expect(name).to be == 'icinga-satellites'
|
358
|
+
end
|
359
|
+
|
360
|
+
it 'list all hostgroups' do
|
361
|
+
h = @icinga2.hostgroups
|
362
|
+
expect(h).to be_a(Array)
|
363
|
+
expect(h.count).to be >= 1
|
364
|
+
end
|
365
|
+
|
366
|
+
it 'exists hostgroup \'icinga-satellites\'' do
|
367
|
+
expect(@icinga2.exists_hostgroup?('icinga-satellites')).to be_truthy
|
368
|
+
end
|
369
|
+
|
370
|
+
it 'exists hostgroup \'test\'' do
|
371
|
+
expect(@icinga2.exists_hostgroup?('test')).to be_falsey
|
372
|
+
end
|
373
|
+
end
|
374
|
+
|
375
|
+
describe 'Module Services' do
|
376
|
+
|
377
|
+
it 'list services \'ping4\' for host \'c1-mysql-1\'' do
|
378
|
+
h = @icinga2.services( host_name: 'c1-mysql-1', name: 'ping4' )
|
379
|
+
expect(h).to be_a(Array)
|
380
|
+
expect(h.count).to be == 1
|
381
|
+
end
|
382
|
+
|
383
|
+
it 'list all services' do
|
384
|
+
h = @icinga2.services
|
385
|
+
expect(h).to be_a(Array)
|
386
|
+
expect(h.count).to be >= 1
|
387
|
+
end
|
388
|
+
|
389
|
+
it 'exists service check \'bp-mysql-uptime\' for host \'c1-mysql-1\'' do
|
390
|
+
expect(@icinga2.exists_service?( host_name: 'c1-mysql-1', name: 'bp-mysql-uptime' )).to be_truthy
|
391
|
+
end
|
392
|
+
|
393
|
+
it 'exists service check \'hdb\' for host \'c1-mysql-1\'' do
|
394
|
+
expect(@icinga2.exists_service?( host_name: 'c1-mysql-1', name: 'hdb' )).to be_falsey
|
395
|
+
end
|
396
|
+
|
397
|
+
it 'count of all services with default parameters' do
|
398
|
+
c = @icinga2.service_objects
|
399
|
+
expect(c).to be_a(Array)
|
400
|
+
expect(c.count).to be >= 1
|
401
|
+
end
|
402
|
+
|
403
|
+
it 'count of all services with \'attr\' and \'joins\' as parameter' do
|
404
|
+
c = @icinga2.service_objects(
|
405
|
+
attrs: %w[name state],
|
406
|
+
joins: ['host.name','host.state']
|
407
|
+
)
|
408
|
+
expect(c).to be_a(Array)
|
409
|
+
expect(c.count).to be >= 1
|
410
|
+
end
|
411
|
+
|
412
|
+
it 'count of all services with \'attrs\', \'filter\' and \'joins\' as parameter' do
|
413
|
+
c = @icinga2.service_objects(
|
414
|
+
attrs: %w[display_name check_command enable_active_checks],
|
415
|
+
filter: 'service.state == 1' ,
|
416
|
+
joins: ['host.name', 'host.address']
|
417
|
+
)
|
418
|
+
expect(c).to be_a(Array)
|
419
|
+
end
|
420
|
+
|
421
|
+
it 'count of services with problems' do
|
422
|
+
expect(@icinga2.count_services_with_problems).to be_a(Integer)
|
423
|
+
end
|
424
|
+
|
425
|
+
it 'list_services_with_problems 5' do
|
426
|
+
h = @icinga2.list_services_with_problems
|
427
|
+
expect(h).to be_a(Hash)
|
428
|
+
expect(h.count).to be == 2
|
429
|
+
expect(h.dig(:services_with_problems)).to be_a(Array)
|
430
|
+
expect(h.dig(:services_with_problems).count).to be <= 5
|
431
|
+
expect(h.dig(:services_with_problems_and_severity)).to be_a(Hash)
|
432
|
+
expect(h.dig(:services_with_problems_and_severity).count).to be <= 5
|
433
|
+
end
|
434
|
+
|
435
|
+
it 'list_services_with_problems 15' do
|
436
|
+
h = @icinga2.list_services_with_problems(15)
|
437
|
+
expect(h).to be_a(Hash)
|
438
|
+
expect(h.count).to be == 2
|
439
|
+
expect(h.dig(:services_with_problems)).to be_a(Array)
|
440
|
+
expect(h.dig(:services_with_problems).count).to be <= 15
|
441
|
+
expect(h.dig(:services_with_problems_and_severity)).to be_a(Hash)
|
442
|
+
expect(h.dig(:services_with_problems_and_severity).count).to be <= 15
|
443
|
+
end
|
444
|
+
|
445
|
+
it 'count of all services' do
|
446
|
+
@icinga2.cib_data
|
447
|
+
@icinga2.service_objects
|
448
|
+
expect(@icinga2.services_all).to be_a(Integer)
|
449
|
+
end
|
450
|
+
|
451
|
+
it 'services with problems' do
|
452
|
+
a = @icinga2.service_problems
|
453
|
+
expect(a).to be_a(Hash)
|
454
|
+
expect(a.count).to be == 14
|
455
|
+
expect(a.dig(:ok)).to be_a(Integer)
|
456
|
+
expect(a.dig(:warning)).to be_a(Integer)
|
457
|
+
expect(a.dig(:critical)).to be_a(Integer)
|
458
|
+
expect(a.dig(:unknown)).to be_a(Integer)
|
459
|
+
expect(a.dig(:pending)).to be_a(Integer)
|
460
|
+
expect(a.dig(:in_downtime)).to be_a(Integer)
|
461
|
+
expect(a.dig(:acknowledged)).to be_a(Integer)
|
462
|
+
expect(a.dig(:adjusted_warning)).to be_a(Integer)
|
463
|
+
expect(a.dig(:adjusted_critical)).to be_a(Integer)
|
464
|
+
expect(a.dig(:adjusted_unknown)).to be_a(Integer)
|
465
|
+
expect(a.dig(:handled_all)).to be_a(Integer)
|
466
|
+
expect(a.dig(:handled_warning)).to be_a(Integer)
|
467
|
+
expect(a.dig(:handled_critical)).to be_a(Integer)
|
468
|
+
expect(a.dig(:handled_unknown)).to be_a(Integer)
|
469
|
+
end
|
470
|
+
|
471
|
+
it 'list all unhandled service' do
|
472
|
+
s = @icinga2.unhandled_services
|
473
|
+
expect(s).to be_a(Array)
|
474
|
+
expect(s.count).to be >= 0
|
475
|
+
end
|
476
|
+
|
477
|
+
it 'add service \'new_http\' to host \'c1-mysql-1\'' do
|
478
|
+
data = {
|
479
|
+
host_name: 'c1-mysql-1',
|
480
|
+
name: 'new_http',
|
481
|
+
check_command: 'http',
|
482
|
+
check_interval: 10,
|
483
|
+
retry_interval: 30,
|
484
|
+
max_check_attempts: 5,
|
485
|
+
vars: {
|
486
|
+
http_address: '127.0.0.1',
|
487
|
+
http_url: '/access/index',
|
488
|
+
http_port: 80
|
489
|
+
}
|
490
|
+
}
|
491
|
+
s = @icinga2.add_service( data )
|
492
|
+
status_code = s['code']
|
493
|
+
expect(s).to be_a(Hash)
|
494
|
+
expect(status_code).to be_a(Integer)
|
495
|
+
|
496
|
+
if(status_code != 200)
|
497
|
+
expect(s['status']).to be_a(String)
|
498
|
+
else
|
499
|
+
expect(status_code).to be == 200
|
500
|
+
end
|
501
|
+
end
|
502
|
+
|
503
|
+
it 'modify service \'new_http\'' do
|
504
|
+
data = {
|
505
|
+
name: 'new_http',
|
506
|
+
check_interval: 60,
|
507
|
+
retry_interval: 10,
|
508
|
+
notes: 'modifyed with spec test',
|
509
|
+
vars: {
|
510
|
+
http_url: '/access/login',
|
511
|
+
http_address: '10.41.80.63'
|
512
|
+
}
|
513
|
+
}
|
514
|
+
s = @icinga2.modify_service( data )
|
515
|
+
|
516
|
+
status_code = s['code']
|
517
|
+
expect(s).to be_a(Hash)
|
518
|
+
expect(status_code).to be_a(Integer)
|
519
|
+
expect(status_code).to be == 200
|
520
|
+
end
|
521
|
+
|
522
|
+
it 'delete service \'new_http\' from \'c1-mysql-1\'' do
|
523
|
+
|
524
|
+
s = @icinga2.delete_service(
|
525
|
+
host_name: 'c1-mysql-1',
|
526
|
+
name: 'new_http',
|
527
|
+
cascade: true
|
528
|
+
)
|
529
|
+
expect(s).to be_a(Hash)
|
530
|
+
status_code = s['code']
|
531
|
+
expect(status_code).to be_a(Integer)
|
532
|
+
expect(status_code).to be == 200
|
533
|
+
end
|
534
|
+
|
535
|
+
end
|
536
|
+
|
537
|
+
describe 'Module Servicegroups' do
|
538
|
+
|
539
|
+
it 'list all servicegroups' do
|
540
|
+
h = @icinga2.servicegroups
|
541
|
+
expect(h).to be_a(Array)
|
542
|
+
expect(h.count).to be >= 1
|
543
|
+
end
|
544
|
+
|
545
|
+
it 'list servicegroup \'icinga\'' do
|
546
|
+
h = @icinga2.servicegroups('icinga')
|
547
|
+
expect(h).to be_a(Array)
|
548
|
+
expect(h.count).to be == 1
|
549
|
+
end
|
550
|
+
|
551
|
+
it 'exists servicegroup \'icinga\'' do
|
552
|
+
expect(@icinga2.exists_servicegroup?('icinga')).to be_truthy
|
553
|
+
end
|
554
|
+
|
555
|
+
it 'exists servicegroup \'test\'' do
|
556
|
+
expect(@icinga2.exists_servicegroup?('test')).to be_falsey
|
557
|
+
end
|
558
|
+
|
559
|
+
it 'add Servicegroup \'foo\'' do
|
560
|
+
s = @icinga2.add_servicegroup( service_group: 'foo', display_name: 'FOO' )
|
561
|
+
expect(s).to be_a(Hash)
|
562
|
+
|
563
|
+
status_code = s['code']
|
564
|
+
expect(status_code).to be_a(Integer)
|
565
|
+
expect(status_code).to be == 200
|
566
|
+
end
|
567
|
+
|
568
|
+
it 'add Servicegroup \'foo\' (again)' do
|
569
|
+
s = @icinga2.add_servicegroup( service_group: 'foo', display_name: 'FOO' )
|
570
|
+
expect(s).to be_a(Hash)
|
571
|
+
status_code = s['code']
|
572
|
+
expect(status_code).to be_a(Integer)
|
573
|
+
expect(status_code).to be == 500
|
574
|
+
end
|
575
|
+
|
576
|
+
it 'delete Servicegroup \'foo\'' do
|
577
|
+
s = @icinga2.delete_servicegroup(name: 'foo', cascade: true)
|
578
|
+
expect(s).to be_a(Hash)
|
579
|
+
|
580
|
+
status_code = s['code']
|
581
|
+
expect(status_code).to be_a(Integer)
|
582
|
+
expect(status_code).to be == 200
|
583
|
+
end
|
584
|
+
|
585
|
+
it 'delete Servicegroup \'foo\' (again)' do
|
586
|
+
s = @icinga2.delete_servicegroup(name: 'foo')
|
587
|
+
expect(s).to be_a(Hash)
|
588
|
+
|
589
|
+
status_code = s['code']
|
590
|
+
expect(status_code).to be_a(Integer)
|
591
|
+
expect(status_code).to be == 404
|
592
|
+
end
|
593
|
+
|
594
|
+
|
595
|
+
end
|
596
|
+
|
597
|
+
describe 'Module Notification' do
|
598
|
+
|
599
|
+
it "enable notification for host 'c1-mysql-1'" do
|
600
|
+
h = @icinga2.enable_host_notification( 'c1-mysql-1' )
|
601
|
+
|
602
|
+
status_code = h['code']
|
603
|
+
expect(h).to be_a(Hash)
|
604
|
+
expect(status_code).to be == 200
|
605
|
+
end
|
606
|
+
|
607
|
+
it "enable notification for host 'c1-mysql-1' and all services" do
|
608
|
+
h = @icinga2.enable_service_notification( 'c1-mysql-1' )
|
609
|
+
expect(h).to be_a(Hash)
|
610
|
+
status_code = h['code']
|
611
|
+
expect(status_code).to be == 200
|
612
|
+
end
|
613
|
+
|
614
|
+
it "disable notification for host 'c1-web-1' and all services" do
|
615
|
+
h = @icinga2.disable_service_notification( 'c1-web-1' )
|
616
|
+
expect(h).to be_a(Hash)
|
617
|
+
status_code = h['code']
|
618
|
+
expect(status_code).to be == 200
|
619
|
+
end
|
620
|
+
|
621
|
+
|
622
|
+
it 'list notifications' do
|
623
|
+
h = @icinga2.notifications
|
624
|
+
expect(h).to be_a(Array)
|
625
|
+
expect(h.count).to be_a(Integer)
|
626
|
+
end
|
627
|
+
|
628
|
+
it 'enable Notifications for hostgroup' do
|
629
|
+
h = @icinga2.enable_hostgroup_notification('icinga-satellites')
|
630
|
+
expect(h).to be_a(Hash)
|
631
|
+
status_code = h['code']
|
632
|
+
expect(status_code).to be == 200
|
633
|
+
end
|
634
|
+
|
635
|
+
it 'disable Notifications for hostgroup' do
|
636
|
+
h = @icinga2.disable_hostgroup_notification('icinga-satellites')
|
637
|
+
expect(h).to be_a(Hash)
|
638
|
+
status_code = h['code']
|
639
|
+
expect(status_code).to be == 200
|
640
|
+
end
|
641
|
+
|
642
|
+
end
|
643
|
+
|
644
|
+
describe 'Module Users' do
|
645
|
+
|
646
|
+
it 'list all users' do
|
647
|
+
h = @icinga2.users
|
648
|
+
expect(h).to be_a(Array)
|
649
|
+
expect(h.count).to be >= 1
|
650
|
+
end
|
651
|
+
|
652
|
+
it 'list named users' do
|
653
|
+
h = @icinga2.users('icingaadmin')
|
654
|
+
expect(h).to be_a(Array)
|
655
|
+
expect(h.count).to be == 1
|
656
|
+
end
|
657
|
+
|
658
|
+
it 'exists user' do
|
659
|
+
expect(@icinga2.exists_user?('icingaadmin')).to be_truthy
|
660
|
+
end
|
661
|
+
|
662
|
+
it 'exists user' do
|
663
|
+
expect(@icinga2.exists_user?('icinga-admin')).to be_falsey
|
664
|
+
end
|
665
|
+
|
666
|
+
it 'add user with multiple and not existing groups' do
|
667
|
+
h = @icinga2.add_user(
|
668
|
+
user_name: 'foo',
|
669
|
+
display_name: 'FOO',
|
670
|
+
email: 'foo@bar.com',
|
671
|
+
pager: '0000',
|
672
|
+
groups: ['non-existing-group', 'icingaadmins', 'icinga-admins']
|
673
|
+
)
|
674
|
+
expect(h).to be_a(Hash)
|
675
|
+
status_code = h['code']
|
676
|
+
expect(status_code).to be == 404
|
677
|
+
end
|
678
|
+
|
679
|
+
it 'add user \'foo\'' do
|
680
|
+
h = @icinga2.add_user(
|
681
|
+
user_name: 'foo',
|
682
|
+
display_name: 'FOO',
|
683
|
+
email: 'foo@bar.com',
|
684
|
+
pager: '0000',
|
685
|
+
groups: ['icingaadmins']
|
686
|
+
)
|
687
|
+
expect(h).to be_a(Hash)
|
688
|
+
status_code = h['code']
|
689
|
+
expect(status_code).to be == 200
|
690
|
+
end
|
691
|
+
|
692
|
+
it 'add user \'foo\' (again)' do
|
693
|
+
h = @icinga2.add_user(
|
694
|
+
user_name: 'foo',
|
695
|
+
display_name: 'FOO',
|
696
|
+
email: 'foo@bar.com',
|
697
|
+
pager: '0000',
|
698
|
+
groups: ['icingaadmins']
|
699
|
+
)
|
700
|
+
expect(h).to be_a(Hash)
|
701
|
+
status_code = h['code']
|
702
|
+
expect(status_code).to be == 500
|
703
|
+
end
|
704
|
+
|
705
|
+
it 'list named users' do
|
706
|
+
h = @icinga2.users('foo')
|
707
|
+
expect(h).to be_a(Array)
|
708
|
+
expect(h.count).to be == 1
|
709
|
+
end
|
710
|
+
|
711
|
+
it 'delete user' do
|
712
|
+
h = @icinga2.delete_user('foo')
|
713
|
+
|
714
|
+
expect(h).to be_a(Hash)
|
715
|
+
status_code = h['code']
|
716
|
+
expect(status_code).to be == 200
|
717
|
+
end
|
718
|
+
|
719
|
+
it 'delete user (again)' do
|
720
|
+
h = @icinga2.delete_user('foo')
|
721
|
+
|
722
|
+
expect(h).to be_a(Hash)
|
723
|
+
status_code = h['code']
|
724
|
+
expect(status_code).to be == 404
|
725
|
+
end
|
726
|
+
end
|
727
|
+
|
728
|
+
describe 'Module Usergroups' do
|
729
|
+
|
730
|
+
it 'list all usergroups' do
|
731
|
+
h = @icinga2.usergroups
|
732
|
+
expect(h).to be_a(Array)
|
733
|
+
expect(h.count).to be >= 1
|
734
|
+
end
|
735
|
+
|
736
|
+
it 'list named usergroup' do
|
737
|
+
h = @icinga2.usergroups('icingaadmins')
|
738
|
+
expect(h).to be_a(Array)
|
739
|
+
expect(h.count).to be == 1
|
740
|
+
end
|
741
|
+
|
742
|
+
it 'exists usergroup' do
|
743
|
+
expect(@icinga2.exists_usergroup?('icingaadmins')).to be_truthy
|
744
|
+
end
|
745
|
+
|
746
|
+
it 'exists usergroup' do
|
747
|
+
expect(@icinga2.exists_usergroup?('linux-admin')).to be_falsey
|
748
|
+
end
|
749
|
+
|
750
|
+
it 'add usergroup' do
|
751
|
+
h = @icinga2.add_usergroup(user_group: 'foo', display_name: 'FOO' )
|
752
|
+
expect(h).to be_a(Hash)
|
753
|
+
status_code = h['code']
|
754
|
+
expect(status_code).to be == 200
|
755
|
+
end
|
756
|
+
|
757
|
+
it 'add usergroup (again)' do
|
758
|
+
h = @icinga2.add_usergroup(user_group: 'foo', display_name: 'FOO' )
|
759
|
+
expect(h).to be_a(Hash)
|
760
|
+
status_code = h['code']
|
761
|
+
expect(status_code).to be == 500
|
762
|
+
end
|
763
|
+
|
764
|
+
it 'list named usergroup' do
|
765
|
+
h = @icinga2.usergroups( 'foo' )
|
766
|
+
expect(h).to be_a(Array)
|
767
|
+
expect(h.count).to be >= 1
|
768
|
+
end
|
769
|
+
|
770
|
+
it 'delete usergroup' do
|
771
|
+
h = @icinga2.delete_usergroup( 'foo' )
|
772
|
+
|
773
|
+
expect(h).to be_a(Hash)
|
774
|
+
status_code = h['code']
|
775
|
+
expect(status_code).to be == 200
|
776
|
+
end
|
777
|
+
|
778
|
+
it 'delete usergroup (again)' do
|
779
|
+
h = @icinga2.delete_usergroup('foo')
|
780
|
+
|
781
|
+
expect(h).to be_a(Hash)
|
782
|
+
status_code = h['code']
|
783
|
+
expect(status_code).to be == 404
|
784
|
+
end
|
785
|
+
end
|
786
|
+
|
787
|
+
describe 'Module Downtimes' do
|
788
|
+
|
789
|
+
it "add downtime 'test'" do
|
790
|
+
|
791
|
+
h = @icinga2.add_downtime(
|
792
|
+
type: 'service',
|
793
|
+
host_name: 'c1-mysql-1',
|
794
|
+
comment: 'test downtime',
|
795
|
+
author: 'icingaadmin',
|
796
|
+
start_time: Time.now.to_i,
|
797
|
+
end_time: Time.now.to_i + 240
|
798
|
+
)
|
799
|
+
status_code = h['code']
|
800
|
+
expect(h).to be_a(Hash)
|
801
|
+
expect(status_code).to be == 200
|
802
|
+
end
|
803
|
+
|
804
|
+
it 'list downtimes' do
|
805
|
+
h = @icinga2.downtimes
|
806
|
+
expect(h).to be_a(Array)
|
807
|
+
expect(h.count).to be >= 1
|
808
|
+
end
|
809
|
+
|
810
|
+
it 'remove_downtime' do
|
811
|
+
h = @icinga2.remove_downtime(
|
812
|
+
filter: '"host.name == filterHost && !service && downtime.author == filterAuthor"',
|
813
|
+
filter_vars: { filterHost: 'c1-mysql-1', filterAuthor: 'icingaadmin' }
|
814
|
+
)
|
815
|
+
expect(h).to be_a(Hash)
|
816
|
+
status_code = h['code']
|
817
|
+
expect(status_code).to be == 200
|
818
|
+
end
|
819
|
+
|
820
|
+
|
821
|
+
end
|
822
|
+
|
823
|
+
describe 'Configuration Management' do
|
824
|
+
|
825
|
+
it 'create config package \'cfg_spec-test\' - (successful)' do
|
826
|
+
r = @icinga2.create_config_package('cfg_spec-test')
|
827
|
+
expect(r).to be_a(Hash)
|
828
|
+
status_code = r['code']
|
829
|
+
expect(status_code).to be_a(Integer)
|
830
|
+
expect(status_code).to be == 200
|
831
|
+
end
|
832
|
+
|
833
|
+
it 'create config package \'cfg_spec-test\' - (failed)' do
|
834
|
+
r = @icinga2.create_config_package('_cfg_spec-test')
|
835
|
+
expect(r).to be_a(Hash)
|
836
|
+
status_code = r['code']
|
837
|
+
expect(status_code).to be_a(Integer)
|
838
|
+
expect(status_code).to be == 404
|
839
|
+
end
|
840
|
+
|
841
|
+
it 'list config package' do
|
842
|
+
r = @icinga2.list_config_packages
|
843
|
+
|
844
|
+
expect(r).to be_a(Hash)
|
845
|
+
code = r['code']
|
846
|
+
results = r['results']
|
847
|
+
expect(code).to be_a(Integer)
|
848
|
+
expect(code).to be == 200
|
849
|
+
expect(results).to be_a(Array)
|
850
|
+
expect(results.count).to be >= 1
|
851
|
+
end
|
852
|
+
|
853
|
+
it 'upload local config package' do
|
854
|
+
|
855
|
+
params = {
|
856
|
+
package: 'cfg_spec-test',
|
857
|
+
name: 'host1.conf',
|
858
|
+
cluster: false,
|
859
|
+
vars: 'object Host "cmdb-host" { chec_command = "dummy" }',
|
860
|
+
reload: false
|
861
|
+
}
|
862
|
+
|
863
|
+
r = @icinga2.upload_config_package(params)
|
864
|
+
code = r['code']
|
865
|
+
status = r['status']
|
866
|
+
expect(code).to be_a(Integer)
|
867
|
+
expect(code).to be == 200
|
868
|
+
expect(status).to be_a(String)
|
869
|
+
end
|
870
|
+
|
871
|
+
it 'fetch local config stages' do
|
872
|
+
|
873
|
+
packages = @icinga2.list_config_packages
|
874
|
+
stages = packages['results']
|
875
|
+
data = stages.select { |k,_v| k['name'] == 'cfg_spec-test' }
|
876
|
+
stages = data.first['stages']
|
877
|
+
|
878
|
+
params = {
|
879
|
+
package: 'cfg_spec-test',
|
880
|
+
stage: stages.last,
|
881
|
+
name: 'host1',
|
882
|
+
cluster: false
|
883
|
+
}
|
884
|
+
r = @icinga2.fetch_config_stages(params)
|
885
|
+
expect(r).to be_a(String)
|
886
|
+
end
|
887
|
+
|
888
|
+
it 'upload cluser config package' do
|
889
|
+
|
890
|
+
params = {
|
891
|
+
package: 'cfg_spec-test',
|
892
|
+
name: 'host2',
|
893
|
+
cluster: true,
|
894
|
+
vars: 'object Host "satellite-host" { address = "192.168.1.100", check_command = "hostalive" }',
|
895
|
+
reload: false
|
896
|
+
}
|
897
|
+
|
898
|
+
r = @icinga2.upload_config_package(params)
|
899
|
+
code = r['code']
|
900
|
+
status = r['status']
|
901
|
+
expect(code).to be_a(Integer)
|
902
|
+
expect(code).to be == 200
|
903
|
+
expect(status).to be_a(String)
|
904
|
+
end
|
905
|
+
|
906
|
+
it 'list config stages' do
|
907
|
+
|
908
|
+
packages = @icinga2.list_config_packages
|
909
|
+
stages = packages['results']
|
910
|
+
data = stages.select { |k,_v| k['name'] == 'cfg_spec-test' }
|
911
|
+
stages = data.first['stages']
|
912
|
+
|
913
|
+
params = {
|
914
|
+
package: 'cfg_spec-test',
|
915
|
+
stage: stages.last
|
916
|
+
}
|
917
|
+
|
918
|
+
r = @icinga2.list_config_stages(params)
|
919
|
+
|
920
|
+
expect(r).to be_a(Hash)
|
921
|
+
code = r['code']
|
922
|
+
results = r['results']
|
923
|
+
expect(code).to be_a(Integer)
|
924
|
+
expect(code).to be == 200
|
925
|
+
expect(results).to be_a(Array)
|
926
|
+
end
|
927
|
+
|
928
|
+
it 'package stage errors' do
|
929
|
+
packages = @icinga2.list_config_packages
|
930
|
+
stages = packages['results']
|
931
|
+
data = stages.select { |k,_v| k['name'] == 'cfg_spec-test' }
|
932
|
+
stages = data.first['stages']
|
933
|
+
|
934
|
+
params = {
|
935
|
+
package: 'cfg_spec-test',
|
936
|
+
stage: stages.first,
|
937
|
+
cluster: true
|
938
|
+
}
|
939
|
+
|
940
|
+
r = @icinga2.package_stage_errors(params)
|
941
|
+
expect(r).to be_a(String)
|
942
|
+
end
|
943
|
+
|
944
|
+
it 'fetch cluster config stages' do
|
945
|
+
|
946
|
+
packages = @icinga2.list_config_packages
|
947
|
+
stages = packages['results']
|
948
|
+
data = stages.select { |k,_v| k['name'] == 'cfg_spec-test' }
|
949
|
+
stages = data.first['stages']
|
950
|
+
|
951
|
+
params = {
|
952
|
+
package: 'cfg_spec-test',
|
953
|
+
stage: stages.last,
|
954
|
+
name: 'host2',
|
955
|
+
cluster: true
|
956
|
+
}
|
957
|
+
|
958
|
+
r = @icinga2.fetch_config_stages(params)
|
959
|
+
expect(r).to be_a(String)
|
960
|
+
end
|
961
|
+
|
962
|
+
it 'remove config stage' do
|
963
|
+
|
964
|
+
packages = @icinga2.list_config_packages
|
965
|
+
stages = packages['results']
|
966
|
+
data = stages.select { |k,_v| k['name'] == 'cfg_spec-test' }
|
967
|
+
stages = data.first['stages']
|
968
|
+
|
969
|
+
params = {
|
970
|
+
package: 'cfg_spec-test',
|
971
|
+
stage: stages.last
|
972
|
+
}
|
973
|
+
|
974
|
+
r = @icinga2.remove_config_stage(params)
|
975
|
+
expect(r).to be_a(Hash)
|
976
|
+
code = r['code']
|
977
|
+
status = r['status']
|
978
|
+
expect(code).to be_a(Integer)
|
979
|
+
expect(code).to be == 200
|
980
|
+
expect(status).to be_a(String)
|
981
|
+
end
|
982
|
+
|
983
|
+
it 'remove config package' do
|
984
|
+
r = @icinga2.remove_config_package( 'cfg_spec-test' )
|
985
|
+
expect(r).to be_a(Hash)
|
986
|
+
code = r['code']
|
987
|
+
status = r['status']
|
988
|
+
expect(code).to be_a(Integer)
|
989
|
+
expect(code).to be == 200
|
990
|
+
expect(status).to be_a(String)
|
991
|
+
end
|
992
|
+
end
|
993
|
+
|
994
|
+
|
995
|
+
describe 'Actions' do
|
996
|
+
|
997
|
+
it 'restart process' do
|
998
|
+
r = @icinga2.restart_process
|
999
|
+
expect(r).to be_a(Hash)
|
1000
|
+
code = r['code']
|
1001
|
+
expect(code).to be == 200
|
1002
|
+
end
|
1003
|
+
|
1004
|
+
it 'shutdown process' do
|
1005
|
+
r = @icinga2.shutdown_process
|
1006
|
+
expect(r).to be_a(Hash)
|
1007
|
+
code = r['code']
|
1008
|
+
expect(code).to be == 200
|
1009
|
+
end
|
1010
|
+
end
|
1011
|
+
|
1012
|
+
|
1013
|
+
end
|