puppet 0.24.6 → 0.24.7

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 (383) hide show
  1. data/CHANGELOG +115 -0
  2. data/Rakefile +43 -14
  3. data/bin/puppetca +6 -5
  4. data/bin/puppetdoc +109 -15
  5. data/bin/ralsh +3 -1
  6. data/conf/redhat/puppet.spec +74 -48
  7. data/examples/mcx_dock_absent.pp +4 -0
  8. data/examples/mcx_dock_default.pp +118 -0
  9. data/examples/mcx_dock_full.pp +125 -0
  10. data/examples/mcx_dock_invalid.pp +9 -0
  11. data/examples/mcx_nogroup.pp +118 -0
  12. data/examples/mcx_notexists_absent.pp +4 -0
  13. data/ext/emacs/puppet-mode.el +1 -1
  14. data/lib/puppet.rb +1 -1
  15. data/lib/puppet/external/nagios/base.rb +114 -71
  16. data/lib/puppet/feature/base.rb +6 -0
  17. data/lib/puppet/indirector/yaml.rb +12 -3
  18. data/lib/puppet/module.rb +1 -1
  19. data/lib/puppet/network/client/master.rb +1 -1
  20. data/lib/puppet/network/xmlrpc/client.rb +3 -1
  21. data/lib/puppet/parameter.rb +1 -1
  22. data/lib/puppet/parser/ast.rb +15 -0
  23. data/lib/puppet/parser/ast/astarray.rb +1 -2
  24. data/lib/puppet/parser/ast/casestatement.rb +2 -0
  25. data/lib/puppet/parser/ast/collection.rb +2 -0
  26. data/lib/puppet/parser/ast/comparison_operator.rb +4 -0
  27. data/lib/puppet/parser/ast/definition.rb +2 -0
  28. data/lib/puppet/parser/ast/else.rb +3 -0
  29. data/lib/puppet/parser/ast/function.rb +19 -12
  30. data/lib/puppet/parser/ast/hostclass.rb +9 -1
  31. data/lib/puppet/parser/ast/ifstatement.rb +3 -0
  32. data/lib/puppet/parser/ast/node.rb +3 -0
  33. data/lib/puppet/parser/ast/resource.rb +3 -0
  34. data/lib/puppet/parser/ast/resource_defaults.rb +2 -0
  35. data/lib/puppet/parser/ast/resource_override.rb +3 -0
  36. data/lib/puppet/parser/ast/vardef.rb +3 -0
  37. data/lib/puppet/parser/functions.rb +14 -0
  38. data/lib/puppet/parser/functions/inline_template.rb +21 -0
  39. data/lib/puppet/parser/functions/template.rb +3 -2
  40. data/lib/puppet/parser/lexer.rb +56 -7
  41. data/lib/puppet/parser/parser.rb +114 -98
  42. data/lib/puppet/parser/parser_support.rb +24 -4
  43. data/lib/puppet/parser/resource/reference.rb +4 -3
  44. data/lib/puppet/parser/templatewrapper.rb +30 -22
  45. data/lib/puppet/property.rb +1 -1
  46. data/lib/puppet/property/list.rb +7 -2
  47. data/lib/puppet/property/ordered_list.rb +22 -0
  48. data/lib/puppet/provider/augeas/augeas.rb +189 -0
  49. data/lib/puppet/provider/computer/computer.rb +22 -0
  50. data/lib/puppet/provider/confine.rb +4 -1
  51. data/lib/puppet/provider/confine/variable.rb +13 -2
  52. data/lib/puppet/provider/confine_collection.rb +4 -1
  53. data/lib/puppet/provider/confiner.rb +1 -1
  54. data/lib/puppet/provider/group/directoryservice.rb +6 -3
  55. data/lib/puppet/provider/group/groupadd.rb +5 -2
  56. data/lib/puppet/provider/group/ldap.rb +11 -9
  57. data/lib/puppet/provider/group/netinfo.rb +8 -4
  58. data/lib/puppet/provider/group/pw.rb +5 -1
  59. data/lib/puppet/provider/host/netinfo.rb +5 -2
  60. data/lib/puppet/provider/macauthorization/macauthorization.rb +315 -0
  61. data/lib/puppet/provider/mcx/mcxcontent.rb +201 -0
  62. data/lib/puppet/provider/nameservice/directoryservice.rb +210 -107
  63. data/lib/puppet/provider/nameservice/netinfo.rb +7 -2
  64. data/lib/puppet/provider/package/appdmg.rb +0 -3
  65. data/lib/puppet/provider/package/apt.rb +6 -0
  66. data/lib/puppet/provider/package/rpm.rb +2 -0
  67. data/lib/puppet/provider/package/yum.rb +5 -1
  68. data/lib/puppet/provider/package/yumhelper.py +9 -0
  69. data/lib/puppet/provider/service/base.rb +9 -6
  70. data/lib/puppet/provider/service/daemontools.rb +25 -15
  71. data/lib/puppet/provider/service/debian.rb +6 -2
  72. data/lib/puppet/provider/service/freebsd.rb +5 -2
  73. data/lib/puppet/provider/service/gentoo.rb +6 -3
  74. data/lib/puppet/provider/service/init.rb +31 -21
  75. data/lib/puppet/provider/service/launchd.rb +195 -0
  76. data/lib/puppet/provider/service/redhat.rb +5 -2
  77. data/lib/puppet/provider/service/runit.rb +30 -20
  78. data/lib/puppet/provider/service/smf.rb +7 -4
  79. data/lib/puppet/provider/ssh_authorized_key/parsed.rb +21 -1
  80. data/lib/puppet/provider/user/directoryservice.rb +1 -0
  81. data/lib/puppet/provider/user/netinfo.rb +9 -3
  82. data/lib/puppet/provider/user/user_role_add.rb +43 -6
  83. data/lib/puppet/provider/zfs/solaris.rb +45 -0
  84. data/lib/puppet/provider/zone/solaris.rb +8 -4
  85. data/lib/puppet/provider/zpool/solaris.rb +116 -0
  86. data/lib/puppet/rails/database/003_add_environment_to_host.rb +9 -0
  87. data/lib/puppet/rails/database/schema.rb +1 -0
  88. data/lib/puppet/rails/host.rb +4 -0
  89. data/lib/puppet/reference/configuration.rb +1 -1
  90. data/lib/puppet/reports/tagmail.rb +15 -6
  91. data/lib/puppet/transaction/change.rb +3 -5
  92. data/lib/puppet/transportable.rb +1 -0
  93. data/lib/puppet/type/augeas.rb +155 -0
  94. data/lib/puppet/type/computer.rb +62 -0
  95. data/lib/puppet/type/exec.rb +2 -1
  96. data/lib/puppet/type/file.rb +1 -1
  97. data/lib/puppet/type/file/ensure.rb +8 -5
  98. data/lib/puppet/type/file/mode.rb +0 -14
  99. data/lib/puppet/type/file/owner.rb +32 -64
  100. data/lib/puppet/type/file/selcontext.rb +3 -8
  101. data/lib/puppet/type/group.rb +27 -45
  102. data/lib/puppet/type/k5login.rb +1 -1
  103. data/lib/puppet/type/macauthorization.rb +141 -0
  104. data/lib/puppet/type/mcx.rb +115 -0
  105. data/lib/puppet/type/mount.rb +1 -1
  106. data/lib/puppet/type/nagios_hostdependency.rb +3 -0
  107. data/lib/puppet/type/ssh_authorized_key.rb +16 -0
  108. data/lib/puppet/type/tidy.rb +43 -14
  109. data/lib/puppet/type/user.rb +25 -1
  110. data/lib/puppet/type/zfs.rb +51 -0
  111. data/lib/puppet/type/zone.rb +8 -0
  112. data/lib/puppet/type/zpool.rb +93 -0
  113. data/lib/puppet/util.rb +17 -38
  114. data/lib/puppet/util/file_locking.rb +44 -0
  115. data/lib/puppet/util/filetype.rb +3 -3
  116. data/lib/puppet/util/log.rb +1 -16
  117. data/lib/puppet/util/metric.rb +0 -5
  118. data/lib/puppet/util/rdoc.rb +85 -0
  119. data/lib/puppet/util/rdoc/code_objects.rb +219 -0
  120. data/lib/puppet/util/rdoc/generators/puppet_generator.rb +829 -0
  121. data/lib/puppet/util/rdoc/generators/template/puppet/puppet.rb +1051 -0
  122. data/lib/puppet/util/rdoc/parser.rb +437 -0
  123. data/lib/puppet/util/selinux.rb +135 -63
  124. data/lib/puppet/util/settings.rb +136 -126
  125. data/lib/puppet/util/storage.rb +4 -2
  126. data/spec/Rakefile +91 -0
  127. data/spec/integration/checksum.rb +47 -0
  128. data/spec/integration/defaults.rb +47 -0
  129. data/spec/integration/file_serving/configuration.rb +43 -0
  130. data/spec/integration/file_serving/content.rb +18 -0
  131. data/spec/integration/file_serving/metadata.rb +18 -0
  132. data/spec/integration/indirector/direct_file_server.rb +80 -0
  133. data/spec/integration/indirector/file_content/file_server.rb +18 -0
  134. data/spec/integration/indirector/file_metadata/file_server.rb +18 -0
  135. data/spec/integration/indirector/module_files.rb +57 -0
  136. data/spec/integration/indirector/node/ldap.rb +15 -0
  137. data/spec/integration/indirector/rest.rb +464 -0
  138. data/spec/integration/network/server/mongrel.rb +48 -0
  139. data/spec/integration/network/server/webrick.rb +48 -0
  140. data/spec/integration/node.rb +93 -0
  141. data/spec/integration/node/catalog.rb +54 -0
  142. data/spec/integration/node/facts.rb +45 -0
  143. data/spec/integration/provider/package.rb +26 -0
  144. data/spec/integration/provider/service/init.rb +32 -0
  145. data/spec/integration/reference/providers.rb +17 -0
  146. data/spec/integration/reports.rb +14 -0
  147. data/spec/integration/transaction/report.rb +26 -0
  148. data/spec/integration/type/package.rb +22 -0
  149. data/spec/integration/util/file_locking.rb +36 -0
  150. data/spec/monkey_patches/add_confine_and_runnable_to_rspec_dsl.rb +46 -0
  151. data/spec/monkey_patches/alias_should_to_must.rb +5 -0
  152. data/spec/shared_behaviours/file_server_terminus.rb +42 -0
  153. data/spec/shared_behaviours/file_serving.rb +64 -0
  154. data/spec/shared_behaviours/memory_terminus.rb +32 -0
  155. data/spec/spec.opts +5 -0
  156. data/spec/spec_helper.rb +36 -0
  157. data/spec/unit/executables/client/certhandler.rb +122 -0
  158. data/spec/unit/file_serving/configuration.rb +224 -0
  159. data/spec/unit/file_serving/configuration/parser.rb +135 -0
  160. data/spec/unit/file_serving/content.rb +71 -0
  161. data/spec/unit/file_serving/file_base.rb +124 -0
  162. data/spec/unit/file_serving/fileset.rb +239 -0
  163. data/spec/unit/file_serving/indirection_hooks.rb +124 -0
  164. data/spec/unit/file_serving/metadata.rb +187 -0
  165. data/spec/unit/file_serving/mount.rb +143 -0
  166. data/spec/unit/file_serving/terminus_helper.rb +76 -0
  167. data/spec/unit/indirector.rb +152 -0
  168. data/spec/unit/indirector/catalog/compiler.rb +156 -0
  169. data/spec/unit/indirector/catalog/yaml.rb +25 -0
  170. data/spec/unit/indirector/checksum/file.rb +139 -0
  171. data/spec/unit/indirector/code.rb +33 -0
  172. data/spec/unit/indirector/direct_file_server.rb +89 -0
  173. data/spec/unit/indirector/envelope.rb +47 -0
  174. data/spec/unit/indirector/exec.rb +51 -0
  175. data/spec/unit/indirector/facts/facter.rb +76 -0
  176. data/spec/unit/indirector/facts/yaml.rb +26 -0
  177. data/spec/unit/indirector/file.rb +154 -0
  178. data/spec/unit/indirector/file_content/file.rb +18 -0
  179. data/spec/unit/indirector/file_content/file_server.rb +18 -0
  180. data/spec/unit/indirector/file_content/modules.rb +18 -0
  181. data/spec/unit/indirector/file_content/rest.rb +11 -0
  182. data/spec/unit/indirector/file_metadata/file.rb +52 -0
  183. data/spec/unit/indirector/file_metadata/file_server.rb +18 -0
  184. data/spec/unit/indirector/file_metadata/modules.rb +42 -0
  185. data/spec/unit/indirector/file_metadata/rest.rb +9 -0
  186. data/spec/unit/indirector/file_server.rb +184 -0
  187. data/spec/unit/indirector/indirection.rb +731 -0
  188. data/spec/unit/indirector/ldap.rb +143 -0
  189. data/spec/unit/indirector/memory.rb +29 -0
  190. data/spec/unit/indirector/module_files.rb +259 -0
  191. data/spec/unit/indirector/node/exec.rb +69 -0
  192. data/spec/unit/indirector/node/ldap.rb +424 -0
  193. data/spec/unit/indirector/node/memory.rb +19 -0
  194. data/spec/unit/indirector/node/plain.rb +19 -0
  195. data/spec/unit/indirector/node/rest.rb +13 -0
  196. data/spec/unit/indirector/node/yaml.rb +25 -0
  197. data/spec/unit/indirector/plain.rb +29 -0
  198. data/spec/unit/indirector/report/processor.rb +81 -0
  199. data/spec/unit/indirector/request.rb +87 -0
  200. data/spec/unit/indirector/rest.rb +372 -0
  201. data/spec/unit/indirector/ssl_rsa/file.rb +116 -0
  202. data/spec/unit/indirector/terminus.rb +245 -0
  203. data/spec/unit/indirector/yaml.rb +145 -0
  204. data/spec/unit/module.rb +247 -0
  205. data/spec/unit/network/client.rb +45 -0
  206. data/spec/unit/network/client/master.rb +442 -0
  207. data/spec/unit/network/handler/fileserver.rb +179 -0
  208. data/spec/unit/network/http.rb +35 -0
  209. data/spec/unit/network/http/mongrel.rb +117 -0
  210. data/spec/unit/network/http/mongrel/rest.rb +377 -0
  211. data/spec/unit/network/http/mongrel/xmlrpc.rb +0 -0
  212. data/spec/unit/network/http/webrick.rb +127 -0
  213. data/spec/unit/network/http/webrick/rest.rb +323 -0
  214. data/spec/unit/network/http/webrick/xmlrpc.rb +0 -0
  215. data/spec/unit/network/http_pool.rb +238 -0
  216. data/spec/unit/network/server.rb +316 -0
  217. data/spec/unit/network/xmlrpc/client.rb +13 -0
  218. data/spec/unit/node.rb +167 -0
  219. data/spec/unit/node/catalog.rb +864 -0
  220. data/spec/unit/node/environment.rb +37 -0
  221. data/spec/unit/node/facts.rb +44 -0
  222. data/spec/unit/other/checksum.rb +92 -0
  223. data/spec/unit/other/pgraph.rb +210 -0
  224. data/spec/unit/other/transaction.rb +33 -0
  225. data/spec/unit/other/transbucket.rb +172 -0
  226. data/spec/unit/other/transobject.rb +92 -0
  227. data/spec/unit/parameter.rb +24 -0
  228. data/spec/unit/parser/ast.rb +37 -0
  229. data/spec/unit/parser/ast/arithmetic_operator.rb +73 -0
  230. data/spec/unit/parser/ast/astarray.rb +66 -0
  231. data/spec/unit/parser/ast/boolean_operator.rb +53 -0
  232. data/spec/unit/parser/ast/collexpr.rb +92 -0
  233. data/spec/unit/parser/ast/comparison_operator.rb +92 -0
  234. data/spec/unit/parser/ast/definition.rb +195 -0
  235. data/spec/unit/parser/ast/function.rb +77 -0
  236. data/spec/unit/parser/ast/hostclass.rb +148 -0
  237. data/spec/unit/parser/ast/minus.rb +36 -0
  238. data/spec/unit/parser/ast/node.rb +125 -0
  239. data/spec/unit/parser/ast/nop.rb +20 -0
  240. data/spec/unit/parser/ast/not.rb +30 -0
  241. data/spec/unit/parser/ast/resource_override.rb +51 -0
  242. data/spec/unit/parser/ast/resource_reference.rb +63 -0
  243. data/spec/unit/parser/ast/vardef.rb +47 -0
  244. data/spec/unit/parser/collector.rb +426 -0
  245. data/spec/unit/parser/compiler.rb +561 -0
  246. data/spec/unit/parser/functions.rb +83 -0
  247. data/spec/unit/parser/functions/inline_template.rb +59 -0
  248. data/spec/unit/parser/functions/template.rb +62 -0
  249. data/spec/unit/parser/interpreter.rb +138 -0
  250. data/spec/unit/parser/lexer.rb +646 -0
  251. data/spec/unit/parser/parser.rb +228 -0
  252. data/spec/unit/parser/resource.rb +336 -0
  253. data/spec/unit/parser/resource/reference.rb +95 -0
  254. data/spec/unit/parser/scope.rb +87 -0
  255. data/spec/unit/parser/templatewrapper.rb +129 -0
  256. data/spec/unit/property.rb +35 -0
  257. data/spec/unit/property/keyvalue.rb +168 -0
  258. data/spec/unit/property/list.rb +156 -0
  259. data/spec/unit/property/ordered_list.rb +64 -0
  260. data/spec/unit/provider/augeas/augeas.rb +238 -0
  261. data/spec/unit/provider/confine.rb +78 -0
  262. data/spec/unit/provider/confine/exists.rb +81 -0
  263. data/spec/unit/provider/confine/false.rb +53 -0
  264. data/spec/unit/provider/confine/feature.rb +60 -0
  265. data/spec/unit/provider/confine/true.rb +53 -0
  266. data/spec/unit/provider/confine/variable.rb +107 -0
  267. data/spec/unit/provider/confine_collection.rb +134 -0
  268. data/spec/unit/provider/confiner.rb +63 -0
  269. data/spec/unit/provider/group/groupadd.rb +31 -0
  270. data/spec/unit/provider/group/ldap.rb +105 -0
  271. data/spec/unit/provider/ldap.rb +248 -0
  272. data/spec/unit/provider/macauthorization.rb +147 -0
  273. data/spec/unit/provider/mcx/mcxcontent.rb +175 -0
  274. data/spec/unit/provider/mount.rb +130 -0
  275. data/spec/unit/provider/mount/parsed.rb +185 -0
  276. data/spec/unit/provider/package/apt.rb +138 -0
  277. data/spec/unit/provider/package/dpkg.rb +163 -0
  278. data/spec/unit/provider/package/gem.rb +87 -0
  279. data/spec/unit/provider/package/hpux.rb +52 -0
  280. data/spec/unit/provider/selboolean.rb +37 -0
  281. data/spec/unit/provider/selmodule-example.pp +0 -0
  282. data/spec/unit/provider/selmodule.rb +66 -0
  283. data/spec/unit/provider/service/daemontools.rb +124 -0
  284. data/spec/unit/provider/service/launchd.rb +134 -0
  285. data/spec/unit/provider/service/runit.rb +117 -0
  286. data/spec/unit/provider/ssh_authorized_key/parsed.rb +102 -0
  287. data/spec/unit/provider/user/hpux.rb +25 -0
  288. data/spec/unit/provider/user/ldap.rb +279 -0
  289. data/spec/unit/provider/user/user_role_add.rb +249 -0
  290. data/spec/unit/provider/user/useradd.rb +115 -0
  291. data/spec/unit/provider/zfs/solaris.rb +87 -0
  292. data/spec/unit/provider/zone/solaris.rb +42 -0
  293. data/spec/unit/provider/zpool/solaris.rb +179 -0
  294. data/spec/unit/rails.rb +125 -0
  295. data/spec/unit/relationship.rb +149 -0
  296. data/spec/unit/reports.rb +61 -0
  297. data/spec/unit/resource_reference.rb +73 -0
  298. data/spec/unit/simple_graph.rb +280 -0
  299. data/spec/unit/transaction/change.rb +187 -0
  300. data/spec/unit/transaction/event.rb +25 -0
  301. data/spec/unit/transaction/report.rb +40 -0
  302. data/spec/unit/type.rb +64 -0
  303. data/spec/unit/type/augeas.rb +113 -0
  304. data/spec/unit/type/computer.rb +82 -0
  305. data/spec/unit/type/exec.rb +91 -0
  306. data/spec/unit/type/file.rb +155 -0
  307. data/spec/unit/type/file/ensure.rb +21 -0
  308. data/spec/unit/type/file/group.rb +118 -0
  309. data/spec/unit/type/file/owner.rb +132 -0
  310. data/spec/unit/type/file/selinux.rb +82 -0
  311. data/spec/unit/type/group.rb +40 -0
  312. data/spec/unit/type/macauthorization.rb +78 -0
  313. data/spec/unit/type/mcx.rb +108 -0
  314. data/spec/unit/type/mount.rb +219 -0
  315. data/spec/unit/type/nagios.rb +63 -0
  316. data/spec/unit/type/noop_metaparam.rb +38 -0
  317. data/spec/unit/type/package.rb +246 -0
  318. data/spec/unit/type/resources.rb +27 -0
  319. data/spec/unit/type/schedule.rb +339 -0
  320. data/spec/unit/type/selboolean.rb +47 -0
  321. data/spec/unit/type/selmodule.rb +18 -0
  322. data/spec/unit/type/service.rb +254 -0
  323. data/spec/unit/type/ssh_authorized_key.rb +106 -0
  324. data/spec/unit/type/tidy.rb +68 -0
  325. data/spec/unit/type/user.rb +260 -0
  326. data/spec/unit/type/zfs.rb +45 -0
  327. data/spec/unit/type/zone.rb +20 -0
  328. data/spec/unit/type/zpool.rb +110 -0
  329. data/spec/unit/util/checksums.rb +99 -0
  330. data/spec/unit/util/constant_inflector.rb +70 -0
  331. data/spec/unit/util/file_locking.rb +115 -0
  332. data/spec/unit/util/ldap/connection.rb +169 -0
  333. data/spec/unit/util/ldap/generator.rb +54 -0
  334. data/spec/unit/util/ldap/manager.rb +654 -0
  335. data/spec/unit/util/loadedfile.rb +65 -0
  336. data/spec/unit/util/log.rb +107 -0
  337. data/spec/unit/util/metric.rb +95 -0
  338. data/spec/unit/util/nagios_maker.rb +128 -0
  339. data/spec/unit/util/posix.rb +256 -0
  340. data/spec/unit/util/resource_template.rb +58 -0
  341. data/spec/unit/util/selinux.rb +219 -0
  342. data/spec/unit/util/settings.rb +847 -0
  343. data/spec/unit/util/storage.rb +248 -0
  344. data/spec/unit/util/tagging.rb +92 -0
  345. data/spec/unit/util/uri_helper.rb +41 -0
  346. data/spec/unit/util/user_attr.rb +47 -0
  347. data/spec/unit/util/warnings.rb +35 -0
  348. data/test/certmgr/support.rb +0 -6
  349. data/test/data/providers/ssh_authorized_key/parsed/authorized_keys +1 -0
  350. data/test/data/snippets/multilinecomments.pp +6 -0
  351. data/test/data/snippets/multipleclass.pp +9 -0
  352. data/test/language/functions.rb +11 -1
  353. data/test/language/snippets.rb +16 -0
  354. data/test/lib/puppettest/runnable_test.rb +1 -1
  355. data/test/network/handler/fileserver.rb +5 -0
  356. data/test/other/report.rb +0 -4
  357. data/test/ral/type/resources.rb +2 -19
  358. data/test/util/settings.rb +4 -4
  359. data/test/util/storage.rb +0 -24
  360. data/test/util/utiltest.rb +0 -33
  361. metadata +319 -26
  362. data/conf/debian/README.source +0 -2
  363. data/conf/debian/TODO.Debian +0 -1
  364. data/conf/debian/changelog +0 -257
  365. data/conf/debian/compat +0 -1
  366. data/conf/debian/control +0 -45
  367. data/conf/debian/copyright +0 -17
  368. data/conf/debian/docs +0 -1
  369. data/conf/debian/fileserver.conf +0 -12
  370. data/conf/debian/puppet.NEWS +0 -63
  371. data/conf/debian/puppet.conf +0 -8
  372. data/conf/debian/puppet.dirs +0 -7
  373. data/conf/debian/puppet.files +0 -6
  374. data/conf/debian/puppet.init +0 -64
  375. data/conf/debian/puppet.logrotate +0 -11
  376. data/conf/debian/puppet.postinst +0 -9
  377. data/conf/debian/puppet.postrm +0 -21
  378. data/conf/debian/puppet.preinst +0 -25
  379. data/conf/debian/puppetmaster.files +0 -4
  380. data/conf/debian/puppetmaster.init +0 -58
  381. data/conf/debian/rules +0 -115
  382. data/conf/debian/watch +0 -2
  383. data/lib/puppet/type/nagios_hostgroupescalation.rb +0 -3
