puppet 4.5.3-x86-mingw32 → 4.6.1-x86-mingw32

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 (422) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +10 -1
  3. data/ext/debian/control +2 -4
  4. data/ext/project_data.yaml +4 -4
  5. data/install.rb +6 -2
  6. data/lib/puppet.rb +3 -1
  7. data/lib/puppet/agent/locker.rb +1 -1
  8. data/lib/puppet/application.rb +6 -4
  9. data/lib/puppet/application/agent.rb +2 -1
  10. data/lib/puppet/application/cert.rb +35 -2
  11. data/lib/puppet/application/device.rb +1 -1
  12. data/lib/puppet/application/generate.rb +5 -0
  13. data/lib/puppet/application/lookup.rb +3 -3
  14. data/lib/puppet/application_support.rb +1 -1
  15. data/lib/puppet/compilable_resource_type.rb +15 -0
  16. data/lib/puppet/configurer.rb +67 -10
  17. data/lib/puppet/configurer/plugin_handler.rb +2 -4
  18. data/lib/puppet/data_providers/hiera_config.rb +1 -1
  19. data/lib/puppet/defaults.rb +34 -7
  20. data/lib/puppet/environments.rb +4 -2
  21. data/lib/puppet/error.rb +1 -1
  22. data/lib/puppet/external/dot.rb +1 -1
  23. data/lib/puppet/face/ca.rb +4 -1
  24. data/lib/puppet/face/certificate.rb +7 -1
  25. data/lib/puppet/face/epp.rb +5 -5
  26. data/lib/puppet/face/generate.rb +64 -0
  27. data/lib/puppet/face/help.rb +19 -13
  28. data/lib/puppet/face/man.rb +1 -1
  29. data/lib/puppet/feature/external_facts.rb +1 -1
  30. data/lib/puppet/file_system.rb +16 -0
  31. data/lib/puppet/file_system/file_impl.rb +5 -0
  32. data/lib/puppet/file_system/memory_impl.rb +4 -0
  33. data/lib/puppet/file_system/path_pattern.rb +1 -0
  34. data/lib/puppet/file_system/windows.rb +19 -0
  35. data/lib/puppet/functions.rb +3 -5
  36. data/lib/puppet/functions/assert_type.rb +1 -1
  37. data/lib/puppet/functions/defined.rb +7 -5
  38. data/lib/puppet/functions/dig.rb +2 -18
  39. data/lib/puppet/functions/hiera.rb +1 -1
  40. data/lib/puppet/functions/lest.rb +1 -37
  41. data/lib/puppet/functions/new.rb +2 -473
  42. data/lib/puppet/functions/reverse_each.rb +2 -59
  43. data/lib/puppet/functions/scanf.rb +4 -4
  44. data/lib/puppet/functions/step.rb +1 -63
  45. data/lib/puppet/functions/then.rb +1 -61
  46. data/lib/puppet/functions/type.rb +1 -40
  47. data/lib/puppet/functions/unwrap.rb +40 -0
  48. data/lib/puppet/generate/models/type/property.rb +70 -0
  49. data/lib/puppet/generate/models/type/type.rb +57 -0
  50. data/lib/puppet/generate/templates/type/pcore.erb +41 -0
  51. data/lib/puppet/generate/type.rb +239 -0
  52. data/lib/puppet/graph/simple_graph.rb +2 -6
  53. data/lib/puppet/indirector/catalog/static_compiler.rb +5 -2
  54. data/lib/puppet/indirector/facts/facter.rb +1 -1
  55. data/lib/puppet/indirector/key/ca.rb +2 -2
  56. data/lib/puppet/indirector/request.rb +25 -4
  57. data/lib/puppet/indirector/rest.rb +73 -3
  58. data/lib/puppet/info_service/class_information_service.rb +1 -2
  59. data/lib/puppet/interface/documentation.rb +1 -1
  60. data/lib/puppet/loaders.rb +2 -0
  61. data/lib/puppet/metatype/manager.rb +6 -6
  62. data/lib/puppet/module.rb +8 -1
  63. data/lib/puppet/module_tool.rb +2 -2
  64. data/lib/puppet/module_tool/checksums.rb +1 -1
  65. data/lib/puppet/module_tool/errors/installer.rb +2 -2
  66. data/lib/puppet/module_tool/metadata.rb +1 -1
  67. data/lib/puppet/network/http/api/indirected_routes.rb +23 -32
  68. data/lib/puppet/network/http/rack/rest.rb +15 -1
  69. data/lib/puppet/network/rights.rb +1 -11
  70. data/lib/puppet/node/environment.rb +7 -3
  71. data/lib/puppet/node/facts.rb +1 -1
  72. data/lib/puppet/parameter.rb +23 -3
  73. data/lib/puppet/parameter/boolean.rb +1 -1
  74. data/lib/puppet/parameter/value.rb +1 -1
  75. data/lib/puppet/parser.rb +0 -1
  76. data/lib/puppet/parser/ast/pops_bridge.rb +1 -1
  77. data/lib/puppet/parser/ast/resource.rb +5 -0
  78. data/lib/puppet/parser/ast/resource_instance.rb +5 -1
  79. data/lib/puppet/parser/ast/resourceparam.rb +5 -0
  80. data/lib/puppet/parser/compiler.rb +14 -17
  81. data/lib/puppet/parser/compiler/catalog_validator/relationship_validator.rb +1 -1
  82. data/lib/puppet/parser/environment_compiler.rb +10 -0
  83. data/lib/puppet/parser/functions/create_resources.rb +39 -24
  84. data/lib/puppet/parser/functions/defined.rb +2 -26
  85. data/lib/puppet/parser/functions/dig.rb +29 -0
  86. data/lib/puppet/parser/functions/lest.rb +49 -0
  87. data/lib/puppet/parser/functions/new.rb +530 -0
  88. data/lib/puppet/parser/functions/require.rb +1 -1
  89. data/lib/puppet/parser/functions/reverse_each.rb +83 -0
  90. data/lib/puppet/parser/functions/scanf.rb +4 -4
  91. data/lib/puppet/parser/functions/step.rb +84 -0
  92. data/lib/puppet/parser/functions/then.rb +73 -0
  93. data/lib/puppet/parser/functions/type.rb +53 -0
  94. data/lib/puppet/parser/resource.rb +16 -7
  95. data/lib/puppet/parser/scope.rb +36 -28
  96. data/lib/puppet/parser/type_loader.rb +1 -1
  97. data/lib/puppet/plugins/data_providers/data_provider.rb +1 -1
  98. data/lib/puppet/pops.rb +13 -0
  99. data/lib/puppet/pops/adapters.rb +49 -49
  100. data/lib/puppet/pops/binder/scheme_handler/confdir_scheme.rb +1 -1
  101. data/lib/puppet/pops/evaluator/access_operator.rb +39 -2
  102. data/lib/puppet/pops/evaluator/closure.rb +39 -13
  103. data/lib/puppet/pops/evaluator/collector_transformer.rb +10 -1
  104. data/lib/puppet/pops/evaluator/evaluator_impl.rb +16 -11
  105. data/lib/puppet/pops/evaluator/external_syntax_support.rb +1 -1
  106. data/lib/puppet/pops/evaluator/json_strict_literal_evaluator.rb +0 -1
  107. data/lib/puppet/pops/evaluator/literal_evaluator.rb +0 -1
  108. data/lib/puppet/pops/evaluator/relationship_operator.rb +1 -2
  109. data/lib/puppet/pops/evaluator/runtime3_resource_support.rb +119 -0
  110. data/lib/puppet/pops/evaluator/runtime3_support.rb +19 -45
  111. data/lib/puppet/pops/functions/function.rb +5 -0
  112. data/lib/puppet/pops/issues.rb +1 -1
  113. data/lib/puppet/pops/label_provider.rb +2 -2
  114. data/lib/puppet/pops/loader/base_loader.rb +12 -15
  115. data/lib/puppet/pops/loader/loader.rb +15 -50
  116. data/lib/puppet/pops/loader/loader_paths.rb +28 -2
  117. data/lib/puppet/pops/loader/module_loaders.rb +16 -1
  118. data/lib/puppet/pops/loader/null_loader.rb +17 -1
  119. data/lib/puppet/pops/loader/puppet_function_instantiator.rb +12 -11
  120. data/lib/puppet/pops/loader/puppet_resource_type_impl_instantiator.rb +80 -0
  121. data/lib/puppet/pops/loader/ruby_function_instantiator.rb +2 -3
  122. data/lib/puppet/pops/loader/runtime3_type_loader.rb +52 -13
  123. data/lib/puppet/pops/loader/static_loader.rb +55 -0
  124. data/lib/puppet/pops/loader/type_definition_instantiator.rb +30 -14
  125. data/lib/puppet/pops/loader/typed_name.rb +50 -0
  126. data/lib/puppet/pops/loaders.rb +64 -19
  127. data/lib/puppet/pops/merge_strategy.rb +7 -7
  128. data/lib/puppet/pops/migration/migration_checker.rb +4 -0
  129. data/lib/puppet/pops/model/model_label_provider.rb +2 -0
  130. data/lib/puppet/pops/parser/egrammar.ra +8 -5
  131. data/lib/puppet/pops/parser/eparser.rb +1550 -1498
  132. data/lib/puppet/pops/parser/evaluating_parser.rb +1 -1
  133. data/lib/puppet/pops/parser/interpolation_support.rb +7 -0
  134. data/lib/puppet/pops/parser/lexer2.rb +14 -1
  135. data/lib/puppet/pops/parser/locator.rb +30 -1
  136. data/lib/puppet/pops/parser/parser_support.rb +0 -3
  137. data/lib/puppet/pops/parser/slurp_support.rb +3 -3
  138. data/lib/puppet/pops/patterns.rb +9 -1
  139. data/lib/puppet/pops/pcore.rb +67 -11
  140. data/lib/puppet/pops/puppet_stack.rb +43 -0
  141. data/lib/puppet/pops/resource/param.rb +51 -0
  142. data/lib/puppet/pops/resource/resource_type_impl.rb +301 -0
  143. data/lib/puppet/pops/resource/resource_type_set.pcore +21 -0
  144. data/lib/puppet/pops/serialization.rb +17 -0
  145. data/lib/puppet/pops/serialization/abstract_reader.rb +149 -0
  146. data/lib/puppet/pops/serialization/abstract_writer.rb +179 -0
  147. data/lib/puppet/pops/serialization/deserializer.rb +60 -0
  148. data/lib/puppet/pops/serialization/extension.rb +126 -0
  149. data/lib/puppet/pops/serialization/instance_reader.rb +19 -0
  150. data/lib/puppet/pops/serialization/instance_writer.rb +14 -0
  151. data/lib/puppet/pops/serialization/json.rb +247 -0
  152. data/lib/puppet/pops/serialization/object.rb +63 -0
  153. data/lib/puppet/pops/serialization/rgen.rb +151 -0
  154. data/lib/puppet/pops/serialization/serializer.rb +91 -0
  155. data/lib/puppet/pops/serialization/time_factory.rb +66 -0
  156. data/lib/puppet/pops/types/annotatable.rb +36 -0
  157. data/lib/puppet/pops/types/implementation_registry.rb +3 -8
  158. data/lib/puppet/pops/types/p_meta_type.rb +83 -0
  159. data/lib/puppet/pops/types/p_object_type.rb +110 -117
  160. data/lib/puppet/pops/types/p_runtime_type.rb +13 -0
  161. data/lib/puppet/pops/types/p_sem_ver_range_type.rb +23 -0
  162. data/lib/puppet/pops/types/p_sem_ver_type.rb +30 -2
  163. data/lib/puppet/pops/types/p_sensitive_type.rb +69 -0
  164. data/lib/puppet/pops/types/p_type_set_type.rb +361 -0
  165. data/lib/puppet/pops/types/puppet_object.rb +0 -5
  166. data/lib/puppet/pops/types/ruby_generator.rb +9 -2
  167. data/lib/puppet/pops/types/type_calculator.rb +6 -1
  168. data/lib/puppet/pops/types/type_factory.rb +14 -12
  169. data/lib/puppet/pops/types/type_formatter.rb +78 -33
  170. data/lib/puppet/pops/types/type_mismatch_describer.rb +0 -2
  171. data/lib/puppet/pops/types/type_parser.rb +27 -2
  172. data/lib/puppet/pops/types/type_set_reference.rb +59 -0
  173. data/lib/puppet/pops/types/types.rb +366 -13
  174. data/lib/puppet/pops/validation.rb +4 -4
  175. data/lib/puppet/pops/validation/checker4_0.rb +5 -2
  176. data/lib/puppet/pops/visitor.rb +2 -2
  177. data/lib/puppet/property.rb +64 -5
  178. data/lib/puppet/provider.rb +1 -1
  179. data/lib/puppet/provider/aixobject.rb +3 -3
  180. data/lib/puppet/provider/group/aix.rb +4 -4
  181. data/lib/puppet/provider/macauthorization/macauthorization.rb +1 -1
  182. data/lib/puppet/provider/mailalias/aliases.rb +1 -1
  183. data/lib/puppet/provider/mcx/mcxcontent.rb +2 -2
  184. data/lib/puppet/provider/mount/parsed.rb +1 -1
  185. data/lib/puppet/provider/nameservice/directoryservice.rb +5 -5
  186. data/lib/puppet/provider/package/appdmg.rb +3 -3
  187. data/lib/puppet/provider/package/apple.rb +1 -1
  188. data/lib/puppet/provider/package/dnf.rb +5 -0
  189. data/lib/puppet/provider/package/nim.rb +1 -1
  190. data/lib/puppet/provider/package/pacman.rb +2 -2
  191. data/lib/puppet/provider/package/pip.rb +5 -3
  192. data/lib/puppet/provider/package/pip3.rb +1 -1
  193. data/lib/puppet/provider/package/pkg.rb +5 -5
  194. data/lib/puppet/provider/package/pkgdmg.rb +4 -4
  195. data/lib/puppet/provider/package/pkgin.rb +1 -1
  196. data/lib/puppet/provider/package/pkgutil.rb +1 -1
  197. data/lib/puppet/provider/package/portage.rb +48 -8
  198. data/lib/puppet/provider/package/sun.rb +1 -1
  199. data/lib/puppet/provider/package/tdnf.rb +28 -0
  200. data/lib/puppet/provider/package/yum.rb +22 -4
  201. data/lib/puppet/provider/parsedfile.rb +2 -2
  202. data/lib/puppet/provider/service/base.rb +1 -1
  203. data/lib/puppet/provider/service/bsd.rb +1 -1
  204. data/lib/puppet/provider/service/daemontools.rb +2 -2
  205. data/lib/puppet/provider/service/debian.rb +3 -3
  206. data/lib/puppet/provider/service/init.rb +5 -3
  207. data/lib/puppet/provider/service/launchd.rb +16 -2
  208. data/lib/puppet/provider/service/runit.rb +1 -1
  209. data/lib/puppet/provider/service/smf.rb +8 -1
  210. data/lib/puppet/provider/service/systemd.rb +39 -6
  211. data/lib/puppet/provider/ssh_authorized_key/parsed.rb +1 -1
  212. data/lib/puppet/provider/user/aix.rb +3 -2
  213. data/lib/puppet/provider/user/directoryservice.rb +4 -3
  214. data/lib/puppet/provider/user/hpux.rb +1 -1
  215. data/lib/puppet/provider/user/user_role_add.rb +1 -1
  216. data/lib/puppet/provider/user/windows_adsi.rb +3 -0
  217. data/lib/puppet/provider/zfs/zfs.rb +1 -1
  218. data/lib/puppet/reference/type.rb +1 -1
  219. data/lib/puppet/resource.rb +33 -7
  220. data/lib/puppet/resource/capability_finder.rb +74 -54
  221. data/lib/puppet/resource/status.rb +11 -2
  222. data/lib/puppet/settings.rb +17 -6
  223. data/lib/puppet/settings/environment_conf.rb +1 -1
  224. data/lib/puppet/settings/server_list_setting.rb +20 -0
  225. data/lib/puppet/ssl/certificate_authority.rb +32 -9
  226. data/lib/puppet/ssl/certificate_authority/interface.rb +164 -24
  227. data/lib/puppet/ssl/host.rb +3 -3
  228. data/lib/puppet/ssl/oids.rb +10 -0
  229. data/lib/puppet/ssl/validator/default_validator.rb +2 -2
  230. data/lib/puppet/test/test_helper.rb +2 -2
  231. data/lib/puppet/transaction.rb +12 -0
  232. data/lib/puppet/transaction/additional_resource_generator.rb +1 -1
  233. data/lib/puppet/transaction/event.rb +29 -2
  234. data/lib/puppet/transaction/event_manager.rb +1 -1
  235. data/lib/puppet/transaction/persistence.rb +84 -0
  236. data/lib/puppet/transaction/report.rb +49 -2
  237. data/lib/puppet/transaction/resource_harness.rb +98 -18
  238. data/lib/puppet/type.rb +63 -21
  239. data/lib/puppet/type/augeas.rb +3 -3
  240. data/lib/puppet/type/cron.rb +1 -1
  241. data/lib/puppet/type/file.rb +39 -2
  242. data/lib/puppet/type/file/data_sync.rb +13 -5
  243. data/lib/puppet/type/host.rb +1 -1
  244. data/lib/puppet/type/mount.rb +2 -6
  245. data/lib/puppet/type/notify.rb +1 -1
  246. data/lib/puppet/type/package.rb +1 -1
  247. data/lib/puppet/type/resources.rb +1 -1
  248. data/lib/puppet/type/scheduled_task.rb +1 -1
  249. data/lib/puppet/type/ssh_authorized_key.rb +2 -2
  250. data/lib/puppet/type/tidy.rb +1 -1
  251. data/lib/puppet/type/yumrepo.rb +3 -3
  252. data/lib/puppet/type/zone.rb +1 -1
  253. data/lib/puppet/util.rb +2 -2
  254. data/lib/puppet/util/classgen.rb +1 -1
  255. data/lib/puppet/util/command_line.rb +6 -2
  256. data/lib/puppet/util/command_line/trollop.rb +1 -1
  257. data/lib/puppet/util/execution.rb +2 -2
  258. data/lib/puppet/util/http_proxy.rb +1 -1
  259. data/lib/puppet/util/inifile.rb +1 -1
  260. data/lib/puppet/util/instance_loader.rb +1 -1
  261. data/lib/puppet/util/logging.rb +1 -1
  262. data/lib/puppet/util/multi_match.rb +1 -1
  263. data/lib/puppet/util/plist.rb +15 -5
  264. data/lib/puppet/util/profiler.rb +1 -1
  265. data/lib/puppet/util/profiler/around_profiler.rb +1 -1
  266. data/lib/puppet/util/psych_support.rb +1 -1
  267. data/lib/puppet/util/rdoc.rb +2 -2
  268. data/lib/puppet/util/rubygems.rb +1 -1
  269. data/lib/puppet/util/watcher/periodic_watcher.rb +2 -2
  270. data/lib/puppet/util/windows/access_control_entry.rb +1 -1
  271. data/lib/puppet/util/windows/adsi.rb +30 -8
  272. data/lib/puppet/util/windows/api_types.rb +1 -1
  273. data/lib/puppet/util/windows/file.rb +59 -0
  274. data/lib/puppet/util/windows/process.rb +10 -0
  275. data/lib/puppet/util/windows/security.rb +1 -1
  276. data/lib/puppet/util/windows/user.rb +22 -4
  277. data/lib/puppet/util/yaml.rb +15 -3
  278. data/lib/puppet/vendor/deep_merge/test/test_deep_merge.rb +1 -1
  279. data/lib/puppet/vendor/rgen_patch.rb +1 -1
  280. data/lib/puppet/version.rb +2 -2
  281. data/spec/fixtures/unit/pops/loaders/loaders/no_modules/manifests/site.pp +10 -0
  282. data/spec/integration/agent/logging_spec.rb +15 -14
  283. data/spec/integration/application/apply_spec.rb +1 -0
  284. data/spec/integration/directory_environments_spec.rb +16 -0
  285. data/spec/integration/environments/settings_spec.rb +32 -4
  286. data/spec/integration/faces/documentation_spec.rb +1 -1
  287. data/spec/integration/network/http/api/indirected_routes_spec.rb +33 -0
  288. data/spec/integration/node/environment_spec.rb +21 -0
  289. data/spec/integration/parser/collection_spec.rb +10 -0
  290. data/spec/integration/parser/compiler_spec.rb +76 -840
  291. data/spec/integration/parser/functions/require_spec.rb +3 -3
  292. data/spec/integration/parser/parameter_defaults_spec.rb +6 -2
  293. data/spec/integration/parser/pcore_resource_spec.rb +208 -0
  294. data/spec/integration/parser/resource_expressions_spec.rb +4 -2
  295. data/spec/integration/provider/yumrepo_spec.rb +4 -1
  296. data/spec/integration/transaction/report_spec.rb +666 -0
  297. data/spec/integration/type/file_spec.rb +11 -12
  298. data/spec/integration/util/windows/adsi_spec.rb +99 -0
  299. data/spec/integration/util/windows/principal_spec.rb +109 -60
  300. data/spec/integration/util/windows/process_spec.rb +4 -2
  301. data/spec/integration/util/windows/security_spec.rb +34 -8
  302. data/spec/integration/util/windows/user_spec.rb +26 -4
  303. data/spec/lib/puppet_spec/files.rb +2 -2
  304. data/spec/lib/puppet_spec/network.rb +12 -8
  305. data/spec/shared_examples/rhel_package_provider.rb +341 -0
  306. data/spec/spec_helper.rb +8 -2
  307. data/spec/unit/application/cert_spec.rb +20 -0
  308. data/spec/unit/configurer/plugin_handler_spec.rb +0 -26
  309. data/spec/unit/configurer_spec.rb +46 -0
  310. data/spec/unit/defaults_spec.rb +14 -0
  311. data/spec/unit/face/generate_spec.rb +230 -0
  312. data/spec/unit/face/help_spec.rb +53 -0
  313. data/spec/unit/face/parser_spec.rb +6 -0
  314. data/spec/unit/face/plugin_spec.rb +0 -4
  315. data/spec/unit/file_system_spec.rb +85 -0
  316. data/spec/unit/functions/lookup_spec.rb +4 -4
  317. data/spec/unit/functions/match_spec.rb +2 -2
  318. data/spec/unit/functions/regsubst_spec.rb +1 -1
  319. data/spec/unit/functions/split_spec.rb +1 -1
  320. data/spec/unit/functions/unwrap_spec.rb +29 -0
  321. data/spec/unit/functions/versioncmp_spec.rb +1 -1
  322. data/spec/unit/functions4_spec.rb +8 -8
  323. data/spec/unit/indirector/facts/facter_spec.rb +1 -9
  324. data/spec/unit/indirector/rest_spec.rb +95 -9
  325. data/spec/unit/module_spec.rb +43 -7
  326. data/spec/unit/module_tool/applications/installer_spec.rb +10 -1
  327. data/spec/unit/module_tool/applications/unpacker_spec.rb +2 -1
  328. data/spec/unit/module_tool/applications/upgrader_spec.rb +8 -0
  329. data/spec/unit/module_tool/tar/mini_spec.rb +3 -3
  330. data/spec/unit/network/http/api/indirected_routes_spec.rb +49 -58
  331. data/spec/unit/network/http/api/master/v3_spec.rb +7 -4
  332. data/spec/unit/network/rights_spec.rb +1 -1
  333. data/spec/unit/parameter_spec.rb +11 -0
  334. data/spec/unit/parser/compiler_spec.rb +19 -33
  335. data/spec/unit/{appmgmt_spec.rb → parser/environment_compiler_spec.rb} +12 -1
  336. data/spec/unit/parser/functions/create_resources_spec.rb +76 -4
  337. data/spec/unit/parser/functions/require_spec.rb +2 -2
  338. data/spec/unit/parser/resource_spec.rb +21 -11
  339. data/spec/unit/parser/scope_spec.rb +1 -5
  340. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +1 -1
  341. data/spec/unit/pops/loaders/dependency_loader_spec.rb +1 -1
  342. data/spec/unit/pops/loaders/loader_paths_spec.rb +1 -1
  343. data/spec/unit/pops/loaders/loaders_spec.rb +63 -5
  344. data/spec/unit/pops/loaders/module_loaders_spec.rb +2 -2
  345. data/spec/unit/pops/loaders/static_loader_spec.rb +1 -1
  346. data/spec/unit/pops/parser/lexer2_spec.rb +27 -3
  347. data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +8 -0
  348. data/spec/unit/pops/parser/parse_calls_spec.rb +9 -0
  349. data/spec/unit/pops/puppet_stack_spec.rb +79 -0
  350. data/spec/unit/pops/resource/resource_type_impl_spec.rb +37 -0
  351. data/spec/unit/pops/serialization/packer_spec.rb +153 -0
  352. data/spec/unit/pops/serialization/rgen_spec.rb +88 -0
  353. data/spec/unit/pops/serialization/serialization_spec.rb +228 -0
  354. data/spec/unit/pops/types/p_object_type_spec.rb +44 -2
  355. data/spec/unit/pops/types/p_sem_ver_type_spec.rb +42 -0
  356. data/spec/unit/pops/types/p_sensitive_type_spec.rb +139 -0
  357. data/spec/unit/pops/types/p_type_set_type_spec.rb +424 -0
  358. data/spec/unit/pops/types/ruby_generator_spec.rb +497 -181
  359. data/spec/unit/pops/types/type_calculator_spec.rb +10 -4
  360. data/spec/unit/pops/types/type_formatter_spec.rb +1 -1
  361. data/spec/unit/pops/types/type_mismatch_describer_spec.rb +2 -2
  362. data/spec/unit/pops/types/type_parser_spec.rb +1 -1
  363. data/spec/unit/pops/types/types_spec.rb +1 -1
  364. data/spec/unit/pops/validator/validator_spec.rb +18 -1
  365. data/spec/unit/property_spec.rb +48 -11
  366. data/spec/unit/provider/group/windows_adsi_spec.rb +11 -1
  367. data/spec/unit/provider/package/dnf_spec.rb +1 -99
  368. data/spec/unit/provider/package/pacman_spec.rb +4 -4
  369. data/spec/unit/provider/package/pip_spec.rb +14 -0
  370. data/spec/unit/provider/package/pkg_spec.rb +6 -0
  371. data/spec/unit/provider/package/pkgdmg_spec.rb +0 -3
  372. data/spec/unit/provider/package/portage_spec.rb +64 -8
  373. data/spec/unit/provider/package/tdnf_spec.rb +18 -0
  374. data/spec/unit/provider/package/windows/package_spec.rb +4 -1
  375. data/spec/unit/provider/package/windows_spec.rb +8 -2
  376. data/spec/unit/provider/package/yum_spec.rb +6 -377
  377. data/spec/unit/provider/service/base_spec.rb +6 -0
  378. data/spec/unit/provider/service/debian_spec.rb +16 -7
  379. data/spec/unit/provider/service/gentoo_spec.rb +6 -0
  380. data/spec/unit/provider/service/init_spec.rb +7 -0
  381. data/spec/unit/provider/service/launchd_spec.rb +35 -4
  382. data/spec/unit/provider/service/openrc_spec.rb +6 -0
  383. data/spec/unit/provider/service/smf_spec.rb +31 -6
  384. data/spec/unit/provider/service/src_spec.rb +6 -0
  385. data/spec/unit/provider/service/systemd_spec.rb +70 -20
  386. data/spec/unit/provider/service/upstart_spec.rb +6 -0
  387. data/spec/unit/provider/user/aix_spec.rb +7 -0
  388. data/spec/unit/provider/user/directoryservice_spec.rb +30 -1
  389. data/spec/unit/provider/user/windows_adsi_spec.rb +19 -0
  390. data/spec/unit/resource/capability_finder_spec.rb +51 -3
  391. data/spec/unit/resource/catalog_spec.rb +5 -0
  392. data/spec/unit/resource/type_spec.rb +2 -2
  393. data/spec/unit/resource_spec.rb +19 -0
  394. data/spec/unit/settings_spec.rb +13 -0
  395. data/spec/unit/ssl/certificate_authority/interface_spec.rb +176 -10
  396. data/spec/unit/ssl/certificate_authority_spec.rb +63 -22
  397. data/spec/unit/ssl/host_spec.rb +1 -1
  398. data/spec/unit/ssl/oids_spec.rb +24 -21
  399. data/spec/unit/transaction/event_spec.rb +3 -1
  400. data/spec/unit/transaction/persistence_spec.rb +173 -0
  401. data/spec/unit/transaction/report_spec.rb +64 -1
  402. data/spec/unit/transaction/resource_harness_spec.rb +91 -0
  403. data/spec/unit/type/file/content_spec.rb +47 -15
  404. data/spec/unit/type/file_spec.rb +28 -0
  405. data/spec/unit/type/mount_spec.rb +5 -12
  406. data/spec/unit/type/yumrepo_spec.rb +1 -5
  407. data/spec/unit/type_spec.rb +32 -0
  408. data/spec/unit/util/command_line_spec.rb +11 -0
  409. data/spec/unit/util/execution_spec.rb +1 -1
  410. data/spec/unit/util/plist_spec.rb +16 -3
  411. data/spec/unit/util/storage_spec.rb +4 -1
  412. data/spec/unit/util/windows/adsi_spec.rb +23 -2
  413. data/spec/unit/util/windows/file_spec.rb +56 -1
  414. data/spec/unit/util/windows/sid_spec.rb +31 -7
  415. data/spec/unit/util/yaml_spec.rb +12 -0
  416. data/spec/unit/util_spec.rb +87 -20
  417. metadata +91 -48
  418. data/ext/puppetlisten/puppetlisten.rb +0 -77
  419. data/ext/puppetlisten/puppetrun.rb +0 -38
  420. data/lib/puppet/resource/type_collection_helper.rb +0 -7
  421. data/spec/unit/parser/functions/defined_spec.rb +0 -120
  422. data/spec/unit/resource/type_collection_helper_spec.rb +0 -24
