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,125 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require File.dirname(__FILE__) + '/../../../spec_helper'
4
+
5
+ describe Puppet::Parser::AST::Node do
6
+ before :each do
7
+ @node = Puppet::Node.new "testnode"
8
+ @parser = Puppet::Parser::Parser.new :environment => "development"
9
+ @scope_resource = stub 'scope_resource', :builtin? => true
10
+ @compiler = Puppet::Parser::Compiler.new(@node, @parser)
11
+
12
+ @scope = @compiler.topscope
13
+ end
14
+
15
+ describe Puppet::Parser::AST::Node, "when evaluating" do
16
+
17
+ before do
18
+ @top = @parser.newnode("top").shift
19
+ @middle = @parser.newnode("middle", :parent => "top").shift
20
+ end
21
+
22
+ it "should create a resource that references itself" do
23
+ @top.evaluate(@scope)
24
+
25
+ @compiler.catalog.resource(:node, "top").should be_an_instance_of(Puppet::Parser::Resource)
26
+ end
27
+
28
+ it "should evaluate the parent class if one exists" do
29
+ @middle.evaluate(@scope)
30
+
31
+ @compiler.catalog.resource(:node, "top").should be_an_instance_of(Puppet::Parser::Resource)
32
+ end
33
+
34
+ it "should fail to evaluate if a parent class is defined but cannot be found" do
35
+ othertop = @parser.newnode("something", :parent => "yay").shift
36
+ lambda { othertop.evaluate(@scope) }.should raise_error(Puppet::ParseError)
37
+ end
38
+
39
+ it "should not create a new resource if one already exists" do
40
+ @compiler.catalog.expects(:resource).with(:node, "top").returns("something")
41
+ @compiler.catalog.expects(:add_resource).never
42
+ @top.evaluate(@scope)
43
+ end
44
+
45
+ it "should not create a new parent resource if one already exists and it has a parent class" do
46
+ @top.evaluate(@scope)
47
+
48
+ top_resource = @compiler.catalog.resource(:node, "top")
49
+
50
+ @middle.evaluate(@scope)
51
+
52
+ @compiler.catalog.resource(:node, "top").should equal(top_resource)
53
+ end
54
+
55
+ # #795 - tag before evaluation.
56
+ it "should tag the catalog with the resource tags when it is evaluated" do
57
+ @middle.evaluate(@scope)
58
+
59
+ @compiler.catalog.should be_tagged("middle")
60
+ end
61
+
62
+ it "should tag the catalog with the parent class tags when it is evaluated" do
63
+ @middle.evaluate(@scope)
64
+
65
+ @compiler.catalog.should be_tagged("top")
66
+ end
67
+ end
68
+
69
+ describe Puppet::Parser::AST::Node, "when evaluating code" do
70
+
71
+ before do
72
+ @top_resource = stub "top_resource"
73
+ @top = @parser.newnode("top", :code => @top_resource).shift
74
+
75
+ @middle_resource = stub "middle_resource"
76
+ @middle = @parser.newnode("middle", :parent => "top", :code => @middle_resource).shift
77
+ end
78
+
79
+ it "should evaluate the code referred to by the class" do
80
+ @top_resource.expects(:safeevaluate)
81
+
82
+ resource = @top.evaluate(@scope)
83
+
84
+ @top.evaluate_code(resource)
85
+ end
86
+
87
+ it "should evaluate the parent class's code if it has a parent" do
88
+ @top_resource.expects(:safeevaluate)
89
+ @middle_resource.expects(:safeevaluate)
90
+
91
+ resource = @middle.evaluate(@scope)
92
+
93
+ @middle.evaluate_code(resource)
94
+ end
95
+
96
+ it "should not evaluate the parent class's code if the parent has already been evaluated" do
97
+ @top_resource.stubs(:safeevaluate)
98
+ resource = @top.evaluate(@scope)
99
+ @top.evaluate_code(resource)
100
+
101
+ @top_resource.expects(:safeevaluate).never
102
+ @middle_resource.stubs(:safeevaluate)
103
+ resource = @middle.evaluate(@scope)
104
+ @middle.evaluate_code(resource)
105
+ end
106
+
107
+ it "should use the parent class's scope as its parent scope" do
108
+ @top_resource.stubs(:safeevaluate)
109
+ @middle_resource.stubs(:safeevaluate)
110
+ resource = @middle.evaluate(@scope)
111
+ @middle.evaluate_code(resource)
112
+
113
+ @compiler.class_scope(@middle).parent.should equal(@compiler.class_scope(@top))
114
+ end
115
+
116
+ it "should add the parent class's namespace to its namespace search path" do
117
+ @top_resource.stubs(:safeevaluate)
118
+ @middle_resource.stubs(:safeevaluate)
119
+ resource = @middle.evaluate(@scope)
120
+ @middle.evaluate_code(resource)
121
+
122
+ @compiler.class_scope(@middle).namespaces.should be_include(@top.namespace)
123
+ end
124
+ end
125
+ end
@@ -0,0 +1,20 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require File.dirname(__FILE__) + '/../../../spec_helper'
4
+
5
+ describe Puppet::Parser::AST::Nop do
6
+
7
+ before do
8
+ @scope = mock 'scope'
9
+ end
10
+
11
+ it "should do nothing on evaluation" do
12
+ Puppet::Parser::AST.expects(:safeevaluate).never
13
+ Puppet::Parser::AST::Nop.new({}).evaluate(@scope)
14
+ end
15
+
16
+ it "should not return anything" do
17
+ Puppet::Parser::AST::Nop.new({}).evaluate(@scope).should be_nil
18
+ end
19
+
20
+ end
@@ -0,0 +1,30 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require File.dirname(__FILE__) + '/../../../spec_helper'
4
+
5
+ describe Puppet::Parser::AST::Not do
6
+ before :each do
7
+ @scope = Puppet::Parser::Scope.new()
8
+ @true_ast = Puppet::Parser::AST::Boolean.new( :value => true)
9
+ @false_ast = Puppet::Parser::AST::Boolean.new( :value => false)
10
+ end
11
+
12
+ it "should evaluate its child expression" do
13
+ val = stub "val"
14
+ val.expects(:safeevaluate).with(@scope)
15
+
16
+ operator = Puppet::Parser::AST::Not.new :value => val
17
+ operator.evaluate(@scope)
18
+ end
19
+
20
+ it "should return true for ! false" do
21
+ operator = Puppet::Parser::AST::Not.new :value => @false_ast
22
+ operator.evaluate(@scope).should == true
23
+ end
24
+
25
+ it "should return false for ! true" do
26
+ operator = Puppet::Parser::AST::Not.new :value => @true_ast
27
+ operator.evaluate(@scope).should == false
28
+ end
29
+
30
+ end
@@ -0,0 +1,51 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require File.dirname(__FILE__) + '/../../../spec_helper'
4
+
5
+ describe Puppet::Parser::AST::ResourceOverride do
6
+
7
+ ast = Puppet::Parser::AST
8
+
9
+ before :each do
10
+ @compiler = stub 'compiler'
11
+ @scope = Puppet::Parser::Scope.new(:compiler => @compiler)
12
+ @params = ast::ASTArray.new({})
13
+ @compiler.stubs(:add_override)
14
+ end
15
+
16
+ it "should evaluate the overriden object" do
17
+ klass = stub 'klass', :title => "title", :type => "type"
18
+ object = mock 'object'
19
+ object.expects(:safeevaluate).with(@scope).returns(klass)
20
+ ast::ResourceOverride.new(:object => object, :params => @params ).evaluate(@scope)
21
+ end
22
+
23
+ it "should tell the compiler to override the resource with our own" do
24
+ @compiler.expects(:add_override)
25
+
26
+ klass = stub 'klass', :title => "title", :type => "one"
27
+ object = mock 'object', :safeevaluate => klass
28
+ ast::ResourceOverride.new(:object => object , :params => @params).evaluate(@scope)
29
+ end
30
+
31
+ it "should return the overriden resource directly when called with one item" do
32
+ klass = stub 'klass', :title => "title", :type => "one"
33
+ object = mock 'object', :safeevaluate => klass
34
+ override = ast::ResourceOverride.new(:object => object , :params => @params).evaluate(@scope)
35
+ override.should be_an_instance_of(Puppet::Parser::Resource)
36
+ override.title.should == "title"
37
+ override.type.should == "One"
38
+ end
39
+
40
+ it "should return an array of overriden resources when called with an array of titles" do
41
+ klass1 = stub 'klass1', :title => "title1", :type => "one"
42
+ klass2 = stub 'klass2', :title => "title2", :type => "one"
43
+
44
+ object = mock 'object', :safeevaluate => [klass1,klass2]
45
+
46
+ override = ast::ResourceOverride.new(:object => object , :params => @params).evaluate(@scope)
47
+ override.should have(2).elements
48
+ override.each {|o| o.should be_an_instance_of(Puppet::Parser::Resource) }
49
+ end
50
+
51
+ end
@@ -0,0 +1,63 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require File.dirname(__FILE__) + '/../../../spec_helper'
4
+
5
+ describe Puppet::Parser::AST::ResourceReference do
6
+
7
+ ast = Puppet::Parser::AST
8
+
9
+ before :each do
10
+ @scope = Puppet::Parser::Scope.new()
11
+ end
12
+
13
+ def newref(title, type)
14
+ title = stub 'title', :safeevaluate => title
15
+ ref = Puppet::Parser::AST::ResourceReference.new(:type => type, :title => title)
16
+ end
17
+
18
+ it "should evaluate correctly reference to builtin types" do
19
+ newref("/tmp/yay", "File").evaluate(@scope).to_s.should == "File[/tmp/yay]"
20
+ end
21
+
22
+ %{ "one::two" "one-two"}.each do |type|
23
+ it "should evaluate correctly reference to define" do
24
+ klass = stub 'klass', :title => "three", :classname => type
25
+ @scope.stubs(:finddefine).returns(klass)
26
+
27
+ newref("three", type).evaluate(@scope).to_ref.should == Puppet::Parser::Resource::Reference.new( :type => type, :title => "three" ).to_ref
28
+ end
29
+ end
30
+
31
+ it "should be able to call qualified_class" do
32
+ klass = stub 'klass', :title => "three", :classname => "one"
33
+ @scope.expects(:findclass).with("one").returns(klass)
34
+ newref("three","class").qualified_class(@scope,"one").should == "one"
35
+ end
36
+
37
+ it "should be able to find qualified classes when evaluating" do
38
+ klass = stub 'klass', :title => "one", :classname => "one"
39
+ @scope.stubs(:findclass).returns(klass)
40
+
41
+ evaled = newref("one", "class").evaluate(@scope)
42
+ evaled.type.should == "Class"
43
+ evaled.title.should == "one"
44
+ end
45
+
46
+ it "should return an array of reference if given an array of titles" do
47
+ titles = mock 'titles', :safeevaluate => ["title1","title2"]
48
+ ref = ast::ResourceReference.new( :title => titles, :type => "Resource" )
49
+ ref.stubs(:qualified_type).with(@scope).returns("Resource")
50
+
51
+ ref.evaluate(@scope).should have(2).elements
52
+ end
53
+
54
+ it "should qualify class of all titles for Class resource references" do
55
+ titles = mock 'titles', :safeevaluate => ["title1","title2"]
56
+ ref = ast::ResourceReference.new( :title => titles, :type => "Class" )
57
+ ref.expects(:qualified_class).with(@scope,"title1").returns("class")
58
+ ref.expects(:qualified_class).with(@scope,"title2").returns("class")
59
+
60
+ ref.evaluate(@scope)
61
+ end
62
+
63
+ end
@@ -0,0 +1,47 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require File.dirname(__FILE__) + '/../../../spec_helper'
4
+
5
+ describe Puppet::Parser::AST::VarDef do
6
+ before :each do
7
+ @scope = Puppet::Parser::Scope.new()
8
+ end
9
+
10
+ describe "when evaluating" do
11
+
12
+ it "should evaluate arguments" do
13
+ name = mock 'name'
14
+ value = mock 'value'
15
+
16
+ name.expects(:safeevaluate).with(@scope)
17
+ value.expects(:safeevaluate).with(@scope)
18
+
19
+ vardef = Puppet::Parser::AST::VarDef.new :name => name, :value => value, :file => nil,
20
+ :line => nil
21
+ vardef.evaluate(@scope)
22
+ end
23
+
24
+ it "should be in append=false mode if called without append" do
25
+ name = stub 'name', :safeevaluate => "var"
26
+ value = stub 'value', :safeevaluate => "1"
27
+
28
+ @scope.expects(:setvar).with { |name,value,file,line,append| append == nil }
29
+
30
+ vardef = Puppet::Parser::AST::VarDef.new :name => name, :value => value, :file => nil,
31
+ :line => nil
32
+ vardef.evaluate(@scope)
33
+ end
34
+
35
+ it "should call scope in append mode if append is true" do
36
+ name = stub 'name', :safeevaluate => "var"
37
+ value = stub 'value', :safeevaluate => "1"
38
+
39
+ @scope.expects(:setvar).with { |name,value,file,line,append| append == true }
40
+
41
+ vardef = Puppet::Parser::AST::VarDef.new :name => name, :value => value, :file => nil,
42
+ :line => nil, :append => true
43
+ vardef.evaluate(@scope)
44
+ end
45
+
46
+ end
47
+ end
@@ -0,0 +1,426 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require File.dirname(__FILE__) + '/../../spec_helper'
4
+
5
+ require 'puppet/parser/collector'
6
+
7
+ describe Puppet::Parser::Collector, "when initializing" do
8
+ before do
9
+ @scope = mock 'scope'
10
+ @resource_type = 'resource_type'
11
+ @form = :exported
12
+ @vquery = mock 'vquery'
13
+ @equery = mock 'equery'
14
+
15
+ @collector = Puppet::Parser::Collector.new(@scope, @resource_type, @equery, @vquery, @form)
16
+ end
17
+
18
+ it "should require a scope" do
19
+ @collector.scope.should equal(@scope)
20
+ end
21
+
22
+ it "should require a resource type" do
23
+ @collector.type.should == 'Resource_type'
24
+ end
25
+
26
+ it "should only accept :virtual or :exported as the collector form" do
27
+ proc { @collector = Puppet::Parser::Collector.new(@scope, @resource_type, @vquery, @equery, :other) }.should raise_error(ArgumentError)
28
+ end
29
+
30
+ it "should accept an optional virtual query" do
31
+ @collector.vquery.should equal(@vquery)
32
+ end
33
+
34
+ it "should accept an optional exported query" do
35
+ @collector.equery.should equal(@equery)
36
+ end
37
+
38
+ it "should canonize the type name" do
39
+ @collector = Puppet::Parser::Collector.new(@scope, "resource::type", @equery, @vquery, @form)
40
+ @collector.type.should == "Resource::Type"
41
+ end
42
+ end
43
+
44
+ describe Puppet::Parser::Collector, "when collecting specific virtual resources" do
45
+ before do
46
+ @scope = mock 'scope'
47
+ @resource_type = mock 'resource_type'
48
+ @vquery = mock 'vquery'
49
+ @equery = mock 'equery'
50
+
51
+ @collector = Puppet::Parser::Collector.new(@scope, @resource_type, @equery, @vquery, :virtual)
52
+ end
53
+
54
+ it "should not fail when it does not find any resources to collect" do
55
+ @collector.resources = ["File[virtual1]", "File[virtual2]"]
56
+ @scope.stubs(:findresource).returns(false)
57
+ proc { @collector.evaluate }.should_not raise_error
58
+ end
59
+
60
+ it "should mark matched resources as non-virtual" do
61
+ @collector.resources = ["File[virtual1]", "File[virtual2]"]
62
+ one = mock 'one'
63
+ one.expects(:virtual=).with(false)
64
+ @scope.stubs(:findresource).with("File[virtual1]").returns(one)
65
+ @scope.stubs(:findresource).with("File[virtual2]").returns(nil)
66
+ @collector.evaluate
67
+ end
68
+
69
+ it "should return matched resources" do
70
+ @collector.resources = ["File[virtual1]", "File[virtual2]"]
71
+ one = mock 'one'
72
+ one.stubs(:virtual=)
73
+ @scope.stubs(:findresource).with("File[virtual1]").returns(one)
74
+ @scope.stubs(:findresource).with("File[virtual2]").returns(nil)
75
+ @collector.evaluate.should == [one]
76
+ end
77
+
78
+ it "should delete itself from the compile's collection list if it has found all of its resources" do
79
+ @collector.resources = ["File[virtual1]"]
80
+ one = mock 'one'
81
+ one.stubs(:virtual=)
82
+ @compiler.expects(:delete_collection).with(@collector)
83
+ @scope.expects(:compiler).returns(@compiler)
84
+ @scope.stubs(:findresource).with("File[virtual1]").returns(one)
85
+ @collector.evaluate
86
+ end
87
+
88
+ it "should not delete itself from the compile's collection list if it has unfound resources" do
89
+ @collector.resources = ["File[virtual1]"]
90
+ one = mock 'one'
91
+ one.stubs(:virtual=)
92
+ @compiler.expects(:delete_collection).never
93
+ @scope.stubs(:findresource).with("File[virtual1]").returns(nil)
94
+ @collector.evaluate
95
+ end
96
+ end
97
+
98
+ describe Puppet::Parser::Collector, "when collecting virtual resources" do
99
+ before do
100
+ @scope = mock 'scope'
101
+ @compiler = mock 'compile'
102
+ @scope.stubs(:compiler).returns(@compiler)
103
+ @resource_type = "Mytype"
104
+ @vquery = proc { |res| true }
105
+
106
+ @collector = Puppet::Parser::Collector.new(@scope, @resource_type, nil, @vquery, :virtual)
107
+ end
108
+
109
+ it "should find all resources matching the vquery" do
110
+ one = stub 'one', :type => "Mytype", :virtual? => true
111
+ two = stub 'two', :type => "Mytype", :virtual? => true
112
+
113
+ one.stubs(:virtual=)
114
+ two.stubs(:virtual=)
115
+
116
+ @compiler.expects(:resources).returns([one, two])
117
+
118
+ @collector.evaluate.should == [one, two]
119
+ end
120
+
121
+ it "should mark all matched resources as non-virtual" do
122
+ one = stub 'one', :type => "Mytype", :virtual? => true
123
+
124
+ one.expects(:virtual=).with(false)
125
+
126
+ @compiler.expects(:resources).returns([one])
127
+
128
+ @collector.evaluate
129
+ end
130
+
131
+ it "should return matched resources" do
132
+ one = stub 'one', :type => "Mytype", :virtual? => true
133
+ two = stub 'two', :type => "Mytype", :virtual? => true
134
+
135
+ one.stubs(:virtual=)
136
+ two.stubs(:virtual=)
137
+
138
+ @compiler.expects(:resources).returns([one, two])
139
+
140
+ @collector.evaluate.should == [one, two]
141
+ end
142
+
143
+ it "should return all resources of the correct type if there is no virtual query" do
144
+ one = stub 'one', :type => "Mytype", :virtual? => true
145
+ two = stub 'two', :type => "Mytype", :virtual? => true
146
+
147
+ one.expects(:virtual=).with(false)
148
+ two.expects(:virtual=).with(false)
149
+
150
+ @compiler.expects(:resources).returns([one, two])
151
+
152
+ @collector = Puppet::Parser::Collector.new(@scope, @resource_type, nil, nil, :virtual)
153
+
154
+ @collector.evaluate.should == [one, two]
155
+ end
156
+
157
+ it "should not return or mark resources of a different type" do
158
+ one = stub 'one', :type => "Mytype", :virtual? => true
159
+ two = stub 'two', :type => :other, :virtual? => true
160
+
161
+ one.expects(:virtual=).with(false)
162
+ two.expects(:virtual=).never
163
+
164
+ @compiler.expects(:resources).returns([one, two])
165
+
166
+ @collector.evaluate.should == [one]
167
+ end
168
+
169
+ it "should not return or mark non-virtual resources" do
170
+ one = stub 'one', :type => "Mytype", :virtual? => false
171
+ two = stub 'two', :type => :other, :virtual? => false
172
+
173
+ one.expects(:virtual=).never
174
+ two.expects(:virtual=).never
175
+
176
+ @compiler.expects(:resources).returns([one, two])
177
+
178
+ @collector.evaluate.should be_false
179
+ end
180
+
181
+ it "should not return or mark non-matching resources" do
182
+ @collector.vquery = proc { |res| res.name == :one }
183
+
184
+ one = stub 'one', :name => :one, :type => "Mytype", :virtual? => true
185
+ two = stub 'two', :name => :two, :type => "Mytype", :virtual? => true
186
+
187
+ one.expects(:virtual=).with(false)
188
+ two.expects(:virtual=).never
189
+
190
+ @compiler.expects(:resources).returns([one, two])
191
+
192
+ @collector.evaluate.should == [one]
193
+ end
194
+ end
195
+
196
+ describe Puppet::Parser::Collector, "when collecting exported resources" do
197
+ confine Puppet.features.rails? => "Cannot test Rails integration without ActiveRecord"
198
+
199
+ before do
200
+ @scope = stub 'scope', :host => "myhost", :debug => nil
201
+ @compiler = mock 'compile'
202
+ @scope.stubs(:compiler).returns(@compiler)
203
+ @resource_type = "Mytype"
204
+ @equery = "test = true"
205
+ @vquery = proc { |r| true }
206
+
207
+ Puppet.settings.stubs(:value).with(:storeconfigs).returns true
208
+
209
+ @collector = Puppet::Parser::Collector.new(@scope, @resource_type, @equery, @vquery, :exported)
210
+ end
211
+
212
+ # Stub most of our interface to Rails.
213
+ def stub_rails(everything = false)
214
+ ActiveRecord::Base.stubs(:connected?).returns(false)
215
+ Puppet::Rails.stubs(:init)
216
+ if everything
217
+ Puppet::Rails::Host.stubs(:find_by_name).returns(nil)
218
+ Puppet::Rails::Resource.stubs(:find).returns([])
219
+ end
220
+ end
221
+
222
+ it "should just return false if :storeconfigs is not enabled" do
223
+ Puppet.settings.expects(:value).with(:storeconfigs).returns false
224
+ @collector.evaluate.should be_false
225
+ end
226
+
227
+ it "should use initialize the Rails support if ActiveRecord is not connected" do
228
+ @compiler.stubs(:resources).returns([])
229
+ ActiveRecord::Base.expects(:connected?).returns(false)
230
+ Puppet::Rails.expects(:init)
231
+ Puppet::Rails::Host.stubs(:find_by_name).returns(nil)
232
+ Puppet::Rails::Resource.stubs(:find).returns([])
233
+
234
+ @collector.evaluate
235
+ end
236
+
237
+ it "should return all matching resources from the current compile and mark them non-virtual and non-exported" do
238
+ stub_rails(true)
239
+
240
+ one = stub 'one', :type => "Mytype", :virtual? => true, :exported? => true
241
+ two = stub 'two', :type => "Mytype", :virtual? => true, :exported? => true
242
+
243
+ one.expects(:exported=).with(false)
244
+ one.expects(:virtual=).with(false)
245
+ two.expects(:exported=).with(false)
246
+ two.expects(:virtual=).with(false)
247
+
248
+ @compiler.expects(:resources).returns([one, two])
249
+
250
+ @collector.evaluate.should == [one, two]
251
+ end
252
+
253
+ it "should mark all returned resources as not virtual" do
254
+ stub_rails(true)
255
+
256
+ one = stub 'one', :type => "Mytype", :virtual? => true, :exported? => true
257
+
258
+ one.stubs(:exported=)
259
+ one.expects(:virtual=).with(false)
260
+
261
+ @compiler.expects(:resources).returns([one])
262
+
263
+ @collector.evaluate.should == [one]
264
+ end
265
+
266
+ it "should convert all found resources into parser resources" do
267
+ stub_rails()
268
+ Puppet::Rails::Host.stubs(:find_by_name).returns(nil)
269
+
270
+ one = stub 'one', :restype => "Mytype", :title => "one", :virtual? => true, :exported? => true
271
+ Puppet::Rails::Resource.stubs(:find).returns([one])
272
+
273
+ resource = mock 'resource'
274
+ one.expects(:to_resource).with(@scope).returns(resource)
275
+ resource.stubs(:exported=)
276
+ resource.stubs(:virtual=)
277
+
278
+ @compiler.stubs(:resources).returns([])
279
+ @scope.stubs(:findresource).returns(nil)
280
+
281
+ @compiler.stubs(:add_resource)
282
+
283
+ @collector.evaluate.should == [resource]
284
+ end
285
+
286
+ it "should store converted resources in the compile's resource list" do
287
+ stub_rails()
288
+ Puppet::Rails::Host.stubs(:find_by_name).returns(nil)
289
+
290
+ one = stub 'one', :restype => "Mytype", :title => "one", :virtual? => true, :exported? => true
291
+ Puppet::Rails::Resource.stubs(:find).returns([one])
292
+
293
+ resource = mock 'resource'
294
+ one.expects(:to_resource).with(@scope).returns(resource)
295
+ resource.stubs(:exported=)
296
+ resource.stubs(:virtual=)
297
+
298
+ @compiler.stubs(:resources).returns([])
299
+ @scope.stubs(:findresource).returns(nil)
300
+
301
+ @compiler.expects(:add_resource).with(@scope, resource)
302
+
303
+ @collector.evaluate.should == [resource]
304
+ end
305
+
306
+ # This way one host doesn't store another host's resources as exported.
307
+ it "should mark resources collected from the database as not exported" do
308
+ stub_rails()
309
+ Puppet::Rails::Host.stubs(:find_by_name).returns(nil)
310
+
311
+ one = stub 'one', :restype => "Mytype", :title => "one", :virtual? => true, :exported? => true
312
+ Puppet::Rails::Resource.stubs(:find).returns([one])
313
+
314
+ resource = mock 'resource'
315
+ one.expects(:to_resource).with(@scope).returns(resource)
316
+ resource.expects(:exported=).with(false)
317
+ resource.stubs(:virtual=)
318
+
319
+ @compiler.stubs(:resources).returns([])
320
+ @scope.stubs(:findresource).returns(nil)
321
+
322
+ @compiler.stubs(:add_resource)
323
+
324
+ @collector.evaluate
325
+ end
326
+
327
+ it "should fail if an equivalent resource already exists in the compile" do
328
+ stub_rails()
329
+ Puppet::Rails::Host.stubs(:find_by_name).returns(nil)
330
+
331
+ rails = stub 'one', :restype => "Mytype", :title => "one", :virtual? => true, :exported? => true, :id => 1, :ref => "yay"
332
+ inmemory = stub 'one', :type => "Mytype", :virtual? => true, :exported? => true, :rails_id => 2
333
+
334
+ Puppet::Rails::Resource.stubs(:find).returns([rails])
335
+
336
+ resource = mock 'resource'
337
+
338
+ @compiler.stubs(:resources).returns([])
339
+ @scope.stubs(:findresource).returns(inmemory)
340
+
341
+ @compiler.stubs(:add_resource)
342
+
343
+ proc { @collector.evaluate }.should raise_error(Puppet::ParseError)
344
+ end
345
+
346
+ it "should ignore exported resources that match already-collected resources" do
347
+ stub_rails()
348
+ Puppet::Rails::Host.stubs(:find_by_name).returns(nil)
349
+
350
+ rails = stub 'one', :restype => "Mytype", :title => "one", :virtual? => true, :exported? => true, :id => 1, :ref => "yay"
351
+ inmemory = stub 'one', :type => "Mytype", :virtual? => true, :exported? => true, :rails_id => 1
352
+
353
+ Puppet::Rails::Resource.stubs(:find).returns([rails])
354
+
355
+ resource = mock 'resource'
356
+
357
+ @compiler.stubs(:resources).returns([])
358
+ @scope.stubs(:findresource).returns(inmemory)
359
+
360
+ @compiler.stubs(:add_resource)
361
+
362
+ proc { @collector.evaluate }.should_not raise_error(Puppet::ParseError)
363
+ end
364
+ end
365
+
366
+ describe Puppet::Parser::Collector, "when building its ActiveRecord query for collecting exported resources" do
367
+ confine Puppet.features.rails? => "Cannot test Rails integration without ActiveRecord"
368
+
369
+ before do
370
+ @scope = stub 'scope', :host => "myhost", :debug => nil
371
+ @compiler = mock 'compile'
372
+ @scope.stubs(:compiler).returns(@compiler)
373
+ @resource_type = "Mytype"
374
+ @equery = nil
375
+ @vquery = proc { |r| true }
376
+
377
+ @collector = Puppet::Parser::Collector.new(@scope, @resource_type, @equery, @vquery, :exported)
378
+ @compiler.stubs(:resources).returns([])
379
+
380
+ ActiveRecord::Base.stubs(:connected?).returns(false)
381
+
382
+ Puppet::Rails.stubs(:init)
383
+ Puppet::Rails::Host.stubs(:find_by_name).returns(nil)
384
+ Puppet::Rails::Resource.stubs(:find).returns([])
385
+
386
+ Puppet.settings.stubs(:value).with(:storeconfigs).returns true
387
+ end
388
+
389
+ it "should exclude all resources from the host if ActiveRecord contains information for this host" do
390
+ @host = mock 'host'
391
+ @host.stubs(:id).returns 5
392
+
393
+ Puppet::Rails::Host.expects(:find_by_name).with(@scope.host).returns(@host)
394
+
395
+ Puppet::Rails::Resource.stubs(:find).with { |*arguments|
396
+ options = arguments[3]
397
+ options[:conditions][0] =~ /^host_id != \?/ and options[:conditions][1] == 5
398
+ }.returns([])
399
+
400
+ @collector.evaluate
401
+ end
402
+
403
+ it "should return parameter names and parameter values when querying ActiveRecord" do
404
+ Puppet::Rails::Resource.stubs(:find).with { |*arguments|
405
+ options = arguments[3]
406
+ options[:include] == {:param_values => :param_name}
407
+ }.returns([])
408
+
409
+ @collector.evaluate
410
+ end
411
+
412
+ it "should only search for exported resources with the matching type" do
413
+ Puppet::Rails::Resource.stubs(:find).with { |*arguments|
414
+ options = arguments[3]
415
+ options[:conditions][0].include?("(exported=? AND restype=?)") and options[:conditions][1] == true and options[:conditions][2] == "Mytype"
416
+ }.returns([])
417
+ end
418
+
419
+ it "should include the export query if one is provided" do
420
+ @collector = Puppet::Parser::Collector.new(@scope, @resource_type, "test = true", @vquery, :exported)
421
+ Puppet::Rails::Resource.stubs(:find).with { |*arguments|
422
+ options = arguments[3]
423
+ options[:conditions][0].include?("test = true")
424
+ }.returns([])
425
+ end
426
+ end