diff --git a/.sync.yml b/.sync.yml index 8d4b62d40..4c5b26efd 100644 --- a/.sync.yml +++ b/.sync.yml @@ -16,3 +16,4 @@ Gemfile: - gem: 'fakefs' ruby-operator: '>=' ruby-version: '2.3.0' + - gem: 'zabbixapi' diff --git a/Gemfile b/Gemfile index 001c98586..6adf6fa15 100644 --- a/Gemfile +++ b/Gemfile @@ -31,6 +31,7 @@ group :test do gem 'parallel_tests', :require => false gem 'fakefs', '0.13.3', :require => false if RUBY_VERSION < '2.3.0' gem 'fakefs', :require => false if RUBY_VERSION >= '2.3.0' + gem 'zabbixapi', :require => false end group :development do diff --git a/lib/puppet/feature/zabbixapi.rb b/lib/puppet/feature/zabbixapi.rb new file mode 100644 index 000000000..a9ea5666d --- /dev/null +++ b/lib/puppet/feature/zabbixapi.rb @@ -0,0 +1,3 @@ +require 'puppet/util/feature' + +Puppet.features.add(:zabbixapi, libs: 'zabbixapi') diff --git a/lib/puppet/provider/zabbix.rb b/lib/puppet/provider/zabbix.rb index 81a2eea57..18aa5b70e 100644 --- a/lib/puppet/provider/zabbix.rb +++ b/lib/puppet/provider/zabbix.rb @@ -1,10 +1,5 @@ # zabbix provider type for puppet class Puppet::Provider::Zabbix < Puppet::Provider - # Require the zabbixapi gem - def self.require_zabbix - require 'zabbixapi' - end - # Create the api connection def self.create_connection(zabbix_url, zabbix_user, zabbix_pass, apache_use_ssl) protocol = apache_use_ssl ? 'https' : 'http' @@ -37,7 +32,6 @@ def self.check_host(host, zabbix_url, zabbix_user, zabbix_pass, apache_use_ssl) # Check if proxy exists. When error raised, return false. def self.check_proxy(host, zabbix_url, zabbix_user, zabbix_pass, apache_use_ssl) - require_zabbix zbx = create_connection(zabbix_url, zabbix_user, zabbix_pass, apache_use_ssl) zbx.proxies.get_id(host: host) rescue Puppet::ExecutionFailure diff --git a/lib/puppet/provider/zabbix_application/ruby.rb b/lib/puppet/provider/zabbix_application/ruby.rb index 569218b99..7805df4c4 100644 --- a/lib/puppet/provider/zabbix_application/ruby.rb +++ b/lib/puppet/provider/zabbix_application/ruby.rb @@ -1,8 +1,8 @@ -require File.expand_path(File.join(File.dirname(__FILE__), '..', 'zabbix')) +require_relative '../zabbix' Puppet::Type.type(:zabbix_application).provide(:ruby, parent: Puppet::Provider::Zabbix) do - def connect - self.class.require_zabbix if @resource[:zabbix_url] != '' + confine feature: :zabbixapi + def connect @zbx ||= self.class.create_connection(@resource[:zabbix_url], @resource[:zabbix_user], @resource[:zabbix_pass], @resource[:apache_use_ssl]) @zbx end diff --git a/lib/puppet/provider/zabbix_host/ruby.rb b/lib/puppet/provider/zabbix_host/ruby.rb index 0b9530eb8..fe76623ca 100644 --- a/lib/puppet/provider/zabbix_host/ruby.rb +++ b/lib/puppet/provider/zabbix_host/ruby.rb @@ -1,10 +1,8 @@ -require File.expand_path(File.join(File.dirname(__FILE__), '..', 'zabbix')) +require_relative '../zabbix' Puppet::Type.type(:zabbix_host).provide(:ruby, parent: Puppet::Provider::Zabbix) do - def create - zabbix_url = @resource[:zabbix_url] - - self.class.require_zabbix if zabbix_url != '' + confine feature: :zabbixapi + def create # Set some vars host = @resource[:hostname] ipaddress = @resource[:ipaddress] @@ -77,11 +75,8 @@ def create end def exists? - zabbix_url = @resource[:zabbix_url] - - self.class.require_zabbix if zabbix_url != '' - host = @resource[:hostname] + zabbix_url = @resource[:zabbix_url] zabbix_user = @resource[:zabbix_user] zabbix_pass = @resource[:zabbix_pass] apache_use_ssl = @resource[:apache_use_ssl] @@ -108,11 +103,8 @@ def exists? end def destroy - zabbix_url = @resource[:zabbix_url] - - self.class.require_zabbix if zabbix_url != '' - host = @resource[:hostname] + zabbix_url = @resource[:zabbix_url] zabbix_user = @resource[:zabbix_user] zabbix_pass = @resource[:zabbix_pass] apache_use_ssl = @resource[:apache_use_ssl] diff --git a/lib/puppet/provider/zabbix_hostgroup/ruby.rb b/lib/puppet/provider/zabbix_hostgroup/ruby.rb index 80156e26c..b331893fe 100644 --- a/lib/puppet/provider/zabbix_hostgroup/ruby.rb +++ b/lib/puppet/provider/zabbix_hostgroup/ruby.rb @@ -1,8 +1,6 @@ -require File.expand_path(File.join(File.dirname(__FILE__), '..', 'zabbix')) +require_relative '../zabbix' Puppet::Type.type(:zabbix_hostgroup).provide(:ruby, parent: Puppet::Provider::Zabbix) do def connect - self.class.require_zabbix if @resource[:zabbix_url] != '' - @zbx ||= self.class.create_connection(@resource[:zabbix_url], @resource[:zabbix_user], @resource[:zabbix_pass], @resource[:apache_use_ssl]) @zbx end diff --git a/lib/puppet/provider/zabbix_proxy/ruby.rb b/lib/puppet/provider/zabbix_proxy/ruby.rb index a69a92a19..c39964b92 100644 --- a/lib/puppet/provider/zabbix_proxy/ruby.rb +++ b/lib/puppet/provider/zabbix_proxy/ruby.rb @@ -1,12 +1,8 @@ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'zabbix')) Puppet::Type.type(:zabbix_proxy).provide(:ruby, parent: Puppet::Provider::Zabbix) do - def create - zabbix_url = @resource[:zabbix_url] - - # Check if we have an zabbix_url. If so, we are about - # to run on the zabbix-server. - self.class.require_zabbix if zabbix_url != '' + confine feature: :zabbixapi + def create # Set some vars host = @resource[:hostname] ipaddress = @resource[:ipaddress] @@ -17,6 +13,7 @@ def create use_ip = @resource[:use_ip] port = @resource[:port] templates = @resource[:templates] + zabbix_url = @resource[:zabbix_url] zabbix_user = @resource[:zabbix_user] zabbix_pass = @resource[:zabbix_pass] apache_use_ssl = @resource[:apache_use_ssl] @@ -50,11 +47,8 @@ def create end def exists? - zabbix_url = @resource[:zabbix_url] - - self.class.require_zabbix if zabbix_url != '' - host = @resource[:hostname] + zabbix_url = @resource[:zabbix_url] zabbix_user = @resource[:zabbix_user] zabbix_pass = @resource[:zabbix_pass] apache_use_ssl = @resource[:apache_use_ssl] diff --git a/lib/puppet/provider/zabbix_template/ruby.rb b/lib/puppet/provider/zabbix_template/ruby.rb index 6bf0edcaa..65e029a79 100644 --- a/lib/puppet/provider/zabbix_template/ruby.rb +++ b/lib/puppet/provider/zabbix_template/ruby.rb @@ -1,7 +1,8 @@ -require File.expand_path(File.join(File.dirname(__FILE__), '..', 'zabbix')) +require_relative '../zabbix' Puppet::Type.type(:zabbix_template).provide(:ruby, parent: Puppet::Provider::Zabbix) do + confine feature: :zabbixapi + def connect - self.class.require_zabbix if @resource[:zabbix_url] != '' @zbx ||= self.class.create_connection(@resource[:zabbix_url], @resource[:zabbix_user], @resource[:zabbix_pass], @resource[:apache_use_ssl]) @zbx end diff --git a/lib/puppet/provider/zabbix_template_host/ruby.rb b/lib/puppet/provider/zabbix_template_host/ruby.rb index 20afb7bae..4626dfcaf 100644 --- a/lib/puppet/provider/zabbix_template_host/ruby.rb +++ b/lib/puppet/provider/zabbix_template_host/ruby.rb @@ -1,5 +1,6 @@ -require File.expand_path(File.join(File.dirname(__FILE__), '..', 'zabbix')) +require_relative '../zabbix' Puppet::Type.type(:zabbix_template_host).provide(:ruby, parent: Puppet::Provider::Zabbix) do + confine feature: :zabbixapi def template_name @template_name ||= @resource[:name].split('@')[0] end @@ -19,8 +20,6 @@ def hostid end def connect - self.class.require_zabbix if @resource[:zabbix_url] != '' - @zbx ||= self.class.create_connection(@resource[:zabbix_url], @resource[:zabbix_user], @resource[:zabbix_pass], @resource[:apache_use_ssl]) @zbx end diff --git a/lib/puppet/provider/zabbix_userparameters/ruby.rb b/lib/puppet/provider/zabbix_userparameters/ruby.rb index 10ced2d12..2e27a43ee 100644 --- a/lib/puppet/provider/zabbix_userparameters/ruby.rb +++ b/lib/puppet/provider/zabbix_userparameters/ruby.rb @@ -1,12 +1,11 @@ -require File.expand_path(File.join(File.dirname(__FILE__), '..', 'zabbix')) +require_relative '../zabbix' Puppet::Type.type(:zabbix_userparameters).provide(:ruby, parent: Puppet::Provider::Zabbix) do - def create - zabbix_url = @resource[:zabbix_url] - - self.class.require_zabbix if zabbix_url != '' + confine feature: :zabbixapi + def create host = @resource[:hostname] template = @resource[:template] + zabbix_url = @resource[:zabbix_url] zabbix_user = @resource[:zabbix_user] zabbix_pass = @resource[:zabbix_pass] apache_use_ssl = @resource[:apache_use_ssl] @@ -23,12 +22,9 @@ def create end def exists? - zabbix_url = @resource[:zabbix_url] - - self.class.require_zabbix if zabbix_url != '' - host = @resource[:hostname] template = @resource[:template] + zabbix_url = @resource[:zabbix_url] zabbix_user = @resource[:zabbix_user] zabbix_pass = @resource[:zabbix_pass] apache_use_ssl = @resource[:apache_use_ssl] @@ -37,7 +33,7 @@ def exists? end def destroy - zabbix_url = @resource[:zabbix_url] - self.class.require_zabbix if zabbix_url != '' + # TODO: Implement?! + true end end