puppet 0.24.9 → 0.25.0

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 (910) hide show
  1. data/CHANGELOG +18680 -1241
  2. data/CHANGELOG.old +1705 -0
  3. data/LICENSE +2 -2
  4. data/README +1 -1
  5. data/README.queueing +126 -0
  6. data/README.rst +4 -4
  7. data/Rakefile +62 -216
  8. data/bin/filebucket +6 -117
  9. data/bin/pi +50 -0
  10. data/bin/puppet +7 -188
  11. data/bin/puppetdoc +7 -198
  12. data/bin/ralsh +4 -191
  13. data/conf/auth.conf +94 -0
  14. data/conf/gentoo/init.d/puppetmaster +30 -30
  15. data/conf/osx/PackageInfo.plist +30 -30
  16. data/conf/osx/createpackage.sh +23 -18
  17. data/conf/osx/preflight +8 -0
  18. data/conf/puppet-queue.conf +10 -0
  19. data/conf/redhat/client.init +52 -41
  20. data/conf/redhat/logrotate +1 -0
  21. data/conf/redhat/puppet.spec +74 -36
  22. data/conf/redhat/rundir-perms.patch +28 -0
  23. data/conf/redhat/server.init +48 -43
  24. data/conf/redhat/server.sysconfig +4 -4
  25. data/conf/solaris/smf/puppetd.xml +53 -53
  26. data/conf/solaris/smf/puppetmasterd.xml +53 -53
  27. data/conf/solaris/smf/svc-puppetd +4 -4
  28. data/conf/solaris/smf/svc-puppetmasterd +3 -3
  29. data/conf/suse/client.init +4 -4
  30. data/conf/suse/puppet.spec +14 -14
  31. data/conf/suse/server.init +17 -17
  32. data/examples/etc/init.d/sleeper +8 -8
  33. data/examples/mac_dscl.pp +2 -2
  34. data/examples/mac_dscl_revert.pp +1 -1
  35. data/examples/mcx_dock_default.pp +108 -108
  36. data/examples/mcx_dock_full.pp +108 -108
  37. data/examples/mcx_nogroup.pp +108 -108
  38. data/examples/modules/sample-module/lib/puppet/parser/functions/hostname_to_dn.rb +5 -5
  39. data/examples/modules/sample-module/manifests/init.pp +2 -2
  40. data/examples/relationships +1 -1
  41. data/ext/autotest/config +6 -6
  42. data/ext/bin/sleeper +12 -12
  43. data/ext/dbfix.sql +21 -21
  44. data/ext/emacs/puppet-mode.el +42 -41
  45. data/ext/extlookup.rb +183 -0
  46. data/ext/ldap/puppet.schema +2 -1
  47. data/ext/logcheck/puppet +1 -1
  48. data/ext/module_puppet +7 -7
  49. data/ext/nagios/check_puppet.rb +83 -83
  50. data/ext/nagios/naggen +302 -0
  51. data/ext/puppet-test +61 -18
  52. data/ext/puppetlisten/puppetlisten.rb +76 -0
  53. data/ext/puppetlisten/puppetrun.rb +39 -0
  54. data/ext/puppetstoredconfigclean.rb +29 -29
  55. data/ext/rack/README +73 -0
  56. data/ext/rack/files/apache2.conf +38 -0
  57. data/ext/rack/files/config.ru +18 -0
  58. data/ext/rack/manifest.pp +59 -0
  59. data/ext/vim/syntax/puppet.vim +54 -35
  60. data/install.rb +37 -26
  61. data/lib/puppet.rb +15 -227
  62. data/lib/puppet/agent.rb +134 -0
  63. data/lib/puppet/agent/locker.rb +42 -0
  64. data/lib/puppet/agent/runner.rb +65 -0
  65. data/lib/puppet/application.rb +313 -0
  66. data/lib/puppet/application/filebucket.rb +87 -0
  67. data/lib/puppet/application/pi.rb +214 -0
  68. data/lib/puppet/application/puppet.rb +177 -0
  69. data/lib/puppet/application/puppetca.rb +71 -0
  70. data/lib/puppet/application/puppetd.rb +256 -0
  71. data/lib/puppet/application/puppetdoc.rb +222 -0
  72. data/lib/puppet/application/puppetmasterd.rb +168 -0
  73. data/lib/puppet/application/puppetqd.rb +96 -0
  74. data/lib/puppet/application/puppetrun.rb +219 -0
  75. data/lib/puppet/application/ralsh.rb +168 -0
  76. data/lib/puppet/configurer.rb +177 -0
  77. data/lib/puppet/configurer/downloader.rb +79 -0
  78. data/lib/puppet/configurer/fact_handler.rb +68 -0
  79. data/lib/puppet/configurer/plugin_handler.rb +26 -0
  80. data/lib/puppet/daemon.rb +78 -28
  81. data/lib/puppet/defaults.rb +239 -166
  82. data/lib/puppet/dsl.rb +7 -7
  83. data/lib/puppet/external/dot.rb +271 -271
  84. data/lib/puppet/external/event-loop/better-definers.rb +298 -298
  85. data/lib/puppet/external/event-loop/event-loop.rb +274 -274
  86. data/lib/puppet/external/event-loop/signal-system.rb +163 -163
  87. data/lib/puppet/external/lock.rb +1 -1
  88. data/lib/puppet/external/nagios.rb +20 -20
  89. data/lib/puppet/external/nagios/base.rb +3 -3
  90. data/lib/puppet/external/nagios/grammar.ry +185 -0
  91. data/lib/puppet/external/nagios/makefile +9 -0
  92. data/lib/puppet/external/nagios/parser.rb +1 -1
  93. data/lib/puppet/feature/json.rb +2 -0
  94. data/lib/puppet/feature/rack.rb +24 -0
  95. data/lib/puppet/feature/rails.rb +23 -33
  96. data/lib/puppet/feature/rubygems.rb +6 -0
  97. data/lib/puppet/feature/stomp.rb +6 -0
  98. data/lib/puppet/file_serving/{file_base.rb → base.rb} +10 -9
  99. data/lib/puppet/file_serving/configuration.rb +61 -61
  100. data/lib/puppet/file_serving/configuration/parser.rb +24 -29
  101. data/lib/puppet/file_serving/content.rb +26 -11
  102. data/lib/puppet/file_serving/fileset.rb +54 -19
  103. data/lib/puppet/file_serving/indirection_hooks.rb +12 -24
  104. data/lib/puppet/file_serving/metadata.rb +8 -8
  105. data/lib/puppet/file_serving/mount.rb +9 -151
  106. data/lib/puppet/file_serving/mount/file.rb +126 -0
  107. data/lib/puppet/file_serving/mount/modules.rb +25 -0
  108. data/lib/puppet/file_serving/mount/plugins.rb +27 -0
  109. data/lib/puppet/file_serving/terminus_helper.rb +9 -4
  110. data/lib/puppet/indirector.rb +6 -4
  111. data/lib/puppet/indirector/active_record.rb +28 -0
  112. data/lib/puppet/indirector/catalog/active_record.rb +36 -0
  113. data/lib/puppet/indirector/catalog/compiler.rb +50 -24
  114. data/lib/puppet/indirector/catalog/queue.rb +5 -0
  115. data/lib/puppet/indirector/catalog/rest.rb +6 -0
  116. data/lib/puppet/indirector/catalog/yaml.rb +2 -4
  117. data/lib/puppet/indirector/certificate/ca.rb +9 -0
  118. data/lib/puppet/indirector/certificate/file.rb +9 -0
  119. data/lib/puppet/indirector/certificate/rest.rb +9 -0
  120. data/lib/puppet/indirector/certificate_request/ca.rb +14 -0
  121. data/lib/puppet/indirector/certificate_request/file.rb +8 -0
  122. data/lib/puppet/indirector/certificate_request/rest.rb +9 -0
  123. data/lib/puppet/indirector/certificate_revocation_list/ca.rb +8 -0
  124. data/lib/puppet/indirector/certificate_revocation_list/file.rb +8 -0
  125. data/lib/puppet/indirector/certificate_revocation_list/rest.rb +9 -0
  126. data/lib/puppet/indirector/direct_file_server.rb +4 -8
  127. data/lib/puppet/indirector/exec.rb +2 -6
  128. data/lib/puppet/indirector/facts/active_record.rb +36 -0
  129. data/lib/puppet/indirector/facts/facter.rb +30 -22
  130. data/lib/puppet/indirector/facts/rest.rb +6 -0
  131. data/lib/puppet/indirector/file.rb +1 -0
  132. data/lib/puppet/indirector/file_content/rest.rb +0 -1
  133. data/lib/puppet/indirector/file_metadata/file.rb +2 -2
  134. data/lib/puppet/indirector/file_metadata/rest.rb +0 -1
  135. data/lib/puppet/indirector/file_server.rb +31 -18
  136. data/lib/puppet/indirector/indirection.rb +46 -33
  137. data/lib/puppet/indirector/key/ca.rb +12 -0
  138. data/lib/puppet/indirector/key/file.rb +42 -0
  139. data/lib/puppet/indirector/node/active_record.rb +13 -0
  140. data/lib/puppet/indirector/node/ldap.rb +1 -1
  141. data/lib/puppet/indirector/queue.rb +83 -0
  142. data/lib/puppet/indirector/report/processor.rb +1 -1
  143. data/lib/puppet/indirector/report/rest.rb +7 -0
  144. data/lib/puppet/indirector/request.rb +158 -15
  145. data/lib/puppet/indirector/rest.rb +74 -36
  146. data/lib/puppet/indirector/runner/rest.rb +7 -0
  147. data/lib/puppet/indirector/ssl_file.rb +174 -0
  148. data/lib/puppet/indirector/terminus.rb +4 -4
  149. data/lib/puppet/indirector/yaml.rb +1 -1
  150. data/lib/puppet/metatype/manager.rb +3 -3
  151. data/lib/puppet/module.rb +99 -124
  152. data/lib/puppet/network/authconfig.rb +57 -42
  153. data/lib/puppet/network/authstore.rb +58 -10
  154. data/lib/puppet/network/client.rb +0 -2
  155. data/lib/puppet/network/client/ca.rb +1 -1
  156. data/lib/puppet/network/client/dipper.rb +7 -2
  157. data/lib/puppet/network/format.rb +123 -0
  158. data/lib/puppet/network/format_handler.rb +156 -0
  159. data/lib/puppet/network/formats.rb +123 -0
  160. data/lib/puppet/network/handler/filebucket.rb +1 -1
  161. data/lib/puppet/network/handler/fileserver.rb +43 -35
  162. data/lib/puppet/network/handler/master.rb +4 -4
  163. data/lib/puppet/network/handler/report.rb +1 -1
  164. data/lib/puppet/network/handler/resource.rb +16 -20
  165. data/lib/puppet/network/handler/runner.rb +9 -42
  166. data/lib/puppet/network/http.rb +4 -4
  167. data/lib/puppet/network/http/api.rb +4 -0
  168. data/lib/puppet/network/http/api/v1.rb +65 -0
  169. data/lib/puppet/network/http/handler.rb +163 -56
  170. data/lib/puppet/network/http/mongrel.rb +19 -15
  171. data/lib/puppet/network/http/mongrel/rest.rb +35 -17
  172. data/lib/puppet/network/http/rack.rb +62 -0
  173. data/lib/puppet/network/http/rack/httphandler.rb +34 -0
  174. data/lib/puppet/network/http/rack/rest.rb +79 -0
  175. data/lib/puppet/network/http/rack/xmlrpc.rb +65 -0
  176. data/lib/puppet/network/http/webrick.rb +89 -16
  177. data/lib/puppet/network/http/webrick/rest.rb +24 -11
  178. data/lib/puppet/network/http_pool.rb +28 -29
  179. data/lib/puppet/network/http_server/mongrel.rb +8 -10
  180. data/lib/puppet/network/http_server/webrick.rb +1 -3
  181. data/lib/puppet/network/rest_authconfig.rb +89 -0
  182. data/lib/puppet/network/rest_authorization.rb +25 -0
  183. data/lib/puppet/network/rights.rb +230 -27
  184. data/lib/puppet/network/server.rb +133 -31
  185. data/lib/puppet/network/xmlrpc/client.rb +5 -5
  186. data/lib/puppet/network/xmlrpc/webrick_servlet.rb +6 -6
  187. data/lib/puppet/node.rb +28 -21
  188. data/lib/puppet/node/environment.rb +48 -0
  189. data/lib/puppet/node/facts.rb +21 -0
  190. data/lib/puppet/parameter.rb +291 -219
  191. data/lib/puppet/parser/ast.rb +1 -0
  192. data/lib/puppet/parser/ast/astarray.rb +5 -1
  193. data/lib/puppet/parser/ast/boolean_operator.rb +3 -3
  194. data/lib/puppet/parser/ast/caseopt.rb +10 -0
  195. data/lib/puppet/parser/ast/casestatement.rb +12 -27
  196. data/lib/puppet/parser/ast/collection.rb +31 -0
  197. data/lib/puppet/parser/ast/collexpr.rb +18 -11
  198. data/lib/puppet/parser/ast/comparison_operator.rb +1 -1
  199. data/lib/puppet/parser/ast/definition.rb +6 -2
  200. data/lib/puppet/parser/ast/function.rb +7 -2
  201. data/lib/puppet/parser/ast/ifstatement.rb +11 -6
  202. data/lib/puppet/parser/ast/leaf.rb +106 -3
  203. data/lib/puppet/parser/ast/match_operator.rb +31 -0
  204. data/lib/puppet/parser/ast/node.rb +10 -6
  205. data/lib/puppet/parser/ast/resource_defaults.rb +2 -2
  206. data/lib/puppet/parser/ast/resource_override.rb +1 -1
  207. data/lib/puppet/parser/ast/resource_reference.rb +11 -3
  208. data/lib/puppet/parser/ast/selector.rb +14 -32
  209. data/lib/puppet/parser/ast/vardef.rb +1 -1
  210. data/lib/puppet/parser/collector.rb +67 -15
  211. data/lib/puppet/parser/compiler.rb +21 -53
  212. data/lib/puppet/parser/files.rb +92 -0
  213. data/lib/puppet/parser/functions.rb +3 -3
  214. data/lib/puppet/parser/functions/defined.rb +3 -3
  215. data/lib/puppet/parser/functions/fqdn_rand.rb +3 -3
  216. data/lib/puppet/parser/functions/inline_template.rb +4 -4
  217. data/lib/puppet/parser/functions/regsubst.rb +37 -35
  218. data/lib/puppet/parser/functions/require.rb +34 -0
  219. data/lib/puppet/parser/functions/shellquote.rb +41 -0
  220. data/lib/puppet/parser/functions/split.rb +29 -0
  221. data/lib/puppet/parser/functions/sprintf.rb +6 -6
  222. data/lib/puppet/parser/functions/template.rb +4 -4
  223. data/lib/puppet/parser/functions/versioncmp.rb +22 -1
  224. data/lib/puppet/parser/grammar.ra +812 -0
  225. data/lib/puppet/parser/interpreter.rb +4 -4
  226. data/lib/puppet/parser/lexer.rb +44 -15
  227. data/lib/puppet/parser/loaded_code.rb +115 -0
  228. data/lib/puppet/parser/makefile +8 -0
  229. data/lib/puppet/parser/parser.rb +1080 -928
  230. data/lib/puppet/parser/parser_support.rb +118 -96
  231. data/lib/puppet/parser/resource.rb +56 -126
  232. data/lib/puppet/parser/resource/param.rb +2 -76
  233. data/lib/puppet/parser/resource/reference.rb +15 -8
  234. data/lib/puppet/parser/scope.rb +68 -35
  235. data/lib/puppet/parser/templatewrapper.rb +8 -8
  236. data/lib/puppet/parser/yaml_trimmer.rb +11 -0
  237. data/lib/puppet/property.rb +69 -124
  238. data/lib/puppet/property/list.rb +3 -3
  239. data/lib/puppet/provider.rb +5 -5
  240. data/lib/puppet/provider/augeas/augeas.rb +119 -118
  241. data/lib/puppet/provider/computer/computer.rb +3 -3
  242. data/lib/puppet/provider/confine/variable.rb +1 -1
  243. data/lib/puppet/provider/cron/crontab.rb +8 -7
  244. data/lib/puppet/provider/group/directoryservice.rb +2 -2
  245. data/lib/puppet/provider/group/groupadd.rb +1 -1
  246. data/lib/puppet/provider/group/ldap.rb +3 -3
  247. data/lib/puppet/provider/group/pw.rb +1 -1
  248. data/lib/puppet/provider/host/parsed.rb +3 -3
  249. data/lib/puppet/provider/ldap.rb +1 -3
  250. data/lib/puppet/provider/macauthorization/macauthorization.rb +62 -55
  251. data/lib/puppet/provider/mailalias/aliases.rb +9 -1
  252. data/lib/puppet/provider/maillist/mailman.rb +8 -4
  253. data/lib/puppet/provider/mcx/mcxcontent.rb +11 -11
  254. data/lib/puppet/provider/mount/parsed.rb +2 -2
  255. data/lib/puppet/provider/nameservice.rb +6 -6
  256. data/lib/puppet/provider/nameservice/directoryservice.rb +83 -87
  257. data/lib/puppet/provider/package/appdmg.rb +10 -9
  258. data/lib/puppet/provider/package/apple.rb +1 -3
  259. data/lib/puppet/provider/package/apt.rb +5 -5
  260. data/lib/puppet/provider/package/aptitude.rb +1 -1
  261. data/lib/puppet/provider/package/aptrpm.rb +1 -1
  262. data/lib/puppet/provider/package/darwinport.rb +1 -1
  263. data/lib/puppet/provider/package/dpkg.rb +2 -2
  264. data/lib/puppet/provider/package/fink.rb +6 -6
  265. data/lib/puppet/provider/package/freebsd.rb +1 -1
  266. data/lib/puppet/provider/package/gem.rb +2 -2
  267. data/lib/puppet/provider/package/hpux.rb +5 -5
  268. data/lib/puppet/provider/package/pkgdmg.rb +30 -22
  269. data/lib/puppet/provider/package/portage.rb +1 -1
  270. data/lib/puppet/provider/package/ports.rb +1 -1
  271. data/lib/puppet/provider/package/rpm.rb +5 -5
  272. data/lib/puppet/provider/package/rug.rb +1 -1
  273. data/lib/puppet/provider/package/sun.rb +7 -7
  274. data/lib/puppet/provider/package/up2date.rb +1 -1
  275. data/lib/puppet/provider/package/yum.rb +2 -2
  276. data/lib/puppet/provider/package/yumhelper.py +2 -2
  277. data/lib/puppet/provider/port/parsed.rb +1 -1
  278. data/lib/puppet/provider/selmodule/semodule.rb +3 -3
  279. data/lib/puppet/provider/service/base.rb +21 -12
  280. data/lib/puppet/provider/service/daemontools.rb +86 -49
  281. data/lib/puppet/provider/service/debian.rb +20 -12
  282. data/lib/puppet/provider/service/freebsd.rb +5 -5
  283. data/lib/puppet/provider/service/gentoo.rb +2 -2
  284. data/lib/puppet/provider/service/init.rb +21 -33
  285. data/lib/puppet/provider/service/launchd.rb +120 -48
  286. data/lib/puppet/provider/service/redhat.rb +12 -21
  287. data/lib/puppet/provider/service/runit.rb +19 -9
  288. data/lib/puppet/provider/service/smf.rb +49 -34
  289. data/lib/puppet/provider/ssh_authorized_key/parsed.rb +34 -0
  290. data/lib/puppet/provider/sshkey/parsed.rb +2 -2
  291. data/lib/puppet/provider/user/directoryservice.rb +12 -29
  292. data/lib/puppet/provider/user/hpux.rb +3 -3
  293. data/lib/puppet/provider/user/ldap.rb +2 -2
  294. data/lib/puppet/provider/zfs/solaris.rb +1 -1
  295. data/lib/puppet/provider/zone/solaris.rb +4 -4
  296. data/lib/puppet/provider/zpool/solaris.rb +3 -3
  297. data/lib/puppet/rails.rb +9 -9
  298. data/lib/puppet/rails/benchmark.rb +69 -0
  299. data/lib/puppet/rails/database/001_add_created_at_to_all_tables.rb +5 -5
  300. data/lib/puppet/rails/database/002_remove_duplicated_index_on_all_tables.rb +2 -2
  301. data/lib/puppet/rails/database/003_add_environment_to_host.rb +1 -1
  302. data/lib/puppet/rails/database/schema.rb +8 -8
  303. data/lib/puppet/rails/fact_value.rb +1 -1
  304. data/lib/puppet/rails/host.rb +211 -93
  305. data/lib/puppet/rails/param_name.rb +5 -1
  306. data/lib/puppet/rails/param_value.rb +29 -2
  307. data/lib/puppet/rails/puppet_tag.rb +5 -0
  308. data/lib/puppet/rails/resource.rb +120 -20
  309. data/lib/puppet/rails/resource_tag.rb +1 -1
  310. data/lib/puppet/rails/source_file.rb +1 -1
  311. data/lib/puppet/reference/configuration.rb +14 -14
  312. data/lib/puppet/reference/function.rb +1 -1
  313. data/lib/puppet/reference/metaparameter.rb +48 -0
  314. data/lib/puppet/reference/providers.rb +6 -6
  315. data/lib/puppet/reference/type.rb +1 -37
  316. data/lib/puppet/relationship.rb +57 -30
  317. data/lib/puppet/reports/rrdgraph.rb +4 -4
  318. data/lib/puppet/reports/store.rb +3 -3
  319. data/lib/puppet/reports/tagmail.rb +15 -15
  320. data/lib/puppet/resource.rb +265 -0
  321. data/lib/puppet/{node → resource}/catalog.rb +188 -112
  322. data/lib/puppet/{resource_reference.rb → resource/reference.rb} +46 -24
  323. data/lib/puppet/simple_graph.rb +165 -27
  324. data/lib/puppet/ssl.rb +7 -0
  325. data/lib/puppet/ssl/base.rb +62 -0
  326. data/lib/puppet/ssl/certificate.rb +34 -0
  327. data/lib/puppet/ssl/certificate_authority.rb +298 -0
  328. data/lib/puppet/ssl/certificate_authority/interface.rb +118 -0
  329. data/lib/puppet/ssl/certificate_factory.rb +145 -0
  330. data/lib/puppet/ssl/certificate_request.rb +51 -0
  331. data/lib/puppet/ssl/certificate_revocation_list.rb +86 -0
  332. data/lib/puppet/ssl/host.rb +271 -0
  333. data/lib/puppet/ssl/inventory.rb +52 -0
  334. data/lib/puppet/ssl/key.rb +56 -0
  335. data/lib/puppet/sslcertificates.rb +6 -6
  336. data/lib/puppet/sslcertificates/ca.rb +15 -15
  337. data/lib/puppet/sslcertificates/certificate.rb +4 -4
  338. data/lib/puppet/sslcertificates/inventory.rb +3 -3
  339. data/lib/puppet/transaction.rb +113 -139
  340. data/lib/puppet/transaction/change.rb +6 -6
  341. data/lib/puppet/transaction/event.rb +1 -1
  342. data/lib/puppet/transaction/report.rb +7 -1
  343. data/lib/puppet/transportable.rb +28 -28
  344. data/lib/puppet/type.rb +263 -688
  345. data/lib/puppet/type/augeas.rb +3 -2
  346. data/lib/puppet/type/component.rb +28 -95
  347. data/lib/puppet/type/computer.rb +10 -10
  348. data/lib/puppet/type/cron.rb +19 -14
  349. data/lib/puppet/type/exec.rb +21 -20
  350. data/lib/puppet/type/file.rb +306 -633
  351. data/lib/puppet/type/file/checksum.rb +10 -11
  352. data/lib/puppet/type/file/content.rb +83 -22
  353. data/lib/puppet/type/file/ensure.rb +15 -9
  354. data/lib/puppet/type/file/group.rb +7 -1
  355. data/lib/puppet/type/file/mode.rb +1 -1
  356. data/lib/puppet/type/file/owner.rb +9 -3
  357. data/lib/puppet/type/file/selcontext.rb +4 -4
  358. data/lib/puppet/type/file/source.rb +78 -179
  359. data/lib/puppet/type/file/target.rb +3 -3
  360. data/lib/puppet/type/file/type.rb +2 -2
  361. data/lib/puppet/type/filebucket.rb +33 -54
  362. data/lib/puppet/type/group.rb +8 -8
  363. data/lib/puppet/type/host.rb +7 -7
  364. data/lib/puppet/type/k5login.rb +2 -2
  365. data/lib/puppet/type/macauthorization.rb +77 -52
  366. data/lib/puppet/type/mailalias.rb +2 -2
  367. data/lib/puppet/type/maillist.rb +2 -2
  368. data/lib/puppet/type/mcx.rb +3 -3
  369. data/lib/puppet/type/mount.rb +16 -11
  370. data/lib/puppet/type/notify.rb +4 -4
  371. data/lib/puppet/type/package.rb +6 -28
  372. data/lib/puppet/type/port.rb +1 -1
  373. data/lib/puppet/type/resources.rb +19 -19
  374. data/lib/puppet/type/schedule.rb +18 -20
  375. data/lib/puppet/type/selmodule.rb +1 -1
  376. data/lib/puppet/type/service.rb +11 -7
  377. data/lib/puppet/type/ssh_authorized_key.rb +26 -9
  378. data/lib/puppet/type/sshkey.rb +2 -2
  379. data/lib/puppet/type/tidy.rb +285 -289
  380. data/lib/puppet/type/user.rb +9 -7
  381. data/lib/puppet/type/yumrepo.rb +17 -16
  382. data/lib/puppet/type/zone.rb +8 -7
  383. data/lib/puppet/util.rb +11 -36
  384. data/lib/puppet/util/autoload.rb +31 -19
  385. data/lib/puppet/util/autoload/file_cache.rb +115 -0
  386. data/lib/puppet/util/backups.rb +86 -0
  387. data/lib/puppet/util/cacher.rb +135 -0
  388. data/lib/puppet/util/checksums.rb +11 -1
  389. data/lib/puppet/util/classgen.rb +1 -1
  390. data/lib/puppet/util/config_store.rb +2 -2
  391. data/lib/puppet/util/constant_inflector.rb +1 -1
  392. data/lib/puppet/util/diff.rb +2 -2
  393. data/lib/puppet/util/docs.rb +9 -3
  394. data/lib/puppet/util/execution.rb +1 -1
  395. data/lib/puppet/util/feature.rb +27 -20
  396. data/lib/puppet/util/fileparsing.rb +3 -3
  397. data/lib/puppet/util/filetype.rb +8 -6
  398. data/lib/puppet/util/graph.rb +5 -5
  399. data/lib/puppet/util/inifile.rb +5 -5
  400. data/lib/puppet/util/json.rb +13 -0
  401. data/lib/puppet/util/ldap/connection.rb +2 -2
  402. data/lib/puppet/util/log.rb +48 -31
  403. data/lib/puppet/util/metric.rb +4 -4
  404. data/lib/puppet/util/monkey_patches.rb +43 -0
  405. data/lib/puppet/util/nagios_maker.rb +1 -1
  406. data/lib/puppet/util/package.rb +4 -4
  407. data/lib/puppet/util/pidlock.rb +59 -59
  408. data/lib/puppet/util/posix.rb +13 -52
  409. data/lib/puppet/util/provider_features.rb +3 -3
  410. data/lib/puppet/util/queue.rb +96 -0
  411. data/lib/puppet/util/queue/stomp.rb +47 -0
  412. data/lib/puppet/util/rails/cache_accumulator.rb +65 -0
  413. data/lib/puppet/util/rails/collection_merger.rb +0 -39
  414. data/lib/puppet/util/rails/reference_serializer.rb +17 -3
  415. data/lib/puppet/util/rdoc.rb +1 -0
  416. data/lib/puppet/util/rdoc/code_objects.rb +5 -1
  417. data/lib/puppet/util/rdoc/generators/puppet_generator.rb +5 -5
  418. data/lib/puppet/util/rdoc/generators/template/puppet/puppet.rb +13 -13
  419. data/lib/puppet/util/rdoc/parser.rb +28 -32
  420. data/lib/puppet/util/reference.rb +29 -8
  421. data/lib/puppet/util/resource_template.rb +1 -1
  422. data/lib/puppet/util/selinux.rb +12 -6
  423. data/lib/puppet/util/settings.rb +203 -578
  424. data/lib/puppet/util/settings/boolean_setting.rb +33 -0
  425. data/lib/puppet/util/settings/file_setting.rb +119 -0
  426. data/lib/puppet/util/settings/setting.rb +110 -0
  427. data/lib/puppet/util/subclass_loader.rb +1 -1
  428. data/lib/puppet/util/suidmanager.rb +2 -2
  429. data/lib/puppet/util/tagging.rb +1 -1
  430. data/lib/puppet/util/warnings.rb +17 -9
  431. data/man/man8/filebucket.8 +2 -2
  432. data/man/man8/pi.8 +2 -2
  433. data/man/man8/puppet.8 +3 -4
  434. data/man/man8/puppet.conf.8 +63 -63
  435. data/man/man8/puppetca.8 +2 -2
  436. data/man/man8/puppetd.8 +2 -2
  437. data/man/man8/puppetdoc.8 +2 -2
  438. data/man/man8/puppetmasterd.8 +2 -2
  439. data/man/man8/puppetrun.8 +2 -2
  440. data/man/man8/ralsh.8 +3 -3
  441. data/sbin/puppetca +102 -0
  442. data/sbin/puppetd +159 -0
  443. data/sbin/puppetmasterd +66 -0
  444. data/sbin/puppetqd +53 -0
  445. data/sbin/puppetrun +130 -0
  446. data/spec/Rakefile +2 -2
  447. data/spec/integration/application/puppet.rb +33 -0
  448. data/spec/integration/bin/puppetmasterd.rb +110 -0
  449. data/spec/integration/configurer.rb +18 -0
  450. data/spec/integration/defaults.rb +158 -7
  451. data/spec/integration/file_serving/content.rb +2 -0
  452. data/spec/integration/file_serving/fileset.rb +14 -0
  453. data/spec/integration/file_serving/metadata.rb +2 -0
  454. data/spec/integration/file_serving/terminus_helper.rb +22 -0
  455. data/spec/integration/indirector/catalog/compiler.rb +67 -0
  456. data/spec/integration/indirector/catalog/queue.rb +61 -0
  457. data/spec/integration/indirector/certificate/rest.rb +69 -0
  458. data/spec/integration/indirector/certificate_request/rest.rb +89 -0
  459. data/spec/integration/indirector/certificate_revocation_list/rest.rb +77 -0
  460. data/spec/integration/indirector/direct_file_server.rb +16 -23
  461. data/spec/integration/indirector/file_content/file_server.rb +75 -0
  462. data/spec/integration/indirector/report/rest.rb +95 -0
  463. data/spec/integration/indirector/rest.rb +207 -147
  464. data/spec/integration/network/client.rb +19 -0
  465. data/spec/integration/network/formats.rb +110 -0
  466. data/spec/integration/network/handler.rb +25 -0
  467. data/spec/integration/network/server/mongrel.rb +26 -8
  468. data/spec/integration/network/server/webrick.rb +49 -11
  469. data/spec/integration/node/environment.rb +58 -0
  470. data/spec/integration/node/facts.rb +4 -2
  471. data/spec/integration/parser/compiler.rb +29 -0
  472. data/spec/integration/parser/functions/require.rb +67 -0
  473. data/spec/integration/provider/mailalias/aliases.rb +25 -0
  474. data/spec/integration/{node → resource}/catalog.rb +17 -10
  475. data/spec/integration/ssl/certificate_authority.rb +135 -0
  476. data/spec/integration/ssl/certificate_request.rb +59 -0
  477. data/spec/integration/ssl/certificate_revocation_list.rb +42 -0
  478. data/spec/integration/ssl/host.rb +90 -0
  479. data/spec/integration/transaction.rb +66 -0
  480. data/spec/integration/transaction/report.rb +2 -5
  481. data/spec/integration/type.rb +22 -0
  482. data/spec/integration/type/file.rb +458 -0
  483. data/spec/integration/type/package.rb +1 -1
  484. data/spec/integration/type/tidy.rb +27 -0
  485. data/spec/integration/util/autoload.rb +114 -0
  486. data/spec/integration/util/feature.rb +54 -0
  487. data/spec/integration/util/file_locking.rb +2 -1
  488. data/spec/integration/util/settings.rb +27 -0
  489. data/spec/lib/puppet_spec/files.rb +9 -0
  490. data/spec/monkey_patches/add_confine_and_runnable_to_rspec_dsl.rb +1 -0
  491. data/spec/monkey_patches/alias_should_to_must.rb +1 -0
  492. data/spec/shared_behaviours/file_server_terminus.rb +14 -11
  493. data/spec/shared_behaviours/file_serving.rb +13 -17
  494. data/spec/spec_helper.rb +22 -5
  495. data/spec/unit/agent.rb +259 -0
  496. data/spec/unit/agent/locker.rb +100 -0
  497. data/spec/unit/agent/runner.rb +118 -0
  498. data/spec/unit/application.rb +420 -0
  499. data/spec/unit/application/filebucket.rb +220 -0
  500. data/spec/unit/application/pi.rb +84 -0
  501. data/spec/unit/application/puppet.rb +404 -0
  502. data/spec/unit/application/puppetca.rb +142 -0
  503. data/spec/unit/application/puppetd.rb +502 -0
  504. data/spec/unit/application/puppetdoc.rb +345 -0
  505. data/spec/unit/application/puppetmasterd.rb +456 -0
  506. data/spec/unit/application/puppetqd.rb +186 -0
  507. data/spec/unit/application/puppetrun.rb +279 -0
  508. data/spec/unit/application/ralsh.rb +237 -0
  509. data/spec/unit/configurer.rb +232 -0
  510. data/spec/unit/configurer/downloader.rb +188 -0
  511. data/spec/unit/configurer/fact_handler.rb +150 -0
  512. data/spec/unit/configurer/plugin_handler.rb +112 -0
  513. data/spec/unit/daemon.rb +287 -0
  514. data/spec/unit/file_serving/{file_base.rb → base.rb} +39 -31
  515. data/spec/unit/file_serving/configuration.rb +104 -93
  516. data/spec/unit/file_serving/configuration/parser.rb +64 -18
  517. data/spec/unit/file_serving/content.rb +65 -26
  518. data/spec/unit/file_serving/fileset.rb +116 -14
  519. data/spec/unit/file_serving/indirection_hooks.rb +34 -95
  520. data/spec/unit/file_serving/metadata.rb +27 -40
  521. data/spec/unit/file_serving/mount.rb +7 -118
  522. data/spec/unit/file_serving/mount/file.rb +188 -0
  523. data/spec/unit/file_serving/mount/modules.rb +63 -0
  524. data/spec/unit/file_serving/mount/plugins.rb +61 -0
  525. data/spec/unit/file_serving/terminus_helper.rb +39 -27
  526. data/spec/unit/indirector.rb +6 -1
  527. data/spec/unit/indirector/active_record.rb +76 -0
  528. data/spec/unit/indirector/catalog/active_record.rb +122 -0
  529. data/spec/unit/indirector/catalog/compiler.rb +222 -118
  530. data/spec/unit/indirector/catalog/queue.rb +20 -0
  531. data/spec/unit/indirector/catalog/rest.rb +11 -0
  532. data/spec/unit/indirector/catalog/yaml.rb +6 -6
  533. data/spec/unit/indirector/certificate/ca.rb +28 -0
  534. data/spec/unit/indirector/certificate/file.rb +28 -0
  535. data/spec/unit/indirector/certificate/rest.rb +23 -0
  536. data/spec/unit/indirector/certificate_request/ca.rb +19 -0
  537. data/spec/unit/indirector/certificate_request/file.rb +19 -0
  538. data/spec/unit/indirector/certificate_request/rest.rb +23 -0
  539. data/spec/unit/indirector/certificate_revocation_list/ca.rb +21 -0
  540. data/spec/unit/indirector/certificate_revocation_list/file.rb +20 -0
  541. data/spec/unit/indirector/certificate_revocation_list/rest.rb +23 -0
  542. data/spec/unit/indirector/direct_file_server.rb +3 -8
  543. data/spec/unit/indirector/exec.rb +6 -1
  544. data/spec/unit/indirector/facts/active_record.rb +104 -0
  545. data/spec/unit/indirector/facts/facter.rb +53 -12
  546. data/spec/unit/indirector/facts/rest.rb +11 -0
  547. data/spec/unit/indirector/file.rb +8 -1
  548. data/spec/unit/indirector/file_metadata/file.rb +5 -5
  549. data/spec/unit/indirector/file_server.rb +181 -98
  550. data/spec/unit/indirector/indirection.rb +102 -38
  551. data/spec/unit/indirector/key/ca.rb +28 -0
  552. data/spec/unit/indirector/key/file.rb +104 -0
  553. data/spec/unit/indirector/node/active_record.rb +34 -0
  554. data/spec/unit/indirector/node/ldap.rb +1 -1
  555. data/spec/unit/indirector/node/rest.rb +2 -2
  556. data/spec/unit/indirector/queue.rb +123 -0
  557. data/spec/unit/indirector/report/rest.rb +28 -0
  558. data/spec/unit/indirector/request.rb +221 -0
  559. data/spec/unit/indirector/rest.rb +343 -334
  560. data/spec/unit/indirector/runner/rest.rb +11 -0
  561. data/spec/unit/indirector/ssl_file.rb +280 -0
  562. data/spec/unit/module.rb +180 -180
  563. data/spec/unit/network/authconfig.rb +292 -0
  564. data/spec/unit/network/authstore.rb +94 -0
  565. data/spec/unit/network/client.rb +2 -2
  566. data/spec/unit/network/client/dipper.rb +16 -0
  567. data/spec/unit/network/format.rb +191 -0
  568. data/spec/unit/network/format_handler.rb +306 -0
  569. data/spec/unit/network/formats.rb +249 -0
  570. data/spec/unit/network/handler/fileserver.rb +2 -5
  571. data/spec/unit/network/http.rb +3 -3
  572. data/spec/unit/network/http/api/v1.rb +122 -0
  573. data/spec/unit/network/http/handler.rb +448 -0
  574. data/spec/unit/network/http/mongrel.rb +46 -32
  575. data/spec/unit/network/http/mongrel/rest.rb +174 -319
  576. data/spec/unit/network/http/rack.rb +102 -0
  577. data/spec/unit/network/http/rack/rest.rb +199 -0
  578. data/spec/unit/network/http/rack/xmlrpc.rb +157 -0
  579. data/spec/unit/network/http/webrick.rb +249 -37
  580. data/spec/unit/network/http/webrick/rest.rb +113 -279
  581. data/spec/unit/network/http_pool.rb +86 -110
  582. data/spec/unit/network/rest_authconfig.rb +146 -0
  583. data/spec/unit/network/rest_authorization.rb +43 -0
  584. data/spec/unit/network/rights.rb +519 -0
  585. data/spec/unit/network/server.rb +475 -257
  586. data/spec/unit/node.rb +43 -10
  587. data/spec/unit/node/environment.rb +143 -9
  588. data/spec/unit/node/facts.rb +77 -24
  589. data/spec/unit/other/selinux.rb +85 -0
  590. data/spec/unit/other/transbucket.rb +29 -13
  591. data/spec/unit/other/transobject.rb +35 -15
  592. data/spec/unit/parameter.rb +378 -5
  593. data/spec/unit/parser/ast.rb +1 -1
  594. data/spec/unit/parser/ast/arithmetic_operator.rb +17 -17
  595. data/spec/unit/parser/ast/astarray.rb +16 -10
  596. data/spec/unit/parser/ast/boolean_operator.rb +2 -2
  597. data/spec/unit/parser/ast/casestatement.rb +143 -0
  598. data/spec/unit/parser/ast/collection.rb +63 -0
  599. data/spec/unit/parser/ast/collexpr.rb +31 -8
  600. data/spec/unit/parser/ast/comparison_operator.rb +9 -9
  601. data/spec/unit/parser/ast/definition.rb +18 -0
  602. data/spec/unit/parser/ast/function.rb +6 -0
  603. data/spec/unit/parser/ast/ifstatement.rb +75 -0
  604. data/spec/unit/parser/ast/leaf.rb +261 -0
  605. data/spec/unit/parser/ast/match_operator.rb +50 -0
  606. data/spec/unit/parser/ast/minus.rb +1 -1
  607. data/spec/unit/parser/ast/node.rb +20 -0
  608. data/spec/unit/parser/ast/not.rb +1 -1
  609. data/spec/unit/parser/ast/resource_override.rb +5 -5
  610. data/spec/unit/parser/ast/resource_reference.rb +11 -5
  611. data/spec/unit/parser/ast/selector.rb +156 -0
  612. data/spec/unit/parser/ast/vardef.rb +11 -11
  613. data/spec/unit/parser/collector.rb +167 -48
  614. data/spec/unit/parser/compiler.rb +128 -104
  615. data/spec/unit/parser/files.rb +190 -0
  616. data/spec/unit/parser/functions/inline_template.rb +0 -0
  617. data/spec/unit/parser/functions/regsubst.rb +42 -42
  618. data/spec/unit/parser/functions/require.rb +36 -0
  619. data/spec/unit/parser/functions/shellquote.rb +92 -0
  620. data/spec/unit/parser/functions/split.rb +51 -0
  621. data/spec/unit/parser/functions/sprintf.rb +11 -11
  622. data/spec/unit/parser/functions/template.rb +0 -0
  623. data/spec/unit/parser/functions/versioncmp.rb +2 -2
  624. data/spec/unit/parser/interpreter.rb +16 -7
  625. data/spec/unit/parser/lexer.rb +72 -12
  626. data/spec/unit/parser/loaded_code.rb +198 -0
  627. data/spec/unit/parser/parser.rb +215 -28
  628. data/spec/unit/parser/resource.rb +131 -22
  629. data/spec/unit/parser/scope.rb +207 -12
  630. data/spec/unit/parser/templatewrapper.rb +8 -3
  631. data/spec/unit/property.rb +270 -16
  632. data/spec/unit/property/list.rb +12 -6
  633. data/spec/unit/provider.rb +31 -0
  634. data/spec/unit/provider/augeas/augeas.rb +61 -33
  635. data/spec/unit/provider/macauthorization.rb +29 -29
  636. data/spec/unit/provider/mcx/mcxcontent.rb +4 -4
  637. data/spec/unit/provider/mount/parsed.rb +5 -8
  638. data/spec/unit/provider/naginator.rb +0 -0
  639. data/spec/unit/provider/package/apt.rb +6 -6
  640. data/spec/unit/provider/package/pkgdmg.rb +73 -0
  641. data/spec/unit/provider/selboolean.rb +1 -1
  642. data/spec/unit/provider/selmodule.rb +2 -2
  643. data/spec/unit/provider/service/daemontools.rb +40 -15
  644. data/spec/unit/provider/service/debian.rb +89 -0
  645. data/spec/unit/provider/service/init.rb +106 -0
  646. data/spec/unit/provider/service/launchd.rb +71 -13
  647. data/spec/unit/provider/service/redhat.rb +94 -0
  648. data/spec/unit/provider/service/runit.rb +14 -2
  649. data/spec/unit/provider/ssh_authorized_key/parsed.rb +66 -2
  650. data/spec/unit/provider/user/ldap.rb +1 -1
  651. data/spec/unit/provider/user/user_role_add.rb +1 -1
  652. data/spec/unit/provider/zfs/solaris.rb +18 -6
  653. data/spec/unit/provider/zone/solaris.rb +1 -1
  654. data/spec/unit/rails.rb +16 -22
  655. data/spec/unit/rails/host.rb +163 -0
  656. data/spec/unit/rails/param_value.rb +49 -0
  657. data/spec/unit/rails/resource.rb +87 -0
  658. data/spec/unit/relationship.rb +141 -29
  659. data/spec/unit/resource.rb +504 -0
  660. data/spec/unit/resource/catalog.rb +1061 -0
  661. data/spec/unit/resource/reference.rb +111 -0
  662. data/spec/unit/simple_graph.rb +448 -191
  663. data/spec/unit/ssl/certificate.rb +124 -0
  664. data/spec/unit/ssl/certificate_authority.rb +741 -0
  665. data/spec/unit/ssl/certificate_authority/interface.rb +269 -0
  666. data/spec/unit/ssl/certificate_factory.rb +107 -0
  667. data/spec/unit/ssl/certificate_request.rb +193 -0
  668. data/spec/unit/ssl/certificate_revocation_list.rb +180 -0
  669. data/spec/unit/ssl/host.rb +704 -0
  670. data/spec/unit/ssl/inventory.rb +180 -0
  671. data/spec/unit/ssl/key.rb +198 -0
  672. data/spec/unit/transaction.rb +65 -2
  673. data/spec/unit/transaction/change.rb +1 -1
  674. data/spec/unit/transaction/report.rb +1 -1
  675. data/spec/unit/type.rb +361 -8
  676. data/spec/unit/type/augeas.rb +30 -37
  677. data/spec/unit/type/component.rb +63 -0
  678. data/spec/unit/type/computer.rb +17 -21
  679. data/spec/unit/type/exec.rb +27 -2
  680. data/spec/unit/type/file.rb +704 -83
  681. data/spec/unit/type/file/content.rb +253 -15
  682. data/spec/unit/type/file/ensure.rb +65 -2
  683. data/spec/unit/type/file/group.rb +5 -0
  684. data/spec/unit/type/file/owner.rb +5 -0
  685. data/spec/unit/type/file/selinux.rb +12 -16
  686. data/spec/unit/type/file/source.rb +264 -0
  687. data/spec/unit/type/filebucket.rb +74 -0
  688. data/spec/unit/type/group.rb +1 -5
  689. data/spec/unit/type/macauthorization.rb +59 -26
  690. data/spec/unit/type/mcx.rb +8 -16
  691. data/spec/unit/type/mount.rb +8 -16
  692. data/spec/unit/type/noop_metaparam.rb +0 -2
  693. data/spec/unit/type/package.rb +13 -23
  694. data/spec/unit/type/resources.rb +4 -7
  695. data/spec/unit/type/schedule.rb +1 -7
  696. data/spec/unit/type/selboolean.rb +4 -6
  697. data/spec/unit/type/service.rb +23 -33
  698. data/spec/unit/type/ssh_authorized_key.rb +25 -14
  699. data/spec/unit/type/tidy.rb +329 -21
  700. data/spec/unit/type/user.rb +18 -10
  701. data/spec/unit/type/zfs.rb +6 -6
  702. data/spec/unit/util/autoload.rb +94 -3
  703. data/spec/unit/util/autoload/file_cache.rb +183 -0
  704. data/spec/unit/util/backups.rb +159 -0
  705. data/spec/unit/util/cache_accumulator.rb +69 -0
  706. data/spec/unit/util/cacher.rb +185 -0
  707. data/spec/unit/util/checksums.rb +9 -1
  708. data/spec/unit/util/feature.rb +72 -0
  709. data/spec/unit/util/filetype.rb +1 -11
  710. data/spec/unit/util/json.rb +21 -0
  711. data/spec/unit/util/log.rb +45 -0
  712. data/spec/unit/util/package.rb +2 -2
  713. data/spec/unit/util/queue.rb +88 -0
  714. data/spec/unit/util/queue/stomp.rb +140 -0
  715. data/spec/unit/util/reference_serializer.rb +52 -0
  716. data/spec/unit/util/selinux.rb +5 -3
  717. data/spec/unit/util/settings.rb +413 -264
  718. data/spec/unit/util/settings/file_setting.rb +223 -0
  719. data/spec/unit/util/storage.rb +11 -11
  720. data/spec/unit/util/warnings.rb +21 -17
  721. data/test/Rakefile +6 -5
  722. data/test/certmgr/ca.rb +5 -5
  723. data/test/certmgr/certmgr.rb +4 -4
  724. data/test/data/providers/cron/crontab.allthree +2 -2
  725. data/test/data/providers/cron/crontab.envNcomment +1 -1
  726. data/test/data/providers/cron/crontab.envNname +1 -1
  727. data/test/data/providers/cron/crontab.multirecords +1 -1
  728. data/test/data/providers/cron/crontab_collections.yaml +14 -14
  729. data/test/data/providers/cron/crontab_multiple_with_env.yaml +6 -6
  730. data/test/data/providers/cron/crontab_sample_records.yaml +102 -102
  731. data/test/data/providers/mailalias/aliases/test1 +28 -0
  732. data/test/data/providers/package/testpackages.yaml +6 -6
  733. data/test/data/reports/1.yaml +17 -17
  734. data/test/data/reports/tagmail_passers.conf +2 -2
  735. data/test/data/snippets/append.pp +5 -5
  736. data/test/data/snippets/casestatement.pp +9 -2
  737. data/test/data/snippets/classincludes.pp +1 -1
  738. data/test/data/snippets/collection_override.pp +8 -0
  739. data/test/data/snippets/fqparents.pp +2 -2
  740. data/test/data/snippets/ifexpression.pp +12 -0
  741. data/test/data/snippets/multilinecomments.pp +5 -1
  742. data/test/data/snippets/selectorvalues.pp +7 -0
  743. data/test/data/types/hosts/1 +1 -1
  744. data/test/data/types/hosts/2 +3 -3
  745. data/test/data/types/hosts/solaris +2 -2
  746. data/test/data/types/mount/freebsd.fstab +7 -7
  747. data/test/data/types/mount/solaris.fstab +10 -10
  748. data/test/data/types/port/1 +472 -472
  749. data/test/data/types/port/darwin +4347 -4347
  750. data/test/language/ast.rb +3 -2
  751. data/test/language/ast/casestatement.rb +12 -12
  752. data/test/language/ast/resource.rb +4 -4
  753. data/test/language/ast/resource_reference.rb +5 -5
  754. data/test/language/ast/selector.rb +11 -11
  755. data/test/language/ast/variable.rb +4 -4
  756. data/test/language/functions.rb +16 -16
  757. data/test/language/parser.rb +89 -111
  758. data/test/language/resource.rb +3 -88
  759. data/test/language/scope.rb +14 -55
  760. data/test/language/snippets.rb +31 -31
  761. data/test/lib/puppettest.rb +12 -12
  762. data/test/lib/puppettest/certificates.rb +2 -2
  763. data/test/lib/puppettest/exetest.rb +0 -1
  764. data/test/lib/puppettest/fakes.rb +1 -1
  765. data/test/lib/puppettest/parsertesting.rb +9 -4
  766. data/test/lib/puppettest/railstesting.rb +3 -3
  767. data/test/lib/puppettest/servertest.rb +1 -1
  768. data/test/lib/puppettest/support/assertions.rb +2 -2
  769. data/test/lib/puppettest/support/collection.rb +1 -1
  770. data/test/lib/puppettest/support/resources.rb +7 -7
  771. data/test/lib/puppettest/support/utils.rb +10 -16
  772. data/test/lib/puppettest/testcase.rb +2 -1
  773. data/test/network/authconfig.rb +1 -1
  774. data/test/network/authorization.rb +1 -1
  775. data/test/network/authstore.rb +57 -14
  776. data/test/network/client/ca.rb +1 -0
  777. data/test/network/client/resource.rb +12 -50
  778. data/test/network/client_request.rb +1 -1
  779. data/test/network/handler/bucket.rb +2 -2
  780. data/test/network/handler/fileserver.rb +17 -21
  781. data/test/network/handler/master.rb +5 -5
  782. data/test/network/handler/report.rb +3 -3
  783. data/test/network/handler/resource.rb +29 -75
  784. data/test/network/handler/runner.rb +8 -58
  785. data/test/network/rights.rb +1 -1
  786. data/test/network/server/mongrel_test.rb +15 -1
  787. data/test/network/server/webrick.rb +0 -36
  788. data/test/network/xmlrpc/webrick_servlet.rb +5 -5
  789. data/test/other/dsl.rb +3 -3
  790. data/test/other/events.rb +15 -15
  791. data/test/other/puppet.rb +2 -32
  792. data/test/other/relationships.rb +21 -148
  793. data/test/other/report.rb +20 -23
  794. data/test/other/transactions.rb +110 -298
  795. data/test/puppet/defaults.rb +1 -1
  796. data/test/puppet/tc_suidmanager.rb +1 -1
  797. data/test/rails/railsparameter.rb +4 -4
  798. data/test/ral/manager/attributes.rb +12 -68
  799. data/test/ral/manager/instances.rb +3 -19
  800. data/test/ral/manager/manager.rb +7 -7
  801. data/test/ral/manager/provider.rb +7 -7
  802. data/test/ral/manager/type.rb +54 -349
  803. data/test/ral/providers/cron/crontab.rb +14 -14
  804. data/test/ral/providers/group.rb +5 -6
  805. data/test/ral/providers/host/parsed.rb +3 -3
  806. data/test/ral/providers/mailalias/aliases.rb +4 -4
  807. data/test/ral/providers/package.rb +3 -3
  808. data/test/ral/providers/package/aptitude.rb +55 -55
  809. data/test/ral/providers/package/aptrpm.rb +7 -7
  810. data/test/ral/providers/parsedfile.rb +10 -14
  811. data/test/ral/providers/port/parsed.rb +6 -6
  812. data/test/ral/providers/provider.rb +10 -10
  813. data/test/ral/providers/service/base.rb +32 -32
  814. data/test/ral/providers/sshkey/parsed.rb +14 -14
  815. data/test/ral/providers/user.rb +16 -17
  816. data/test/ral/providers/user/useradd.rb +19 -22
  817. data/test/ral/type/cron.rb +21 -28
  818. data/test/ral/type/exec.rb +57 -60
  819. data/test/ral/type/file.rb +88 -862
  820. data/test/ral/type/file/target.rb +21 -70
  821. data/test/ral/type/fileignoresource.rb +37 -44
  822. data/test/ral/type/filesources.rb +43 -473
  823. data/test/ral/type/group.rb +6 -7
  824. data/test/ral/type/host.rb +14 -30
  825. data/test/ral/type/mailalias.rb +3 -3
  826. data/test/ral/type/port.rb +5 -5
  827. data/test/ral/type/resources.rb +37 -37
  828. data/test/ral/type/service.rb +3 -3
  829. data/test/ral/type/sshkey.rb +34 -39
  830. data/test/ral/type/user.rb +15 -14
  831. data/test/ral/type/yumrepo.rb +18 -17
  832. data/test/ral/type/zone.rb +4 -6
  833. data/test/test +9 -9
  834. data/test/util/fileparsing.rb +10 -10
  835. data/test/util/inifile.rb +6 -6
  836. data/test/util/instance_loader.rb +1 -1
  837. data/test/util/log.rb +2 -2
  838. data/test/util/metrics.rb +1 -6
  839. data/test/util/package.rb +1 -1
  840. data/test/util/pidlock.rb +116 -116
  841. data/test/util/settings.rb +40 -429
  842. data/test/util/storage.rb +5 -5
  843. data/test/util/subclass_loader.rb +0 -7
  844. data/test/util/utiltest.rb +10 -29
  845. metadata +1369 -941
  846. data/bin/puppetca +0 -363
  847. data/bin/puppetd +0 -439
  848. data/bin/puppetmasterd +0 -289
  849. data/bin/puppetrun +0 -369
  850. data/conf/redhat/lsb-config.patch +0 -51
  851. data/conf/redhat/no-chuser-0.15.1.patch +0 -38
  852. data/conf/redhat/no-lockdir.patch +0 -13
  853. data/examples/mac_netinfo.pp +0 -5
  854. data/ext/passenger/README +0 -63
  855. data/ext/passenger/apache2.conf +0 -29
  856. data/ext/passenger/config.ru +0 -40
  857. data/lib/puppet/config_stores/rest.rb +0 -60
  858. data/lib/puppet/executables/client/certhandler.rb +0 -82
  859. data/lib/puppet/indirector/file_content/modules.rb +0 -11
  860. data/lib/puppet/indirector/file_metadata/modules.rb +0 -17
  861. data/lib/puppet/indirector/module_files.rb +0 -82
  862. data/lib/puppet/indirector/ssl_rsa.rb +0 -5
  863. data/lib/puppet/indirector/ssl_rsa/file.rb +0 -33
  864. data/lib/puppet/network/client/master.rb +0 -524
  865. data/lib/puppet/network/http_server/rack.rb +0 -148
  866. data/lib/puppet/pgraph.rb +0 -121
  867. data/lib/puppet/provider/group/netinfo.rb +0 -15
  868. data/lib/puppet/provider/host/netinfo.rb +0 -19
  869. data/lib/puppet/provider/mount/netinfo.rb +0 -37
  870. data/lib/puppet/provider/nameservice/netinfo.rb +0 -224
  871. data/lib/puppet/provider/user/netinfo.rb +0 -111
  872. data/lib/puppet/util/fact_store.rb +0 -59
  873. data/lib/puppet/util/uri_helper.rb +0 -22
  874. data/spec/integration/file_serving/configuration.rb +0 -43
  875. data/spec/integration/indirector/module_files.rb +0 -57
  876. data/spec/unit/executables/client/certhandler.rb +0 -135
  877. data/spec/unit/indirector/file_content/modules.rb +0 -18
  878. data/spec/unit/indirector/file_metadata/modules.rb +0 -42
  879. data/spec/unit/indirector/module_files.rb +0 -259
  880. data/spec/unit/indirector/ssl_rsa/file.rb +0 -121
  881. data/spec/unit/network/client/master.rb +0 -442
  882. data/spec/unit/node/catalog.rb +0 -865
  883. data/spec/unit/other/pgraph.rb +0 -210
  884. data/spec/unit/resource_reference.rb +0 -73
  885. data/spec/unit/util/uri_helper.rb +0 -41
  886. data/test/data/snippets/ifexpression.rb +0 -6
  887. data/test/executables/filebucket.rb +0 -51
  888. data/test/executables/puppetbin.rb +0 -104
  889. data/test/executables/puppetca.rb +0 -115
  890. data/test/executables/puppetd.rb +0 -55
  891. data/test/executables/puppetmasterd.rb +0 -147
  892. data/test/network/client/client.rb +0 -195
  893. data/test/network/client/master.rb +0 -490
  894. data/test/network/daemon.rb +0 -70
  895. data/test/network/handler/handler.rb +0 -63
  896. data/test/other/overrides.rb +0 -107
  897. data/test/puppet/conffiles.rb +0 -107
  898. data/test/rails/ast.rb +0 -73
  899. data/test/rails/configuration.rb +0 -71
  900. data/test/rails/host.rb +0 -154
  901. data/test/rails/railsresource.rb +0 -251
  902. data/test/ral/providers/host/netinfo.rb +0 -56
  903. data/test/ral/providers/mount/netinfo.rb +0 -79
  904. data/test/ral/type/basic.rb +0 -85
  905. data/test/ral/type/filebucket.rb +0 -157
  906. data/test/ral/type/parameter.rb +0 -174
  907. data/test/ral/type/property.rb +0 -388
  908. data/test/ral/type/tidy.rb +0 -291
  909. data/test/util/autoload.rb +0 -145
  910. data/test/util/features.rb +0 -95
