zabbixapi 4.2.0 → 5.0.0.pre.alpha1
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 +27 -11
- data/lib/zabbixapi.rb +12 -0
- data/lib/zabbixapi/basic/basic_alias.rb +2 -2
- data/lib/zabbixapi/basic/basic_init.rb +5 -5
- data/lib/zabbixapi/basic/basic_logic.rb +16 -16
- data/lib/zabbixapi/classes/actions.rb +25 -1
- data/lib/zabbixapi/classes/applications.rb +1 -1
- data/lib/zabbixapi/classes/configurations.rb +1 -1
- data/lib/zabbixapi/classes/drules.rb +1 -1
- data/lib/zabbixapi/classes/events.rb +1 -1
- data/lib/zabbixapi/classes/graphs.rb +4 -4
- data/lib/zabbixapi/classes/hostgroups.rb +1 -1
- data/lib/zabbixapi/classes/hosts.rb +2 -2
- data/lib/zabbixapi/classes/httptests.rb +1 -1
- data/lib/zabbixapi/classes/items.rb +1 -1
- data/lib/zabbixapi/classes/maintenance.rb +1 -1
- data/lib/zabbixapi/classes/mediatypes.rb +78 -3
- data/lib/zabbixapi/classes/problems.rb +101 -0
- data/lib/zabbixapi/classes/proxies.rb +1 -1
- data/lib/zabbixapi/classes/roles.rb +114 -0
- data/lib/zabbixapi/classes/screens.rb +1 -1
- data/lib/zabbixapi/classes/scripts.rb +1 -1
- data/lib/zabbixapi/classes/templates.rb +1 -1
- data/lib/zabbixapi/classes/triggers.rb +2 -2
- data/lib/zabbixapi/classes/unusable.rb +1 -1
- data/lib/zabbixapi/classes/usergroups.rb +1 -1
- data/lib/zabbixapi/classes/usermacros.rb +15 -15
- data/lib/zabbixapi/classes/users.rb +1 -1
- data/lib/zabbixapi/classes/valuemaps.rb +1 -1
- data/lib/zabbixapi/client.rb +6 -2
- data/lib/zabbixapi/version.rb +1 -1
- metadata +7 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 872ce78b417080b9ad0affdf398753332f6c88fb3cfac7b5db991413711e2b65
|
4
|
+
data.tar.gz: 077a81ef6f1d562091f61ab58b973192f12b4d1579c9683d8421779c907e6e33
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c818c7285117d51cc70dc770ba43c75ae5c8cab4ded5e553b2ffcb5a1256b1578da4720faeec57cdc086c02dbc152ccc540c620aba27b02a0426ed0eefedd289
|
7
|
+
data.tar.gz: ba45247a6463b805aa8fbcd3c1bf8ec2d9531e6a3e5db9bf82805ba29fc9c6a972bf8a0f8cb8f063c69b7429337bd89b1a7fe30d9e0054cbd73e1ca64ff7ada3
|
data/README.md
CHANGED
@@ -1,15 +1,21 @@
|
|
1
1
|
# Ruby Zabbix Api Module
|
2
2
|
|
3
3
|
[][gem]
|
4
|
-
[][github-ci]
|
5
5
|
|
6
6
|
[gem]: https://rubygems.org/gems/zabbixapi
|
7
|
-
[
|
7
|
+
[github-ci]: https://github.com/express42/zabbixapi/actions?query=workflow%3ACI
|
8
8
|
|
9
9
|
Simple and lightweight ruby module for working with [Zabbix][Zabbix] via the [Zabbix API][Zabbix API]
|
10
10
|
|
11
11
|
## Installation
|
12
|
-
|
12
|
+
```sh
|
13
|
+
# latest
|
14
|
+
gem install zabbixapi
|
15
|
+
|
16
|
+
# specific version
|
17
|
+
gem install zabbixapi -v 4.2.0
|
18
|
+
```
|
13
19
|
|
14
20
|
## Documentation
|
15
21
|
[http://rdoc.info/gems/zabbixapi][documentation]
|
@@ -22,7 +28,10 @@ Simple and lightweight ruby module for working with [Zabbix][Zabbix] via the [Za
|
|
22
28
|
[examples]: https://github.com/express42/zabbixapi/tree/master/examples
|
23
29
|
|
24
30
|
## Version Policy
|
25
|
-
|
31
|
+
|
32
|
+
**NOTE:** `master` branch is used for ongoing development on Zabbix API 5.x (5.0 and 5.2).
|
33
|
+
|
34
|
+
We support only two last versions of zabbix (5.0 and 5.2), so you should consider all previous versions deprecated.
|
26
35
|
|
27
36
|
* Zabbix 1.8.2 (api version 1.2) | zabbixapi 0.6.x | [branch zabbix1.8](https://github.com/express42/zabbixapi/tree/zabbix1.8)
|
28
37
|
* Zabbix 1.8.9 (api version 1.3) | zabbixapi 0.6.x | [branch zabbix1.8](https://github.com/express42/zabbixapi/tree/zabbix1.8)
|
@@ -30,15 +39,18 @@ We support only two last versions of zabbix (4.0 and 4.2), so you should conside
|
|
30
39
|
* Zabbix 2.2.x (api version 2.2.x) | zabbixapi 2.2.x | [branch zabbix2.2](https://github.com/express42/zabbixapi/tree/zabbix2.2)
|
31
40
|
* Zabbix 2.4.x (api version 2.2.x) | zabbixapi 2.4.x | [branch zabbix2.4](https://github.com/express42/zabbixapi/tree/zabbix2.4)
|
32
41
|
* Zabbix 3.0.x (api version 3.0.x) | zabbixapi 3.0.x | [branch zabbix3.0](https://github.com/express42/zabbixapi/tree/zabbix3.0)
|
33
|
-
* Zabbix 3.2.x (api version 3.2.x) | zabbixapi 3.
|
42
|
+
* Zabbix 3.2.x (api version 3.2.x) | zabbixapi 3.2.x | [branch zabbix3.2](https://github.com/express42/zabbixapi/tree/zabbix3.2)
|
43
|
+
* Zabbix 4.0.x (api version 4.0.x) | zabbixapi 4.1.x | [branch zabbix4.0](https://github.com/express42/zabbixapi/tree/zabbix4.0)
|
44
|
+
* Zabbix 4.2.x (api version 4.2.x) | zabbixapi 4.1.x | [branch zabbix4.0](https://github.com/express42/zabbixapi/tree/zabbix4.0)
|
45
|
+
* Zabbix 4.4.x (api version 4.4.x) | zabbixapi 4.2.x | [branch zabbix4.2](https://github.com/express42/zabbixapi/tree/zabbix4.2)
|
34
46
|
|
35
47
|
## Supported Ruby Versions
|
36
|
-
This library aims to support and is [tested against][
|
48
|
+
This library aims to support and is [tested against][github-ci] the following Ruby
|
37
49
|
versions:
|
38
50
|
|
39
|
-
* Ruby 2.4
|
40
51
|
* Ruby 2.5
|
41
52
|
* Ruby 2.6
|
53
|
+
* Ruby 2.7
|
42
54
|
* JRuby 9.2.10.0
|
43
55
|
|
44
56
|
If something doesn't work on one of these versions, it's a bug.
|
@@ -62,6 +74,7 @@ dropped.
|
|
62
74
|
## Contributing
|
63
75
|
|
64
76
|
* Fork the project.
|
77
|
+
* Base your work on the master branch.
|
65
78
|
* Make your feature addition or bug fix, write tests, write documentation/examples.
|
66
79
|
* Commit, do not mess with rakefile, version.
|
67
80
|
* Make a pull request.
|
@@ -72,11 +85,14 @@ dropped.
|
|
72
85
|
* [Zabbix API docs][Zabbix API]
|
73
86
|
|
74
87
|
[Zabbix]: https://www.zabbix.com
|
75
|
-
[Zabbix API]: https://www.zabbix.com/documentation/
|
88
|
+
[Zabbix API]: https://www.zabbix.com/documentation/5.2/manual/api
|
76
89
|
|
77
90
|
## Copyright
|
78
|
-
Copyright (c) 2015-2018 Express 42
|
79
91
|
|
80
|
-
|
92
|
+
- Copyright (c) 2021 [contributors]
|
93
|
+
- Copyright (c) 2015-2018 Express 42 and [contributors]
|
94
|
+
|
95
|
+
See [LICENSE] for details.
|
81
96
|
|
82
|
-
[
|
97
|
+
[LICENSE]: LICENSE.md
|
98
|
+
[contributors]: https://github.com/express42/zabbixapi/graphs/contributors
|
data/lib/zabbixapi.rb
CHANGED
@@ -19,6 +19,8 @@ require 'zabbixapi/classes/items'
|
|
19
19
|
require 'zabbixapi/classes/maintenance'
|
20
20
|
require 'zabbixapi/classes/mediatypes'
|
21
21
|
require 'zabbixapi/classes/proxies'
|
22
|
+
require 'zabbixapi/classes/problems'
|
23
|
+
require 'zabbixapi/classes/roles'
|
22
24
|
require 'zabbixapi/classes/screens'
|
23
25
|
require 'zabbixapi/classes/scripts'
|
24
26
|
require 'zabbixapi/classes/server'
|
@@ -125,11 +127,21 @@ class ZabbixApi
|
|
125
127
|
@mediatypes ||= Mediatypes.new(@client)
|
126
128
|
end
|
127
129
|
|
130
|
+
# @return [ZabbixApi::Problems]
|
131
|
+
def problems
|
132
|
+
@problems ||= Problems.new(@client)
|
133
|
+
end
|
134
|
+
|
128
135
|
# @return [ZabbixApi::Proxies]
|
129
136
|
def proxies
|
130
137
|
@proxies ||= Proxies.new(@client)
|
131
138
|
end
|
132
139
|
|
140
|
+
# @return [ZabbixApi::Roles]
|
141
|
+
def roles
|
142
|
+
@roles ||= Roles.new(@client)
|
143
|
+
end
|
144
|
+
|
133
145
|
# @return [ZabbixApi::Screens]
|
134
146
|
def screens
|
135
147
|
@screens ||= Screens.new(@client)
|
@@ -2,7 +2,7 @@ class ZabbixApi
|
|
2
2
|
class Basic
|
3
3
|
# Get Zabbix object data from API by id
|
4
4
|
#
|
5
|
-
# @param data [Hash] Should include object's id field name (
|
5
|
+
# @param data [Hash] Should include object's id field name (identify) and id value
|
6
6
|
# @raise [ApiError] Error returned when there is a problem with the Zabbix API call.
|
7
7
|
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
8
8
|
# @return [Hash]
|
@@ -23,7 +23,7 @@ class ZabbixApi
|
|
23
23
|
|
24
24
|
# Destroy Zabbix object using API delete
|
25
25
|
#
|
26
|
-
# @param data [Hash] Should include object's id field name (
|
26
|
+
# @param data [Hash] Should include object's id field name (identify) and id value
|
27
27
|
# @raise [ApiError] Error returned when there is a problem with the Zabbix API call.
|
28
28
|
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
29
29
|
# @return [Integer] The object id if a single object is deleted
|
@@ -22,14 +22,14 @@ class ZabbixApi
|
|
22
22
|
{}
|
23
23
|
end
|
24
24
|
|
25
|
-
# Returns the object's plural id field name (
|
25
|
+
# Returns the object's plural id field name (identify) based on key
|
26
26
|
#
|
27
27
|
# @return [String]
|
28
28
|
def keys
|
29
29
|
key + 's'
|
30
30
|
end
|
31
31
|
|
32
|
-
# Returns the object's id field name (
|
32
|
+
# Returns the object's id field name (identify) based on method_name + id
|
33
33
|
#
|
34
34
|
# @return [String]
|
35
35
|
def key
|
@@ -38,9 +38,9 @@ class ZabbixApi
|
|
38
38
|
|
39
39
|
# Placeholder for inherited objects to provide object-specific id field name
|
40
40
|
#
|
41
|
-
# @raise [ApiError] Basic object does not directly support
|
42
|
-
def
|
43
|
-
raise ApiError.new("Can't call
|
41
|
+
# @raise [ApiError] Basic object does not directly support identify
|
42
|
+
def identify
|
43
|
+
raise ApiError.new("Can't call identify here")
|
44
44
|
end
|
45
45
|
end
|
46
46
|
end
|
@@ -18,7 +18,7 @@ class ZabbixApi
|
|
18
18
|
|
19
19
|
# Delete Zabbix object using API
|
20
20
|
#
|
21
|
-
# @param data [Hash] Should include object's id field name (
|
21
|
+
# @param data [Hash] Should include object's id field name (identify) and id value
|
22
22
|
# @raise [ApiError] Error returned when there is a problem with the Zabbix API call.
|
23
23
|
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
24
24
|
# @return [Integer] The object id if a single object is deleted
|
@@ -33,7 +33,7 @@ class ZabbixApi
|
|
33
33
|
|
34
34
|
# Create or update Zabbix object using API
|
35
35
|
#
|
36
|
-
# @param data [Hash] Should include object's id field name (
|
36
|
+
# @param data [Hash] Should include object's id field name (identify) and id value
|
37
37
|
# @raise [ApiError] Error returned when there is a problem with the Zabbix API call.
|
38
38
|
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
39
39
|
# @return [Integer] The object id if a single object is created
|
@@ -41,13 +41,13 @@ class ZabbixApi
|
|
41
41
|
def create_or_update(data)
|
42
42
|
log "[DEBUG] Call create_or_update with parameters: #{data.inspect}"
|
43
43
|
|
44
|
-
id = get_id(
|
44
|
+
id = get_id(identify.to_sym => data[identify.to_sym])
|
45
45
|
id ? update(data.merge(key.to_sym => id.to_s)) : create(data)
|
46
46
|
end
|
47
47
|
|
48
48
|
# Update Zabbix object using API
|
49
49
|
#
|
50
|
-
# @param data [Hash] Should include object's id field name (
|
50
|
+
# @param data [Hash] Should include object's id field name (identify) and id value
|
51
51
|
# @param force [Boolean] Whether to force an object update even if provided data matches Zabbix
|
52
52
|
# @raise [ApiError] Error returned when there is a problem with the Zabbix API call.
|
53
53
|
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
@@ -71,7 +71,7 @@ class ZabbixApi
|
|
71
71
|
|
72
72
|
# Get full/extended Zabbix object data from API
|
73
73
|
#
|
74
|
-
# @param data [Hash] Should include object's id field name (
|
74
|
+
# @param data [Hash] Should include object's id field name (identify) and id value
|
75
75
|
# @raise [ApiError] Error returned when there is a problem with the Zabbix API call.
|
76
76
|
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
77
77
|
# @return [Hash]
|
@@ -82,7 +82,7 @@ class ZabbixApi
|
|
82
82
|
method: "#{method_name}.get",
|
83
83
|
params: {
|
84
84
|
filter: {
|
85
|
-
|
85
|
+
identify.to_sym => data[identify.to_sym]
|
86
86
|
},
|
87
87
|
output: 'extend'
|
88
88
|
}
|
@@ -132,7 +132,7 @@ class ZabbixApi
|
|
132
132
|
def all
|
133
133
|
result = {}
|
134
134
|
@client.api_request(method: "#{method_name}.get", params: { output: 'extend' }).each do |item|
|
135
|
-
result[item[
|
135
|
+
result[item[identify]] = item[key]
|
136
136
|
end
|
137
137
|
result
|
138
138
|
end
|
@@ -140,39 +140,39 @@ class ZabbixApi
|
|
140
140
|
# Get Zabbix object id from API based on provided data
|
141
141
|
#
|
142
142
|
# @param data [Hash]
|
143
|
-
# @raise [ApiError] Error returned when there is a problem with the Zabbix API call or missing object's id field name (
|
143
|
+
# @raise [ApiError] Error returned when there is a problem with the Zabbix API call or missing object's id field name (identify).
|
144
144
|
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
145
145
|
# @return [Integer] Zabbix object id
|
146
146
|
def get_id(data)
|
147
147
|
log "[DEBUG] Call get_id with parameters: #{data.inspect}"
|
148
148
|
# symbolize keys if the user used string keys instead of symbols
|
149
|
-
data = symbolize_keys(data) if data.key?(
|
150
|
-
# raise an error if
|
151
|
-
name = data[
|
152
|
-
raise ApiError.new("#{
|
149
|
+
data = symbolize_keys(data) if data.key?(identify)
|
150
|
+
# raise an error if identify name was not supplied
|
151
|
+
name = data[identify.to_sym]
|
152
|
+
raise ApiError.new("#{identify} not supplied in call to get_id") if name.nil?
|
153
153
|
|
154
154
|
result = @client.api_request(
|
155
155
|
method: "#{method_name}.get",
|
156
156
|
params: {
|
157
157
|
filter: data,
|
158
|
-
output: [key,
|
158
|
+
output: [key, identify]
|
159
159
|
}
|
160
160
|
)
|
161
161
|
id = nil
|
162
|
-
result.each { |item| id = item[key].to_i if item[
|
162
|
+
result.each { |item| id = item[key].to_i if item[identify] == data[identify.to_sym] }
|
163
163
|
id
|
164
164
|
end
|
165
165
|
|
166
166
|
# Get or Create Zabbix object using API
|
167
167
|
#
|
168
|
-
# @param data [Hash] Should include object's id field name (
|
168
|
+
# @param data [Hash] Should include object's id field name (identify) and id value
|
169
169
|
# @raise [ApiError] Error returned when there is a problem with the Zabbix API call.
|
170
170
|
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
171
171
|
# @return [Integer] Zabbix object id
|
172
172
|
def get_or_create(data)
|
173
173
|
log "[DEBUG] Call get_or_create with parameters: #{data.inspect}"
|
174
174
|
|
175
|
-
unless (id = get_id(
|
175
|
+
unless (id = get_id(identify.to_sym => data[identify.to_sym]))
|
176
176
|
id = create(data)
|
177
177
|
end
|
178
178
|
id
|
@@ -10,8 +10,32 @@ class ZabbixApi
|
|
10
10
|
# The id field name used for identifying specific Action objects via Zabbix API
|
11
11
|
#
|
12
12
|
# @return [String]
|
13
|
-
def
|
13
|
+
def identify
|
14
14
|
'name'
|
15
15
|
end
|
16
|
+
|
17
|
+
# Get full/extended Action object data from API
|
18
|
+
#
|
19
|
+
# @param data [Hash] Should include object's id field name (identify) and id value
|
20
|
+
# @raise [ApiError] Error returned when there is a problem with the Zabbix API call.
|
21
|
+
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
22
|
+
# @return [Hash]
|
23
|
+
def get_full_data(data)
|
24
|
+
log "[DEBUG] Call get_full_data with parameters: #{data.inspect}"
|
25
|
+
|
26
|
+
@client.api_request(
|
27
|
+
method: "#{method_name}.get",
|
28
|
+
params: {
|
29
|
+
filter: {
|
30
|
+
identify.to_sym => data[identify.to_sym]
|
31
|
+
},
|
32
|
+
output: 'extend',
|
33
|
+
selectOperations: "extend",
|
34
|
+
selectRecoveryOperations: "extend",
|
35
|
+
selectAcknowledgeOperations: "extend",
|
36
|
+
selectFilter: "extend",
|
37
|
+
}
|
38
|
+
)
|
39
|
+
end
|
16
40
|
end
|
17
41
|
end
|
@@ -10,24 +10,24 @@ class ZabbixApi
|
|
10
10
|
# The id field name used for identifying specific Graph objects via Zabbix API
|
11
11
|
#
|
12
12
|
# @return [String]
|
13
|
-
def
|
13
|
+
def identify
|
14
14
|
'name'
|
15
15
|
end
|
16
16
|
|
17
17
|
# Get full/extended Graph data from Zabbix API
|
18
18
|
#
|
19
|
-
# @param data [Hash] Should include object's id field name (
|
19
|
+
# @param data [Hash] Should include object's id field name (identify) and id value
|
20
20
|
# @raise [ApiError] Error returned when there is a problem with the Zabbix API call.
|
21
21
|
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
22
22
|
# @return [Hash]
|
23
23
|
def get_full_data(data)
|
24
|
-
log "[DEBUG] Call get_full_data with
|
24
|
+
log "[DEBUG] Call get_full_data with parameters: #{data.inspect}"
|
25
25
|
|
26
26
|
@client.api_request(
|
27
27
|
method: "#{method_name}.get",
|
28
28
|
params: {
|
29
29
|
search: {
|
30
|
-
|
30
|
+
identify.to_sym => data[identify.to_sym]
|
31
31
|
},
|
32
32
|
output: 'extend'
|
33
33
|
}
|
@@ -10,7 +10,7 @@ class ZabbixApi
|
|
10
10
|
# The id field name used for identifying specific Host objects via Zabbix API
|
11
11
|
#
|
12
12
|
# @return [String]
|
13
|
-
def
|
13
|
+
def identify
|
14
14
|
'host'
|
15
15
|
end
|
16
16
|
|
@@ -21,7 +21,7 @@ class ZabbixApi
|
|
21
21
|
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
22
22
|
# @return [Hash]
|
23
23
|
def dump_by_id(data)
|
24
|
-
log "[DEBUG] Call dump_by_id with
|
24
|
+
log "[DEBUG] Call dump_by_id with parameters: #{data.inspect}"
|
25
25
|
|
26
26
|
@client.api_request(
|
27
27
|
method: 'host.get',
|
@@ -10,8 +10,8 @@ class ZabbixApi
|
|
10
10
|
# The id field name used for identifying specific MediaType objects via Zabbix API
|
11
11
|
#
|
12
12
|
# @return [String]
|
13
|
-
def
|
14
|
-
'
|
13
|
+
def identify
|
14
|
+
'name'
|
15
15
|
end
|
16
16
|
|
17
17
|
# The default options used when creating MediaType objects via Zabbix API
|
@@ -19,7 +19,8 @@ class ZabbixApi
|
|
19
19
|
# @return [Hash]
|
20
20
|
def default_options
|
21
21
|
{
|
22
|
-
|
22
|
+
name: '', # Name
|
23
|
+
description: '', # Description
|
23
24
|
type: 0, # 0 - Email, 1 - External script, 2 - SMS, 3 - Jabber, 100 - EzTexting
|
24
25
|
smtp_server: '',
|
25
26
|
smtp_helo: '',
|
@@ -30,5 +31,79 @@ class ZabbixApi
|
|
30
31
|
passwd: '' # Jabber password used by Zabbix server
|
31
32
|
}
|
32
33
|
end
|
34
|
+
|
35
|
+
# def log(message)
|
36
|
+
# STDERR.puts
|
37
|
+
# STDERR.puts message.to_s
|
38
|
+
# STDERR.puts
|
39
|
+
# end
|
40
|
+
|
41
|
+
# Update MediaType object using API
|
42
|
+
#
|
43
|
+
# @param data [Hash] Should include object's id field name (identify) and id value
|
44
|
+
# @param force [Boolean] Whether to force an object update even if provided data matches Zabbix
|
45
|
+
# @raise [ApiError] Error returned when there is a problem with the Zabbix API call.
|
46
|
+
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
47
|
+
# @return [Integer] The object id if a single object is created
|
48
|
+
# @return [Boolean] True/False if multiple objects are created
|
49
|
+
def update(data, force = false)
|
50
|
+
log "[DEBUG] Call update with parameters: #{data.inspect}"
|
51
|
+
if data[key.to_sym].nil?
|
52
|
+
data[key.to_sym] = get_id(data)
|
53
|
+
log "[DEBUG] Enriched data with id: #{data.inspect}"
|
54
|
+
end
|
55
|
+
dump = {}
|
56
|
+
dump_by_id(key.to_sym => data[key.to_sym]).each do |item|
|
57
|
+
dump = symbolize_keys(item) if item[key].to_i == data[key.to_sym].to_i
|
58
|
+
end
|
59
|
+
if hash_equals?(dump, data) && !force
|
60
|
+
log "[DEBUG] Equal keys #{dump} and #{data}, skip update"
|
61
|
+
data[key.to_sym].to_i
|
62
|
+
else
|
63
|
+
data_update = [data]
|
64
|
+
result = @client.api_request(method: "#{method_name}.update", params: data_update)
|
65
|
+
parse_keys result
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
# Get MediaType object id from API based on provided data
|
70
|
+
#
|
71
|
+
# @param data [Hash]
|
72
|
+
# @raise [ApiError] Error returned when there is a problem with the Zabbix API call or missing object's id field name (identify).
|
73
|
+
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
74
|
+
# @return [Integer] Zabbix object id
|
75
|
+
def get_id(data)
|
76
|
+
log "[DEBUG] Call get_id with parameters: #{data.inspect}"
|
77
|
+
# symbolize keys if the user used string keys instead of symbols
|
78
|
+
data = symbolize_keys(data) if data.key?(identify)
|
79
|
+
# raise an error if identify name was not supplied
|
80
|
+
name = data[identify.to_sym]
|
81
|
+
raise ApiError.new("#{identify} not supplied in call to get_id, #{data} (#{method_name})") if name.nil?
|
82
|
+
|
83
|
+
result = @client.api_request(
|
84
|
+
method: "#{method_name}.get",
|
85
|
+
params: {
|
86
|
+
filter: {name: name},
|
87
|
+
output: [key, identify]
|
88
|
+
}
|
89
|
+
)
|
90
|
+
id = nil
|
91
|
+
result.each { |item| id = item[key].to_i if item[identify] == data[identify.to_sym] }
|
92
|
+
id
|
93
|
+
end
|
94
|
+
|
95
|
+
# Create or update MediaType object using API
|
96
|
+
#
|
97
|
+
# @param data [Hash] Should include object's id field name (identify) and id value
|
98
|
+
# @raise [ApiError] Error returned when there is a problem with the Zabbix API call.
|
99
|
+
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
100
|
+
# @return [Integer] The object id if a single object is created
|
101
|
+
# @return [Boolean] True/False if multiple objects are created
|
102
|
+
def create_or_update(data)
|
103
|
+
log "[DEBUG] Call create_or_update with parameters: #{data.inspect}"
|
104
|
+
|
105
|
+
id = get_id(identify.to_sym => data[identify.to_sym])
|
106
|
+
id ? update(data.merge(key.to_sym => id.to_s)) : create(data)
|
107
|
+
end
|
33
108
|
end
|
34
109
|
end
|
@@ -0,0 +1,101 @@
|
|
1
|
+
class ZabbixApi
|
2
|
+
class Problems < Basic
|
3
|
+
# The method name used for interacting with Hosts via Zabbix API
|
4
|
+
#
|
5
|
+
# @return [String]
|
6
|
+
def method_name
|
7
|
+
'problem'
|
8
|
+
end
|
9
|
+
|
10
|
+
# The id field name used for identifying specific Problem objects via Zabbix API
|
11
|
+
#
|
12
|
+
# @return [String]
|
13
|
+
def identify
|
14
|
+
'name'
|
15
|
+
end
|
16
|
+
|
17
|
+
# The key field name used for Problem objects via Zabbix API
|
18
|
+
# However, Problem object does not have a unique identifier
|
19
|
+
#
|
20
|
+
# @return [String]
|
21
|
+
def key
|
22
|
+
'problemid'
|
23
|
+
end
|
24
|
+
|
25
|
+
# Returns the object's plural id field name (identify) based on key
|
26
|
+
# However, Problem object does not have a unique identifier
|
27
|
+
#
|
28
|
+
# @return [String]
|
29
|
+
def keys
|
30
|
+
'problemids'
|
31
|
+
end
|
32
|
+
|
33
|
+
# Dump Problem object data by key from Zabbix API
|
34
|
+
#
|
35
|
+
# @param data [Hash] Should include desired object's key and value
|
36
|
+
# @raise [ApiError] Error returned when there is a problem with the Zabbix API call.
|
37
|
+
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
38
|
+
# @return [Hash]
|
39
|
+
def dump_by_id(data)
|
40
|
+
log "[DEBUG] Call dump_by_id with parameters: #{data.inspect}"
|
41
|
+
|
42
|
+
@client.api_request(
|
43
|
+
method: 'problem.get',
|
44
|
+
params: {
|
45
|
+
filter: {
|
46
|
+
identify.to_sym => data[identify.to_sym]
|
47
|
+
},
|
48
|
+
output: 'extend'
|
49
|
+
}
|
50
|
+
)
|
51
|
+
end
|
52
|
+
|
53
|
+
# Get full/extended Problem data from Zabbix API
|
54
|
+
#
|
55
|
+
# @param data [Hash] Should include object's id field name (identify) and id value
|
56
|
+
# @raise [ApiError] Error returned when there is a problem with the Zabbix API call.
|
57
|
+
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
58
|
+
# @return [Hash]
|
59
|
+
def get_full_data(data)
|
60
|
+
log "[DEBUG] Call get_full_data with parameters: #{data.inspect}"
|
61
|
+
|
62
|
+
data = symbolize_keys(data)
|
63
|
+
|
64
|
+
@client.api_request(
|
65
|
+
method: "#{method_name}.get",
|
66
|
+
params: {
|
67
|
+
filter: {
|
68
|
+
identify.to_sym => data[identify.to_sym]
|
69
|
+
},
|
70
|
+
eventids: data[:eventids] || nil,
|
71
|
+
groupids: data[:groupids] || nil,
|
72
|
+
hostids: data[:hostids] || nil,
|
73
|
+
objectids: data[:objectids] || nil,
|
74
|
+
applicationids: data[:applicationids] || nil,
|
75
|
+
tags: data[:tags] || nil,
|
76
|
+
time_from: data[:time_from] || nil,
|
77
|
+
time_till: data[:time_till] || nil,
|
78
|
+
eventid_from: data[:eventid_from] || nil,
|
79
|
+
eventid_till: data[:eventid_till] || nil,
|
80
|
+
recent: data[:recent] || false,
|
81
|
+
sortfield: data[:sortfield] || ['eventid'],
|
82
|
+
sortorder: data[:sortorder] || 'DESC',
|
83
|
+
countOutput: data[:countOutput] || nil,
|
84
|
+
output: 'extend',
|
85
|
+
selectAcknowledges: 'extend',
|
86
|
+
selectTags: 'extend',
|
87
|
+
selectSuppressionData: 'extend'
|
88
|
+
}
|
89
|
+
)
|
90
|
+
end
|
91
|
+
|
92
|
+
# Get full/extended Zabbix data for Problem objects from API
|
93
|
+
#
|
94
|
+
# @raise [ApiError] Error returned when there is a problem with the Zabbix API call.
|
95
|
+
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
96
|
+
# @return [Array<Hash>] Array of matching objects
|
97
|
+
def all
|
98
|
+
get_full_data({})
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
@@ -0,0 +1,114 @@
|
|
1
|
+
class ZabbixApi
|
2
|
+
class Roles < Basic
|
3
|
+
# The method name used for interacting with Role via Zabbix API
|
4
|
+
#
|
5
|
+
# @return [String]
|
6
|
+
def method_name
|
7
|
+
'role'
|
8
|
+
end
|
9
|
+
|
10
|
+
# The key field name used for Role objects via Zabbix API
|
11
|
+
#
|
12
|
+
# @return [String]
|
13
|
+
def key
|
14
|
+
'roleid'
|
15
|
+
end
|
16
|
+
|
17
|
+
# The id field name used for identifying specific Role objects via Zabbix API
|
18
|
+
#
|
19
|
+
# @return [String]
|
20
|
+
def identify
|
21
|
+
'name'
|
22
|
+
end
|
23
|
+
|
24
|
+
# Set permissions for usergroup using Zabbix API
|
25
|
+
#
|
26
|
+
# @param data [Hash] Needs to include usrgrpids and hostgroupids along with permissions to set
|
27
|
+
# @raise [ApiError] Error returned when there is a problem with the Zabbix API call.
|
28
|
+
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
29
|
+
# @return [Integer] Zabbix object id (usergroup)
|
30
|
+
def rules(data)
|
31
|
+
rules = data[:rules] || 2
|
32
|
+
result = @client.api_request(
|
33
|
+
method: 'role.update',
|
34
|
+
params: {
|
35
|
+
roleid: data[:roleid],
|
36
|
+
rules: data[:hostgroupids].map { |t| { permission: permission, id: t } }
|
37
|
+
}
|
38
|
+
)
|
39
|
+
result ? result['usrgrpids'][0].to_i : nil
|
40
|
+
end
|
41
|
+
|
42
|
+
# Add users to usergroup using Zabbix API
|
43
|
+
#
|
44
|
+
# @deprecated Zabbix has removed massAdd in favor of update.
|
45
|
+
# @param data [Hash] Needs to include userids and usrgrpids to mass add users to groups
|
46
|
+
# @raise [ApiError] Error returned when there is a problem with the Zabbix API call.
|
47
|
+
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
48
|
+
# @return [Integer] Zabbix object id (usergroup)
|
49
|
+
def add_user(data)
|
50
|
+
update_users(data)
|
51
|
+
end
|
52
|
+
|
53
|
+
# Dump Role object data by key from Zabbix API
|
54
|
+
#
|
55
|
+
# @param data [Hash] Should include desired object's key and value
|
56
|
+
# @raise [ApiError] Error returned when there is a problem with the Zabbix API call.
|
57
|
+
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
58
|
+
# @return [Hash]
|
59
|
+
def dump_by_id(data)
|
60
|
+
log "[DEBUG] Call dump_by_id with parameters: #{data.inspect}"
|
61
|
+
|
62
|
+
@client.api_request(
|
63
|
+
method: 'role.get',
|
64
|
+
params: {
|
65
|
+
output: 'extend',
|
66
|
+
selectRules: 'extend',
|
67
|
+
roleids: data[:id]
|
68
|
+
}
|
69
|
+
)
|
70
|
+
end
|
71
|
+
|
72
|
+
# Get Role ids by Role Name from Zabbix API
|
73
|
+
#
|
74
|
+
# @param data [Hash] Should include host value to query for matching graphs
|
75
|
+
# @raise [ApiError] Error returned when there is a problem with the Zabbix API call.
|
76
|
+
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
77
|
+
# @return [Array] Returns array of Graph ids
|
78
|
+
def get_ids_by_name(data)
|
79
|
+
result = @client.api_request(
|
80
|
+
method: 'role.get',
|
81
|
+
params: {
|
82
|
+
filter: {
|
83
|
+
name: data[:name]
|
84
|
+
},
|
85
|
+
output: 'extend'
|
86
|
+
}
|
87
|
+
)
|
88
|
+
|
89
|
+
result.map do |rule|
|
90
|
+
rule['roleid']
|
91
|
+
end.compact
|
92
|
+
end
|
93
|
+
|
94
|
+
# Update users in Userroles using Zabbix API
|
95
|
+
#
|
96
|
+
# @param data [Hash] Needs to include userids and usrgrpids to mass update users in groups
|
97
|
+
# @raise [ApiError] Error returned when there is a problem with the Zabbix API call.
|
98
|
+
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
99
|
+
# @return [Integer] Zabbix object id (usergroup)
|
100
|
+
def update_users(data)
|
101
|
+
user_groups = data[:usrgrpids].map do |t|
|
102
|
+
{
|
103
|
+
usrgrpid: t,
|
104
|
+
userids: data[:userids],
|
105
|
+
}
|
106
|
+
end
|
107
|
+
result = @client.api_request(
|
108
|
+
method: 'usergroup.update',
|
109
|
+
params: user_groups,
|
110
|
+
)
|
111
|
+
result ? result['usrgrpids'][0].to_i : nil
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
@@ -10,7 +10,7 @@ class ZabbixApi
|
|
10
10
|
# The id field name used for identifying specific Trigger objects via Zabbix API
|
11
11
|
#
|
12
12
|
# @return [String]
|
13
|
-
def
|
13
|
+
def identify
|
14
14
|
'description'
|
15
15
|
end
|
16
16
|
|
@@ -21,7 +21,7 @@ class ZabbixApi
|
|
21
21
|
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
22
22
|
# @return [Hash]
|
23
23
|
def dump_by_id(data)
|
24
|
-
log "[DEBUG] Call dump_by_id with
|
24
|
+
log "[DEBUG] Call dump_by_id with parameters: #{data.inspect}"
|
25
25
|
|
26
26
|
@client.api_request(
|
27
27
|
method: 'trigger.get',
|
@@ -3,7 +3,7 @@ class ZabbixApi
|
|
3
3
|
# The id field name used for identifying specific User macro objects via Zabbix API
|
4
4
|
#
|
5
5
|
# @return [String]
|
6
|
-
def
|
6
|
+
def identify
|
7
7
|
'macro'
|
8
8
|
end
|
9
9
|
|
@@ -17,17 +17,17 @@ class ZabbixApi
|
|
17
17
|
# Get User macro object id from Zabbix API based on provided data
|
18
18
|
#
|
19
19
|
# @param data [Hash] Needs to include macro to properly identify user macros via Zabbix API
|
20
|
-
# @raise [ApiError] Error returned when there is a problem with the Zabbix API call or missing object's id field name (
|
20
|
+
# @raise [ApiError] Error returned when there is a problem with the Zabbix API call or missing object's id field name (identify).
|
21
21
|
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
22
22
|
# @return [Integer] Zabbix object id
|
23
23
|
def get_id(data)
|
24
24
|
log "[DEBUG] Call get_id with parameters: #{data.inspect}"
|
25
25
|
|
26
26
|
# symbolize keys if the user used string keys instead of symbols
|
27
|
-
data = symbolize_keys(data) if data.key?(
|
28
|
-
# raise an error if
|
29
|
-
name = data[
|
30
|
-
raise ApiError.new("#{
|
27
|
+
data = symbolize_keys(data) if data.key?(identify)
|
28
|
+
# raise an error if identify name was not supplied
|
29
|
+
name = data[identify.to_sym]
|
30
|
+
raise ApiError.new("#{identify} not supplied in call to get_id") if name.nil?
|
31
31
|
|
32
32
|
result = request(data, 'usermacro.get', 'hostmacroid')
|
33
33
|
|
@@ -37,17 +37,17 @@ class ZabbixApi
|
|
37
37
|
# Get Global macro object id from Zabbix API based on provided data
|
38
38
|
#
|
39
39
|
# @param data [Hash] Needs to include macro to properly identify global macros via Zabbix API
|
40
|
-
# @raise [ApiError] Error returned when there is a problem with the Zabbix API call or missing object's id field name (
|
40
|
+
# @raise [ApiError] Error returned when there is a problem with the Zabbix API call or missing object's id field name (identify).
|
41
41
|
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
42
42
|
# @return [Integer] Zabbix object id
|
43
43
|
def get_id_global(data)
|
44
44
|
log "[DEBUG] Call get_id_global with parameters: #{data.inspect}"
|
45
45
|
|
46
46
|
# symbolize keys if the user used string keys instead of symbols
|
47
|
-
data = symbolize_keys(data) if data.key?(
|
48
|
-
# raise an error if
|
49
|
-
name = data[
|
50
|
-
raise ApiError.new("#{
|
47
|
+
data = symbolize_keys(data) if data.key?(identify)
|
48
|
+
# raise an error if identify name was not supplied
|
49
|
+
name = data[identify.to_sym]
|
50
|
+
raise ApiError.new("#{identify} not supplied in call to get_id_global") if name.nil?
|
51
51
|
|
52
52
|
result = request(data, 'usermacro.get', 'globalmacroid')
|
53
53
|
|
@@ -56,7 +56,7 @@ class ZabbixApi
|
|
56
56
|
|
57
57
|
# Get full/extended User macro data from Zabbix API
|
58
58
|
#
|
59
|
-
# @param data [Hash] Should include object's id field name (
|
59
|
+
# @param data [Hash] Should include object's id field name (identify) and id value
|
60
60
|
# @raise [ApiError] Error returned when there is a problem with the Zabbix API call.
|
61
61
|
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
62
62
|
# @return [Hash]
|
@@ -68,7 +68,7 @@ class ZabbixApi
|
|
68
68
|
|
69
69
|
# Get full/extended Global macro data from Zabbix API
|
70
70
|
#
|
71
|
-
# @param data [Hash] Should include object's id field name (
|
71
|
+
# @param data [Hash] Should include object's id field name (identify) and id value
|
72
72
|
# @raise [ApiError] Error returned when there is a problem with the Zabbix API call.
|
73
73
|
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
74
74
|
# @return [Hash]
|
@@ -126,7 +126,7 @@ class ZabbixApi
|
|
126
126
|
|
127
127
|
# Update User macro object using Zabbix API
|
128
128
|
#
|
129
|
-
# @param data [Hash] Should include object's id field name (
|
129
|
+
# @param data [Hash] Should include object's id field name (identify), id value, and fields to update
|
130
130
|
# @param force [Boolean] Whether to force an object update even if provided data matches Zabbix
|
131
131
|
# @raise [ApiError] Error returned when there is a problem with the Zabbix API call.
|
132
132
|
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
@@ -138,7 +138,7 @@ class ZabbixApi
|
|
138
138
|
|
139
139
|
# Update Global macro object using Zabbix API
|
140
140
|
#
|
141
|
-
# @param data [Hash] Should include object's id field name (
|
141
|
+
# @param data [Hash] Should include object's id field name (identify), id value, and fields to update
|
142
142
|
# @param force [Boolean] Whether to force an object update even if provided data matches Zabbix
|
143
143
|
# @raise [ApiError] Error returned when there is a problem with the Zabbix API call.
|
144
144
|
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
data/lib/zabbixapi/client.rb
CHANGED
@@ -60,9 +60,13 @@ class ZabbixApi
|
|
60
60
|
@proxy_port = @proxy_uri.port
|
61
61
|
@proxy_user, @proxy_pass = @proxy_uri.userinfo.split(/:/) if @proxy_uri.userinfo
|
62
62
|
end
|
63
|
-
unless api_version =~ %r{^
|
63
|
+
unless api_version =~ %r{^5.[0|2]\.\d+$}
|
64
64
|
message = "Zabbix API version: #{api_version} is not supported by this version of zabbixapi"
|
65
|
-
|
65
|
+
if @options[:ignore_version]
|
66
|
+
puts "[WARNING] #{message}" if @options[:debug]
|
67
|
+
else
|
68
|
+
raise ZabbixApi::ApiError.new(message)
|
69
|
+
end
|
66
70
|
end
|
67
71
|
|
68
72
|
@auth_hash = auth
|
data/lib/zabbixapi/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zabbixapi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 5.0.0.pre.alpha1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vasiliev D.V.
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2021-01-31 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: http
|
@@ -82,7 +82,9 @@ files:
|
|
82
82
|
- lib/zabbixapi/classes/items.rb
|
83
83
|
- lib/zabbixapi/classes/maintenance.rb
|
84
84
|
- lib/zabbixapi/classes/mediatypes.rb
|
85
|
+
- lib/zabbixapi/classes/problems.rb
|
85
86
|
- lib/zabbixapi/classes/proxies.rb
|
87
|
+
- lib/zabbixapi/classes/roles.rb
|
86
88
|
- lib/zabbixapi/classes/screens.rb
|
87
89
|
- lib/zabbixapi/classes/scripts.rb
|
88
90
|
- lib/zabbixapi/classes/server.rb
|
@@ -111,11 +113,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
111
113
|
version: 2.0.0
|
112
114
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
113
115
|
requirements:
|
114
|
-
- - "
|
116
|
+
- - ">"
|
115
117
|
- !ruby/object:Gem::Version
|
116
|
-
version:
|
118
|
+
version: 1.3.1
|
117
119
|
requirements: []
|
118
|
-
rubygems_version: 3.1
|
120
|
+
rubygems_version: 3.0.1
|
119
121
|
signing_key:
|
120
122
|
specification_version: 4
|
121
123
|
summary: Simple and lightweight ruby module for working with the Zabbix API
|