puppet 0.24.5 → 0.24.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (354) hide show
  1. data/CHANGELOG +206 -0
  2. data/Rakefile +53 -0
  3. data/bin/filebucket +0 -0
  4. data/bin/puppet +32 -11
  5. data/bin/puppetca +1 -0
  6. data/bin/puppetd +0 -0
  7. data/bin/puppetdoc +0 -0
  8. data/bin/puppetmasterd +0 -0
  9. data/bin/puppetrun +16 -8
  10. data/bin/ralsh +0 -0
  11. data/conf/debian/rules +0 -0
  12. data/conf/gentoo/init.d/puppetmaster +0 -0
  13. data/conf/osx/PackageInfo.plist +36 -0
  14. data/conf/osx/createpackage.sh +167 -0
  15. data/conf/osx/preflight +12 -0
  16. data/conf/redhat/client.init +1 -1
  17. data/conf/redhat/puppet.spec +34 -6
  18. data/conf/redhat/server.init +42 -7
  19. data/conf/redhat/server.sysconfig +22 -0
  20. data/conf/solaris/smf/svc-puppetd +0 -0
  21. data/conf/solaris/smf/svc-puppetmasterd +0 -0
  22. data/examples/etc/init.d/sleeper +0 -0
  23. data/examples/mac_dscl.pp +0 -0
  24. data/examples/mac_dscl_revert.pp +0 -0
  25. data/examples/mac_netinfo.pp +0 -0
  26. data/examples/mac_pkgdmg.pp +0 -0
  27. data/ext/bin/sleeper +0 -0
  28. data/ext/module_puppet +0 -0
  29. data/ext/nagios/check_puppet.rb +0 -0
  30. data/ext/passenger/README +63 -0
  31. data/ext/passenger/apache2.conf +29 -0
  32. data/ext/passenger/config.ru +40 -0
  33. data/ext/puppet-test +0 -0
  34. data/ext/puppetlast +6 -31
  35. data/ext/puppetstoredconfigclean.rb +87 -0
  36. data/install.rb +75 -20
  37. data/lib/puppet.rb +1 -1
  38. data/lib/puppet/daemon.rb +0 -0
  39. data/lib/puppet/defaults.rb +3 -7
  40. data/lib/puppet/external/base64.rb +0 -0
  41. data/lib/puppet/external/nagios.rb +0 -0
  42. data/lib/puppet/external/nagios/base.rb +0 -0
  43. data/lib/puppet/file_serving/fileset.rb +2 -2
  44. data/lib/puppet/file_serving/metadata.rb +3 -3
  45. data/lib/puppet/indirector/facts/facter.rb +3 -2
  46. data/lib/puppet/indirector/yaml.rb +10 -1
  47. data/lib/puppet/module.rb +36 -12
  48. data/lib/puppet/network/authstore.rb +0 -0
  49. data/lib/puppet/network/client/master.rb +12 -11
  50. data/lib/puppet/network/handler/filebucket.rb +0 -0
  51. data/lib/puppet/network/handler/fileserver.rb +38 -46
  52. data/lib/puppet/network/handler/master.rb +1 -1
  53. data/lib/puppet/network/handler/report.rb +0 -0
  54. data/lib/puppet/network/handler/resource.rb +0 -0
  55. data/lib/puppet/network/handler/runner.rb +0 -0
  56. data/lib/puppet/network/http_server/rack.rb +148 -0
  57. data/lib/puppet/network/rights.rb +0 -0
  58. data/lib/puppet/network/xmlrpc/client.rb +5 -5
  59. data/lib/puppet/node.rb +5 -9
  60. data/lib/puppet/node/environment.rb +1 -17
  61. data/lib/puppet/node/facts.rb +0 -0
  62. data/lib/puppet/parameter.rb +1 -28
  63. data/lib/puppet/parser/ast.rb +6 -0
  64. data/lib/puppet/parser/ast/arithmetic_operator.rb +41 -0
  65. data/lib/puppet/parser/ast/boolean_operator.rb +48 -0
  66. data/lib/puppet/parser/ast/collexpr.rb +6 -1
  67. data/lib/puppet/parser/ast/comparison_operator.rb +37 -0
  68. data/lib/puppet/parser/ast/minus.rb +23 -0
  69. data/lib/puppet/parser/ast/nop.rb +11 -0
  70. data/lib/puppet/parser/ast/not.rb +19 -0
  71. data/lib/puppet/parser/ast/resource_override.rb +23 -16
  72. data/lib/puppet/parser/ast/resource_reference.rb +10 -6
  73. data/lib/puppet/parser/ast/vardef.rb +2 -2
  74. data/lib/puppet/parser/collector.rb +2 -1
  75. data/lib/puppet/parser/functions.rb +7 -217
  76. data/lib/puppet/parser/functions/defined.rb +27 -0
  77. data/lib/puppet/parser/functions/fail.rb +4 -0
  78. data/lib/puppet/parser/functions/file.rb +21 -0
  79. data/lib/puppet/parser/functions/fqdn_rand.rb +15 -0
  80. data/lib/puppet/parser/functions/generate.rb +35 -0
  81. data/lib/puppet/parser/functions/include.rb +26 -0
  82. data/lib/puppet/parser/functions/realize.rb +14 -0
  83. data/lib/puppet/parser/functions/search.rb +7 -0
  84. data/lib/puppet/parser/functions/sha1.rb +6 -0
  85. data/lib/puppet/parser/functions/tag.rb +6 -0
  86. data/lib/puppet/parser/functions/tagged.rb +18 -0
  87. data/lib/puppet/parser/functions/template.rb +22 -0
  88. data/lib/puppet/parser/lexer.rb +15 -5
  89. data/lib/puppet/parser/parser.rb +1073 -715
  90. data/lib/puppet/parser/parser_support.rb +18 -13
  91. data/lib/puppet/parser/resource.rb +1 -1
  92. data/lib/puppet/parser/resource/param.rb +10 -2
  93. data/lib/puppet/parser/scope.rb +63 -5
  94. data/lib/puppet/parser/templatewrapper.rb +61 -15
  95. data/lib/puppet/property.rb +7 -1
  96. data/lib/puppet/property/keyvalue.rb +96 -0
  97. data/lib/puppet/property/list.rb +78 -0
  98. data/lib/puppet/provider/confine.rb +1 -1
  99. data/lib/puppet/provider/confine/variable.rb +10 -1
  100. data/lib/puppet/provider/cron/crontab.rb +0 -0
  101. data/lib/puppet/provider/mailalias/aliases.rb +0 -0
  102. data/lib/puppet/provider/maillist/mailman.rb +0 -0
  103. data/lib/puppet/provider/mount/parsed.rb +0 -0
  104. data/lib/puppet/provider/nameservice.rb +24 -39
  105. data/lib/puppet/provider/nameservice/directoryservice.rb +12 -3
  106. data/lib/puppet/provider/nameservice/netinfo.rb +12 -2
  107. data/lib/puppet/provider/nameservice/objectadd.rb +1 -10
  108. data/lib/puppet/provider/package/appdmg.rb +1 -1
  109. data/lib/puppet/provider/package/apple.rb +0 -0
  110. data/lib/puppet/provider/package/apt.rb +14 -21
  111. data/lib/puppet/provider/package/aptitude.rb +0 -0
  112. data/lib/puppet/provider/package/blastwave.rb +2 -0
  113. data/lib/puppet/provider/package/darwinport.rb +0 -0
  114. data/lib/puppet/provider/package/dpkg.rb +33 -51
  115. data/lib/puppet/provider/package/fink.rb +1 -1
  116. data/lib/puppet/provider/package/freebsd.rb +0 -0
  117. data/lib/puppet/provider/package/gem.rb +0 -0
  118. data/lib/puppet/provider/package/hpux.rb +46 -0
  119. data/lib/puppet/provider/package/openbsd.rb +0 -0
  120. data/lib/puppet/provider/package/pkgdmg.rb +1 -1
  121. data/lib/puppet/provider/package/portage.rb +3 -1
  122. data/lib/puppet/provider/package/ports.rb +3 -3
  123. data/lib/puppet/provider/package/rpm.rb +8 -1
  124. data/lib/puppet/provider/package/rug.rb +2 -2
  125. data/lib/puppet/provider/package/sun.rb +2 -0
  126. data/lib/puppet/provider/package/sunfreeware.rb +3 -0
  127. data/lib/puppet/provider/package/yum.rb +24 -17
  128. data/lib/puppet/provider/package/yumhelper.py +92 -11
  129. data/lib/puppet/provider/parsedfile.rb +0 -0
  130. data/lib/puppet/provider/port/parsed.rb +0 -0
  131. data/lib/puppet/provider/selboolean/getsetsebool.rb +47 -0
  132. data/lib/puppet/provider/selmodule/semodule.rb +143 -0
  133. data/lib/puppet/provider/service/base.rb +0 -0
  134. data/lib/puppet/provider/service/daemontools.rb +154 -0
  135. data/lib/puppet/provider/service/debian.rb +1 -1
  136. data/lib/puppet/provider/service/freebsd.rb +2 -0
  137. data/lib/puppet/provider/service/gentoo.rb +2 -0
  138. data/lib/puppet/provider/service/init.rb +0 -0
  139. data/lib/puppet/provider/service/redhat.rb +1 -1
  140. data/lib/puppet/provider/service/runit.rb +93 -0
  141. data/lib/puppet/provider/service/smf.rb +2 -0
  142. data/lib/puppet/provider/ssh_authorized_key/parsed.rb +7 -1
  143. data/lib/puppet/provider/sshkey/parsed.rb +0 -0
  144. data/lib/puppet/provider/user/hpux.rb +30 -0
  145. data/lib/puppet/provider/user/user_role_add.rb +156 -0
  146. data/lib/puppet/provider/user/useradd.rb +23 -14
  147. data/lib/puppet/rails/database/002_remove_duplicated_index_on_all_tables.rb +17 -0
  148. data/lib/puppet/rails/database/schema.rb +0 -8
  149. data/lib/puppet/rails/resource.rb +6 -6
  150. data/lib/puppet/reference/configuration.rb +0 -7
  151. data/lib/puppet/reports.rb +0 -0
  152. data/lib/puppet/reports/rrdgraph.rb +3 -2
  153. data/lib/puppet/sslcertificates.rb +0 -0
  154. data/lib/puppet/sslcertificates/inventory.rb +3 -2
  155. data/lib/puppet/sslcertificates/support.rb +3 -0
  156. data/lib/puppet/transaction/report.rb +1 -7
  157. data/lib/puppet/transportable.rb +10 -7
  158. data/lib/puppet/type.rb +2110 -14
  159. data/lib/puppet/type/cron.rb +0 -0
  160. data/lib/puppet/type/exec.rb +0 -0
  161. data/lib/puppet/type/file.rb +12 -2
  162. data/lib/puppet/type/file/checksum.rb +4 -0
  163. data/lib/puppet/type/file/content.rb +0 -0
  164. data/lib/puppet/type/file/ensure.rb +0 -0
  165. data/lib/puppet/type/file/group.rb +30 -43
  166. data/lib/puppet/type/file/mode.rb +0 -0
  167. data/lib/puppet/type/file/owner.rb +0 -0
  168. data/lib/puppet/type/file/selcontext.rb +104 -0
  169. data/lib/puppet/type/file/source.rb +0 -0
  170. data/lib/puppet/type/file/type.rb +0 -0
  171. data/lib/puppet/type/filebucket.rb +0 -0
  172. data/lib/puppet/type/group.rb +0 -8
  173. data/lib/puppet/type/host.rb +0 -0
  174. data/lib/puppet/type/mailalias.rb +0 -0
  175. data/lib/puppet/type/maillist.rb +0 -0
  176. data/lib/puppet/type/mount.rb +0 -0
  177. data/lib/puppet/type/package.rb +2 -2
  178. data/lib/puppet/type/port.rb +0 -0
  179. data/lib/puppet/type/schedule.rb +0 -0
  180. data/lib/puppet/type/selboolean.rb +31 -0
  181. data/lib/puppet/type/selmodule.rb +54 -0
  182. data/lib/puppet/type/ssh_authorized_key.rb +3 -3
  183. data/lib/puppet/type/sshkey.rb +0 -0
  184. data/lib/puppet/type/tidy.rb +0 -0
  185. data/lib/puppet/type/user.rb +153 -137
  186. data/lib/puppet/type/yumrepo.rb +18 -2
  187. data/lib/puppet/type/zone.rb +5 -1
  188. data/lib/puppet/util.rb +7 -7
  189. data/lib/puppet/util/filetype.rb +7 -0
  190. data/lib/puppet/util/instance_loader.rb +0 -0
  191. data/lib/puppet/util/ldap/connection.rb +11 -1
  192. data/lib/puppet/util/ldap/manager.rb +1 -1
  193. data/lib/puppet/util/loadedfile.rb +0 -0
  194. data/lib/puppet/util/log.rb +42 -43
  195. data/lib/puppet/util/metric.rb +23 -9
  196. data/lib/puppet/util/posix.rb +69 -18
  197. data/lib/puppet/util/selinux.rb +139 -0
  198. data/lib/puppet/util/settings.rb +5 -7
  199. data/lib/puppet/util/user_attr.rb +21 -0
  200. data/test/certmgr/ca.rb +0 -0
  201. data/test/certmgr/certmgr.rb +0 -0
  202. data/test/certmgr/inventory.rb +0 -0
  203. data/test/certmgr/support.rb +0 -0
  204. data/test/data/providers/ssh_authorized_key/parsed/authorized_keys1 +3 -0
  205. data/test/data/snippets/append.pp +11 -0
  206. data/test/data/snippets/arithmetic_expression.pp +8 -0
  207. data/test/data/snippets/arraytrailingcomma.pp +3 -0
  208. data/test/data/snippets/emptyifelse.pp +9 -0
  209. data/test/data/snippets/funccomma.pp +5 -0
  210. data/test/data/snippets/ifexpression.rb +6 -0
  211. data/test/data/snippets/subclass_name_duplication.pp +0 -0
  212. data/test/executables/filebucket.rb +0 -0
  213. data/test/executables/puppetbin.rb +0 -0
  214. data/test/executables/puppetca.rb +0 -0
  215. data/test/executables/puppetd.rb +0 -0
  216. data/test/executables/puppetmasterd.rb +0 -0
  217. data/test/executables/puppetmodule.rb +0 -0
  218. data/test/language/ast.rb +0 -0
  219. data/test/language/ast/casestatement.rb +0 -0
  220. data/test/language/ast/resource.rb +0 -0
  221. data/test/language/ast/resource_reference.rb +0 -28
  222. data/test/language/ast/selector.rb +0 -0
  223. data/test/language/ast/variable.rb +0 -0
  224. data/test/language/functions.rb +91 -12
  225. data/test/language/parser.rb +21 -0
  226. data/test/language/resource.rb +0 -0
  227. data/test/language/scope.rb +28 -0
  228. data/test/language/snippets.rb +14 -0
  229. data/test/language/transportable.rb +0 -0
  230. data/test/lib/puppettest.rb +0 -0
  231. data/test/lib/puppettest/reporttesting.rb +0 -2
  232. data/test/lib/puppettest/runnable_test.rb +2 -0
  233. data/test/lib/puppettest/support/resources.rb +0 -0
  234. data/test/network/authconfig.rb +0 -0
  235. data/test/network/authorization.rb +0 -0
  236. data/test/network/authstore.rb +0 -0
  237. data/test/network/client/ca.rb +0 -0
  238. data/test/network/client/client.rb +0 -0
  239. data/test/network/client/dipper.rb +0 -0
  240. data/test/network/client/master.rb +2 -6
  241. data/test/network/client/resource.rb +0 -0
  242. data/test/network/client_request.rb +0 -0
  243. data/test/network/daemon.rb +0 -0
  244. data/test/network/handler/bucket.rb +0 -0
  245. data/test/network/handler/ca.rb +0 -0
  246. data/test/network/handler/fileserver.rb +8 -0
  247. data/test/network/handler/handler.rb +0 -0
  248. data/test/network/handler/master.rb +3 -1
  249. data/test/network/handler/report.rb +0 -0
  250. data/test/network/handler/resource.rb +0 -0
  251. data/test/network/handler/runner.rb +0 -0
  252. data/test/network/rights.rb +0 -0
  253. data/test/network/server/mongrel_test.rb +0 -0
  254. data/test/network/server/webrick.rb +0 -0
  255. data/test/network/xmlrpc/client.rb +0 -0
  256. data/test/network/xmlrpc/processor.rb +0 -0
  257. data/test/network/xmlrpc/server.rb +0 -0
  258. data/test/network/xmlrpc/webrick_servlet.rb +0 -0
  259. data/test/other/dsl.rb +0 -0
  260. data/test/other/events.rb +0 -0
  261. data/test/other/overrides.rb +0 -0
  262. data/test/other/provider.rb +0 -0
  263. data/test/other/puppet.rb +0 -0
  264. data/test/other/relationships.rb +0 -0
  265. data/test/other/report.rb +2 -4
  266. data/test/other/transactions.rb +1 -1
  267. data/test/puppet/conffiles.rb +0 -0
  268. data/test/puppet/defaults.rb +0 -0
  269. data/test/puppet/errortest.rb +0 -0
  270. data/test/puppet/tc_suidmanager.rb +0 -0
  271. data/test/rails/ast.rb +0 -0
  272. data/test/rails/configuration.rb +0 -0
  273. data/test/rails/host.rb +0 -0
  274. data/test/rails/rails.rb +0 -0
  275. data/test/rails/railsparameter.rb +0 -0
  276. data/test/rails/railsresource.rb +0 -0
  277. data/test/ral/manager/attributes.rb +0 -0
  278. data/test/ral/manager/instances.rb +0 -0
  279. data/test/ral/manager/manager.rb +0 -0
  280. data/test/ral/manager/provider.rb +0 -0
  281. data/test/ral/manager/type.rb +0 -0
  282. data/test/ral/providers/cron/crontab.rb +0 -0
  283. data/test/ral/providers/group.rb +14 -13
  284. data/test/ral/providers/host/netinfo.rb +0 -0
  285. data/test/ral/providers/host/parsed.rb +0 -0
  286. data/test/ral/providers/mailalias/aliases.rb +0 -0
  287. data/test/ral/providers/mount/netinfo.rb +0 -0
  288. data/test/ral/providers/nameservice.rb +0 -0
  289. data/test/ral/providers/package.rb +0 -31
  290. data/test/ral/providers/package/aptitude.rb +1 -2
  291. data/test/ral/providers/package/aptrpm.rb +2 -2
  292. data/test/ral/providers/parsedfile.rb +0 -0
  293. data/test/ral/providers/port/parsed.rb +0 -0
  294. data/test/ral/providers/provider.rb +0 -0
  295. data/test/ral/providers/service/base.rb +0 -0
  296. data/test/ral/providers/service/debian.rb +0 -0
  297. data/test/ral/providers/sshkey/parsed.rb +0 -0
  298. data/test/ral/providers/user.rb +8 -8
  299. data/test/ral/providers/user/useradd.rb +0 -0
  300. data/test/ral/type/basic.rb +0 -0
  301. data/test/ral/type/cron.rb +0 -0
  302. data/test/ral/type/exec.rb +0 -0
  303. data/test/ral/type/file.rb +0 -0
  304. data/test/ral/type/file/target.rb +0 -0
  305. data/test/ral/type/filebucket.rb +0 -0
  306. data/test/ral/type/fileignoresource.rb +0 -0
  307. data/test/ral/type/filesources.rb +1 -3
  308. data/test/ral/type/group.rb +0 -0
  309. data/test/ral/type/host.rb +0 -0
  310. data/test/ral/type/mailalias.rb +1 -2
  311. data/test/ral/type/parameter.rb +0 -0
  312. data/test/ral/type/port.rb +0 -0
  313. data/test/ral/type/property.rb +0 -0
  314. data/test/ral/type/resources.rb +0 -0
  315. data/test/ral/type/service.rb +0 -0
  316. data/test/ral/type/sshkey.rb +0 -0
  317. data/test/ral/type/tidy.rb +0 -0
  318. data/test/ral/type/user.rb +0 -50
  319. data/test/ral/type/yumrepo.rb +7 -1
  320. data/test/ral/type/zone.rb +0 -0
  321. data/test/test +0 -0
  322. data/test/util/autoload.rb +0 -0
  323. data/test/util/classgen.rb +0 -0
  324. data/test/util/execution.rb +0 -0
  325. data/test/util/features.rb +0 -0
  326. data/test/util/fileparsing.rb +0 -0
  327. data/test/util/filetype.rb +0 -0
  328. data/test/util/inifile.rb +0 -0
  329. data/test/util/instance_loader.rb +0 -0
  330. data/test/util/log.rb +0 -59
  331. data/test/util/metrics.rb +0 -0
  332. data/test/util/package.rb +0 -0
  333. data/test/util/pidlock.rb +0 -0
  334. data/test/util/settings.rb +0 -0
  335. data/test/util/storage.rb +0 -0
  336. data/test/util/subclass_loader.rb +0 -0
  337. data/test/util/utiltest.rb +0 -0
  338. metadata +54 -19
  339. data/lib/puppet/metatype/attributes.rb +0 -685
  340. data/lib/puppet/metatype/closure.rb +0 -49
  341. data/lib/puppet/metatype/container.rb +0 -50
  342. data/lib/puppet/metatype/evaluation.rb +0 -163
  343. data/lib/puppet/metatype/instances.rb +0 -305
  344. data/lib/puppet/metatype/metaparams.rb +0 -423
  345. data/lib/puppet/metatype/providers.rb +0 -247
  346. data/lib/puppet/metatype/relationships.rb +0 -115
  347. data/lib/puppet/metatype/schedules.rb +0 -33
  348. data/lib/puppet/metatype/tags.rb +0 -38
  349. data/lib/puppet/util/plist.rb +0 -23
  350. data/lib/puppet/util/plist/generator.rb +0 -225
  351. data/lib/puppet/util/plist/parser.rb +0 -226
  352. data/test/ral/providers/package/apt.rb +0 -169
  353. data/test/ral/providers/package/dpkg.rb +0 -64
  354. data/test/util/posixtest.rb +0 -169