@@ -12,11 +12,11 @@ Puppet::Type.type(:file).newproperty(:checksum) do
12
12
  specify that a file's checksum should be monitored and then subscribe to
13
13
  the file from another object and receive events to signify
14
14
  checksum changes, for instance.
15
-
15
+
16
16
  There are a number of checksum types available including MD5 hashing (and
17
- an md5lite variation that only hashes the first 500 characters of the
17
+ an md5lite variation that only hashes the first 500 characters of the
18
18
  file.
19
-
19
+
20
20
  The default checksum parameter, if checksums are enabled, is md5."
21
21
 
22
22
  @event = :file_changed
@@ -66,6 +66,7 @@ Puppet::Type.type(:file).newproperty(:checksum) do
66
66
  # Store the checksum in the data cache, or retrieve it if only the
67
67
  # sum type is provided.
68
68
  def cache(type, sum = nil)
69
+ return unless c = resource.catalog and c.host_config?
69
70
  unless type
70
71
  raise ArgumentError, "A type must be specified to cache a checksum"
71
72
  end
@@ -73,7 +74,7 @@ Puppet::Type.type(:file).newproperty(:checksum) do
73
74
  type = :mtime if type == :timestamp
74
75
  type = :ctime if type == :time
75
76
 
76
- unless state = @resource.cached(:checksums)
77
+ unless state = @resource.cached(:checksums)
77
78
  self.debug "Initializing checksum hash"
78
79
  state = {}
79
80
  @resource.cache(:checksums, state)
@@ -171,12 +172,9 @@ Puppet::Type.type(:file).newproperty(:checksum) do
171
172
  if currentvalue == :absent
172
173
  # if they're copying, then we won't worry about the file
173
174
  # not existing yet
174
- unless @resource.property(:source)
175
- self.warning("File %s does not exist -- cannot checksum" % @resource[:path])
176
- end
177
- return nil
175
+ return nil unless @resource.property(:source)
178
176
  end
179
-
177
+
180
178
  # If the sums are different, then return an event.
181
179
  if self.updatesum(currentvalue)
182
180
  return :file_changed
@@ -195,7 +193,7 @@ Puppet::Type.type(:file).newproperty(:checksum) do
195
193
  return true
196
194
  end
197
195
  end
198
-
196
+
199
197
  # Even though they can specify multiple checksums, the insync?
200
198
  # mechanism can really only test against one, so we'll just retrieve
201
199
  # the first specified sum type.
@@ -222,13 +220,14 @@ Puppet::Type.type(:file).newproperty(:checksum) do
222
220
  # out of sync. We don't want to generate an event the first
223
221
  # time we get a sum.
224
222
  self.updatesum(currentvalue) unless cache(checktype())
225
-
223
+
226
224
  # @resource.debug "checksum state is %s" % self.is
227
225
  return currentvalue
228
226
  end
229
227
 
230
228
  # Store the new sum to the state db.
231
229
  def updatesum(newvalue)
230
+ return unless c = resource.catalog and c.host_config?
232
231
  result = false
233
232
 
234
233
  # if we're replacing, vs. updating
@@ -1,6 +1,9 @@
1
+ require 'puppet/util/checksums'
2
+
1
3
  module Puppet
2
4
  Puppet::Type.type(:file).newproperty(:content) do
3
5
  include Puppet::Util::Diff
6
+ include Puppet::Util::Checksums
4
7
 
5
8
  desc "Specify the contents of a file as a string. Newlines, tabs, and
6
9
  spaces can be specified using the escaped syntax (e.g., \\n for a
@@ -18,34 +21,93 @@ module Puppet
18
21
  content => $str
19
22
  }
20
23
  }
