summaryrefslogtreecommitdiffstats
path: root/lib/puppet/util/nagios_maker.rb
blob: 59ed820f9584b3dce53005260d6f2447f98627d3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
require 'puppet/external/nagios'
require 'puppet/external/nagios/base'
require 'puppet/provider/naginator'

module Puppet::Util::NagiosMaker
  # Create a new nagios type, using all of the parameters
  # from the parser.
  def self.create_nagios_type(name)
    name = name.to_sym
    full_name = ("nagios_#{name}").to_sym

    raise(Puppet::DevError, "No nagios type for #{name}") unless nagtype = Nagios::Base.type(name)

    type = Puppet::Type.newtype(full_name) {}

    type.ensurable

    type.newparam(nagtype.namevar, :namevar => true) do
      desc "The name parameter for Nagios type #{nagtype.name}"
    end

    # We deduplicate the parameters because it makes sense to allow Naginator to have dupes.
    nagtype.parameters.uniq.each do |param|
      next if param == nagtype.namevar

      # We can't turn these parameter names into constants, so at least for now they aren't
      # supported.
      next if param.to_s =~ /^[0-9]/

      type.newproperty(param) do
        desc "Nagios configuration file parameter."
      end
    end

    type.newproperty(:target) do
      desc 'target'

      defaultto do
        resource.class.defaultprovider.default_target
      end
    end

    target = "/etc/nagios/#{full_name.to_s}.cfg"
    provider = type.provide(:naginator, :parent => Puppet::Provider::Naginator, :default_target => target) {}
    provider.nagios_type

    type.desc "The Nagios type #{name.to_s}.  This resource type is autogenerated using the
      model developed in Naginator_, and all of the Nagios types are generated using the
      same code and the same library.

      This type generates Nagios configuration statements in Nagios-parseable configuration
      files.  By default, the statements will be added to ``#{target}``, but
      you can send them to a different file by setting their ``target`` attribute.

      You can purge Nagios resources using the ``resources`` type, but *only*
      in the default file locations.  This is an architectural limitation.

      .. _naginator: http://projects.reductivelabs.com/projects/naginator
    "
  end
end