File without changes
@@ -122,16 +122,11 @@ module Puppet
122
122
  namespaces and methods. This can be used as a coarse-grained
123
123
  authorization system for both ``puppetd`` and ``puppetmasterd``."
124
124
  ],
125
- :environments => ["production,development", "The valid environments for Puppet clients.
126
- This is more useful as a server-side setting than client, but any
127
- environment chosen must be in this list. Values should be
128
- separated by a comma."],
129
125
  :environment => {:default => "production", :desc => "The environment Puppet is running in. For clients
130
126
  (e.g., ``puppetd``) this determines the environment itself, which
131
127
  is used to find modules and much more. For servers (i.e.,
132
128
  ``puppetmasterd``) this provides the default environment for nodes
133
- we know nothing about.",
134
- :hook => proc { |value| raise(ArgumentError, "Invalid environment %s" % value) unless Puppet::Node::Environment.valid?(value) }
129
+ we know nothing about."
135
130
  },
136
131
  :diff_args => ["", "Which arguments to pass to the diff command when printing differences between files."],
137
132
  :diff => ["diff", "Which diff command to use when printing differences between files."],
@@ -664,7 +659,8 @@ module Puppet
664
659
  setdefaults(:parser,
665
660
  :lexical => [false, "Whether to use lexical scoping (vs. dynamic)."],
666
661
  :templatedir => ["$vardir/templates",
667
- "Where Puppet looks for template files."
662
+ "Where Puppet looks for template files. Can be a list of colon-seperated
663
+ directories."
668
664
  ]
669
665
  )
670
666
 
File without changes
File without changes
File without changes
@@ -20,7 +20,7 @@ class Puppet::FileServing::Fileset
20
20
 
21
21
  # Now strip off the leading path, so each file becomes relative, and remove
22
22
  # any slashes that might end up at the beginning of the path.
23
- result = files.collect { |file| file.sub(%r{^#{@path}/*}, '') }
23
+ result = files.collect { |file| file.sub(%r{^#{Regexp.escape(@path)}/*}, '') }
24
24
 
25
25
  # And add the path itself.
26
26
  result.unshift(".")
@@ -120,7 +120,7 @@ class Puppet::FileServing::Fileset
120
120
 
121
121
  return result
122
122
  end
123
-
123
+ public
124
124
  # Stat a given file, using the links-appropriate method.
125
125
  def stat(path)
126
126
  unless defined?(@stat_method)
@@ -60,10 +60,10 @@ class Puppet::FileServing::Metadata < Puppet::FileServing::FileBase
60
60
 
61
61
  case stat.ftype
62
62
  when "file":
63
- @checksum = ("{%s}" % @checksum_type) + send("%s_file" % @checksum_type, real_path)
63
+ @checksum = ("{%s}" % @checksum_type) + send("%s_file" % @checksum_type, real_path).to_s
64
64
  when "directory": # Always just timestamp the directory.
65
- sumtype = @checksum_type.to_s =~ /time/ ? @checksum_type : "ctime"
66
- @checksum = ("{%s}" % sumtype) + send("%s_file" % sumtype, path).to_s
65
+ @checksum_type = "ctime"
66
+ @checksum = ("{%s}" % @checksum_type) + send("%s_file" % @checksum_type, path).to_s
67
67
  when "link":
68
68
  @destination = File.readlink(real_path)
69
69
  else
@@ -12,12 +12,13 @@ class Puppet::Node::Facts::Facter < Puppet::Indirector::Code
12
12
  Dir.entries(dir).find_all { |e| e =~ /\.rb$/ }.each do |file|
13
13
  fqfile = ::File.join(dir, file)
14
14
  begin
15
- Puppet.info "Loading #{type} %s" % ::File.basename(file.sub(".rb",''))
15
+ Puppet.info "Loading %s %s" %
16
+ [type, ::File.basename(file.sub(".rb",''))]
16
17
  Timeout::timeout(self.timeout) do
17
18
  load fqfile
18
19
  end
19
20
  rescue => detail
20
- Puppet.warning "Could not load #{type} %s: %s" % [fqfile, detail]
21
+ Puppet.warning "Could not load %s %s: %s" % [type, fqfile, detail]
21
22
  end
22
23
  end
23
24
  end
@@ -34,11 +34,20 @@ class Puppet::Indirector::Yaml < Puppet::Indirector::Terminus
34
34
  end
35
35
  end
36
36
 
37
+ # Get the yaml directory
38
+ def base
39
+ (Puppet[:name] == "puppetmasterd") ? Puppet[:yamldir] : Puppet[:clientyamldir]
40
+ end
41
+
37
42
  # Return the path to a given node's file.
38
43
  def path(name)
39
- base = (Puppet[:name] == "puppetmasterd") ? Puppet[:yamldir] : Puppet[:clientyamldir]
40
44
  File.join(base, self.class.indirection_name.to_s, name.to_s + ".yaml")
41
45
  end
46
+
47
+ # Do a glob on the yaml directory, loading each file found
48
+ def search(request)
49
+ Dir.glob(File.join(base, self.class.indirection_name.to_s, request.key)).collect { |f| YAML.load_file(f) }
50
+ end
42
51
 
43
52
  private
44
53
 
@@ -19,6 +19,15 @@ class Puppet::Module
19
19
  end
20
20
  end
21
21
 
22
+ # Return an array of paths by splitting the +templatedir+ config
23
+ # parameter.
24
+ def self.templatepath(environment = nil)
25
+ dirs = Puppet.settings.value(:templatedir, environment).split(":")
26
+ dirs.select do |p|
27
+ p =~ /^#{File::SEPARATOR}/ && File::directory?(p)
28
+ end
29
+ end
30
+
22
31
  # Find and return the +module+ that +path+ belongs to. If +path+ is
23
32
  # absolute, or if there is no module whose name is the first component
24
33
  # of +path+, return +nil+
@@ -63,25 +72,39 @@ class Puppet::Module
63
72
  return template
64
73
  end
65
74
 
66
- # If we can find the template in :templatedir, we return that.
67
- td_file = File.join(Puppet.settings.value(:templatedir, environment), template)
68
- return td_file if File.exists?(td_file)
69
-
75
+ template_paths = templatepath(environment)
76
+ if template_paths
77
+ # If we can find the template in :templatedir, we return that.
78
+ td_file = template_paths.collect { |path|
79
+ File::join(path, template)
80
+ }.find { |f| File.exists?(f) }
81
+
82
+ return td_file unless td_file == nil
83
+ end
84
+
85
+ td_file = find_template_for_module(template, environment)
86
+
87
+ # check in the default template dir, if there is one
88
+ if td_file.nil?
89
+ raise Puppet::Error, "No valid template directory found, please check templatedir settings" if template_paths.nil?
90
+ td_file = File::join(template_paths.first, template)
91
+ end
92
+ td_file
93
+ end
94
+
95
+ def self.find_template_for_module(template, environment = nil)
70
96
  path, file = split_path(template)
71
97
 
72
98
  # Because templates don't have an assumed template name, like manifests do,
73
99
  # we treat templates with no name as being templates in the main template
74
100
  # directory.
75
- if file.nil?
76
- mod = nil
77
- else
101
+ if not file.nil?
78
102
  mod = find(path, environment)
103
+ if mod
104
+ return mod.template(file)
105
+ end
79
106
  end
80
- if mod
81
- return mod.template(file)
82
- else
83
- return td_file # Return this anyway, since we're going to fail.
84
- end
107
+ nil
85
108
  end
86
109
 
87
110
  # Return a list of manifests (as absolute filenames) that match +pat+
@@ -144,4 +167,5 @@ class Puppet::Module
144
167
  end
145
168
 
146
169
  private :initialize
170
+ private_class_method :find_template_for_module
147
171
  end
File without changes
@@ -199,6 +199,7 @@ class Puppet::Network::Client::Master < Puppet::Network::Client
199
199
 
200
200
  self.class.instance = self
201
201
  @running = false
202
+ @splayed = false
202
203
  end
203
204
 
204
205
  # Mark that we should restart. The Puppet module checks whether we're running,
@@ -338,7 +339,7 @@ class Puppet::Network::Client::Master < Puppet::Network::Client
338
339
  if Puppet[:debug]
339
340
  puts detail.backtrace
340
341
  end
341
- Puppet.err "Could not retrieve #{args[:name]}s: %s" % detail
342
+ Puppet.err "Could not retrieve %ss: %s" % [args[:name], detail]
342
343
  end
343
344
 
344
345
  # Now clean up after ourselves
@@ -389,12 +390,13 @@ class Puppet::Network::Client::Master < Puppet::Network::Client
389
390
  Dir.entries(dir).find_all { |e| e =~ /\.rb$/ }.each do |file|
390
391
  fqfile = ::File.join(dir, file)
391
392
  begin
392
- Puppet.info "Loading #{type} %s" % ::File.basename(file.sub(".rb",''))
393
+ Puppet.info "Loading %s %s" %
394
+ [type, ::File.basename(file.sub(".rb",''))]
393
395
  Timeout::timeout(self.timeout) do
394
396
  load fqfile
395
397
  end
396
398
  rescue => detail
397
- Puppet.warning "Could not load #{type} %s: %s" % [fqfile, detail]
399
+ Puppet.warning "Could not load %s %s: %s" % [type, fqfile, detail]
398
400
  end
399
401
  end
400
402
  end
@@ -477,20 +479,19 @@ class Puppet::Network::Client::Master < Puppet::Network::Client
477
479
  @lockfile
478
480
  end
479
481
 
482
+ def splayed?
483
+ @splayed
484
+ end
485
+
480
486
  # Sleep when splay is enabled; else just return.
481
487
  def splay
482
488
  return unless Puppet[:splay]
489
+ return if splayed?
483
490
 
484
- limit = Integer(Puppet[:splaylimit])
485
-
486
- # Pick a splay time and then cache it.
487
- unless time = Puppet::Util::Storage.cache(:configuration)[:splay_time]
488
- time = rand(limit)
489
- Puppet::Util::Storage.cache(:configuration)[:splay_time] = time
490
- end
491
-
491
+ time = rand(Integer(Puppet[:splaylimit]))
492
492
  Puppet.info "Sleeping for %s seconds (splay is enabled)" % time
493
493
  sleep(time)
494
+ @splayed = true
494
495
  end
495
496
 
496
497
  private
File without changes
@@ -70,7 +70,9 @@ class Puppet::Network::Handler
70
70
  mount.debug("Describing %s for %s" % [url, client]) if client
71
71
 
72
72
  # use the mount to resolve the path for us.
73
- metadata = Puppet::FileServing::Metadata.new(url, :path => mount.file_path(path, client), :links => links)
73
+ return "" unless full_path = mount.file_path(path, client)
74
+
75
+ metadata = Puppet::FileServing::Metadata.new(url, :path => full_path, :links => links)
74
76
 
75
77
  return "" unless metadata.exist?
76
78
 
@@ -651,55 +653,38 @@ class Puppet::Network::Handler
651
653
  # and "bad batch".
652
654
  #
653
655
  def list(relpath, recurse, ignore, client = nil)
654
- reclist(file_path(relpath, client), nil, recurse, ignore)
655
- end
656
-
657
- # Recursively list the files in this tree.
658
- def reclist(basepath, abspath, recurse, ignore)
659
- abspath = basepath if abspath.nil?
660
- relpath = abspath.sub(%r{^#{basepath}}, '')
661
- relpath = "/#{relpath}" if relpath[0] != ?/ #/
662
-
663
- return unless FileTest.exists?(abspath)
664
-
665
- desc = [relpath]
666
-
667
- ftype = File.stat(abspath).ftype
668
-
669
- desc << ftype
670
- if recurse.is_a?(Integer)
671
- recurse -= 1
656
+ abspath = file_path(relpath, client)
657
+ if FileTest.exists?(abspath)
658
+ if FileTest.directory?(abspath) and recurse
659
+ return reclist(abspath, recurse, ignore)
660
+ else
661
+ return [["/", File.stat(abspath).ftype]]
662
+ end
672
663
  end
664
+ return nil
665
+ end
673
666
 
674
- ary = [desc]
675
- if recurse == true or (recurse.is_a?(Integer) and recurse > -1)
676
- if ftype == "directory"
677
- children = Dir.entries(abspath)
678
- if ignore
679
- children = handleignore(children, abspath, ignore)
680
- end
681
- children.each { |child|
682
- next if child =~ /^\.\.?$/
683
- reclist(basepath, File.join(abspath, child), recurse, ignore).each { |cobj|
684
- ary << cobj
685
- }
686
- }
667
+ def reclist(abspath, recurse, ignore)
668
+ require 'puppet/file_serving'
669
+ require 'puppet/file_serving/fileset'
670
+ args = { :recurse => recurse, :links => :follow }
671
+ args[:ignore] = ignore if ignore
672
+ fs = Puppet::FileServing::Fileset.new(abspath, args)
673
+ ary = fs.files.collect do |file|
674
+ if file == "."
675
+ file = "/"
676
+ else
677
+ file = File.join("/", file )
687
678
  end
679
+ stat = fs.stat(File.join(abspath, file))
680
+ next if stat.nil?
681
+ [ file, stat.ftype ]
688
682
  end
689
683
 
690
684
  return ary.compact
691
685
  end
692
686
 
693
- # Deal with ignore parameters.
694
- def handleignore(files, path, ignore_patterns)
695
- ignore_patterns.each do |ignore|
696
- files.delete_if do |entry|
697
- File.fnmatch(ignore, entry, File::FNM_DOTMATCH)
698
- end
699
- end
700
- return files
701
- end
702
- end
687
+ end
703
688
 
704
689
  # A special mount class specifically for the plugins mount -- just
705
690
  # has some magic to effectively do a union mount of the 'plugins'
@@ -727,7 +712,7 @@ class Puppet::Network::Handler
727
712
  end
728
713
 
729
714
  def file_path(relpath, client = nil)
730
- mod = valid_modules.map { |m| mod_path_exists?(m, relpath, client) ? m : nil }.compact.first
715
+ return nil unless mod = valid_modules.map { |m| mod_path_exists?(m, relpath, client) ? m : nil }.compact.first
731
716
  mod_file_path(mod, relpath, client)
732
717
  end
733
718
 
@@ -735,9 +720,16 @@ class Puppet::Network::Handler
735
720
  def list(relpath, recurse, ignore, client = nil)
736
721
  result = []
737
722
  valid_modules.each do |m|
738
- ary = reclist(mod_file_path(m, relpath, client), nil, recurse, ignore)
739
- ary = [] if ary.nil?
740
- result += ary
723
+ modpath = mod_file_path(m, relpath, client)
724
+ if FileTest.exists?(modpath)
725
+ if FileTest.directory?(modpath) and recurse
726
+ ary = reclist(modpath, recurse, ignore)
727
+ ary = [] if ary.nil?
728
+ result += ary
729
+ else
730
+ result += [["/", File.stat(modpath).ftype]]
731
+ end
732
+ end
741
733
  end
742
734
  result
743
735
  end
@@ -24,7 +24,7 @@ class Puppet::Network::Handler
24
24
  # Tell a client whether there's a fresh config for it
25
25
  def freshness(client = nil, clientip = nil)
26
26
  # Always force a recompile. Newer clients shouldn't do this (as of April 2008).
27
- Time.now
27
+ return Time.now.to_i
28
28
  end
29
29
 
30
30
  def initialize(hash = {})
File without changes
File without changes
File without changes
@@ -0,0 +1,148 @@
1
+ # Author: Christian Hofstaedtler <hofstaedtler@inqnet.at>
2
+ # Copyright (c) 2006 Manuel Holtgrewe, 2007 Luke Kanies,
3
+ # 2008 Christian Hofstaedtler
4
+ #
5
+ # This file is mostly based on the mongrel module, which is part of
6
+ # the standard puppet distribution.
7
+ #
8
+ # puppet/network/http_server/mongrel.rb has the following license,
9
+ # and is based heavily on a file retrieved from:
10
+ # http://ttt.ggnore.net/2006/11/15/xmlrpc-with-mongrel-and-ruby-off-rails/
11
+ #
12
+ # Permission is hereby granted, free of charge, to any person obtaining
13
+ # a copy of this software and associated documentation files (the
14
+ # "Software"), to deal in the Software without restriction, including
15
+ # without limitation the rights to use, copy, modify, merge, publish,
16
+ # distribute, sublicense, and/or sell copies of the Software, and to
17
+ # permit persons to whom the Software is furnished to do so, subject to
18
+ # the following conditions:
19
+ #
20
+ # The above copyright notice and this permission notice shall be
21
+ # included in all copies or substantial portions of the Software.
22
+ #
23
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
24
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
26
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
27
+ # BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
28
+ # ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
29
+ # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
30
+ # SOFTWARE.
31
+
32
+
33
+ require 'puppet'
34
+ require 'puppet/network/handler'
35
+ require 'puppet/sslcertificates'
36
+
37
+ require 'xmlrpc/server'
38
+ require 'puppet/network/xmlrpc/server'
39
+ require 'puppet/network/http_server'
40
+ require 'puppet/network/client_request'
41
+ require 'puppet/network/handler'
42
+
43
+ require 'resolv'
44
+ require 'rack'
45
+
46
+ # A handler for a Rack-style puppet(master)d. For the most part, it works
47
+ # exactly the same as HTTPServer::Mongrel:
48
+ # After checking whether the request itself is sane, the handler forwards
49
+ # it to an internal instance of XMLRPC::BasicServer to process it.
50
+ module Puppet::Network
51
+ class HTTPServer::Rack
52
+ attr_reader :xmlrpc_server
53
+
54
+ def initialize(handlers)
55
+ @debug = false
56
+ if Puppet[:debug]
57
+ @debug = true
58
+ end
59
+
60
+ Puppet.info "Starting Rack server for puppet version %s" % Puppet.version
61
+ if Puppet[:name] != "puppetmasterd" then
62
+ Puppet.warn 'Rack server is not named "puppetmasterd", this may be not what you want. ($0 = %s)' % $0
63
+ end
64
+
65
+ @xmlrpc_server = Puppet::Network::XMLRPCServer.new
66
+ handlers.each do |name, args|
67
+ unless handler = Puppet::Network::Handler.handler(name)
68
+ raise ArgumentError, "Invalid handler %s" % name
69
+ end
70
+ h = handler.new(args)
71
+ @xmlrpc_server.add_handler(handler.interface, h)
72
+ end
73
+ Puppet.info "Rack server is waiting to serve requests."
74
+ end
75
+
76
+ # Validate a rack-style request (in env), and run the requested XMLRPC
77
+ # call.
78
+ def process(env)
79
+ # time to serve a request
80
+ req = Rack::Request.new(env)
81
+
82
+ if @debug then
83
+ Puppet.info "Handling request, details:"
84
+ env.each do |name, val|
85
+ l = " env: %s ->" % name
86
+ l = l + ' %s' % val
87
+ Puppet.info l
88
+ end
89
+ end
90
+
91
+ if not req.post? then
92
+ return [405, { "Content-Type" => "text/html" }, "Method Not Allowed"]
93
+ end
94
+ if req.media_type() != "text/xml" then
95
+ return [400, { "Content-Type" => "text/html" }, "Bad Request"]
96
+ end
97
+ if req.content_length().to_i <= 0 then
98
+ return [411, { "Content-Type" => "text/html" }, "Length Required"]
99
+ end
100
+
101
+ body = ''
102
+ req.body().each { |line| body = body + line }
103
+ if @debug then
104
+ Puppet.info "Request Body: %s" % body
105
+ end
106
+ if body.size != req.content_length().to_i then
107
+ if @debug then
108
+ Puppet.info "body length didnt match %d" % body.size
109
+ Puppet.info " vs. -> %d" % req.content_length().to_i
110
+ end
111
+ return [400, { "Content-Type" => "text/html" }, "Bad Request Length"]
112
+ end
113
+ info = client_info(env)
114
+ begin
115
+ data = @xmlrpc_server.process(body, info)
116
+ return [200, { "Content-Type" => "text/xml; charset=utf-8" }, data]
117
+ rescue => detail
118
+ Puppet.err "Rack: Internal Server Error: XMLRPC_Server.process problem. Details follow: "
119
+ detail.backtrace.each { |line| Puppet.err " --> %s" % line }
120
+ return [500, { "Content-Type" => "text/html" }, "Internal Server Error"]
121
+ end
122
+ end
123
+
124
+ private
125
+
126
+ def client_info(request)
127
+ ip = request["REMOTE_ADDR"]
128
+ # JJM #906 The following dn.match regular expression is forgiving
129
+ # enough to match the two Distinguished Name string contents
130
+ # coming from Apache, Pound or other reverse SSL proxies.
131
+ if dn = request[Puppet[:ssl_client_header]] and dn_matchdata = dn.match(/^.*?CN\s*=\s*(.*)/)
132
+ client = dn_matchdata[1].to_str
133
+ valid = (request[Puppet[:ssl_client_verify_header]] == 'SUCCESS')
134
+ else
135
+ begin
136
+ client = Resolv.getname(ip)
137
+ rescue => detail
138
+ Puppet.err "Could not resolve %s: %s" % [ip, detail]
139
+ client = "unknown"
140
+ end
141
+ valid = false
142
+ end
143
+ info = Puppet::Network::ClientRequest.new(client, ip, valid)
144
+ return info
145
+ end
146
+ end
147
+ end
148
+