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.

Files changed (266) hide show
  1. data/CHANGELOG +94 -0
  2. data/Rakefile +0 -4
  3. data/bin/puppet +18 -10
  4. data/bin/puppetd +1 -1
  5. data/bin/puppetdoc +14 -4
  6. data/bin/puppetmasterd +1 -1
  7. data/bin/puppetrun +3 -8
  8. data/bin/ralsh +12 -11
  9. data/conf/freebsd/puppetd +1 -1
  10. data/conf/freebsd/puppetmasterd +1 -1
  11. data/conf/gentoo/puppet/puppet.conf +29 -0
  12. data/conf/namespaceauth.conf +20 -0
  13. data/conf/redhat/puppet.spec +4 -1
  14. data/conf/solaris/smf/puppetd.xml +1 -1
  15. data/conf/solaris/smf/puppetmasterd.xml +1 -1
  16. data/conf/suse/puppet.spec +10 -8
  17. data/examples/root/etc/puppet/{puppetmasterd.conf → puppet.conf} +6 -3
  18. data/ext/logcheck/puppet +7 -0
  19. data/ext/puppet-test +28 -5
  20. data/lib/puppet.rb +2 -1
  21. data/lib/puppet/defaults.rb +12 -5
  22. data/lib/puppet/dsl.rb +43 -45
  23. data/lib/puppet/external/{gratr/rdot.rb → dot.rb} +0 -0
  24. data/lib/puppet/external/nagios.rb +50 -0
  25. data/lib/puppet/external/nagios/base.rb +421 -0
  26. data/lib/puppet/external/nagios/parser.rb +816 -0
  27. data/lib/puppet/file_serving/file_base.rb +16 -3
  28. data/lib/puppet/file_serving/metadata.rb +29 -11
  29. data/lib/puppet/indirector/terminus.rb +1 -0
  30. data/lib/puppet/metatype/closure.rb +4 -0
  31. data/lib/puppet/metatype/evaluation.rb +2 -17
  32. data/lib/puppet/metatype/metaparams.rb +1 -1
  33. data/lib/puppet/network.rb +3 -0
  34. data/lib/puppet/network/client.rb +4 -5
  35. data/lib/puppet/network/client/master.rb +10 -7
  36. data/lib/puppet/network/handler/fileserver.rb +22 -45
  37. data/lib/puppet/network/http_pool.rb +3 -0
  38. data/lib/puppet/network/http_server/mongrel.rb +7 -1
  39. data/lib/puppet/network/http_server/webrick.rb +4 -3
  40. data/lib/puppet/network/xmlrpc/client.rb +12 -1
  41. data/lib/puppet/node/catalog.rb +51 -40
  42. data/lib/puppet/parser/ast.rb +27 -49
  43. data/lib/puppet/parser/ast/astarray.rb +5 -24
  44. data/lib/puppet/parser/ast/caseopt.rb +4 -4
  45. data/lib/puppet/parser/ast/casestatement.rb +4 -5
  46. data/lib/puppet/parser/ast/collection.rb +3 -5
  47. data/lib/puppet/parser/ast/collexpr.rb +3 -5
  48. data/lib/puppet/parser/ast/definition.rb +148 -159
  49. data/lib/puppet/parser/ast/else.rb +2 -3
  50. data/lib/puppet/parser/ast/function.rb +3 -10
  51. data/lib/puppet/parser/ast/hostclass.rb +66 -59
  52. data/lib/puppet/parser/ast/ifstatement.rb +4 -5
  53. data/lib/puppet/parser/ast/leaf.rb +6 -6
  54. data/lib/puppet/parser/ast/node.rb +26 -58
  55. data/lib/puppet/parser/ast/resource.rb +5 -7
  56. data/lib/puppet/parser/ast/resource_defaults.rb +2 -4
  57. data/lib/puppet/parser/ast/resource_override.rb +4 -6
  58. data/lib/puppet/parser/ast/resource_reference.rb +2 -4
  59. data/lib/puppet/parser/ast/resourceparam.rb +2 -4
  60. data/lib/puppet/parser/ast/selector.rb +5 -6
  61. data/lib/puppet/parser/ast/tag.rb +2 -4
  62. data/lib/puppet/parser/ast/vardef.rb +3 -4
  63. data/lib/puppet/parser/collector.rb +5 -5
  64. data/lib/puppet/parser/{compile.rb → compiler.rb} +69 -107
  65. data/lib/puppet/parser/functions.rb +3 -3
  66. data/lib/puppet/parser/interpreter.rb +32 -23
  67. data/lib/puppet/parser/lexer.rb +391 -282
  68. data/lib/puppet/parser/parser.rb +5 -4
  69. data/lib/puppet/parser/parser_support.rb +3 -6
  70. data/lib/puppet/parser/resource.rb +24 -36
  71. data/lib/puppet/parser/resource/param.rb +1 -1
  72. data/lib/puppet/parser/resource/reference.rb +7 -3
  73. data/lib/puppet/parser/scope.rb +12 -7
  74. data/lib/puppet/parser/templatewrapper.rb +1 -1
  75. data/lib/puppet/pgraph.rb +9 -98
  76. data/lib/puppet/provider/interface/redhat.rb +65 -65
  77. data/lib/puppet/provider/mount/parsed.rb +1 -1
  78. data/lib/puppet/provider/naginator.rb +55 -0
  79. data/lib/puppet/provider/nameservice/directoryservice.rb +6 -7
  80. data/lib/puppet/provider/package/fink.rb +0 -2
  81. data/lib/puppet/provider/package/gem.rb +9 -5
  82. data/lib/puppet/provider/package/openbsd.rb +1 -1
  83. data/lib/puppet/provider/package/pkgdmg.rb +3 -8
  84. data/lib/puppet/provider/package/portage.rb +4 -4
  85. data/lib/puppet/provider/package/yumhelper.py +8 -6
  86. data/lib/puppet/provider/parsedfile.rb +7 -1
  87. data/lib/puppet/provider/service/debian.rb +2 -0
  88. data/lib/puppet/provider/service/gentoo.rb +4 -0
  89. data/lib/puppet/provider/service/init.rb +1 -1
  90. data/lib/puppet/provider/sshkey/parsed.rb +2 -0
  91. data/lib/puppet/provider/user/useradd.rb +1 -1
  92. data/lib/puppet/rails.rb +4 -0
  93. data/lib/puppet/rails/database/001_add_created_at_to_all_tables.rb +17 -0
  94. data/lib/puppet/rails/fact_value.rb +4 -0
  95. data/lib/puppet/rails/host.rb +1 -2
  96. data/lib/puppet/rails/param_value.rb +4 -0
  97. data/lib/puppet/rails/resource_tag.rb +4 -0
  98. data/lib/puppet/rails/source_file.rb +4 -1
  99. data/lib/puppet/relationship.rb +5 -1
  100. data/lib/puppet/reports/tagmail.rb +12 -1
  101. data/lib/puppet/resource_reference.rb +1 -1
  102. data/lib/puppet/simple_graph.rb +78 -11
  103. data/lib/puppet/sslcertificates.rb +1 -1
  104. data/lib/puppet/sslcertificates/ca.rb +3 -3
  105. data/lib/puppet/transaction.rb +7 -4
  106. data/lib/puppet/transportable.rb +1 -1
  107. data/lib/puppet/type.rb +3 -10
  108. data/lib/puppet/type/cron.rb +18 -0
  109. data/lib/puppet/type/exec.rb +18 -12
  110. data/lib/puppet/type/{pfile.rb → file.rb} +66 -84
  111. data/lib/puppet/type/file/checksum.rb +271 -0
  112. data/lib/puppet/type/{pfile → file}/content.rb +10 -15
  113. data/lib/puppet/type/{pfile → file}/ensure.rb +15 -8
  114. data/lib/puppet/type/{pfile → file}/group.rb +0 -0
  115. data/lib/puppet/type/{pfile → file}/mode.rb +0 -0
  116. data/lib/puppet/type/{pfile → file}/owner.rb +0 -0
  117. data/lib/puppet/type/{pfile → file}/source.rb +34 -48
  118. data/lib/puppet/type/{pfile → file}/target.rb +0 -0
  119. data/lib/puppet/type/{pfile → file}/type.rb +0 -0
  120. data/lib/puppet/type/{pfilebucket.rb → filebucket.rb} +0 -0
  121. data/lib/puppet/type/host.rb +13 -0
  122. data/lib/puppet/type/mailalias.rb +1 -1
  123. data/lib/puppet/type/nagios_command.rb +3 -0
  124. data/lib/puppet/type/nagios_contact.rb +3 -0
  125. data/lib/puppet/type/nagios_contactgroup.rb +3 -0
  126. data/lib/puppet/type/nagios_host.rb +3 -0
  127. data/lib/puppet/type/nagios_hostextinfo.rb +3 -0
  128. data/lib/puppet/type/nagios_hostgroup.rb +3 -0
  129. data/lib/puppet/type/nagios_hostgroupescalation.rb +3 -0
  130. data/lib/puppet/type/nagios_service.rb +3 -0
  131. data/lib/puppet/type/nagios_servicedependency.rb +3 -0
  132. data/lib/puppet/type/nagios_serviceescalation.rb +3 -0
  133. data/lib/puppet/type/nagios_serviceextinfo.rb +3 -0
  134. data/lib/puppet/type/nagios_timeperiod.rb +3 -0
  135. data/lib/puppet/type/package.rb +4 -12
  136. data/lib/puppet/type/service.rb +9 -0
  137. data/lib/puppet/type/sshkey.rb +3 -3
  138. data/lib/puppet/util/autoload.rb +5 -5
  139. data/lib/puppet/util/checksums.rb +51 -13
  140. data/lib/puppet/util/constant_inflector.rb +14 -0
  141. data/lib/puppet/util/filetype.rb +1 -1
  142. data/lib/puppet/util/graph.rb +3 -9
  143. data/lib/puppet/util/nagios_maker.rb +57 -0
  144. data/lib/puppet/util/settings.rb +19 -16
  145. data/lib/puppet/util/tagging.rb +39 -0
  146. data/test/executables/puppetbin.rb +17 -0
  147. data/test/language/ast.rb +8 -58
  148. data/test/language/ast/casestatement.rb +3 -3
  149. data/test/language/ast/resource.rb +6 -7
  150. data/test/language/ast/resource_reference.rb +12 -12
  151. data/test/language/ast/selector.rb +2 -2
  152. data/test/language/ast/variable.rb +2 -2
  153. data/test/language/functions.rb +24 -24
  154. data/test/language/parser.rb +20 -8
  155. data/test/language/resource.rb +5 -42
  156. data/test/language/scope.rb +21 -37
  157. data/test/language/snippets.rb +7 -0
  158. data/test/lib/puppettest.rb +28 -14
  159. data/test/lib/puppettest/parsertesting.rb +10 -10
  160. data/test/lib/puppettest/support/resources.rb +1 -1
  161. data/test/network/client/master.rb +10 -0
  162. data/test/network/handler/fileserver.rb +51 -49
  163. data/test/network/server/webrick.rb +1 -1
  164. data/test/other/dsl.rb +3 -4
  165. data/test/other/transactions.rb +6 -4
  166. data/test/rails/ast.rb +2 -2
  167. data/test/rails/configuration.rb +1 -1
  168. data/test/rails/railsparameter.rb +2 -0
  169. data/test/rails/railsresource.rb +1 -0
  170. data/test/ral/manager/type.rb +4 -4
  171. data/test/ral/providers/cron/crontab.rb +3 -1
  172. data/test/ral/providers/package.rb +1 -1
  173. data/test/ral/{types → type}/basic.rb +2 -2
  174. data/test/ral/{types → type}/cron.rb +0 -0
  175. data/test/ral/{types → type}/exec.rb +42 -2
  176. data/test/ral/{types → type}/file.rb +34 -79
  177. data/test/ral/{types → type}/file/target.rb +0 -0
  178. data/test/ral/{types → type}/filebucket.rb +0 -0
  179. data/test/ral/{types → type}/fileignoresource.rb +0 -0
  180. data/test/ral/{types → type}/filesources.rb +8 -27
  181. data/test/ral/{types → type}/group.rb +0 -0
  182. data/test/ral/{types → type}/host.rb +16 -0
  183. data/test/ral/{types → type}/mailalias.rb +0 -0
  184. data/test/ral/{types → type}/parameter.rb +0 -0
  185. data/test/ral/{types → type}/port.rb +0 -0
  186. data/test/ral/{types → type}/property.rb +0 -0
  187. data/test/ral/{types → type}/resources.rb +0 -0
  188. data/test/ral/{types → type}/service.rb +0 -0
  189. data/test/ral/{types → type}/sshkey.rb +0 -0
  190. data/test/ral/{types → type}/tidy.rb +1 -0
  191. data/test/ral/{types → type}/user.rb +0 -0
  192. data/test/ral/{types → type}/yumrepo.rb +0 -0
  193. data/test/ral/{types → type}/zone.rb +0 -0
  194. data/test/util/autoload.rb +24 -5
  195. metadata +60 -107
  196. data/conf/gentoo/puppet/puppetca.conf +0 -29
  197. data/conf/gentoo/puppet/puppetd.conf +0 -29
  198. data/conf/gentoo/puppet/puppetmasterd.conf +0 -29
  199. data/examples/root/etc/puppet/puppetd.conf +0 -4
  200. data/lib/puppet/external/gratr.rb +0 -33
  201. data/lib/puppet/external/gratr/adjacency_graph.rb +0 -257
  202. data/lib/puppet/external/gratr/base.rb +0 -34
  203. data/lib/puppet/external/gratr/biconnected.rb +0 -116
  204. data/lib/puppet/external/gratr/chinese_postman.rb +0 -123
  205. data/lib/puppet/external/gratr/common.rb +0 -73
  206. data/lib/puppet/external/gratr/comparability.rb +0 -92
  207. data/lib/puppet/external/gratr/digraph.rb +0 -116
  208. data/lib/puppet/external/gratr/digraph_distance.rb +0 -185
  209. data/lib/puppet/external/gratr/dot.rb +0 -90
  210. data/lib/puppet/external/gratr/edge.rb +0 -145
  211. data/lib/puppet/external/gratr/graph.rb +0 -303
  212. data/lib/puppet/external/gratr/graph_api.rb +0 -83
  213. data/lib/puppet/external/gratr/import.rb +0 -44
  214. data/lib/puppet/external/gratr/labels.rb +0 -90
  215. data/lib/puppet/external/gratr/maximum_flow.rb +0 -64
  216. data/lib/puppet/external/gratr/search.rb +0 -409
  217. data/lib/puppet/external/gratr/strong_components.rb +0 -127
  218. data/lib/puppet/external/gratr/undirected_graph.rb +0 -153
  219. data/lib/puppet/rails/external/tagging/acts_as_taggable.rb +0 -62
  220. data/lib/puppet/rails/external/tagging/init.rb +0 -5
  221. data/lib/puppet/rails/external/tagging/tag.rb +0 -50
  222. data/lib/puppet/rails/external/tagging/tagging.rb +0 -12
  223. data/lib/puppet/rails/puppet_class.rb +0 -6
  224. data/lib/puppet/reference/node_source.rb +0 -9
  225. data/lib/puppet/reference/report.rb +0 -21
  226. data/lib/puppet/type/pfile/checksum.rb +0 -326
  227. data/test/language/ast/definition.rb +0 -166
  228. data/test/language/ast/hostclass.rb +0 -184
  229. data/test/language/compile.rb +0 -569
  230. data/test/language/lexer.rb +0 -276
  231. data/test/lib/mocha.rb +0 -19
  232. data/test/lib/mocha/any_instance_method.rb +0 -35
  233. data/test/lib/mocha/auto_verify.rb +0 -113
  234. data/test/lib/mocha/central.rb +0 -35
  235. data/test/lib/mocha/class_method.rb +0 -62
  236. data/test/lib/mocha/deprecation.rb +0 -22
  237. data/test/lib/mocha/exception_raiser.rb +0 -17
  238. data/test/lib/mocha/expectation.rb +0 -378
  239. data/test/lib/mocha/expectation_error.rb +0 -6
  240. data/test/lib/mocha/infinite_range.rb +0 -25
  241. data/test/lib/mocha/inspect.rb +0 -39
  242. data/test/lib/mocha/instance_method.rb +0 -8
  243. data/test/lib/mocha/is_a.rb +0 -9
  244. data/test/lib/mocha/metaclass.rb +0 -7
  245. data/test/lib/mocha/missing_expectation.rb +0 -27
  246. data/test/lib/mocha/mock.rb +0 -207
  247. data/test/lib/mocha/multiple_yields.rb +0 -20
  248. data/test/lib/mocha/no_yields.rb +0 -11
  249. data/test/lib/mocha/object.rb +0 -110
  250. data/test/lib/mocha/parameter_matchers.rb +0 -9
  251. data/test/lib/mocha/parameter_matchers/all_of.rb +0 -39
  252. data/test/lib/mocha/parameter_matchers/any_of.rb +0 -44
  253. data/test/lib/mocha/parameter_matchers/anything.rb +0 -30
  254. data/test/lib/mocha/parameter_matchers/has_entry.rb +0 -39
  255. data/test/lib/mocha/parameter_matchers/has_key.rb +0 -39
  256. data/test/lib/mocha/parameter_matchers/has_value.rb +0 -39
  257. data/test/lib/mocha/parameter_matchers/includes.rb +0 -37
  258. data/test/lib/mocha/pretty_parameters.rb +0 -28
  259. data/test/lib/mocha/return_values.rb +0 -31
  260. data/test/lib/mocha/setup_and_teardown.rb +0 -23
  261. data/test/lib/mocha/single_return_value.rb +0 -24
  262. data/test/lib/mocha/single_yield.rb +0 -18
  263. data/test/lib/mocha/standalone.rb +0 -32
  264. data/test/lib/mocha/stub.rb +0 -18
  265. data/test/lib/mocha/test_case_adapter.rb +0 -49
  266. 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
