summaryrefslogtreecommitdiffstats
path: root/lib/puppet/provider
diff options
context:
space:
mode:
authorLuke Kanies <luke@madstop.com>2007-12-27 13:59:32 -0600
committerLuke Kanies <luke@madstop.com>2007-12-27 13:59:32 -0600
commit9b1d0366cbd92e3982e6db247786b5d5a0348eae (patch)
tree9397597c7bbd49232efda78231bb2c8ffda85f13 /lib/puppet/provider
parentc4ed43c2a1ad9ab865e3da6b8b7fad28222c3451 (diff)
downloadpuppet-9b1d0366cbd92e3982e6db247786b5d5a0348eae.tar.gz
puppet-9b1d0366cbd92e3982e6db247786b5d5a0348eae.tar.xz
puppet-9b1d0366cbd92e3982e6db247786b5d5a0348eae.zip
Adding the first round of Nagios code. There are no
tests here, but at least a single Nagios type is functional. Now I need to do some metaprogramming so this works for all nagios types, and add tests for the whole thing.
Diffstat (limited to 'lib/puppet/provider')
-rw-r--r--lib/puppet/provider/naginator.rb55
-rw-r--r--lib/puppet/provider/nagios_command/naginator.rb4
-rwxr-xr-xlib/puppet/provider/parsedfile.rb8
3 files changed, 66 insertions, 1 deletions
diff --git a/lib/puppet/provider/naginator.rb b/lib/puppet/provider/naginator.rb
new file mode 100644
index 000000000..8e8a3d65e
--- /dev/null
+++ b/lib/puppet/provider/naginator.rb
@@ -0,0 +1,55 @@
+# Created by Luke Kanies on 2007-11-27.
+# Copyright (c) 2007. All rights reserved.
+
+require 'puppet'
+require 'puppet/provider/parsedfile'
+require 'puppet/external/nagios'
+
+# The base class for all Naginator providers.
+class Puppet::Provider::Naginator < Puppet::Provider::ParsedFile
+ # Retrieve the associated class from Nagios::Base.
+ def self.nagios_type
+ unless defined?(@nagios_type) and @nagios_type
+ name = resource_type.name.to_s.sub(/^nagios_/, '')
+ unless @nagios_type = Nagios::Base.type(name.to_sym)
+ raise Puppet::DevError, "Could not find nagios type '%s'" % name
+ end
+
+ # And add our 'ensure' settings, since they aren't a part of
+ # Naginator by default
+ @nagios_type.send(:attr_accessor, :ensure, :target, :on_disk)
+ end
+ @nagios_type
+ end
+
+ def self.parse(text)
+ Nagios::Parser.new.parse(text)
+ end
+
+ def self.to_file(records)
+ header + records.collect { |record| record.to_s }.join("\n")
+ end
+
+ def self.skip_record?(record)
+ false
+ end
+
+ def self.valid_attr?(klass, attr_name)
+ nagios_type.parameters.include?(attr_name)
+ end
+
+ def initialize(resource = nil)
+ if resource.is_a?(Nagios::Base)
+ # We don't use a duplicate here, because some providers (ParsedFile, at least)
+ # use the hash here for later events.
+ @property_hash = resource
+ elsif resource
+ @resource = resource if resource
+ # LAK 2007-05-09: Keep the model stuff around for backward compatibility
+ @model = resource
+ @property_hash = self.class.nagios_type.new
+ else
+ @property_hash = self.class.nagios_type.new
+ end
+ end
+end
diff --git a/lib/puppet/provider/nagios_command/naginator.rb b/lib/puppet/provider/nagios_command/naginator.rb
new file mode 100644
index 000000000..c62232426
--- /dev/null
+++ b/lib/puppet/provider/nagios_command/naginator.rb
@@ -0,0 +1,4 @@
+require 'puppet/provider/naginator'
+
+Puppet::Type.type(:nagios_command).provide(:naginator, :parent => Puppet::Provider::Naginator, :default_target => '/tmp/nagios/nagios_command.cfg') do
+end
diff --git a/lib/puppet/provider/parsedfile.rb b/lib/puppet/provider/parsedfile.rb
index 76654c4f4..b4a4a3b91 100755
--- a/lib/puppet/provider/parsedfile.rb
+++ b/lib/puppet/provider/parsedfile.rb
@@ -180,7 +180,7 @@ class Puppet::Provider::ParsedFile < Puppet::Provider
matchers = resources.dup
@records.each do |record|
# Skip things like comments and blank lines
- next if record_type(record[:record_type]).text?
+ next if skip_record?(record)
if name = record[:name] and resource = resources[name]
resource.provider = new(record)
@@ -243,6 +243,12 @@ class Puppet::Provider::ParsedFile < Puppet::Provider
end
end
+ # Should we skip the record? Basically, we skip text records.
+ # This is only here so subclasses can override it.
+ def self.skip_record?(record)
+ record_type(record[:record_type]).text?
+ end
+
# Initialize the object if necessary.
def self.target_object(target)
@target_objects[target] ||= filetype.new(target)