@@ -0,0 +1,239 @@
1
+ require 'erb'
2
+ require 'fileutils'
3
+ require 'puppet/util/autoload'
4
+ require 'puppet/generate/models/type/type'
5
+
6
+ module Puppet
7
+ module Generate
8
+ # Reponsible for generating type definitions in Puppet
9
+ class Type
10
+ # Represents an input to the type generator
11
+ class Input
12
+ # Gets the path to the input.
13
+ attr_reader :path
14
+
15
+ # Gets the format to use for generating the output file.
16
+ attr_reader :format
17
+
18
+ # Initializes an input.
19
+ # @param base [String] The base path where the input is located.
20
+ # @param path [String] The path to the input file.
21
+ # @param format [Symbol] The format to use for generation.
22
+ # @return [void]
23
+ def initialize(base, path, format)
24
+ @base = base
25
+ @path = path
26
+ self.format = format
27
+ end
28
+
29
+ # Gets the expected resource type name for the input.
30
+ # @return [Symbol] Returns the expected resource type name for the input.
31
+ def type_name
32
+ File.basename(@path, '.rb').to_sym
33
+ end
34
+
35
+ # Sets the format to use for this input.
36
+ # @param format [Symbol] The format to use for generation.
37
+ # @return [Symbol] Returns the new format.
38
+ def format=(format)
39
+ format = format.to_sym
40
+ raise "unsupported format '#{format}'." unless self.class.supported_format?(format)
41
+ @format = format
42
+ end
43
+
44
+ # Determines if the output file is up-to-date with respect to the input file.
45
+ # @param [String, nil] The path to output to, or nil if determined by input
46
+ # @return [Boolean] Returns true if the output is up-to-date or false if not.
47
+ def up_to_date?(outputdir)
48
+ f = effective_output_path(outputdir)
49
+ Puppet::FileSystem::exist?(f) && (Puppet::FileSystem::stat(@path) <=> Puppet::FileSystem::stat(f)) <= 0
50
+ end
51
+
52
+ # Gets the filename of the output file.
53
+ # @return [String] Returns the name to the output file.
54
+ def output_name
55
+ @output_name ||=
56
+ case @format
57
+ when :pcore
58
+ "#{File.basename(@path, '.rb')}.pp"
59
+ else
60
+ raise "unsupported format '#{@format}'."
61
+ end
62
+ end
63
+
64
+ # Gets the path to the output file.
65
+ # @return [String] Returns the path to the output file.
66
+ def output_path
67
+ @output_path ||=
68
+ case @format
69
+ when :pcore
70
+ File.join(@base, 'pcore', 'types', output_name)
71
+ else
72
+ raise "unsupported format '#{@format}'."
73
+ end
74
+ end
75
+
76
+ # Sets the path to the output file.
77
+ # @param path [String] The new path to the output file.
78
+ # @return [String] Returns the new path to the output file.
79
+ def output_path=(path)
80
+ @output_path = path
81
+ end
82
+
83
+ # Returns the outputpath to use given an outputdir that may be nil
84
+ # If outputdir is not nil, the returned path is relative to that outpudir
85
+ # otherwise determined by this input.
86
+ # @param [String, nil] The outputdirectory to use, or nil if to be determined by this Input
87
+ def effective_output_path(outputdir)
88
+ outputdir ? File.join(outputdir, output_name) : output_path
89
+ end
90
+
91
+ # Gets the path to the template to use for this input.
92
+ # @return [String] Returns the path to the template.
93
+ def template_path
94
+ File.join(File.dirname(__FILE__), 'templates', 'type', "#{@format}.erb")
95
+ end
96
+
97
+ # Gets the string representation of the input.
98
+ # @return [String] Returns the string representation of the input.
99
+ def to_s
100
+ @path
101
+ end
102
+
103
+ # Determines if the given format is supported
104
+ # @param format [Symbol] The format to use for generation.
105
+ # @return [Boolean] Returns true if the format is supported or false if not.
106
+ def self.supported_format?(format)
107
+ [:pcore].include?(format)
108
+ end
109
+ end
110
+
111
+ # Finds the inputs for the generator.
112
+ # @param format [Symbol] The format to use.
113
+ # @param environment [Puppet::Node::Environment] The environment to search for inputs. Defaults to the current environment.
114
+ # @return [Array<Input>] Returns the array of inputs.
115
+ def self.find_inputs(format = :pcore, environment = Puppet.lookup(:current_environment))
116
+ Puppet.debug "Searching environment '#{environment.name}' for custom types."
117
+ inputs = []
118
+ environment.modules.each do |mod|
119
+ directory = File.join(Puppet::Util::Autoload.cleanpath(mod.plugin_directory), 'puppet', 'type')
120
+ unless Puppet::FileSystem.exist?(directory)
121
+ Puppet.debug "Skipping '#{mod.name}' module because it contains no custom types."
122
+ next
123
+ end
124
+
125
+ Puppet.debug "Searching '#{mod.name}' module for custom types."
126
+ Dir.glob("#{directory}/*.rb") do |file|
127
+ next unless Puppet::FileSystem.file?(file)
128
+ Puppet.debug "Found custom type source file '#{file}'."
129
+ inputs << Input.new(mod.path, file, format)
130
+ end
131
+ end
132
+
133
+ # Sort the inputs by path
134
+ inputs.sort_by! { |input| input.path }
135
+ end
136
+
137
+ # Generates files for the given inputs.
138
+ # If a file is up to date (newer than input) it is kept.
139
+ # If a file is out of date it is regenerated.
140
+ # If there is a file for a non existing output in a given output directory it is removed.
141
+ # If using input specific output removal must be made by hand if input is removed.
142
+ #
143
+ # @param inputs [Array<Input>] The inputs to generate files for.
144
+ # @param outputdir [String, nil] the outputdir where all output should be generated, or nil if next to input
145
+ # @param force [Boolean] True to force the generation of the output files (skip up-to-date checks) or false if not.
146
+ # @return [void]
147
+ def self.generate(inputs, outputdir = nil, force = false)
148
+ # remove files for non existing inputs
149
+ unless outputdir.nil?
150
+ filenames_to_keep = inputs.map {|i| i.output_name }
151
+ existing_files = Puppet::FileSystem.children(outputdir).map {|f| Puppet::FileSystem.basename(f) }
152
+ files_to_remove = existing_files - filenames_to_keep
153
+ files_to_remove.each do |f|
154
+ Puppet::FileSystem.unlink(File.join(outputdir, f))
155
+ end
156
+ Puppet.notice("Removed output '#{files_to_remove}' for non existing inputs") unless files_to_remove.empty?
157
+ end
158
+
159
+ if inputs.empty?
160
+ Puppet.notice 'No custom types were found.'
161
+ return nil
162
+ end
163
+
164
+ templates = {}
165
+ templates.default_proc = lambda { |hash, key|
166
+ raise "template was not found at '#{key}'." unless Puppet::FileSystem.file?(key)
167
+ template = ERB.new(File.read(key), nil, '-')
168
+ template.filename = key
169
+ template
170
+ }
171
+
172
+ up_to_date = true
173
+ Puppet.notice 'Generating Puppet resource types.'
174
+ inputs.each do |input|
175
+ if !force && input.up_to_date?(outputdir)
176
+ Puppet.debug "Skipping '#{input}' because it is up-to-date."
177
+ next
178
+ end
179
+
180
+ up_to_date = false
181
+
182
+ type_name = input.type_name
183
+ Puppet.debug "Loading custom type '#{type_name}' in '#{input}'."
184
+ begin
185
+ require input.path
186
+ rescue SystemExit
187
+ raise
188
+ rescue Exception => e
189
+ # Log the exception and move on to the next input
190
+ Puppet.log_exception(e, "Failed to load custom type '#{type_name}' from '#{input}': #{e.message}")
191
+ next
192
+ end
193
+
194
+ # HACK: there's no way to get a type without loading it (sigh); for now, just get the types hash directly
195
+ types ||= Puppet::Type.instance_variable_get('@types')
196
+
197
+ # Assume the type follows the naming convention
198
+ unless type = types[type_name]
199
+ Puppet.err "Custom type '#{type_name}' was not defined in '#{input}'."
200
+ next
201
+ end
202
+
203
+ # Create the model
204
+ begin
205
+ model = Models::Type::Type.new(type)
206
+ rescue Exception => e
207
+ # Move on to the next input
208
+ Puppet.log_exception(e, "#{input}: #{e.message}")
209
+ next
210
+ end
211
+
212
+ # Render the template
213
+ begin
214
+ result = model.render(templates[input.template_path])
215
+ rescue Exception => e
216
+ Puppet.log_exception(e)
217
+ raise
218
+ end
219
+
220
+ # Write the output file
221
+ begin
222
+ effective_output_path = input.effective_output_path(outputdir)
223
+ Puppet.notice "Generating '#{effective_output_path}' using '#{input.format}' format."
224
+ FileUtils.mkdir_p(File.dirname(effective_output_path))
225
+ File.open(effective_output_path, 'w') do |file|
226
+ file.write(result)
227
+ end
228
+ rescue Exception => e
229
+ Puppet.log_exception(e, "Failed to generate '#{effective_output_path}': #{e.message}")
230
+ # Move on to the next input
231
+ next
232
+ end
233
+ end
234
+
235
+ Puppet.notice 'No files were generated because all inputs were up-to-date.' if up_to_date
236
+ end
237
+ end
238
+ end
239
+ end
@@ -246,8 +246,6 @@ class Puppet::Graph::SimpleGraph
246
246
  # This does not use the DOT graph library, just writes the content
