puppet 3.3.2 → 3.4.0.rc1

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 (589) hide show
  1. data/CONTRIBUTING.md +22 -0
  2. data/Gemfile +11 -2
  3. data/README.md +13 -17
  4. data/README_DEVELOPER.md +1 -1
  5. data/Rakefile +1 -1
  6. data/examples/hiera/README.md +4 -4
  7. data/ext/debian/puppetmaster.init +1 -0
  8. data/ext/debian/rules +2 -5
  9. data/ext/nagios/check_puppet.rb +7 -7
  10. data/ext/osx/file_mapping.yaml +1 -1
  11. data/ext/osx/preflight.erb +34 -19
  12. data/ext/rack/{files/config.ru → config.ru} +0 -0
  13. data/ext/rack/{files/apache2.conf → example-passenger-vhost.conf} +6 -0
  14. data/ext/redhat/puppet.spec.erb +20 -2
  15. data/ext/systemd/{puppetagent.service → puppet.service} +0 -0
  16. data/lib/hiera_puppet.rb +2 -2
  17. data/lib/puppet/agent.rb +1 -6
  18. data/lib/puppet/application.rb +15 -2
  19. data/lib/puppet/application/agent.rb +2 -7
  20. data/lib/puppet/application/apply.rb +8 -13
  21. data/lib/puppet/application/cert.rb +47 -7
  22. data/lib/puppet/application/device.rb +1 -6
  23. data/lib/puppet/application/face_base.rb +1 -1
  24. data/lib/puppet/application/filebucket.rb +1 -1
  25. data/lib/puppet/application/inspect.rb +3 -12
  26. data/lib/puppet/application/master.rb +1 -6
  27. data/lib/puppet/application/queue.rb +1 -6
  28. data/lib/puppet/application/resource.rb +2 -6
  29. data/lib/puppet/coercion.rb +11 -0
  30. data/lib/puppet/configurer.rb +5 -3
  31. data/lib/puppet/configurer/downloader.rb +3 -1
  32. data/lib/puppet/configurer/plugin_handler.rb +10 -0
  33. data/lib/puppet/confine.rb +80 -0
  34. data/lib/puppet/{provider/confine → confine}/exists.rb +3 -3
  35. data/lib/puppet/{provider/confine → confine}/false.rb +2 -2
  36. data/lib/puppet/{provider/confine → confine}/feature.rb +2 -2
  37. data/lib/puppet/{provider/confine → confine}/true.rb +2 -2
  38. data/lib/puppet/{provider/confine → confine}/variable.rb +2 -2
  39. data/lib/puppet/{provider/confine_collection.rb → confine_collection.rb} +4 -4
  40. data/lib/puppet/{provider/confiner.rb → confiner.rb} +4 -4
  41. data/lib/puppet/daemon.rb +2 -6
  42. data/lib/puppet/data_binding.rb +2 -30
  43. data/lib/puppet/defaults.rb +283 -174
  44. data/lib/puppet/error.rb +1 -0
  45. data/lib/puppet/external/nagios.rb +0 -2
  46. data/lib/puppet/external/nagios/base.rb +4 -3
  47. data/lib/puppet/external/nagios/grammar.ry +173 -112
  48. data/lib/puppet/external/nagios/parser.rb +233 -184
  49. data/lib/puppet/face/file/store.rb +1 -1
  50. data/lib/puppet/face/module/generate.rb +5 -7
  51. data/lib/puppet/face/parser.rb +12 -2
  52. data/lib/puppet/face/plugin.rb +6 -0
  53. data/lib/puppet/feature/base.rb +16 -0
  54. data/lib/puppet/feature/external_facts.rb +5 -0
  55. data/lib/puppet/feature/libuser.rb +1 -1
  56. data/lib/puppet/feature/msgpack.rb +1 -0
  57. data/lib/puppet/feature/rails.rb +2 -2
  58. data/lib/puppet/file_bucket/dipper.rb +8 -6
  59. data/lib/puppet/file_bucket/file.rb +17 -1
  60. data/lib/puppet/file_serving/base.rb +21 -10
  61. data/lib/puppet/file_serving/configuration.rb +5 -7
  62. data/lib/puppet/file_serving/configuration/parser.rb +1 -1
  63. data/lib/puppet/file_serving/content.rb +1 -1
  64. data/lib/puppet/file_serving/fileset.rb +3 -3
  65. data/lib/puppet/file_serving/metadata.rb +22 -18
  66. data/lib/puppet/file_serving/mount/file.rb +1 -1
  67. data/lib/puppet/file_serving/mount/pluginfacts.rb +35 -0
  68. data/lib/puppet/file_system.rb +3 -0
  69. data/lib/puppet/file_system/file.rb +261 -0
  70. data/lib/puppet/file_system/file18.rb +5 -0
  71. data/lib/puppet/file_system/file19.rb +5 -0
  72. data/lib/puppet/file_system/file19windows.rb +113 -0
  73. data/lib/puppet/file_system/memory_file.rb +31 -0
  74. data/lib/puppet/file_system/tempfile.rb +20 -0
  75. data/lib/puppet/indirector/active_record.rb +1 -0
  76. data/lib/puppet/indirector/catalog/compiler.rb +28 -0
  77. data/lib/puppet/indirector/certificate_request/memory.rb +6 -0
  78. data/lib/puppet/indirector/data_binding/hiera.rb +46 -2
  79. data/lib/puppet/indirector/direct_file_server.rb +2 -2
  80. data/lib/puppet/indirector/facts/facter.rb +25 -0
  81. data/lib/puppet/indirector/file_bucket_file/file.rb +60 -74
  82. data/lib/puppet/indirector/indirection.rb +5 -1
  83. data/lib/puppet/indirector/json.rb +1 -1
  84. data/lib/puppet/indirector/key/ca.rb +4 -0
  85. data/lib/puppet/indirector/key/file.rb +7 -3
  86. data/lib/puppet/indirector/key/memory.rb +6 -0
  87. data/lib/puppet/indirector/node/write_only_yaml.rb +2 -2
  88. data/lib/puppet/indirector/request.rb +17 -11
  89. data/lib/puppet/indirector/resource/ral.rb +5 -0
  90. data/lib/puppet/indirector/resource/rest.rb +1 -0
  91. data/lib/puppet/indirector/resource/store_configs.rb +4 -0
  92. data/lib/puppet/indirector/rest.rb +2 -1
  93. data/lib/puppet/indirector/ssl_file.rb +7 -7
  94. data/lib/puppet/indirector/terminus.rb +4 -0
  95. data/lib/puppet/indirector/yaml.rb +3 -3
  96. data/lib/puppet/interface/documentation.rb +4 -11
  97. data/lib/puppet/module.rb +19 -6
  98. data/lib/puppet/module_tool/applications/builder.rb +1 -1
  99. data/lib/puppet/module_tool/applications/installer.rb +1 -1
  100. data/lib/puppet/module_tool/checksums.rb +1 -1
  101. data/lib/puppet/module_tool/dependency.rb +7 -3
  102. data/lib/puppet/module_tool/metadata.rb +6 -2
  103. data/lib/puppet/module_tool/tar.rb +2 -1
  104. data/lib/puppet/module_tool/tar/gnu.rb +6 -2
  105. data/lib/puppet/module_tool/tar/mini.rb +2 -0
  106. data/lib/puppet/module_tool/tar/solaris.rb +2 -5
  107. data/lib/puppet/network/authconfig.rb +0 -2
  108. data/lib/puppet/network/authentication.rb +1 -1
  109. data/lib/puppet/network/authstore.rb +6 -7
  110. data/lib/puppet/network/format.rb +2 -3
  111. data/lib/puppet/network/format_handler.rb +16 -11
  112. data/lib/puppet/network/format_support.rb +14 -0
  113. data/lib/puppet/network/formats.rb +26 -0
  114. data/lib/puppet/network/http/connection.rb +8 -41
  115. data/lib/puppet/network/http/handler.rb +28 -32
  116. data/lib/puppet/network/http/webrick.rb +15 -22
  117. data/lib/puppet/network/http_pool.rb +43 -9
  118. data/lib/puppet/network/rights.rb +0 -0
  119. data/lib/puppet/node.rb +24 -8
  120. data/lib/puppet/node/environment.rb +18 -20
  121. data/lib/puppet/node/facts.rb +23 -6
  122. data/lib/puppet/parameter.rb +15 -2
  123. data/lib/puppet/parameter/boolean.rb +5 -0
  124. data/lib/puppet/parameter/value_collection.rb +6 -4
  125. data/lib/puppet/parser/ast/resourceparam.rb +2 -1
  126. data/lib/puppet/parser/compiler.rb +25 -9
  127. data/lib/puppet/parser/files.rb +1 -1
  128. data/lib/puppet/parser/functions.rb +12 -21
  129. data/lib/puppet/parser/functions/collect.rb +6 -35
  130. data/lib/puppet/parser/functions/contain.rb +26 -0
  131. data/lib/puppet/parser/functions/create_resources.rb +5 -0
  132. data/lib/puppet/parser/functions/extlookup.rb +2 -2
  133. data/lib/puppet/parser/functions/file.rb +1 -1
  134. data/lib/puppet/parser/functions/{reject.rb → filter.rb} +13 -12
  135. data/lib/puppet/parser/functions/fqdn_rand.rb +13 -5
  136. data/lib/puppet/parser/functions/include.rb +18 -1
  137. data/lib/puppet/parser/functions/map.rb +44 -0
  138. data/lib/puppet/parser/functions/select.rb +6 -38
  139. data/lib/puppet/parser/lexer.rb +1 -1
  140. data/lib/puppet/parser/parser_support.rb +1 -1
  141. data/lib/puppet/parser/resource.rb +6 -45
  142. data/lib/puppet/parser/scope.rb +33 -2
  143. data/lib/puppet/parser/type_loader.rb +4 -60
  144. data/lib/puppet/pops/binder/bindings_loader.rb +1 -1
  145. data/lib/puppet/pops/binder/config/binder_config.rb +3 -3
  146. data/lib/puppet/pops/binder/hiera2/bindings_provider.rb +1 -1
  147. data/lib/puppet/pops/binder/scheme_handler/confdir_hiera_scheme.rb +1 -1
  148. data/lib/puppet/pops/binder/scheme_handler/module_hiera_scheme.rb +2 -2
  149. data/lib/puppet/pops/issues.rb +4 -0
  150. data/lib/puppet/pops/model/ast_transformer.rb +4 -1
  151. data/lib/puppet/pops/model/model_label_provider.rb +1 -1
  152. data/lib/puppet/pops/parser/egrammar.ra +5 -24
  153. data/lib/puppet/pops/parser/eparser.rb +859 -902
  154. data/lib/puppet/pops/parser/lexer.rb +48 -30
  155. data/lib/puppet/pops/parser/parser_support.rb +1 -1
  156. data/lib/puppet/pops/patterns.rb +4 -4
  157. data/lib/puppet/pops/utils.rb +1 -1
  158. data/lib/puppet/pops/validation/checker3_1.rb +25 -20
  159. data/lib/puppet/provider.rb +23 -6
  160. data/lib/puppet/provider/aixobject.rb +0 -0
  161. data/lib/puppet/provider/augeas/augeas.rb +21 -5
  162. data/lib/puppet/provider/confine.rb +5 -79
  163. data/lib/puppet/provider/cron/crontab.rb +0 -0
  164. data/lib/puppet/provider/exec.rb +9 -7
  165. data/lib/puppet/provider/exec/posix.rb +10 -1
  166. data/lib/puppet/provider/exec/windows.rb +1 -1
  167. data/lib/puppet/provider/file/posix.rb +1 -0
  168. data/lib/puppet/provider/file/windows.rb +16 -5
  169. data/lib/puppet/provider/group/aix.rb +0 -0
  170. data/lib/puppet/provider/group/windows_adsi.rb +33 -1
  171. data/lib/puppet/provider/macauthorization/macauthorization.rb +1 -1
  172. data/lib/puppet/provider/mailalias/aliases.rb +0 -0
  173. data/lib/puppet/provider/maillist/mailman.rb +0 -0
  174. data/lib/puppet/provider/mount/parsed.rb +0 -0
  175. data/lib/puppet/provider/nameservice/directoryservice.rb +3 -3
  176. data/lib/puppet/provider/package/appdmg.rb +1 -1
  177. data/lib/puppet/provider/package/apple.rb +1 -1
  178. data/lib/puppet/provider/package/apt.rb +1 -1
  179. data/lib/puppet/provider/package/aptitude.rb +0 -0
  180. data/lib/puppet/provider/package/blastwave.rb +1 -1
  181. data/lib/puppet/provider/package/dpkg.rb +1 -1
  182. data/lib/puppet/provider/package/fink.rb +1 -1
  183. data/lib/puppet/provider/package/freebsd.rb +0 -0
  184. data/lib/puppet/provider/package/gem.rb +0 -0
  185. data/lib/puppet/provider/package/macports.rb +0 -0
  186. data/lib/puppet/provider/package/msi.rb +4 -10
  187. data/lib/puppet/provider/package/nim.rb +8 -8
  188. data/lib/puppet/provider/package/openbsd.rb +1 -1
  189. data/lib/puppet/provider/package/opkg.rb +0 -0
  190. data/lib/puppet/provider/package/pacman.rb +2 -2
  191. data/lib/puppet/provider/package/pkgdmg.rb +1 -1
  192. data/lib/puppet/provider/package/pkgutil.rb +1 -1
  193. data/lib/puppet/provider/package/ports.rb +0 -0
  194. data/lib/puppet/provider/package/rpm.rb +39 -3
  195. data/lib/puppet/provider/package/sun.rb +3 -3
  196. data/lib/puppet/provider/package/sunfreeware.rb +0 -0
  197. data/lib/puppet/provider/package/windows.rb +12 -19
  198. data/lib/puppet/provider/package/windows/package.rb +1 -1
  199. data/lib/puppet/provider/package/yum.rb +2 -2
  200. data/lib/puppet/provider/parsedfile.rb +0 -0
  201. data/lib/puppet/provider/port/parsed.rb +0 -0
  202. data/lib/puppet/provider/service/base.rb +0 -0
  203. data/lib/puppet/provider/service/bsd.rb +3 -3
  204. data/lib/puppet/provider/service/daemontools.rb +8 -8
  205. data/lib/puppet/provider/service/debian.rb +0 -0
  206. data/lib/puppet/provider/service/freebsd.rb +3 -3
  207. data/lib/puppet/provider/service/init.rb +5 -4
  208. data/lib/puppet/provider/service/launchd.rb +35 -24
  209. data/lib/puppet/provider/service/openbsd.rb +23 -0
  210. data/lib/puppet/provider/service/redhat.rb +0 -0
  211. data/lib/puppet/provider/service/runit.rb +3 -3
  212. data/lib/puppet/provider/service/smf.rb +0 -0
  213. data/lib/puppet/provider/service/src.rb +0 -0
  214. data/lib/puppet/provider/service/systemd.rb +0 -0
  215. data/lib/puppet/provider/service/upstart.rb +3 -3
  216. data/lib/puppet/provider/ssh_authorized_key/parsed.rb +2 -2
  217. data/lib/puppet/provider/sshkey/parsed.rb +0 -0
  218. data/lib/puppet/provider/user/aix.rb +0 -0
  219. data/lib/puppet/provider/user/directoryservice.rb +1 -1
  220. data/lib/puppet/provider/user/useradd.rb +1 -1
  221. data/lib/puppet/provider/zone/solaris.rb +1 -1
  222. data/lib/puppet/rails/benchmark.rb +1 -1
  223. data/lib/puppet/reference/configuration.rb +1 -2
  224. data/lib/puppet/reference/indirection.rb +12 -14
  225. data/lib/puppet/relationship.rb +7 -4
  226. data/lib/puppet/reports.rb +2 -2
  227. data/lib/puppet/reports/rrdgraph.rb +1 -1
  228. data/lib/puppet/reports/store.rb +3 -3
  229. data/lib/puppet/reports/tagmail.rb +2 -2
  230. data/lib/puppet/resource.rb +66 -8
  231. data/lib/puppet/resource/catalog.rb +18 -25
  232. data/lib/puppet/resource/status.rb +10 -4
  233. data/lib/puppet/run.rb +6 -2
  234. data/lib/puppet/settings.rb +39 -119
  235. data/lib/puppet/settings/base_setting.rb +8 -9
  236. data/lib/puppet/settings/directory_setting.rb +8 -0
  237. data/lib/puppet/settings/file_setting.rb +35 -1
  238. data/lib/puppet/settings/priority_setting.rb +42 -0
  239. data/lib/puppet/ssl.rb +4 -0
  240. data/lib/puppet/ssl/certificate.rb +18 -0
  241. data/lib/puppet/ssl/certificate_authority.rb +101 -72
  242. data/lib/puppet/ssl/certificate_authority/autosign_command.rb +44 -0
  243. data/lib/puppet/ssl/certificate_authority/interface.rb +21 -17
  244. data/lib/puppet/ssl/certificate_factory.rb +38 -12
  245. data/lib/puppet/ssl/certificate_request.rb +201 -47
  246. data/lib/puppet/ssl/certificate_request_attributes.rb +34 -0
  247. data/lib/puppet/ssl/certificate_revocation_list.rb +2 -2
  248. data/lib/puppet/ssl/host.rb +21 -10
  249. data/lib/puppet/ssl/inventory.rb +6 -10
  250. data/lib/puppet/ssl/key.rb +1 -1
  251. data/lib/puppet/ssl/oids.rb +78 -0
  252. data/lib/puppet/ssl/validator.rb +41 -97
  253. data/lib/puppet/ssl/validator/default_validator.rb +153 -0
  254. data/lib/puppet/ssl/validator/no_validator.rb +17 -0
  255. data/lib/puppet/status.rb +4 -0
  256. data/lib/puppet/test/test_helper.rb +5 -0
  257. data/lib/puppet/transaction.rb +13 -0
  258. data/lib/puppet/transaction/event.rb +8 -3
  259. data/lib/puppet/transaction/report.rb +6 -2
  260. data/lib/puppet/transaction/resource_harness.rb +173 -115
  261. data/lib/puppet/type.rb +30 -13
  262. data/lib/puppet/type/augeas.rb +12 -46
  263. data/lib/puppet/type/component.rb +1 -7
  264. data/lib/puppet/type/cron.rb +0 -0
  265. data/lib/puppet/type/exec.rb +13 -1
  266. data/lib/puppet/type/file.rb +19 -10
  267. data/lib/puppet/type/file/checksum.rb +0 -0
  268. data/lib/puppet/type/file/content.rb +3 -0
  269. data/lib/puppet/type/file/ensure.rb +33 -15
  270. data/lib/puppet/type/file/group.rb +0 -0
  271. data/lib/puppet/type/file/mode.rb +6 -2
  272. data/lib/puppet/type/file/owner.rb +0 -0
  273. data/lib/puppet/type/file/source.rb +65 -14
  274. data/lib/puppet/type/file/target.rb +6 -6
  275. data/lib/puppet/type/file/type.rb +0 -0
  276. data/lib/puppet/type/filebucket.rb +0 -0
  277. data/lib/puppet/type/group.rb +18 -0
  278. data/lib/puppet/type/host.rb +0 -0
  279. data/lib/puppet/type/k5login.rb +4 -4
  280. data/lib/puppet/type/mailalias.rb +0 -0
  281. data/lib/puppet/type/maillist.rb +0 -0
  282. data/lib/puppet/type/mount.rb +15 -1
  283. data/lib/puppet/type/package.rb +7 -1
  284. data/lib/puppet/type/port.rb +0 -0
  285. data/lib/puppet/type/schedule.rb +9 -4
  286. data/lib/puppet/type/service.rb +1 -1
  287. data/lib/puppet/type/sshkey.rb +0 -0
  288. data/lib/puppet/type/tidy.rb +1 -1
  289. data/lib/puppet/type/user.rb +3 -0
  290. data/lib/puppet/type/yumrepo.rb +8 -6
  291. data/lib/puppet/type/zpool.rb +0 -0
  292. data/lib/puppet/util.rb +4 -31
  293. data/lib/puppet/util/adsi.rb +73 -17
  294. data/lib/puppet/util/autoload.rb +3 -3
  295. data/lib/puppet/util/backups.rb +4 -4
  296. data/lib/puppet/util/cacher.rb +7 -13
  297. data/lib/puppet/util/checksums.rb +2 -2
  298. data/lib/puppet/util/classgen.rb +3 -1
  299. data/lib/puppet/util/colors.rb +1 -0
  300. data/lib/puppet/util/command_line.rb +5 -0
  301. data/lib/puppet/util/docs.rb +33 -27
  302. data/lib/puppet/util/execution.rb +42 -18
  303. data/lib/puppet/util/filetype.rb +3 -3
  304. data/lib/puppet/util/instance_loader.rb +2 -2
  305. data/lib/puppet/util/instrumentation.rb +23 -42
  306. data/lib/puppet/util/instrumentation/data.rb +11 -4
  307. data/lib/puppet/util/instrumentation/indirection_probe.rb +11 -4
  308. data/lib/puppet/util/instrumentation/instrumentable.rb +7 -14
  309. data/lib/puppet/util/instrumentation/listener.rb +15 -8
  310. data/lib/puppet/util/instrumentation/listeners/log.rb +4 -10
  311. data/lib/puppet/util/instrumentation/listeners/performance.rb +8 -14
  312. data/lib/puppet/util/limits.rb +12 -0
  313. data/lib/puppet/util/lockfile.rb +2 -2
  314. data/lib/puppet/util/log.rb +14 -6
  315. data/lib/puppet/util/log/destinations.rb +23 -1
  316. data/lib/puppet/util/metric.rb +9 -3
  317. data/lib/puppet/util/monkey_patches.rb +7 -2
  318. data/lib/puppet/util/network_device/config.rb +1 -1
  319. data/lib/puppet/util/plugins.rb +1 -1
  320. data/lib/puppet/util/posix.rb +0 -0
  321. data/lib/puppet/util/profiler.rb +7 -2
  322. data/lib/puppet/util/provider_features.rb +2 -2
  323. data/lib/puppet/util/rdoc.rb +28 -30
  324. data/lib/puppet/util/rdoc/code_objects.rb +75 -25
  325. data/lib/puppet/util/rdoc/generators/puppet_generator.rb +1 -1
  326. data/lib/puppet/util/rdoc/parser.rb +12 -487
  327. data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +477 -0
  328. data/lib/puppet/util/rdoc/parser/puppet_parser_rdoc1.rb +19 -0
  329. data/lib/puppet/util/rdoc/parser/puppet_parser_rdoc2.rb +14 -0
  330. data/lib/puppet/util/reference.rb +1 -1
  331. data/lib/puppet/util/resource_template.rb +1 -1
  332. data/lib/puppet/util/selinux.rb +1 -1
  333. data/lib/puppet/util/storage.rb +2 -2
  334. data/lib/puppet/util/suidmanager.rb +1 -1
  335. data/lib/puppet/util/tag_set.rb +29 -0
  336. data/lib/puppet/util/tagging.rb +8 -24
  337. data/lib/puppet/util/watched_file.rb +1 -1
  338. data/lib/puppet/util/watcher.rb +1 -1
  339. data/lib/puppet/util/windows.rb +3 -0
  340. data/lib/puppet/util/windows/access_control_entry.rb +84 -0
  341. data/lib/puppet/util/windows/access_control_list.rb +106 -0
  342. data/lib/puppet/util/windows/file.rb +213 -0
  343. data/lib/puppet/util/windows/process.rb +199 -0
  344. data/lib/puppet/util/windows/root_certs.rb +52 -37
  345. data/lib/puppet/util/windows/security.rb +270 -245
  346. data/lib/puppet/util/windows/security_descriptor.rb +62 -0
  347. data/lib/puppet/util/windows/sid.rb +26 -4
  348. data/lib/puppet/version.rb +2 -2
  349. data/spec/fixtures/releases/jamtur01-apache/lib/puppet/provider/a2mod/debian.rb +1 -1
  350. data/spec/fixtures/unit/indirector/{hiera → data_binding/hiera}/global.yaml +0 -0
  351. data/spec/fixtures/unit/indirector/data_binding/hiera/invalid.yaml +1 -0
  352. data/spec/fixtures/unit/module/trailing-comma.json +24 -0
  353. data/spec/fixtures/unit/util/monkey_patches/x509.pem +32 -0
  354. data/spec/integration/application/apply_spec.rb +1 -1
  355. data/spec/integration/application/doc_spec.rb +1 -1
  356. data/spec/integration/configurer_spec.rb +4 -2
  357. data/spec/integration/data_binding.rb +100 -0
  358. data/spec/integration/indirector/catalog/compiler_spec.rb +16 -13
  359. data/spec/integration/indirector/direct_file_server_spec.rb +3 -5
  360. data/spec/integration/indirector/file_content/file_server_spec.rb +2 -2
  361. data/spec/integration/node/facts_spec.rb +1 -1
  362. data/spec/integration/node_spec.rb +1 -1
  363. data/spec/integration/parser/compiler_spec.rb +90 -0
  364. data/spec/integration/parser/parser_spec.rb +2 -2
  365. data/spec/integration/provider/cron/crontab_spec.rb +3 -5
  366. data/spec/integration/resource/catalog_spec.rb +1 -1
  367. data/spec/integration/ssl/autosign_spec.rb +90 -0
  368. data/spec/integration/ssl/certificate_authority_spec.rb +62 -69
  369. data/spec/integration/ssl/certificate_revocation_list_spec.rb +1 -1
  370. data/spec/integration/ssl/host_spec.rb +1 -1
  371. data/spec/integration/transaction_spec.rb +13 -13
  372. data/spec/integration/type/exec_spec.rb +2 -2
  373. data/spec/integration/type/file_spec.rb +287 -45
  374. data/spec/integration/type/tidy_spec.rb +3 -3
  375. data/spec/integration/util/rdoc/parser_spec.rb +236 -35
  376. data/spec/integration/util/settings_spec.rb +1 -1
  377. data/spec/integration/util/windows/process_spec.rb +22 -0
  378. data/spec/integration/util/windows/security_spec.rb +316 -106
  379. data/spec/lib/matchers/containment_matchers.rb +52 -0
  380. data/spec/lib/puppet_spec/compiler.rb +6 -0
  381. data/spec/lib/puppet_spec/files.rb +20 -21
  382. data/spec/shared_behaviours/documentation_on_faces.rb +3 -3
  383. data/spec/shared_behaviours/file_server_terminus.rb +2 -2
  384. data/spec/shared_contexts/platform.rb +1 -0
  385. data/spec/spec_helper.rb +13 -1
  386. data/spec/unit/agent_spec.rb +0 -12
  387. data/spec/unit/application/agent_spec.rb +4 -4
  388. data/spec/unit/application/apply_spec.rb +18 -2
  389. data/spec/unit/application/cert_spec.rb +8 -6
  390. data/spec/unit/application/device_spec.rb +1 -1
  391. data/spec/unit/application/filebucket_spec.rb +1 -1
  392. data/spec/unit/application/inspect_spec.rb +1 -1
  393. data/spec/unit/application_spec.rb +24 -0
  394. data/spec/unit/configurer/downloader_spec.rb +8 -7
  395. data/spec/unit/configurer/fact_handler_spec.rb +23 -0
  396. data/spec/unit/configurer/plugin_handler_spec.rb +7 -2
  397. data/spec/unit/configurer_spec.rb +15 -5
  398. data/spec/unit/{provider/confine → confine}/exists_spec.rb +12 -12
  399. data/spec/unit/{provider/confine → confine}/false_spec.rb +9 -9
  400. data/spec/unit/{provider/confine → confine}/feature_spec.rb +10 -10
  401. data/spec/unit/{provider/confine → confine}/true_spec.rb +7 -7
  402. data/spec/unit/{provider/confine → confine}/variable_spec.rb +16 -16
  403. data/spec/unit/{provider/confine_collection_spec.rb → confine_collection_spec.rb} +30 -30
  404. data/spec/unit/{provider/confine_spec.rb → confine_spec.rb} +11 -11
  405. data/spec/unit/{provider/confiner_spec.rb → confiner_spec.rb} +4 -4
  406. data/spec/unit/face/parser_spec.rb +54 -0
  407. data/spec/unit/file_bucket/dipper_spec.rb +2 -2
  408. data/spec/unit/file_serving/base_spec.rb +32 -9
  409. data/spec/unit/file_serving/configuration_spec.rb +7 -7
  410. data/spec/unit/file_serving/content_spec.rb +12 -7
  411. data/spec/unit/file_serving/fileset_spec.rb +57 -27
  412. data/spec/unit/file_serving/metadata_spec.rb +74 -12
  413. data/spec/unit/file_serving/mount/file_spec.rb +10 -10
  414. data/spec/unit/file_serving/mount/pluginfacts_spec.rb +73 -0
  415. data/spec/unit/file_system/file_spec.rb +486 -0
  416. data/spec/unit/file_system/tempfile_spec.rb +48 -0
  417. data/spec/unit/graph/relationship_graph_spec.rb +0 -6
  418. data/spec/unit/hiera_puppet_spec.rb +2 -2
  419. data/spec/unit/indirector/catalog/compiler_spec.rb +15 -19
  420. data/spec/unit/indirector/certificate_status/file_spec.rb +30 -40
  421. data/spec/unit/indirector/data_binding/hiera_spec.rb +95 -2
  422. data/spec/unit/indirector/direct_file_server_spec.rb +6 -6
  423. data/spec/unit/indirector/facts/facter_spec.rb +33 -0
  424. data/spec/unit/indirector/file_bucket_file/file_spec.rb +61 -52
  425. data/spec/unit/indirector/file_metadata/file_spec.rb +2 -2
  426. data/spec/unit/indirector/file_server_spec.rb +4 -4
  427. data/spec/unit/indirector/json_spec.rb +4 -4
  428. data/spec/unit/indirector/key/file_spec.rb +13 -14
  429. data/spec/unit/indirector/resource/ral_spec.rb +7 -0
  430. data/spec/unit/indirector/resource/store_configs_spec.rb +11 -0
  431. data/spec/unit/indirector/rest_spec.rb +7 -3
  432. data/spec/unit/indirector/ssl_file_spec.rb +14 -17
  433. data/spec/unit/indirector/yaml_spec.rb +4 -4
  434. data/spec/unit/module_spec.rb +43 -15
  435. data/spec/unit/module_tool/tar/gnu_spec.rb +2 -2
  436. data/spec/unit/module_tool/tar/solaris_spec.rb +2 -2
  437. data/spec/unit/module_tool/tar_spec.rb +45 -0
  438. data/spec/unit/network/authconfig_spec.rb +2 -1
  439. data/spec/unit/network/authentication_spec.rb +2 -2
  440. data/spec/unit/network/format_handler_spec.rb +2 -2
  441. data/spec/unit/network/formats_spec.rb +24 -0
  442. data/spec/unit/network/http/connection_spec.rb +76 -199
  443. data/spec/unit/network/http/handler_spec.rb +33 -34
  444. data/spec/unit/network/http_pool_spec.rb +8 -5
  445. data/spec/unit/node/environment_spec.rb +76 -90
  446. data/spec/unit/node/facts_spec.rb +20 -3
  447. data/spec/unit/node_spec.rb +43 -0
  448. data/spec/unit/parameter/boolean_spec.rb +22 -12
  449. data/spec/unit/parser/ast/resourceparam_spec.rb +51 -0
  450. data/spec/unit/parser/compiler_spec.rb +103 -35
  451. data/spec/unit/parser/eparser_adapter_spec.rb +12 -12
  452. data/spec/unit/parser/files_spec.rb +11 -11
  453. data/spec/unit/parser/functions/contain_spec.rb +185 -0
  454. data/spec/unit/parser/functions/create_resources_spec.rb +13 -5
  455. data/spec/unit/parser/functions/generate_spec.rb +1 -1
  456. data/spec/unit/parser/functions_spec.rb +2 -2
  457. data/spec/unit/parser/lexer_spec.rb +1 -1
  458. data/spec/unit/parser/methods/each_spec.rb +1 -1
  459. data/spec/unit/parser/methods/{select_spec.rb → filter_spec.rb} +11 -11
  460. data/spec/unit/parser/methods/map_spec.rb +95 -0
  461. data/spec/unit/parser/methods/reduce_spec.rb +12 -11
  462. data/spec/unit/parser/methods/shared.rb +5 -5
  463. data/spec/unit/parser/methods/slice_spec.rb +13 -13
  464. data/spec/unit/parser/parser_spec.rb +1 -1
  465. data/spec/unit/parser/resource/param_spec.rb +44 -0
  466. data/spec/unit/parser/resource_spec.rb +16 -15
  467. data/spec/unit/pops/model/ast_transformer_spec.rb +18 -4
  468. data/spec/unit/pops/parser/lexer_spec.rb +22 -5
  469. data/spec/unit/pops/parser/parse_calls_spec.rb +5 -5
  470. data/spec/unit/pops/transformer/transform_calls_spec.rb +6 -6
  471. data/spec/unit/pops/transformer/transform_containers_spec.rb +2 -2
  472. data/spec/unit/pops/validator/validator_spec.rb +31 -0
  473. data/spec/unit/provider/augeas/augeas_spec.rb +57 -2
  474. data/spec/unit/provider/exec/posix_spec.rb +8 -3
  475. data/spec/unit/provider/file/posix_spec.rb +2 -2
  476. data/spec/unit/provider/group/windows_adsi_spec.rb +70 -3
  477. data/spec/unit/provider/nameservice/directoryservice_spec.rb +3 -3
  478. data/spec/unit/provider/package/apt_spec.rb +1 -1
  479. data/spec/unit/provider/package/msi_spec.rb +15 -42
  480. data/spec/unit/provider/package/openbsd_spec.rb +3 -3
  481. data/spec/unit/provider/package/rpm_spec.rb +56 -13
  482. data/spec/unit/provider/package/windows_spec.rb +15 -19
  483. data/spec/unit/provider/service/base_spec.rb +1 -1
  484. data/spec/unit/provider/service/daemontools_spec.rb +18 -8
  485. data/spec/unit/provider/service/freebsd_spec.rb +3 -3
  486. data/spec/unit/provider/service/gentoo_spec.rb +5 -2
  487. data/spec/unit/provider/service/init_spec.rb +17 -17
  488. data/spec/unit/provider/service/launchd_spec.rb +76 -23
  489. data/spec/unit/provider/service/openbsd_spec.rb +125 -0
  490. data/spec/unit/provider/service/openwrt_spec.rb +1 -1
  491. data/spec/unit/provider/service/runit_spec.rb +12 -5
  492. data/spec/unit/provider/service/upstart_spec.rb +4 -4
  493. data/spec/unit/provider/ssh_authorized_key/parsed_spec.rb +5 -5
  494. data/spec/unit/provider/user/directoryservice_spec.rb +4 -4
  495. data/spec/unit/provider/zone/solaris_spec.rb +1 -1
  496. data/spec/unit/provider_spec.rb +2 -2
  497. data/spec/unit/reports/http_spec.rb +19 -34
  498. data/spec/unit/reports/store_spec.rb +2 -2
  499. data/spec/unit/resource/catalog_spec.rb +81 -11
  500. data/spec/unit/resource/status_spec.rb +11 -1
  501. data/spec/unit/resource/type_spec.rb +30 -1
  502. data/spec/unit/resource_spec.rb +40 -4
  503. data/spec/unit/settings/file_setting_spec.rb +2 -2
  504. data/spec/unit/settings/path_setting_spec.rb +2 -2
  505. data/spec/unit/settings/priority_setting_spec.rb +66 -0
  506. data/spec/unit/settings_spec.rb +16 -31
  507. data/spec/unit/ssl/certificate_authority/autosign_command_spec.rb +30 -0
  508. data/spec/unit/ssl/certificate_authority_spec.rb +129 -134
  509. data/spec/unit/ssl/certificate_factory_spec.rb +18 -0
  510. data/spec/unit/ssl/certificate_request_attributes_spec.rb +61 -0
  511. data/spec/unit/ssl/certificate_request_spec.rb +103 -0
  512. data/spec/unit/ssl/certificate_spec.rb +31 -18
  513. data/spec/unit/ssl/host_spec.rb +34 -8
  514. data/spec/unit/ssl/inventory_spec.rb +27 -62
  515. data/spec/unit/ssl/key_spec.rb +4 -4
  516. data/spec/unit/ssl/oids_spec.rb +48 -0
  517. data/spec/unit/ssl/validator_spec.rb +49 -6
  518. data/spec/unit/status_spec.rb +9 -0
  519. data/spec/unit/transaction/event_spec.rb +1 -9
  520. data/spec/unit/transaction/report_spec.rb +20 -1
  521. data/spec/unit/transaction/resource_harness_spec.rb +60 -210
  522. data/spec/unit/transaction_spec.rb +54 -8
  523. data/spec/unit/type/component_spec.rb +2 -2
  524. data/spec/unit/type/exec_spec.rb +14 -7
  525. data/spec/unit/type/file/content_spec.rb +13 -2
  526. data/spec/unit/type/file/ctime_spec.rb +1 -1
  527. data/spec/unit/type/file/mode_spec.rb +48 -2
  528. data/spec/unit/type/file/mtime_spec.rb +1 -1
  529. data/spec/unit/type/file/source_spec.rb +177 -7
  530. data/spec/unit/type/file_spec.rb +63 -71
  531. data/spec/unit/type/group_spec.rb +20 -0
  532. data/spec/unit/type/k5login_spec.rb +3 -3
  533. data/spec/unit/type/mount_spec.rb +53 -0
  534. data/spec/unit/type/nagios_spec.rb +216 -0
  535. data/spec/unit/type/package_spec.rb +7 -1
  536. data/spec/unit/type/schedule_spec.rb +6 -0
  537. data/spec/unit/type/service_spec.rb +3 -3
  538. data/spec/unit/type/tidy_spec.rb +14 -14
  539. data/spec/unit/type/user_spec.rb +9 -0
  540. data/spec/unit/type_spec.rb +86 -4
  541. data/spec/unit/util/adsi_spec.rb +120 -12
  542. data/spec/unit/util/autoload_spec.rb +14 -14
  543. data/spec/unit/util/backups_spec.rb +29 -21
  544. data/spec/unit/util/checksums_spec.rb +2 -1
  545. data/spec/unit/util/command_line_spec.rb +41 -0
  546. data/spec/unit/util/docs_spec.rb +91 -0
  547. data/spec/unit/util/execution_spec.rb +26 -2
  548. data/spec/unit/util/filetype_spec.rb +7 -7
  549. data/spec/unit/util/lockfile_spec.rb +2 -2
  550. data/spec/unit/util/log/destinations_spec.rb +32 -0
  551. data/spec/unit/util/monkey_patches_spec.rb +41 -0
  552. data/spec/unit/util/pidlock_spec.rb +6 -6
  553. data/spec/unit/util/rdoc/parser_spec.rb +15 -13
  554. data/spec/unit/util/rdoc_spec.rb +18 -24
  555. data/spec/unit/util/resource_template_spec.rb +3 -3
  556. data/spec/unit/util/selinux_spec.rb +4 -2
  557. data/spec/unit/util/storage_spec.rb +4 -4
  558. data/spec/unit/util/suidmanager_spec.rb +7 -0
  559. data/spec/unit/util/tag_set_spec.rb +46 -0
  560. data/spec/unit/util/tagging_spec.rb +82 -45
  561. data/spec/unit/util/watcher_spec.rb +4 -1
  562. data/spec/unit/util/windows/access_control_entry_spec.rb +67 -0
  563. data/spec/unit/util/windows/access_control_list_spec.rb +133 -0
  564. data/spec/unit/util/windows/root_certs_spec.rb +10 -8
  565. data/spec/unit/util/windows/security_descriptor_spec.rb +117 -0
  566. data/spec/unit/util/windows/sid_spec.rb +69 -0
  567. data/spec/unit/util_spec.rb +7 -7
  568. data/tasks/ci.rake +17 -36
  569. metadata +2811 -2746
  570. checksums.yaml +0 -7
  571. data/examples/mac_automount.pp +0 -16
  572. data/examples/mcx_dock_absent.pp +0 -4
  573. data/examples/mcx_dock_default.pp +0 -118
  574. data/examples/mcx_dock_full.pp +0 -125
  575. data/examples/mcx_dock_invalid.pp +0 -9
  576. data/examples/mcx_nogroup.pp +0 -118
  577. data/examples/mcx_notexists_absent.pp +0 -4
  578. data/ext/rack/README +0 -58
  579. data/ext/rack/manifest.pp +0 -59
  580. data/lib/puppet/external/lock.rb +0 -63
  581. data/lib/puppet/indirector/hiera.rb +0 -39
  582. data/lib/puppet/parser/functions/foreach.rb +0 -95
  583. data/spec/integration/network/server/webrick_spec.rb +0 -76
  584. data/spec/integration/parser/functions_spec.rb +0 -16
  585. data/spec/unit/indirector/hiera_spec.rb +0 -154
  586. data/spec/unit/parser/methods/collect_spec.rb +0 -153
  587. data/spec/unit/parser/methods/foreach_spec.rb +0 -91
  588. data/spec/unit/parser/methods/reject_spec.rb +0 -73
  589. data/spec/unit/resource/resource_type.json +0 -34
