puppet 3.4.3 → 3.5.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 (811) hide show
  1. data/CONTRIBUTING.md +6 -6
  2. data/Gemfile +22 -16
  3. data/LICENSE +1 -1
  4. data/README.md +33 -11
  5. data/Rakefile +1 -1
  6. data/conf/auth.conf +4 -0
  7. data/ext/build_defaults.yaml +1 -1
  8. data/ext/debian/control +6 -6
  9. data/ext/ips/transforms +1 -1
  10. data/ext/nagios/naggen +1 -1
  11. data/ext/project_data.yaml +21 -1
  12. data/ext/puppet-test +3 -3
  13. data/ext/redhat/puppet.spec.erb +28 -2
  14. data/ext/suse/puppet.spec +1 -1
  15. data/ext/upload_facts.rb +1 -1
  16. data/ext/windows/service/daemon.rb +99 -20
  17. data/lib/hiera_puppet.rb +2 -2
  18. data/lib/puppet.rb +68 -5
  19. data/lib/puppet/agent.rb +5 -1
  20. data/lib/puppet/application.rb +20 -11
  21. data/lib/puppet/application/agent.rb +1 -1
  22. data/lib/puppet/application/apply.rb +61 -41
  23. data/lib/puppet/application/cert.rb +3 -3
  24. data/lib/puppet/application/device.rb +7 -8
  25. data/lib/puppet/application/doc.rb +1 -1
  26. data/lib/puppet/application/filebucket.rb +3 -3
  27. data/lib/puppet/application/kick.rb +2 -2
  28. data/lib/puppet/application/master.rb +1 -1
  29. data/lib/puppet/application/queue.rb +9 -9
  30. data/lib/puppet/application/resource.rb +2 -2
  31. data/lib/puppet/bindings.rb +6 -6
  32. data/lib/puppet/configurer.rb +17 -14
  33. data/lib/puppet/configurer/fact_handler.rb +1 -1
  34. data/lib/puppet/confine/any.rb +26 -0
  35. data/lib/puppet/confine/exists.rb +1 -1
  36. data/lib/puppet/confiner.rb +1 -0
  37. data/lib/puppet/context.rb +55 -0
  38. data/lib/puppet/context/trusted_information.rb +56 -0
  39. data/lib/puppet/defaults.rb +97 -26
  40. data/lib/puppet/environments.rb +187 -0
  41. data/lib/puppet/error.rb +2 -1
  42. data/lib/puppet/external/pson/common.rb +1 -1
  43. data/lib/puppet/external/pson/pure/generator.rb +1 -1
  44. data/lib/puppet/external/pson/pure/parser.rb +1 -1
  45. data/lib/puppet/face/config.rb +73 -15
  46. data/lib/puppet/face/file/store.rb +1 -1
  47. data/lib/puppet/face/help.rb +2 -1
  48. data/lib/puppet/face/help/action.erb +1 -0
  49. data/lib/puppet/face/help/face.erb +1 -0
  50. data/lib/puppet/face/help/global.erb +1 -0
  51. data/lib/puppet/face/help/man.erb +9 -8
  52. data/lib/puppet/face/module/list.rb +13 -7
  53. data/lib/puppet/face/node/clean.rb +2 -2
  54. data/lib/puppet/face/parser.rb +11 -5
  55. data/lib/puppet/face/status.rb +1 -1
  56. data/lib/puppet/feature/external_facts.rb +2 -2
  57. data/lib/puppet/feature/libuser.rb +1 -1
  58. data/lib/puppet/feature/msgpack.rb +2 -0
  59. data/lib/puppet/feature/rails.rb +2 -2
  60. data/lib/puppet/file_bucket/dipper.rb +9 -9
  61. data/lib/puppet/file_bucket/file.rb +9 -5
  62. data/lib/puppet/file_serving/base.rb +1 -1
  63. data/lib/puppet/file_serving/configuration.rb +1 -1
  64. data/lib/puppet/file_serving/configuration/parser.rb +3 -3
  65. data/lib/puppet/file_serving/content.rb +2 -2
  66. data/lib/puppet/file_serving/fileset.rb +4 -4
  67. data/lib/puppet/file_serving/metadata.rb +69 -15
  68. data/lib/puppet/file_serving/mount/file.rb +1 -1
  69. data/lib/puppet/file_system.rb +361 -1
  70. data/lib/puppet/file_system/file18.rb +3 -3
  71. data/lib/puppet/file_system/file19.rb +3 -3
  72. data/lib/puppet/file_system/file19windows.rb +18 -23
  73. data/lib/puppet/file_system/file_impl.rb +145 -0
  74. data/lib/puppet/file_system/memory_file.rb +23 -9
  75. data/lib/puppet/file_system/memory_impl.rb +64 -0
  76. data/lib/puppet/forge.rb +4 -3
  77. data/lib/puppet/forge/repository.rb +0 -1
  78. data/lib/puppet/graph/relationship_graph.rb +7 -7
  79. data/lib/puppet/indirector.rb +1 -0
  80. data/lib/puppet/indirector/catalog/compiler.rb +3 -30
  81. data/lib/puppet/indirector/catalog/msgpack.rb +6 -0
  82. data/lib/puppet/indirector/catalog/static_compiler.rb +3 -7
  83. data/lib/puppet/indirector/data_binding/hiera.rb +1 -1
  84. data/lib/puppet/indirector/direct_file_server.rb +2 -2
  85. data/lib/puppet/indirector/exec.rb +1 -1
  86. data/lib/puppet/indirector/face.rb +3 -2
  87. data/lib/puppet/indirector/facts/facter.rb +1 -1
  88. data/lib/puppet/indirector/file_bucket_file/file.rb +25 -15
  89. data/lib/puppet/indirector/file_metadata/file.rb +1 -1
  90. data/lib/puppet/indirector/file_server.rb +1 -1
  91. data/lib/puppet/indirector/indirection.rb +1 -1
  92. data/lib/puppet/indirector/json.rb +4 -4
  93. data/lib/puppet/indirector/key/file.rb +8 -5
  94. data/lib/puppet/indirector/ldap.rb +1 -1
  95. data/lib/puppet/indirector/memory.rb +4 -0
  96. data/lib/puppet/indirector/msgpack.rb +82 -0
  97. data/lib/puppet/indirector/node/exec.rb +1 -1
  98. data/lib/puppet/indirector/node/ldap.rb +3 -3
  99. data/lib/puppet/indirector/node/msgpack.rb +7 -0
  100. data/lib/puppet/indirector/node/yaml.rb +15 -0
  101. data/lib/puppet/indirector/queue.rb +3 -2
  102. data/lib/puppet/indirector/report/msgpack.rb +11 -0
  103. data/lib/puppet/indirector/request.rb +17 -20
  104. data/lib/puppet/indirector/resource/rest.rb +1 -1
  105. data/lib/puppet/indirector/resource_type/parser.rb +3 -13
  106. data/lib/puppet/indirector/rest.rb +6 -7
  107. data/lib/puppet/indirector/ssl_file.rb +7 -7
  108. data/lib/puppet/indirector/yaml.rb +9 -13
  109. data/lib/puppet/metatype/manager.rb +12 -7
  110. data/lib/puppet/module.rb +14 -9
  111. data/lib/puppet/module_tool.rb +21 -26
  112. data/lib/puppet/module_tool/applications/application.rb +1 -1
  113. data/lib/puppet/module_tool/applications/generator.rb +2 -1
  114. data/lib/puppet/module_tool/applications/installer.rb +9 -4
  115. data/lib/puppet/module_tool/applications/uninstaller.rb +10 -7
  116. data/lib/puppet/module_tool/applications/unpacker.rb +1 -1
  117. data/lib/puppet/module_tool/applications/upgrader.rb +11 -8
  118. data/lib/puppet/module_tool/checksums.rb +1 -1
  119. data/lib/puppet/module_tool/contents_description.rb +2 -0
  120. data/lib/puppet/module_tool/dependency.rb +4 -5
  121. data/lib/puppet/module_tool/errors.rb +2 -0
  122. data/lib/puppet/module_tool/install_directory.rb +3 -0
  123. data/lib/puppet/module_tool/metadata.rb +3 -5
  124. data/lib/puppet/module_tool/modulefile.rb +3 -0
  125. data/lib/puppet/module_tool/shared_behaviors.rb +6 -1
  126. data/lib/puppet/module_tool/skeleton.rb +3 -0
  127. data/lib/puppet/module_tool/tar.rb +3 -0
  128. data/lib/puppet/network/auth_config_parser.rb +1 -1
  129. data/lib/puppet/network/authconfig.rb +5 -2
  130. data/lib/puppet/network/authentication.rb +7 -2
  131. data/lib/puppet/network/authorization.rb +2 -2
  132. data/lib/puppet/network/format_support.rb +4 -0
  133. data/lib/puppet/network/formats.rb +9 -14
  134. data/lib/puppet/network/http.rb +11 -0
  135. data/lib/puppet/network/http/api.rb +0 -2
  136. data/lib/puppet/network/http/api/v1.rb +146 -11
  137. data/lib/puppet/network/http/api/v2.rb +32 -0
  138. data/lib/puppet/network/http/api/v2/authorization.rb +13 -0
  139. data/lib/puppet/network/http/api/v2/environments.rb +21 -0
  140. data/lib/puppet/network/http/connection.rb +94 -37
  141. data/lib/puppet/network/http/error.rb +69 -0
  142. data/lib/puppet/network/http/handler.rb +28 -196
  143. data/lib/puppet/network/http/issues.rb +9 -0
  144. data/lib/puppet/network/http/memory_response.rb +13 -0
  145. data/lib/puppet/network/http/rack/rest.rb +10 -18
  146. data/lib/puppet/network/http/request.rb +56 -0
  147. data/lib/puppet/network/http/response.rb +11 -0
  148. data/lib/puppet/network/http/route.rb +91 -0
  149. data/lib/puppet/network/http/webrick.rb +1 -1
  150. data/lib/puppet/network/http/webrick/rest.rb +7 -12
  151. data/lib/puppet/network/http_pool.rb +3 -3
  152. data/lib/puppet/network/rights.rb +4 -4
  153. data/lib/puppet/node.rb +23 -14
  154. data/lib/puppet/node/environment.rb +149 -125
  155. data/lib/puppet/node/facts.rb +6 -5
  156. data/lib/puppet/parameter.rb +1 -1
  157. data/lib/puppet/parser/ast.rb +1 -1
  158. data/lib/puppet/parser/ast/block_expression.rb +1 -6
  159. data/lib/puppet/parser/ast/collexpr.rb +54 -2
  160. data/lib/puppet/parser/ast/lambda.rb +9 -0
  161. data/lib/puppet/parser/ast/leaf.rb +15 -0
  162. data/lib/puppet/parser/ast/pops_bridge.rb +168 -0
  163. data/lib/puppet/parser/code_merger.rb +13 -0
  164. data/lib/puppet/parser/collector.rb +1 -1
  165. data/lib/puppet/parser/compiler.rb +28 -30
  166. data/lib/puppet/parser/e4_parser_adapter.rb +81 -0
  167. data/lib/puppet/parser/e_parser_adapter.rb +0 -1
  168. data/lib/puppet/parser/files.rb +12 -7
  169. data/lib/puppet/parser/functions.rb +36 -29
  170. data/lib/puppet/parser/functions/collect.rb +1 -1
  171. data/lib/puppet/parser/functions/defined.rb +40 -16
  172. data/lib/puppet/parser/functions/each.rb +55 -41
  173. data/lib/puppet/parser/functions/epp.rb +41 -0
  174. data/lib/puppet/parser/functions/extlookup.rb +2 -2
  175. data/lib/puppet/parser/functions/file.rb +1 -1
  176. data/lib/puppet/parser/functions/filter.rb +68 -16
  177. data/lib/puppet/parser/functions/generate.rb +1 -1
  178. data/lib/puppet/parser/functions/include.rb +3 -2
  179. data/lib/puppet/parser/functions/inline_epp.rb +79 -0
  180. data/lib/puppet/parser/functions/inline_template.rb +1 -1
  181. data/lib/puppet/parser/functions/lookup.rb +127 -27
  182. data/lib/puppet/parser/functions/map.rb +64 -12
  183. data/lib/puppet/parser/functions/reduce.rb +40 -16
  184. data/lib/puppet/parser/functions/select.rb +1 -1
  185. data/lib/puppet/parser/functions/slice.rb +42 -23
  186. data/lib/puppet/parser/grammar.ra +3 -0
  187. data/lib/puppet/parser/lexer.rb +10 -9
  188. data/lib/puppet/parser/parser.rb +15 -12
  189. data/lib/puppet/parser/parser_factory.rb +26 -1
  190. data/lib/puppet/parser/parser_support.rb +13 -4
  191. data/lib/puppet/parser/resource.rb +1 -1
  192. data/lib/puppet/parser/scope.rb +246 -97
  193. data/lib/puppet/parser/templatewrapper.rb +1 -1
  194. data/lib/puppet/parser/type_loader.rb +13 -2
  195. data/lib/puppet/pops.rb +15 -1
  196. data/lib/puppet/pops/adapters.rb +64 -32
  197. data/lib/puppet/pops/binder/binder.rb +122 -150
  198. data/lib/puppet/pops/binder/binder_issues.rb +1 -21
  199. data/lib/puppet/pops/binder/bindings_checker.rb +0 -20
  200. data/lib/puppet/pops/binder/bindings_composer.rb +4 -70
  201. data/lib/puppet/pops/binder/bindings_factory.rb +16 -58
  202. data/lib/puppet/pops/binder/bindings_label_provider.rb +0 -3
  203. data/lib/puppet/pops/binder/bindings_loader.rb +13 -4
  204. data/lib/puppet/pops/binder/bindings_model.rb +17 -31
  205. data/lib/puppet/pops/binder/bindings_model_dumper.rb +2 -20
  206. data/lib/puppet/pops/binder/config/binder_config.rb +8 -40
  207. data/lib/puppet/pops/binder/config/binder_config_checker.rb +2 -43
  208. data/lib/puppet/pops/binder/config/issues.rb +1 -21
  209. data/lib/puppet/pops/binder/injector.rb +86 -7
  210. data/lib/puppet/pops/binder/injector_entry.rb +6 -2
  211. data/lib/puppet/pops/binder/key_factory.rb +7 -1
  212. data/lib/puppet/pops/binder/lookup.rb +191 -0
  213. data/lib/puppet/pops/binder/producers.rb +5 -5
  214. data/lib/puppet/pops/binder/scheme_handler/symbolic_scheme.rb +2 -3
  215. data/lib/puppet/pops/binder/system_bindings.rb +4 -16
  216. data/lib/puppet/pops/containment.rb +72 -5
  217. data/lib/puppet/pops/evaluator/access_operator.rb +548 -0
  218. data/lib/puppet/pops/evaluator/closure.rb +57 -0
  219. data/lib/puppet/pops/evaluator/compare_operator.rb +168 -0
  220. data/lib/puppet/pops/evaluator/epp_evaluator.rb +87 -0
  221. data/lib/puppet/pops/evaluator/evaluator_impl.rb +1069 -0
  222. data/lib/puppet/pops/evaluator/external_syntax_support.rb +49 -0
  223. data/lib/puppet/pops/evaluator/relationship_operator.rb +156 -0
  224. data/lib/puppet/pops/evaluator/runtime3_support.rb +489 -0
  225. data/lib/puppet/pops/issue_reporter.rb +8 -4
  226. data/lib/puppet/pops/issues.rb +199 -4
  227. data/lib/puppet/pops/label_provider.rb +5 -0
  228. data/lib/puppet/pops/model/ast_transformer.rb +55 -31
  229. data/lib/puppet/pops/model/ast_tree_dumper.rb +9 -1
  230. data/lib/puppet/pops/model/factory.rb +265 -111
  231. data/lib/puppet/pops/model/model.rb +179 -140
  232. data/lib/puppet/pops/model/model_label_provider.rb +38 -9
  233. data/lib/puppet/pops/model/model_tree_dumper.rb +38 -13
  234. data/lib/puppet/pops/parser/code_merger.rb +17 -0
  235. data/lib/puppet/pops/parser/egrammar.ra +110 -61
  236. data/lib/puppet/pops/parser/eparser.rb +1415 -1092
  237. data/lib/puppet/pops/parser/epp_parser.rb +51 -0
  238. data/lib/puppet/pops/parser/epp_support.rb +247 -0
  239. data/lib/puppet/pops/parser/evaluating_parser.rb +53 -15
  240. data/lib/puppet/pops/parser/heredoc_support.rb +139 -0
  241. data/lib/puppet/pops/parser/interpolation_support.rb +227 -0
  242. data/lib/puppet/pops/parser/lexer.rb +83 -192
  243. data/lib/puppet/pops/parser/lexer2.rb +684 -0
  244. data/lib/puppet/pops/parser/lexer_support.rb +107 -0
  245. data/lib/puppet/pops/parser/locatable.rb +23 -0
  246. data/lib/puppet/pops/parser/locator.rb +291 -0
  247. data/lib/puppet/pops/parser/makefile +1 -8
  248. data/lib/puppet/pops/parser/parser_support.rb +76 -48
  249. data/lib/puppet/pops/parser/slurp_support.rb +95 -0
  250. data/lib/puppet/pops/patterns.rb +13 -4
  251. data/lib/puppet/pops/types/class_loader.rb +2 -2
  252. data/lib/puppet/pops/types/enumeration.rb +34 -0
  253. data/lib/puppet/pops/types/type_calculator.rb +983 -58
  254. data/lib/puppet/pops/types/type_factory.rb +203 -15
  255. data/lib/puppet/pops/types/type_parser.rb +355 -12
  256. data/lib/puppet/pops/types/types.rb +314 -24
  257. data/lib/puppet/pops/utils.rb +23 -7
  258. data/lib/puppet/pops/validation.rb +14 -8
  259. data/lib/puppet/pops/validation/checker3_1.rb +17 -12
  260. data/lib/puppet/pops/validation/checker4_0.rb +514 -0
  261. data/lib/puppet/pops/validation/validator_factory_4_0.rb +31 -0
  262. data/lib/puppet/pops/visitor.rb +146 -4
  263. data/lib/puppet/property.rb +1 -1
  264. data/lib/puppet/property/ensure.rb +1 -1
  265. data/lib/puppet/provider.rb +47 -26
  266. data/lib/puppet/provider/aixobject.rb +3 -3
  267. data/lib/puppet/provider/augeas/augeas.rb +11 -11
  268. data/lib/puppet/provider/cron/crontab.rb +10 -1
  269. data/lib/puppet/provider/exec.rb +1 -1
  270. data/lib/puppet/provider/exec/posix.rb +1 -1
  271. data/lib/puppet/provider/exec/windows.rb +1 -1
  272. data/lib/puppet/provider/file/posix.rb +2 -2
  273. data/lib/puppet/provider/file/windows.rb +15 -9
  274. data/lib/puppet/provider/group/aix.rb +2 -2
  275. data/lib/puppet/provider/macauthorization/macauthorization.rb +3 -3
  276. data/lib/puppet/provider/mount.rb +7 -0
  277. data/lib/puppet/provider/mount/parsed.rb +0 -1
  278. data/lib/puppet/provider/naginator.rb +1 -1
  279. data/lib/puppet/provider/nameservice.rb +3 -3
  280. data/lib/puppet/provider/nameservice/directoryservice.rb +3 -3
  281. data/lib/puppet/provider/package/aix.rb +1 -1
  282. data/lib/puppet/provider/package/appdmg.rb +1 -4
  283. data/lib/puppet/provider/package/apple.rb +1 -1
  284. data/lib/puppet/provider/package/apt.rb +1 -1
  285. data/lib/puppet/provider/package/blastwave.rb +1 -1
  286. data/lib/puppet/provider/package/fink.rb +1 -1
  287. data/lib/puppet/provider/package/gem.rb +3 -3
  288. data/lib/puppet/provider/package/openbsd.rb +6 -4
  289. data/lib/puppet/provider/package/pacman.rb +58 -5
  290. data/lib/puppet/provider/package/pip.rb +2 -2
  291. data/lib/puppet/provider/package/pkgdmg.rb +25 -10
  292. data/lib/puppet/provider/package/pkgin.rb +48 -23
  293. data/lib/puppet/provider/package/pkgutil.rb +1 -1
  294. data/lib/puppet/provider/package/ports.rb +1 -1
  295. data/lib/puppet/provider/package/portupgrade.rb +7 -7
  296. data/lib/puppet/provider/package/rpm.rb +16 -8
  297. data/lib/puppet/provider/package/windows.rb +1 -1
  298. data/lib/puppet/provider/package/windows/package.rb +1 -1
  299. data/lib/puppet/provider/parsedfile.rb +1 -1
  300. data/lib/puppet/provider/selboolean/getsetsebool.rb +1 -1
  301. data/lib/puppet/provider/selmodule/semodule.rb +5 -5
  302. data/lib/puppet/provider/service/base.rb +1 -1
  303. data/lib/puppet/provider/service/bsd.rb +3 -3
  304. data/lib/puppet/provider/service/daemontools.rb +20 -20
  305. data/lib/puppet/provider/service/debian.rb +1 -1
  306. data/lib/puppet/provider/service/freebsd.rb +3 -3
  307. data/lib/puppet/provider/service/gentoo.rb +2 -2
  308. data/lib/puppet/provider/service/init.rb +5 -5
  309. data/lib/puppet/provider/service/launchd.rb +4 -4
  310. data/lib/puppet/provider/service/redhat.rb +2 -2
  311. data/lib/puppet/provider/service/runit.rb +4 -4
  312. data/lib/puppet/provider/service/service.rb +3 -4
  313. data/lib/puppet/provider/service/smf.rb +1 -1
  314. data/lib/puppet/provider/service/src.rb +3 -3
  315. data/lib/puppet/provider/service/systemd.rb +4 -4
  316. data/lib/puppet/provider/service/upstart.rb +22 -7
  317. data/lib/puppet/provider/service/windows.rb +7 -7
  318. data/lib/puppet/provider/ssh_authorized_key/parsed.rb +3 -3
  319. data/lib/puppet/provider/user/aix.rb +5 -5
  320. data/lib/puppet/provider/user/directoryservice.rb +8 -5
  321. data/lib/puppet/provider/user/ldap.rb +1 -1
  322. data/lib/puppet/provider/user/pw.rb +1 -1
  323. data/lib/puppet/provider/user/user_role_add.rb +2 -2
  324. data/lib/puppet/provider/user/useradd.rb +19 -5
  325. data/lib/puppet/provider/yumrepo/inifile.rb +187 -0
  326. data/lib/puppet/provider/zone/solaris.rb +4 -4
  327. data/lib/puppet/rails.rb +16 -11
  328. data/lib/puppet/rails/benchmark.rb +1 -1
  329. data/lib/puppet/rails/resource.rb +5 -1
  330. data/lib/puppet/reference/configuration.rb +1 -1
  331. data/lib/puppet/reference/report.rb +1 -1
  332. data/lib/puppet/relationship.rb +10 -5
  333. data/lib/puppet/reports/http.rb +8 -2
  334. data/lib/puppet/reports/rrdgraph.rb +1 -1
  335. data/lib/puppet/reports/store.rb +3 -3
  336. data/lib/puppet/reports/tagmail.rb +4 -4
  337. data/lib/puppet/resource.rb +37 -44
  338. data/lib/puppet/resource/catalog.rb +18 -20
  339. data/lib/puppet/resource/status.rb +7 -6
  340. data/lib/puppet/resource/type.rb +6 -5
  341. data/lib/puppet/resource/type_collection.rb +2 -2
  342. data/lib/puppet/run.rb +9 -8
  343. data/lib/puppet/settings.rb +395 -244
  344. data/lib/puppet/settings/base_setting.rb +10 -4
  345. data/lib/puppet/settings/config_file.rb +81 -44
  346. data/lib/puppet/settings/directory_setting.rb +1 -2
  347. data/lib/puppet/settings/file_setting.rb +12 -5
  348. data/lib/puppet/settings/ini_file.rb +171 -0
  349. data/lib/puppet/ssl/base.rb +4 -0
  350. data/lib/puppet/ssl/certificate_authority.rb +16 -11
  351. data/lib/puppet/ssl/certificate_authority/interface.rb +3 -2
  352. data/lib/puppet/ssl/certificate_factory.rb +50 -5
  353. data/lib/puppet/ssl/certificate_request.rb +2 -2
  354. data/lib/puppet/ssl/certificate_request_attributes.rb +1 -1
  355. data/lib/puppet/ssl/certificate_revocation_list.rb +3 -1
  356. data/lib/puppet/ssl/host.rb +9 -8
  357. data/lib/puppet/ssl/inventory.rb +1 -1
  358. data/lib/puppet/ssl/key.rb +1 -1
  359. data/lib/puppet/ssl/validator/default_validator.rb +1 -1
  360. data/lib/puppet/status.rb +8 -7
  361. data/lib/puppet/test/test_helper.rb +35 -4
  362. data/lib/puppet/transaction/event.rb +6 -5
  363. data/lib/puppet/transaction/report.rb +10 -10
  364. data/lib/puppet/type.rb +1 -3
  365. data/lib/puppet/type/augeas.rb +2 -1
  366. data/lib/puppet/type/cron.rb +41 -11
  367. data/lib/puppet/type/exec.rb +5 -5
  368. data/lib/puppet/type/file.rb +42 -4
  369. data/lib/puppet/type/file/content.rb +5 -6
  370. data/lib/puppet/type/file/ensure.rb +3 -3
  371. data/lib/puppet/type/file/source.rb +12 -6
  372. data/lib/puppet/type/file/target.rb +5 -5
  373. data/lib/puppet/type/k5login.rb +4 -4
  374. data/lib/puppet/type/mount.rb +1 -1
  375. data/lib/puppet/type/package.rb +79 -3
  376. data/lib/puppet/type/resources.rb +34 -5
  377. data/lib/puppet/type/selboolean.rb +1 -1
  378. data/lib/puppet/type/selmodule.rb +1 -1
  379. data/lib/puppet/type/ssh_authorized_key.rb +2 -1
  380. data/lib/puppet/type/sshkey.rb +2 -1
  381. data/lib/puppet/type/tidy.rb +1 -1
  382. data/lib/puppet/type/user.rb +4 -1
  383. data/lib/puppet/type/yumrepo.rb +219 -344
  384. data/lib/puppet/type/zone.rb +15 -5
  385. data/lib/puppet/util.rb +14 -13
  386. data/lib/puppet/util/adsi.rb +19 -3
  387. data/lib/puppet/util/autoload.rb +27 -24
  388. data/lib/puppet/util/backups.rb +6 -6
  389. data/lib/puppet/util/checksums.rb +2 -2
  390. data/lib/puppet/util/classgen.rb +1 -1
  391. data/lib/puppet/util/colors.rb +4 -12
  392. data/lib/puppet/util/command_line.rb +2 -2
  393. data/lib/puppet/util/command_line/trollop.rb +3 -3
  394. data/lib/puppet/util/docs.rb +2 -2
  395. data/lib/puppet/util/errors.rb +8 -1
  396. data/lib/puppet/util/execution.rb +12 -5
  397. data/lib/puppet/util/filetype.rb +5 -5
  398. data/lib/puppet/util/inifile.rb +19 -4
  399. data/lib/puppet/util/instrumentation/data.rb +5 -0
  400. data/lib/puppet/util/instrumentation/indirection_probe.rb +6 -1
  401. data/lib/puppet/util/instrumentation/listener.rb +6 -1
  402. data/lib/puppet/util/json_lockfile.rb +4 -1
  403. data/lib/puppet/util/ldap/connection.rb +1 -1
  404. data/lib/puppet/util/lockfile.rb +10 -6
  405. data/lib/puppet/util/log.rb +6 -1
  406. data/lib/puppet/util/log/destinations.rb +2 -2
  407. data/lib/puppet/util/metric.rb +9 -4
  408. data/lib/puppet/util/nagios_maker.rb +26 -1
  409. data/lib/puppet/util/network_device.rb +1 -1
  410. data/lib/puppet/util/network_device/config.rb +1 -1
  411. data/lib/puppet/util/network_device/transport/ssh.rb +3 -3
  412. data/lib/puppet/util/plugins.rb +1 -1
  413. data/lib/puppet/util/profiler.rb +13 -1
  414. data/lib/puppet/util/pson.rb +1 -1
  415. data/lib/puppet/util/queue/stomp.rb +2 -2
  416. data/lib/puppet/util/rdoc.rb +1 -1
  417. data/lib/puppet/util/rdoc/generators/puppet_generator.rb +1 -1
  418. data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +19 -19
  419. data/lib/puppet/util/reference.rb +1 -1
  420. data/lib/puppet/util/resource_template.rb +1 -1
  421. data/lib/puppet/util/retryaction.rb +1 -1
  422. data/lib/puppet/util/selinux.rb +2 -2
  423. data/lib/puppet/util/storage.rb +3 -3
  424. data/lib/puppet/util/symbolic_file_mode.rb +1 -1
  425. data/lib/puppet/util/tag_set.rb +15 -3
  426. data/lib/puppet/util/tagging.rb +12 -17
  427. data/lib/puppet/util/watched_file.rb +1 -1
  428. data/lib/puppet/util/watcher.rb +1 -1
  429. data/lib/puppet/util/windows/error.rb +2 -2
  430. data/lib/puppet/util/windows/file.rb +20 -4
  431. data/lib/puppet/util/windows/registry.rb +2 -2
  432. data/lib/puppet/vendor/safe_yaml/CHANGES.md +1 -1
  433. data/lib/puppet/version.rb +1 -1
  434. data/lib/puppetx.rb +1 -21
  435. data/lib/puppetx/puppet/syntax_checker.rb +1 -1
  436. data/lib/puppetx/puppetlabs/syntax_checkers/json.rb +9 -11
  437. data/spec/fixtures/integration/node/environment/sitedir/00_a.pp +2 -0
  438. data/spec/fixtures/integration/node/environment/sitedir/01_b.pp +6 -0
  439. data/spec/fixtures/{unit/pops/binder/hiera2/yaml_backend/empty/common.yaml → integration/node/environment/sitedir/03_empty.pp} +0 -0
  440. data/spec/fixtures/integration/node/environment/sitedir/04_include.pp +2 -0
  441. data/spec/fixtures/integration/provider/cron/crontab/purged +8 -0
  442. data/spec/fixtures/releases/jamtur01-apache/lib/puppet/provider/a2mod/debian.rb +1 -1
  443. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/binder_config.yaml +3 -12
  444. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/lib/puppet/bindings/confdirtest.rb +10 -0
  445. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome2/lib/puppet/bindings/awesome2/default.rb +20 -0
  446. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/{awesome/lib/puppetx/awesome → awesome2/lib/puppetx/awesome2}/echo_scheme_handler.rb +2 -2
  447. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/bad/lib/puppet/bindings/bad/default.rb +5 -0
  448. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/good/lib/puppet/bindings/good/default.rb +6 -0
  449. data/spec/fixtures/unit/pops/binder/config/binder_config/ok/binder_config.yaml +2 -2
  450. data/spec/fixtures/unit/provider/service/systemd/{list_units → list_units_services} +0 -1
  451. data/spec/integration/agent/logging_spec.rb +1 -1
  452. data/spec/integration/application/apply_spec.rb +78 -3
  453. data/spec/integration/application/doc_spec.rb +3 -2
  454. data/spec/integration/configurer_spec.rb +5 -3
  455. data/spec/integration/directory_environments_spec.rb +50 -0
  456. data/spec/integration/indirector/direct_file_server_spec.rb +1 -1
  457. data/spec/integration/indirector/file_content/file_server_spec.rb +4 -5
  458. data/spec/integration/network/authconfig_spec.rb +4 -4
  459. data/spec/integration/network/formats_spec.rb +1 -1
  460. data/spec/integration/node/environment_spec.rb +67 -15
  461. data/spec/integration/node/facts_spec.rb +1 -1
  462. data/spec/integration/node_spec.rb +1 -1
  463. data/spec/integration/parser/catalog_spec.rb +100 -60
  464. data/spec/integration/parser/compiler_spec.rb +102 -13
  465. data/spec/integration/parser/future_compiler_spec.rb +416 -0
  466. data/spec/integration/parser/parser_spec.rb +44 -105
  467. data/spec/integration/parser/scope_spec.rb +614 -528
  468. data/spec/integration/provider/cron/crontab_spec.rb +21 -0
  469. data/spec/integration/provider/mount_spec.rb +15 -2
  470. data/spec/integration/resource/catalog_spec.rb +1 -1
  471. data/spec/integration/resource/type_collection_spec.rb +3 -4
  472. data/spec/integration/ssl/autosign_spec.rb +1 -1
  473. data/spec/integration/ssl/certificate_revocation_list_spec.rb +1 -1
  474. data/spec/integration/ssl/host_spec.rb +1 -1
  475. data/spec/integration/transaction_spec.rb +13 -13
  476. data/spec/integration/type/exec_spec.rb +2 -2
  477. data/spec/integration/type/file_spec.rb +114 -41
  478. data/spec/integration/type/nagios_spec.rb +80 -0
  479. data/spec/integration/type/tidy_spec.rb +2 -2
  480. data/spec/integration/util/execution_spec.rb +17 -0
  481. data/spec/integration/util/rdoc/parser_spec.rb +1 -1
  482. data/spec/integration/util/settings_spec.rb +1 -1
  483. data/spec/integration/util/windows/security_spec.rb +27 -2
  484. data/spec/lib/matchers/include.rb +27 -0
  485. data/spec/lib/matchers/include_spec.rb +32 -0
  486. data/spec/lib/matchers/json.rb +135 -79
  487. data/spec/lib/matchers/match_tokens2.rb +74 -0
  488. data/spec/lib/matchers/resource.rb +35 -0
  489. data/spec/lib/puppet/indirector/indirector_testing/memory.rb +7 -0
  490. data/spec/lib/puppet/indirector/indirector_testing/msgpack.rb +6 -0
  491. data/spec/lib/puppet/indirector_testing.rb +12 -2
  492. data/spec/lib/puppet_spec/files.rb +1 -0
  493. data/spec/lib/puppet_spec/matchers.rb +5 -0
  494. data/spec/lib/puppet_spec/modules.rb +1 -1
  495. data/spec/lib/puppet_spec/scope.rb +14 -0
  496. data/spec/shared_behaviours/file_server_terminus.rb +2 -2
  497. data/spec/spec_helper.rb +47 -17
  498. data/spec/unit/agent_spec.rb +8 -1
  499. data/spec/unit/application/agent_spec.rb +5 -4
  500. data/spec/unit/application/apply_spec.rb +34 -15
  501. data/spec/unit/application/device_spec.rb +27 -32
  502. data/spec/unit/application/doc_spec.rb +4 -4
  503. data/spec/unit/application/filebucket_spec.rb +1 -1
  504. data/spec/unit/application/master_spec.rb +2 -2
  505. data/spec/unit/application_spec.rb +1 -1
  506. data/spec/unit/configurer/downloader_spec.rb +1 -1
  507. data/spec/unit/configurer/fact_handler_spec.rb +5 -16
  508. data/spec/unit/configurer_spec.rb +2 -2
  509. data/spec/unit/confine/exists_spec.rb +5 -5
  510. data/spec/unit/context/trusted_information_spec.rb +124 -0
  511. data/spec/unit/context_spec.rb +74 -0
  512. data/spec/unit/environments_spec.rb +126 -0
  513. data/spec/unit/face/config_spec.rb +31 -16
  514. data/spec/unit/face/module/build_spec.rb +1 -0
  515. data/spec/unit/face/module/install_spec.rb +21 -104
  516. data/spec/unit/face/module/list_spec.rb +52 -36
  517. data/spec/unit/face/module/uninstall_spec.rb +18 -25
  518. data/spec/unit/face/parser_spec.rb +39 -23
  519. data/spec/unit/file_bucket/dipper_spec.rb +2 -2
  520. data/spec/unit/file_serving/base_spec.rb +9 -13
  521. data/spec/unit/file_serving/configuration/parser_spec.rb +8 -2
  522. data/spec/unit/file_serving/configuration_spec.rb +7 -7
  523. data/spec/unit/file_serving/content_spec.rb +7 -12
  524. data/spec/unit/file_serving/fileset_spec.rb +49 -53
  525. data/spec/unit/file_serving/metadata_spec.rb +83 -32
  526. data/spec/unit/file_serving/mount/file_spec.rb +10 -10
  527. data/spec/unit/file_system/tempfile_spec.rb +3 -3
  528. data/spec/unit/file_system_spec.rb +508 -0
  529. data/spec/unit/forge/errors_spec.rb +1 -1
  530. data/spec/unit/forge/repository_spec.rb +1 -3
  531. data/spec/unit/hiera/scope_spec.rb +6 -2
  532. data/spec/unit/hiera_puppet_spec.rb +13 -6
  533. data/spec/unit/indirector/catalog/msgpack_spec.rb +12 -0
  534. data/spec/unit/indirector/catalog/static_compiler_spec.rb +42 -11
  535. data/spec/unit/indirector/direct_file_server_spec.rb +6 -6
  536. data/spec/unit/indirector/facts/facter_spec.rb +5 -5
  537. data/spec/unit/indirector/file_bucket_file/file_spec.rb +4 -4
  538. data/spec/unit/indirector/file_metadata/file_spec.rb +2 -2
  539. data/spec/unit/indirector/file_server_spec.rb +4 -4
  540. data/spec/unit/indirector/json_spec.rb +6 -6
  541. data/spec/unit/indirector/key/file_spec.rb +8 -8
  542. data/spec/unit/indirector/msgpack_spec.rb +191 -0
  543. data/spec/unit/indirector/node/active_record_spec.rb +1 -1
  544. data/spec/unit/indirector/node/ldap_spec.rb +16 -7
  545. data/spec/unit/indirector/node/msgpack_spec.rb +24 -0
  546. data/spec/unit/indirector/node/plain_spec.rb +1 -1
  547. data/spec/unit/indirector/queue_spec.rb +1 -1
  548. data/spec/unit/indirector/report/msgpack_spec.rb +28 -0
  549. data/spec/unit/indirector/request_spec.rb +16 -8
  550. data/spec/unit/indirector/rest_spec.rb +0 -4
  551. data/spec/unit/indirector/ssl_file_spec.rb +12 -11
  552. data/spec/unit/indirector/yaml_spec.rb +4 -4
  553. data/spec/unit/man_spec.rb +32 -0
  554. data/spec/unit/module_spec.rb +60 -46
  555. data/spec/unit/module_tool/applications/checksummer_spec.rb +1 -1
  556. data/spec/unit/module_tool/applications/installer_spec.rb +53 -16
  557. data/spec/unit/module_tool/applications/uninstaller_spec.rb +26 -25
  558. data/spec/unit/module_tool/tar_spec.rb +1 -1
  559. data/spec/unit/module_tool_spec.rb +17 -90
  560. data/spec/unit/network/authconfig_spec.rb +3 -4
  561. data/spec/unit/network/authentication_spec.rb +20 -6
  562. data/spec/unit/network/authorization_spec.rb +11 -1
  563. data/spec/unit/network/formats_spec.rb +32 -9
  564. data/spec/unit/network/http/api/v1_spec.rb +365 -62
  565. data/spec/unit/network/http/api/v2/authorization_spec.rb +57 -0
  566. data/spec/unit/network/http/api/v2/environments_spec.rb +42 -0
  567. data/spec/unit/network/http/api/v2_spec.rb +14 -0
  568. data/spec/unit/network/http/connection_spec.rb +39 -5
  569. data/spec/unit/network/http/error_spec.rb +30 -0
  570. data/spec/unit/network/http/handler_spec.rb +69 -419
  571. data/spec/unit/network/http/rack/rest_spec.rb +20 -28
  572. data/spec/unit/network/http/route_spec.rb +75 -0
  573. data/spec/unit/network/http/webrick/rest_spec.rb +21 -58
  574. data/spec/unit/network/http_pool_spec.rb +3 -3
  575. data/spec/unit/network/rights_spec.rb +2 -2
  576. data/spec/unit/node/environment_spec.rb +108 -89
  577. data/spec/unit/node/facts_spec.rb +5 -12
  578. data/spec/unit/node_spec.rb +22 -22
  579. data/spec/unit/parser/ast/collection_spec.rb +1 -1
  580. data/spec/unit/parser/ast/leaf_spec.rb +2 -0
  581. data/spec/unit/parser/ast/resource_spec.rb +1 -1
  582. data/spec/unit/parser/compiler_spec.rb +5 -3
  583. data/spec/unit/parser/files_spec.rb +40 -50
  584. data/spec/unit/parser/functions/defined_spec.rb +80 -18
  585. data/spec/unit/parser/functions/epp_spec.rb +88 -0
  586. data/spec/unit/parser/functions/fqdn_rand_spec.rb +4 -1
  587. data/spec/unit/parser/functions/generate_spec.rb +6 -2
  588. data/spec/unit/parser/functions/hiera_array_spec.rb +5 -2
  589. data/spec/unit/parser/functions/hiera_hash_spec.rb +4 -1
  590. data/spec/unit/parser/functions/hiera_include_spec.rb +6 -3
  591. data/spec/unit/parser/functions/hiera_spec.rb +5 -2
  592. data/spec/unit/parser/functions/include_spec.rb +0 -1
  593. data/spec/unit/parser/functions/inline_epp_spec.rb +82 -0
  594. data/spec/unit/parser/functions/lookup_spec.rb +66 -16
  595. data/spec/unit/parser/functions_spec.rb +25 -91
  596. data/spec/unit/parser/lexer_spec.rb +1 -1
  597. data/spec/unit/parser/methods/filter_spec.rb +56 -0
  598. data/spec/unit/parser/methods/map_spec.rb +94 -5
  599. data/spec/unit/parser/methods/reduce_spec.rb +10 -0
  600. data/spec/unit/parser/methods/shared.rb +2 -18
  601. data/spec/unit/parser/methods/slice_spec.rb +39 -1
  602. data/spec/unit/parser/parser_spec.rb +14 -10
  603. data/spec/unit/parser/resource_spec.rb +3 -9
  604. data/spec/unit/parser/scope_spec.rb +81 -78
  605. data/spec/unit/parser/type_loader_spec.rb +0 -4
  606. data/spec/unit/pops/benchmark_spec.rb +142 -0
  607. data/spec/unit/pops/binder/binder_spec.rb +15 -34
  608. data/spec/unit/pops/binder/bindings_checker_spec.rb +0 -41
  609. data/spec/unit/pops/binder/bindings_composer_spec.rb +6 -31
  610. data/spec/unit/pops/binder/config/binder_config_spec.rb +5 -18
  611. data/spec/unit/pops/binder/injector_spec.rb +76 -81
  612. data/spec/unit/pops/evaluator/access_ops_spec.rb +376 -0
  613. data/spec/unit/pops/evaluator/arithmetic_ops_spec.rb +77 -0
  614. data/spec/unit/pops/evaluator/basic_expressions_spec.rb +103 -0
  615. data/spec/unit/pops/evaluator/collections_ops_spec.rb +111 -0
  616. data/spec/unit/pops/evaluator/comparison_ops_spec.rb +256 -0
  617. data/spec/unit/pops/evaluator/conditionals_spec.rb +190 -0
  618. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +1045 -0
  619. data/spec/unit/pops/evaluator/evaluator_rspec_helper.rb +75 -0
  620. data/spec/unit/pops/evaluator/logical_ops_spec.rb +90 -0
  621. data/spec/unit/pops/evaluator/string_interpolation_spec.rb +44 -0
  622. data/spec/unit/pops/evaluator/variables_spec.rb +194 -0
  623. data/spec/unit/pops/factory_spec.rb +6 -29
  624. data/spec/unit/pops/issues_spec.rb +1 -1
  625. data/spec/unit/pops/model/ast_transformer_spec.rb +6 -9
  626. data/spec/unit/pops/model/model_spec.rb +2 -2
  627. data/spec/unit/pops/parser/epp_parser_spec.rb +86 -0
  628. data/spec/unit/pops/parser/evaluating_parser_spec.rb +4 -2
  629. data/spec/unit/pops/parser/lexer2_spec.rb +428 -0
  630. data/spec/unit/pops/parser/lexer_spec.rb +25 -86
  631. data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +29 -4
  632. data/spec/unit/pops/parser/parse_calls_spec.rb +10 -6
  633. data/spec/unit/pops/parser/parse_conditionals_spec.rb +0 -9
  634. data/spec/unit/pops/parser/parse_containers_spec.rb +43 -12
  635. data/spec/unit/pops/parser/parse_heredoc_spec.rb +73 -0
  636. data/spec/unit/pops/parser/parse_resource_spec.rb +14 -0
  637. data/spec/unit/pops/parser/parser_spec.rb +3 -1
  638. data/spec/unit/pops/transformer/transform_basic_expressions_spec.rb +4 -4
  639. data/spec/unit/pops/transformer/transform_calls_spec.rb +41 -6
  640. data/spec/unit/pops/transformer/transform_conditionals_spec.rb +0 -9
  641. data/spec/unit/pops/transformer/transform_containers_spec.rb +12 -4
  642. data/spec/unit/pops/types/enumeration_spec.rb +50 -0
  643. data/spec/unit/pops/types/type_calculator_spec.rb +1171 -196
  644. data/spec/unit/pops/types/type_factory_spec.rb +108 -4
  645. data/spec/unit/pops/types/type_parser_spec.rb +114 -10
  646. data/spec/unit/pops/validator/validator_spec.rb +36 -1
  647. data/spec/unit/provider/augeas/augeas_spec.rb +39 -16
  648. data/spec/unit/provider/cron/parsed_spec.rb +27 -31
  649. data/spec/unit/provider/file/posix_spec.rb +2 -2
  650. data/spec/unit/provider/group/windows_adsi_spec.rb +1 -0
  651. data/spec/unit/provider/mount_spec.rb +12 -1
  652. data/spec/unit/provider/nameservice/directoryservice_spec.rb +3 -3
  653. data/spec/unit/provider/package/apt_spec.rb +1 -1
  654. data/spec/unit/provider/package/aptrpm_spec.rb +1 -1
  655. data/spec/unit/provider/package/gem_spec.rb +12 -0
  656. data/spec/unit/provider/package/msi_spec.rb +4 -0
  657. data/spec/unit/provider/package/openbsd_spec.rb +10 -10
  658. data/spec/unit/provider/package/pacman_spec.rb +36 -7
  659. data/spec/unit/provider/package/pkgin_spec.rb +57 -55
  660. data/spec/unit/provider/package/rpm_spec.rb +51 -6
  661. data/spec/unit/provider/service/base_spec.rb +4 -4
  662. data/spec/unit/provider/service/daemontools_spec.rb +8 -13
  663. data/spec/unit/provider/service/freebsd_spec.rb +3 -3
  664. data/spec/unit/provider/service/gentoo_spec.rb +24 -24
  665. data/spec/unit/provider/service/init_spec.rb +15 -15
  666. data/spec/unit/provider/service/openbsd_spec.rb +16 -16
  667. data/spec/unit/provider/service/openrc_spec.rb +20 -20
  668. data/spec/unit/provider/service/openwrt_spec.rb +1 -1
  669. data/spec/unit/provider/service/runit_spec.rb +5 -8
  670. data/spec/unit/provider/service/src_spec.rb +4 -4
  671. data/spec/unit/provider/service/systemd_spec.rb +24 -14
  672. data/spec/unit/provider/service/upstart_spec.rb +12 -4
  673. data/spec/unit/provider/service/windows_spec.rb +1 -1
  674. data/spec/unit/provider/ssh_authorized_key/parsed_spec.rb +21 -23
  675. data/spec/unit/provider/user/directoryservice_spec.rb +7 -7
  676. data/spec/unit/provider/user/useradd_spec.rb +43 -15
  677. data/spec/unit/provider/user/windows_adsi_spec.rb +1 -0
  678. data/spec/unit/provider/yumrepo/inifile_spec.rb +105 -0
  679. data/spec/unit/provider/zone/solaris_spec.rb +1 -1
  680. data/spec/unit/provider_spec.rb +120 -62
  681. data/spec/unit/rails/host_spec.rb +1 -1
  682. data/spec/unit/rails/param_value_spec.rb +4 -0
  683. data/spec/unit/relationship_spec.rb +4 -4
  684. data/spec/unit/reports/http_spec.rb +14 -3
  685. data/spec/unit/reports/rrdgraph_spec.rb +0 -1
  686. data/spec/unit/reports/store_spec.rb +2 -2
  687. data/spec/unit/resource/catalog_spec.rb +17 -29
  688. data/spec/unit/resource/status_spec.rb +1 -1
  689. data/spec/unit/resource/type_collection_spec.rb +28 -47
  690. data/spec/unit/resource/type_spec.rb +12 -23
  691. data/spec/unit/resource_spec.rb +54 -93
  692. data/spec/unit/run_spec.rb +3 -3
  693. data/spec/unit/settings/autosign_setting_spec.rb +1 -1
  694. data/spec/unit/settings/config_file_spec.rb +68 -15
  695. data/spec/unit/settings/file_setting_spec.rb +2 -2
  696. data/spec/unit/settings/ini_file_spec.rb +184 -0
  697. data/spec/unit/settings_spec.rb +137 -79
  698. data/spec/unit/ssl/certificate_authority/interface_spec.rb +3 -1
  699. data/spec/unit/ssl/certificate_authority_spec.rb +11 -9
  700. data/spec/unit/ssl/certificate_factory_spec.rb +19 -4
  701. data/spec/unit/ssl/certificate_request_attributes_spec.rb +1 -1
  702. data/spec/unit/ssl/certificate_revocation_list_spec.rb +101 -72
  703. data/spec/unit/ssl/host_spec.rb +8 -20
  704. data/spec/unit/ssl/inventory_spec.rb +2 -2
  705. data/spec/unit/ssl/key_spec.rb +4 -4
  706. data/spec/unit/status_spec.rb +6 -4
  707. data/spec/unit/transaction/additional_resource_generator_spec.rb +3 -11
  708. data/spec/unit/transaction/event_spec.rb +2 -2
  709. data/spec/unit/transaction/report_spec.rb +24 -15
  710. data/spec/unit/transaction/resource_harness_spec.rb +1 -1
  711. data/spec/unit/type/cron_spec.rb +39 -1
  712. data/spec/unit/type/file/content_spec.rb +4 -5
  713. data/spec/unit/type/file/ctime_spec.rb +1 -1
  714. data/spec/unit/type/file/mode_spec.rb +5 -4
  715. data/spec/unit/type/file/mtime_spec.rb +1 -1
  716. data/spec/unit/type/file/source_spec.rb +30 -7
  717. data/spec/unit/type/file_spec.rb +8 -8
  718. data/spec/unit/type/k5login_spec.rb +3 -3
  719. data/spec/unit/type/nagios_spec.rb +6 -0
  720. data/spec/unit/type/package/package_settings_spec.rb +135 -0
  721. data/spec/unit/type/package_spec.rb +13 -1
  722. data/spec/unit/type/resources_spec.rb +155 -0
  723. data/spec/unit/type/service_spec.rb +3 -3
  724. data/spec/unit/type/ssh_authorized_key_spec.rb +96 -93
  725. data/spec/unit/type/sshkey_spec.rb +39 -30
  726. data/spec/unit/type/tidy_spec.rb +19 -12
  727. data/spec/unit/type/user_spec.rb +47 -2
  728. data/spec/unit/type/whit_spec.rb +2 -2
  729. data/spec/unit/type/yumrepo_spec.rb +32 -177
  730. data/spec/unit/type/zone_spec.rb +2 -2
  731. data/spec/unit/type_spec.rb +11 -0
  732. data/spec/unit/util/adsi_spec.rb +48 -1
  733. data/spec/unit/util/autoload_spec.rb +24 -39
  734. data/spec/unit/util/backups_spec.rb +25 -28
  735. data/spec/unit/util/checksums_spec.rb +1 -3
  736. data/spec/unit/util/colors_spec.rb +14 -0
  737. data/spec/unit/util/docs_spec.rb +9 -0
  738. data/spec/unit/util/execution_spec.rb +1 -1
  739. data/spec/unit/util/filetype_spec.rb +7 -7
  740. data/spec/unit/util/instrumentation/data_spec.rb +3 -1
  741. data/spec/unit/util/instrumentation/indirection_probe_spec.rb +2 -0
  742. data/spec/unit/util/instrumentation/listener_spec.rb +3 -2
  743. data/spec/unit/util/json_lockfile_spec.rb +25 -4
  744. data/spec/unit/util/lockfile_spec.rb +49 -7
  745. data/spec/unit/util/log/destinations_spec.rb +1 -0
  746. data/spec/unit/util/log_spec.rb +1 -1
  747. data/spec/unit/util/metric_spec.rb +1 -1
  748. data/spec/unit/util/pidlock_spec.rb +6 -6
  749. data/spec/unit/util/pson_spec.rb +2 -2
  750. data/spec/unit/util/rdoc/parser_spec.rb +32 -29
  751. data/spec/unit/util/resource_template_spec.rb +3 -3
  752. data/spec/unit/util/selinux_spec.rb +5 -5
  753. data/spec/unit/util/storage_spec.rb +4 -4
  754. data/spec/unit/util/tag_set_spec.rb +1 -1
  755. data/spec/unit/util/watcher_spec.rb +1 -4
  756. data/spec/unit/util/yaml_spec.rb +2 -2
  757. data/spec/unit/util_spec.rb +7 -7
  758. data/tasks/benchmark.rake +0 -1
  759. data/tasks/parallel.rake +408 -0
  760. data/tasks/yard.rake +59 -0
  761. metadata +2889 -2782
  762. checksums.yaml +0 -7
  763. data/README_DEVELOPER.md +0 -809
  764. data/lib/puppet/file_system/file.rb +0 -271
  765. data/lib/puppet/network/http/rack/httphandler.rb +0 -13
  766. data/lib/puppet/pops/binder/hiera2.rb +0 -10
  767. data/lib/puppet/pops/binder/hiera2/bindings_provider.rb +0 -148
  768. data/lib/puppet/pops/binder/hiera2/config.rb +0 -69
  769. data/lib/puppet/pops/binder/hiera2/config_checker.rb +0 -68
  770. data/lib/puppet/pops/binder/hiera2/diagnostic_producer.rb +0 -36
  771. data/lib/puppet/pops/binder/hiera2/issues.rb +0 -67
  772. data/lib/puppet/pops/binder/hiera2/json_backend.rb +0 -18
  773. data/lib/puppet/pops/binder/hiera2/yaml_backend.rb +0 -21
  774. data/lib/puppet/pops/binder/scheme_handler/confdir_hiera_scheme.rb +0 -67
  775. data/lib/puppet/pops/binder/scheme_handler/module_hiera_scheme.rb +0 -92
  776. data/lib/puppet/pops/parser/grammar.ra +0 -746
  777. data/lib/puppet/provider/port/parsed.rb +0 -173
  778. data/lib/puppet/type/port.rb +0 -119
  779. data/lib/puppetx/puppet/hiera2_backend.rb +0 -31
  780. data/spec/fixtures/unit/pops/binder/bindings_composer/hiera1config/binder_config.yaml +0 -18
  781. data/spec/fixtures/unit/pops/binder/bindings_composer/hiera1config/hiera.yaml +0 -8
  782. data/spec/fixtures/unit/pops/binder/bindings_composer/hiera1config/modules/good/common.yaml +0 -1
  783. data/spec/fixtures/unit/pops/binder/bindings_composer/hiera1config/modules/good/hiera.yaml +0 -10
  784. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/common.yaml +0 -1
  785. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/hiera.yaml +0 -11
  786. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/localhost.yaml +0 -1
  787. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/common.yaml +0 -3
  788. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/hiera.yaml +0 -13
  789. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/lib/puppet/bindings/awesome/default.rb +0 -4
  790. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/lib/puppetx/awesome/echo_backend.rb +0 -11
  791. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/localhost.yaml +0 -1
  792. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/bad/common.yaml +0 -3
  793. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/bad/hiera_config.yaml +0 -9
  794. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/good/common.yaml +0 -2
  795. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/good/hiera.yaml +0 -11
  796. data/spec/fixtures/unit/pops/binder/hiera2/bindings_provider/ok/hiera.yaml +0 -9
  797. data/spec/fixtures/unit/pops/binder/hiera2/bindings_provider/ok/node.example.com.json +0 -9
  798. data/spec/fixtures/unit/pops/binder/hiera2/bindings_provider/ok/node.example.com.yaml +0 -5
  799. data/spec/fixtures/unit/pops/binder/hiera2/config/bad_syntax/hiera.yaml +0 -10
  800. data/spec/fixtures/unit/pops/binder/hiera2/config/malformed_hierarchy/hiera.yaml +0 -8
  801. data/spec/fixtures/unit/pops/binder/hiera2/config/missing/foo.txt +0 -1
  802. data/spec/fixtures/unit/pops/binder/hiera2/config/no_backends/hiera.yaml +0 -7
  803. data/spec/fixtures/unit/pops/binder/hiera2/config/no_hierarchy/hiera.yaml +0 -4
  804. data/spec/fixtures/unit/pops/binder/hiera2/config/not_a_hash/hiera.yaml +0 -2
  805. data/spec/fixtures/unit/pops/binder/hiera2/config/ok/hiera.yaml +0 -8
  806. data/spec/fixtures/unit/pops/binder/hiera2/yaml_backend/invalid/common.yaml +0 -1
  807. data/spec/fixtures/unit/pops/binder/hiera2/yaml_backend/ok/common.yaml +0 -2
  808. data/spec/unit/file_system/file_spec.rb +0 -486
  809. data/spec/unit/pops/binder/hiera2/bindings_provider_spec.rb +0 -74
  810. data/spec/unit/pops/binder/hiera2/config_spec.rb +0 -61
  811. data/spec/unit/pops/binder/hiera2/yaml_backend_spec.rb +0 -33
