zinv 0.1.4 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 8b18911f2c4dd6499f366ccecccf43b0cc068747
4
- data.tar.gz: f82edf5715bba404551a4dd698820035ef2c84b5
2
+ SHA256:
3
+ metadata.gz: 163b830fb516b396c3728b88f1e331a005a14baed783df3dcd2381714746b4ac
4
+ data.tar.gz: af33e4686ed1feaf9a283a17f11b50064dbd8df6806488bf076723217142b8e5
5
5
  SHA512:
6
- metadata.gz: 521dca9dbd7d3df73b028bf68b65348a84b7ed90661ac69998d2821707831985deb1da80912ee2556a835783c1767939ef288695282b9a600e8e29cdfc779e0c
7
- data.tar.gz: f7b13444e31dceb3becaa1991d833d2cfb34995cb717919e3a4c751817f41ec1d0dd0e9c94c3dcc3ca7514450c77c823025a484b641e53fc5d4fe00262be3de4
6
+ metadata.gz: 16af76981bea37da7d01baa2cfa6407242f1acb43e6cb5cd5d7cee47042828569ae3d7e4d9486e451d52a7d8db280d687d52a572e9e776f1bfd9e81d58ee2eb7
7
+ data.tar.gz: f4cd51c4369503021fb887640a1a83643c17f24f265fead6e33fa7e4311260af509f6afa341bf6f53ebf3ca994184b94cc802638e7467fd557dc66302f6a0f09
data/CHANGELOG ADDED
File without changes
data/exe/zinv.rb CHANGED
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
- require 'zabbixapi'
2
+ require 'zabbix/api'
3
3
  require 'json'
4
- require 'trollop'
5
- require 'awesome_print'
4
+ require 'optimist'
5
+ require 'amazing_print'
6
6
  require 'set'
7
7
  require 'yaml'
8
8
 
@@ -11,10 +11,9 @@ require 'yaml'
11
11
  # ansible-playbook to have hosts not yet in zabbix listed in inventory
12
12
  runtimehostvar = 'ZINV_ADD_HOSTS'
13
13
 
14
- opts = Trollop::options do
14
+ opts = Optimist::options do
15
15
  opt :list, "List entire inventory" # required by ansible
16
16
  opt :host, "List a single host", :type => :string # required by ansible
17
- opt :debug, "Debugging verbosity"
18
17
  opt :groups, "Dump groups list"
19
18
  opt :templates, "Dump templates list"
20
19
  end
@@ -62,23 +61,18 @@ if opts[:host]
62
61
  end
63
62
 
64
63
  # Connect to zabbix.