247
247
  # directly. Given the complexity of this, there didn't seem much point
248
248
  # using a heavy library to generate exactly the same content. --daniel 2011-01-27
249
- Puppet.settings.use(:graphing)
250
-
251
249
  graph = ["digraph Resource_Cycles {"]
252
250
  graph << ' label = "Resource Cycles"'
253
251
 
@@ -401,7 +399,7 @@ class Puppet::Graph::SimpleGraph
401
399
  end
402
400
 
403
401
  # Return an array of the edge-sets between a series of n+1 vertices (f=v0,v1,v2...t=vn)
404
- # connecting the two given verticies. The ith edge set is an array containing all the
402
+ # connecting the two given vertices. The ith edge set is an array containing all the
405
403
  # edges between v(i) and v(i+1); these are (by definition) never empty.
406
404
  #
407
405
  # * if f == t, the list is empty
@@ -464,15 +462,13 @@ class Puppet::Graph::SimpleGraph
464
462
  def write_graph(name)
465
463
  return unless Puppet[:graph]
466
464
 
467
- Puppet.settings.use(:graphing)
468
-
469
465
  file = File.join(Puppet[:graphdir], "#{name}.dot")
470
466
  File.open(file, "w") { |f|
471
467
  f.puts to_dot("name" => name.to_s.capitalize)
472
468
  }