@@ -80,20 +80,25 @@ class Puppet::Run
80
80
  obj
81
81
  end
82
82
 
83
- def self.from_pson(hash)
84
- if hash['options']
85
- return from_hash(hash)
83
+ def self.from_data_hash(data)
84
+ if data['options']
85
+ return from_hash(data)
86
86
  end
87
87
 
88
88
  options = { :pluginsync => Puppet[:pluginsync] }
89
89
 
90
- hash.each do |key, value|
90
+ data.each do |key, value|
91
91
  options[key.to_sym] = value
92
92
  end
93
93
 
94
94
  new(options)
95
95
  end
96
96
 
97
+ def self.from_pson(hash)
98
+ Puppet.deprecation_warning("from_pson is being removed in favour of from_data_hash.")
99
+ self.from_data_hash(hash)
100
+ end
101
+
97
102
  def to_data_hash
98
103
  {
99
104
  :options => @options,
@@ -101,8 +106,4 @@ class Puppet::Run
101
106
  :status => @status
102
107
  }
103
108
  end
104
-
105
- def to_pson(*args)
106
- to_data_hash.to_pson(*args)
107
- end
108
109
  end
@@ -73,13 +73,15 @@ class Puppet::Settings
73
73
  @shortnames = {}
74
74
 
75
75
  @created = []