21
-
24
+
22
25
  This attribute is especially useful when used with
23
26
  `PuppetTemplating templating`:trac:."
24
27
 
25
- def string_as_checksum(string)
26
- return "absent" if string == :absent
27
- "{md5}" + Digest::MD5.hexdigest(string)
28
+ # Store a checksum as the value, rather than the actual content.
29
+ # Simplifies everything.
30
+ munge do |value|
31
+ if value == :absent
32
+ value
33
+ else
34
+ @actual_content = value
35
+ "{#{checksum_type}}" + send(self.checksum_type, value)
36
+ end
37
+ end
38
+
39
+ # Checksums need to invert how changes are printed.
40
+ def change_to_s(currentvalue, newvalue)
41
+ # Our "new" checksum value is provided by the source.
42
+ unless source = resource.parameter(:source) and newvalue = source.checksum
43
+ newvalue = "unknown checksum"
44
+ end
45
+ if currentvalue == :absent
46
+ return "defined content as '%s'" % [newvalue]
47
+ elsif newvalue == :absent
48
+ return "undefined content from '%s'" % [currentvalue]
49
+ else
50
+ return "content changed '%s' to '%s'" % [currentvalue, newvalue]
51
+ end
52
+ end
53
+
54
+ def checksum_type
55
+ if source = resource.parameter(:source)
56
+ result = source.checksum
57
+ elsif checksum = resource.parameter(:checksum)
58
+ result = checksum.checktype
59
+ else
60
+ return :md5
61
+ end
62
+ if result =~ /^\{(\w+)\}.+/
63
+ return $1.to_sym
64
+ else
65
+ return result
66
+ end
28
67
  end
