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
@@ -5,7 +5,7 @@ Puppet::Type.type(:interface).provide(:redhat) do
|
|
5
5
|
desc "Manage network interfaces on Red Hat operating systems. This provider
|
6
6
|
parses and generates configuration files in ``/etc/sysconfig/network-scripts``."
|
7
7
|
|
8
|
-
|
8
|
+
INTERFACE_DIR = "/etc/sysconfig/network-scripts"
|
9
9
|
confine :exists => INTERFACE_DIR
|
10
10
|
defaultfor :operatingsystem => [:fedora, :centos, :redhat]
|
11
11
|
|
@@ -43,52 +43,52 @@ NETMASK=<%= self.netmask %>
|
|
43
43
|
BROADCAST=
|
44
44
|
LOOPBACKDUMMY
|
45
45
|
|
46
|
-
|
47
|
-
|
46
|
+
# maximum number of dummy interfaces
|
47
|
+
@max_dummies = 10
|
48
48
|
|
49
|
-
|
50
|
-
|
49
|
+
# maximum number of aliases per interface
|
50
|
+
@max_aliases_per_iface = 10
|
51
51
|
|
52
|
-
|
53
|
-
|
52
|
+
@@dummies = []
|
53
|
+
@@aliases = Hash.new { |hash, key| hash[key] = [] }
|
54
54
|
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
55
|
+
# calculate which dummy interfaces are currently already in
|
56
|
+
# use prior to needing to call self.next_dummy later on.
|
57
|
+
def self.instances
|
58
|
+
# parse all of the config files at once
|
59
|
+
Dir.glob("%s/ifcfg-*" % INTERFACE_DIR).collect do |file|
|
60
|
+
record = parse(file)
|
61
61
|
|
62
|
-
|
62
|
+
# store the existing dummy interfaces
|
63
63
|
@@dummies << record[:ifnum] if (record[:interface_type] == :dummy and ! @@dummies.include?(record[:ifnum]))
|
64
64
|
|
65
65
|
@@aliases[record[:interface]] << record[:ifnum] if record[:interface_type] == :alias
|
66
66
|
|
67
67
|
new(record)
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
# return the next avaliable dummy interface number, in the case where
|
72
|
+
# ifnum is not manually specified
|
73
|
+
def self.next_dummy
|
74
|
+
@max_dummies.times do |i|
|
75
|
+
unless @@dummies.include?(i.to_s)
|
76
|
+
@@dummies << i.to_s
|
77
|
+
return i.to_s
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
# return the next available alias on a given interface, in the case
|
83
|
+
# where ifnum if not manually specified
|
84
|
+
def self.next_alias(interface)
|
85
|
+
@max_aliases_per_iface.times do |i|
|
86
|
+
unless @@aliases[interface].include?(i.to_s)
|
87
|
+
@@aliases[interface] << i.to_s
|
88
|
+
return i.to_s
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
92
|
|
93
93
|
# base the ifnum, for dummy / loopback interface in linux
|
94
94
|
# on the last octect of the IP address
|
@@ -139,14 +139,14 @@ LOOPBACKDUMMY
|
|
139
139
|
# on whether we are adding an alias to a real interface, or a loopback
|
140
140
|
# address (also dummy) on linux. For linux it's quite involved, and we
|
141
141
|
# will use an ERB template
|
142
|
-
|
142
|
+
def generate
|
143
143
|
itype = self.interface_type == :alias ? :alias : :normal
|
144
144
|
self.class.template(itype).result(binding)
|
145
|
-
|
145
|
+
end
|
146
146
|
|
147
147
|
# Where should the file be written out?
|
148
|
-
|
149
|
-
|
148
|
+
# This defaults to INTERFACE_DIR/ifcfg-<namevar>, but can have a
|
149
|
+
# more symbolic name by setting interface_desc in the type.
|
150
150
|
def file_path
|
151
151
|
if resource and val = resource[:interface_desc]
|
152
152
|
desc = val
|
@@ -185,16 +185,16 @@ LOOPBACKDUMMY
|
|
185
185
|
end
|
186
186
|
end
|
187
187
|
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
188
|
+
# create the device name, so this based on the IP, and interface + type
|
189
|
+
def device
|
190
|
+
case @resource.should(:interface_type)
|
191
|
+
when :loopback
|
192
|
+
@property_hash[:ifnum] ||= self.class.next_dummy
|
193
|
+
return "dummy" + @property_hash[:ifnum]
|
194
|
+
when :alias
|
195
|
+
@property_hash[:ifnum] ||= self.class.next_alias(@resource[:interface])
|
196
|
+
return @resource[:interface] + ":" + @property_hash[:ifnum]
|
197
|
+
end
|
198
198
|
end
|
199
199
|
|
200
200
|
# Set the name to our ip address.
|
@@ -202,19 +202,19 @@ LOOPBACKDUMMY
|
|
202
202
|
@property_hash[:name] = value
|
203
203
|
end
|
204
204
|
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
205
|
+
# whether the device is to be brought up on boot or not. converts
|
206
|
+
# the true / false of the type, into yes / no values respectively
|
207
|
+
# writing out the ifcfg-* files
|
208
|
+
def on_boot
|
209
|
+
case @property_hash[:onboot].to_s
|
210
|
+
when "true"
|
211
|
+
return "yes"
|
212
|
+
when "false"
|
213
|
+
return "no"
|
214
|
+
else
|
215
|
+
return "neither"
|
216
|
+
end
|
217
|
+
end
|
218
218
|
|
219
219
|
# Mark whether the interface should be started on boot.
|
220
220
|
def on_boot=(value)
|
@@ -0,0 +1,55 @@
|
|
1
|
+
# Created by Luke Kanies on 2007-11-27.
|
2
|
+
# Copyright (c) 2007. All rights reserved.
|
3
|
+
|
4
|
+
require 'puppet'
|
5
|
+
require 'puppet/provider/parsedfile'
|
6
|
+
require 'puppet/external/nagios'
|
7
|
+
|
8
|
+
# The base class for all Naginator providers.
|
9
|
+
class Puppet::Provider::Naginator < Puppet::Provider::ParsedFile
|
10
|
+
# Retrieve the associated class from Nagios::Base.
|
11
|
+
def self.nagios_type
|
12
|
+
unless defined?(@nagios_type) and @nagios_type
|
13
|
+
name = resource_type.name.to_s.sub(/^nagios_/, '')
|
14
|
+
unless @nagios_type = Nagios::Base.type(name.to_sym)
|
15
|
+
raise Puppet::DevError, "Could not find nagios type '%s'" % name
|
16
|
+
end
|
17
|
+
|
18
|
+
# And add our 'ensure' settings, since they aren't a part of
|
19
|
+
# Naginator by default
|
20
|
+
@nagios_type.send(:attr_accessor, :ensure, :target, :on_disk)
|
21
|
+
end
|
22
|
+
@nagios_type
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.parse(text)
|
26
|
+
Nagios::Parser.new.parse(text)
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.to_file(records)
|
30
|
+
header + records.collect { |record| record.to_s }.join("\n")
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.skip_record?(record)
|
34
|
+
false
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.valid_attr?(klass, attr_name)
|
38
|
+
nagios_type.parameters.include?(attr_name)
|
39
|
+
end
|
40
|
+
|
41
|
+
def initialize(resource = nil)
|
42
|
+
if resource.is_a?(Nagios::Base)
|
43
|
+
# We don't use a duplicate here, because some providers (ParsedFile, at least)
|
44
|
+
# use the hash here for later events.
|
45
|
+
@property_hash = resource
|
46
|
+
elsif resource
|
47
|
+
@resource = resource if resource
|
48
|
+
# LAK 2007-05-09: Keep the model stuff around for backward compatibility
|
49
|
+
@model = resource
|
50
|
+
@property_hash = self.class.nagios_type.new
|
51
|
+
else
|
52
|
+
@property_hash = self.class.nagios_type.new
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -139,10 +139,12 @@ class DirectoryService < Puppet::Provider::NameService
|
|
139
139
|
dscl_output.split("\n").each do |line|
|
140
140
|
# JJM: Split the attribute name and the list of values.
|
141
141
|
ds_attribute, ds_values_string = line.split(':')
|
142
|
+
|
143
|
+
# Split sets the values to nil if there's nothing after the :
|
144
|
+
ds_values_string ||= ""
|
142
145
|
|
143
146
|
# JJM: skip this attribute line if the Puppet::Type doesn't care about it.
|
144
|
-
next unless (@@ds_to_ns_attribute_map.keys.include?(ds_attribute)
|
145
|
-
and type_properties.include? @@ds_to_ns_attribute_map[ds_attribute])
|
147
|
+
next unless (@@ds_to_ns_attribute_map.keys.include?(ds_attribute) and type_properties.include? @@ds_to_ns_attribute_map[ds_attribute])
|
146
148
|
|
147
149
|
# JJM: We asked dscl to output url encoded values so we're able
|
148
150
|
# to machine parse on whitespace. We need to urldecode:
|
@@ -178,11 +180,8 @@ class DirectoryService < Puppet::Provider::NameService
|
|
178
180
|
# This method spits out proper DSCL commands for us.
|
179
181
|
# We EXPECT name to be @resource[:name] when called from an instance object.
|
180
182
|
|
181
|
-
#
|
182
|
-
|
183
|
-
# get at specific domains with /LDAPv3/server1.foobar.com,
|
184
|
-
# /LDAPv3/server2.foobar.com, etc...
|
185
|
-
command_vector = [ command(:dscl), "-url", "/" ]
|
183
|
+
# There are two ways to specify paths in 10.5. See man dscl.
|
184
|
+
command_vector = [ command(:dscl), "-url", "." ]
|
186
185
|
# JJM: The actual action to perform. See "man dscl"
|
187
186
|
# Common actiosn: -create, -delete, -merge, -append, -passwd
|
188
187
|
command_vector << ds_action
|
@@ -9,8 +9,6 @@ Puppet::Type.type(:package).provide :fink, :parent => :dpkg, :source => :dpkg do
|
|
9
9
|
commands :aptcache => "/sw/bin/apt-cache"
|
10
10
|
commands :dpkgquery => "/sw/bin/dpkg-query"
|
11
11
|
|
12
|
-
defaultfor :operatingsystem => :darwin
|
13
|
-
|
14
12
|
has_feature :versionable
|
15
13
|
|
16
14
|
# A derivative of DPKG; this is how most people actually manage
|
@@ -23,14 +23,14 @@ Puppet::Type.type(:package).provide :gem, :parent => Puppet::Provider::Package d
|
|
23
23
|
end
|
24
24
|
|
25
25
|
begin
|
26
|
-
list = execute(command).split("\n
|
26
|
+
list = execute(command).split("\n").collect do |set|
|
27
27
|
if gemhash = gemsplit(set)
|
28
28
|
gemhash[:provider] = :gem
|
29
29
|
gemhash
|
30
30
|
else
|
31
31
|
nil
|
32
32
|
end
|
33
|
-
end.
|
33
|
+
end.compact
|
34
34
|
rescue Puppet::ExecutionFailure => detail
|
35
35
|
raise Puppet::Error, "Could not list gems: %s" % detail
|
36
36
|
end
|
@@ -44,8 +44,8 @@ Puppet::Type.type(:package).provide :gem, :parent => Puppet::Provider::Package d
|
|
44
44
|
|
45
45
|
def self.gemsplit(desc)
|
46
46
|
case desc
|
47
|
-
when
|
48
|
-
when /^(\S+)\s+\((.+)\)
|
47
|
+
when /^\*\*\*/, /^\s*$/, /^\s+/; return nil
|
48
|
+
when /^(\S+)\s+\((.+)\)/
|
49
49
|
name = $1
|
50
50
|
version = $2.split(/,\s*/)[0]
|
51
51
|
return {
|
@@ -78,7 +78,11 @@ Puppet::Type.type(:package).provide :gem, :parent => Puppet::Provider::Package d
|
|
78
78
|
command << @resource[:name]
|
79
79
|
end
|
80
80
|
|
81
|
-
gemcmd(*command)
|
81
|
+
output = gemcmd(*command)
|
82
|
+
# Apparently some stupid gem versions don't exit non-0 on failure
|
83
|
+
if output.include?("ERROR")
|
84
|
+
self.fail "Could not install: %s" % output.chomp
|
85
|
+
end
|
82
86
|
end
|
83
87
|
|
84
88
|
def latest
|
@@ -66,7 +66,7 @@ Puppet::Type.type(:package).provide :openbsd, :parent => Puppet::Provider::Packa
|
|
66
66
|
info = pkginfo @resource[:name]
|
67
67
|
|
68
68
|
# Search for the version info
|
69
|
-
if info =~ /Information for
|
69
|
+
if info =~ /Information for (inst:)?#{@resource[:name]}-(\S+)/
|
70
70
|
hash[:ensure] = $1
|
71
71
|
else
|
72
72
|
return nil
|
@@ -87,10 +87,8 @@ Example usage::
|
|
87
87
|
|
88
88
|
**WARNING**: Because I assume files will be downloaded to /tmp, the current
|
89
89
|
implementation attempts to delete DMG files if you install directly from the
|
90
|
-
file system and not via a URL method.
|
91
|
-
"
|
90
|
+
file system and not via a URL method."
|
92
91
|
|
93
|
-
|
94
92
|
confine :exists => "/Library/Receipts"
|
95
93
|
commands :installer => "/usr/sbin/installer"
|
96
94
|
commands :hdiutil => "/usr/bin/hdiutil"
|
@@ -147,11 +145,8 @@ file system and not via a URL method.
|
|
147
145
|
begin
|
148
146
|
open(cached_source) do |dmg|
|
149
147
|
xml_str = hdiutil "mount", "-plist", "-nobrowse", "-readonly", "-noidme", "-mountrandom", "/tmp", dmg.path
|
150
|
-
|
151
|
-
|
152
|
-
mounts = ptable['system-entities'].collect { |entity|
|
153
|
-
entity['mount-point']
|
154
|
-
}.select { |mountloc|; mountloc }
|
148
|
+
# JJM THIS IS A HORRIBLE HACK (Well, actually it's not so bad...)
|
149
|
+
mounts = xml_str.scan(/<string>(\/tmp.*?)<\/string>/)[0]
|
155
150
|
begin
|
156
151
|
mounts.each do |fspath|
|
157
152
|
Dir.entries(fspath).select { |f|
|
@@ -39,7 +39,7 @@ Puppet::Type.type(:package).provide :portage, :parent => Puppet::Provider::Packa
|
|
39
39
|
|
40
40
|
return packages
|
41
41
|
rescue Puppet::ExecutionFailure => detail
|
42
|
-
raise Puppet::
|
42
|
+
raise Puppet::Error.new(detail)
|
43
43
|
end
|
44
44
|
end
|
45
45
|
|
@@ -99,14 +99,14 @@ Puppet::Type.type(:package).provide :portage, :parent => Puppet::Provider::Packa
|
|
99
99
|
case packages.size
|
100
100
|
when 0
|
101
101
|
not_found_value = "%s/%s" % [@resource[:category] ? @resource[:category] : "<unspecified category>", @resource[:name]]
|
102
|
-
raise Puppet::
|
102
|
+
raise Puppet::Error.new("No package found with the specified name [#{not_found_value}]")
|
103
103
|
when 1
|
104
104
|
return packages[0]
|
105
105
|
else
|
106
|
-
raise Puppet::
|
106
|
+
raise Puppet::Error.new("More than one package with the specified name [#{search_value}], please use the category parameter to disambiguate")
|
107
107
|
end
|
108
108
|
rescue Puppet::ExecutionFailure => detail
|
109
|
-
raise Puppet::
|
109
|
+
raise Puppet::Error.new(detail)
|
110
110
|
end
|
111
111
|
end
|
112
112
|
|
@@ -13,8 +13,7 @@ OVERRIDE_OPTS = {
|
|
13
13
|
'logfile': '/dev/null'
|
14
14
|
}
|
15
15
|
|
16
|
-
def pkg_lists():
|
17
|
-
my = yum.YumBase()
|
16
|
+
def pkg_lists(my):
|
18
17
|
my.doConfigSetup()
|
19
18
|
|
20
19
|
for k in OVERRIDE_OPTS.keys():
|
@@ -28,10 +27,13 @@ def pkg_lists():
|
|
28
27
|
return my.doPackageLists('updates')
|
29
28
|
|
30
29
|
try:
|
31
|
-
|
30
|
+
try:
|
31
|
+
my = yum.YumBase()
|
32
|
+
ypl = pkg_lists(my)
|
33
|
+
for pkg in ypl.updates:
|
34
|
+
print "_pkg %s %s %s %s %s" % (pkg.name, pkg.epoch, pkg.version, pkg.release, pkg.arch)
|
35
|
+
finally:
|
36
|
+
my.closeRpmDB()
|
32
37
|
except IOError, e:
|
33
38
|
print "_err IOError %d %s" % (e.errno, e)
|
34
39
|
sys.exit(1)
|
35
|
-
|
36
|
-
for pkg in ypl.updates:
|
37
|
-
print "_pkg %s %s %s %s %s" % (pkg.name, pkg.epoch, pkg.version, pkg.release, pkg.arch)
|
@@ -180,7 +180,7 @@ class Puppet::Provider::ParsedFile < Puppet::Provider
|
|
180
180
|
matchers = resources.dup
|
181
181
|
@records.each do |record|
|
182
182
|
# Skip things like comments and blank lines
|
183
|
-
next if
|
183
|
+
next if skip_record?(record)
|
184
184
|
|
185
185
|
if name = record[:name] and resource = resources[name]
|
186
186
|
resource.provider = new(record)
|
@@ -243,6 +243,12 @@ class Puppet::Provider::ParsedFile < Puppet::Provider
|
|
243
243
|
end
|
244
244
|
end
|
245
245
|
|
246
|
+
# Should we skip the record? Basically, we skip text records.
|
247
|
+
# This is only here so subclasses can override it.
|
248
|
+
def self.skip_record?(record)
|
249
|
+
record_type(record[:record_type]).text?
|
250
|
+
end
|
251
|
+
|
246
252
|
# Initialize the object if necessary.
|
247
253
|
def self.target_object(target)
|
248
254
|
@target_objects[target] ||= filetype.new(target)
|
@@ -14,6 +14,7 @@ Puppet::Type.type(:service).provide :debian, :parent => :init do
|
|
14
14
|
# Remove the symlinks
|
15
15
|
def disable
|
16
16
|
update "-f", @resource[:name], "remove"
|
17
|
+
update @resource[:name], "stop 1 2 3 4 5 6 ."
|
17
18
|
end
|
18
19
|
|
19
20
|
def enabled?
|
@@ -29,6 +30,7 @@ Puppet::Type.type(:service).provide :debian, :parent => :init do
|
|
29
30
|
end
|
30
31
|
|
31
32
|
def enable
|
33
|
+
update "-f", @resource[:name], "remove"
|
32
34
|
update @resource[:name], "defaults"
|
33
35
|
end
|
34
36
|
end
|