76
- @searchpath = nil
77
76
 
78
77
  # Keep track of set values.
79
- @values = Hash.new { |hash, key| hash[key] = {} }
80
-
81
- # Hold parsed metadata until run_mode is known
82
- @metas = {}
78
+ @value_sets = {
79
+ :cli => Values.new(:cli, @config),
80
+ :memory => Values.new(:memory, @config),
81
+ :application_defaults => Values.new(:application_defaults, @config),
82
+ :overridden_defaults => Values.new(:overridden_defaults, @config),
83
+ }
84
+ @configuration_file = nil
83
85
 
84
86
  # And keep a per-environment cache
85
87
  @cache = Hash.new { |hash, key| hash[key] = {} }
@@ -100,19 +102,40 @@ class Puppet::Settings
100
102
  end
101
103
 
102
104
  # Retrieve a config value
105
+ # @param param [Symbol] the name of the setting
106
+ # @return [Object] the value of the setting
107
+ # @api private
103
108
  def [](param)
104
109
  value(param)
105
110
  end
106
111
 
107
112
  # Set a config value. This doesn't set the defaults, it sets the value itself.
113
+ # @param param [Symbol] the name of the setting
114
+ # @param value [Object] the new value of the setting
115
+ # @api private
108
116
  def []=(param, value)
