Skip to content

Commit

Permalink
Merge pull request #95 from 1n/templates
Browse files Browse the repository at this point in the history
import templates and create hostgroup if missing
  • Loading branch information
dj-wasabi committed Jun 2, 2015
2 parents e691892 + 26b7173 commit 551310a
Show file tree
Hide file tree
Showing 11 changed files with 230 additions and 15 deletions.
26 changes: 26 additions & 0 deletions lib/puppet/provider/zabbix.rb
Expand Up @@ -61,6 +61,32 @@ def self.check_template_in_host(host,template,zabbix_url,zabbix_user,zabbix_pass
template_array.include?("#{template_id}")
end

def self.check_template_exist(template,template_source,zabbix_url,zabbix_user,zabbix_pass,apache_use_ssl)
begin
zbx = create_connection(zabbix_url,zabbix_user,zabbix_pass,apache_use_ssl)
zbx.templates.get_id( :host => template )
rescue Puppet::ExecutionFailure => e
false
end
end

def self.check_template_is_equal(template,template_source,zabbix_url,zabbix_user,zabbix_pass,apache_use_ssl)
begin
zbx = create_connection(zabbix_url,zabbix_user,zabbix_pass,apache_use_ssl)
exported = zbx.configurations.export(
:format => "xml",
:options => {
:templates => [zbx.templates.get_id(:host => template)]
}
)
exported_clean = exported.gsub(/>\s*/, ">").gsub(/\s*</, "<").gsub(/<date>.*<\/date>/,"DATEWASHERE")
template_source_clean = template_source.gsub(/>\s*/, ">").gsub(/\s*</, "<").gsub(/<date>.*<\/date>/,"DATEWASHERE")
exported_clean.eql? template_source_clean
rescue Puppet::ExecutionFailure => e
false
end
end

# Is it an number?
def self.is_a_number?(s)
s.to_s.match(/\A[+-]?\d+?(\.\d+)?\Z/) == nil ? false : true
Expand Down
12 changes: 11 additions & 1 deletion lib/puppet/provider/zabbix_host/ruby.rb
Expand Up @@ -14,6 +14,7 @@ def create
use_ip = @resource[:use_ip]
port = @resource[:port]
hostgroup = @resource[:group]
hostgroup_create = @resource[:group_create]
templates = @resource[:templates]
proxy = @resource[:proxy]
zabbix_url = @resource[:zabbix_url]
Expand Down Expand Up @@ -46,10 +47,19 @@ def create
if ipaddress.nil? and use_ip == 0
ipaddress = ''
end

if hostgroup_create == true
hostgroup_create = 1
else
hostgroup_create = 0
end

# First check if we have an correct hostgroup and if not, we raise an error.
search_hostgroup = zbx.hostgroups.get_id(:name => hostgroup)
if search_hostgroup.nil?
if search_hostgroup.nil? and hostgroup_create == 1
zbx.hostgroups.create(:name => hostgroup)
search_hostgroup = zbx.hostgroups.get_id(:name => hostgroup)
elsif search_hostgroup.nil? and hostgroup_create == 0
raise Puppet::Error, "The hostgroup (" + hostgroup + ") does not exist in zabbix. Please use the correct one."
end

Expand Down
94 changes: 94 additions & 0 deletions lib/puppet/provider/zabbix_template/ruby.rb
@@ -0,0 +1,94 @@
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'zabbix'))
Puppet::Type.type(:zabbix_template).provide(:ruby, :parent => Puppet::Provider::Zabbix) do

def create
zabbix_url = @resource[:zabbix_url]

if zabbix_url != ''
self.class.require_zabbix
end

# Set some vars
template_name = @resource[:template_name]
template_source = @resource[:template_source]
zabbix_url = @resource[:zabbix_url]
zabbix_user = @resource[:zabbix_user]
zabbix_pass = @resource[:zabbix_pass]
apache_use_ssl = @resource[:apache_use_ssl]

# Connect to zabbix api
zbx = self.class.create_connection(zabbix_url,zabbix_user,zabbix_pass,apache_use_ssl)

zbx.configurations.import(
:format => "xml",
:rules => {
:applications => {
:createMissing => true,
:updateExisting => true
},
:discoveryRules => {
:createMissing => true,
:updateExisting => true
},
:graphs =>{
:createMissing => true,
:updateExisting => true
},
:groups => {
:createMissing => true
},
:image => {
:createMissing => true,
:updateExisting => true
},
:items => {
:createMissing => true,
:updateExisting => true
},
:maps => {
:createMissing => true,
:updateExisting => true
},
:screens => {
:createMissing => true,
:updateExisting => true
},
:templateLinkage => {
:createMissing => true
},
:templates => {
:createMissing => true,
:updateExisting => true
},
:templateScreens => {
:createMissing => true,
:updateExisting => true
},
:triggers => {
:createMissing => true,
:updateExisting => true
}
},
:source => template_source
)
end

def exists?
zabbix_url = @resource[:zabbix_url]

if zabbix_url != ''
self.class.require_zabbix
end

template_name = @resource[:template_name]
template_source = @resource[:template_source]
zabbix_user = @resource[:zabbix_user]
zabbix_pass = @resource[:zabbix_pass]
apache_use_ssl = @resource[:apache_use_ssl]