29
68
 
30
- def should_to_s(should)
31
- string_as_checksum(should)
69
+ # If content was specified, return that; else try to return the source content;
70
+ # else, return nil.
71
+ def actual_content
72
+ if defined?(@actual_content) and @actual_content
73
+ return @actual_content
74
+ end
75
+
76
+ if s = resource.parameter(:source)
77
+ return s.content
78
+ end
79
+ return nil
32
80
  end
33
81
 
34
- def is_to_s(is)
35
- string_as_checksum(is)
82
+ def content
83
+ self.should || (s = resource.parameter(:source) and s.content)
36
84
  end
37
85
 
38
86
  # Override this method to provide diffs if asked for.
39
87
  # Also, fix #872: when content is used, and replace is true, the file
40
88
  # should be insync when it exists
41
89
  def insync?(is)
42
- if ! @resource.replace? and File.exists?(@resource[:path])
90
+ if resource.should_be_file?
91
+ return false if is == :absent
92
+ else
93
+ return true
94
+ end
95
+
96
+ return true if ! @resource.replace?
97
+
98
+ if self.should
99
+ return super
100
+ elsif source = resource.parameter(:source)
101
+ fail "Got a remote source with no checksum" unless source.checksum
102
+ result = (is == source.checksum)
103
+ else
104
+ # We've got no content specified, and no source from which to
105
+ # get content.
43
106
  return true