473
469
  end
474
470
 
475
- # This flag may be set to true to use the new YAML serialzation
471
+ # This flag may be set to true to use the new YAML serialization
476
472
  # format (where @vertices is a simple list of vertices rather than a
477
473
  # list of VertexWrapper objects). Deserialization supports both
478
474
  # formats regardless of the setting of this flag.
@@ -97,14 +97,17 @@ class Puppet::Resource::Catalog::StaticCompiler < Puppet::Resource::Catalog::Com
97
97
  resource[:mode] ||= metadata.send(:mode).to_s(8)
98
98
 
99
99
  resource[:ensure] = metadata.ftype
100
- if metadata.ftype == "file"
100
+ case resource[:ensure]
101
+ when 'file'
101
102
  unless resource[:content]
102
103
  resource[:content] = metadata.checksum
103
104
  resource[:checksum] = metadata.checksum_type
104
105
  end
106
+ store_content(request, resource)
107
+ when 'link'
108
+ resource[:target] = metadata.destination
105
109
  end
106
110
 
107
- store_content(request, resource) if resource[:ensure] == "file"
108
111
  old_source = resource.delete(:source)
109
112
  Puppet.info "Metadata for #{resource} in catalog for '#{request.key}' added from '#{old_source}'"
110
113
  end
@@ -26,7 +26,7 @@ class Puppet::Node::Facts::Facter < Puppet::Indirector::Code
26
26
  # fact. This is because in Facter 2.x, the first `Facter.add` causes Facter to create