109
- set_value(param, value, :memory)
117
+ @value_sets[:memory].set(param, value)
118
+ unsafe_flush_cache
119
+ end
120
+
121
+ # Create a new default value for the given setting. The default overrides are
122
+ # higher precedence than the defaults given in defaults.rb, but lower
123
+ # precedence than any other values for the setting. This allows one setting
124
+ # `a` to change the default of setting `b`, but still allow a user to provide
125
+ # a value for setting `b`.
126
+ #
127
+ # @param param [Symbol] the name of the setting
128
+ # @param value [Object] the new default value for the setting
129
+ # @api private
130
+ def override_default(param, value)
131
+ @value_sets[:overridden_defaults].set(param, value)
132
+ unsafe_flush_cache
110
133
  end
111
134
 
112
135
  # Generate the list of valid arguments, in a format that GetoptLong can
113
136
  # understand, and add them to the passed option list.
114
137
  def addargs(options)
115
- # Add all of the config parameters as valid options.
138
+ # Add all of the settings as valid options.
116
139
  self.each { |name, setting|
117
140
  setting.getopt_args.each { |args| options << args }
118
141
  }
@@ -123,7 +146,7 @@ class Puppet::Settings
123
146
  # Generate the list of valid arguments, in a format that OptionParser can
124
147
  # understand, and add them to the passed option list.