zbx = self.class.create_connection(zabbix_url,zabbix_user,zabbix_pass,apache_use_ssl)
self.class.check_template_is_equal(template_name,template_source,zabbix_url,zabbix_user,zabbix_pass,apache_use_ssl)

end

end
4 changes: 4 additions & 0 deletions lib/puppet/type/zabbix_host.rb
Expand Up @@ -25,6 +25,10 @@
desc 'Name of the hostgroup.'
end

newparam(:group_create) do
desc 'Create hostgroup if missing.'
end

newparam(:templates) do
desc 'List of templates which should be loaded for this host.'
end
Expand Down
32 changes: 32 additions & 0 deletions lib/puppet/type/zabbix_template.rb
@@ -0,0 +1,32 @@
Puppet::Type.newtype(:zabbix_template) do

ensurable do
defaultvalues
defaultto :present
end

newparam(:template_name, :namevar => true) do
desc 'The name of template.'
end

newparam(:template_source) do
desc 'Template source file.'
end

newparam(:zabbix_url) do
desc 'The url on which the zabbix-api is available.'
end

newparam(:zabbix_user) do
desc 'Zabbix-api username.'
end

newparam(:zabbix_pass) do
desc 'Zabbix-api password.'
end

newparam(:apache_use_ssl) do
desc 'If apache is uses with ssl'
end
end

16 changes: 9 additions & 7 deletions manifests/agent.pp
Expand Up @@ -172,6 +172,7 @@
$monitored_by_proxy = $zabbix::params::monitored_by_proxy,
$agent_use_ip = $zabbix::params::agent_use_ip,
$zbx_group = $zabbix::params::agent_zbx_group,
$zbx_group_create = $zabbix::params::agent_zbx_group_create,
$zbx_templates = $zabbix::params::agent_zbx_templates,
$agent_configfile_path = $zabbix::params::agent_configfile_path,
$pidfile = $zabbix::params::agent_pidfile,
Expand Down Expand Up @@ -239,13 +240,14 @@
}

class { 'zabbix::resources::agent':
hostname => $::fqdn,
ipaddress => $listen_ip,
use_ip => $agent_use_ip,
port => $listenport,
group => $zbx_group,
templates => $zbx_templates,
proxy => $use_proxy,
hostname => $::fqdn,
ipaddress => $listen_ip,
use_ip => $agent_use_ip,
port => $listenport,
group => $zbx_group,
group_create => $zbx_group_create,
templates => $zbx_templates,
proxy => $use_proxy,
}
}

Expand Down
1 change: 1 addition & 0 deletions manifests/params.pp
Expand Up @@ -134,6 +134,7 @@
$monitored_by_proxy = undef
$agent_use_ip = true
$agent_zbx_group = 'Linux servers'
$agent_zbx_group_create = true
$agent_zbx_templates = [ 'Template OS Linux', 'Template App SSH Service' ]
$agent_pidfile = '/var/run/zabbix/zabbix_agentd.pid'
$agent_logfile = '/var/log/zabbix/zabbix_agentd.log'
Expand Down
16 changes: 9 additions & 7 deletions manifests/resources/agent.pp
Expand Up @@ -14,20 +14,22 @@
#
#
class zabbix::resources::agent (
$hostname = undef,
$ipaddress = undef,
$use_ip = undef,
$port = undef,
$group = undef,
$templates = undef,
$proxy = undef,
$hostname = undef,
$ipaddress = undef,
$use_ip = undef,
$port = undef,
$group = undef,
$group_create = undef,
$templates = undef,
$proxy = undef,
) {

@@zabbix_host { $hostname:
ipaddress => $ipaddress,
use_ip => $use_ip,
port => $port,
group => $group,
group_create => $group_create,
templates => $templates,
proxy => $proxy,
zabbix_url => '',
Expand Down
28 changes: 28 additions & 0 deletions manifests/resources/template.pp
@@ -0,0 +1,28 @@
# == Class zabbix::resources::template
#
# This will create an resources into puppetdb
# for automatically configuring agent into
# zabbix front-end.
#
# === Requirements
#
# Nothing.
#
# When manage_resource is set to true, this class
# will be loaded from 'zabbix::template'. So no need
# for loading this class manually.
#
#
define zabbix::resources::template (
$template_name = $title,
$template_source,
) {

@@zabbix_template { "${template_name}":
template_source => $template_source,
zabbix_url => '',
zabbix_user => '',
zabbix_pass => '',
apache_use_ssl => '',
}
}
6 changes: 6 additions & 0 deletions manifests/resources/web.pp
Expand Up @@ -29,6 +29,12 @@
Package['zabbixapi'],
],
} ->
Zabbix_template <<| |>> {
zabbix_url => $zabbix_url,
zabbix_user => $zabbix_user,
zabbix_pass => $zabbix_pass,
apache_use_ssl => $apache_use_ssl,
} ->
Zabbix_host <<| |>> {
zabbix_url => $zabbix_url,
zabbix_user => $zabbix_user,
Expand Down
10 changes: 10 additions & 0 deletions manifests/template.pp
@@ -0,0 +1,10 @@
define zabbix::template (
$templ_name = $title,
$templ_source = '',
) {

zabbix::resources::template { "${templ_name}":
template_name => $templ_name,
template_source => $templ_source,
}
}

0 comments on commit 551310a

Please sign in to comment.