44
107
  end
45
108
 
46
- result = super
47
- if ! result and Puppet[:show_diff] and File.exists?(@resource[:path])
48
- string_file_diff(@resource[:path], self.should)
109
+ if ! result and Puppet[:show_diff]
110
+ string_file_diff(@resource[:path], actual_content)
49
111
  end
50
112
  return result
51
113
  end
@@ -53,31 +115,30 @@ module Puppet
53
115
  def retrieve
54
116
  return :absent unless stat = @resource.stat
55
117
 
56
- return self.should if stat.ftype == "link" and @resource[:links] == :ignore
57
-
58
- # Don't even try to manage the content on directories
118
+ # Don't even try to manage the content on directories or links
59
119
  return nil if stat.ftype == "directory"
60
120
 
61
121
  begin
62
- currentvalue = File.read(@resource[:path])
63
- return currentvalue
122
+ return "{#{checksum_type}}" + send(checksum_type.to_s + "_file", resource[:path]).to_s
64
123
  rescue => detail
65
- raise Puppet::Error, "Could not read %s: %s" %
66
- [@resource.title, detail]
124
+ raise Puppet::Error, "Could not read %s: %s" % [@resource.title, detail]
67
125
  end
68
126
  end
69
127
 
70
128
  # Make sure we're also managing the checksum property.