@@ -5,44 +5,42 @@ module Puppet::Util::RDoc
5
5
  # launch a rdoc documenation process
6
6
  # with the files/dir passed in +files+
7
7
  def rdoc(outputdir, files, charset = nil)
8
- unless Puppet.features.rdoc1?
9
- raise "the version of RDoc included in Ruby #{::RUBY_VERSION} is not supported"
10
- end
11
-
12
- begin
13
- Puppet[:ignoreimport] = true
8
+ Puppet[:ignoreimport] = true
14
9
 
15
- # then rdoc
16
- require 'rdoc/rdoc'
17
- require 'rdoc/options'
10
+ # then rdoc
11
+ require 'rdoc/rdoc'
12
+ require 'rdoc/options'
18
13
 
19
- # load our parser
20
- require 'puppet/util/rdoc/parser'
14
+ # load our parser
15
+ require 'puppet/util/rdoc/parser'
21
16
 
22
- r = RDoc::RDoc.new
17
+ r = RDoc::RDoc.new
23
18
 
19
+ if Puppet.features.rdoc1?
24
20
  RDoc::RDoc::GENERATORS["puppet"] = RDoc::RDoc::Generator.new(
25
- "puppet/util/rdoc/generators/puppet_generator.rb",
26
- :PuppetGenerator,
27
- "puppet"
28
- )
29
-
30
- # specify our own format & where to output
31
- options = [ "--fmt", "puppet",
32
- "--quiet",
33
- "--exclude", "/modules/[^/]*/files/.*$",
34
- "--exclude", "/modules/[^/]*/templates/.*$",
35
- "--op", outputdir ]
21
+ "puppet/util/rdoc/generators/puppet_generator.rb",
22
+ :PuppetGenerator,
23
+ "puppet"
24
+ )
25
+ end
36
26
 