@@ -0,0 +1,561 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require File.dirname(__FILE__) + '/../../spec_helper'
4
+
5
+ class CompilerTestResource
6
+ attr_accessor :builtin, :virtual, :evaluated, :type, :title
7
+
8
+ def initialize(type, title)
9
+ @type = type
10
+ @title = title
11
+ end
12
+
13
+ def ref
14
+ "%s[%s]" % [type.to_s.capitalize, title]
15
+ end
16
+
17
+ def evaluated?
18
+ @evaluated
19
+ end
20
+
21
+ def builtin?
22
+ @builtin
23
+ end
24
+
25
+ def virtual?
26
+ @virtual
27
+ end
28
+
29
+ def evaluate
30
+ end
31
+ end
32
+
33
+ describe Puppet::Parser::Compiler do
34
+ before :each do
35
+ @node = Puppet::Node.new "testnode"
36
+ @parser = Puppet::Parser::Parser.new :environment => "development"
37
+
38
+ @scope_resource = stub 'scope_resource', :builtin? => true, :finish => nil, :ref => 'Class[main]'
39
+ @scope = stub 'scope', :resource => @scope_resource, :source => mock("source")
40
+ @compiler = Puppet::Parser::Compiler.new(@node, @parser)
41
+ end
42
+
43
+ describe Puppet::Parser::Compiler do
44
+
45
+ it "should be able to store references to class scopes" do
46
+ lambda { @compiler.class_set "myname", "myscope" }.should_not raise_error
47
+ end
48
+
49
+ it "should be able to retrieve class scopes by name" do
50
+ @compiler.class_set "myname", "myscope"
51
+ @compiler.class_scope("myname").should == "myscope"
52
+ end
53
+
54
+ it "should be able to retrieve class scopes by object" do
55
+ klass = mock 'ast_class'
56
+ klass.expects(:classname).returns("myname")
57
+ @compiler.class_set "myname", "myscope"
58
+ @compiler.class_scope(klass).should == "myscope"
59
+ end
60
+
61
+ it "should be able to return a class list containing all set classes" do
62
+ @compiler.class_set "", "empty"
63
+ @compiler.class_set "one", "yep"
64
+ @compiler.class_set "two", "nope"
65
+
66
+ @compiler.classlist.sort.should == %w{one two}.sort
67
+ end
68
+ end
69
+
70
+ describe Puppet::Parser::Compiler, " when initializing" do
71
+
72
+ it "should set its node attribute" do
73
+ @compiler.node.should equal(@node)
74
+ end
75
+
76
+ it "should set its parser attribute" do
77
+ @compiler.parser.should equal(@parser)
78
+ end
79
+
80
+ it "should detect when ast nodes are absent" do
81
+ @compiler.ast_nodes?.should be_false
82
+ end
83
+
84
+ it "should detect when ast nodes are present" do
85
+ @parser.nodes["testing"] = "yay"
86
+ @compiler.ast_nodes?.should be_true
87
+ end
88
+ end
89
+
90
+ describe Puppet::Parser::Compiler, "when managing scopes" do
91
+
92
+ it "should create a top scope" do
93
+ @compiler.topscope.should be_instance_of(Puppet::Parser::Scope)
94
+ end
95
+
96
+ it "should be able to create new scopes" do
97
+ @compiler.newscope(@compiler.topscope).should be_instance_of(Puppet::Parser::Scope)
98
+ end
99
+
100
+ it "should correctly set the level of newly created scopes" do
101
+ @compiler.newscope(@compiler.topscope, :level => 5).level.should == 5
102
+ end
103
+
104
+ it "should set the parent scope of the new scope to be the passed-in parent" do
105
+ scope = mock 'scope'
106
+ newscope = @compiler.newscope(scope)
107
+
108
+ @compiler.parent(newscope).should equal(scope)
109
+ end
110
+ end
111
+
112
+ describe Puppet::Parser::Compiler, " when compiling" do
113
+
114
+ def compile_methods
115
+ [:set_node_parameters, :evaluate_main, :evaluate_ast_node, :evaluate_node_classes, :evaluate_generators, :fail_on_unevaluated,
116
+ :finish, :store, :extract]
117
+ end
118
+
119
+ # Stub all of the main compile methods except the ones we're specifically interested in.
120
+ def compile_stub(*except)
121
+ (compile_methods - except).each { |m| @compiler.stubs(m) }
122
+ end
123
+
124
+ it "should set node parameters as variables in the top scope" do
125
+ params = {"a" => "b", "c" => "d"}
126
+ @node.stubs(:parameters).returns(params)
127
+ compile_stub(:set_node_parameters)
128
+ @compiler.compile
129
+ @compiler.topscope.lookupvar("a").should == "b"
130
+ @compiler.topscope.lookupvar("c").should == "d"
131
+ end
132
+
133
+ it "should evaluate any existing classes named in the node" do
134
+ classes = %w{one two three four}
135
+ main = stub 'main'
136
+ one = stub 'one', :classname => "one"
137
+ three = stub 'three', :classname => "three"
138
+ @node.stubs(:name).returns("whatever")
139
+ @node.stubs(:classes).returns(classes)
140
+
141
+ @compiler.expects(:evaluate_classes).with(classes, @compiler.topscope)
142
+ @compiler.class.publicize_methods(:evaluate_node_classes) { @compiler.evaluate_node_classes }
143
+ end
144
+
145
+ it "should enable ast_nodes if the parser has any nodes" do
146
+ @parser.expects(:nodes).returns(:one => :yay)
147
+ @compiler.ast_nodes?.should be_true
148
+ end
149
+
150
+ it "should disable ast_nodes if the parser has no nodes" do
151
+ @parser.expects(:nodes).returns({})
152
+ @compiler.ast_nodes?.should be_false
153
+ end
154
+
155
+ it "should evaluate the main class if it exists" do
156
+ compile_stub(:evaluate_main)
157
+ main_class = mock 'main_class'
158
+ main_class.expects(:evaluate_code).with { |r| r.is_a?(Puppet::Parser::Resource) }
159
+ @compiler.topscope.expects(:source=).with(main_class)
160
+ @parser.stubs(:findclass).with("", "").returns(main_class)
161
+
162
+ @compiler.compile
163
+ end
164
+
165
+ it "should evaluate any node classes" do
166
+ @node.stubs(:classes).returns(%w{one two three four})
167
+ @compiler.expects(:evaluate_classes).with(%w{one two three four}, @compiler.topscope)
168
+ @compiler.send(:evaluate_node_classes)
169
+ end
170
+
171
+ it "should evaluate all added collections" do
172
+ colls = []
173
+ # And when the collections fail to evaluate.
174
+ colls << mock("coll1-false")
175
+ colls << mock("coll2-false")
176
+ colls.each { |c| c.expects(:evaluate).returns(false) }
177
+
178
+ @compiler.add_collection(colls[0])
179
+ @compiler.add_collection(colls[1])
180
+
181
+ compile_stub(:evaluate_generators)
182
+ @compiler.compile
183
+ end
184
+
185
+ it "should ignore builtin resources" do
186
+ resource = stub 'builtin', :ref => "File[testing]", :builtin? => true
187
+
188
+ @compiler.add_resource(@scope, resource)
189
+ resource.expects(:evaluate).never
190
+
191
+ @compiler.compile
192
+ end
193
+
194
+ it "should evaluate unevaluated resources" do
195
+ resource = CompilerTestResource.new(:file, "testing")
196
+
197
+ @compiler.add_resource(@scope, resource)
198
+
199
+ # We have to now mark the resource as evaluated
200
+ resource.expects(:evaluate).with { |*whatever| resource.evaluated = true }
201
+
202
+ @compiler.compile
203
+ end
204
+
205
+ it "should not evaluate already-evaluated resources" do
206
+ resource = stub 'already_evaluated', :ref => "File[testing]", :builtin? => false, :evaluated? => true, :virtual? => false
207
+ @compiler.add_resource(@scope, resource)
208
+ resource.expects(:evaluate).never
209
+
210
+ @compiler.compile
211
+ end
212
+
213
+ it "should evaluate unevaluated resources created by evaluating other resources" do
214
+ resource = CompilerTestResource.new(:file, "testing")
215
+ @compiler.add_resource(@scope, resource)
216
+
217
+ resource2 = CompilerTestResource.new(:file, "other")
218
+
219
+ # We have to now mark the resource as evaluated
220
+ resource.expects(:evaluate).with { |*whatever| resource.evaluated = true; @compiler.add_resource(@scope, resource2) }
221
+ resource2.expects(:evaluate).with { |*whatever| resource2.evaluated = true }
222
+
223
+
224
+ @compiler.compile
225
+ end
226
+
227
+ it "should call finish() on all resources" do
228
+ # Add a resource that does respond to :finish
229
+ resource = Puppet::Parser::Resource.new :scope => @scope, :type => "file", :title => "finish"
230
+ resource.expects(:finish)
231
+
232
+ @compiler.add_resource(@scope, resource)
233
+
234
+ # And one that does not
235
+ dnf = stub "dnf", :ref => "File[dnf]"
236
+
237
+ @compiler.add_resource(@scope, dnf)
238
+
239
+ @compiler.send(:finish)
240
+ end
241
+
242
+ it "should add resources that do not conflict with existing resources" do
243
+ resource = stub "noconflict", :ref => "File[yay]"
244
+ @compiler.add_resource(@scope, resource)
245
+
246
+ @compiler.catalog.should be_vertex(resource)
247
+ end
248
+
249
+ it "should fail to add resources that conflict with existing resources" do
250
+ type = stub 'faketype', :isomorphic? => true, :name => "mytype"
251
+ Puppet::Type.stubs(:type).with("mytype").returns(type)
252
+
253
+ resource1 = stub "iso1conflict", :ref => "Mytype[yay]", :type => "mytype", :file => "eh", :line => 0
254
+ resource2 = stub "iso2conflict", :ref => "Mytype[yay]", :type => "mytype", :file => "eh", :line => 0
255
+
256
+ @compiler.add_resource(@scope, resource1)
257
+ lambda { @compiler.add_resource(@scope, resource2) }.should raise_error(ArgumentError)
258
+ end
259
+
260
+ it "should have a method for looking up resources" do
261
+ resource = stub 'resource', :ref => "Yay[foo]"
262
+ @compiler.add_resource(@scope, resource)
263
+ @compiler.findresource("Yay[foo]").should equal(resource)
264
+ end
265
+
266
+ it "should be able to look resources up by type and title" do
267
+ resource = stub 'resource', :ref => "Yay[foo]"
268
+ @compiler.add_resource(@scope, resource)
269
+ @compiler.findresource("Yay", "foo").should equal(resource)
270
+ end
271
+
272
+ it "should not evaluate virtual defined resources" do
273
+ resource = stub 'notevaluated', :ref => "File[testing]", :builtin? => false, :evaluated? => false, :virtual? => true
274
+ @compiler.add_resource(@scope, resource)
275
+
276
+ resource.expects(:evaluate).never
277
+
278
+ @compiler.compile
279
+ end
280
+ end
281
+
282
+ describe Puppet::Parser::Compiler, " when evaluating collections" do
283
+
284
+ it "should evaluate each collection" do
285
+ 2.times { |i|
286
+ coll = mock 'coll%s' % i
287
+ @compiler.add_collection(coll)
288
+
289
+ # This is the hard part -- we have to emulate the fact that
290
+ # collections delete themselves if they are done evaluating.
291
+ coll.expects(:evaluate).with do
292
+ @compiler.delete_collection(coll)
293
+ end
294
+ }
295
+
296
+ @compiler.class.publicize_methods(:evaluate_collections) { @compiler.evaluate_collections }
297
+ end
298
+
299
+ it "should not fail when there are unevaluated resource collections that do not refer to specific resources" do
300
+ coll = stub 'coll', :evaluate => false
301
+ coll.expects(:resources).returns(nil)
302
+
303
+ @compiler.add_collection(coll)
304
+
305
+ lambda { @compiler.compile }.should_not raise_error
306
+ end
307
+
308
+ it "should fail when there are unevaluated resource collections that refer to a specific resource" do
309
+ coll = stub 'coll', :evaluate => false
310
+ coll.expects(:resources).returns(:something)
311
+
312
+ @compiler.add_collection(coll)
313
+
314
+ lambda { @compiler.compile }.should raise_error(Puppet::ParseError)
315
+ end
316
+
317
+ it "should fail when there are unevaluated resource collections that refer to multiple specific resources" do
318
+ coll = stub 'coll', :evaluate => false
319
+ coll.expects(:resources).returns([:one, :two])
320
+
321
+ @compiler.add_collection(coll)
322
+
323
+ lambda { @compiler.compile }.should raise_error(Puppet::ParseError)
324
+ end
325
+ end
326
+
327
+ describe Puppet::Parser::Compiler, "when told to evaluate missing classes" do
328
+
329
+ it "should fail if there's no source listed for the scope" do
330
+ scope = stub 'scope', :source => nil
331
+ proc { @compiler.evaluate_classes(%w{one two}, scope) }.should raise_error(Puppet::DevError)
332
+ end
333
+
334
+ it "should tag the catalog with the name of each not-found class" do
335
+ @compiler.catalog.expects(:tag).with("notfound")
336
+ @scope.expects(:findclass).with("notfound").returns(nil)
337
+ @compiler.evaluate_classes(%w{notfound}, @scope)
338
+ end
339
+ end
340
+
341
+ describe Puppet::Parser::Compiler, " when evaluating found classes" do
342
+
343
+ before do
344
+ @class = stub 'class', :classname => "my::class"
345
+ @scope.stubs(:findclass).with("myclass").returns(@class)
346
+
347
+ @resource = stub 'resource', :ref => "Class[myclass]"
348
+ end
349
+
350
+ it "should evaluate each class" do
351
+ @compiler.catalog.stubs(:tag)
352
+
353
+ @class.expects(:evaluate).with(@scope)
354
+
355
+ @compiler.evaluate_classes(%w{myclass}, @scope)
356
+ end
357
+
358
+ it "should not evaluate the resources created for found classes unless asked" do
359
+ @compiler.catalog.stubs(:tag)
360
+
361
+ @resource.expects(:evaluate).never
362
+
363
+ @class.expects(:evaluate).returns(@resource)
364
+
365
+ @compiler.evaluate_classes(%w{myclass}, @scope)
366
+ end
367
+
368
+ it "should immediately evaluate the resources created for found classes when asked" do
369
+ @compiler.catalog.stubs(:tag)
370
+
371
+ @resource.expects(:evaluate)
372
+ @class.expects(:evaluate).returns(@resource)
373
+
374
+ @compiler.evaluate_classes(%w{myclass}, @scope, false)
375
+ end
376
+
377
+ it "should skip classes that have already been evaluated" do
378
+ @compiler.catalog.stubs(:tag)
379
+
380
+ @compiler.expects(:class_scope).with(@class).returns("something")
381
+
382
+ @compiler.expects(:add_resource).never
383
+
384
+ @resource.expects(:evaluate).never
385
+
386
+ Puppet::Parser::Resource.expects(:new).never
387
+ @compiler.evaluate_classes(%w{myclass}, @scope, false)
388
+ end
389
+
390
+ it "should return the list of found classes" do
391
+ @compiler.catalog.stubs(:tag)
392
+
393
+ @compiler.stubs(:add_resource)
394
+ @scope.stubs(:findclass).with("notfound").returns(nil)
395
+
396
+ Puppet::Parser::Resource.stubs(:new).returns(@resource)
397
+ @class.stubs :evaluate
398
+ @compiler.evaluate_classes(%w{myclass notfound}, @scope).should == %w{myclass}
399
+ end
400
+ end
401
+
402
+ describe Puppet::Parser::Compiler, " when evaluating AST nodes with no AST nodes present" do
403
+
404
+ it "should do nothing" do
405
+ @compiler.expects(:ast_nodes?).returns(false)
406
+ @compiler.parser.expects(:nodes).never
407
+ Puppet::Parser::Resource.expects(:new).never
408
+
409
+ @compiler.send(:evaluate_ast_node)
410
+ end
411
+ end
412
+
413
+ describe Puppet::Parser::Compiler, " when evaluating AST nodes with AST nodes present" do
414
+
415
+ before do
416
+ @nodes = mock 'node_hash'
417
+ @compiler.stubs(:ast_nodes?).returns(true)
418
+ @compiler.parser.stubs(:nodes).returns(@nodes)
419
+
420
+ # Set some names for our test
421
+ @node.stubs(:names).returns(%w{a b c})
422
+ @nodes.stubs(:[]).with("a").returns(nil)
423
+ @nodes.stubs(:[]).with("b").returns(nil)
424
+ @nodes.stubs(:[]).with("c").returns(nil)
425
+
426
+ # It should check this last, of course.
427
+ @nodes.stubs(:[]).with("default").returns(nil)
428
+ end
429
+
430
+ it "should fail if the named node cannot be found" do
431
+ proc { @compiler.send(:evaluate_ast_node) }.should raise_error(Puppet::ParseError)
432
+ end
433
+
434
+ it "should evaluate the first node class matching the node name" do
435
+ node_class = stub 'node', :classname => "c", :evaluate_code => nil
436
+ @nodes.stubs(:[]).with("c").returns(node_class)
437
+
438
+ node_resource = stub 'node resource', :ref => "Node[c]", :evaluate => nil
439
+ node_class.expects(:evaluate).returns(node_resource)
440
+
441
+ @compiler.compile
442
+ end
443
+
444
+ it "should match the default node if no matching node can be found" do
445
+ node_class = stub 'node', :classname => "default", :evaluate_code => nil
446
+ @nodes.stubs(:[]).with("default").returns(node_class)
447
+
448
+ node_resource = stub 'node resource', :ref => "Node[default]", :evaluate => nil
449
+ node_class.expects(:evaluate).returns(node_resource)
450
+
451
+ @compiler.compile
452
+ end
453
+
454
+ it "should evaluate the node resource immediately rather than using lazy evaluation" do
455
+ node_class = stub 'node', :classname => "c"
456
+ @nodes.stubs(:[]).with("c").returns(node_class)
457
+
458
+ node_resource = stub 'node resource', :ref => "Node[c]"
459
+ node_class.expects(:evaluate).returns(node_resource)
460
+
461
+ node_resource.expects(:evaluate)
462
+
463
+ @compiler.send(:evaluate_ast_node)
464
+ end
465
+
466
+ it "should set the node's scope as the top scope" do
467
+ node_resource = stub 'node resource', :ref => "Node[c]", :evaluate => nil
468
+ node_class = stub 'node', :classname => "c", :evaluate => node_resource
469
+
470
+ @nodes.stubs(:[]).with("c").returns(node_class)
471
+
472
+ # The #evaluate method normally does this.
473
+ scope = stub 'scope', :source => "mysource"
474
+ @compiler.class_set(node_class.classname, scope)
475
+ node_resource.stubs(:evaluate)
476
+
477
+ @compiler.compile
478
+
479
+ @compiler.topscope.should equal(scope)
480
+ end
481
+ end
482
+
483
+ describe Puppet::Parser::Compiler, "when storing compiled resources" do
484
+
485
+ it "should store the resources" do
486
+ Puppet.features.expects(:rails?).returns(true)
487
+ Puppet::Rails.expects(:connect)
488
+
489
+ @compiler.catalog.expects(:vertices).returns(:resources)
490
+
491
+ @compiler.expects(:store_to_active_record).with(@node, :resources)
492
+ @compiler.send(:store)
493
+ end
494
+
495
+ it "should store to active_record" do
496
+ @node.expects(:name).returns("myname")
497
+ Puppet::Rails::Host.stubs(:transaction).yields
498
+ Puppet::Rails::Host.expects(:store).with(@node, :resources)
499
+ @compiler.send(:store_to_active_record, @node, :resources)
500
+ end
501
+ end
502
+
503
+ describe Puppet::Parser::Compiler, "when managing resource overrides" do
504
+
505
+ before do
506
+ @override = stub 'override', :ref => "My[ref]"
507
+ @resource = stub 'resource', :ref => "My[ref]", :builtin? => true
508
+ end
509
+
510
+ it "should be able to store overrides" do
511
+ lambda { @compiler.add_override(@override) }.should_not raise_error
512
+ end
513
+
514
+ it "should apply overrides to the appropriate resources" do
515
+ @compiler.add_resource(@scope, @resource)
516
+ @resource.expects(:merge).with(@override)
517
+
518
+ @compiler.add_override(@override)
519
+
520
+ @compiler.compile
521
+ end
522
+
523
+ it "should accept overrides before the related resource has been created" do
524
+ @resource.expects(:merge).with(@override)
525
+
526
+ # First store the override
527
+ @compiler.add_override(@override)
528
+
529
+ # Then the resource
530
+ @compiler.add_resource(@scope, @resource)
531
+
532
+ # And compile, so they get resolved
533
+ @compiler.compile
534
+ end
535
+
536
+ it "should fail if the compile is finished and resource overrides have not been applied" do
537
+ @compiler.add_override(@override)
538
+
539
+ lambda { @compiler.compile }.should raise_error(Puppet::ParseError)
540
+ end
541
+ end
542
+
543
+ # #620 - Nodes and classes should conflict, else classes don't get evaluated
544
+ describe Puppet::Parser::Compiler, "when evaluating nodes and classes with the same name (#620)" do
545
+
546
+ before do
547
+ @node = stub :nodescope? => true
548
+ @class = stub :nodescope? => false
549
+ end
550
+
551
+ it "should fail if a node already exists with the same name as the class being evaluated" do
552
+ @compiler.class_set("one", @node)
553
+ lambda { @compiler.class_set("one", @class) }.should raise_error(Puppet::ParseError)
554
+ end
555
+
556
+ it "should fail if a class already exists with the same name as the node being evaluated" do
557
+ @compiler.class_set("one", @class)
558
+ lambda { @compiler.class_set("one", @node) }.should raise_error(Puppet::ParseError)
559
+ end
560
+ end
561
+ end