Skip to content

Commit 1d50892

Browse files
authored
Merge pull request #579 from syseleven/feature/api_configfile
Move api configuration to a config file
2 parents 6ec8f5c + e255928 commit 1d50892

File tree

31 files changed

+174
-349
lines changed

31 files changed

+174
-349
lines changed

lib/puppet/provider/zabbix.rb

Lines changed: 43 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,51 @@
11
# zabbix provider type for puppet
22
class Puppet::Provider::Zabbix < Puppet::Provider
3+
# This method is vendored from the AWS SDK, rather than including an
4+
# extra library just to parse an ini file
5+
# Copied from https://github.com/puppetlabs/puppetlabs-aws/blob/2d34b1602bdd564b3f882f683dc000878f539343/lib/puppet_x/puppetlabs/aws.rb#L120
6+
def ini_parse(file)
7+
current_section = {}
8+
map = {}
9+
file.rewind
10+
file.each_line do |line|
11+
line = line.split(%r{^|\s;}).first # remove comments
12+
section = line.match(%r{^\s*\[([^\[\]]+)\]\s*$}) unless line.nil?
13+
if section
14+
current_section = section[1]
15+
elsif current_section
16+
item = line.match(%r{^\s*(.+?)\s*=\s*(.+?)\s*$}) unless line.nil?
17+
if item
18+
map[current_section] = map[current_section] || {}
19+
map[current_section][item[1]] = item[2]
20+
end
21+
end
22+
end
23+
map
24+
end
25+
26+
def api_config
27+
@api_config ||= ini_parse(File.new('/etc/zabbix/api.conf'))
28+
end
29+
30+
def zbx
31+
@zbx ||= create_connection
32+
end
33+
334
# Create the api connection
4-
def self.create_connection(zabbix_url, zabbix_user, zabbix_pass, apache_use_ssl)
5-
protocol = apache_use_ssl ? 'https' : 'http'
35+
def create_connection
36+
protocol = api_config['default']['apache_use_ssl'] == 'true' ? 'https' : 'http'
637
zbx = ZabbixApi.connect(
7-
url: "#{protocol}://#{zabbix_url}/api_jsonrpc.php",
8-
user: zabbix_user,
9-
password: zabbix_pass,
10-
http_user: zabbix_user,
11-
http_password: zabbix_pass
38+
url: "#{protocol}://#{api_config['default']['zabbix_url']}/api_jsonrpc.php",
39+
user: api_config['default']['zabbix_user'],
40+
password: api_config['default']['zabbix_pass'],
41+
http_user: api_config['default']['zabbix_user'],
42+
http_password: api_config['default']['zabbix_pass']
1243
)
1344
zbx
1445
end
1546