37
- options << "--force-update" if Options::OptionList.options.any? { |o| o[0] == "--force-update" }
38
- options += [ "--charset", charset] if charset
39
- options += files
27
+ # specify our own format & where to output
28
+ options = [ "--fmt", "puppet",
29
+ "--quiet",
30
+ "--exclude", "/modules/[^/]*/spec/.*$",
31
+ "--exclude", "/modules/[^/]*/files/.*$",
32
+ "--exclude", "/modules/[^/]*/tests/.*$",
33
+ "--exclude", "/modules/[^/]*/templates/.*$",
34
+ "--op", outputdir ]
40
35
 
41
- # launch the documentation process
42
- r.document(options)
43
- rescue RDoc::RDocError => e
44
- raise Puppet::ParseError.new("RDoc error #{e}")
36
+ if !Puppet.features.rdoc1? || ::Options::OptionList.options.any? { |o| o[0] == "--force-update" } # Options is a root object in the rdoc1 namespace...
37
+ options << "--force-update"
45
38
  end
39
+ options += [ "--charset", charset] if charset
40
+ options += files
41
+
42
+ # launch the documentation process
43
+ r.document(options)
46
44
  end
47
45
 
48
46
  # launch an output to console manifest doc
@@ -9,25 +9,20 @@ module RDoc
9
9
  # PuppetGenerator.