27
27
  # its directory loaders which cannot be changed, meaning other external facts won't
28
28
  # be resolved. (PUP-4607)
29
- self.class.setup_external_search_paths(request) if Puppet.features.external_facts?
29
+ self.class.setup_external_search_paths(request)
30
30
  self.class.setup_search_paths(request)
31
31
 
32
32
  # Initialize core Puppet facts, such as puppetversion
@@ -2,8 +2,8 @@ require 'puppet/indirector/ssl_file'
2
2
  require 'puppet/ssl/key'
3
3
 
4
4
  class Puppet::SSL::Key::Ca < Puppet::Indirector::SslFile
5
- desc "Manage the CA's private on disk. This terminus *only* works
6
- with the CA key, because that's the only key that the CA ever interacts
5
+ desc "Manage the CA's private key on disk. This terminus works with the
6
+ CA key *only*, because that's the only key that the CA ever interacts
7
7
  with."
8
8
 
9
9
  store_in :privatekeydir
@@ -178,7 +178,7 @@ class Puppet::Indirector::Request
178
178
  return(uri ? uri : "/#{indirection_name}/#{key}")
179
179
  end
180
180
 
181
- def do_request(srv_service=:puppet, default_server=Puppet.settings[:server], default_port=Puppet.settings[:masterport], &block)
181
+ def do_request(srv_service=:puppet, default_server=nil, default_port=nil, &block)
182
182
  # We were given a specific server to use, so just use that one.