1647
# Check if host exists. When error raised, return false.
17-
def self.check_host(host, zabbix_url, zabbix_user, zabbix_pass, apache_use_ssl)
18-
zbx = create_connection(zabbix_url, zabbix_user, zabbix_pass, apache_use_ssl)
48+
def check_host(host)
1949
zbx.query(
2050
method: 'host.get',
2151
params: {
@@ -31,29 +61,27 @@ def self.check_host(host, zabbix_url, zabbix_user, zabbix_pass, apache_use_ssl)
3161
end
3262

3363
# Check if proxy exists. When error raised, return false.
34-
def self.check_proxy(host, zabbix_url, zabbix_user, zabbix_pass, apache_use_ssl)
35-
zbx = create_connection(zabbix_url, zabbix_user, zabbix_pass, apache_use_ssl)
64+
def check_proxy(host)
3665
zbx.proxies.get_id(host: host)
3766
rescue Puppet::ExecutionFailure
3867
false
3968
end
4069

4170
# Get the template id from the name.
42-
def self.get_template_id(zbx, template)
71+
def get_template_id(zbx, template)
4372
return template if a_number?(template)
4473
zbx.templates.get_id(host: template)
4574
end
4675

4776
# Check if given template name exists in current host.
48-
def self.check_template_in_host(host, template, zabbix_url, zabbix_user, zabbix_pass, apache_use_ssl)
49-
zbx = create_connection(zabbix_url, zabbix_user, zabbix_pass, apache_use_ssl)
77+
def check_template_in_host(host)
5078
template_id = get_template_id(zbx, template)
5179
template_array = zbx.templates.get_ids_by_host(hostids: [zbx.hosts.get_id(host: host)])
5280
template_array.include?(template_id.to_s)
5381
end
5482

5583
# Is it a number?
56-
def self.a_number?(s)
84+
def a_number?(s)
5785
s.to_s.match(%r{\A[+-]?\d+?(\.\d+)?\Z}).nil? ? false : true
5886
end
5987
end

lib/puppet/provider/zabbix_application/ruby.rb

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,40 +2,28 @@
22
Puppet::Type.type(:zabbix_application).provide(:ruby, parent: Puppet::Provider::Zabbix) do
33
confine feature: :zabbixapi
44

5-
def connect
6-
@zbx ||= self.class.create_connection(@resource[:zabbix_url], @resource[:zabbix_user], @resource[:zabbix_pass], @resource[:apache_use_ssl])
7-
@zbx
8-
end
9-
105
def template_id
11-
zbx = connect
126
@template_id ||= zbx.templates.get_id(host: @resource[:template])
137
end
148

159
def create
16-
zbx = connect
1710
zbx.applications.create(
1811
name: @resource[:name],
1912
hostid: template_id
2013
)
2114
end
2215

2316
def application_id
24-
zbx = connect
2517
@application_id ||= zbx.applications.get_id(name: @resource[:name])
2618
end
2719

2820
def exists?
29-
zbx = connect
3021
zbx.applications.get_id(name: @resource[:name])
3122
end
3223

3324
def destroy
34-
zbx = connect
35-
begin
36-
zbx.applications.delete(application_id)
37-
rescue => error
38-
raise(Puppet::Error, "Zabbix Application Delete Failed\n#{error.message}")
39-
end
25+
zbx.applications.delete(application_id)
26+
rescue => error
27+
raise(Puppet::Error, "Zabbix Application Delete Failed\n#{error.message}")
4028
end
4129
end

lib/puppet/provider/zabbix_host/ruby.rb

Lines changed: 4 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -12,23 +12,16 @@ def create
1212
hostgroup_create = @resource[:group_create]
1313
templates = @resource[:templates]
1414
proxy = @resource[:proxy]
15-
zabbix_url = @resource[:zabbix_url]
16-
zabbix_user = @resource[:zabbix_user]
17-
zabbix_pass = @resource[:zabbix_pass]
18-
apache_use_ssl = @resource[:apache_use_ssl]
19-
20-
# Connect to zabbix api
21-
zbx = self.class.create_connection(zabbix_url, zabbix_user, zabbix_pass, apache_use_ssl)
2215

2316
# Get the template ids.
2417
template_array = []
2518
if templates.is_a?(Array)
2619
templates.each do |template|
27-
template_id = self.class.get_template_id(zbx, template)
20+
template_id = get_template_id(zbx, template)
2821
template_array.push template_id
2922
end
3023
else
31-
template_array.push self.class.get_template_id(zbx, templates)
24+
template_array.push get_template_id(zbx, templates)
3225
end
3326

3427
# Check if we need to connect via ip or fqdn
@@ -76,21 +69,17 @@ def create
7669

7770
def exists?
7871
host = @resource[:hostname]
79-
zabbix_url = @resource[:zabbix_url]
80-
zabbix_user = @resource[:zabbix_user]
81-
zabbix_pass = @resource[:zabbix_pass]
82-
apache_use_ssl = @resource[:apache_use_ssl]
8372
templates = @resource[:templates]
8473

8574
templates = [templates] unless templates.is_a?(Array)
8675

87-
host = self.class.check_host(host, zabbix_url, zabbix_user, zabbix_pass, apache_use_ssl)
76+
host = check_host(host)
8877
if host.any?
8978
template_ids = host[0]['parentTemplates'].map { |x| x['templateid'] }
9079
template_names = host[0]['parentTemplates'].map { |x| x['host'] }
9180
res = []
9281
templates.each do |template|
93-
if self.class.a_number?(template)
82+
if a_number?(template)
9483
res.push(template_ids.include?(template))
9584
else
9685
res.push(template_names.include?(template))
@@ -104,12 +93,6 @@ def exists?
10493

10594
def destroy
10695
host = @resource[:hostname]
107-
zabbix_url = @resource[:zabbix_url]
108-
zabbix_user = @resource[:zabbix_user]
109-
zabbix_pass = @resource[:zabbix_pass]
110-
apache_use_ssl = @resource[:apache_use_ssl]
111-
112-
zbx = self.class.create_connection(zabbix_url, zabbix_user, zabbix_pass, apache_use_ssl)
11396
zbx.hosts.delete(zbx.hosts.get_id(host: host))
11497
end
11598
end

lib/puppet/provider/zabbix_hostgroup/ruby.rb

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,25 +2,17 @@
22
Puppet::Type.type(:zabbix_hostgroup).provide(:ruby, parent: Puppet::Provider::Zabbix) do
33
confine feature: :zabbixapi
44

5-
def connect
6-
@zbx ||= self.class.create_connection(@resource[:zabbix_url], @resource[:zabbix_user], @resource[:zabbix_pass], @resource[:apache_use_ssl])
7-
@zbx
8-
end
9-
105
def create
116
# Connect to zabbix api
12-
zbx = connect
137
hgid = zbx.hostgroups.create(name: @resource[:name])
148
hgid
159
end
1610

1711
def exists?
18-
zbx = connect
1912
zbx.hostgroups.get_id(name: @resource[:name])
2013
end
2114

2215
def destroy
23-
zbx = connect
2416
zbx.hostgroups.delete(zbx.hostgroups.get_id(name: @resource[:name]))
2517
end
2618
end

lib/puppet/provider/zabbix_proxy/ruby.rb

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -13,18 +13,12 @@ def create
1313
use_ip = @resource[:use_ip]
1414
port = @resource[:port]
1515
templates = @resource[:templates]
16-
zabbix_url = @resource[:zabbix_url]
17-
zabbix_user = @resource[:zabbix_user]
18-
zabbix_pass = @resource[:zabbix_pass]
19-
apache_use_ssl = @resource[:apache_use_ssl]
20-
21-
zbx = self.class.create_connection(zabbix_url, zabbix_user, zabbix_pass, apache_use_ssl)
2216

2317
# Get the template ids.
2418
template_array = []
2519
if templates.is_a?(Array) == true
2620
templates.each do |template|
27-
template_id = self.class.get_template_id(zbx, template)
21+
template_id = get_template_id(zbx, template)
2822
template_array.push template_id
2923
end
3024
else
@@ -47,12 +41,6 @@ def create
4741
end
4842

4943
def exists?
50-
host = @resource[:hostname]
51-
zabbix_url = @resource[:zabbix_url]
52-
zabbix_user = @resource[:zabbix_user]
53-
zabbix_pass = @resource[:zabbix_pass]
54-
apache_use_ssl = @resource[:apache_use_ssl]
55-
56-
self.class.check_proxy(host, zabbix_url, zabbix_user, zabbix_pass, apache_use_ssl)
44+
check_proxy(@resource[:hostname])
5745
end
5846
end

lib/puppet/provider/zabbix_template/ruby.rb

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,7 @@
22
Puppet::Type.type(:zabbix_template).provide(:ruby, parent: Puppet::Provider::Zabbix) do
33
confine feature: :zabbixapi
44

5-
def connect
6-
@zbx ||= self.class.create_connection(@resource[:zabbix_url], @resource[:zabbix_user], @resource[:zabbix_pass], @resource[:apache_use_ssl])
7-
@zbx
8-
end
9-
105
def create
11-
# Connect to zabbix api
12-
zbx = connect
13-
146
zbx.configurations.import(
157
format: 'xml',
168
rules: {
@@ -65,18 +57,15 @@ def create
6557
end
6658

6759
def destroy
68-
zbx = connect
6960
id = zbx.templates.get_id(host: @resource[:template_name])
7061
zbx.templates.delete(id)
7162
end
7263

7364
def exists?
74-
zbx = connect
7565
zbx.templates.get_id(host: @resource[:template_name])
7666
end
7767

7868
def xml
79-
zbx = connect
8069
zbx.configurations.export(
8170
format: 'xml',
8271
options: {

lib/puppet/provider/zabbix_template_host/ruby.rb

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ def template_name
66
end
77

88
def template_id
9-
zbx = connect
109
@template_id ||= zbx.templates.get_id(host: template_name)
1110
end
1211

@@ -15,30 +14,21 @@ def hostname
1514
end
1615

1716
def hostid
18-
zbx = connect
1917
@hostid ||= zbx.hosts.get_id(host: hostname)
2018
end
2119

22-
def connect
23-
@zbx ||= self.class.create_connection(@resource[:zabbix_url], @resource[:zabbix_user], @resource[:zabbix_pass], @resource[:apache_use_ssl])
24-
@zbx
25-
end
26-
2720
def create
28-
zbx = connect
2921
zbx.templates.mass_add(
3022
hosts_id: [hostid],
3123
templates_id: [template_id]
3224
)
3325
end
3426

3527
def exists?
36-
zbx = connect
3728
zbx.templates.get_ids_by_host(hostids: [hostid]).include?(template_id.to_s)
3829
end
3930

4031
def destroy
41-
zbx = connect
4232
zbx.templates.mass_remove(
4333
hosts_id: [hostid],
4434
templates_id: [template_id]

lib/puppet/provider/zabbix_userparameters/ruby.rb

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,9 @@
55
def create
66
host = @resource[:hostname]
77
template = @resource[:template]
8-
zabbix_url = @resource[:zabbix_url]
9-
zabbix_user = @resource[:zabbix_user]
10-
zabbix_pass = @resource[:zabbix_pass]
11-
apache_use_ssl = @resource[:apache_use_ssl]
12-
13-
# Create the connection
14-
zbx = self.class.create_connection(zabbix_url, zabbix_user, zabbix_pass, apache_use_ssl)
158

169
# Find the template_id we are looking for and add it to the host
17-
template_id = self.class.get_template_id(zbx, template)
10+
template_id = get_template_id(zbx, template)
1811
zbx.templates.mass_add(
1912
hosts_id: [zbx.hosts.get_id(host: host)],
2013
templates_id: [template_id]
@@ -24,12 +17,7 @@ def create
2417
def exists?
2518
host = @resource[:hostname]
2619
template = @resource[:template]
27-
zabbix_url = @resource[:zabbix_url]
28-
zabbix_user = @resource[:zabbix_user]
29-
zabbix_pass = @resource[:zabbix_pass]
30-
apache_use_ssl = @resource[:apache_use_ssl]
31-
32-
self.class.check_template_in_host(host, template, zabbix_url, zabbix_user, zabbix_pass, apache_use_ssl)
20+
check_template_in_host(host, template)
3321
end
3422

3523
def destroy

lib/puppet/type/zabbix_application.rb

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,6 @@
1-
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', '..'))
2-
require 'puppet/util/zabbix'
3-
41
Puppet::Type.newtype(:zabbix_application) do
52
@doc = %q(Manage zabbix applications
63
7-
Example.
8-
Zabbix_application {
9-
zabbix_url => 'zabbix_server1',
10-
zabbix_user => 'admin',
11-
zabbix_pass => 'zabbix',
12-
}
13-
144
zabbix_application{"app1":
155
ensure => present,
166
template => 'template1',
@@ -33,5 +23,5 @@
3323
desc 'template to which the application is linked'
3424
end
3525

36-
Puppet::Util::Zabbix.add_zabbix_type_methods(self)
26+
autorequire(:file) { '/etc/zabbix/api.conf' }
3727
end

0 commit comments

Comments
 (0)