diff options
Diffstat (limited to 'lib/puppet/provider')
-rw-r--r-- | lib/puppet/provider/naginator.rb | 55 | ||||
-rwxr-xr-x | lib/puppet/provider/parsedfile.rb | 8 |
2 files changed, 62 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/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) |