| Class | Nagios::Base |
| In: |
lib/puppet/external/nagios/base.rb
|
| Parent: | Object |
The base class for all of our Nagios object types. Everything else is mostly just data.
| att | [RW] | |
| derivatives | [RW] | |
| ldapbase | [RW] | |
| name | [RW] | |
| namevar | [W] | |
| ocs | [RW] | |
| parameters | [RW] | |
| superior | [R] |
Attach one class to another.
# File lib/puppet/external/nagios/base.rb, line 20
20: def self.attach(hash)
21: @attach ||= {}
22: hash.each do |n, v| @attach[n] = v end
23: end
Create a new instance of a given class.
# File lib/puppet/external/nagios/base.rb, line 40
40: def self.create(name, args = {})
41: name = name.intern if name.is_a? String
42:
43: if @types.include?(name)
44: @types[name].new(args)
45: else
46: raise UnknownNagiosType, "Unknown type %s" % name
47: end
48: end
Uncamelcase a parameter.
# File lib/puppet/external/nagios/base.rb, line 33
33: def self.decamelcase(param)
34: param.gsub(/[A-Z]/) do |match|
35: "_" + match.downcase
36: end
37: end
Return the namevar for the canonical name.
# File lib/puppet/external/nagios/base.rb, line 74
74: def self.namevar
75: if defined? @namevar
76: return @namevar
77: else
78: if parameter?(:name)
79: return :name
80: elsif tmp = (self.name.to_s + "_name").intern and parameter?(tmp)
81: @namevar = tmp
82: return @namevar
83: else
84: raise "Type %s has no name var" % self.name
85: end
86: end
87: end
Initialize our object, optionally with a list of parameters.
# File lib/puppet/external/nagios/base.rb, line 193
193: def initialize(args = {})
194: @parameters = {}
195:
196: args.each { |param,value|
197: self[param] = value
198: }
199: if @namevar == :_naginator_name
200: self['_naginator_name'] = self['name']
201: end
202: end
# File lib/puppet/external/nagios/base.rb, line 90
90: def self.newtype(name, &block)
91: name = name.intern if name.is_a? String
92:
93: @types ||= {}
94:
95: # Create the class, with the correct name.
96: t = Class.new(self)
97: t.name = name
98:
99: # Everyone gets this. There should probably be a better way, and I
100: # should probably hack the attribute system to look things up based on
101: # this "use" setting, but, eh.
102: t.parameters = [:use]
103:
104: const_set(name.to_s.capitalize,t)
105:
106: # Evaluate the passed block. This should usually define all of the work.
107: t.class_eval(&block)
108:
109: @types[name] = t
110: end
Define both the normal case and camelcase method for a parameter
# File lib/puppet/external/nagios/base.rb, line 113
113: def self.paramattr(name)
114: camel = camelcase(name)
115: param = name
116:
117: [name, camel].each do |method|
118: define_method(method) do
119: @parameters[param]
120: end
121:
122: define_method(method.to_s + "=") do |value|
123: @parameters[param] = value
124: end
125: end
126:
127: end
Is the specified name a valid parameter?
# File lib/puppet/external/nagios/base.rb, line 130
130: def self.parameter?(name)
131: name = name.intern if name.is_a? String
132: return @parameters.include?(name)
133: end
Set the valid parameters for this class
# File lib/puppet/external/nagios/base.rb, line 142
142: def self.setparameters(*array)
143: @parameters += array
144: end
Set the superior ldap object class. Seems silly to include this in this class, but, eh.
# File lib/puppet/external/nagios/base.rb, line 148
148: def self.setsuperior(name)
149: @superior = name
150: end
Whether a given parameter is suppressed.
# File lib/puppet/external/nagios/base.rb, line 159
159: def self.suppress?(name)
160: defined? @suppress and @suppress.include?(name)
161: end
Convenience methods.
# File lib/puppet/external/nagios/base.rb, line 176
176: def [](param)
177: send(param)
178: end
Convenience methods.
# File lib/puppet/external/nagios/base.rb, line 181
181: def []=(param,value)
182: send(param.to_s + "=", value)
183: end
Iterate across all ofour set parameters.
# File lib/puppet/external/nagios/base.rb, line 186
186: def each
187: @parameters.each { |param,value|
188: yield(param,value)
189: }
190: end
Handle parameters like attributes.
# File lib/puppet/external/nagios/base.rb, line 205
205: def method_missing(mname, *args)
206: pname = mname.to_s
207: pname.sub!(/=/, '')
208:
209: if self.class.parameter?(pname)
210: if pname =~ /A-Z/
211: pname = self.class.decamelcase(pname)
212: end
213: self.class.paramattr(pname)
214:
215: # Now access the parameters directly, to make it at least less
216: # likely we'll end up in an infinite recursion.
217: if mname.to_s =~ /=$/
218: @parameters[pname] = *args
219: else
220: return @parameters[mname]
221: end
222: else
223: super
224: end
225: end
This is probably a bad idea.
# File lib/puppet/external/nagios/base.rb, line 233
233: def name=(value)
234: unless self.class.namevar.to_s == "name"
235: send(self.class.namevar.to_s + "=", value)
236: end
237: end
# File lib/puppet/external/nagios/base.rb, line 239
239: def namevar
240: return (self.type + "_name").intern
241: end
# File lib/puppet/external/nagios/base.rb, line 243
243: def parammap(param)
244: unless defined? @map
245: map = {
246: self.namevar => "cn"
247: }
248: if self.class.map
249: map.update(self.class.map)
250: end
251: end
252: if map.include?(param)
253: return map[param]
254: else
255: return "nagios-" + param.id2name.gsub(/_/,'-')
256: end
257: end
# File lib/puppet/external/nagios/base.rb, line 259
259: def parent
260: unless defined? self.class.attached
261: puts "Duh, you called parent on an unattached class"
262: return
263: end
264:
265: klass,param = self.class.attached
266: unless @parameters.include?(param)
267: puts "Huh, no attachment param"
268: return
269: end
270: klass[@parameters[param]]
271: end
okay, this sucks how do i get my list of ocs?
# File lib/puppet/external/nagios/base.rb, line 275
275: def to_ldif
276: base = self.class.ldapbase
277: str = self.dn + "\n"
278: ocs = Array.new
279: if self.class.ocs
280: # i'm storing an array, so i have to flatten it and stuff
281: kocs = self.class.ocs
282: ocs.push(*kocs)
283: end
284: ocs.push "top"
285: oc = self.class.to_s
286: oc.sub!(/Nagios/,'nagios')
287: oc.sub!(/::/,'')
288: ocs.push oc
289: ocs.each { |oc|
290: str += "objectclass: " + oc + "\n"
291: }
292: @parameters.each { |name,value|
293: if self.class.suppress.include?(name)
294: next
295: end
296: ldapname = self.parammap(name)
297: str += ldapname + ": " + value + "\n"
298: }
299: str += "\n"
300: str
301: end
# File lib/puppet/external/nagios/base.rb, line 303
303: def to_s
304: str = "define #{self.type} {\n"
305:
306: self.each { |param,value|
307: str += %{\t%-30s %s\n} % [ param,
308: if value.is_a? Array
309: value.join(",")
310: else
311: value
312: end
313: ]
314: }
315:
316: str += "}\n"
317:
318: str
319: end