71
129
  def should=(value)
130
+ @resource.newattr(:checksum) unless @resource.parameter(:checksum)
72
131
  super
73
- @resource.newattr(:checksum) unless @resource.property(:checksum)
74
132
  end
75
133
 
76
134
  # Just write our content out to disk.
77
135
  def sync
78
136
  return_event = @resource.stat ? :file_changed : :file_created
79
-
80
- @resource.write(self.should, :content)
137
+
138
+ # We're safe not testing for the 'source' if there's no 'should'
139
+ # because we wouldn't have gotten this far if there weren't at least
140
+ # one valid value somewhere.
141
+ @resource.write(actual_content, :content)
81
142
 
82
143
  return return_event
83
144
  end
@@ -1,5 +1,5 @@
1
1
  module Puppet
2
- Puppet.type(:file).ensurable do
2
+ Puppet::Type.type(:file).ensurable do
3
3
  require 'etc'
4
4
  desc "Whether to create files that don't currently exist.
5
5
  Possible values are *absent*, *present*, *file*, and *directory*.
@@ -9,14 +9,14 @@ module Puppet
9
9
 
10
10
  Anything other than those values will be considered to be a symlink.
11
11
  For instance, the following text creates a link::
12
-
12
+
13
13
  # Useful on solaris
14
14
  file { \"/etc/inetd.conf\":
15
15
  ensure => \"/etc/inet/inetd.conf\"
16
16
  }
