puppet 0.24.1 → 0.24.2
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of puppet might be problematic. Click here for more details.
- data/CHANGELOG +94 -0
- data/Rakefile +0 -4
- data/bin/puppet +18 -10
- data/bin/puppetd +1 -1
- data/bin/puppetdoc +14 -4
- data/bin/puppetmasterd +1 -1
- data/bin/puppetrun +3 -8
- data/bin/ralsh +12 -11
- data/conf/freebsd/puppetd +1 -1
- data/conf/freebsd/puppetmasterd +1 -1
- data/conf/gentoo/puppet/puppet.conf +29 -0
- data/conf/namespaceauth.conf +20 -0
- data/conf/redhat/puppet.spec +4 -1
- data/conf/solaris/smf/puppetd.xml +1 -1
- data/conf/solaris/smf/puppetmasterd.xml +1 -1
- data/conf/suse/puppet.spec +10 -8
- data/examples/root/etc/puppet/{puppetmasterd.conf → puppet.conf} +6 -3
- data/ext/logcheck/puppet +7 -0
- data/ext/puppet-test +28 -5
- data/lib/puppet.rb +2 -1
- data/lib/puppet/defaults.rb +12 -5
- data/lib/puppet/dsl.rb +43 -45
- data/lib/puppet/external/{gratr/rdot.rb → dot.rb} +0 -0
- data/lib/puppet/external/nagios.rb +50 -0
- data/lib/puppet/external/nagios/base.rb +421 -0
- data/lib/puppet/external/nagios/parser.rb +816 -0
- data/lib/puppet/file_serving/file_base.rb +16 -3
- data/lib/puppet/file_serving/metadata.rb +29 -11
- data/lib/puppet/indirector/terminus.rb +1 -0
- data/lib/puppet/metatype/closure.rb +4 -0
- data/lib/puppet/metatype/evaluation.rb +2 -17
- data/lib/puppet/metatype/metaparams.rb +1 -1
- data/lib/puppet/network.rb +3 -0
- data/lib/puppet/network/client.rb +4 -5
- data/lib/puppet/network/client/master.rb +10 -7
- data/lib/puppet/network/handler/fileserver.rb +22 -45
- data/lib/puppet/network/http_pool.rb +3 -0
- data/lib/puppet/network/http_server/mongrel.rb +7 -1
- data/lib/puppet/network/http_server/webrick.rb +4 -3
- data/lib/puppet/network/xmlrpc/client.rb +12 -1
- data/lib/puppet/node/catalog.rb +51 -40
- data/lib/puppet/parser/ast.rb +27 -49
- data/lib/puppet/parser/ast/astarray.rb +5 -24
- data/lib/puppet/parser/ast/caseopt.rb +4 -4
- data/lib/puppet/parser/ast/casestatement.rb +4 -5
- data/lib/puppet/parser/ast/collection.rb +3 -5
- data/lib/puppet/parser/ast/collexpr.rb +3 -5
- data/lib/puppet/parser/ast/definition.rb +148 -159
- data/lib/puppet/parser/ast/else.rb +2 -3
- data/lib/puppet/parser/ast/function.rb +3 -10
- data/lib/puppet/parser/ast/hostclass.rb +66 -59
- data/lib/puppet/parser/ast/ifstatement.rb +4 -5
- data/lib/puppet/parser/ast/leaf.rb +6 -6
- data/lib/puppet/parser/ast/node.rb +26 -58
- data/lib/puppet/parser/ast/resource.rb +5 -7
- data/lib/puppet/parser/ast/resource_defaults.rb +2 -4
- data/lib/puppet/parser/ast/resource_override.rb +4 -6
- data/lib/puppet/parser/ast/resource_reference.rb +2 -4
- data/lib/puppet/parser/ast/resourceparam.rb +2 -4
- data/lib/puppet/parser/ast/selector.rb +5 -6
- data/lib/puppet/parser/ast/tag.rb +2 -4
- data/lib/puppet/parser/ast/vardef.rb +3 -4
- data/lib/puppet/parser/collector.rb +5 -5
- data/lib/puppet/parser/{compile.rb → compiler.rb} +69 -107
- data/lib/puppet/parser/functions.rb +3 -3
- data/lib/puppet/parser/interpreter.rb +32 -23
- data/lib/puppet/parser/lexer.rb +391 -282
- data/lib/puppet/parser/parser.rb +5 -4
- data/lib/puppet/parser/parser_support.rb +3 -6
- data/lib/puppet/parser/resource.rb +24 -36
- data/lib/puppet/parser/resource/param.rb +1 -1
- data/lib/puppet/parser/resource/reference.rb +7 -3
- data/lib/puppet/parser/scope.rb +12 -7
- data/lib/puppet/parser/templatewrapper.rb +1 -1
- data/lib/puppet/pgraph.rb +9 -98
- data/lib/puppet/provider/interface/redhat.rb +65 -65
- data/lib/puppet/provider/mount/parsed.rb +1 -1
- data/lib/puppet/provider/naginator.rb +55 -0
- data/lib/puppet/provider/nameservice/directoryservice.rb +6 -7
- data/lib/puppet/provider/package/fink.rb +0 -2
- data/lib/puppet/provider/package/gem.rb +9 -5
- data/lib/puppet/provider/package/openbsd.rb +1 -1
- data/lib/puppet/provider/package/pkgdmg.rb +3 -8
- data/lib/puppet/provider/package/portage.rb +4 -4
- data/lib/puppet/provider/package/yumhelper.py +8 -6
- data/lib/puppet/provider/parsedfile.rb +7 -1
- data/lib/puppet/provider/service/debian.rb +2 -0
- data/lib/puppet/provider/service/gentoo.rb +4 -0
- data/lib/puppet/provider/service/init.rb +1 -1
- data/lib/puppet/provider/sshkey/parsed.rb +2 -0
- data/lib/puppet/provider/user/useradd.rb +1 -1
- data/lib/puppet/rails.rb +4 -0
- data/lib/puppet/rails/database/001_add_created_at_to_all_tables.rb +17 -0
- data/lib/puppet/rails/fact_value.rb +4 -0
- data/lib/puppet/rails/host.rb +1 -2
- data/lib/puppet/rails/param_value.rb +4 -0
- data/lib/puppet/rails/resource_tag.rb +4 -0
- data/lib/puppet/rails/source_file.rb +4 -1
- data/lib/puppet/relationship.rb +5 -1
- data/lib/puppet/reports/tagmail.rb +12 -1
- data/lib/puppet/resource_reference.rb +1 -1
- data/lib/puppet/simple_graph.rb +78 -11
- data/lib/puppet/sslcertificates.rb +1 -1
- data/lib/puppet/sslcertificates/ca.rb +3 -3
- data/lib/puppet/transaction.rb +7 -4
- data/lib/puppet/transportable.rb +1 -1
- data/lib/puppet/type.rb +3 -10
- data/lib/puppet/type/cron.rb +18 -0
- data/lib/puppet/type/exec.rb +18 -12
- data/lib/puppet/type/{pfile.rb → file.rb} +66 -84
- data/lib/puppet/type/file/checksum.rb +271 -0
- data/lib/puppet/type/{pfile → file}/content.rb +10 -15
- data/lib/puppet/type/{pfile → file}/ensure.rb +15 -8
- data/lib/puppet/type/{pfile → file}/group.rb +0 -0
- data/lib/puppet/type/{pfile → file}/mode.rb +0 -0
- data/lib/puppet/type/{pfile → file}/owner.rb +0 -0
- data/lib/puppet/type/{pfile → file}/source.rb +34 -48
- data/lib/puppet/type/{pfile → file}/target.rb +0 -0
- data/lib/puppet/type/{pfile → file}/type.rb +0 -0
- data/lib/puppet/type/{pfilebucket.rb → filebucket.rb} +0 -0
- data/lib/puppet/type/host.rb +13 -0
- data/lib/puppet/type/mailalias.rb +1 -1
- data/lib/puppet/type/nagios_command.rb +3 -0
- data/lib/puppet/type/nagios_contact.rb +3 -0
- data/lib/puppet/type/nagios_contactgroup.rb +3 -0
- data/lib/puppet/type/nagios_host.rb +3 -0
- data/lib/puppet/type/nagios_hostextinfo.rb +3 -0
- data/lib/puppet/type/nagios_hostgroup.rb +3 -0
- data/lib/puppet/type/nagios_hostgroupescalation.rb +3 -0
- data/lib/puppet/type/nagios_service.rb +3 -0
- data/lib/puppet/type/nagios_servicedependency.rb +3 -0
- data/lib/puppet/type/nagios_serviceescalation.rb +3 -0
- data/lib/puppet/type/nagios_serviceextinfo.rb +3 -0
- data/lib/puppet/type/nagios_timeperiod.rb +3 -0
- data/lib/puppet/type/package.rb +4 -12
- data/lib/puppet/type/service.rb +9 -0
- data/lib/puppet/type/sshkey.rb +3 -3
- data/lib/puppet/util/autoload.rb +5 -5
- data/lib/puppet/util/checksums.rb +51 -13
- data/lib/puppet/util/constant_inflector.rb +14 -0
- data/lib/puppet/util/filetype.rb +1 -1
- data/lib/puppet/util/graph.rb +3 -9
- data/lib/puppet/util/nagios_maker.rb +57 -0
- data/lib/puppet/util/settings.rb +19 -16
- data/lib/puppet/util/tagging.rb +39 -0
- data/test/executables/puppetbin.rb +17 -0
- data/test/language/ast.rb +8 -58
- data/test/language/ast/casestatement.rb +3 -3
- data/test/language/ast/resource.rb +6 -7
- data/test/language/ast/resource_reference.rb +12 -12
- data/test/language/ast/selector.rb +2 -2
- data/test/language/ast/variable.rb +2 -2
- data/test/language/functions.rb +24 -24
- data/test/language/parser.rb +20 -8
- data/test/language/resource.rb +5 -42
- data/test/language/scope.rb +21 -37
- data/test/language/snippets.rb +7 -0
- data/test/lib/puppettest.rb +28 -14
- data/test/lib/puppettest/parsertesting.rb +10 -10
- data/test/lib/puppettest/support/resources.rb +1 -1
- data/test/network/client/master.rb +10 -0
- data/test/network/handler/fileserver.rb +51 -49
- data/test/network/server/webrick.rb +1 -1
- data/test/other/dsl.rb +3 -4
- data/test/other/transactions.rb +6 -4
- data/test/rails/ast.rb +2 -2
- data/test/rails/configuration.rb +1 -1
- data/test/rails/railsparameter.rb +2 -0
- data/test/rails/railsresource.rb +1 -0
- data/test/ral/manager/type.rb +4 -4
- data/test/ral/providers/cron/crontab.rb +3 -1
- data/test/ral/providers/package.rb +1 -1
- data/test/ral/{types → type}/basic.rb +2 -2
- data/test/ral/{types → type}/cron.rb +0 -0
- data/test/ral/{types → type}/exec.rb +42 -2
- data/test/ral/{types → type}/file.rb +34 -79
- data/test/ral/{types → type}/file/target.rb +0 -0
- data/test/ral/{types → type}/filebucket.rb +0 -0
- data/test/ral/{types → type}/fileignoresource.rb +0 -0
- data/test/ral/{types → type}/filesources.rb +8 -27
- data/test/ral/{types → type}/group.rb +0 -0
- data/test/ral/{types → type}/host.rb +16 -0
- data/test/ral/{types → type}/mailalias.rb +0 -0
- data/test/ral/{types → type}/parameter.rb +0 -0
- data/test/ral/{types → type}/port.rb +0 -0
- data/test/ral/{types → type}/property.rb +0 -0
- data/test/ral/{types → type}/resources.rb +0 -0
- data/test/ral/{types → type}/service.rb +0 -0
- data/test/ral/{types → type}/sshkey.rb +0 -0
- data/test/ral/{types → type}/tidy.rb +1 -0
- data/test/ral/{types → type}/user.rb +0 -0
- data/test/ral/{types → type}/yumrepo.rb +0 -0
- data/test/ral/{types → type}/zone.rb +0 -0
- data/test/util/autoload.rb +24 -5
- metadata +60 -107
- data/conf/gentoo/puppet/puppetca.conf +0 -29
- data/conf/gentoo/puppet/puppetd.conf +0 -29
- data/conf/gentoo/puppet/puppetmasterd.conf +0 -29
- data/examples/root/etc/puppet/puppetd.conf +0 -4
- data/lib/puppet/external/gratr.rb +0 -33
- data/lib/puppet/external/gratr/adjacency_graph.rb +0 -257
- data/lib/puppet/external/gratr/base.rb +0 -34
- data/lib/puppet/external/gratr/biconnected.rb +0 -116
- data/lib/puppet/external/gratr/chinese_postman.rb +0 -123
- data/lib/puppet/external/gratr/common.rb +0 -73
- data/lib/puppet/external/gratr/comparability.rb +0 -92
- data/lib/puppet/external/gratr/digraph.rb +0 -116
- data/lib/puppet/external/gratr/digraph_distance.rb +0 -185
- data/lib/puppet/external/gratr/dot.rb +0 -90
- data/lib/puppet/external/gratr/edge.rb +0 -145
- data/lib/puppet/external/gratr/graph.rb +0 -303
- data/lib/puppet/external/gratr/graph_api.rb +0 -83
- data/lib/puppet/external/gratr/import.rb +0 -44
- data/lib/puppet/external/gratr/labels.rb +0 -90
- data/lib/puppet/external/gratr/maximum_flow.rb +0 -64
- data/lib/puppet/external/gratr/search.rb +0 -409
- data/lib/puppet/external/gratr/strong_components.rb +0 -127
- data/lib/puppet/external/gratr/undirected_graph.rb +0 -153
- data/lib/puppet/rails/external/tagging/acts_as_taggable.rb +0 -62
- data/lib/puppet/rails/external/tagging/init.rb +0 -5
- data/lib/puppet/rails/external/tagging/tag.rb +0 -50
- data/lib/puppet/rails/external/tagging/tagging.rb +0 -12
- data/lib/puppet/rails/puppet_class.rb +0 -6
- data/lib/puppet/reference/node_source.rb +0 -9
- data/lib/puppet/reference/report.rb +0 -21
- data/lib/puppet/type/pfile/checksum.rb +0 -326
- data/test/language/ast/definition.rb +0 -166
- data/test/language/ast/hostclass.rb +0 -184
- data/test/language/compile.rb +0 -569
- data/test/language/lexer.rb +0 -276
- data/test/lib/mocha.rb +0 -19
- data/test/lib/mocha/any_instance_method.rb +0 -35
- data/test/lib/mocha/auto_verify.rb +0 -113
- data/test/lib/mocha/central.rb +0 -35
- data/test/lib/mocha/class_method.rb +0 -62
- data/test/lib/mocha/deprecation.rb +0 -22
- data/test/lib/mocha/exception_raiser.rb +0 -17
- data/test/lib/mocha/expectation.rb +0 -378
- data/test/lib/mocha/expectation_error.rb +0 -6
- data/test/lib/mocha/infinite_range.rb +0 -25
- data/test/lib/mocha/inspect.rb +0 -39
- data/test/lib/mocha/instance_method.rb +0 -8
- data/test/lib/mocha/is_a.rb +0 -9
- data/test/lib/mocha/metaclass.rb +0 -7
- data/test/lib/mocha/missing_expectation.rb +0 -27
- data/test/lib/mocha/mock.rb +0 -207
- data/test/lib/mocha/multiple_yields.rb +0 -20
- data/test/lib/mocha/no_yields.rb +0 -11
- data/test/lib/mocha/object.rb +0 -110
- data/test/lib/mocha/parameter_matchers.rb +0 -9
- data/test/lib/mocha/parameter_matchers/all_of.rb +0 -39
- data/test/lib/mocha/parameter_matchers/any_of.rb +0 -44
- data/test/lib/mocha/parameter_matchers/anything.rb +0 -30
- data/test/lib/mocha/parameter_matchers/has_entry.rb +0 -39
- data/test/lib/mocha/parameter_matchers/has_key.rb +0 -39
- data/test/lib/mocha/parameter_matchers/has_value.rb +0 -39
- data/test/lib/mocha/parameter_matchers/includes.rb +0 -37
- data/test/lib/mocha/pretty_parameters.rb +0 -28
- data/test/lib/mocha/return_values.rb +0 -31
- data/test/lib/mocha/setup_and_teardown.rb +0 -23
- data/test/lib/mocha/single_return_value.rb +0 -24
- data/test/lib/mocha/single_yield.rb +0 -18
- data/test/lib/mocha/standalone.rb +0 -32
- data/test/lib/mocha/stub.rb +0 -18
- data/test/lib/mocha/test_case_adapter.rb +0 -49
- data/test/lib/mocha/yield_parameters.rb +0 -31
data/ext/logcheck/puppet
CHANGED
@@ -13,3 +13,10 @@
|
|
13
13
|
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ puppetd\[[0-9]+\]: Caught (TERM|INT); shutting down$
|
14
14
|
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ puppetd\[[0-9]+\]: Shutting down$
|
15
15
|
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ puppetd\[[0-9]+\]: Restarting with .*$
|
16
|
+
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ puppetd\[[0-9]+\]: Starting catalog run$
|
17
|
+
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ puppetd\[[0-9]+\]: Finished catalog run in [.0-9]+ seconds$
|
18
|
+
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ puppetd\[[0-9]+\]: Loading fact .*$
|
19
|
+
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ puppetd\[[0-9]+\]: Ignoring cache$
|
20
|
+
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ puppetd\[[0-9]+\]: Ignoring --listen on onetime run$
|
21
|
+
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ puppetd\[[0-9]+\]: Retrieving plugins$
|
22
|
+
|
data/ext/puppet-test
CHANGED
@@ -53,6 +53,9 @@
|
|
53
53
|
# list::
|
54
54
|
# List all available tests.
|
55
55
|
#
|
56
|
+
# pause::
|
57
|
+
# Pause before starting test (useful for testing with dtrace).
|
58
|
+
#
|
56
59
|
# repeat::
|
57
60
|
# How many times to perform the test.
|
58
61
|
#
|
@@ -88,7 +91,7 @@
|
|
88
91
|
# Do an initial trap, so that cancels don't get a stack trace.
|
89
92
|
trap(:INT) do
|
90
93
|
$stderr.puts "Cancelling startup"
|
91
|
-
exit(
|
94
|
+
exit(1)
|
92
95
|
end
|
93
96
|
|
94
97
|
require 'puppet'
|
@@ -165,6 +168,12 @@ class Suite
|
|
165
168
|
puts "Running %s %s test" % [@name, test]
|
166
169
|
prepare()
|
167
170
|
|
171
|
+
if $options[:pause]
|
172
|
+
puts "Hit any key to continue"
|
173
|
+
$stdin.readline
|
174
|
+
puts "Continuing with test"
|
175
|
+
end
|
176
|
+
|
168
177
|
if $options[:fork] > 0
|
169
178
|
@forking = true
|
170
179
|
$options[:fork].times {
|
@@ -200,6 +209,17 @@ class Suite
|
|
200
209
|
end
|
201
210
|
end
|
202
211
|
|
212
|
+
Suite.new :parser, "Manifest parsing" do
|
213
|
+
def prepare
|
214
|
+
end
|
215
|
+
|
216
|
+
newtest :parse, "Parsed files" do
|
217
|
+
@parser = Puppet::Parser::Parser.new(:environment => Puppet[:environment])
|
218
|
+
@parser.file = Puppet[:manifest]
|
219
|
+
@parser.parse
|
220
|
+
end
|
221
|
+
end
|
222
|
+
|
203
223
|
Suite.new :catalog, "Catalog handling" do
|
204
224
|
def prepare
|
205
225
|
$args[:cache] = false
|
@@ -325,12 +345,13 @@ end
|
|
325
345
|
|
326
346
|
$cmdargs = [
|
327
347
|
[ "--compile", "-c", GetoptLong::NO_ARGUMENT ],
|
328
|
-
[ "--describe",
|
348
|
+
[ "--describe", GetoptLong::REQUIRED_ARGUMENT ],
|
329
349
|
[ "--retrieve", "-R", GetoptLong::REQUIRED_ARGUMENT ],
|
330
350
|
[ "--fork", GetoptLong::REQUIRED_ARGUMENT ],
|
331
351
|
[ "--fqdn", "-F", GetoptLong::REQUIRED_ARGUMENT ],
|
332
352
|
[ "--suite", "-s", GetoptLong::REQUIRED_ARGUMENT ],
|
333
353
|
[ "--test", "-t", GetoptLong::REQUIRED_ARGUMENT ],
|
354
|
+
[ "--pause", "-p", GetoptLong::NO_ARGUMENT ],
|
334
355
|
[ "--repeat", "-r", GetoptLong::REQUIRED_ARGUMENT ],
|
335
356
|
[ "--debug", "-d", GetoptLong::NO_ARGUMENT ],
|
336
357
|
[ "--help", "-h", GetoptLong::NO_ARGUMENT ],
|
@@ -340,14 +361,14 @@ $cmdargs = [
|
|
340
361
|
]
|
341
362
|
|
342
363
|
# Add all of the config parameters as valid $options.
|
343
|
-
Puppet.
|
364
|
+
Puppet.settings.addargs($cmdargs)
|
344
365
|
Puppet::Util::Log.newdestination(:console)
|
345
366
|
|
346
367
|
result = GetoptLong.new(*$cmdargs)
|
347
368
|
|
348
369
|
$args = {}
|
349
370
|
|
350
|
-
$options = {:repeat => 1, :fork => 0}
|
371
|
+
$options = {:repeat => 1, :fork => 0, :pause => false}
|
351
372
|
|
352
373
|
begin
|
353
374
|
explicit_waitforcert = false
|
@@ -399,6 +420,8 @@ begin
|
|
399
420
|
$options[:test] = arg.intern
|
400
421
|
when "--file"
|
401
422
|
$options[:file] = arg
|
423
|
+
when "--pause"
|
424
|
+
$options[:pause] = true
|
402
425
|
when "--list"
|
403
426
|
Suite.suites.sort { |a,b| a.to_s <=> b.to_s }.each do |suite_name|
|
404
427
|
suite = Suite[suite_name]
|
@@ -407,7 +430,7 @@ begin
|
|
407
430
|
end
|
408
431
|
exit(0)
|
409
432
|
else
|
410
|
-
Puppet.
|
433
|
+
Puppet.settings.handlearg(opt, arg)
|
411
434
|
end
|
412
435
|
}
|
413
436
|
rescue GetoptLong::InvalidOption => detail
|
data/lib/puppet.rb
CHANGED
@@ -25,7 +25,7 @@ require 'puppet/util/suidmanager'
|
|
25
25
|
# it's also a place to find top-level commands like 'debug'
|
26
26
|
|
27
27
|
module Puppet
|
28
|
-
PUPPETVERSION = '0.24.
|
28
|
+
PUPPETVERSION = '0.24.2'
|
29
29
|
|
30
30
|
def Puppet.version
|
31
31
|
return PUPPETVERSION
|
@@ -423,6 +423,7 @@ module Puppet
|
|
423
423
|
end
|
424
424
|
|
425
425
|
require 'puppet/type'
|
426
|
+
require 'puppet/network'
|
426
427
|
require 'puppet/module'
|
427
428
|
require 'puppet/util/storage'
|
428
429
|
require 'puppet/parser/interpreter'
|
data/lib/puppet/defaults.rb
CHANGED
@@ -66,7 +66,11 @@ module Puppet
|
|
66
66
|
:owner => "root",
|
67
67
|
:desc => "Where SSL certificates are kept."
|
68
68
|
},
|
69
|
-
:rundir => {
|
69
|
+
:rundir => {
|
70
|
+
:default => rundir,
|
71
|
+
:mode => 01777,
|
72
|
+
:owner => "$user",
|
73
|
+
:group => "$group",
|
70
74
|
:desc => "Where Puppet PID files are kept."
|
71
75
|
},
|
72
76
|
:genconfig => [false,
|
@@ -136,8 +140,6 @@ module Puppet
|
|
136
140
|
:show_diff => [false, "Whether to print a contextual diff when files are being replaced. The diff
|
137
141
|
is printed on stdout, so this option is meaningless unless you are running Puppet interactively.
|
138
142
|
This feature currently requires the ``diff/lcs`` Ruby library."],
|
139
|
-
:yamldir => {:default => "$vardir/yaml", :owner => "$user", :group => "$user", :mode => "750",
|
140
|
-
:desc => "The directory in which YAML data is stored, usually in a subdirectory."},
|
141
143
|
:daemonize => { :default => true,
|
142
144
|
:desc => "Send the process into the background. This is the default.",
|
143
145
|
:short => "D"
|
@@ -228,7 +230,7 @@ module Puppet
|
|
228
230
|
:owner => "$user",
|
229
231
|
:group => "$group",
|
230
232
|
:mode => 0664,
|
231
|
-
:desc => "The certificate revocation list (CRL) for the CA. Set this to '
|
233
|
+
:desc => "The certificate revocation list (CRL) for the CA. Set this to 'false' if you do not want to use a CRL."
|
232
234
|
},
|
233
235
|
:caprivatedir => { :default => "$cadir/private",
|
234
236
|
:owner => "$user",
|
@@ -305,7 +307,7 @@ module Puppet
|
|
305
307
|
:manifest => ["$manifestdir/site.pp",
|
306
308
|
"The entry-point manifest for puppetmasterd."],
|
307
309
|
:code => ["", "Code to parse directly. This is essentially only used
|
308
|
-
by ``puppet
|
310
|
+
by ``puppet``, and should only be set if you're writing your own Puppet
|
309
311
|
executable"],
|
310
312
|
:masterlog => { :default => "$logdir/puppetmaster.log",
|
311
313
|
:owner => "$user",
|
@@ -668,5 +670,10 @@ module Puppet
|
|
668
670
|
:rrdinterval => ["$runinterval", "How often RRD should expect data.
|
669
671
|
This should match how often the hosts report back to the server."]
|
670
672
|
)
|
673
|
+
|
674
|
+
Puppet.setdefaults(:yaml,
|
675
|
+
:yamldir => {:default => "$vardir/yaml", :owner => "$user", :group => "$user", :mode => "750",
|
676
|
+
:desc => "The directory in which YAML data is stored, usually in a subdirectory."}
|
677
|
+
)
|
671
678
|
end
|
672
679
|
|
data/lib/puppet/dsl.rb
CHANGED
@@ -46,58 +46,56 @@
|
|
46
46
|
#
|
47
47
|
# apply
|
48
48
|
|
49
|
-
|
50
|
-
# Provide the actual commands for acting like a language.
|
51
|
-
module DSL
|
52
|
-
def aspect(name, options = {}, &block)
|
53
|
-
Puppet::Aspect.new(name, options, &block)
|
54
|
-
end
|
49
|
+
require 'puppet'
|
55
50
|
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
51
|
+
# Provide the actual commands for acting like a language.
|
52
|
+
module Puppet::DSL
|
53
|
+
def aspect(name, options = {}, &block)
|
54
|
+
Puppet::DSL::Aspect.new(name, options, &block)
|
55
|
+
end
|
56
|
+
|
57
|
+
def acquire(*names)
|
58
|
+
names.each do |name|
|
59
|
+
if aspect = Puppet::DSL::Aspect[name]
|
60
|
+
unless aspect.evaluated?
|
61
|
+
aspect.evaluate
|
64
62
|
end
|
63
|
+
else
|
64
|
+
raise "Could not find aspect %s" % name
|
65
65
|
end
|
66
66
|
end
|
67
|
+
end
|
67
68
|
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
69
|
+
def apply
|
70
|
+
bucket = export()
|
71
|
+
catalog = bucket.to_catalog
|
72
|
+
catalog.apply
|
73
|
+
end
|
73
74
|
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
end
|
79
|
-
end.reject { |a| a.nil? }.flatten.collect do |obj|
|
80
|
-
obj.to_trans
|
75
|
+
def export
|
76
|
+
objects = Puppet::DSL::Aspect.collect do |name, aspect|
|
77
|
+
if aspect.evaluated?
|
78
|
+
aspect.export
|
81
79
|
end
|
82
|
-
|
83
|
-
|
84
|
-
bucket.type = "class"
|
85
|
-
|
86
|
-
return bucket
|
80
|
+
end.reject { |a| a.nil? }.flatten.collect do |obj|
|
81
|
+
obj.to_trans
|
87
82
|
end
|
83
|
+
bucket = Puppet::TransBucket.new(objects)
|
84
|
+
bucket.name = "top"
|
85
|
+
bucket.type = "class"
|
88
86
|
|
89
|
-
|
90
|
-
|
91
|
-
Puppet[:confdir] = File.expand_path("~/.puppet")
|
92
|
-
Puppet[:vardir] = File.expand_path("~/.puppet/var")
|
93
|
-
end
|
94
|
-
Puppet[:user] = Process.uid
|
95
|
-
Puppet[:group] = Process.gid
|
96
|
-
Puppet::Util::Log.newdestination(:console)
|
97
|
-
Puppet::Util::Log.level = :info
|
98
|
-
end
|
87
|
+
return bucket
|
88
|
+
end
|
99
89
|
|
100
|
-
|
90
|
+
def init
|
91
|
+
unless Process.uid == 0
|
92
|
+
Puppet[:confdir] = File.expand_path("~/.puppet")
|
93
|
+
Puppet[:vardir] = File.expand_path("~/.puppet/var")
|
94
|
+
end
|
95
|
+
Puppet[:user] = Process.uid
|
96
|
+
Puppet[:group] = Process.gid
|
97
|
+
Puppet::Util::Log.newdestination(:console)
|
98
|
+
Puppet::Util::Log.level = :info
|
101
99
|
end
|
102
100
|
|
103
101
|
class Aspect
|
@@ -224,10 +222,10 @@ module Puppet
|
|
224
222
|
end
|
225
223
|
|
226
224
|
def newresource(type, name, params = {})
|
227
|
-
if self.is_a?(Puppet::Aspect)
|
225
|
+
if self.is_a?(Puppet::DSL::Aspect)
|
228
226
|
source = self
|
229
227
|
else
|
230
|
-
source = Puppet::Aspect[:main]
|
228
|
+
source = Puppet::DSL::Aspect[:main]
|
231
229
|
end
|
232
230
|
unless obj = @@objects[type][name]
|
233
231
|
obj = Resource.new :title => name, :type => type.name,
|
@@ -262,7 +260,7 @@ module Puppet
|
|
262
260
|
env = nil
|
263
261
|
end
|
264
262
|
@node.parameters = Facter.to_hash
|
265
|
-
@compile = Puppet::Parser::
|
263
|
+
@compile = Puppet::Parser::Compiler.new(@node, @interp.send(:parser, env))
|
266
264
|
@scope = @compile.topscope
|
267
265
|
end
|
268
266
|
@scope
|
File without changes
|
@@ -0,0 +1,50 @@
|
|
1
|
+
#!/usr/local/bin/ruby -w
|
2
|
+
|
3
|
+
#--------------------
|
4
|
+
# A script to retrieve hosts from ldap and create an importable
|
5
|
+
# cfservd file from them
|
6
|
+
#
|
7
|
+
# $Id: nagios.rb,v 1.3 2004/06/09 20:32:46 luke Exp $
|
8
|
+
|
9
|
+
require 'digest/md5'
|
10
|
+
#require 'ldap'
|
11
|
+
require 'puppet/external/nagios/parser.rb'
|
12
|
+
require 'puppet/external/nagios/base.rb'
|
13
|
+
|
14
|
+
module Nagios
|
15
|
+
NAGIOSVERSION = '1.1'
|
16
|
+
# yay colors
|
17
|
+
PINK = "[0;31m"
|
18
|
+
GREEN = "[0;32m"
|
19
|
+
YELLOW = "[0;33m"
|
20
|
+
SLATE = "[0;34m"
|
21
|
+
ORANGE = "[0;35m"
|
22
|
+
BLUE = "[0;36m"
|
23
|
+
NOCOLOR = "[0m"
|
24
|
+
RESET = "[0m"
|
25
|
+
|
26
|
+
def self.version
|
27
|
+
NAGIOSVERSION
|
28
|
+
end
|
29
|
+
|
30
|
+
class Config
|
31
|
+
def Config.import(config)
|
32
|
+
|
33
|
+
text = String.new
|
34
|
+
|
35
|
+
File.open(config) { |file|
|
36
|
+
file.each { |line|
|
37
|
+
text += line
|
38
|
+
}
|
39
|
+
}
|
40
|
+
parser = Nagios::Parser.new
|
41
|
+
return parser.parse(text)
|
42
|
+
end
|
43
|
+
|
44
|
+
def Config.each
|
45
|
+
Nagios::Object.objects.each { |object|
|
46
|
+
yield object
|
47
|
+
}
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,421 @@
|
|
1
|
+
# The base class for all of our Nagios object types. Everything else
|
2
|
+
# is mostly just data.
|
3
|
+
class Nagios::Base
|
4
|
+
|
5
|
+
class UnknownNagiosType < RuntimeError # When an unknown type is asked for by name.
|
6
|
+
end
|
7
|
+
|
8
|
+
include Enumerable
|
9
|
+
|
10
|
+
class << self
|
11
|
+
attr_accessor :parameters, :derivatives, :ocs, :name, :att
|
12
|
+
attr_accessor :ldapbase
|
13
|
+
|
14
|
+
attr_writer :namevar
|
15
|
+
|
16
|
+
attr_reader :superior
|
17
|
+
end
|
18
|
+
|
19
|
+
# Attach one class to another.
|
20
|
+
def self.attach(hash)
|
21
|
+
@attach ||= {}
|
22
|
+
hash.each do |n, v| @attach[n] = v end
|
23
|
+
end
|
24
|
+
|
25
|
+
# Convert a parameter to camelcase
|
26
|
+
def self.camelcase(param)
|
27
|
+
param.gsub(/_./) do |match|
|
28
|
+
match.sub(/_/,'').capitalize
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
# Uncamelcase a parameter.
|
33
|
+
def self.decamelcase(param)
|
34
|
+
param.gsub(/[A-Z]/) do |match|
|
35
|
+
"_" + match.downcase
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
# Create a new instance of a given class.
|
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
|
49
|
+
|
50
|
+
# Yield each type in turn.
|
51
|
+
def self.eachtype
|
52
|
+
@types.each do |name, type|
|
53
|
+
yield [name, type]
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
# Create a mapping.
|
58
|
+
def self.map(hash)
|
59
|
+
@map ||= {}
|
60
|
+
hash.each do |n, v| @map[n] = v end
|
61
|
+
end
|
62
|
+
|
63
|
+
# Return a mapping (or nil) for a param
|
64
|
+
def self.mapping(name)
|
65
|
+
name = name.intern if name.is_a? String
|
66
|
+
if defined? @map
|
67
|
+
@map[name]
|
68
|
+
else
|
69
|
+
nil
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
# Return the namevar for the canonical name.
|
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
|
88
|
+
|
89
|
+
# Create a new type.
|
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
|
111
|
+
|
112
|
+
# Define both the normal case and camelcase method for a parameter
|
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
|
128
|
+
|
129
|
+
# Is the specified name a valid parameter?
|
130
|
+
def self.parameter?(name)
|
131
|
+
name = name.intern if name.is_a? String
|
132
|
+
return @parameters.include?(name)
|
133
|
+
end
|
134
|
+
|
135
|
+
# Manually set the namevar
|
136
|
+
def self.setnamevar(name)
|
137
|
+
name = name.intern if name.is_a? String
|
138
|
+
@namevar = name
|
139
|
+
end
|
140
|
+
|
141
|
+
# Set the valid parameters for this class
|
142
|
+
def self.setparameters(*array)
|
143
|
+
@parameters += array
|
144
|
+
end
|
145
|
+
|
146
|
+
# Set the superior ldap object class. Seems silly to include this
|
147
|
+
# in this class, but, eh.
|
148
|
+
def self.setsuperior(name)
|
149
|
+
@superior = name
|
150
|
+
end
|
151
|
+
|
152
|
+
# Parameters to suppress in output.
|
153
|
+
def self.suppress(name)
|
154
|
+
@suppress ||= []
|
155
|
+
@suppress << name
|
156
|
+
end
|
157
|
+
|
158
|
+
# Whether a given parameter is suppressed.
|
159
|
+
def self.suppress?(name)
|
160
|
+
defined? @suppress and @suppress.include?(name)
|
161
|
+
end
|
162
|
+
|
163
|
+
# Return our name as the string.
|
164
|
+
def self.to_s
|
165
|
+
self.name.to_s
|
166
|
+
end
|
167
|
+
|
168
|
+
# Return a type by name.
|
169
|
+
def self.type(name)
|
170
|
+
name = name.intern if name.is_a? String
|
171
|
+
|
172
|
+
@types[name]
|
173
|
+
end
|
174
|
+
|
175
|
+
# Convenience methods.
|
176
|
+
def [](param)
|
177
|
+
send(param)
|
178
|
+
end
|
179
|
+
|
180
|
+
# Convenience methods.
|
181
|
+
def []=(param,value)
|
182
|
+
send(param.to_s + "=", value)
|
183
|
+
end
|
184
|
+
|
185
|
+
# Iterate across all ofour set parameters.
|
186
|
+
def each
|
187
|
+
@parameters.each { |param,value|
|
188
|
+
yield(param,value)
|
189
|
+
}
|
190
|
+
end
|
191
|
+
|
192
|
+
# Initialize our object, optionally with a list of parameters.
|
193
|
+
def initialize(args = {})
|
194
|
+
@parameters = {}
|
195
|
+
|
196
|
+
args.each { |param,value|
|
197
|
+
self[param] = value
|
198
|
+
}
|
199
|
+
end
|
200
|
+
|
201
|
+
# Handle parameters like attributes.
|
202
|
+
def method_missing(mname, *args)
|
203
|
+
pname = mname.to_s
|
204
|
+
pname.sub!(/=/, '')
|
205
|
+
|
206
|
+
if self.class.parameter?(pname)
|
207
|
+
if pname =~ /A-Z/
|
208
|
+
pname = self.class.decamelcase(pname)
|
209
|
+
end
|
210
|
+
self.class.paramattr(pname)
|
211
|
+
|
212
|
+
# Now access the parameters directly, to make it at least less
|
213
|
+
# likely we'll end up in an infinite recursion.
|
214
|
+
if mname.to_s =~ /=$/
|
215
|
+
@parameters[pname] = *args
|
216
|
+
else
|
217
|
+
return @parameters[mname]
|
218
|
+
end
|
219
|
+
else
|
220
|
+
super
|
221
|
+
end
|
222
|
+
end
|
223
|
+
|
224
|
+
# Retrieve our name, through a bit of redirection.
|
225
|
+
def name
|
226
|
+
send(self.class.namevar)
|
227
|
+
end
|
228
|
+
|
229
|
+
# This is probably a bad idea.
|
230
|
+
def name=(value)
|
231
|
+
send(self.class.namevar.to_s + "=", value)
|
232
|
+
end
|
233
|
+
|
234
|
+
def namevar
|
235
|
+
return (self.type + "_name").intern
|
236
|
+
end
|
237
|
+
|
238
|
+
def parammap(param)
|
239
|
+
unless defined? @map
|
240
|
+
map = {
|
241
|
+
self.namevar => "cn"
|
242
|
+
}
|
243
|
+
if self.class.map
|
244
|
+
map.update(self.class.map)
|
245
|
+
end
|
246
|
+
end
|
247
|
+
if map.include?(param)
|
248
|
+
return map[param]
|
249
|
+
else
|
250
|
+
return "nagios-" + param.id2name.gsub(/_/,'-')
|
251
|
+
end
|
252
|
+
end
|
253
|
+
|
254
|
+
def parent
|
255
|
+
unless defined? self.class.attached
|
256
|
+
puts "Duh, you called parent on an unattached class"
|
257
|
+
return
|
258
|
+
end
|
259
|
+
|
260
|
+
klass,param = self.class.attached
|
261
|
+
unless @parameters.include?(param)
|
262
|
+
puts "Huh, no attachment param"
|
263
|
+
return
|
264
|
+
end
|
265
|
+
klass[@parameters[param]]
|
266
|
+
end
|
267
|
+
|
268
|
+
# okay, this sucks
|
269
|
+
# how do i get my list of ocs?
|
270
|
+
def to_ldif
|
271
|
+
base = self.class.ldapbase
|
272
|
+
str = self.dn + "\n"
|
273
|
+
ocs = Array.new
|
274
|
+
if self.class.ocs
|
275
|
+
# i'm storing an array, so i have to flatten it and stuff
|
276
|
+
kocs = self.class.ocs
|
277
|
+
ocs.push(*kocs)
|
278
|
+
end
|
279
|
+
ocs.push "top"
|
280
|
+
oc = self.class.to_s
|
281
|
+
oc.sub!(/Nagios/,'nagios')
|
282
|
+
oc.sub!(/::/,'')
|
283
|
+
ocs.push oc
|
284
|
+
ocs.each { |oc|
|
285
|
+
str += "objectclass: " + oc + "\n"
|
286
|
+
}
|
287
|
+
@parameters.each { |name,value|
|
288
|
+
if self.class.suppress.include?(name)
|
289
|
+
next
|
290
|
+
end
|
291
|
+
ldapname = self.parammap(name)
|
292
|
+
str += ldapname + ": " + value + "\n"
|
293
|
+
}
|
294
|
+
str += "\n"
|
295
|
+
str
|
296
|
+
end
|
297
|
+
|
298
|
+
def to_s
|
299
|
+
str = "define #{self.type} {\n"
|
300
|
+
|
301
|
+
self.each { |param,value|
|
302
|
+
str += %{\t%-30s %s\n} % [ param,
|
303
|
+
if value.is_a? Array
|
304
|
+
value.join(",")
|
305
|
+
else
|
306
|
+
value
|
307
|
+
end
|
308
|
+
]
|
309
|
+
}
|
310
|
+
|
311
|
+
str += "}\n"
|
312
|
+
|
313
|
+
str
|
314
|
+
end
|
315
|
+
|
316
|
+
# The type of object we are.
|
317
|
+
def type
|
318
|
+
self.class.name
|
319
|
+
end
|
320
|
+
|
321
|
+
# object types
|
322
|
+
newtype :command do
|
323
|
+
setparameters :command_name, :command_line
|
324
|
+
end
|
325
|
+
|
326
|
+
newtype :contact do
|
327
|
+
setparameters :contact_name, :alias, :host_notification_period,
|
328
|
+
:host_notification_commands, :service_notification_period,
|
329
|
+
:service_notification_commands,
|
330
|
+
:email, :pager, :service_notification_options, :host_notification_options
|
331
|
+
|
332
|
+
setsuperior "person"
|
333
|
+
end
|
334
|
+
|
335
|
+
newtype :contactgroup do
|
336
|
+
setparameters :contactgroup_name, :alias, :members
|
337
|
+
end
|
338
|
+
|
339
|
+
newtype :host do
|
340
|
+
setparameters :host_name, :notifications_enabled, :event_handler_enabled,
|
341
|
+
:flap_detection_enabled, :process_perf_data, :retain_status_information,
|
342
|
+
:retain_nonstatus_information, :register, :use, :alias,
|
343
|
+
:address, :check_command, :max_check_attempts, :notification_interval,
|
344
|
+
:notification_period, :notification_options, :checks_enabled,
|
345
|
+
:failure_prediction_enabled, :parents
|
346
|
+
|
347
|
+
setsuperior "person"
|
348
|
+
|
349
|
+
map :address => "ipHostNumber"
|
350
|
+
end
|
351
|
+
|
352
|
+
newtype :hostextinfo do
|
353
|
+
auxiliary = true
|
354
|
+
|
355
|
+
setparameters :host_name, :notes_url, :icon_image, :icon_image_alt, :vrml_image,
|
356
|
+
"2d_coords".intern, "3d_coords".intern
|
357
|
+
|
358
|
+
setnamevar :host_name
|
359
|
+
end
|
360
|
+
|
361
|
+
newtype :hostgroup do
|
362
|
+
setparameters :hostgroup_name, :alias, :contact_groups, :members
|
363
|
+
end
|
364
|
+
|
365
|
+
newtype :hostgroupescalation do
|
366
|
+
auxiliary = true
|
367
|
+
setparameters :hostgroup_name, :first_notification, :last_notification,
|
368
|
+
:contact_groups, :notification_interval
|
369
|
+
|
370
|
+
setnamevar :hostgroup_name
|
371
|
+
end
|
372
|
+
|
373
|
+
newtype :service do
|
374
|
+
attach :host => :host_name
|
375
|
+
setparameters :name, :active_checks_enabled, :passive_checks_enabled,
|
376
|
+
:parallelize_check, :obsess_over_service, :check_freshness,
|
377
|
+
:notifications_enabled, :event_handler_enabled,
|
378
|
+
:flap_detection_enabled, :process_perf_data,
|
379
|
+
:retain_status_information, :retain_nonstatus_information, :register,
|
380
|
+
:is_volatile, :check_period, :max_check_attempts,
|
381
|
+
:normal_check_interval, :retry_check_interval, :contact_groups,
|
382
|
+
:notification_interval, :notification_period, :notification_options,
|
383
|
+
:service_description, :host_name, :freshness_threshold,
|
384
|
+
:check_command
|
385
|
+
|
386
|
+
suppress :host_name
|
387
|
+
|
388
|
+
setnamevar :service_description
|
389
|
+
end
|
390
|
+
|
391
|
+
newtype :servicedependency do
|
392
|
+
auxiliary = true
|
393
|
+
setparameters :host_name, :service_description, :dependent_host_name,
|
394
|
+
:dependent_service_description, :execution_failure_criteria,
|
395
|
+
:notification_failure_criteria
|
396
|
+
|
397
|
+
setnamevar :host_name
|
398
|
+
end
|
399
|
+
|
400
|
+
newtype :serviceescalation do
|
401
|
+
setparameters :host_name, :service_description, :first_notification,
|
402
|
+
:last_notification, :contact_groups, :notification_interval
|
403
|
+
|
404
|
+
setnamevar :host_name
|
405
|
+
end
|
406
|
+
|
407
|
+
newtype :serviceextinfo do
|
408
|
+
auxiliary = true
|
409
|
+
|
410
|
+
setparameters :host_name, :service_description, :icon_image, :icon_image_alt
|
411
|
+
|
412
|
+
setnamevar :host_name
|
413
|
+
end
|
414
|
+
|
415
|
+
newtype :timeperiod do
|
416
|
+
setparameters :timeperiod_name, :alias, :sunday, :monday, :tuesday, :wednesday,
|
417
|
+
:thursday, :friday, :saturday
|
418
|
+
end
|
419
|
+
end
|
420
|
+
|
421
|
+
# $Id$
|