125
148
  def optparse_addargs(options)
126
- # Add all of the config parameters as valid options.
149
+ # Add all of the settings as valid options.
127
150
  self.each { |name, setting|
128
151
  options << setting.optparse_args
129
152
  }
@@ -131,7 +154,7 @@ class Puppet::Settings
131
154
  options
132
155
  end
133
156
 
134
- # Is our parameter a boolean parameter?
157
+ # Is our setting a boolean setting?
135
158
  def boolean?(param)
136
159
  param = param.to_sym
137
160
  @config.include?(param) and @config[param].kind_of?(BooleanSetting)
@@ -144,18 +167,22 @@ class Puppet::Settings
144
167
 
145
168
  # Remove all set values, potentially skipping cli values.
146
169
  def unsafe_clear(clear_cli = true, clear_application_defaults = false)
147
- @values.each do |name, values|
148
- next if ((name == :application_defaults) and !clear_application_defaults)
149
- next if ((name == :cli) and !clear_cli)
150
- @values.delete(name)
170
+ if clear_application_defaults
171
+ @value_sets[:application_defaults] = Values.new(:application_defaults, @config)
172
+ @app_defaults_initialized = false
151
173
  end
152
174
 
153
- # Only clear the 'used' values if we were explicitly asked to clear out
154
- # :cli values; otherwise, it may be just a config file reparse,
155
- # and we want to retain this cli values.
156
- @used = [] if clear_cli
175
+ if clear_cli
176
+ @value_sets[:cli] = Values.new(:cli, @config)
177
+
178
+ # Only clear the 'used' values if we were explicitly asked to clear out
179
+ # :cli values; otherwise, it may be just a config file reparse,
180
+ # and we want to retain this cli values.
181
+ @used = []
182
+ end
157
183
 