- INTERFACE_DIR = "/etc/sysconfig/network-scripts"
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
- # maximum number of dummy interfaces
47
- @max_dummies = 10
46
+ # maximum number of dummy interfaces
47
+ @max_dummies = 10
48
48
 
49
- # maximum number of aliases per interface
50
- @max_aliases_per_iface = 10
49
+ # maximum number of aliases per interface
50
+ @max_aliases_per_iface = 10
51
51
 
52
- @@dummies = []
53
- @@aliases = Hash.new { |hash, key| hash[key] = [] }
52
+ @@dummies = []
53
+ @@aliases = Hash.new { |hash, key| hash[key] = [] }
54
54
 
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)
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
- # store the existing dummy interfaces
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
- 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
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
- def generate
142
+ def generate
143
143
  itype = self.interface_type == :alias ? :alias : :normal
144
144
  self.class.template(itype).result(binding)
145
- end
145
+ end
146
146
 
147
147
  # Where should the file be written out?
148
- # This defaults to INTERFACE_DIR/ifcfg-<namevar>, but can have a
149
- # more symbolic name by setting interface_desc in the type.
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
- # 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
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
- # 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
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)
@@ -14,7 +14,7 @@ Puppet::Type.type(:mount).provide(:parsed,
14
14
  :filetype => :flat
15
15
  ) do
16
16
  include Puppet::Provider::Mount
17
- confine :exists => fstab
17
+ #confine :exists => fstab
18
18
 
19
19
  commands :mountcmd => "mount", :umount => "umount"
20
20
 
@@ -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
- # JJM: With dscl, the domain "/" is always the default local domain.
182
- # The domain /Search will search all domains, and you may
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\n").collect do |set|
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.reject { |p| p.nil? }
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 /^\*\*\*/: return nil
48
- when /^(\S+)\s+\((.+)\)\n/
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 #{@resource[:name]}-(\S+)/
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
- ptable = Plist::parse_xml xml_str
151
- # JJM Filter out all mount-paths into a single array, discard the rest.
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::PackageError.new(detail)
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::PackageError.new("No package found with the specified name [#{not_found_value}]")
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::PackageError.new("More than one package with the specified name [#{search_value}], please use the category parameter to disambiguate")
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::PackageError.new(detail)
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
- ypl = pkg_lists()
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 record_type(record[:record_type]).text?
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