10
10
 
11
11
  # PuppetTopLevel is a top level (usually a .pp/.rb file)
12
- class PuppetTopLevel < TopLevel
12
+ module PuppetTopLevel
13
13
  attr_accessor :module_name, :global
14
+ end
14
15
 
15
- # will contain all plugins
16
- @@all_plugins = {}
17
-
18
- # contains all cutoms facts
19
- @@all_facts = {}
20
-
21
- def initialize(toplevel)
22
- super(toplevel.file_relative_name)
23
- end
24
-
25
- def self.all_plugins
26
- @@all_plugins.values
27
- end
28
-
29
- def self.all_facts
30
- @@all_facts.values
16
+ # Add top level comments to a class or module regardless of whether we are
17
+ # using rdoc1 or rdoc2+
18
+ # @api private
19
+ module AddClassModuleComment
20
+ def add_comment(comment, location = nil)
21
+ if PUPPET_RDOC_VERSION == 1
22
+ self.comment = comment
23
+ else
24
+ super
25
+ end
31
26
  end
32
27
  end
33
28
 
@@ -35,28 +30,67 @@ module RDoc
35
30
  # This is mapped to an HTMLPuppetModule
36
31
  # it leverage the RDoc (ruby) module infrastructure
37
32
  class PuppetModule < NormalModule