158
- @app_defaults_initialized = false if clear_application_defaults
184
+ @value_sets[:memory] = Values.new(:memory, @config)
185
+ @value_sets[:overridden_defaults] = Values.new(:overridden_defaults, @config)
159
186
 
160
187
  @cache.clear
161
188
  end
@@ -277,7 +304,8 @@ class Puppet::Settings
277
304
  if key == :run_mode
278
305
  self.preferred_run_mode = value
279
306
  else
280
- set_value(key, value, :application_defaults)
307
+ @value_sets[:application_defaults].set(key, value)
308
+ unsafe_flush_cache
281
309
  end
282
310
  end
283
311
  apply_metadata
@@ -291,7 +319,7 @@ class Puppet::Settings
291
319
  begin
292
320
  setting.handle(self.value(setting.name))
293
321
  rescue InterpolationError => err
294
- raise err unless options[:ignore_interpolation_dependency_errors]
322
+ raise InterpolationError, err, err.backtrace unless options[:ignore_interpolation_dependency_errors]
295
323
  #swallow. We're not concerned if we can't call hooks because dependencies don't exist yet
296
324
  #we'll get another chance after application defaults are initialized
297
325
  end
@@ -299,26 +327,6 @@ class Puppet::Settings
299
327
  end
300
328
  private :call_hooks_deferred_to_application_initialization
301
329
 
302
- # Do variable interpolation on the value.
303
- def convert(value, environment = nil)
304
- return nil if value.nil?
305
- return value unless value.is_a? String
306
- newval = value.gsub(/\$(\w+)|\$\{(\w+)\}/) do |value|
307
- varname = $2 || $1
308
- if varname == "environment" and environment
309
- environment
310
- elsif varname == "run_mode"
311
- preferred_run_mode
312
- elsif pval = self.value(varname, environment)
313
- pval
314
- else
315
- raise InterpolationError, "Could not find value for #{value}"
316
- end
317
- end
318
-
319
- newval
320
- end
321
-
322
330
  # Return a value's description.
323
331
  def description(name)
324
332
  if obj = @config[name.to_sym]
@@ -379,7 +387,8 @@ class Puppet::Settings
379
387
  end
380
388
  end
381
389
 
382
- set_value(str, value, :cli)
390
+ @value_sets[:cli].set(str, value)
391
+ unsafe_flush_cache
383
392
  end
384
393
 
385
394
  def include?(name)
@@ -418,7 +427,7 @@ class Puppet::Settings
418
427
  end
419
428
  puts "#{v} = #{value(v,env)}"
420
429
  else
421
- puts "invalid parameter: #{v}"
430
+ puts "invalid setting: #{v}"
422
431
  return false
423
432
  end
424
433
  end
@@ -449,12 +458,11 @@ class Puppet::Settings
449
458
  # Return a given object's file metadata.
450
459
  def metadata(param)
451
460
  if obj = @config[param.to_sym] and obj.is_a?(FileSetting)
452
- return [:owner, :group, :mode].inject({}) do |meta, p|
453
- if v = obj.send(p)
454
- meta[p] = v
455
- end
456
- meta
457
- end
461
+ {
462
+ :owner => obj.owner,
463
+ :group => obj.group,
464
+ :mode => obj.mode
465
+ }.delete_if { |key, value| value.nil? }
458
466
  else
459
467
  nil
460
468
  end
@@ -491,7 +499,7 @@ class Puppet::Settings
491
499
  mode
492
500
  end
493
501
 
494
- # Return all of the parameters associated with a given section.
502
+ # Return all of the settings associated with a given section.
495
503
  def params(section = nil)
496
504
  if section
497
505
  section = section.intern if section.is_a? String
@@ -505,11 +513,69 @@ class Puppet::Settings
505
513
  end
506
514
  end
507
515
 
516
+ def parse_config(text, file = "text")
517
+ begin
518
+ data = @config_file_parser.parse_file(file, text)
519
+ rescue => detail
520
+ Puppet.log_exception(detail, "Could not parse #{file}: #{detail}")
521
+ return
522
+ end
523
+
524
+ # If we get here and don't have any data, we just return and don't muck with the current state of the world.
525
+ return if data.nil?
526
+
527
+ # If we get here then we have some data, so we need to clear out any previous settings that may have come from
528
+ # config files.
529
+ unsafe_clear(false, false)
530
+
531
+ # And now we can repopulate with the values from our last parsing of the config files.
532
+ @configuration_file = data
533
+
534
+ # Determine our environment, if we have one.
535
+ if @config[:environment]
536
+ env = self.value(:environment).to_sym
537
+ else
538
+ env = "none"
539
+ end
540
+
541
+ # Call any hooks we should be calling.
542
+ @config.values.select(&:has_hook?).each do |setting|
543
+ value_sets_for(env, self.preferred_run_mode).each do |source|
544
+ if source.include?(setting.name)
545
+ # We still have to use value to retrieve the value, since
546
+ # we want the fully interpolated value, not $vardir/lib or whatever.
547
+ # This results in extra work, but so few of the settings
548
+ # will have associated hooks that it ends up being less work this
549
+ # way overall.
550
+ if setting.call_hook_on_initialize?
551
+ @hooks_to_call_on_application_initialization << setting
552
+ else
553
+ setting.handle(self.value(setting.name, env))
554
+ end
555
+ break
556
+ end
557
+ end
558
+ end
559
+
560
+ call_hooks_deferred_to_application_initialization :ignore_interpolation_dependency_errors => true
561
+ apply_metadata
562
+ end
563
+
508
564
  # Parse the configuration file. Just provides thread safety.