183
183
  # This happens if someone does something like specifying a file
184
184
  # source using a puppet:// URI with a specific server.
@@ -197,9 +197,30 @@ class Puppet::Indirector::Request
197
197
  end
198
198
 
199
199
  # ... Fall back onto the default server.
200
- Puppet.debug "No more servers left, falling back to #{default_server}:#{default_port}" if Puppet.settings[:use_srv_records]
201
- self.server = default_server
202
- self.port = default_port
200
+ begin
201
+ bound_server = Puppet.lookup(:server)
202
+ rescue
203
+ if primary_server = Puppet.settings[:server_list][0]
204
+ bound_server = primary_server[0]
205
+ else
206
+ bound_server = nil
207
+ end
208
+ end
209
+
210
+ begin
211
+ bound_port = Puppet.lookup(:serverport)
212
+ rescue
213
+ if primary_server = Puppet.settings[:server_list][0]
214
+ bound_port = primary_server[1]
215
+ else
216
+ bound_port = nil
217
+ end
218
+ end
219
+ self.server = default_server || bound_server || Puppet.settings[:server]
220
+ self.port = default_port || bound_port || Puppet.settings[:masterport]
221
+
222
+ Puppet.debug "No more servers left, falling back to #{self.server}:#{self.port}" if Puppet.settings[:use_srv_records]
223
+
203
224
  return yield(self)