17
-
17
+
18
18
  You can make relative links::
19
-
19
+
20
20
  # Useful on solaris
21
21
  file { \"/etc/inetd.conf\":
22
22
  ensure => \"inet/inetd.conf\"
@@ -110,13 +110,19 @@ module Puppet
110
110
  end
111
111
 
112
112
  def change_to_s(currentvalue, newvalue)
113
- if property = (@resource.property(:content) || @resource.property(:source)) and ! property.insync?(currentvalue)
114
- currentvalue = property.retrieve
115
-
116
- return property.change_to_s(property.retrieve, property.should)
113
+ return super unless newvalue.to_s == "file"
114
+
115
+ return super unless property = @resource.property(:content)
116
+
117
+ # We know that content is out of sync if we're here, because
118
+ # it's essentially equivalent to 'ensure' in the transaction.
119
+ if source = @resource.parameter(:source)
120
+ should = source.checksum
117
121
  else
118
- super(currentvalue, newvalue)
122
+ should = property.should
119
123
  end
124
+
125
+ return property.change_to_s(property.retrieve, should)
120
126
  end
121
127
 
122
128
  # Check that we can actually create anything
@@ -2,7 +2,7 @@ require 'puppet/util/posix'
2
2
 
3
3
  # Manage file group ownership.
4
4
  module Puppet
5
- Puppet.type(:file).newproperty(:group) do
5
+ Puppet::Type.type(:file).newproperty(:group) do
6
6
  include Puppet::Util::POSIX
7
7
 
8
8
  require 'etc'
@@ -79,6 +79,12 @@ module Puppet
79
79
 
80
80
  # Determine if the group is valid, and if so, return the GID
81
81
  def validgroup?(value)
82
+ begin
83
+ number = Integer(value)
84
+ return number
85
+ rescue ArgumentError
86
+ number = nil
87
+ end
82
88
  if number = gid(value)
83
89
  return number
84
90
  else
@@ -2,7 +2,7 @@
2
2
  # for specification (e.g., u+rwx, or -0011), but for now only supports
3
3
  # specifying the full mode.
4
4
  module Puppet
5
- Puppet.type(:file).newproperty(:mode) do
5
+ Puppet::Type.type(:file).newproperty(:mode) do
6
6
  require 'etc'
7
7
  desc "Mode the file should be. Currently relatively limited:
8
8
  you must specify the exact mode the file should be."
@@ -1,5 +1,5 @@
1
1
  module Puppet
2
- Puppet.type(:file).newproperty(:owner) do
2
+ Puppet::Type.type(:file).newproperty(:owner) do
3
3
  include Puppet::Util::POSIX
4
4
  include Puppet::Util::Warnings
5
5
 
@@ -49,6 +49,12 @@ module Puppet
49
49
 
50
50
  # Determine if the user is valid, and if so, return the UID
51
51
  def validuser?(value)
52
+ begin
53
+ number = Integer(value)
54
+ return number
55
+ rescue ArgumentError
56
+ number = nil
57
+ end
52
58
  if number = uid(value)
53
59
  return number
54
60
  else
@@ -89,13 +95,13 @@ module Puppet
89
95
  end
90
96
  end
91
97
  end
92
-
98
+
93
99
  unless stat = @resource.stat(false)
94
100
  return :absent
95
101
  end
96
102
 
97
103
  currentvalue = stat.uid
98
-
104
+
99
105
  # On OS X, files that are owned by -2 get returned as really
100
106
  # large UIDs instead of negative ones. This isn't a Ruby bug,
101
107
  # it's an OS X bug, since it shows up in perl, too.
@@ -58,7 +58,7 @@ module Puppet
58
58
  end
59
59
  end
60
60
 
61
- Puppet.type(:file).newproperty(:seluser, :parent => Puppet::SELFileContext) do
61
+ Puppet::Type.type(:file).newproperty(:seluser, :parent => Puppet::SELFileContext) do
62
62
  desc "What the SELinux user component of the context of the file should be.
63
63
  Any valid SELinux user component is accepted. For example ``user_u``.
64
64
  If not specified it defaults to the value returned by matchpathcon for
@@ -69,7 +69,7 @@ module Puppet
69
69
  defaultto { self.retrieve_default_context(:seluser) }
70
70
  end
71
71
 
72
- Puppet.type(:file).newproperty(:selrole, :parent => Puppet::SELFileContext) do
72
+ Puppet::Type.type(:file).newproperty(:selrole, :parent => Puppet::SELFileContext) do
73
73
  desc "What the SELinux role component of the context of the file should be.
74
74
  Any valid SELinux role component is accepted. For example ``role_r``.
75
75
  If not specified it defaults to the value returned by matchpathcon for
@@ -80,7 +80,7 @@ module Puppet
80
80
  defaultto { self.retrieve_default_context(:selrole) }
81
81
  end
82
82
 
83
- Puppet.type(:file).newproperty(:seltype, :parent => Puppet::SELFileContext) do
83
+ Puppet::Type.type(:file).newproperty(:seltype, :parent => Puppet::SELFileContext) do
84
84
  desc "What the SELinux type component of the context of the file should be.
85
85
  Any valid SELinux type component is accepted. For example ``tmp_t``.
86
86
  If not specified it defaults to the value returned by matchpathcon for
@@ -91,7 +91,7 @@ module Puppet
91
91
  defaultto { self.retrieve_default_context(:seltype) }
92
92
  end
93
93
 
94
- Puppet.type(:file).newproperty(:selrange, :parent => Puppet::SELFileContext) do
94
+ Puppet::Type.type(:file).newproperty(:selrange, :parent => Puppet::SELFileContext) do
95
95
  desc "What the SELinux range component of the context of the file should be.
96
96
  Any valid SELinux range component is accepted. For example ``s0`` or
97
97
  ``SystemHigh``. If not specified it defaults to the value returned by
@@ -1,10 +1,14 @@
1
+
2
+ require 'puppet/file_serving/content'
3
+ require 'puppet/file_serving/metadata'
4
+
1
5
  module Puppet
2
6
  # Copy files from a local or remote source. This state *only* does any work
3
7
  # when the remote file is an actual file; in that case, this state copies
4
8
  # the file down. If the remote file is a dir or a link or whatever, then
5
9
  # this state, during retrieval, modifies the appropriate other states
6
10
  # so that things get taken care of appropriately.
7
- Puppet.type(:file).newproperty(:source) do
11
+ Puppet::Type.type(:file).newparam(:source) do
8
12
  include Puppet::Util::Diff
9
13
 
10
14
  attr_accessor :source, :local
@@ -29,15 +33,15 @@ module Puppet
29
33
  will use the local filesystem. This makes it easy to use the same
30
34
  configuration in both local and centralized forms.
31
35
 
32
- Currently, only the ``puppet`` scheme is supported for source
33
- URL's. Puppet will connect to the file server running on
34
- ``server`` to retrieve the contents of the file. If the
35
- ``server`` part is empty, the behavior of the command-line
36
+ Currently, only the ``puppet`` scheme is supported for source
37
+ URL's. Puppet will connect to the file server running on
38
+ ``server`` to retrieve the contents of the file. If the
39
+ ``server`` part is empty, the behavior of the command-line
36
40
  interpreter (``puppet``) and the client demon (``puppetd``) differs
37
41
  slightly: ``puppet`` will look such a file up on the module path
38
- on the local host, whereas ``puppetd`` will connect to the
42
+ on the local host, whereas ``puppetd`` will connect to the
39
43
  puppet server that it received the manifest from.
40
-
44
+
41
45
  See the `FileServingConfiguration fileserver configuration documentation`:trac: for information on how to configure
42
46
  and use file services within Puppet.
43
47
 
@@ -52,225 +56,120 @@ module Puppet
52
56
  \"/nfs/files/file\"
53
57
  ]