509
565
  def parse_config_files
510
- unsafe_parse(which_configuration_file)
566
+ file = which_configuration_file
567
+ if Puppet::FileSystem.exist?(file)
568
+ begin
569
+ text = read_file(file)
570
+ rescue => detail
571
+ Puppet.log_exception(detail, "Could not load #{file}: #{detail}")
572
+ return
573
+ end
574
+ else
575
+ return
576
+ end
511
577
 
512
- call_hooks_deferred_to_application_initialization :ignore_interpolation_dependency_errors => true
578
+ parse_config(text, file)
513
579
  end
514
580
  private :parse_config_files
515
581
 
@@ -546,89 +612,29 @@ class Puppet::Settings
546
612
  end
547
613
  private :config_file_name
548
614
 
549
- # Unsafely parse the file -- this isn't thread-safe and causes plenty of problems if used directly.
550
- def unsafe_parse(file)
551
- # build up a single data structure that contains the values from all of the parsed files.
552
- data = {}
553
- if Puppet::FileSystem::File.exist?(file)
554
- begin
555
- file_data = parse_file(file)
556
-
557
- # This is a little kludgy; basically we are merging a hash of hashes. We can't use "merge" at the
558
- # outermost level or we risking losing data from the hash we're merging into.
559
- file_data.keys.each do |key|
560
- if data.has_key?(key)
561
- data[key].merge!(file_data[key])
562
- else
563
- data[key] = file_data[key]
564
- end
565
- end
566
- rescue => detail
567
- Puppet.log_exception(detail, "Could not parse #{file}: #{detail}")
568
- return
569
- end
570
- end
571
-
572
- # If we get here and don't have any data, we just return and don't muck with the current state of the world.
573
- return if data.empty?
574
-
575
- # If we get here then we have some data, so we need to clear out any previous settings that may have come from
576
- # config files.
577
- unsafe_clear(false, false)
578
-
579
- # And now we can repopulate with the values from our last parsing of the config files.
580
- data.each do |area, values|
581
- @metas[area] = values.delete(:_meta)
582
- values.each do |key,value|
583
- set_value(key, value, area, :dont_trigger_handles => true, :ignore_bad_settings => true )
584
- end
585
- end
586
-
587
- # Determine our environment, if we have one.
588
- if @config[:environment]
589
- env = self.value(:environment).to_sym
590
- else
591
- env = "none"
592
- end
593
-
594
- # Call any hooks we should be calling.
595
- settings_with_hooks.each do |setting|
596
- each_source(env) do |source|
597
- if @values[source][setting.name]
598
- # We still have to use value to retrieve the value, since
599
- # we want the fully interpolated value, not $vardir/lib or whatever.
600
- # This results in extra work, but so few of the settings
601
- # will have associated hooks that it ends up being less work this
602
- # way overall.
603
- if setting.call_hook_on_initialize?
604
- @hooks_to_call_on_application_initialization << setting
605
- else
606
- setting.handle(self.value(setting.name, env))
607
- end
608
- break
609
- end
610
- end
611
- end
612
-
613
- # Take a best guess at metadata based on uninitialized run_mode
614
- apply_metadata
615
- end
616
- private :unsafe_parse
617
-
618
615
  def apply_metadata
619
616
  # We have to do it in the reverse of the search path,
620
617
  # because multiple sections could set the same value
621
618
  # and I'm too lazy to only set the metadata once.
622
- searchpath.reverse.each do |source|
623
- source = preferred_run_mode if source == :run_mode
624
- source = @name if (@name && source == :name)
625
- if meta = @metas[source]
626
- set_metadata(meta)
619
+ if @configuration_file
620
+ searchpath.reverse.each do |source|
621
+ source = preferred_run_mode if source == :run_mode
622
+ if section = @configuration_file.sections[source]
623
+ apply_metadata_from_section(section)
624
+ end
627
625
  end
628
626
  end
629
627
  end
630
628
  private :apply_metadata
631
629
 
