puppet 3.0.0.rc5 → 3.0.0.rc7

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 (398) hide show
  1. data/LICENSE +1 -1
  2. data/README_DEVELOPER.md +209 -1
  3. data/README_HIERA.md +148 -0
  4. data/Rakefile +25 -27
  5. data/bin/extlookup2hiera +56 -0
  6. data/conf/auth.conf +34 -34
  7. data/examples/hiera/README.md +91 -0
  8. data/examples/hiera/etc/hiera.yaml +15 -0
  9. data/examples/hiera/etc/hieradb/common.yaml +3 -0
  10. data/examples/hiera/etc/hieradb/dc1.yaml +6 -0
  11. data/examples/hiera/etc/hieradb/development.yaml +2 -0
  12. data/examples/hiera/etc/puppet.conf +3 -0
  13. data/examples/hiera/modules/data/manifests/common.pp +3 -0
  14. data/examples/hiera/modules/ntp/manifests/config.pp +5 -0
  15. data/examples/hiera/modules/ntp/manifests/data.pp +3 -0
  16. data/examples/hiera/modules/ntp/templates/ntp.conf.erb +3 -0
  17. data/examples/hiera/modules/users/manifests/common.pp +3 -0
  18. data/examples/hiera/modules/users/manifests/dc1.pp +3 -0
  19. data/examples/hiera/modules/users/manifests/development.pp +3 -0
  20. data/examples/hiera/site.pp +3 -0
  21. data/ext/build_defaults.yaml +23 -0
  22. data/ext/debian/README.Debian +8 -0
  23. data/ext/debian/README.source +2 -0
  24. data/ext/debian/TODO.Debian +1 -0
  25. data/ext/debian/changelog.erb +1104 -0
  26. data/ext/debian/compat +1 -0
  27. data/ext/debian/control +143 -0
  28. data/ext/debian/copyright +361 -0
  29. data/ext/debian/docs +1 -0
  30. data/ext/debian/fileserver.conf +17 -0
  31. data/ext/debian/puppet-common.dirs +8 -0
  32. data/ext/debian/puppet-common.install +4 -0
  33. data/ext/debian/puppet-common.lintian-overrides +5 -0
  34. data/ext/debian/puppet-common.manpages +2 -0
  35. data/ext/debian/puppet-common.postinst +35 -0
  36. data/ext/debian/puppet-common.postrm +32 -0
  37. data/ext/debian/puppet-el.dirs +1 -0
  38. data/ext/debian/puppet-el.emacsen-install +25 -0
  39. data/ext/debian/puppet-el.emacsen-remove +11 -0
  40. data/ext/debian/puppet-el.emacsen-startup +9 -0
  41. data/ext/debian/puppet-el.install +1 -0
  42. data/ext/debian/puppet-testsuite.install +2 -0
  43. data/ext/debian/puppet-testsuite.lintian-overrides +4 -0
  44. data/ext/debian/puppet.conf +14 -0
  45. data/ext/debian/puppet.default +7 -0
  46. data/ext/debian/puppet.init +118 -0
  47. data/ext/debian/puppet.lintian-overrides +3 -0
  48. data/ext/debian/puppet.logrotate +11 -0
  49. data/ext/debian/puppet.manpages +32 -0
  50. data/ext/debian/puppet.postinst +20 -0
  51. data/ext/debian/puppet.postrm +20 -0
  52. data/ext/debian/puppet.preinst +20 -0
  53. data/ext/debian/puppetmaster-common.install +2 -0
  54. data/ext/debian/puppetmaster-common.manpages +2 -0
  55. data/ext/debian/puppetmaster-common.puppetqd.default +27 -0
  56. data/ext/debian/puppetmaster-common.puppetqd.init +84 -0
  57. data/ext/debian/puppetmaster-passenger.dirs +4 -0
  58. data/ext/debian/puppetmaster-passenger.postinst +66 -0
  59. data/ext/debian/puppetmaster-passenger.postrm +33 -0
  60. data/ext/debian/puppetmaster.README.debian +16 -0
  61. data/ext/debian/puppetmaster.default +38 -0
  62. data/ext/debian/puppetmaster.init +158 -0
  63. data/ext/debian/puppetmaster.lintian-overrides +3 -0
  64. data/ext/debian/puppetmaster.postinst +20 -0
  65. data/ext/debian/puppetmaster.postrm +5 -0
  66. data/ext/debian/puppetmaster.preinst +22 -0
  67. data/ext/debian/rules +128 -0
  68. data/ext/debian/source/format +1 -0
  69. data/ext/debian/source/options +1 -0
  70. data/ext/debian/vim-puppet.README.Debian +13 -0
  71. data/ext/debian/vim-puppet.dirs +3 -0
  72. data/ext/debian/vim-puppet.yaml +5 -0
  73. data/ext/debian/watch +2 -0
  74. data/ext/emacs/puppet-mode.el +1 -0
  75. data/ext/envpuppet +4 -0
  76. data/ext/envpuppet.bat +3 -2
  77. data/{conf → ext}/freebsd/puppetd +0 -0
  78. data/{conf → ext}/freebsd/puppetmasterd +0 -0
  79. data/{conf → ext}/gentoo/conf.d/puppet +0 -0
  80. data/{conf → ext}/gentoo/conf.d/puppetmaster +0 -0
  81. data/{conf → ext}/gentoo/init.d/puppet +0 -0
  82. data/{conf → ext}/gentoo/init.d/puppetmaster +0 -0
  83. data/{conf → ext}/gentoo/puppet/fileserver.conf +0 -0
  84. data/{conf → ext}/gentoo/puppet/puppet.conf +0 -0
  85. data/ext/ips/puppet-agent +49 -0
  86. data/ext/ips/puppet-master +44 -0
  87. data/ext/ips/puppet.conf +29 -0
  88. data/ext/ips/puppet.p5m.erb +12 -0
  89. data/ext/ips/puppetagent.xml +46 -0
  90. data/ext/ips/puppetmaster.xml +42 -0
  91. data/ext/ips/rules +19 -0
  92. data/ext/ips/transforms +34 -0
  93. data/{conf → ext}/osx/PackageInfo.plist +0 -0
  94. data/{conf → ext}/osx/createpackage.sh +1 -1
  95. data/ext/osx/file_mapping.yaml +33 -0
  96. data/ext/osx/preflight.erb +37 -0
  97. data/{tasks/rake/templates → ext/osx}/prototype.plist.erb +0 -0
  98. data/ext/packaging/README-Solaris.md +117 -0
  99. data/ext/packaging/README.md +89 -0
  100. data/ext/packaging/tasks/00_utils.rb +236 -0
  101. data/ext/packaging/tasks/10_setupvars.rake +62 -0
  102. data/ext/packaging/tasks/apple.rake +201 -0
  103. data/ext/packaging/tasks/clean.rake +5 -0
  104. data/ext/packaging/tasks/deb.rake +105 -0
  105. data/ext/packaging/tasks/gem.rake +52 -0
  106. data/ext/packaging/tasks/ips.rake +78 -0
  107. data/ext/packaging/tasks/mock.rake +88 -0
  108. data/ext/packaging/tasks/release.rake +20 -0
  109. data/ext/packaging/tasks/rpm.rake +39 -0
  110. data/ext/packaging/tasks/ship.rake +34 -0
  111. data/ext/packaging/tasks/sign.rake +76 -0
  112. data/ext/packaging/tasks/tar.rake +20 -0
  113. data/ext/project_data.yaml +25 -0
  114. data/ext/rack/files/apache2.conf +2 -1
  115. data/{conf → ext}/redhat/client.init +0 -0
  116. data/{conf → ext}/redhat/client.sysconfig +0 -0
  117. data/{conf → ext}/redhat/fileserver.conf +0 -0
  118. data/{conf → ext}/redhat/logrotate +0 -0
  119. data/{conf → ext}/redhat/puppet.conf +0 -0
  120. data/{conf/redhat/puppet.spec → ext/redhat/puppet.spec.erb} +140 -33
  121. data/{conf → ext}/redhat/queue.init +0 -0
  122. data/{conf → ext}/redhat/rundir-perms.patch +0 -0
  123. data/{conf → ext}/redhat/server.init +0 -0
  124. data/{conf → ext}/redhat/server.sysconfig +0 -0
  125. data/{conf → ext}/solaris/pkginfo +0 -0
  126. data/{conf → ext}/solaris/smf/puppetd.xml +0 -0
  127. data/{conf → ext}/solaris/smf/puppetmasterd.xml +0 -0
  128. data/{conf → ext}/solaris/smf/svc-puppetd +0 -0
  129. data/{conf → ext}/solaris/smf/svc-puppetmasterd +0 -0
  130. data/{conf → ext}/suse/client.init +0 -0
  131. data/{conf → ext}/suse/fileserver.conf +0 -0
  132. data/{conf → ext}/suse/logrotate +0 -0
  133. data/{conf → ext}/suse/puppet.conf +0 -0
  134. data/{conf → ext}/suse/puppet.spec +1 -1
  135. data/{conf → ext}/suse/server.init +0 -0
  136. data/ext/systemd/puppetagent.service +13 -0
  137. data/ext/systemd/puppetmaster.service +13 -0
  138. data/{conf → ext}/windows/eventlog/Rakefile +0 -0
  139. data/{conf → ext}/windows/eventlog/puppetres.dll +0 -0
  140. data/{conf → ext}/windows/eventlog/puppetres.mc +0 -0
  141. data/ext/windows/service/daemon.bat +6 -0
  142. data/ext/windows/service/daemon.rb +90 -0
  143. data/install.rb +22 -32
  144. data/lib/hiera/backend/puppet_backend.rb +102 -0
  145. data/lib/hiera/scope.rb +42 -0
  146. data/lib/hiera_puppet.rb +89 -0
  147. data/lib/puppet.rb +1 -1
  148. data/lib/puppet/agent.rb +2 -2
  149. data/lib/puppet/agent/locker.rb +12 -9
  150. data/lib/puppet/application.rb +10 -8
  151. data/lib/puppet/application/agent.rb +12 -8
  152. data/lib/puppet/application/apply.rb +2 -2
  153. data/lib/puppet/application/cert.rb +6 -6
  154. data/lib/puppet/application/certificate.rb +1 -4
  155. data/lib/puppet/application/describe.rb +1 -1
  156. data/lib/puppet/application/device.rb +5 -2
  157. data/lib/puppet/application/doc.rb +1 -1
  158. data/lib/puppet/application/face_base.rb +3 -13
  159. data/lib/puppet/application/filebucket.rb +1 -1
  160. data/lib/puppet/application/inspect.rb +1 -1
  161. data/lib/puppet/application/kick.rb +4 -2
  162. data/lib/puppet/application/master.rb +2 -2
  163. data/lib/puppet/application/queue.rb +3 -1
  164. data/lib/puppet/application/resource.rb +1 -1
  165. data/lib/puppet/configurer.rb +11 -7
  166. data/lib/puppet/configurer/downloader.rb +1 -4
  167. data/lib/puppet/daemon.rb +4 -4
  168. data/lib/puppet/defaults.rb +64 -60
  169. data/lib/puppet/external/dot.rb +1 -1
  170. data/lib/puppet/external/pson/common.rb +15 -0
  171. data/lib/puppet/external/pson/pure.rb +0 -62
  172. data/lib/puppet/external/pson/pure/generator.rb +1 -1
  173. data/lib/puppet/external/pson/pure/parser.rb +2 -2
  174. data/lib/puppet/face/ca.rb +19 -14
  175. data/lib/puppet/face/config.rb +2 -2
  176. data/lib/puppet/face/facts.rb +1 -1
  177. data/lib/puppet/face/help/action.erb +0 -1
  178. data/lib/puppet/face/help/face.erb +0 -1
  179. data/lib/puppet/face/help/man.erb +3 -6
  180. data/lib/puppet/face/module/install.rb +1 -1
  181. data/lib/puppet/face/module/list.rb +1 -1
  182. data/lib/puppet/face/module/uninstall.rb +1 -1
  183. data/lib/puppet/face/node.rb +1 -1
  184. data/lib/puppet/face/node/clean.rb +30 -25
  185. data/lib/puppet/feature/base.rb +0 -3
  186. data/lib/puppet/feature/rails.rb +2 -1
  187. data/lib/puppet/file_serving/terminus_selector.rb +1 -1
  188. data/lib/puppet/indirector/catalog/active_record.rb +5 -0
  189. data/lib/puppet/indirector/catalog/static_compiler.rb +2 -3
  190. data/lib/puppet/indirector/certificate/disabled_ca.rb +22 -0
  191. data/lib/puppet/indirector/certificate_request/disabled_ca.rb +22 -0
  192. data/lib/puppet/indirector/certificate_revocation_list/disabled_ca.rb +22 -0
  193. data/lib/puppet/indirector/face.rb +3 -3
  194. data/lib/puppet/indirector/facts/active_record.rb +5 -0
  195. data/lib/puppet/indirector/facts/facter.rb +1 -4
  196. data/lib/puppet/indirector/facts/inventory_active_record.rb +6 -0
  197. data/lib/puppet/indirector/file_bucket_file/file.rb +2 -1
  198. data/lib/puppet/indirector/indirection.rb +2 -2
  199. data/lib/puppet/indirector/key/disabled_ca.rb +22 -0
  200. data/lib/puppet/indirector/node/active_record.rb +5 -0
  201. data/lib/puppet/indirector/request.rb +4 -0
  202. data/lib/puppet/indirector/resource/active_record.rb +5 -0
  203. data/lib/puppet/network/authentication.rb +30 -0
  204. data/lib/puppet/network/http.rb +0 -13
  205. data/lib/puppet/network/http/connection.rb +10 -2
  206. data/lib/puppet/network/http/handler.rb +8 -0
  207. data/lib/puppet/network/http/mongrel/rest.rb +5 -0
  208. data/lib/puppet/network/http/rack/rest.rb +7 -0
  209. data/lib/puppet/network/http/webrick.rb +3 -6
  210. data/lib/puppet/network/http/webrick/rest.rb +4 -0
  211. data/lib/puppet/network/server.rb +9 -33
  212. data/lib/puppet/node.rb +1 -1
  213. data/lib/puppet/node/facts.rb +0 -1
  214. data/lib/puppet/parser/compiler.rb +1 -1
  215. data/lib/puppet/parser/functions.rb +12 -1
  216. data/lib/puppet/parser/functions/hiera.rb +8 -0
  217. data/lib/puppet/parser/functions/hiera_array.rb +8 -0
  218. data/lib/puppet/parser/functions/hiera_hash.rb +8 -0
  219. data/lib/puppet/parser/functions/hiera_include.rb +11 -0
  220. data/lib/puppet/parser/functions/shellquote.rb +21 -29
  221. data/lib/puppet/parser/lexer.rb +2 -1
  222. data/lib/puppet/parser/scope.rb +8 -0
  223. data/lib/puppet/provider/exec/windows.rb +1 -1
  224. data/lib/puppet/provider/group/groupadd.rb +2 -3
  225. data/lib/puppet/provider/package/pkg.rb +37 -10
  226. data/lib/puppet/provider/service/daemontools.rb +1 -1
  227. data/lib/puppet/provider/service/launchd.rb +1 -1
  228. data/lib/puppet/provider/service/redhat.rb +1 -1
  229. data/lib/puppet/provider/service/runit.rb +1 -1
  230. data/lib/puppet/provider/user/useradd.rb +8 -3
  231. data/lib/puppet/provider/user/windows_adsi.rb +11 -0
  232. data/lib/puppet/provider/zfs/zfs.rb +29 -2
  233. data/lib/puppet/provider/zone/solaris.rb +144 -39
  234. data/lib/puppet/provider/zpool/zpool.rb +7 -10
  235. data/lib/puppet/settings.rb +50 -86
  236. data/lib/puppet/settings/duration_setting.rb +34 -0
  237. data/lib/puppet/settings/terminus_setting.rb +16 -0
  238. data/lib/puppet/ssl/base.rb +49 -9
  239. data/lib/puppet/ssl/certificate.rb +13 -9
  240. data/lib/puppet/ssl/certificate_authority.rb +4 -0
  241. data/lib/puppet/ssl/certificate_authority/interface.rb +10 -17
  242. data/lib/puppet/ssl/certificate_factory.rb +4 -21
  243. data/lib/puppet/ssl/certificate_request.rb +1 -10
  244. data/lib/puppet/ssl/certificate_revocation_list.rb +1 -3
  245. data/lib/puppet/ssl/digest.rb +20 -0
  246. data/lib/puppet/ssl/host.rb +31 -6
  247. data/lib/puppet/test/test_helper.rb +1 -1
  248. data/lib/puppet/transaction/report.rb +2 -1
  249. data/lib/puppet/type.rb +1 -1
  250. data/lib/puppet/type/augeas.rb +1 -1
  251. data/lib/puppet/type/cron.rb +1 -1
  252. data/lib/puppet/type/exec.rb +7 -8
  253. data/lib/puppet/type/file.rb +1 -1
  254. data/lib/puppet/type/file/content.rb +2 -2
  255. data/lib/puppet/type/file/ensure.rb +1 -1
  256. data/lib/puppet/type/file/mode.rb +1 -1
  257. data/lib/puppet/type/file/selcontext.rb +6 -2
  258. data/lib/puppet/type/file/source.rb +1 -1
  259. data/lib/puppet/type/schedule.rb +1 -1
  260. data/lib/puppet/type/scheduled_task.rb +1 -1
  261. data/lib/puppet/type/tidy.rb +1 -1
  262. data/lib/puppet/type/zone.rb +126 -253
  263. data/lib/puppet/util.rb +10 -23
  264. data/lib/puppet/util/adsi.rb +22 -14
  265. data/lib/puppet/util/log/destinations.rb +7 -0
  266. data/lib/puppet/util/log/rate_limited_logger.rb +40 -0
  267. data/lib/puppet/util/metric.rb +2 -2
  268. data/lib/puppet/util/monkey_patches.rb +8 -0
  269. data/lib/puppet/util/platform.rb +7 -0
  270. data/lib/puppet/util/selinux.rb +31 -36
  271. data/lib/puppet/util/windows/error.rb +1 -1
  272. data/lib/puppet/util/windows/process.rb +3 -3
  273. data/lib/puppet/util/windows/security.rb +7 -7
  274. data/lib/puppet/util/windows/user.rb +65 -2
  275. data/lib/puppet/util/zaml.rb +90 -46
  276. data/lib/puppet/version.rb +1 -1
  277. data/spec/fixtures/hiera.yaml +9 -0
  278. data/spec/fixtures/manifests/site.pp +0 -0
  279. data/spec/integration/defaults_spec.rb +25 -11
  280. data/spec/integration/faces/ca_spec.rb +11 -16
  281. data/spec/integration/network/server/webrick_spec.rb +14 -27
  282. data/spec/integration/node_spec.rb +4 -1
  283. data/spec/integration/parser/functions/require_spec.rb +3 -3
  284. data/spec/integration/parser/undef_param_spec.rb +88 -0
  285. data/spec/integration/provider/mount_spec.rb +4 -1
  286. data/spec/integration/ssl/certificate_authority_spec.rb +18 -0
  287. data/spec/lib/puppet_spec/files.rb +3 -3
  288. data/spec/lib/puppet_spec/settings.rb +0 -1
  289. data/spec/shared_contexts/platform.rb +8 -0
  290. data/spec/spec_helper.rb +6 -0
  291. data/spec/unit/agent/locker_spec.rb +8 -2
  292. data/spec/unit/application/agent_spec.rb +29 -7
  293. data/spec/unit/application/apply_spec.rb +1 -1
  294. data/spec/unit/application/device_spec.rb +18 -1
  295. data/spec/unit/application/face_base_spec.rb +16 -2
  296. data/spec/unit/application/kick_spec.rb +8 -0
  297. data/spec/unit/application/queue_spec.rb +5 -0
  298. data/spec/unit/application_spec.rb +13 -23
  299. data/spec/unit/configurer/downloader_spec.rb +2 -11
  300. data/spec/unit/configurer_spec.rb +6 -0
  301. data/spec/unit/face/node_spec.rb +1 -1
  302. data/spec/unit/hiera/backend/puppet_backend_spec.rb +140 -0
  303. data/spec/unit/hiera/scope_spec.rb +62 -0
  304. data/spec/unit/hiera_puppet_spec.rb +111 -0
  305. data/spec/unit/indirector/catalog/active_record_spec.rb +4 -0
  306. data/spec/unit/indirector/catalog/static_compiler_spec.rb +194 -0
  307. data/spec/unit/indirector/certificate/disabled_ca_spec.rb +33 -0
  308. data/spec/unit/indirector/certificate_request/disabled_ca_spec.rb +33 -0
  309. data/spec/unit/indirector/certificate_revocation_list/disabled_ca_spec.rb +33 -0
  310. data/spec/unit/indirector/facts/active_record_spec.rb +37 -26
  311. data/spec/unit/indirector/facts/inventory_active_record_spec.rb +5 -0
  312. data/spec/unit/indirector/hiera_spec.rb +2 -1
  313. data/spec/unit/indirector/key/disabled_ca_spec.rb +33 -0
  314. data/spec/unit/indirector/node/active_record_spec.rb +7 -0
  315. data/spec/unit/indirector/request_spec.rb +22 -0
  316. data/spec/unit/indirector/resource/active_record_spec.rb +5 -0
  317. data/spec/unit/module_tool/application_spec.rb +1 -1
  318. data/spec/unit/network/authentication_spec.rb +86 -0
  319. data/spec/unit/network/http/connection_spec.rb +21 -0
  320. data/spec/unit/network/http/handler_spec.rb +12 -0
  321. data/spec/unit/network/http/rack/rest_spec.rb +7 -0
  322. data/spec/unit/network/http/webrick_spec.rb +11 -26
  323. data/spec/unit/network/server_spec.rb +79 -192
  324. data/spec/unit/node/facts_spec.rb +2 -2
  325. data/spec/unit/parser/ast/vardef_spec.rb +4 -4
  326. data/spec/unit/parser/files_spec.rb +3 -0
  327. data/spec/unit/parser/functions/defined_spec.rb +5 -5
  328. data/spec/unit/parser/functions/fqdn_rand_spec.rb +1 -1
  329. data/spec/unit/parser/functions/hiera_array_spec.rb +23 -0
  330. data/spec/unit/parser/functions/hiera_hash_spec.rb +19 -0
  331. data/spec/unit/parser/functions/hiera_include_spec.rb +19 -0
  332. data/spec/unit/parser/functions/hiera_spec.rb +21 -0
  333. data/spec/unit/parser/functions/include_spec.rb +3 -3
  334. data/spec/unit/parser/functions/realize_spec.rb +3 -3
  335. data/spec/unit/parser/functions/require_spec.rb +5 -5
  336. data/spec/unit/parser/functions/shellquote_spec.rb +0 -4
  337. data/spec/unit/parser/functions_spec.rb +6 -10
  338. data/spec/unit/parser/lexer_spec.rb +13 -0
  339. data/spec/unit/parser/scope_spec.rb +16 -1
  340. data/spec/unit/provider/exec/posix_spec.rb +7 -6
  341. data/spec/unit/provider/group/groupadd_spec.rb +36 -30
  342. data/spec/unit/provider/package/pkg_spec.rb +16 -2
  343. data/spec/unit/provider/service/redhat_spec.rb +2 -2
  344. data/spec/unit/provider/sshkey/parsed_spec.rb +4 -0
  345. data/spec/unit/provider/user/user_role_add_spec.rb +125 -126
  346. data/spec/unit/provider/user/useradd_spec.rb +147 -118
  347. data/spec/unit/provider/user/windows_adsi_spec.rb +22 -0
  348. data/spec/unit/provider/zone/solaris_spec.rb +126 -7
  349. data/spec/unit/provider/zpool/zpool_spec.rb +4 -3
  350. data/spec/unit/puppet_spec.rb +7 -0
  351. data/spec/unit/settings/duration_setting_spec.rb +45 -0
  352. data/spec/unit/settings/terminus_setting_spec.rb +28 -0
  353. data/spec/unit/settings_spec.rb +21 -23
  354. data/spec/unit/ssl/base_spec.rb +68 -19
  355. data/spec/unit/ssl/certificate_authority/interface_spec.rb +19 -30
  356. data/spec/unit/ssl/certificate_authority_spec.rb +3 -2
  357. data/spec/unit/ssl/certificate_factory_spec.rb +15 -6
  358. data/spec/unit/ssl/certificate_request_spec.rb +80 -113
  359. data/spec/unit/ssl/certificate_revocation_list_spec.rb +1 -1
  360. data/spec/unit/ssl/certificate_spec.rb +26 -2
  361. data/spec/unit/ssl/digest_spec.rb +35 -0
  362. data/spec/unit/ssl/host_spec.rb +73 -27
  363. data/spec/unit/ssl/key_spec.rb +0 -4
  364. data/spec/unit/type/exec_spec.rb +1 -1
  365. data/spec/unit/type/file_spec.rb +2 -1
  366. data/spec/unit/type/scheduled_task_spec.rb +2 -2
  367. data/spec/unit/type/zone_spec.rb +52 -10
  368. data/spec/unit/util/adsi_spec.rb +19 -0
  369. data/spec/unit/util/checksums_spec.rb +2 -3
  370. data/spec/unit/util/execution_spec.rb +1 -1
  371. data/spec/unit/util/log/destinations_spec.rb +1 -0
  372. data/spec/unit/util/log/rate_limited_logger_spec.rb +51 -0
  373. data/spec/unit/util/logging_spec.rb +6 -6
  374. data/spec/unit/util/selinux_spec.rb +24 -32
  375. data/spec/unit/util/zaml_spec.rb +94 -6
  376. data/spec/unit/util_spec.rb +17 -0
  377. data/spec/watchr.rb +2 -6
  378. data/tasks/{rake/manpages.rake → manpages.rake} +0 -0
  379. data/tasks/{rake/parser.rake → parser.rake} +0 -0
  380. metadata +1003 -119
  381. data/CHANGELOG +0 -9233
  382. data/conf/osx/preflight +0 -24
  383. data/lib/puppet/network/http/mongrel.rb +0 -35
  384. data/lib/puppet/util/config_timeout.rb +0 -24
  385. data/spec/unit/network/http/mongrel/rest_spec.rb +0 -257
  386. data/spec/unit/network/http/mongrel_spec.rb +0 -91
  387. data/spec/unit/network/http_spec.rb +0 -31
  388. data/spec/unit/util/config_timeout_spec.rb +0 -57
  389. data/tasks/rake/apple.rake +0 -176
  390. data/tasks/rake/changelog.rake +0 -15
  391. data/tasks/rake/ci.rake +0 -22
  392. data/tasks/rake/dailybuild.rake +0 -9
  393. data/tasks/rake/gem.rake +0 -63
  394. data/tasks/rake/git_workflow.rake +0 -134
  395. data/tasks/rake/metrics.rake +0 -14
  396. data/tasks/rake/sign.rake +0 -14
  397. data/tasks/rake/testbranch.rake +0 -16
  398. data/tasks/rake/yard.rake +0 -11