54
58
  }
55
-
59
+
56
60
  This will use the first found file as the source.
57
-
61
+
58
62
  You cannot currently copy links using this mechanism; set ``links``
59
63
  to ``follow`` if any remote sources are links.
60
64
  "
61
65
 
62
- uncheckable
63
-
64
- validate do |source|
65
- unless @resource.uri2obj(source)
66
- raise Puppet::Error, "Invalid source %s" % source
66
+ validate do |sources|
67
+ sources = [sources] unless sources.is_a?(Array)
68
+ sources.each do |source|
69
+ begin
70
+ uri = URI.parse(URI.escape(source))
71
+ rescue => detail
72
+ self.fail "Could not understand source %s: %s" % [source, detail.to_s]
73
+ end
74
+
75
+ unless uri.scheme.nil? or %w{file puppet}.include?(uri.scheme)
76
+ self.fail "Cannot use URLs of type '%s' as source for fileserving" % [uri.scheme]
77
+ end
67
78
  end
68
79
  end
69
-
70
- munge do |source|
71
- # if source.is_a? Symbol
72
- # return source
73
- # end
74
80
 
75
- # Remove any trailing slashes
76
- source.sub(/\/$/, '')
81
+ munge do |sources|
82
+ sources = [sources] unless sources.is_a?(Array)
83
+ sources.collect { |source| source.sub(/\/$/, '') }
77
84
  end
78
-
85
+
79
86
  def change_to_s(currentvalue, newvalue)
80
- # newvalue = "{md5}" + @stats[:checksum]
87
+ # newvalue = "{md5}" + @metadata.checksum
81
88
  if @resource.property(:ensure).retrieve == :absent
82
- return "creating from source %s with contents %s" % [@source, @stats[:checksum]]
89
+ return "creating from source %s with contents %s" % [metadata.source, metadata.checksum]
83
90
  else
84
- return "replacing from source %s with contents %s" % [@source, @stats[:checksum]]
91
+ return "replacing from source %s with contents %s" % [metadata.source, metadata.checksum]
85
92
  end
86
93
  end
87
-
94
+
88
95
  def checksum
89
- if defined?(@stats)
90
- @stats[:checksum]
96
+ if metadata
97
+ metadata.checksum
91
98
  else
92
99
  nil
93
100
  end
94
101
  end
95
102
 
96
- # Ask the file server to describe our file.
97
- def describe(source)
98
- sourceobj, path = @resource.uri2obj(source)
99
- server = sourceobj.server
103
+ # Look up (if necessary) and return remote content.
104
+ cached_attr(:content) do
105
+ raise Puppet::DevError, "No source for content was stored with the metadata" unless metadata.source
100
106
 
101
- begin
102
- desc = server.describe(path, @resource[:links])
103
- rescue Puppet::Network::XMLRPCClientError => detail
104
- fail detail, "Could not describe %s: %s" % [path, detail]
107
+ unless tmp = Puppet::FileServing::Content.find(metadata.source)
108
+ fail "Could not find any content at %s" % metadata.source
105
109
  end
110
+ tmp.content
111
+ end
106
112
 
107
- return nil if desc == ""
113
+ # Copy the values from the source to the resource. Yay.
114
+ def copy_source_values
115
+ devfail "Somehow got asked to copy source values without any metadata" unless metadata
108
116
 
109
- # Collect everything except the checksum
110
- values = desc.split("\t")
111
- other = values.pop
112
- args = {}
113
- pinparams.zip(values).each { |param, value|
114
- if value =~ /^[0-9]+$/
115
- value = value.to_i
116
- end
117
- unless value.nil?
118
- args[param] = value
117
+ # Take each of the stats and set them as states on the local file
118
+ # if a value has not already been provided.
119
+ [:owner, :mode, :group, :checksum].each do |param|
120
+ next if param == :owner and Puppet::Util::SUIDManager.uid != 0
121
+ next if param == :checksum and metadata.ftype == "directory"
122
+ unless value = @resource[param] and value != :absent
123
+ @resource[param] = metadata.send(param)
119
124
  end
120
- }
121
-
122
- # Now decide whether we're doing checksums or symlinks
123
- if args[:type] == "link"
124
- args[:target] = other
125
- else
126
- args[:checksum] = other
127
125
  end
128
126
 
129
- # we can't manage ownership unless we're root, so don't even try
130
- unless Puppet::Util::SUIDManager.uid == 0
131
- args.delete(:owner)
132
- end
133
-
134
- return args
135
- end
136
-
137
- # Use the info we get from describe() to check if we're in sync.
138
- def insync?(currentvalue)
139
- if currentvalue == :nocopy
140
- return true
141
- end
142
-
143
- # the only thing this actual state can do is copy files around. Therefore,
144
- # only pay attention if the remote is a file.
145
- unless @stats[:type] == "file"
146
- return true
147
- end
148
-
149
- #FIXARB: Inefficient? Needed to call retrieve on parent's ensure and checksum
150
- parentensure = @resource.property(:ensure).retrieve
151
- if parentensure != :absent and ! @resource.replace?
152
- return true
153
- end
154
- # Now, we just check to see if the checksums are the same
155
- parentchecksum = @resource.property(:checksum).retrieve
156
- result = (!parentchecksum.nil? and (parentchecksum == @stats[:checksum]))
127
+ # Set the 'ensure' value, unless we're trying to delete the file.
128
+ @resource[:ensure] = metadata.ftype unless @resource[:ensure] == :absent
157
129
 
158
- # Diff the contents if they ask it. This is quite annoying -- we need to do this in
159
- # 'insync?' because they might be in noop mode, but we don't want to do the file
160
- # retrieval twice, so we cache the value.
161
- if ! result and Puppet[:show_diff] and File.exists?(@resource[:path]) and ! @stats[:_diffed]
162
- @stats[:_remote_content] = get_remote_content
163
- string_file_diff(@resource[:path], @stats[:_remote_content])
164
- @stats[:_diffed] = true
130
+ if metadata.ftype == "link"
131
+ @resource[:target] = metadata.destination
165
132
  end
166
- return result
167
133
  end
168
134
 
169
135
  def pinparams
170
- [:mode, :type, :owner, :group]
136
+ [:mode, :type, :owner, :group, :content]
171
137
  end
172
138
 
173
139
  def found?
174
- ! (@stats.nil? or @stats[:type].nil?)
140
+ ! (metadata.nil? or metadata.ftype.nil?)
175
141
  end
176
142
 
177
- # This basically calls describe() on our file, and then sets all
178
- # of the local states appropriately. If the remote file is a normal
179
- # file then we set it to copy; if it's a directory, then we just mark
180
- # that the local directory should be created.
181
- def retrieve(remote = true)
182
- sum = nil
183
- @source = nil
184
-
185
- # This is set to false by the File#retrieve function on the second
186
- # retrieve, so that we do not do two describes.
187
- if remote
188
- # Find the first source that exists. @shouldorig contains
189
- # the sources as specified by the user.
190
- @should.each { |source|
191
- if @stats = self.describe(source)
192
- @source = source
143
+ # Provide, and retrieve if necessary, the metadata for this file. Fail
144
+ # if we can't find data about this host, and fail if there are any
145
+ # problems in our query.
146
+ cached_attr(:metadata) do
147
+ return nil unless value
148
+ result = nil
149
+ value.each do |source|
150
+ begin
151
+ if data = Puppet::FileServing::Metadata.find(source)
152
+ result = data
153
+ result.source = source
193
154
  break
194
155
  end
195
- }
196
- end
197
-
198
- if !found?
199
- raise Puppet::Error, "No specified source was found from" + @should.inject("") { |s, source| s + " #{source},"}.gsub(/,$/,"")
200
- end
201
-
202
- case @stats[:type]
203
- when "directory", "file", "link":
204
- @resource[:ensure] = @stats[:type] unless @resource.deleting?
205
- else
206
- self.info @stats.inspect
207
- self.err "Cannot use files of type %s as sources" % @stats[:type]
208
- return :nocopy
156
+ rescue => detail
157
+ fail detail, "Could not retrieve file metadata for %s: %s" % [source, detail]
158
+ end
209
159
  end
210
-
211
- # Take each of the stats and set them as states on the local file
212
- # if a value has not already been provided.
213
- @stats.each { |stat, value|
214
- next if stat == :checksum
215
- next if stat == :type
216
-
217
- # was the stat already specified, or should the value
218
- # be inherited from the source?
219
- @resource[stat] = value unless @resource.argument?(stat)
220
- }
221
-
222
- return @stats[:checksum]
160
+ fail "Could not retrieve information from source(s) %s" % value.join(", ") unless result
161
+ result
223
162
  end
224
-
225
- def should
226
- @should
227
- end
228
-
163
+
229
164
  # Make sure we're also checking the checksum
230
- def should=(value)
165
+ def value=(value)
231
166
  super
232
167
 
233
168
  checks = (pinparams + [:ensure])
234
169
  checks.delete(:checksum)
235
-
236
- @resource[:check] = checks
237
- @resource[:checksum] = :md5 unless @resource.property(:checksum)
238
- end
239
-
240
- def sync
241
- contents = @stats[:_remote_content] || get_remote_content()
242
-
243
- exists = File.exists?(@resource[:path])
244
-
245
- @resource.write(contents, :source, @stats[:checksum])
246
-
247
- if exists
248
- return :file_changed
249
- else
250
- return :file_created
251
- end
252
- end
253
-
254
- private
255
-
256
- def get_remote_content
257
- raise Puppet::DevError, "Got told to copy non-file %s" % @resource[:path] unless @stats[:type] == "file"
258
-
259
- sourceobj, path = @resource.uri2obj(@source)
260
-
261
- begin
262
- contents = sourceobj.server.retrieve(path, @resource[:links])
263
- rescue => detail
264
- self.fail "Could not retrieve %s: %s" % [path, detail]
265
- end
266
-
267
- contents = CGI.unescape(contents) unless sourceobj.server.local
268
-
269
- if contents == ""
270
- self.notice "Could not retrieve contents for %s" % @source
271
- end
272
170
 
273
- return contents
171
+ resource[:check] = checks
172
+ resource[:checksum] = :md5 unless resource.property(:checksum)
274
173
  end
275
174
  end
276
175
  end