630
+ def apply_metadata_from_section(section)
631
+ section.settings.each do |setting|
632
+ if setting.has_metadata? && type = @config[setting.name]
633
+ type.set_meta(setting.meta)
634
+ end
635
+ end
636
+ end
637
+
632
638
  SETTING_TYPES = {
633
639
  :string => StringSetting,
634
640
  :file => FileSetting,
@@ -696,7 +702,7 @@ class Puppet::Settings
696
702
  return @files if @files
697
703
  @files = []
698
704
  [main_config_file, user_config_file].each do |path|
699
- if Puppet::FileSystem::File.exist?(path)
705
+ if Puppet::FileSystem.exist?(path)
700
706
  @files << Puppet::Util::WatchedFile.new(path)
701
707
  end
702
708
  end
@@ -724,11 +730,7 @@ class Puppet::Settings
724
730
 
725
731
  # The order in which to search for values.
726
732
  def searchpath(environment = nil)
727
- if environment
728
- [:cli, :memory, environment, :run_mode, :main, :application_defaults]
729
- else
730
- [:cli, :memory, :run_mode, :main, :application_defaults]
731
- end
733
+ [:memory, :cli, environment, :run_mode, :main, :application_defaults, :overridden_defaults].compact
732
734
  end
733
735
 
734
736
  # Get a list of objects per section
@@ -773,32 +775,17 @@ class Puppet::Settings
773
775
  # `dns_alt_names` option during cert generate. --daniel 2011-10-18
774
776
  def set_by_cli?(param)
775
777
  param = param.to_sym
776
- !@values[:cli][param].nil?
778
+ !@value_sets[:cli].lookup(param).nil?
777
779
  end
778
780
 
779
781
  def set_value(param, value, type, options = {})
780
- param = param.to_sym
781
-
782
- if !(setting = @config[param])
783
- if options[:ignore_bad_settings]
784
- return
785
- else
786
- raise ArgumentError,
787
- "Attempt to assign a value to unknown configuration parameter #{param.inspect}"
788
- end
782
+ Puppet.deprecation_warning("Puppet.settings.set_value is deprecated. Use Puppet[]= instead.")
783
+ if @value_sets[type]
784
+ @value_sets[type].set(param, value)
785
+ unsafe_flush_cache
789
786
  end
790
-
791
- setting.handle(value) if setting.has_hook? and not options[:dont_trigger_handles]
792
-
793
- @values[type][param] = value
794
- unsafe_flush_cache
795
-
796
- value
797
787
  end
798
788
 
799
-
800
-
801
-
802
789
  # Deprecated; use #define_settings instead
803
790
  def setdefaults(section, defs)
804
791
  Puppet.deprecation_warning("'setdefaults' is deprecated and will be removed; please call 'define_settings' instead")
@@ -843,11 +830,11 @@ class Puppet::Settings
843
830
  name = name.to_sym
844
831
  hash[:name] = name
845
832
  hash[:section] = section
846
- raise ArgumentError, "Parameter #{name} is already defined" if @config.include?(name)
833
+ raise ArgumentError, "Setting #{name} is already defined" if @config.include?(name)
847
834
  tryconfig = newsetting(hash)
848
835
  if short = tryconfig.short
849
836
  if other = @shortnames[short]
850
- raise ArgumentError, "Parameter #{other.name} is already using short name '#{short}'"
837
+ raise ArgumentError, "Setting #{other.name} is already using short name '#{short}'"
851
838
  end
852
839
  @shortnames[short] = tryconfig
853
840
  end
@@ -856,14 +843,18 @@ class Puppet::Settings
856
843
  # Collect the settings that need to have their hooks called immediately.
857
844
  # We have to collect them so that we can be sure we're fully initialized before
858
845
  # the hook is called.
859
- if tryconfig.call_hook_on_define?
860
- call << tryconfig
861
- elsif tryconfig.call_hook_on_initialize?
862
- @hooks_to_call_on_application_initialization << tryconfig
846
+ if tryconfig.has_hook?
847
+ if tryconfig.call_hook_on_define?
848
+ call << tryconfig
849
+ elsif tryconfig.call_hook_on_initialize?
850
+ @hooks_to_call_on_application_initialization << tryconfig
851
+ end
863
852
  end
864
853
  end
865
854
 
866
- call.each { |setting| setting.handle(self.value(setting.name)) }
855
+ call.each do |setting|
856
+ setting.handle(self.value(setting.name))
857
+ end
867
858
  end
868
859
 
869
860
  # Convert the settings we manage into a catalog full of resources that model those settings.
@@ -891,7 +882,7 @@ class Puppet::Settings
891
882
  # Convert our list of config settings into a configuration file.
892
883
  def to_config
893
884
  str = %{The configuration file for #{Puppet.run_mode.name}. Note that this file
894
- is likely to have unused configuration parameters in it; any parameter that's
885
+ is likely to have unused settings in it; any setting that's
895
886
  valid anywhere in Puppet can be in any config file, even if it's not used.
896
887
 
897
888
  Every section can specify three special parameters: owner, group, and mode.
@@ -942,8 +933,14 @@ Generated on #{Time.now}.
942
933
  catalog.apply do |transaction|
943
934
  if transaction.any_failed?
944
935
  report = transaction.report
945
- failures = report.logs.find_all { |log| log.level == :err }
946
- raise "Got #{failures.length} failure(s) while initializing: #{failures.collect { |l| l.to_s }.join("; ")}"
936
+ status_failures = report.resource_statuses.values.select { |r| r.failed? }
937
+ status_fail_msg = status_failures.
938
+ collect(&:events).
939
+ flatten.
940
+ select { |event| event.status == 'failure' }.
941
+ collect { |event| "#{event.resource}: #{event.message}" }.join("; ")
942
+
943
+ raise "Got #{status_failures.length} failure(s) while initializing: #{status_fail_msg}"
947
944
  end
948
945
  end
949
946
 
@@ -957,27 +954,27 @@ Generated on #{Time.now}.
957
954
  end
958
955
 
959
956
  def uninterpolated_value(param, environment = nil)
957
+ Puppet.deprecation_warning("Puppet.settings.uninterpolated_value is deprecated. Use Puppet.settings.value instead")
960
958
  param = param.to_sym
961
959
  environment &&= environment.to_sym
962
960
 
963
- # See if we can find it within our searchable list of values
964
- val = find_value(environment, param)
965
-
966
- # If we didn't get a value, use the default
967
- val = @config[param].default if val.nil?
968
-
969
- val
961
+ values(environment, self.preferred_run_mode).lookup(param)
970
962
  end
971
963
 
972
- def find_value(environment, param)
973
- each_source(environment) do |source|
974
- # Look for the value. We have to test the hash for whether
975
- # it exists, because the value might be false.
976
- return @values[source][param] if @values[source].include?(param)
977
- end
978
- return nil
964
+ # Retrieve an object that can be used for looking up values of configuration
965
+ # settings.
966
+ #
967
+ # @param environment [Symbol] The name of the environment in which to lookup
968
+ # @param section [Symbol] The name of the configuration section in which to lookup
969
+ # @return [Puppet::Settings::ChainedValues] An object to perform lookups
970
+ # @api public
971
+ def values(environment, section)
972
+ ChainedValues.new(
973
+ section,
974
+ environment,
975
+ value_sets_for(environment, section),
976
+ @config)
979
977
  end
980
- private :find_value
981
978
 
982
979
  # Find the correct value using our search path.
983
980
  #
@@ -994,42 +991,46 @@ Generated on #{Time.now}.
994
991
 
995
992
  setting = @config[param]
996
993
 
997
- # Short circuit to nil for undefined parameters.
998
- return nil unless @config.include?(param)
999
-
1000
- # Yay, recursion.
1001
- #self.reparse unless [:config, :filetimeout].include?(param)
994
+ # Short circuit to nil for undefined settings.
995
+ return nil if setting.nil?
1002
996
 
1003
997
  # Check the cache first. It needs to be a per-environment
1004
998
  # cache so that we don't spread values from one env
1005
999
  # to another.
1006
1000
  if @cache[environment||"none"].has_key?(param)
1007
1001
  return @cache[environment||"none"][param]
1002
+ elsif bypass_interpolation
1003
+ val = values(environment, self.preferred_run_mode).lookup(param)
1004
+ else
1005
+ val = values(environment, self.preferred_run_mode).interpolate(param)
1008
1006
  end
1009
1007
 
1010
- val = uninterpolated_value(param, environment)
1011
-
1012
- return val if bypass_interpolation
1013
- if param == :code
1014
- # if we interpolate code, all hell breaks loose.
1015
- return val
1016
- end
1017
-
1018
- # Convert it if necessary
1019
- begin
1020
- val = convert(val, environment)
1021
- rescue InterpolationError => err
1022
- # This happens because we don't have access to the param name when the
1023
- # exception is originally raised, but we want it in the message
1024
- raise InterpolationError, "Error converting value for param '#{param}': #{err}", err.backtrace
1025
- end
1026
-
1027
- val = setting.munge(val) if setting.respond_to?(:munge)
1028
- # And cache it
1029
1008
  @cache[environment||"none"][param] = val
1030
1009
  val
1031
1010
  end
1032
1011
 
1012
+ ##
1013
+ # (#15337) All of the logic to determine the configuration file to use
1014
+ # should be centralized into this method. The simplified approach is:
1015
+ #
1016
+ # 1. If there is an explicit configuration file, use that. (--confdir or
1017
+ # --config)
1018
+ # 2. If we're running as a root process, use the system puppet.conf
1019
+ # (usually /etc/puppet/puppet.conf)
1020
+ # 3. Otherwise, use the user puppet.conf (usually ~/.puppet/puppet.conf)
1021
+ #
1022
+ # @api private
1023
+ # @todo this code duplicates {Puppet::Util::RunMode#which_dir} as described
1024
+ # in {http://projects.puppetlabs.com/issues/16637 #16637}
1025
+ def which_configuration_file
1026
+ if explicit_config_file? or Puppet.features.root? then
1027
+ return main_config_file
1028
+ else
1029
+ return user_config_file
1030
+ end
1031
+ end
1032
+
1033
+
1033
1034
  private
1034
1035
 
1035
1036
  def get_config_file_default(default)
@@ -1064,19 +1065,31 @@ Generated on #{Time.now}.
1064
1065
  end
1065
1066
 
1066
1067
  # Yield each search source in turn.
1067
- def each_source(environment)
1068
- searchpath(environment).each do |source|
1069
-
1070
- # Modify the source as necessary.
1071
- source = self.preferred_run_mode if source == :run_mode
1072
- yield source
1073
- end
1074
- end
1075
-
1076
- # Return all settings that have associated hooks; this is so
1077
- # we can call them after parsing the configuration file.
1078
- def settings_with_hooks
1079
- @config.values.find_all { |setting| setting.has_hook? }
1068
+ def value_sets_for(environment, mode)
1069
+ searchpath(environment).collect do |name|
1070
+ case name
1071
+ when :cli, :memory, :application_defaults, :overridden_defaults
1072
+ @value_sets[name]
1073
+ when :run_mode
1074
+ if @configuration_file
1075
+ section = @configuration_file.sections[mode]
1076
+ if section
1077
+ ValuesFromSection.new(mode, section)
1078
+ end
1079
+ end
1080
+ else
1081
+ values_from_section = nil
1082
+ if @configuration_file
1083
+ if section = @configuration_file.sections[name]
1084
+ values_from_section = ValuesFromSection.new(name, section)
1085
+ end
1086
+ end
1087
+ if values_from_section.nil? && @global_defaults_initialized
1088
+ values_from_section = ValuesFromCurrentEnvironment.new(name)
1089
+ end
1090
+ values_from_section
1091
+ end
1092
+ end.compact
1080
1093
  end
1081
1094
 
1082
1095
  # This method just turns a file in to a hash of hashes.
@@ -1089,18 +1102,9 @@ Generated on #{Time.now}.
1089
1102
  begin
1090
1103
  return File.read(file)
1091
1104
  rescue Errno::ENOENT
1092
- raise ArgumentError, "No such file #{file}"
1105
+ raise ArgumentError, "No such file #{file}", $!.backtrace
1093
1106
  rescue Errno::EACCES
1094
- raise ArgumentError, "Permission denied to file #{file}"
1095
- end
1096
- end
1097
-
1098
- # Set file metadata.
1099
- def set_metadata(meta)
1100
- meta.each do |var, values|
1101
- values.each do |param, value|
1102
- @config[var].send(param.to_s + "=", value)
1103
- end
1107
+ raise ArgumentError, "Permission denied to file #{file}", $!.backtrace
1104
1108
  end
1105
1109
  end
1106
1110
 
@@ -1114,26 +1118,6 @@ Generated on #{Time.now}.
1114
1118
  end
1115
1119
  private :clear_everything_for_tests
1116
1120
 
1117
- ##
1118
- # (#15337) All of the logic to determine the configuration file to use
1119
- # should be centralized into this method. The simplified approach is:
1120
- #
1121
- # 1. If there is an explicit configuration file, use that. (--confdir or
1122
- # --config)
1123
- # 2. If we're running as a root process, use the system puppet.conf
1124
- # (usually /etc/puppet/puppet.conf)
1125
- # 3. Otherwise, use the user puppet.conf (usually ~/.puppet/puppet.conf)
1126
- #
1127
- # @todo this code duplicates {Puppet::Util::RunMode#which_dir} as described
1128
- # in {http://projects.puppetlabs.com/issues/16637 #16637}
1129
- def which_configuration_file
1130
- if explicit_config_file? or Puppet.features.root? then
1131
- return main_config_file
1132
- else
1133
- return user_config_file
1134
- end
1135
- end
1136
-
1137
1121
  def explicit_config_file?
1138
1122
  # Figure out if the user has provided an explicit configuration file. If
1139
1123
  # so, return the path to the file, if not return nil.
@@ -1158,4 +1142,171 @@ Generated on #{Time.now}.
1158
1142
  end
1159
1143
  private :explicit_config_file?
1160
1144
 
1145
+ # Lookup configuration setting value through a chain of different value sources.
1146
+ #
1147
+ # @api public
1148
+ class ChainedValues
1149
+ # @see Puppet::Settings.values
1150
+ # @api private
1151
+ def initialize(mode, environment, value_sets, defaults)
1152
+ @mode = mode
1153
+ @environment = environment
1154
+ @value_sets = value_sets
1155
+ @defaults = defaults
1156
+ end
1157
+
1158
+ # Lookup the uninterpolated value.
1159
+ #
1160
+ # @param name [Symbol] The configuration setting name to look up
1161
+ # @return [Object] The configuration setting value or nil if the setting is not known
1162
+ # @api public
1163
+ def lookup(name)
1164
+ set = @value_sets.find do |set|
1165
+ set.include?(name)
1166
+ end
1167
+ if set
1168
+ value = set.lookup(name)
1169
+ if !value.nil?
1170
+ return value
1171
+ end
1172
+ end
1173
+
1174
+ @defaults[name].default
1175
+ end
1176
+
1177
+ # Lookup the interpolated value. All instances of `$name` in the value will
1178
+ # be replaced by performing a lookup of `name` and substituting the text
1179
+ # for `$name` in the original value. This interpolation is only performed
1180
+ # if the looked up value is a String.
1181
+ #
1182
+ # @param name [Symbol] The configuration setting name to look up
1183
+ # @return [Object] The configuration setting value or nil if the setting is not known
1184
+ # @api public
1185
+ def interpolate(name)
1186
+ setting = @defaults[name]
1187
+
1188
+ if setting
1189
+ val = lookup(name)
1190
+ # if we interpolate code, all hell breaks loose.
1191
+ if name == :code
1192
+ val
1193
+ else
1194
+ # Convert it if necessary
1195
+ begin
1196
+ val = convert(val)
1197
+ rescue InterpolationError => err
1198
+ # This happens because we don't have access to the param name when the
1199
+ # exception is originally raised, but we want it in the message
1200
+ raise InterpolationError, "Error converting value for param '#{name}': #{err}", err.backtrace
1201
+ end
1202
+
1203
+ setting.munge(val)
1204
+ end
1205
+ else
1206
+ nil
1207
+ end
1208
+ end
1209
+
1210
+ private
1211
+
1212
+ def convert(value)
1213
+ return nil if value.nil?
1214
+ return value unless value.is_a? String
1215
+ value.gsub(/\$(\w+)|\$\{(\w+)\}/) do |value|
1216
+ varname = $2 || $1
1217
+ if varname == "environment"
1218
+ @environment
1219
+ elsif varname == "run_mode"
1220
+ @mode
1221
+ elsif !(pval = interpolate(varname.to_sym)).nil?
1222
+ pval
1223
+ else
1224
+ raise InterpolationError, "Could not find value for #{value}"
1225
+ end
1226
+ end
1227
+ end
1228
+ end
1229
+
1230
+ class Values
1231
+ def initialize(name, defaults)
1232
+ @name = name
1233
+ @values = {}
1234
+ @defaults = defaults
1235
+ end
1236
+
1237
+ def include?(name)
1238
+ @values.include?(name)
1239
+ end
1240
+
1241
+ def set(name, value)
1242
+ if !@defaults[name]
1243
+ raise ArgumentError,
1244
+ "Attempt to assign a value to unknown setting #{name.inspect}"
1245
+ end
1246
+
1247
+ if @defaults[name].has_hook?
1248
+ @defaults[name].handle(value)
1249
+ end
1250
+
1251
+ @values[name] = value
1252
+ end
1253
+
1254
+ def lookup(name)
1255
+ @values[name]
1256
+ end
1257
+ end
1258
+
1259
+ class ValuesFromSection
1260
+ def initialize(name, section)
1261
+ @name = name
1262
+ @section = section
1263
+ end
1264
+
1265
+ def include?(name)
1266
+ !@section.setting(name).nil?
1267
+ end
1268
+
1269
+ def lookup(name)
1270
+ setting = @section.setting(name)
1271
+ if setting
1272
+ setting.value
1273
+ end
1274
+ end
1275
+ end
1276
+
1277
+ # @api private
1278
+ class ValuesFromCurrentEnvironment
1279
+ def initialize(desired_environment)
1280
+ @desired_environment = desired_environment
1281
+ end
1282
+
1283
+ def include?(name)
1284
+ return false unless name == :modulepath || name == :manifest
1285
+ if i = instance
1286
+ i.include?(name)
1287
+ end
1288
+ end
1289
+
1290
+ def lookup(name)
1291
+ return nil unless name == :modulepath || name == :manifest
1292
+ if i = instance
1293
+ i[name]
1294
+ end
1295
+ end
1296
+
1297
+ private
1298
+
1299
+ def instance
1300
+ unless @instance
1301
+ env = Puppet.lookup(:current_environment)
1302
+ if env.name == @desired_environment
1303
+ @instance = {
1304
+ :modulepath => env.full_modulepath.join(File::PATH_SEPARATOR),
1305
+ :manifest => env.manifest,
1306
+ }
1307
+ end
1308
+ end
1309
+ return @instance
1310
+ end
1311
+ end
1161
1312
  end