65
- zbx = ZabbixApi.connect(
66
- :url => "#{ENV['ZINV_ZABBIX_URL']}/api_jsonrpc.php",
67
- :user => ENV['ZINV_ZABBIX_USER'],
68
- :password => ENV['ZINV_ZABBIX_PASS'],
69
- :debug => opts[:debug]
64
+ zbx = Zabbix::Api::Client.new(url: ENV['ZINV_ZABBIX_URL'])
65
+
66
+ zbx.login(
67
+ user: ENV['ZINV_ZABBIX_USER'],
68
+ pass: ENV['ZINV_ZABBIX_PASS'],
70
69
  )
71
70
 
72
71
 
73
72
  # Get all the root template objects
74
- roottemplates = zbx.query(
75
- :method => 'template.get',
76
- :params => {
77
- :filter => {
78
- :host => roottemplatenames
79
- }
80
- }
81
- )
73
+ roottemplates = zbx.template.get(
74
+ filter: { host: roottemplatenames }
75
+ ).collect
82
76
 
83
77
 
84
78
  ansibletemplates = roottemplates # This list is used by host gathering logic later on
@@ -87,7 +81,7 @@ prevchunk = roottemplates # this is for the "walking the tree" logic
87
81
 
88
82
  # Set up template groups for the root templates
89
83
  prevchunk.each {|template|
90
- name = template['name'].gsub(/[ ]/,'_')
84
+ name = template.name.gsub(/[ ]/,'_')
91
85
  if not ansibletemplategroups.has_key?(name)
92
86
  ansibletemplategroups[name] = {'hosts' => Set.new}
93
87
  end
@@ -96,11 +90,8 @@ prevchunk.each {|template|
96
90
  # Find all templates that derive from the root ones, adding to ansibletemplates
97
91
  # and ansibletemplategroups as we go
98
92
  begin
99
- nextchunk = zbx.query(
100
- :method => 'template.get',
101
- :params => {
102
- :parentTemplateids => prevchunk.collect {|each| each['templateid']}
103
- }
93
+ nextchunk = zbx.template.get(
94
+ parentTemplateids: prevchunk.collect {|each| each['templateid']}
104
95
  )
105
96
  nextchunk.each {|template|
106
97
  name = template['name'].gsub(/[ ]/,'_')
@@ -127,21 +118,17 @@ ansiblehostgroups['New_Hosts'] = {'hosts' => newhostnamelist}
127
118
  metadata = Hash.new
128
119
 
129
120
 
121
+
130
122
  # Gather all the hosts that use the templates we've collected. We'll put them in
131
123
  # two types of hashes: host group hashes and template group hashes.
132
- zbx.hostgroups.all.each { |name,id|
124
+ zbx.hostgroup.get().each { |hostgroup|
133
125
  hostlist = Array.new
134
126
  # Gather hosts using our templates, ensuring we also grab inventory for this host
135
- hosts = zbx.query(
136
- :method => 'host.get',
137
- :params => {
138
- :groupids => [id],
139
- :templateids => ansibletemplates.collect {|each| each['templateid']},
140
- :selectParentTemplates => [
141
- 'name'
142
- ],
143
- :selectInventory => 'extend'
144
- }
127
+ hosts = zbx.host.get(
128
+ groupids: [hostgroup.groupid],
129
+ templateids: ansibletemplates.collect {|each| each['templateid']},
130
+ selectParentTemplates: [ 'name' ],
131
+ selectInventory: 'extend'
145
132
  )
146
133
 
147
134
  # For each host we've collected, add it to each group it belongs in (both host and template),
@@ -150,12 +137,12 @@ zbx.hostgroups.all.each { |name,id|
150
137
  hosts.each { |host|
151
138
  # You can put the string DONOTMANAGE anywhere in the zabbix host description
152
139
  # If you do that the node in question will be excluded from inventory
153
- if host['description'] !~ /DONOTMANAGE/
154
- hostlist.push(host['host'])
155
- host['parentTemplates'].each { |template|
140
+ if host.description !~ /DONOTMANAGE/
141
+ hostlist.push(host.host)
142
+ host.parentTemplates.each { |template|
156
143
  templatename = template['name'].gsub(/[ ]/,'_')
157
144
  if ansibletemplategroups.has_key?(templatename)
158
- ansibletemplategroups[templatename]['hosts'].add(host['name'])
145
+ ansibletemplategroups[templatename]['hosts'].add(host.name)
159
146
  end
160
147
  }
161
148
  # If you need to define host variables, in the zabbix host definition select "Inventory" and put yaml in the Notes field.
@@ -165,11 +152,11 @@ zbx.hostgroups.all.each { |name,id|
165
152
  # ereiamjh: The ghost in the machine
166
153
  # youshouldwatch: Brazil
167
154
  #
168
- if host.has_key?('inventory') and host['inventory'].class == Hash and host['inventory'].has_key?('notes') and host['inventory']['notes'].size > 0
155
+ if host.respond_to?(:inventory) and host.inventory.class == Hash and host.inventory.has_key?('notes') and host.inventory['notes'].size > 0
169
156
  begin
170
- metadata[host['name']] = YAML.load(host['inventory']['notes'])
157
+ metadata[host.name] = YAML.load(host.inventory['notes'])
171
158
  rescue Exception => e
172
- puts "Error parsing inventory notes field for host #{host['name']} - SKIPPING"
159
+ puts "Error parsing inventory notes field for host #{host.name} - SKIPPING"
173
160
  ap e
174
161
  end
175
162
  end
@@ -178,11 +165,12 @@ zbx.hostgroups.all.each { |name,id|
178
165
  }
179
166
 
180
167
  if hostlist.size > 0
181
- ansiblehostgroups[name.gsub(/[ ]/,'_')] = {'hosts'=>hostlist}
168
+ ansiblehostgroups[hostgroup.name.gsub(/[ ]/,'_')] = {'hosts'=>hostlist}
182
169
  ansiblehostgroups['All_Hosts']['hosts'].merge(hostlist) # probably don't need this
183
170
  end
184
171
  }
185
172
 
173
+
186
174
  # These are just for more informative dumps...
187
175
  hostgroupcount = ansiblehostgroups.keys.size
188
176
  if opts[:groups]
data/lib/zinv/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Zinv
2
- VERSION = "0.1.4"
2
+ VERSION = "0.2.0"
3
3
  end
data/zinv.gemspec CHANGED
@@ -26,9 +26,9 @@ Gem::Specification.new do |spec|
26
26
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
27
27
  spec.require_paths = ["lib"]
28
28
 
29
- spec.add_development_dependency "bundler", "~> 1.11"
30
- spec.add_development_dependency "rake", "~> 10.0"
31
- spec.add_runtime_dependency "zabbixapi", '~> 3.1'
32
- spec.add_runtime_dependency "trollop", '~> 2.1'
33
- spec.add_runtime_dependency "awesome_print", '~> 1.8'
29
+ spec.add_development_dependency "bundler"
30
+ spec.add_development_dependency "rake"
31
+ spec.add_runtime_dependency "zabbix-api-simple"
32
+ spec.add_runtime_dependency "optimist"
33
+ spec.add_runtime_dependency "amazing_print"
34
34
  end
metadata CHANGED
@@ -1,85 +1,85 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zinv
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dave Parker
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-06-05 00:00:00.000000000 Z
11
+ date: 2021-05-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '1.11'
19
+ version: '0'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '1.11'
26
+ version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '10.0'
33
+ version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '10.0'
40
+ version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: zabbixapi
42
+ name: zabbix-api-simple
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '3.1'
47
+ version: '0'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: '3.1'
54
+ version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: trollop
56
+ name: optimist
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - "~>"
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
- version: '2.1'
61
+ version: '0'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - "~>"
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
- version: '2.1'
68
+ version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: awesome_print
70
+ name: amazing_print
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - "~>"
73
+ - - ">="
74
74
  - !ruby/object:Gem::Version
75
- version: '1.8'
75
+ version: '0'
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - "~>"
80
+ - - ">="
81
81
  - !ruby/object:Gem::Version
82
- version: '1.8'
82
+ version: '0'
83
83
  description:
84
84
  email:
85
85
  - david.parker _AT_ nsight.com
@@ -88,6 +88,7 @@ executables:
88
88
  extensions: []
89
89
  extra_rdoc_files: []
90
90
  files:
91
+ - CHANGELOG
91
92
  - CODE_OF_CONDUCT.md
92
93
  - Gemfile
93
94
  - LICENSE
@@ -120,8 +121,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
120
121
  - !ruby/object:Gem::Version
121
122
  version: '0'
122
123
  requirements: []
123
- rubyforge_project:
124
- rubygems_version: 2.6.11
124
+ rubygems_version: 3.1.6
125
125
  signing_key:
126
126
  specification_version: 4
127
127
  summary: Ansible dynamic inventory script for hosts monitored by zabbix