204
225
  end
205
226
 
@@ -1,5 +1,6 @@
1
1
  require 'net/http'
2
2
  require 'uri'
3
+ require 'json'
3
4
 
4
5
  require 'puppet/network/http'
5
6
  require 'puppet/network/http_pool'
@@ -33,12 +34,68 @@ class Puppet::Indirector::REST < Puppet::Indirector::Terminus
33
34
  @srv_service || :puppet
34
35
  end
35
36
 
37
+ # The logic for server and port is kind of gross. In summary:
38
+ # IF an endpoint-specific setting is requested AND that setting has been set by the user
39
+ # Use that setting.
40
+ # The defaults for these settings are the "normal" server/masterport settings, so
41
+ # when they are unset we instead want to "fall back" to the failover-selected
42
+ # host/port pair.
43
+ # ELSE IF we have a failover-selected host/port
44
+ # Use what the failover logic came up with
45
+ # ELSE IF the server_list setting is in use
46
+ # Use the first entry - failover hasn't happened yet, but that
47
+ # setting is still authoritative
48
+ # ELSE
49
+ # Go for the legacy server/masterport settings, and hope for the best
36
50
  def self.server
37
- Puppet.settings[server_setting || :server]
51
+ setting = server_setting()
52
+ if setting && setting != :server && Puppet.settings.set_by_config?(setting)
53
+ Puppet.settings[setting]
54
+ else
55
+ begin
56
+ Puppet.lookup(:server)
57
+ rescue
58
+ if primary_server = Puppet.settings[:server_list][0]
59
+ Puppet.debug "Dynamically-bound server lookup failed; using first entry"
60
+ primary_server[0]
61
+ else
62
+ setting ||= :server
63
+ Puppet.debug "Dynamically-bound server lookup failed, falling back to #{setting} setting"
64
+ Puppet.settings[setting]
65
+ end
66
+ end
67
+ end
38
68
  end