33
+ include AddClassModuleComment
34
+
38
35
  attr_accessor :facts, :plugins
39
36
 
40
37
  def initialize(name,superclass=nil)
41
38
  @facts = []
42
39
  @plugins = []
40
+ @nodes = {}
43
41
  super(name,superclass)
44
42
  end
45
43
 
46
- def initialize_classes_and_modules
47
- super
48
- @nodes = {}
44
+ def add_plugin(plugin)
45
+ if PUPPET_RDOC_VERSION == 1
46
+ add_to(@plugins, plugin)
47
+ else
48
+ add_plugin_rdoc2(plugin)
49
+ end
49
50
  end
50
51
 
51
- def add_plugin(plugin)
52
- add_to(@plugins, plugin)
52
+ def add_plugin_rdoc2(plugin)
53
+ name = plugin.name
54
+ type = plugin.type
55
+ meth = AnyMethod.new("*args", name)
56
+ meth.params = "(*args)"
57
+ meth.visibility = :public
58
+ meth.document_self = true
59
+ meth.singleton = false
60
+ meth.comment = plugin.comment
61
+ if type == 'function'
62
+ @function_container ||= add_module(NormalModule, "__functions__")
63
+ @function_container.add_method(meth)
64
+ elsif type == 'type'
65
+ @type_container ||= add_module(NormalModule, "__types__")
66
+ @type_container.add_method(meth)
67
+ end
53
68
  end
