puppet 4.2.0 → 4.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (422) hide show
  1. data/CONTRIBUTING.md +1 -1
  2. data/Gemfile +5 -7
  3. data/README.md +1 -1
  4. data/Rakefile +20 -0
  5. data/ext/debian/puppet.init +0 -1
  6. data/ext/debian/puppet.logrotate +14 -5
  7. data/ext/osx/puppet.plist +2 -4
  8. data/ext/project_data.yaml +1 -1
  9. data/ext/redhat/client.init +65 -12
  10. data/ext/redhat/logrotate +15 -3
  11. data/ext/redhat/puppet.spec.erb +5 -1
  12. data/ext/redhat/server.init +1 -1
  13. data/ext/solaris/smf/puppet +44 -0
  14. data/ext/solaris/smf/puppet.xml +44 -0
  15. data/ext/suse/client.init +27 -27
  16. data/ext/suse/server.init +2 -2
  17. data/ext/systemd/puppet.service +1 -0
  18. data/install.rb +21 -39
  19. data/lib/hiera/puppet_function.rb +5 -5
  20. data/lib/puppet/agent/locker.rb +11 -2
  21. data/lib/puppet/agent.rb +4 -4
  22. data/lib/puppet/application/agent.rb +28 -14
  23. data/lib/puppet/application/apply.rb +17 -4
  24. data/lib/puppet/application/cert.rb +16 -0
  25. data/lib/puppet/application/filebucket.rb +78 -4
  26. data/lib/puppet/application/lookup.rb +356 -0
  27. data/lib/puppet/application/master.rb +5 -1
  28. data/lib/puppet/configurer.rb +9 -5
  29. data/lib/puppet/context/trusted_information.rb +21 -1
  30. data/lib/puppet/context.rb +16 -1
  31. data/lib/puppet/daemon.rb +17 -13
  32. data/lib/puppet/data_binding.rb +4 -2
  33. data/lib/puppet/data_providers/data_adapter.rb +7 -68
  34. data/lib/puppet/data_providers/data_function_support.rb +5 -26
  35. data/lib/puppet/data_providers/function_env_data_provider.rb +0 -10
  36. data/lib/puppet/data_providers/function_module_data_provider.rb +0 -22
  37. data/lib/puppet/data_providers/hiera_config.rb +106 -0
  38. data/lib/puppet/data_providers/hiera_env_data_provider.rb +18 -0
  39. data/lib/puppet/data_providers/hiera_interpolate.rb +97 -0
  40. data/lib/puppet/data_providers/hiera_module_data_provider.rb +23 -0
  41. data/lib/puppet/data_providers/hiera_support.rb +37 -0
  42. data/lib/puppet/data_providers/json_data_provider_factory.rb +31 -0
  43. data/lib/puppet/data_providers/lookup_adapter.rb +200 -0
  44. data/lib/puppet/data_providers/yaml_data_provider_factory.rb +32 -0
  45. data/lib/puppet/data_providers.rb +12 -13
  46. data/lib/puppet/defaults.rb +14 -3
  47. data/lib/puppet/environments.rb +94 -6
  48. data/lib/puppet/error.rb +4 -0
  49. data/lib/puppet/face/module/changes.rb +2 -1
  50. data/lib/puppet/feature/cfacter.rb +1 -0
  51. data/lib/puppet/file_bucket/dipper.rb +58 -2
  52. data/lib/puppet/file_system/windows.rb +3 -1
  53. data/lib/puppet/functions/assert_type.rb +48 -12
  54. data/lib/puppet/functions/defined.rb +79 -48
  55. data/lib/puppet/functions/each.rb +85 -27
  56. data/lib/puppet/functions/epp.rb +29 -37
  57. data/lib/puppet/functions/filter.rb +60 -25
  58. data/lib/puppet/functions/hiera.rb +76 -3
  59. data/lib/puppet/functions/hiera_array.rb +65 -3
  60. data/lib/puppet/functions/hiera_hash.rb +74 -2
  61. data/lib/puppet/functions/hiera_include.rb +77 -4
  62. data/lib/puppet/functions/inline_epp.rb +44 -71
  63. data/lib/puppet/functions/lookup.rb +19 -17
  64. data/lib/puppet/functions/map.rb +56 -21
  65. data/lib/puppet/functions/match.rb +29 -12
  66. data/lib/puppet/functions/reduce.rb +95 -58
  67. data/lib/puppet/functions/versioncmp.rb +36 -0
  68. data/lib/puppet/functions/with.rb +15 -7
  69. data/lib/puppet/functions.rb +2 -4
  70. data/lib/puppet/indirector/catalog/compiler.rb +3 -3
  71. data/lib/puppet/indirector/catalog/static_compiler.rb +46 -30
  72. data/lib/puppet/indirector/data_binding/none.rb +4 -1
  73. data/lib/puppet/indirector/file_bucket_file/file.rb +58 -1
  74. data/lib/puppet/indirector/hiera.rb +4 -0
  75. data/lib/puppet/indirector/indirection.rb +6 -1
  76. data/lib/puppet/indirector/json.rb +1 -1
  77. data/lib/puppet/indirector/msgpack.rb +1 -1
  78. data/lib/puppet/indirector/request.rb +7 -8
  79. data/lib/puppet/indirector/resource_type/parser.rb +5 -3
  80. data/lib/puppet/info_service/class_information_service.rb +111 -0
  81. data/lib/puppet/info_service.rb +7 -0
  82. data/lib/puppet/module_tool/applications/unpacker.rb +1 -1
  83. data/lib/puppet/module_tool/metadata.rb +32 -9
  84. data/lib/puppet/module_tool/skeleton/templates/generator/README.md.erb +42 -38
  85. data/lib/puppet/module_tool/skeleton/templates/generator/manifests/init.pp.erb +25 -18
  86. data/lib/puppet/network/authconfig.rb +21 -1
  87. data/lib/puppet/network/authorization.rb +8 -1
  88. data/lib/puppet/network/http/api/master/v3/environment.rb +59 -0
  89. data/lib/puppet/network/http/api/master/v3.rb +7 -1
  90. data/lib/puppet/node/environment.rb +9 -2
  91. data/lib/puppet/node.rb +11 -5
  92. data/lib/puppet/parser/ast/pops_bridge.rb +39 -1
  93. data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +64 -0
  94. data/lib/puppet/parser/compiler/catalog_validator/relationship_validator.rb +38 -0
  95. data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +20 -0
  96. data/lib/puppet/parser/compiler/catalog_validator.rb +33 -0
  97. data/lib/puppet/parser/compiler.rb +300 -12
  98. data/lib/puppet/parser/environment_compiler.rb +165 -0
  99. data/lib/puppet/parser/functions/assert_type.rb +46 -16
  100. data/lib/puppet/parser/functions/defined.rb +105 -68
  101. data/lib/puppet/parser/functions/each.rb +85 -27
  102. data/lib/puppet/parser/functions/epp.rb +29 -37
  103. data/lib/puppet/parser/functions/filter.rb +59 -23
  104. data/lib/puppet/parser/functions/hiera.rb +83 -27
  105. data/lib/puppet/parser/functions/hiera_array.rb +71 -28
  106. data/lib/puppet/parser/functions/hiera_hash.rb +81 -30
  107. data/lib/puppet/parser/functions/hiera_include.rb +81 -40
  108. data/lib/puppet/parser/functions/inline_epp.rb +35 -60
  109. data/lib/puppet/parser/functions/inline_template.rb +2 -2
  110. data/lib/puppet/parser/functions/map.rb +55 -20
  111. data/lib/puppet/parser/functions/match.rb +27 -12
  112. data/lib/puppet/parser/functions/reduce.rb +97 -60
  113. data/lib/puppet/parser/functions/with.rb +16 -8
  114. data/lib/puppet/parser/resource.rb +103 -21
  115. data/lib/puppet/parser.rb +3 -0
  116. data/lib/puppet/plugins/configuration.rb +3 -2
  117. data/lib/puppet/plugins/data_providers/data_provider.rb +283 -0
  118. data/lib/puppet/plugins/data_providers/registry.rb +84 -0
  119. data/lib/puppet/plugins/data_providers.rb +12 -60
  120. data/lib/puppet/pops/adapters.rb +12 -0
  121. data/lib/puppet/pops/binder/binder.rb +2 -2
  122. data/lib/puppet/pops/binder/bindings_checker.rb +1 -1
  123. data/lib/puppet/pops/binder/bindings_label_provider.rb +3 -1
  124. data/lib/puppet/pops/binder/bindings_loader.rb +6 -2
  125. data/lib/puppet/pops/binder/bindings_model_meta.rb +2 -2
  126. data/lib/puppet/pops/binder/config/binder_config.rb +1 -1
  127. data/lib/puppet/pops/binder/injector.rb +4 -4
  128. data/lib/puppet/pops/binder/key_factory.rb +3 -9
  129. data/lib/puppet/pops/binder/scheme_handler/module_scheme.rb +68 -9
  130. data/lib/puppet/pops/evaluator/access_operator.rb +27 -60
  131. data/lib/puppet/pops/evaluator/closure.rb +8 -8
  132. data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +1 -1
  133. data/lib/puppet/pops/evaluator/evaluator_impl.rb +10 -6
  134. data/lib/puppet/pops/evaluator/literal_evaluator.rb +87 -0
  135. data/lib/puppet/pops/evaluator/relationship_operator.rb +7 -1
  136. data/lib/puppet/pops/functions/dispatcher.rb +3 -3
  137. data/lib/puppet/pops/issues.rb +11 -3
  138. data/lib/puppet/pops/label_provider.rb +1 -1
  139. data/lib/puppet/pops/lookup/explainer.rb +402 -0
  140. data/lib/puppet/pops/lookup/invocation.rb +117 -0
  141. data/lib/puppet/pops/lookup.rb +25 -47
  142. data/lib/puppet/pops/merge_strategy.rb +73 -5
  143. data/lib/puppet/pops/model/factory.rb +38 -3
  144. data/lib/puppet/pops/model/model_label_provider.rb +10 -1
  145. data/lib/puppet/pops/model/model_meta.rb +19 -1
  146. data/lib/puppet/pops/model/model_tree_dumper.rb +18 -0
  147. data/lib/puppet/pops/parser/code_merger.rb +13 -1
  148. data/lib/puppet/pops/parser/egrammar.ra +65 -2
  149. data/lib/puppet/pops/parser/eparser.rb +1569 -1241
  150. data/lib/puppet/pops/parser/lexer2.rb +32 -1
  151. data/lib/puppet/pops/parser/locator.rb +1 -1
  152. data/lib/puppet/pops/parser/parser_support.rb +25 -13
  153. data/lib/puppet/pops/patterns.rb +3 -0
  154. data/lib/puppet/pops/types/enumeration.rb +1 -2
  155. data/lib/puppet/pops/types/type_asserter.rb +16 -15
  156. data/lib/puppet/pops/types/type_assertion_error.rb +1 -0
  157. data/lib/puppet/pops/types/type_calculator.rb +171 -1020
  158. data/lib/puppet/pops/types/type_factory.rb +87 -148
  159. data/lib/puppet/pops/types/type_mismatch_describer.rb +743 -0
  160. data/lib/puppet/pops/types/type_parser.rb +118 -129
  161. data/lib/puppet/pops/types/types.rb +1394 -255
  162. data/lib/puppet/pops/types/types_meta.rb +0 -234
  163. data/lib/puppet/pops/validation/checker4_0.rb +49 -1
  164. data/lib/puppet/pops/validation/validator_factory_4_0.rb +3 -1
  165. data/lib/puppet/pops/validation.rb +7 -2
  166. data/lib/puppet/pops.rb +19 -17
  167. data/lib/puppet/provider/augeas/augeas.rb +50 -0
  168. data/lib/puppet/provider/exec.rb +6 -1
  169. data/lib/puppet/provider/group/directoryservice.rb +10 -0
  170. data/lib/puppet/provider/package/dnf.rb +41 -0
  171. data/lib/puppet/provider/package/gem.rb +7 -2
  172. data/lib/puppet/provider/package/nim.rb +1 -1
  173. data/lib/puppet/provider/package/rpm.rb +1 -0
  174. data/lib/puppet/provider/package/windows/exe_package.rb +10 -8
  175. data/lib/puppet/provider/package/windows/msi_package.rb +4 -3
  176. data/lib/puppet/provider/package/windows/package.rb +9 -1
  177. data/lib/puppet/provider/package/yum.rb +20 -9
  178. data/lib/puppet/provider/service/bsd.rb +1 -1
  179. data/lib/puppet/provider/service/debian.rb +21 -0
  180. data/lib/puppet/provider/service/init.rb +6 -0
  181. data/lib/puppet/provider/service/launchd.rb +36 -7
  182. data/lib/puppet/provider/service/rcng.rb +51 -0
  183. data/lib/puppet/provider/service/redhat.rb +2 -1
  184. data/lib/puppet/provider/service/smf.rb +43 -2
  185. data/lib/puppet/provider/service/src.rb +27 -0
  186. data/lib/puppet/provider/service/systemd.rb +25 -5
  187. data/lib/puppet/provider/sshkey/parsed.rb +19 -9
  188. data/lib/puppet/provider/zone/solaris.rb +2 -2
  189. data/lib/puppet/reference/configuration.rb +10 -4
  190. data/lib/puppet/reference/report.rb +9 -12
  191. data/lib/puppet/reports.rb +5 -1
  192. data/lib/puppet/resource/capability_finder.rb +95 -0
  193. data/lib/puppet/resource/catalog.rb +47 -7
  194. data/lib/puppet/resource/status.rb +0 -2
  195. data/lib/puppet/resource/type.rb +238 -44
  196. data/lib/puppet/resource/type_collection.rb +60 -2
  197. data/lib/puppet/resource.rb +50 -73
  198. data/lib/puppet/settings/file_setting.rb +10 -9
  199. data/lib/puppet/settings.rb +2 -2
  200. data/lib/puppet/ssl/certificate_authority/interface.rb +2 -2
  201. data/lib/puppet/ssl/oids.rb +9 -1
  202. data/lib/puppet/transaction/additional_resource_generator.rb +71 -8
  203. data/lib/puppet/transaction/resource_harness.rb +9 -4
  204. data/lib/puppet/transaction.rb +8 -1
  205. data/lib/puppet/type/augeas.rb +8 -0
  206. data/lib/puppet/type/file/source.rb +14 -12
  207. data/lib/puppet/type/package.rb +9 -6
  208. data/lib/puppet/type/user.rb +4 -2
  209. data/lib/puppet/type.rb +78 -7
  210. data/lib/puppet/util/command_line.rb +4 -0
  211. data/lib/puppet/util/execution.rb +18 -2
  212. data/lib/puppet/util/tagging.rb +7 -1
  213. data/lib/puppet/util/windows/adsi.rb +5 -2
  214. data/lib/puppet/util/windows/security.rb +4 -1
  215. data/lib/puppet/util/windows/taskscheduler.rb +1 -1
  216. data/lib/puppet/util.rb +9 -1
  217. data/lib/puppet/version.rb +1 -1
  218. data/lib/puppet.rb +12 -0
  219. data/spec/fixtures/unit/application/environments/production/data/common.yaml +3 -0
  220. data/spec/fixtures/unit/application/environments/production/environment.conf +1 -0
  221. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_json/data/bad.json +3 -0
  222. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_json/environment.conf +2 -0
  223. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_json/hiera.yaml +5 -0
  224. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_json/manifests/site.pp +5 -0
  225. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_yaml/data/bad.yaml +3 -0
  226. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_yaml/environment.conf +2 -0
  227. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_yaml/hiera.yaml +5 -0
  228. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_yaml/manifests/site.pp +5 -0
  229. data/spec/fixtures/unit/data_providers/environments/hiera_defaults/data/common.yaml +2 -0
  230. data/spec/fixtures/unit/data_providers/environments/hiera_defaults/environment.conf +2 -0
  231. data/spec/fixtures/unit/data_providers/environments/hiera_defaults/manifests/site.pp +1 -0
  232. data/spec/fixtures/unit/data_providers/environments/hiera_defaults/modules/one/data/common.yaml +2 -0
  233. data/spec/fixtures/unit/data_providers/environments/hiera_defaults/modules/one/manifests/init.pp +5 -0
  234. data/spec/fixtures/unit/data_providers/environments/hiera_defaults/modules/one/metadata.json +9 -0
  235. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/first.json +3 -0
  236. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/name.yaml +2 -0
  237. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/second.json +3 -0
  238. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/single.yaml +2 -0
  239. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data2/single.yaml +2 -0
  240. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/environment.conf +2 -0
  241. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/hiera.yaml +18 -0
  242. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/manifests/site.pp +5 -0
  243. data/spec/fixtures/unit/data_providers/environments/hiera_misc/data/common.yaml +46 -0
  244. data/spec/fixtures/unit/data_providers/environments/hiera_misc/environment.conf +2 -0
  245. data/spec/fixtures/unit/data_providers/environments/hiera_misc/manifests/site.pp +1 -0
  246. data/spec/fixtures/unit/data_providers/environments/hiera_misc/modules/one/data/common.yaml +30 -0
  247. data/spec/fixtures/unit/data_providers/environments/hiera_misc/modules/one/manifests/init.pp +13 -0
  248. data/spec/fixtures/unit/data_providers/environments/hiera_misc/modules/one/metadata.json +9 -0
  249. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/environment.conf +2 -0
  250. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/manifests/site.pp +1 -0
  251. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/first.json +3 -0
  252. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/name.yaml +1 -0
  253. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/second.json +3 -0
  254. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/single.yaml +2 -0
  255. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data2/single.yaml +2 -0
  256. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/hiera.yaml +18 -0
  257. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/manifests/init.pp +5 -0
  258. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/metadata.json +9 -0
  259. data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/lib/puppet_x/helindbe/sample_env_data.rb +1 -0
  260. data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/lib/puppet_x/helindbe/sample_module_data.rb +1 -0
  261. data/spec/fixtures/unit/functions/lookup/environments/production/modules/hieraprovider/data/first.json +3 -0
  262. data/spec/fixtures/unit/functions/lookup/environments/production/modules/hieraprovider/hiera.yaml +8 -0
  263. data/spec/fixtures/unit/functions/lookup/environments/production/modules/hieraprovider/manifests/init.pp +5 -0
  264. data/spec/fixtures/unit/functions/lookup/environments/production/modules/hieraprovider/metadata.json +9 -0
  265. data/spec/fixtures/unit/functions/lookup/environments/production/modules/meta/lib/puppet/functions/meta/data.rb +9 -0
  266. data/spec/fixtures/unit/functions/lookup/environments/production/modules/meta/manifests/init.pp +3 -0
  267. data/spec/fixtures/unit/functions/lookup/environments/production/modules/meta/metadata.json +9 -0
  268. data/spec/fixtures/unit/functions/lookup/environments/production/modules/metawcp/lib/puppet/bindings/metawcp/default.rb +10 -0
  269. data/spec/fixtures/unit/functions/lookup/environments/production/modules/metawcp/lib/puppet_x/thallgren/sample_module_data.rb +23 -0
  270. data/spec/fixtures/unit/functions/lookup/environments/production/modules/metawcp/manifests/init.pp +3 -0
  271. data/spec/fixtures/unit/functions/lookup/environments/production/modules/metawcp/metadata.json +9 -0
  272. data/spec/fixtures/unit/provider/package/yum/yum-check-update-security.txt +184 -0
  273. data/spec/fixtures/vcr/cassettes/Puppet_Network_HTTP_Connection/when_handling_requests/_request_get/should_yield_to_the_block.yml +24 -0
  274. data/spec/fixtures/vcr/cassettes/Puppet_Network_HTTP_Connection/when_handling_requests/_request_head/should_yield_to_the_block.yml +24 -0
  275. data/spec/fixtures/vcr/cassettes/Puppet_Network_HTTP_Connection/when_handling_requests/_request_post/should_yield_to_the_block.yml +24 -0
  276. data/spec/integration/data_binding_spec.rb +229 -0
  277. data/spec/integration/file_bucket/file_spec.rb +2 -2
  278. data/spec/integration/parser/compiler_spec.rb +30 -24
  279. data/spec/integration/parser/resource_expressions_spec.rb +4 -4
  280. data/spec/integration/parser/undef_param_spec.rb +1 -1
  281. data/spec/integration/provider/package_spec.rb +3 -1
  282. data/spec/integration/resource/catalog_spec.rb +1 -1
  283. data/spec/integration/ssl/certificate_authority_spec.rb +0 -1
  284. data/spec/integration/ssl/certificate_request_spec.rb +0 -1
  285. data/spec/integration/ssl/certificate_revocation_list_spec.rb +0 -1
  286. data/spec/integration/ssl/host_spec.rb +0 -1
  287. data/spec/integration/type/package_spec.rb +2 -0
  288. data/spec/integration/util/rdoc/parser_spec.rb +1 -1
  289. data/spec/integration/util/windows/security_spec.rb +18 -0
  290. data/spec/lib/matchers/include_in_order.rb +2 -2
  291. data/spec/shared_behaviours/iterative_functions.rb +8 -8
  292. data/spec/spec_helper.rb +7 -0
  293. data/spec/unit/agent/locker_spec.rb +4 -4
  294. data/spec/unit/agent_spec.rb +0 -8
  295. data/spec/unit/application/agent_spec.rb +5 -0
  296. data/spec/unit/application/apply_spec.rb +9 -1
  297. data/spec/unit/application/filebucket_spec.rb +88 -2
  298. data/spec/unit/application/lookup_spec.rb +195 -0
  299. data/spec/unit/application/master_spec.rb +2 -2
  300. data/spec/unit/application_spec.rb +3 -3
  301. data/spec/unit/appmgmt_spec.rb +657 -0
  302. data/spec/unit/capability_spec.rb +414 -0
  303. data/spec/unit/configurer_spec.rb +7 -1
  304. data/spec/unit/context/trusted_information_spec.rb +24 -1
  305. data/spec/unit/daemon_spec.rb +18 -8
  306. data/spec/unit/data_providers/hiera_data_provider_spec.rb +201 -0
  307. data/spec/unit/environments_spec.rb +2 -0
  308. data/spec/unit/face/node_spec.rb +1 -1
  309. data/spec/unit/file_bucket/dipper_spec.rb +210 -1
  310. data/spec/unit/file_serving/configuration_spec.rb +1 -1
  311. data/spec/unit/file_system_spec.rb +20 -0
  312. data/spec/unit/functions/assert_type_spec.rb +5 -7
  313. data/spec/unit/functions/defined_spec.rb +2 -2
  314. data/spec/unit/functions/epp_spec.rb +2 -2
  315. data/spec/unit/functions/filter_spec.rb +18 -0
  316. data/spec/unit/functions/hiera_spec.rb +2 -2
  317. data/spec/unit/functions/lookup_spec.rb +200 -9
  318. data/spec/unit/functions/regsubst_spec.rb +17 -8
  319. data/spec/unit/functions/scanf_spec.rb +1 -1
  320. data/spec/unit/functions/split_spec.rb +2 -2
  321. data/spec/unit/functions/versioncmp_spec.rb +36 -0
  322. data/spec/unit/functions4_spec.rb +58 -72
  323. data/spec/unit/graph/sequential_prioritizer_spec.rb +1 -1
  324. data/spec/unit/indirector/catalog/compiler_spec.rb +28 -8
  325. data/spec/unit/indirector/catalog/static_compiler_spec.rb +38 -20
  326. data/spec/unit/indirector/data_binding/none_spec.rb +2 -2
  327. data/spec/unit/indirector/file_bucket_file/file_spec.rb +52 -1
  328. data/spec/unit/indirector/indirection_spec.rb +13 -2
  329. data/spec/unit/indirector/request_spec.rb +8 -8
  330. data/spec/unit/indirector/ssl_file_spec.rb +1 -1
  331. data/spec/unit/indirector/yaml_spec.rb +1 -1
  332. data/spec/unit/info_service_spec.rb +236 -0
  333. data/spec/unit/module_tool/application_spec.rb +1 -1
  334. data/spec/unit/module_tool/applications/builder_spec.rb +1 -1
  335. data/spec/unit/module_tool/metadata_spec.rb +31 -2
  336. data/spec/unit/network/authconfig_spec.rb +62 -32
  337. data/spec/unit/network/authorization_spec.rb +30 -2
  338. data/spec/unit/network/authstore_spec.rb +1 -1
  339. data/spec/unit/network/http/compression_spec.rb +1 -1
  340. data/spec/unit/network/http/connection_spec.rb +14 -19
  341. data/spec/unit/network/http/handler_spec.rb +0 -5
  342. data/spec/unit/network/rights_spec.rb +3 -3
  343. data/spec/unit/node_spec.rb +27 -0
  344. data/spec/unit/parser/ast/leaf_spec.rb +1 -1
  345. data/spec/unit/parser/compiler_spec.rb +86 -2
  346. data/spec/unit/parser/functions/create_resources_spec.rb +1 -1
  347. data/spec/unit/parser/resource_spec.rb +2 -20
  348. data/spec/unit/pops/binder/config/binder_config_spec.rb +1 -1
  349. data/spec/unit/pops/binder/injector_spec.rb +3 -3
  350. data/spec/unit/pops/evaluator/access_ops_spec.rb +13 -11
  351. data/spec/unit/pops/evaluator/basic_expressions_spec.rb +1 -2
  352. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +20 -11
  353. data/spec/unit/pops/evaluator/literal_evaluator_spec.rb +43 -0
  354. data/spec/unit/pops/label_provider_spec.rb +5 -1
  355. data/spec/unit/pops/parser/lexer2_spec.rb +39 -0
  356. data/spec/unit/pops/parser/parse_application_spec.rb +40 -0
  357. data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +4 -0
  358. data/spec/unit/pops/parser/parse_capabilities_spec.rb +47 -0
  359. data/spec/unit/pops/parser/parse_site_spec.rb +38 -0
  360. data/spec/unit/pops/parser/parser_rspec_helper.rb +5 -0
  361. data/spec/unit/pops/parser/parser_spec.rb +18 -0
  362. data/spec/unit/pops/types/type_calculator_spec.rb +427 -444
  363. data/spec/unit/pops/types/type_factory_spec.rb +12 -12
  364. data/spec/unit/pops/types/type_parser_spec.rb +15 -12
  365. data/spec/unit/pops/validator/validator_spec.rb +68 -0
  366. data/spec/unit/property_spec.rb +1 -1
  367. data/spec/unit/provider/augeas/augeas_spec.rb +50 -0
  368. data/spec/unit/provider/group/directoryservice_spec.rb +33 -0
  369. data/spec/unit/provider/group/windows_adsi_spec.rb +3 -0
  370. data/spec/unit/provider/package/dnf_spec.rb +92 -0
  371. data/spec/unit/provider/package/gem_spec.rb +7 -0
  372. data/spec/unit/provider/package/nim_spec.rb +6 -6
  373. data/spec/unit/provider/package/rpm_spec.rb +25 -2
  374. data/spec/unit/provider/package/windows/package_spec.rb +41 -0
  375. data/spec/unit/provider/package/yum_spec.rb +35 -12
  376. data/spec/unit/provider/scheduled_task/win32_taskscheduler_spec.rb +10 -0
  377. data/spec/unit/provider/service/debian_spec.rb +28 -0
  378. data/spec/unit/provider/service/gentoo_spec.rb +1 -0
  379. data/spec/unit/provider/service/init_spec.rb +6 -0
  380. data/spec/unit/provider/service/launchd_spec.rb +85 -10
  381. data/spec/unit/provider/service/openrc_spec.rb +1 -0
  382. data/spec/unit/provider/service/rcng_spec.rb +41 -0
  383. data/spec/unit/provider/service/redhat_spec.rb +8 -1
  384. data/spec/unit/provider/service/smf_spec.rb +30 -5
  385. data/spec/unit/provider/service/src_spec.rb +20 -4
  386. data/spec/unit/provider/service/systemd_spec.rb +79 -29
  387. data/spec/unit/provider/ssh_authorized_key/parsed_spec.rb +1 -1
  388. data/spec/unit/provider/sshkey/parsed_spec.rb +23 -0
  389. data/spec/unit/provider/user/windows_adsi_spec.rb +2 -1
  390. data/spec/unit/provider/zone/solaris_spec.rb +19 -0
  391. data/spec/unit/reports_spec.rb +10 -0
  392. data/spec/unit/resource/capability_finder_spec.rb +56 -0
  393. data/spec/unit/resource/catalog_spec.rb +31 -8
  394. data/spec/unit/resource/type_collection_spec.rb +23 -2
  395. data/spec/unit/resource/type_spec.rb +1 -1
  396. data/spec/unit/resource_spec.rb +23 -5
  397. data/spec/unit/settings/file_setting_spec.rb +31 -0
  398. data/spec/unit/settings_spec.rb +91 -2
  399. data/spec/unit/ssl/certificate_authority/interface_spec.rb +4 -3
  400. data/spec/unit/ssl/certificate_authority_spec.rb +5 -3
  401. data/spec/unit/ssl/host_spec.rb +2 -2
  402. data/spec/unit/ssl/oids_spec.rb +8 -0
  403. data/spec/unit/transaction/additional_resource_generator_spec.rb +78 -5
  404. data/spec/unit/transaction/report_spec.rb +24 -1
  405. data/spec/unit/transaction_spec.rb +7 -0
  406. data/spec/unit/type/exec_spec.rb +16 -8
  407. data/spec/unit/type/host_spec.rb +4 -4
  408. data/spec/unit/type/package_spec.rb +1 -0
  409. data/spec/unit/type/tidy_spec.rb +4 -4
  410. data/spec/unit/type/user_spec.rb +14 -7
  411. data/spec/unit/type/vlan_spec.rb +1 -1
  412. data/spec/unit/type_spec.rb +1 -1
  413. data/spec/unit/util/ldap/generator_spec.rb +1 -1
  414. data/spec/unit/util/network_device/cisco/device_spec.rb +1 -1
  415. data/spec/unit/util/network_device/transport/ssh_spec.rb +1 -1
  416. data/spec/unit/util/network_device_spec.rb +1 -1
  417. data/spec/unit/util/storage_spec.rb +5 -1
  418. data/spec/unit/util/windows/adsi_spec.rb +13 -0
  419. data/spec/unit/util_spec.rb +21 -2
  420. metadata +173 -7
  421. data/lib/puppet/pops/evaluator/callable_mismatch_describer.rb +0 -175
  422. data/spec/integration/data_binding.rb +0 -104