39
69
 
70
+ # For port there's a little bit of an extra snag: setting a specific
71
+ # server setting and relying on the default port for that server is
72
+ # common, so we also want to check if the assocaited SERVER setting
73
+ # has been set by the user. If either of those are set we ignore the
74
+ # failover-selected port.
40
75
  def self.port
41
- Puppet.settings[port_setting || :masterport].to_i
76
+ setting = port_setting()
77
+ srv_setting = server_setting()
78
+ if (setting && setting != :masterport && Puppet.settings.set_by_config?(setting)) ||
79
+ (srv_setting && srv_setting != :server && Puppet.settings.set_by_config?(srv_setting))
80
+ Puppet.settings[setting].to_i
81
+ else
82
+ begin
83
+ Puppet.lookup(:serverport).to_i
84
+ rescue
85
+ if primary_server = Puppet.settings[:server_list][0]
86
+ Puppet.debug "Dynamically-bound port lookup failed; using first entry"
87
+
88
+ # Port might not be set, so we want to fallback in that
89
+ # case. We know we don't need to use `setting` here, since
90
+ # the default value of every port setting is `masterport`
91
+ (primary_server[1] || Puppet.settings[:masterport]).to_i
92
+ else
93
+ setting ||= :masterport
94
+ Puppet.debug "Dynamically-bound port lookup failed; falling back to #{setting} setting"
95
+ Puppet.settings[setting].to_i
96
+ end
97
+ end
98
+ end
42
99
  end
43
100
 
44
101
  # Provide appropriate headers.
@@ -218,7 +275,20 @@ class Puppet::Indirector::REST < Puppet::Indirector::Terminus
218
275
  end
219
276
 
220
277
  def convert_to_http_error(response)
221
- message = "Error #{response.code} on SERVER: #{(response.body||'').empty? ? response.message : uncompress_body(response)}"
278
+ if response.body.to_s.empty? && response.respond_to?(:message)
279
+ returned_message = response.message
280
+ elsif response['content-type'].is_a?(String)
281
+ content_type, body = parse_response(response)
282
+ if content_type =~ /[pj]son/
283
+ returned_message = JSON.parse(body)["message"]
284
+ else
285
+ returned_message = uncompress_body(response)
286
+ end
287
+ else
288
+ returned_message = uncompress_body(response)
289
+ end
290
+
291
+ message = "Error #{response.code} on SERVER: #{returned_message}"
222
292
  Net::HTTPError.new(message, response)
223
293
  end
224
294