54
69
 
55
70
  def add_fact(fact)
56
- add_to(@facts, fact)
71
+ if PUPPET_RDOC_VERSION == 1
72
+ add_to(@facts, fact)
73
+ else
74
+ add_fact_rdoc2(fact)
75
+ end
76
+ end
77
+
78
+ def add_fact_rdoc2(fact)
79
+ @fact_container ||= add_module(NormalModule, "__facts__")
80
+ confine_str = fact.confine.empty? ? '' : fact.confine.to_s
81
+ const = Constant.new(fact.name, confine_str, fact.comment)
82
+ @fact_container.add_constant(const)
83
+ end
84
+
85
+ def add_node(name, superclass)
86
+ if PUPPET_RDOC_VERSION == 1
87
+ add_node_rdoc1(name, superclass)
88
+ else
89
+ add_node_rdoc2(name, superclass)
90
+ end
57
91
  end
58
92
 
59
- def add_node(name,superclass)
93
+ def add_node_rdoc1(name, superclass)
60
94
  cls = @nodes[name]
61
95
  unless cls
62
96
  cls = PuppetNode.new(name, superclass)
@@ -67,6 +101,18 @@ module RDoc
67
101
  cls
68
102
  end
69
103
 
104
+ # Adds a module called __nodes__ and adds nodes to it as classes
105
+ #
106
+ def add_node_rdoc2(name,superclass)
107
+ if cls = @nodes[name]
108
+ return cls
109
+ end
110
+ @node_container ||= add_module(NormalModule, "__nodes__")
111
+ cls = @node_container.add_class(PuppetNode, name, superclass)
112
+ @nodes[name] = cls if !@done_documenting
113
+ cls
114
+ end
115
+
70
116
  def each_fact
71
117
  @facts.each {|c| yield c}
72
118
  end
@@ -88,6 +134,8 @@ module RDoc
88
134
  # It is mapped to a HTMLPuppetClass for display
89
135
  # It leverages RDoc (ruby) Class
90
136
  class PuppetClass < ClassModule
137
+ include AddClassModuleComment
138
+
91
139
  attr_accessor :resource_list, :requires, :childs, :realizes
92
140
 
93
141
  def initialize(name, superclass)
@@ -130,7 +178,7 @@ module RDoc
130
178
  # but are written class1::class2::define we need to perform the lookup by
131
179
  # ourselves.
132
180
  def find_symbol(symbol, method=nil)
133
- result = super
181
+ result = super(symbol)
134
182
  if not result and symbol =~ /::/
135
183
  modules = symbol.split(/::/)
136
184
  unless modules.empty?
@@ -169,6 +217,8 @@ module RDoc
169
217
  # It is mapped to a HTMLPuppetNode for display
170
218
  # A node is just a variation of a class
171
219
  class PuppetNode < PuppetClass
220
+ include AddClassModuleComment
221
+
172
222
  def initialize(name, superclass)
173
223
  super(name,superclass)
174
224
  end
@@ -246,7 +246,7 @@ module Generators
246
246
  end
247
247
 
248
248
  def gen_composite_index(collection, template, filename)\
249
- return if FileTest.exists?(filename)
249
+ return if Puppet::FileSystem::File.exist?(filename)
250
250
 
251
251
  template = TemplatePage.new(RDoc::Page::FR_INDEX_BODY, template)
252
252
  res1 = []
@@ -6,492 +6,17 @@
6
6
  # rdoc mandatory includes
7
7
  require "rdoc/code_objects"
8
8
  require "puppet/util/rdoc/code_objects"
9
- require "rdoc/tokenstream"
10
9
 