data/install.rb CHANGED
@@ -33,13 +33,6 @@ require 'rbconfig'
33
33
  require 'find'
34
34
  require 'fileutils'
35
35
  require 'tempfile'
36
- begin
37
- require 'ftools' # apparently on some system ftools doesn't get loaded
38
- $haveftools = true
39
- rescue LoadError
40
- puts "ftools not found. Using FileUtils instead.."
41
- $haveftools = false
42
- end
43
36
  require 'optparse'
44
37
  require 'ostruct'
45
38
 
@@ -67,21 +60,13 @@ def do_configs(configs, target, strip = 'conf/')
67
60
  Dir.mkdir(target) unless File.directory? target
68
61
  configs.each do |cf|
69
62
  ocf = File.join(InstallOptions.config_dir, cf.gsub(/#{strip}/, ''))
70
- if $haveftools
71
- File.install(cf, ocf, 0644, true)
72
- else
73
- FileUtils.install(cf, ocf, {:mode => 0644, :preserve => true, :verbose => true})
74
- end
63
+ FileUtils.install(cf, ocf, {:mode => 0644, :preserve => true, :verbose => true})
75
64
  end
76
65
 
77
66
  if $operatingsystem == 'windows'
78
67
  src_dll = 'ext/windows/eventlog/puppetres.dll'
79
68
  dst_dll = File.join(InstallOptions.bin_dir, 'puppetres.dll')
80
- if $haveftools
81
- File.install(src_dll, dst_dll, 0644, true)
82
- else
83
- FileUtils.install(src_dll, dst_dll, {:mode => 0644, :preserve => true, :verbose => true})
84
- end
69
+ FileUtils.install(src_dll, dst_dll, {:mode => 0644, :preserve => true, :verbose => true})
85
70
 
86
71
  require 'win32/registry'
87
72
  include Win32::Registry::Constants
@@ -110,15 +95,9 @@ def do_libs(libs, strip = 'lib/')
110
95
  next if File.directory? lf
111
96
  olf = File.join(InstallOptions.site_dir, lf.sub(/^#{strip}/, ''))
112
97
  op = File.dirname(olf)
113
- if $haveftools
114
- File.makedirs(op, true)
115
- File.chmod(0755, op)
116
- File.install(lf, olf, 0644, true)
117
- else
118
- FileUtils.makedirs(op, {:mode => 0755, :verbose => true})
119
- FileUtils.chmod(0755, op)
120
- FileUtils.install(lf, olf, {:mode => 0644, :preserve => true, :verbose => true})
121
- end
98
+ FileUtils.makedirs(op, {:mode => 0755, :verbose => true})
99
+ FileUtils.chmod(0755, op)
100
+ FileUtils.install(lf, olf, {:mode => 0644, :preserve => true, :verbose => true})
122
101
  end
123
102
  end
124
103
 
@@ -126,15 +105,9 @@ def do_man(man, strip = 'man/')
126
105
  man.each do |mf|
127
106
  omf = File.join(InstallOptions.man_dir, mf.gsub(/#{strip}/, ''))
128
107
  om = File.dirname(omf)
129
- if $haveftools
130
- File.makedirs(om, true)
131
- File.chmod(0755, om)
132
- File.install(mf, omf, 0644, true)
133
- else
134
- FileUtils.makedirs(om, {:mode => 0755, :verbose => true})
135
- FileUtils.chmod(0755, om)
136
- FileUtils.install(mf, omf, {:mode => 0644, :preserve => true, :verbose => true})
137
- end
108
+ FileUtils.makedirs(om, {:mode => 0755, :verbose => true})
109
+ FileUtils.chmod(0755, om)
110
+ FileUtils.install(mf, omf, {:mode => 0644, :preserve => true, :verbose => true})
138
111
  gzip = %x{which gzip}
139
112
  gzip.chomp!
140
113
  %x{#{gzip} -f #{omf}}
@@ -166,14 +139,13 @@ end
166
139
  # Prepare the file installation.
167
140
  #
168
141
  def prepare_installation
169
- $operatingsystem = Facter.value :operatingsystem
170
-
171
142
  InstallOptions.configs = true
143
+ InstallOptions.check_prereqs = true
172
144
 
173
145
  # Only try to do docs if we're sure they have rdoc
174
146
  if $haverdoc
175
147
  InstallOptions.rdoc = true
176
- InstallOptions.ri = $operatingsystem != "windows"
148
+ InstallOptions.ri = true
177
149
  else
178
150
  InstallOptions.rdoc = false
179
151
  InstallOptions.ri = false
@@ -226,6 +198,9 @@ def prepare_installation
226
198
  opts.on('--mandir[=OPTIONAL]', 'Installation directory for man pages', 'overrides RbConfig::CONFIG["mandir"]') do |mandir|
227
199
  InstallOptions.mandir = mandir
228
200
  end
201
+ opts.on('--[no-]check-prereqs', 'Prevents validation of prerequisite libraries', 'Default on') do |prereq|
202
+ InstallOptions.check_prereqs = prereq
203
+ end
229
204
  opts.on('--quick', 'Performs a quick installation. Only the', 'installation is done.') do |quick|
230
205
  InstallOptions.rdoc = false
231
206
  InstallOptions.ri = false
@@ -256,6 +231,13 @@ def prepare_installation
256
231
  RbConfig::CONFIG['bindir'] = "/usr/bin"
257
232
  end
258
233
 
234
+ # Here we only set $operatingsystem if we have opted to check for prereqs.
235
+ # Otherwise facter won't be guaranteed to be present.
236
+ if InstallOptions.check_prereqs
237
+ check_prereqs
238
+ $operatingsystem = Facter.value :operatingsystem
239
+ end
240
+
259
241
  if not InstallOptions.configdir.nil?
260
242
  configdir = InstallOptions.configdir
261
243
  elsif $operatingsystem == "windows"
@@ -395,6 +377,7 @@ end
395
377
 
396
378
  def build_ri(files)
397
379
  return unless $haverdoc
380
+ return if $operatingsystem == "windows"
398
381
  begin
399
382
  ri = RDoc::RDoc.new
400
383
  #ri.document(["--ri-site", "--merge"] + files)
@@ -473,7 +456,6 @@ FileUtils.cd File.dirname(__FILE__) do
473
456
  man = glob(%w{man/man[0-9]/*})
474
457
  libs = glob(%w{lib/**/*})
475
458
 
476
- check_prereqs
477
459
  prepare_installation
478
460
 
479
461
  #build_rdoc(rdoc) if InstallOptions.rdoc
@@ -43,13 +43,13 @@ class Hiera::PuppetFunction < Puppet::Functions::InternalFunction
43
43
  end
44
44
 
45
45
  def hiera_no_default(scope, key)
46
- post_lookup(key, lookup(scope, key, nil, nil))
46
+ post_lookup(scope, key, lookup(scope, key, nil, nil))
47
47
  end
48
48
 
49
49
  def hiera_with_default(scope, key, default, override = nil)
50
50
  undefined = (@@undefined_value ||= Object.new)
51
51
  result = lookup(scope, key, undefined, override)
52
- post_lookup(key, result.equal?(undefined) ? default : result)
52
+ post_lookup(scope, key, result.equal?(undefined) ? default : result)
53
53
  end
54
54
 
55
55
  def hiera_block1(scope, key, &default_block)
@@ -63,20 +63,20 @@ class Hiera::PuppetFunction < Puppet::Functions::InternalFunction
63
63
  def common(scope, key, override, default_block)
64
64
  undefined = (@@undefined_value ||= Object.new)
65
65
  result = lookup(scope, key, undefined, override)
66
- post_lookup(key, result.equal?(undefined) ? default_block.call(key) : result)
66
+ post_lookup(scope, key, result.equal?(undefined) ? default_block.call(key) : result)
67
67
  end
68
68
 
69
69
  private :common
70
70
 
71
71
  def lookup(scope, key, default, override)
72
- HieraPuppet.lookup(key, default,scope, override, merge_type)
72
+ HieraPuppet.lookup(key, default, scope, override, merge_type)
73
73
  end
74
74
 
75
75
  def merge_type
76
76
  :priority
77
77
  end
78
78
 
79
- def post_lookup(key, result)
79
+ def post_lookup(scope, key, result)
80
80
  result
81
81
  end
82
82
  end
@@ -1,4 +1,5 @@
1
1
  require 'puppet/util/pidlock'
2
+ require 'puppet/error'
2
3
 
3
4
  # This module is responsible for encapsulating the logic for "locking" the
4
5
  # puppet agent during a catalog run; in other words, keeping track of enough
@@ -12,8 +13,8 @@ require 'puppet/util/pidlock'
12
13
  # For more information, please see docs on the website.
13
14
  # http://links.puppetlabs.com/agent_lockfiles
14
15
  module Puppet::Agent::Locker
15
- # Yield if we get a lock, else do nothing. Return
16
- # true/false depending on whether we get the lock.
16
+ # Yield if we get a lock, else raise Puppet::LockError. Return
17
+ # value of block yielded.
17
18
  def lock
18
19
  if lockfile.lock
19
20
  begin
@@ -21,10 +22,18 @@ module Puppet::Agent::Locker
21
22
  ensure
22
23
  lockfile.unlock
23
24
  end
25
+ else
26
+ fail Puppet::LockError, 'Failed to aquire lock'
24
27
  end
25
28
  end
26
29
 
30
+ # @deprecated
27
31
  def running?
32
+ Puppet.deprecation_warning <<-ENDHEREDOC
33
+ Puppet::Agent::Locker.running? is deprecated as it is inherently unsafe.
34
+ The only safe way to know if the lock is locked is to try lock and perform some
35
+ action and then handle the LockError that may result.
36
+ ENDHEREDOC
28
37
  lockfile.locked?
29
38
  end
30
39
 
data/lib/puppet/agent.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require 'puppet/application'
2
+ require 'puppet/error'
2
3
 
3
4
  # A general class for triggering a run of another
4
5
  # class.
@@ -29,10 +30,6 @@ class Puppet::Agent
29
30
 
30
31
  # Perform a run with our client.
31
32
  def run(client_options = {})
32
- if running?
33
- Puppet.notice "Run of #{client_class} already in progress; skipping (#{lockfile_path} exists)"
34
- return
35
- end
36
33
  if disabled?
37
34
  Puppet.notice "Skipping run of #{client_class}; administratively disabled (Reason: '#{disable_message}');\nUse 'puppet agent --enable' to re-enable."
38
35
  return
@@ -46,6 +43,9 @@ class Puppet::Agent
46
43
  begin
47
44
  client_args = client_options.merge(:pluginsync => Puppet[:pluginsync])
48
45
  lock { client.run(client_args) }
46
+ rescue Puppet::LockError
47
+ Puppet.notice "Run of #{client_class} already in progress; skipping (#{lockfile_path} exists)"
48
+ return
49
49
  rescue StandardError => detail
50
50
  Puppet.log_exception(detail, "Could not run #{client_class}: #{detail}")
51
51
  end
@@ -118,14 +118,14 @@ go into the background, attempt to get a signed certificate, and retrieve
118
118
  and apply its configuration every 30 minutes.
119
119
 
120
120
  Some flags are meant specifically for interactive use -- in particular,
121
- 'test', 'tags' or 'fingerprint' are useful. 'test' enables verbose
122
- logging, causes the daemon to stay in the foreground, exits if the
123
- server's configuration is invalid (this happens if, for instance, you've
124
- left a syntax error on the server), and exits after running the
125
- configuration once (rather than hanging around as a long-running
126
- process).
127
-
128
- 'tags' allows you to specify what portions of a configuration you want
121
+ 'test', 'tags' and 'fingerprint' are useful.
122
+
123
+ '--test' does a single run in the foreground with verbose logging, then exits.
124
+ It will also exit if it can't get a valid catalog. The exit code after running
125
+ with '--test' is 0 if the catalog was successfully applied, and 1 if the run
126
+ either failed or wasn't attempted (due to another run already in progress).
127
+
128
+ '--tags' allows you to specify what portions of a configuration you want
129
129
  to apply. Puppet elements are tagged with all of the class or definition
130
130
  names that contain them, and you can use the 'tags' flag to specify one
131
131
  of these names, causing only configuration elements contained within
@@ -136,7 +136,7 @@ class, and call puppet with '--tags ntpd', which would only apply that
136
136
  small portion of the configuration during your testing, rather than
137
137
  applying the whole thing.
138
138
 
139
- 'fingerprint' is a one-time flag. In this mode 'puppet agent' will run
139
+ '--fingerprint' is a one-time flag. In this mode 'puppet agent' will run
140
140
  once and display on the console (and in the log) the current certificate
141
141
  (or certificate request) fingerprint. Providing the '--digest' option
142
142
  allows to use a different digest algorithm to generate the fingerprint.
@@ -181,10 +181,20 @@ generated by running puppet agent with '--genconfig'.
181
181
  Enable full debugging.
182
182
 
183
183
  * --detailed-exitcodes:
184
- Provide transaction information via exit codes. If this is enabled, an exit
185
- code of '2' means there were changes, an exit code of '4' means there were
186
- failures during the transaction, and an exit code of '6' means there were both
187
- changes and failures.
184
+ Provide extra information about the run via exit codes; only works if '--test'
185
+ or '--onetime' is also specified. If enabled, 'puppet agent' will use the
186
+ following exit codes:
187
+
188
+ 0: The run succeeded with no changes or failures; the system was already in
189
+ the desired state.
190
+
191
+ 1: The run failed, or wasn't attempted due to another run already in progress.
192
+
193
+ 2: The run succeeded, and some resources were changed.
194
+
195
+ 4: The run succeeded, and some resources failed.
196
+
197
+ 6: The run succeeded, and included both changes and failures.
188
198
 
189
199
  * --digest:
190
200
  Change the certificate fingerprinting digest algorithm. The default is
@@ -312,6 +322,9 @@ Copyright (c) 2011 Puppet Labs, LLC Licensed under the Apache 2.0 License
312
322
  # waiting for certificates so that we don't block
313
323
  daemon = daemonize_process_when(Puppet[:daemonize])
314
324
 
325
+ # Setup signal traps immediately after daemonization so we clean up the daemon
326
+ daemon.set_signal_traps
327
+
315
328
  wait_for_certificates
316
329
 
317
330
  if Puppet[:onetime]
@@ -336,7 +349,6 @@ Copyright (c) 2011 Puppet Labs, LLC Licensed under the Apache 2.0 License
336
349
  end
337
350
 
338
351
  def onetime(daemon)
339
- daemon.set_signal_traps
340
352
  begin
341
353
  exitstatus = daemon.agent.run
342
354
  rescue => detail
@@ -372,6 +384,8 @@ Copyright (c) 2011 Puppet Labs, LLC Licensed under the Apache 2.0 License
372
384
  end
373
385
 
374
386
  def setup
387
+ raise ArgumentError, "The puppet agent command does not take parameters" unless command_line.args.empty?
388
+
375
389
  setup_test if options[:test]
376
390
 
377
391
  setup_logs
@@ -83,10 +83,19 @@ configuration options can also be generated by running puppet with
83
83
  Enable full debugging.
84
84
 
85
85
  * --detailed-exitcodes:
86
- Provide transaction information via exit codes. If this is enabled, an exit
87
- code of '2' means there were changes, an exit code of '4' means there were
88
- failures during the transaction, and an exit code of '6' means there were both
89
- changes and failures.
86
+ Provide extra information about the run via exit codes. If enabled, 'puppet
87
+ apply' will use the following exit codes:
88
+
89
+ 0: The run succeeded with no changes or failures; the system was already in
90
+ the desired state.
91
+
92
+ 1: The run failed.
93
+
94
+ 2: The run succeeded, and some resources were changed.
95
+
96
+ 4: The run succeeded, and some resources failed.
97
+
98
+ 6: The run succeeded, and included both changes and failures.
90
99
 
91
100
  * --help:
92
101
  Print this help message
@@ -306,6 +315,10 @@ Copyright (c) 2011 Puppet Labs, LLC Licensed under the Apache 2.0 License
306
315
 
307
316
  Puppet.settings.use :main, :agent, :ssl
308
317
 
318
+ if Puppet[:catalog_cache_terminus]
319
+ Puppet::Resource::Catalog.indirection.cache_class = Puppet[:catalog_cache_terminus]
320
+ end
321
+
309
322
  # we want the last report to be persisted locally
310
323
  Puppet::Transaction::Report.indirection.cache_class = :yaml
311
324
 
@@ -110,6 +110,8 @@ ACTIONS
110
110
  Every action except 'list' and 'generate' requires a hostname to act on,
111
111
  unless the '--all' option is set.
112
112
 
113
+ The most important actions for day-to-day use are 'list' and 'sign'.
114
+
113
115
  * clean:
114
116
  Revoke a host's certificate (if applicable) and remove all files
115
117
  related to that host from puppet cert's storage. This is useful when
@@ -171,6 +173,20 @@ configuration options can also be generated by running puppet cert with
171
173
  Operate on all items. Currently only makes sense with the 'sign',
172
174
  'list', and 'fingerprint' actions.
173
175
 
176
+ * --allow-dns-alt-names:
177
+ Sign a certificate request even if it contains one or more alternate DNS
178
+ names. If this option isn't specified, 'puppet cert sign' will ignore any
179
+ requests that contain alternate names.
180
+
181
+ In general, ONLY certs intended for a Puppet master server should include
182
+ alternate DNS names, since Puppet agent relies on those names for identifying
183
+ its rightful server.
184
+
185
+ You can make Puppet agent request a certificate with alternate names by
186
+ setting 'dns_alt_names' in puppet.conf or specifying '--dns_alt_names' on the
187
+ command line. The output of 'puppet cert list' shows any requested alt names
188
+ for pending certificate requests.
189
+
174
190
  * --digest:
175
191
  Set the digest for fingerprinting (defaults to the digest used when
176
192
  signing the cert). Valid values depends on your openssl and openssl ruby
@@ -4,6 +4,8 @@ class Puppet::Application::Filebucket < Puppet::Application
4
4
 
5
5
  option("--bucket BUCKET","-b")
6
6
  option("--debug","-d")
7
+ option("--fromdate FROMDATE","-f")
8
+ option("--todate TODATE","-t")
7
9
  option("--local","-l")
8
10
  option("--remote","-r")
9
11
  option("--verbose","-v")
@@ -25,7 +27,8 @@ USAGE
25
27
  -----
26
28
  puppet filebucket <mode> [-h|--help] [-V|--version] [-d|--debug]
27
29
  [-v|--verbose] [-l|--local] [-r|--remote] [-s|--server <server>]
28
- [-b|--bucket <directory>] <file> <file> ...
30
+ [-f|--fromdate <date>] [-t|--todate <date>] [-b|--bucket <directory>]
31
+ <file> <file> ...
29
32
 
30
33
  Puppet filebucket can operate in three modes, with only one mode per call:
31
34
 
@@ -43,6 +46,13 @@ restore:
43
46
  path to this argument; you are not restricted to restoring the content
44
47
  to its original location.
45
48
 
49
+ diff:
50
+ Print a diff in unified format between two checksums in the filebucket
51
+ or between a checksum and its matching file.
52
+
53
+ list:
54
+ List all files in the current local filebucket. Listing remote
55
+ filebuckets is not allowed.
46
56
 
47
57
  DESCRIPTION
48
58
  -----------
@@ -71,6 +81,9 @@ configuration options can also be generated by running puppet with
71
81
  * --debug:
72
82
  Enable full debugging.
73
83
 
84
+ * --fromdate:
85
+ (list only) Select bucket files from 'fromdate'
86
+
74
87
  * --help:
75
88
  Print this help message
76
89
 
@@ -85,6 +98,9 @@ configuration options can also be generated by running puppet with
85
98
  * --server:
86
99
  The server to send the file to, instead of locally.
87
100
 
101
+ * --todate:
102
+ (list only) Select bucket files until 'todate'
103
+
88
104
  * --verbose:
89
105
  Print extra information.
90
106
 
@@ -97,7 +113,31 @@ EXAMPLE
97
113
  $ puppet filebucket backup /etc/passwd
98
114
  /etc/passwd: 429b225650b912a2ee067b0a4cf1e949
99
115
  $ puppet filebucket restore /tmp/passwd 429b225650b912a2ee067b0a4cf1e949
100
-
116
+ ## Diff between two files in the filebucket
117
+ $ puppet filebucket -l diff d43a6ecaa892a1962398ac9170ea9bf2 7ae322f5791217e031dc60188f4521ef
118
+ 1a2
119
+ > again
120
+ ## Diff between the file in the filebucket and the current one
121
+ $ puppet filebucket -l diff d43a6ecaa892a1962398ac9170ea9bf2 /tmp/testFile
122
+ 1a2
123
+ > again
124
+ $ puppet filebucket -l list
125
+ d43a6ecaa892a1962398ac9170ea9bf2 2015-05-11 09:27:56 /tmp/TestFile
126
+ $ echo again >> /tmp/TestFile
127
+ $ puppet filebucket -l backup /tmp/TestFile
128
+ /tmp/TestFile: 7ae322f5791217e031dc60188f4521ef
129
+ $ puppet filebucket -l list
130
+ d43a6ecaa892a1962398ac9170ea9bf2 2015-05-11 09:27:56 /tmp/TestFile
131
+ 7ae322f5791217e031dc60188f4521ef 2015-05-11 09:52:15 /tmp/TestFile
132
+ $ puppet filebucket -l -f 2015-01-01 -t 2015-01-11 list
133
+ <Empty Output>
134
+ $ puppet filebucket -l -f 2015-05-10 list
135
+ d43a6ecaa892a1962398ac9170ea9bf2 2015-05-11 09:27:56 /tmp/TestFile
136
+ 7ae322f5791217e031dc60188f4521ef 2015-05-11 09:52:15 /tmp/TestFile
137
+ $ puppet filebucket -l -f "2015-05-11 09:30:00" list
138
+ 7ae322f5791217e031dc60188f4521ef 2015-05-11 09:52:15 /tmp/TestFile
139
+ $ puppet filebucket -l -t "2015-05-11 09:30:00" list
140
+ d43a6ecaa892a1962398ac9170ea9bf2 2015-05-11 09:27:56 /tmp/TestFile
101
141
 
102
142
  AUTHOR
103
143
  ------
@@ -115,7 +155,7 @@ Copyright (c) 2011 Puppet Labs, LLC Licensed under the Apache 2.0 License
115
155
  def run_command
116
156
  @args = command_line.args
117
157
  command = args.shift
118
- return send(command) if %w{get backup restore}.include? command
158
+ return send(command) if %w{get backup restore diff list}.include? command
119
159
  help
120
160
  end
121
161
 
@@ -142,12 +182,47 @@ Copyright (c) 2011 Puppet Labs, LLC Licensed under the Apache 2.0 License
142
182
  end
143
183
  end
144
184
 
185
+ def list
186
+ fromdate = options[:fromdate]
187
+ todate = options[:todate]
188
+ out = @client.list(fromdate, todate)
189
+ print out
190
+ end
191
+
145
192
  def restore
146
193
  file = args.shift
147
194
  md5 = args.shift
148
195
  @client.restore(file, md5)
149
196
  end
150
197
 
198
+ def diff
199
+ raise Puppet::Error, "Need exactly two arguments: filebucket diff <file_a> <file_b>" unless args.count == 2
200
+ left = args.shift
201
+ right = args.shift
202
+ if Puppet::FileSystem.exist?(left)
203
+ # It's a file
204
+ file_a = left
205
+ checksum_a = nil
206
+ else
207
+ file_a = nil
208
+ checksum_a = left
209
+ end
210
+ if Puppet::FileSystem.exist?(right)
211
+ # It's a file
212
+ file_b = right
213
+ checksum_b = nil
214
+ else
215
+ file_b = nil
216
+ checksum_b = right
217
+ end
218
+ if (checksum_a || file_a) && (checksum_b || file_b)
219
+ Puppet.info("Comparing #{checksum_a} #{checksum_b} #{file_a} #{file_b}")
220
+ print @client.diff(checksum_a, checksum_b, file_a, file_b)
221
+ else
222
+ raise Puppet::Error, "Need exactly two arguments: filebucket diff <file_a> <file_b>"
223
+ end
224
+ end
225
+
151
226
  def setup
152
227
  Puppet::Log.newdestination(:console)
153
228
 
@@ -181,4 +256,3 @@ Copyright (c) 2011 Puppet Labs, LLC Licensed under the Apache 2.0 License
181
256
  end
182
257
  end
183
258
  end
184
-