data/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  Puppet - Automating Configuration Management.
2
2
 
3
- Copyright (C) 2011 Puppet Labs Inc
3
+ Copyright (C) 2005-2012 Puppet Labs Inc
4
4
 
5
5
  Puppet Labs can be contacted at: info@puppetlabs.com
6
6
 
@@ -25,7 +25,133 @@ When we setup CI nodes, but this is not standard or expected behavior.
25
25
  Please consider rbenv instead of rvm. The default behavior of rvm is difficult
26
26
  to maintain with `set -e` shell environments.
27
27
 
28
- # Dependencies #
28
+ # Two Types of Catalog
29
+
30
+ When working on subsystems of Puppet that deal with the catalog it is important
31
+ to be aware of the two different types of Catalog. I often ran into this when
32
+ working in Professional Services when I built a small tool to diff two catalogs
33
+ to determine if an upgrade in Puppet produces the same configuration catalogs.
34
+ As a developer I've run into this difference while working on spec tests for
35
+ the static compiler and working on spec tests for types and providers.
36
+
37
+ The two different types of catalog becomes relevant when writing spec tests
38
+ because we frequently need to wire up a fake catalog so that we can exercise
39
+ types, providers, or terminii that filter the catalog.
40
+
41
+ The two different types of catalogs are so-called "resource" catalogs and "RAL"
42
+ (resource abstraction layer) catalogs. At a high level, the resource catalog
43
+ is the in-memory object we serialize and transfer around the network. The
44
+ compiler terminus is expected to produce a resource catalog. The agent takes a
45
+ resource catalog and converts it into a RAL catalog. The RAL catalog is what
46
+ is used to apply the configuration model to the system.
47
+
48
+ Resource dependency information is most easily obtained from a RAL catalog by
49
+ walking the graph instance produced by the `relationship_graph` method.
50
+
51
+ ## Resource Catalog
52
+
53
+ If you're writing spec tests for something that deals with a catalog "server
54
+ side," a new catalog terminus for example, then you'll be dealing with a
55
+ resource catalog. You can produce a resource catalog suitable for spec tests
56
+ using something like this:
57
+
58
+ let(:catalog) do
59
+ catalog = Puppet::Resource::Catalog.new("node-name-val") # NOT certname!
60
+ rsrc = Puppet::Resource.new("file", "sshd_config",
61
+ :parameters => {
62
+ :ensure => 'file',
63
+ :source => 'puppet:///modules/filetest/sshd_config',
64
+ }
65
+ )
66
+ rsrc.file = 'site.pp'
67
+ rsrc.line = 21
68
+ catalog.add_resource(rsrc)
69
+ end
70
+
71
+ The resources in this catalog may be accessed using `catalog.resources`.
72
+ Resource dependencies are not easily walked using a resource catalog however.
73
+ To walk the dependency tree convert the catalog to a RAL catalog as described
74
+ in
75
+
76
+ ## RAL Catalog
77
+
78
+ The resource catalog may be converted to a RAL catalog using `catalog.to_ral`.
79
+ The RAL catalog contains `Puppet::Type` instances instead of `Puppet::Resource`
80
+ instances as is the case with the resource catalog.
81
+
82
+ One very useful feature of the RAL catalog are the methods to work with
83
+ resource relationships. For example:
84
+
85
+ irb> catalog = catalog.to_ral
86
+ irb> graph = catalog.relationship_graph
87
+ irb> pp graph.edges
88
+ [{ Notify[alpha] => File[/tmp/file_20.txt] },
89
+ { Notify[alpha] => File[/tmp/file_21.txt] },
90
+ { Notify[alpha] => File[/tmp/file_22.txt] },
91
+ { Notify[alpha] => File[/tmp/file_23.txt] },
92
+ { Notify[alpha] => File[/tmp/file_24.txt] },
93
+ { Notify[alpha] => File[/tmp/file_25.txt] },
94
+ { Notify[alpha] => File[/tmp/file_26.txt] },
95
+ { Notify[alpha] => File[/tmp/file_27.txt] },
96
+ { Notify[alpha] => File[/tmp/file_28.txt] },
97
+ { Notify[alpha] => File[/tmp/file_29.txt] },
98
+ { File[/tmp/file_20.txt] => Notify[omega] },
99
+ { File[/tmp/file_21.txt] => Notify[omega] },
100
+ { File[/tmp/file_22.txt] => Notify[omega] },
101
+ { File[/tmp/file_23.txt] => Notify[omega] },
102
+ { File[/tmp/file_24.txt] => Notify[omega] },
103
+ { File[/tmp/file_25.txt] => Notify[omega] },
104
+ { File[/tmp/file_26.txt] => Notify[omega] },
105
+ { File[/tmp/file_27.txt] => Notify[omega] },
106
+ { File[/tmp/file_28.txt] => Notify[omega] },
107
+ { File[/tmp/file_29.txt] => Notify[omega] }]
108
+
109
+ If the `relationship_graph` method is throwing exceptions at you, there's a
110
+ good chance the catalog is not a RAL catalog.
111
+
112
+ ## Settings Catalog ##
113
+
114
+ Be aware that Puppet creates a mini catalog and applies this catalog locally to
115
+ manage file resource from the settings. This behavior made it difficult and
116
+ time consuming to track down a race condition in
117
+ [2888](http://projects.puppetlabs.com/issues/2888).
118
+
119
+ Even more surprising, the `File[puppetdlockfile]` resource is only added to the
120
+ settings catalog if the file exists on disk. This caused the race condition as
121
+ it will exist when a separate process holds the lock while applying the
122
+ catalog.
123
+
124
+ It may be sufficient to simply be aware of the settings catalog and the
125
+ potential for race conditions it presents. An effective way to be reasonably
126
+ sure and track down the problem is to wrap the File.open method like so:
127
+
128
+ # We're wrapping ourselves around the File.open method.
129
+ # As described at: http://goo.gl/lDsv6
130
+ class File
131
+ WHITELIST = [ /pidlock.rb:39/ ]
132
+
133
+ class << self
134
+ alias xxx_orig_open open
135
+ end
136
+
137
+ def self.open(name, *rest, &block)
138
+ # Check the whitelist for any "good" File.open calls against the #
139
+ puppetdlock file
140
+ white_listed = caller(0).find do |line|
141
+ JJM_WHITELIST.find { |re| re.match(line) }
142
+ end
143
+
144
+ # If you drop into IRB here, take a look at your caller, it might be
145
+ # the ghost in the machine you're looking for.
146
+ binding.pry if name =~ /puppetdlock/ and not white_listed
147
+ xxx_orig_open(name, *rest, &block)
148
+ end
149
+ end
150
+
151
+ The settings catalog is populated by the `Puppet::Util::Settings#to\_catalog`
152
+ method.
153
+
154
+ # Ruby Dependencies #
29
155
 
30
156
  Puppet is considered an Application as it relates to the recommendation of
31
157
  adding a Gemfile.lock file to the repository and the information published at
@@ -226,4 +352,86 @@ Please do not monkey patch the constant `Puppet::PUPPETVERSION` or obtain the
226
352
  version using the constant. The only supported way to set and get the Puppet
227
353
  version is through the accessor methods.
228
354
 
355
+ # Static Compiler
356
+
357
+ The static compiler was added to Puppet in the 2.7.0 release.
358
+ [1](http://links.puppetlabs.com/static-compiler-announce)
359
+
360
+ The static compiler is intended to provide a configuration catalog that
361
+ requires a minimal amount of network communication in order to apply the
362
+ catalog to the system. As implemented in Puppet 2.7.x and Puppet 3.0.x this
363
+ intention takes the form of replacing all of the source parameters of File
364
+ resources with a content parameter containing an address in the form of a
365
+ checksum. The expected behavior is that the process applying the catalog to
366
+ the node will retrieve the file content from the FileBucket instead of the
367
+ FileServer.
368
+
369
+ The high level approach can be described as follows. The `StaticCompiler` is a
370
+ terminus that inserts itself between the "normal" compiler terminus and the
371
+ request. The static compiler takes the resource catalog produced by the
372
+ compiler and filters all File resources. Any file resource that contains a
373
+ source parameter with a value starting with 'puppet://' is filtered in the
374
+ following way in a "standard" single master / networked agents deployment
375
+ scenario:
376
+
377
+ 1. The content, owner, group, and mode values are retrieved from th
378
+ FileServer by the master.
379
+ 2. The file content is stored in the file bucket on the master.
380
+ 3. The source parameter value is stripped from the File resource.
381
+ 4. The content parameter value is set in the File resource using the form
382
+ '{XXX}1234567890' which can be thought of as a content address indexed by
383
+ checksum.
384
+ 5. The owner, group and mode values are set in the File resource if they are
385
+ not already set.
386
+ 6. The filtered catalog is returned in the response.
387
+
388
+ In addition to the catalog terminus, the process requesting the catalog needs
389
+ to obtain the file content. The default behavior of `puppet agent` is to
390
+ obtain file contents from the local client bucket. The method we expect users
391
+ to employ to reconfigure the agent to use the server bucket is to declare the
392
+ `Filebucket[puppet]` resource with the address of the master. For example:
393
+
394
+ node default {
395
+ filebucket { puppet:
396
+ server => $server,
397
+ path => false,
398
+ }
399
+ class { filetest: }
400
+ }
401
+
402
+ This special filebucket resource named "puppet" will cause the agent to fetch
403
+ file contents specified by checksum from the remote filebucket instead of the
404
+ default clientbucket.
405
+
406
+ ## Quick start
407
+
408
+ Create a module that recursively downloads something. The jeffmccune-filetest
409
+ module will recursively copy the rubygems source tree.
410
+
411
+ $ puppet module install jeffmccune-filetest
412
+
413
+ Start the master with the StaticCompiler turned on:
414
+
415
+ $ puppet master \
416
+ --catalog_terminus=static_compiler \
417
+ --verbose \
418
+ --no-daemonize
419
+
420
+ Add the special Filebucket[puppet] resource:
421
+
422
+ # site.pp
423
+ node default {
424
+ filebucket { puppet: server => $server, path => false }
425
+ class { filetest: }
426
+ }
427
+
428
+ Get the static catalog:
429
+
430
+ $ puppet agent --test
431
+
432
+ You should expect all file metadata to be contained in the catalog, including a
433
+ checksum representing the content. When managing an out of sync file resource,
434
+ the real contents should be fetched from the server instead of the
435
+ clientbucket.
436
+
229
437
  EOF
@@ -0,0 +1,148 @@
1
+ What?
2
+ =====
3
+
4
+ A data backend for Hiera that can query the internal Puppet
5
+ scope for data. The data structure and approach is heavily
6
+ based on work by Nigel Kersten but made more configurable and
7
+ with full hierarchy.
8
+
9
+ It also includes a Puppet function that works like extlookup()
10
+ but uses the Hiera backends.
11
+
12
+ Usage?
13
+ ======
14
+
15
+ Hiera supports the concept of chaining backends together in order,
16
+ using this we can create a very solid module author/module user
17
+ experience.
18
+
19
+ Module Author
20
+ -------------
21
+
22
+ A module author wants to create a configurable module that has sane
23
+ defaults but want to retain the ability for users to configure it.
24
+
25
+ We'll use a simple NTP config class as an example.
26
+
27
+ <pre>
28
+ class ntp::config($ntpservers = hiera("ntpservers")) {
29
+ file{"/etc/ntp.conf":
30
+ content => template("ntp.conf.erb")
31
+ }
32
+ }
33
+ </pre>
34
+
35
+ We create a class that takes as parameters a list of NTP servers.
36
+
37
+ The module author wants to create a works-out-of-the-box experience
38
+ so creates a data class for the NTP module:
39
+
40
+ <pre>
41
+ class ntp::data {
42
+ $ntpservers = ["1.pool.ntp.org", "2.pool.ntp.org"]
43
+ }
44
+ </pre>
45
+
46
+ Together this creates a default sane setup.
47
+
48
+ Module User
49
+ -----------
50
+
51
+ The module user has a complex multi data center setup, he wants to use
52
+ the NTP module from the forge and configure it for his needs.
53
+
54
+ The user creates a set of default data for his organization, he can do
55
+ this in data files or in Puppet. We'll show a Puppet example.
56
+
57
+ <pre>
58
+ class data::common {
59
+ $ntpservers = ["ntp1.example.com", "ntp2.example.com"]
60
+ }
61
+ </pre>
62
+
63
+ Being part of the actual code this data is subject to strict change
64
+ control. This is needed as its data that can potentially affect all
65
+ machines in all locations.
66
+
67
+ The user has a fact called _location_ that contains, for example, a name
68
+ of the data center.
69
+
70
+ He decides to create JSON based data for the data centers, being just data
71
+ that applies to one data center this data is not subject to as strict
72
+ change controls and so does not live with the code:
73
+
74
+ He creates _/var/lib/hiera/dc1.json_ with the following:
75
+
76
+ <pre>
77
+ {"ntpservers" : ["ntp1.dc1.example.com", "ntp2.dc1.example.com"]}
78
+ </pre>
79
+
80
+ Machines in dc1 will now use specific NTP servers while all the rest will
81
+ use the data in _data::common_
82
+
83
+ The module user can now just declare the class on his nodes:
84
+
85
+ <pre>
86
+ node "web1" {
87
+ include ntp::config
88
+ }
89
+ </pre>
90
+
91
+ For true one-off changes, the user can use the full paramterized class approach
92
+ that will completely disable the Hiera handling of this data item. He could
93
+ also use an ENC to supply this data.
94
+
95
+ <pre>
96
+ node "web2" {
97
+ class{"ntp::config": ntpservers => ["another.example.com"]}
98
+ }
99
+ </pre>
100
+
101
+ This behavior is thanks to Hiera's ability to search through multiple backends
102
+ for data picking the first match. We can have the JSON searched before the internal
103
+ Puppet data.
104
+
105
+ To achieve this setup the module user needs to configure Hiera in _/etc/puppet/hiera.yaml_:
106
+
107
+ <pre>
108
+ ---
109
+ :backends:
110
+ - json
111
+ - puppet
112
+
113
+ :hierarchy:
114
+ - "%{location}"
115
+ - common
116
+
117
+ :json:
118
+ :datadir: /var/lib/hiera
119
+
120
+ :puppet:
121
+ :datasource: data
122
+ </pre>
123
+
124
+ Converting from extlookup?
125
+ ==========================
126
+
127
+ A simple converter is included called _extlookup2hiera_ and it can convert from CSV to JSON or YAML:
128
+
129
+ <pre>
130
+ $ extlookup2hiera --in common.csv --out common.json --json
131
+ </pre>
132
+
133
+ Installation?
134
+ =============
135
+
136
+ It's not 100% ready for prime time, shortly a simple _gem install hiera-puppet_ on your master will do it.
137
+
138
+ For the moment the Gem install will place the Puppet Parser Function where Puppet cannot find it, you should
139
+ copy it out and distribute it to your master using Pluginsync or something similar
140
+
141
+ License
142
+ =======
143
+
144
+ See LICENSE file.
145
+
146
+ Support
147
+ =======
148
+ Please log tickets and issues at our [Projects site](http://projects.puppetlabs.com)
data/Rakefile CHANGED
@@ -20,43 +20,41 @@ end
20
20
  require 'rake'
21
21
  require 'rspec'
22
22
  require "rspec/core/rake_task"
23
+ require 'yaml'
23
24
 
25
+ Dir['tasks/**/*.rake'].each { |t| load t }
26
+ Dir['ext/packaging/tasks/**/*'].sort.each { |t| load t }
24
27
 
25
- %x{which git &> /dev/null}
26
- if $?.success? and File.exist?('.git')
27
- # remove the git hash from git describe string
28
- Puppet.version = %x{git describe}.chomp.gsub('-','.').split('.')[0..3].join('.')
28
+ begin
29
+ @build_defaults ||= YAML.load_file('ext/build_defaults.yaml')
30
+ @packaging_url = @build_defaults['packaging_url']
31
+ @packaging_repo = @build_defaults['packaging_repo']
32
+ rescue
33
+ STDERR.puts 'Unable to read the packaging repo info from ext/build_defaults.yaml'
29
34
  end
30
35
 
31
- Dir['tasks/**/*.rake'].each { |t| load t }
32
-
33
- FILES = FileList[
34
- '[A-Z]*',
35
- 'install.rb',
36
- 'bin/**/*',
37
- 'sbin/**/*',
38
- 'lib/**/*',
39
- 'conf/**/*',
40
- 'man/**/*',
41
- 'examples/**/*',
42
- 'ext/**/*',
43
- 'tasks/**/*',
44
- 'spec/**/*'
45
- ]
46
-
47
- Rake::PackageTask.new("puppet", Puppet.version) do |pkg|
48
- pkg.package_dir = 'pkg'
49
- pkg.need_tar_gz = true
50
- pkg.package_files = FILES.to_a
36
+ namespace :package do
37
+ desc "Bootstrap packaging automation, e.g. clone into packaging repo"
38
+ task :bootstrap do
39
+ if File.exist?("ext/#{@packaging_repo}")
40
+ puts "It looks like you already have ext/#{@packaging_repo}. If you don't like it, blow it away with package:implode."
41
+ else
42
+ cd 'ext' do
43
+ %x{git clone #{@packaging_url}}
44
+ end
45
+ end
46
+ end
47
+ desc "Remove all cloned packaging automation"
48
+ task :implode do
49
+ rm_rf "ext/#{@packaging_repo}"
50
+ end
51
51
  end
52
52
 
53
+
53
54
  task :default do
54
55
  sh %{rake -T}
55
56
  end
56
57
 
57
- desc "Create the tarball and the gem - use when releasing"
58
- task :puppetpackages => [:gem, :package]
59
-
60
58
  RSpec::Core::RakeTask.new do |t|
61
59
  t.pattern ='spec/{unit,integration}/**/*.rb'
62
60
  t.fail_on_error = true
@@ -0,0 +1,56 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'optparse'
4
+ require 'csv'
5
+
6
+ options = {:in => nil, :out => nil, :format => :yaml}
7
+
8
+ OptionParser.new do |opts|
9
+ opts.banner = "Converter for extlookup CSV files into Hiera JSON and YAML files"
10
+
11
+ opts.on("--in FILE", "-i", "Input CSV file") do |v|
12
+ options[:in] = v
13
+ end
14
+
15
+ opts.on("--out FILE", "-o", "Output Hiera file") do |v|
16
+ options[:out] = v
17
+ end
18
+
19
+ opts.on("--json", "-j", "Create JSON format file") do |v|
20
+ options[:format] = :json
21
+ end
22
+ end.parse!
23
+
24
+ if options[:in].nil? || options[:out].nil?
25
+ STDERR.puts "Please specify an input and output file with --in and --out"
26
+ exit 1
27
+ end
28
+
29
+ unless File.exist?(options[:in])
30
+ STDERR.puts "Cannot find input file #{options[:in]}"
31
+ exit 1
32
+ end
33
+
34
+ csvdata = CSV.read(options[:in])
35
+ hieradata = {}
36
+
37
+ csvdata.each do |d|
38
+ d = d.map{|item| item.to_s}
39
+
40
+ if d.size > 2
41
+ hieradata[d[0]] = d[1, d.size].flatten
42
+ else
43
+ hieradata[d[0]] = d[1]
44
+ end
45
+ end
46
+
47
+ case options[:format]
48
+ when :yaml
49
+ require 'yaml'
50
+ File.open(options[:out], "w") {|f| f.write hieradata.to_yaml}
51
+ when :json
52
+ require 'rubygems'
53
+ require 'json'
54
+ File.open(options[:out], "w") {|f| f.write JSON.pretty_generate hieradata}
55
+ end
56
+