11
- if ::RUBY_VERSION =~ /^1.8/
12
- require "rdoc/markup/simple_markup/preprocess"
13
- require "rdoc/parsers/parserfactory"
14
- else
15
- require "rdoc/markup/preprocess"
16
- require "rdoc/parser"
17
- end
18
-
19
- module RDoc
20
-
21
- class Parser
22
- extend ParserFactory if ::RUBY_VERSION =~ /^1.8/
23
-
24
- SITE = "__site__"
25
-
26
- attr_accessor :input_file_name, :top_level
27
-
28
- # parser registration into RDoc
29
- parse_files_matching(/\.(rb|pp)$/)
30
-
31
- # called with the top level file
32
- def initialize(top_level, file_name, content, options, stats)
33
- @options = options
34
- @stats = stats
35
- @input_file_name = file_name
36
- @top_level = PuppetTopLevel.new(top_level)
37
- @progress = $stderr unless options.quiet
38
- end
39
-
40
- # main entry point
41
- def scan
42
- environment = Puppet::Node::Environment.new
43
- @known_resource_types = environment.known_resource_types
44
- unless environment.known_resource_types.watching_file?(@input_file_name)
45
- Puppet.info "rdoc: scanning #{@input_file_name}"
46
- if @input_file_name =~ /\.pp$/
47
- @parser = Puppet::Parser::Parser.new(environment)
48
- @parser.file = @input_file_name
49
- @parser.parse.instantiate('').each do |type|
50
- @known_resource_types.add type
51
- end
52
- end
53
- end
54
-
55
- scan_top_level(@top_level)
56
- @top_level
57
- end
58
-
59
- # Due to a bug in RDoc, we need to roll our own find_module_named
60
- # The issue is that RDoc tries harder by asking the parent for a class/module
61
- # of the name. But by doing so, it can mistakenly use a module of same name
62
- # but from which we are not descendant.
63
- def find_object_named(container, name)
64
- return container if container.name == name
65
- container.each_classmodule do |m|
66
- return m if m.name == name
67
- end
68
- nil
69
- end
70
-
71
- # walk down the namespace and lookup/create container as needed
72
- def get_class_or_module(container, name)
73
-
74
- # class ::A -> A is in the top level
75
- if name =~ /^::/
76
- container = @top_level
77
- end
78
-
79
- names = name.split('::')
80
-
81
- final_name = names.pop
82
- names.each do |name|
83
- prev_container = container
84
- container = find_object_named(container, name)
85
- container ||= prev_container.add_class(PuppetClass, name, nil)
86
- end
87
- [container, final_name]
88
- end
89
-
90
- # split_module tries to find if +path+ belongs to the module path
91
- # if it does, it returns the module name, otherwise if we are sure
92
- # it is part of the global manifest path, "__site__" is returned.
93
- # And finally if this path couldn't be mapped anywhere, nil is returned.
94
- def split_module(path)
95
- # find a module
96
- fullpath = File.expand_path(path)
97
- Puppet.debug "rdoc: testing #{fullpath}"
98
- if fullpath =~ /(.*)\/([^\/]+)\/(?:manifests|plugins|lib)\/.+\.(pp|rb)$/
99
- modpath = $1
100
- name = $2
101
- Puppet.debug "rdoc: module #{name} into #{modpath} ?"
102
- Puppet::Node::Environment.new.modulepath.each do |mp|
103
- if File.identical?(modpath,mp)
104
- Puppet.debug "rdoc: found module #{name}"
105
- return name
106
- end
107
- end
108
- end
109
- if fullpath =~ /\.(pp|rb)$/
110
- # there can be paths we don't want to scan under modules
111
- # imagine a ruby or manifest that would be distributed as part as a module
112
- # but we don't want those to be hosted under <site>
113
- Puppet::Node::Environment.new.modulepath.each do |mp|
114
- # check that fullpath is a descendant of mp
115
- dirname = fullpath
116
- previous = dirname
117
- while (dirname = File.dirname(previous)) != previous
118
- previous = dirname
119
- return nil if File.identical?(dirname,mp)
120
- end
121
- end
122
- end
123
- # we are under a global manifests
124
- Puppet.debug "rdoc: global manifests"
125
- SITE
126
- end
127
-
128
- # create documentation for the top level +container+
129
- def scan_top_level(container)
130
- # use the module README as documentation for the module
131
- comment = ""
132
- %w{README README.rdoc}.each do |rfile|
133
- readme = File.join(File.dirname(File.dirname(@input_file_name)), rfile)
134
- comment = File.open(readme,"r") { |f| f.read } if FileTest.readable?(readme)
135
- end
136
- look_for_directives_in(container, comment) unless comment.empty?
137
-
138
- # infer module name from directory
139
- name = split_module(@input_file_name)
140
- if name.nil?
141
- # skip .pp files that are not in manifests directories as we can't guarantee they're part
142
- # of a module or the global configuration.
143
- container.document_self = false
144
- return
145
- end
146
-
147
- Puppet.debug "rdoc: scanning for #{name}"
148
-
149
- container.module_name = name
150
- container.global=true if name == SITE
151
-
152
- @stats.num_modules += 1
153
- container, name = get_class_or_module(container,name)
154
- mod = container.add_module(PuppetModule, name)
155
- mod.record_location(@top_level)
156
- mod.comment = comment
157
-
158
- if @input_file_name =~ /\.pp$/
159
- parse_elements(mod)
160
- elsif @input_file_name =~ /\.rb$/
161
- parse_plugins(mod)
162
- end
163
- end
164
-
165
- # create documentation for include statements we can find in +code+
166
- # and associate it with +container+
167
- def scan_for_include_or_require(container, code)
168
- code = [code] unless code.is_a?(Array)
169
- code.each do |stmt|
170
- scan_for_include_or_require(container,stmt.children) if stmt.is_a?(Puppet::Parser::AST::ASTArray)
171
-
172
- if stmt.is_a?(Puppet::Parser::AST::Function) and ['include','require'].include?(stmt.name)
173
- stmt.arguments.each do |included|
174
- Puppet.debug "found #{stmt.name}: #{included}"
175
- container.send("add_#{stmt.name}",Include.new(included.to_s, stmt.doc))
176
- end
177
- end
178
- end
179
- end
180
-
181
- # create documentation for realize statements we can find in +code+
182
- # and associate it with +container+
183
- def scan_for_realize(container, code)
184
- code = [code] unless code.is_a?(Array)
185
- code.each do |stmt|
186
- scan_for_realize(container,stmt.children) if stmt.is_a?(Puppet::Parser::AST::ASTArray)
187
-
188
- if stmt.is_a?(Puppet::Parser::AST::Function) and stmt.name == 'realize'
189
- stmt.arguments.each do |realized|
190
- Puppet.debug "found #{stmt.name}: #{realized}"
191
- container.add_realize(Include.new(realized.to_s, stmt.doc))
192
- end
193
- end
194
- end
195
- end
196
-
197
- # create documentation for global variables assignements we can find in +code+
198
- # and associate it with +container+
199
- def scan_for_vardef(container, code)
200
- code = [code] unless code.is_a?(Array)
201
- code.each do |stmt|
202
- scan_for_vardef(container,stmt.children) if stmt.is_a?(Puppet::Parser::AST::ASTArray)
203
-
204
- if stmt.is_a?(Puppet::Parser::AST::VarDef)
205
- Puppet.debug "rdoc: found constant: #{stmt.name} = #{stmt.value}"
206
- container.add_constant(Constant.new(stmt.name.to_s, stmt.value.to_s, stmt.doc))
207
- end
208
- end
209
- end
210
-
211
- # create documentation for resources we can find in +code+
212
- # and associate it with +container+
213
- def scan_for_resource(container, code)
214
- code = [code] unless code.is_a?(Array)
215
- code.each do |stmt|
216
- scan_for_resource(container,stmt.children) if stmt.is_a?(Puppet::Parser::AST::ASTArray)
217
-
218
- if stmt.is_a?(Puppet::Parser::AST::Resource) and !stmt.type.nil?
219
- begin
220
- type = stmt.type.split("::").collect { |s| s.capitalize }.join("::")
221
- stmt.instances.each do |inst|
222
- title = inst.title.is_a?(Puppet::Parser::AST::ASTArray) ? inst.title.to_s.gsub(/\[(.*)\]/,'\1') : inst.title.to_s
223
- Puppet.debug "rdoc: found resource: #{type}[#{title}]"
224
-
225
- param = []
226
- inst.parameters.children.each do |p|
227
- res = {}
228
- res["name"] = p.param
229
- res["value"] = "#{p.value.to_s}" unless p.value.nil?
230
-
231
- param << res
232
- end
233
-
234
- container.add_resource(PuppetResource.new(type, title, stmt.doc, param))
235
- end
236
- rescue => detail
237
- raise Puppet::ParseError, "impossible to parse resource in #{stmt.file} at line #{stmt.line}: #{detail}"
238
- end
239
- end
240
- end
241
- end
242
-
243
- def resource_stmt_to_ref(stmt)
244
- type = stmt.type.split("::").collect { |s| s.capitalize }.join("::")
245
- title = stmt.title.is_a?(Puppet::Parser::AST::ASTArray) ? stmt.title.to_s.gsub(/\[(.*)\]/,'\1') : stmt.title.to_s
246
-
247
- param = stmt.params.children.collect do |p|
248
- {"name" => p.param, "value" => p.value.to_s}
249
- end
250
- PuppetResource.new(type, title, stmt.doc, param)
251
- end
252
-
253
- # create documentation for a class named +name+
254
- def document_class(name, klass, container)
255
- Puppet.debug "rdoc: found new class #{name}"
256
- container, name = get_class_or_module(container, name)
257
-
258
- superclass = klass.parent
259
- superclass = "" if superclass.nil? or superclass.empty?
260
-
261
- @stats.num_classes += 1
262
- comment = klass.doc
263
- look_for_directives_in(container, comment) unless comment.empty?
264
- cls = container.add_class(PuppetClass, name, superclass)
265
- # it is possible we already encountered this class, while parsing some namespaces
266
- # from other classes of other files. But at that time we couldn't know this class superclass
267
- # so, now we know it and force it.
268
- cls.superclass = superclass
269
- cls.record_location(@top_level)
270
-
271
- # scan class code for include
272
- code = klass.code.children if klass.code.is_a?(Puppet::Parser::AST::ASTArray)
273
- code ||= klass.code
274
- unless code.nil?
275
- scan_for_include_or_require(cls, code)
276
- scan_for_realize(cls, code)
277
- scan_for_resource(cls, code) if Puppet.settings[:document_all]
278
- end
279
-
280
- cls.comment = comment
281
- rescue => detail
282
- raise Puppet::ParseError, "impossible to parse class '#{name}' in #{klass.file} at line #{klass.line}: #{detail}"
283
- end
284
-
285
- # create documentation for a node
286
- def document_node(name, node, container)
287
- Puppet.debug "rdoc: found new node #{name}"
288
- superclass = node.parent
289
- superclass = "" if superclass.nil? or superclass.empty?
290
-
291
- comment = node.doc
292
- look_for_directives_in(container, comment) unless comment.empty?
293
- n = container.add_node(name, superclass)
294
- n.record_location(@top_level)
295
-
296
- code = node.code.children if node.code.is_a?(Puppet::Parser::AST::ASTArray)
297
- code ||= node.code
298
- unless code.nil?
299
- scan_for_include_or_require(n, code)
300
- scan_for_realize(n, code)
301
- scan_for_vardef(n, code)
302
- scan_for_resource(n, code) if Puppet.settings[:document_all]
303
- end
304
-
305
- n.comment = comment
306
- rescue => detail
307
- raise Puppet::ParseError, "impossible to parse node '#{name}' in #{node.file} at line #{node.line}: #{detail}"
308
- end
309
-
310
- # create documentation for a define
311
- def document_define(name, define, container)
312
- Puppet.debug "rdoc: found new definition #{name}"
313
- # find superclas if any
314
- @stats.num_methods += 1
315
-
316
- # find the parent
317
- # split define name by :: to find the complete module hierarchy
318
- container, name = get_class_or_module(container,name)
319
-
320
- # build up declaration
321
- declaration = ""
322
- define.arguments.each do |arg,value|
323
- declaration << "\$#{arg}"
324
- unless value.nil?
325
- declaration << " => "
326
- case value
327
- when Puppet::Parser::AST::Leaf
328
- declaration << "'#{value.value}'"
329
- when Puppet::Parser::AST::ASTArray
330
- declaration << "[#{value.children.collect { |v| "'#{v}'" }.join(", ")}]"
331
- else
332
- declaration << "#{value.to_s}"
333
- end
334
- end
335
- declaration << ", "
336
- end
337
- declaration.chop!.chop! if declaration.size > 1
338
-
339
- # register method into the container
340
- meth = AnyMethod.new(declaration, name)
341
- meth.comment = define.doc
342
- container.add_method(meth)
343
- look_for_directives_in(container, meth.comment) unless meth.comment.empty?
344
- meth.params = "( #{declaration} )"
345
- meth.visibility = :public
346
- meth.document_self = true
347
- meth.singleton = false
348
- rescue => detail
349
- raise Puppet::ParseError, "impossible to parse definition '#{name}' in #{define.file} at line #{define.line}: #{detail}"
350
- end
351
-
352
- # Traverse the AST tree and produce code-objects node
353
- # that contains the documentation
354
- def parse_elements(container)
355
- Puppet.debug "rdoc: scanning manifest"
356
-
357
- @known_resource_types.hostclasses.values.sort { |a,b| a.name <=> b.name }.each do |klass|
358
- name = klass.name
359
- if klass.file == @input_file_name
360
- unless name.empty?
361
- document_class(name,klass,container)
362
- else # on main class document vardefs
363
- code = klass.code.children if klass.code.is_a?(Puppet::Parser::AST::ASTArray)
364
- code ||= klass.code
365
- scan_for_vardef(container, code) unless code.nil?
366
- end
367
- end
368
- end
369
-
370
- @known_resource_types.definitions.each do |name, define|
371
- if define.file == @input_file_name
372
- document_define(name,define,container)
373
- end
374
- end
375
-
376
- @known_resource_types.nodes.each do |name, node|
377
- if node.file == @input_file_name
378
- document_node(name.to_s,node,container)
379
- end
380
- end
381
- end
382
-
383
- # create documentation for plugins
384
- def parse_plugins(container)
385
- Puppet.debug "rdoc: scanning plugin or fact"
386
- if @input_file_name =~ /\/facter\/[^\/]+\.rb$/
387
- parse_fact(container)
388
- else
389
- parse_puppet_plugin(container)
390
- end
391
- end
392
-
393
- # this is a poor man custom fact parser :-)
394
- def parse_fact(container)
395
- comments = ""
396
- current_fact = nil
397
- File.open(@input_file_name) do |of|
398
- of.each do |line|
399
- # fetch comments
400
- if line =~ /^[ \t]*# ?(.*)$/
401
- comments += $1 + "\n"
402
- elsif line =~ /^[ \t]*Facter.add\(['"](.*?)['"]\)/
403
- current_fact = Fact.new($1,{})
404
- look_for_directives_in(container, comments) unless comments.empty?
405
- current_fact.comment = comments
406
- container.add_fact(current_fact)
407
- current_fact.record_location(@top_level)
408
- comments = ""
409
- Puppet.debug "rdoc: found custom fact #{current_fact.name}"
410
- elsif line =~ /^[ \t]*confine[ \t]*:(.*?)[ \t]*=>[ \t]*(.*)$/
411
- current_fact.confine = { :type => $1, :value => $2 } unless current_fact.nil?
412
- else # unknown line type
413
- comments =""
414
- end
415
- end
416
- end
417
- end
418
-
419
- # this is a poor man puppet plugin parser :-)
420
- # it doesn't extract doc nor desc :-(
421
- def parse_puppet_plugin(container)
422
- comments = ""
423
- current_plugin = nil
424
-
425
- File.open(@input_file_name) do |of|
426
- of.each do |line|
427
- # fetch comments
428
- if line =~ /^[ \t]*# ?(.*)$/
429
- comments += $1 + "\n"
430
- elsif line =~ /^[ \t]*newfunction[ \t]*\([ \t]*:(.*?)[ \t]*,[ \t]*:type[ \t]*=>[ \t]*(:rvalue|:lvalue)\)/
431
- current_plugin = Plugin.new($1, "function")
432
- container.add_plugin(current_plugin)
433
- look_for_directives_in(container, comments) unless comments.empty?
434
- current_plugin.comment = comments
435
- current_plugin.record_location(@top_level)
436
- comments = ""
437
- Puppet.debug "rdoc: found new function plugins #{current_plugin.name}"
438
- elsif line =~ /^[ \t]*Puppet::Type.newtype[ \t]*\([ \t]*:(.*?)\)/
439
- current_plugin = Plugin.new($1, "type")
440
- container.add_plugin(current_plugin)
441
- look_for_directives_in(container, comments) unless comments.empty?
442
- current_plugin.comment = comments
443
- current_plugin.record_location(@top_level)
444
- comments = ""
445
- Puppet.debug "rdoc: found new type plugins #{current_plugin.name}"
446
- elsif line =~ /module Puppet::Parser::Functions/
447
- # skip
448
- else # unknown line type
449
- comments =""
450
- end
451
- end
452
- end
453
- end
454
-
455
- # look_for_directives_in scans the current +comment+ for RDoc directives
456
- def look_for_directives_in(context, comment)
457
- preprocess = SM::PreProcess.new(@input_file_name, @options.rdoc_include)
458
-
459
- preprocess.handle(comment) do |directive, param|
460
- case directive
461
- when "stopdoc"
462
- context.stop_doc
463
- ""
464
- when "startdoc"
465
- context.start_doc
466
- context.force_documentation = true
467
- ""
468
- when "enddoc"
469
- #context.done_documenting = true
470
- #""
471
- throw :enddoc
472
- when "main"
473
- options = Options.instance
474
- options.main_page = param
475
- ""
476
- when "title"
477
- options = Options.instance
478
- options.title = param
479
- ""
480
- when "section"
481
- context.set_current_section(param, comment)
482
- comment.replace("") # 1.8 doesn't support #clear
483
- break
484
- else
485
- warn "Unrecognized directive '#{directive}'"
486
- break
487
- end
488
- end
489
- remove_private_comments(comment)
490
- end
491
-
492
- def remove_private_comments(comment)
493
- comment.gsub!(/^#--.*?^#\+\+/m, '')
494
- comment.sub!(/^#--.*/m, '')
495
- end
496
- end
10
+ begin
11
+ # Rdoc 1 imports
12
+ require "rdoc/tokenstream"
13
+ require "rdoc/markup/simple_markup/preprocess"
14
+ require "rdoc/parsers/parserfactory"
15
+ require "puppet/util/rdoc/parser/puppet_parser_rdoc1.rb"
16
+ rescue LoadError
17
+ # Current version imports
18
+ require "rdoc/token_stream"
19
+ require "rdoc/markup/pre_process"
20
+ require "rdoc/parser"
21
+ require "puppet/util/rdoc/parser/puppet_parser_rdoc2.rb"
497
22
  end