puppet 4.5.3-universal-darwin → 4.6.1-universal-darwin

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 +89 -34
  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
@@ -1,62 +1,5 @@
1
- # Reverses the order of the elements of something that is iterable and optionally runs a
2
- # [lambda](http://docs.puppetlabs.com/puppet/latest/reference/lang_lambdas.html) for each
3
- # element.
4
- #
5
- # This function takes one to two arguments.
6
- #
7
- # 1. An `Iterable` that the function will iterate over.
8
- # 2. An optional lambda, which the function calls for each element in the first argument. It must
9
- # request one parameter.
10
- #
11
- # @example Using the `reverse_each` function
12
- #
13
- # `$data.reverse_each |$parameter| { <PUPPET CODE BLOCK> }`
14
- #
15
- # or
16
- #
17
- # `$reverse_data = $data.reverse_each`
18
- #
19
- # or
20
- #
21
- # `reverse_each($data) |$parameter| { <PUPPET CODE BLOCK> }`
22
- #
23
- # or
24
- #
25
- # `$reverse_data = reverse_each($data)`
26
- #
27
- # When no second argument is present, Puppet returns an `Iterable` that represents the reverse
28
- # order of its first argument. This allows methods on `Iterable` to be chained.
29
- #
30
- # When a lamdba is given as the second argument, Puppet iterates the first argument in reverse
31
- # order and passes each value in turn to the lambda, then returns `undef`.
32
- #
33
- # @example Using the `reverse_each` function with an array and a one-parameter lambda
34
- #
35
- # ~~~ puppet
36
- # # Puppet will log a notice for each of the three items in $data in reverse order.
37
- # $data = [1,2,3]
38
- # $data.reverse_each |$item| { notice($item) }
39
- #
40
- # ~~~
41
- #
42
- # When no second argument is present, Puppet returns a new `Iterable` which allows it to
43
- # be directly chained into another function that takes an `Iterable` as an argument.
44
- #
45
- # @example Using the `reverse_each` function chained with a `map` function.
46
- #
47
- # # For the array $data, return an array containing each value multiplied by 10 in reverse order
48
- # $data = [1,2,3]
49
- # $transformed_data = $data.reverse_each.map |$item| { $item * 10 }
50
- # # $transformed_data is set to [30,20,10]
51
- # ~~~
52
- #
53
- # @example The same example using `reverse_each` function chained with a `map` in alternative syntax
54
- #
55
- # # For the array $data, return an array containing each value multiplied by 10 in reverse order
56
- # $data = [1,2,3]
57
- # $transformed_data = map(reverse_each($data)) |$item| { $item * 10 }
58
- # # $transformed_data is set to [30,20,10]
59
- # ~~~
1
+ # Reverses the order of the elements of something that is iterable.
2
+ # (Documentation in 3.x stub)
60
3
  #
61
4
  # @since 4.4.0
62
5
  #
@@ -1,11 +1,11 @@
1
1
  # Scans a string and returns an array of one or more converted values based on the given format string.
2
- # See the documenation of Ruby's String#scanf method for details about the supported formats (which
2
+ # See the documentation of Ruby's String#scanf method for details about the supported formats (which
3
3
  # are similar but not identical to the formats used in Puppet's `sprintf` function.)
4
4
  #
5
5
  # This function takes two mandatory arguments: the first is the string to convert, and the second is
6
- # the format string. The result of the scan is an array, with each sucessfully scanned and transformed value.
7
- # The scanning stops if a scan is unsuccesful, and the scanned result up to that point is returned. If there
8
- # was no succesful scan, the result is an empty array.
6
+ # the format string. The result of the scan is an array, with each successfully scanned and transformed value.
7
+ # The scanning stops if a scan is unsuccessful, and the scanned result up to that point is returned. If there
8
+ # was no successful scan, the result is an empty array.
9
9
  #
10
10
  # "42".scanf("%i")
11
11
  #
@@ -1,66 +1,4 @@
1
- # Provides stepping with given interval over elements in an iterable and optionally runs a
2
- # [lambda](http://docs.puppetlabs.com/puppet/latest/reference/lang_lambdas.html) for each
3
- # element.
4
- #
5
- # This function takes two to three arguments.
6
- #
7
- # 1. An 'Iterable' that the function will iterate over.
8
- # 2. An `Integer` step factor. This must be a positive integer.
9
- # 3. An optional lambda, which the function calls for each element in the interval. It must
10
- # request one parameter.
11
- #
12
- # @example Using the `step` function
13
- #
14
- # `$data.step(<n>) |$parameter| { <PUPPET CODE BLOCK> }`
15
- #
16
- # or
17
- #
18
- # `$stepped_data = $data.step(<n>)`
19
- #
20
- # or
21
- #
22
- # `step($data, <n>) |$parameter| { <PUPPET CODE BLOCK> }`
23
- #
24
- # or
25
- #
26
- # `$stepped_data = step($data, <n>)`
27
- #
28
- # When no block is given, Puppet returns an `Iterable` that yields the first element and every nth successor
29
- # element, from its first argument. This allows functions on iterables to be chained.
30
- #
31
- # When a block is given, Puppet iterates and calls the block with the first element and then with
32
- # every nth successor element. It then returns `undef`.
33
- #
34
- # @example Using the `step` function with an array, a step factor, and a one-parameter block
35
- #
36
- # ~~~ puppet
37
- # # For the array $data, call a block with the first element and then with each 3rd successor element
38
- # $data = [1,2,3,4,5,6,7,8]
39
- # $data.step(3) |$item| {
40
- # notice($item)
41
- # }
42
- # # Puppet notices the values '1', '4', '7'.
43
- # ~~~
44
- #
45
- # When no block is given, Puppet returns a new `Iterable` which allows it to be directly chained into
46
- # another function that takes an `Iterable` as an argument.
47
- #
48
- # @example Using the `step` function chained with a `map` function.
49
- #
50
- # # For the array $data, return an array, set to the first element and each 5th successor element, in reverse
51
- # # order multiplied by 10
52
- # $data = Integer[0,20]
53
- # $transformed_data = $data.step(5).map |$item| { $item * 10 }
54
- # # $transformed_data contains [0,50,100,150,200]
55
- # ~~~
56
- #
57
- # @example The same example using `step` function chained with a `map` in alternative syntax
58
- #
59
- # # For the array $data, return an array, set to the first and each 5th successor, in reverse order, multiplied by 10
60
- # $data = Integer[0,20]
61
- # $transformed_data = map(step($data, 5)) |$item| { $item * 10 }
62
- # # $transformed_data contains [0,50,100,150,200]
63
- # ~~~
1
+ # (Documentation in 3.x stub)
64
2
  #
65
3
  # @since 4.4.0
66
4
  #
@@ -1,64 +1,4 @@
1
- # Call a [lambda](https://docs.puppet.com/puppet/latest/reference/lang_lambdas.html)
2
- # with the given argument unless the argument is undef. Return undef if argument is
3
- # undef, and otherwise the result of giving the argument to the lambda.
4
- #
5
- # This is useful to process a sequence of operations where an intermediate
6
- # result may be undef (which makes the entire sequence undef).
7
- # The `then` function is especially useful with the function `dig` which
8
- # performs in a similar way "digging out" a value in a complex structure.
9
- #
10
- # @example Using `then`
11
- #
12
- # ~~~ puppet
13
- # $data = {a => { b => [{x => 10, y => 20}, {x => 100, y => 200}]}}
14
- # notice $data.dig(a, b, 1, x).then |$x| { $x * 2 }
15
- # ~~~
16
- #
17
- # Would notice the value 200
18
- #
19
- # Contrast this with:
20
- #
21
- # ~~~ puppet
22
- # $data = {a => { b => [{x => 10, y => 20}, {ex => 100, why => 200}]}}
23
- # notice $data.dig(a, b, 1, x).then |$x| { $x * 2 }
24
- # ~~~
25
- #
26
- # Which would notice undef since the last lookup of 'x' results in `undef` which
27
- # is returned (without calling the block).
28
- #
29
- # As a result there was no need for conditional logic or a temporary (non local)
30
- # variable as the result is now either the wanted value (x) multiplied
31
- # by 2 or `undef`.
32
- #
33
- # Calls to `then` can be chained. In the next example, a structure is using an offset that
34
- # is using 1 as the index to the first element (instead of 0 which is used in the language).
35
- # We are not sure if user input actually contains an index at all, or if it is
36
- # outside the range of available names.
37
- #
38
- # ~~~ puppet
39
- # # Names to choose from
40
- # $names = ['Ringo', 'Paul', 'George', 'John']
41
- #
42
- # # structure where 'beatle 2' is wanted (but where the number refers
43
- # # to 'Paul' because input comes from a source using 1 for the first
44
- # # element).
45
- #
46
- # $data = [202, { beatle => 2 }]
47
- # $picked = assert_type(String,
48
- # # the data we are interested in is the second in the array,
49
- # # a hash, where we want the value of the key 'beatle'
50
- # $data.dig(1, 'beatle')
51
- # # and we want the index in $names before the given index
52
- # .then |$x| { $names[$x-1] }
53
- # # so we can construct a string with that beatle's name
54
- # .then |$x| { "Picked Beatle '${x}'" }
55
- # )
56
- #
57
- # ~~~ puppet
58
- #
59
- # Would notice "Picked Beatle 'Paul'", and would raise an error if the result
60
- # was not a String.
61
- #
1
+ # (Documented in 3.x stub)
62
2
  # @since 4.5.0
63
3
  #
64
4
  Puppet::Functions.create_function(:then) do
@@ -1,43 +1,4 @@
1
- # Returns the data type of a given value with a given degree of generality.
2
- #
3
- # @example Using `type()`
4
- #
5
- # ~~~ puppet
6
- # notice type(42) =~ Type[Integer]
7
- # ~~~
8
- #
9
- # Would notice true
10
- #
11
- # By default, the best possible inference is made where all details are retained.
12
- # This is good when the type is used for further type calculations but is overwhelmingly
13
- # rich in information if it is used in a error message.
14
- #
15
- # The optional argument `inference_method` may be given as (from lowest to highest fidelity):
16
- #
17
- # * `generalized` - reduces to common type and drops size constraints
18
- # * `reduced` - reduces to common type in collections
19
- # * `detailed` - (default) all details about inferred types is retained
20
- #
21
- # @example Using `type()` with different qualities:
22
- #
23
- # ~~~ puppet
24
- # notice type([3.14, 42], generalized)
25
- # notice type([3.14, 42], reduced)
26
- # notice type([3.14, 42], detailed)
27
- # notice type([3.14, 42])
28
- # ~~~
29
- #
30
- # Would notice the four values:
31
- #
32
- # 1. 'Array[Numeric]'
33
- # 2. 'Array[Numeric, 2, 2]'
34
- # 3. 'Tuple[Float[3.14], Integer[42,42]]]'
35
- # 4. 'Tuple[Float[3.14], Integer[42,42]]]'
36
- #
37
- # @param value [Any] - the value for which data type is returned
38
- # @param inference_type[Enum[generalized, reduced, detailed]] inference_type
39
- # @returns [Type] - the inferred type
40
- #
1
+ # (Documentation in 3.x stub)
41
2
  # @since 4.4.0
42
3
  #
43
4
  Puppet::Functions.create_function(:type) do
@@ -0,0 +1,40 @@
1
+ # Unwraps a Sensitive value and returns the wrapped object.
2
+ #
3
+ # ~~~puppet
4
+ # $plaintext = 'hunter2'
5
+ # $pw = Sensitive.new($plaintext)
6
+ # notice("Wrapped object is $pw") #=> Prints "Wrapped object is Sensitive [value redacted]"
7
+ # $unwrapped = $pw.unwrap
8
+ # notice("Unwrapped object is $unwrapped") #=> Prints "Unwrapped object is hunter2"
9
+ # ~~~
10
+ #
11
+ # You can optionally pass a block to unwrap in order to limit the scope where the
12
+ # unwrapped value is visible.
13
+ #
14
+ # ~~~puppet
15
+ # $pw = Sensitive.new('hunter2')
16
+ # notice("Wrapped object is $pw") #=> Prints "Wrapped object is Sensitive [value redacted]"
17
+ # $pw.unwrap |$unwrapped| {
18
+ # $conf = inline_template("password: ${unwrapped}\n")
19
+ # Sensitive.new($conf)
20
+ # } #=> Returns a new Sensitive object containing an interpolated config file
21
+ # # $unwrapped is now out of scope
22
+ # ~~~
23
+ #
24
+ # @since 4.0.0
25
+ #
26
+ Puppet::Functions.create_function(:unwrap) do
27
+ dispatch :unwrap do
28
+ param 'Sensitive', :arg
29
+ optional_block_param
30
+ end
31
+
32
+ def unwrap(arg)
33
+ unwrapped = arg.unwrap
34
+ if block_given?
35
+ yield(unwrapped)
36
+ else
37
+ unwrapped
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,70 @@
1
+ module Puppet
2
+ module Generate
3
+ module Models
4
+ module Type
5
+ # A model for resource type properties and parameters.
6
+ class Property
7
+ # Gets the name of the property as a Puppet string literal.
8
+ attr_reader :name
9
+
10
+ # Gets the Puppet type of the property.
11
+ attr_reader :type
12
+
13
+ # Gets the doc string of the property.
14
+ attr_reader :doc
15
+
16
+ # Initializes a property model.
17
+ # @param property [Puppet::Property] The Puppet property to model.
18
+ # @return [void]
19
+ def initialize(property)
20
+ @name = Puppet::Pops::Types::StringConverter.convert(property.name.to_s, '%p')
21
+ @type = self.class.get_puppet_type(property)
22
+ @doc = property.doc.strip
23
+ @is_namevar = property.isnamevar?
24
+ end
25
+
26
+ # Determines if this property is a namevar.
27
+ # @return [Boolean] Returns true if the property is a namevar or false if not.
28
+ def is_namevar?
29
+ @is_namevar
30
+ end
31
+
32
+ # Gets the Puppet type for a property.
33
+ # @param property [Puppet::Property] The Puppet property to get the Puppet type for.
34
+ # @return [String] Returns the string representing the Puppet type.
35
+ def self.get_puppet_type(property)
36
+ # HACK: the value collection does not expose the underlying value information at all
37
+ # thus this horribleness to get the underlying values hash
38
+ regexes = []
39
+ strings = []
40
+ values = property.value_collection.instance_variable_get('@values') || {}
41
+ values.each do |_, value|
42
+ if value.regex?
43
+ regexes << "/#{value.name.source.gsub(/\//, '\/')}/"
44
+ next
45
+ end
46
+
47
+ strings << Puppet::Pops::Types::StringConverter.convert(value.name.to_s, '%p')
48
+ value.aliases.each do |a|
49
+ strings << Puppet::Pops::Types::StringConverter.convert(a.to_s, '%p')
50
+ end
51
+ end
52
+
53
+ # If no string or regexes, default to Any type
54
+ return 'Any' if strings.empty? && regexes.empty?
55
+
56
+ # Calculate a variant of supported values
57
+ # Note that boolean strings are mapped to Variant[Boolean, Enum['true', 'false']]
58
+ # because of tech debt...
59
+ enum = strings.empty? ? nil : "Enum[#{strings.join(', ')}]"
60
+ pattern = regexes.empty? ? nil : "Pattern[#{regexes.join(', ')}]"
61
+ boolean = strings.include?('\'true\'') || strings.include?('\'false\'') ? 'Boolean' : nil
62
+ variant = [boolean, enum, pattern].reject { |t| t.nil? }
63
+ return variant[0] if variant.size == 1
64
+ "Variant[#{variant.join(', ')}]"
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,57 @@
1
+ require 'puppet/generate/models/type/property'
2
+
3
+ module Puppet
4
+ module Generate
5
+ module Models
6
+ module Type
7
+ # A model for Puppet resource types.
8
+ class Type
9
+ # Gets the name of the type as a Puppet string literal.
10
+ attr_reader :name
11
+
12
+ # Gets the doc string of the type.
13
+ attr_reader :doc
14
+
15
+ # Gets the properties of the type.
16
+ attr_reader :properties
17
+
18
+ # Gets the parameters of the type.
19
+ attr_reader :parameters
20
+
21
+ # Gets the title patterns of the type
22
+ attr_reader :title_patterns
23
+
24
+ # Gets the isomorphic member attribute of the type
25
+ attr_reader :isomorphic
26
+
27
+ # Initializes a type model.
28
+ # @param type [Puppet::Type] The Puppet type to model.
29
+ # @return [void]
30
+ def initialize(type)
31
+ @name = Puppet::Pops::Types::StringConverter.convert(type.name.to_s, '%p')
32
+ @doc = type.doc.strip
33
+ @properties = type.properties.map { |p| Property.new(p) }
34
+ @parameters = type.parameters.map do |name|
35
+ Property.new(type.paramclass(name))
36
+ end
37
+ @title_patterns = Hash[type.title_patterns.map do |mapping|
38
+ [
39
+ "/#{mapping[0].source.gsub(/\//, '\/')}/",
40
+ mapping[1].map { |names|
41
+ next if names.empty?
42
+ raise Puppet::Error, 'title patterns that use procs are not supported.' if names.size != 1
43
+ Puppet::Pops::Types::StringConverter.convert(names[0].to_s, '%p')
44
+ }
45
+ ]
46
+ end]
47
+ @isomorphic = type.isomorphic?
48
+ end
49
+
50
+ def render(template)
51
+ template.result(binding)
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,41 @@
1
+ # This file was automatically generated on <%= Time.now %>.
2
+ # Use the 'puppet generate types' command to regenerate this file.
3
+
4
+ <%- unless doc.empty? -%>
5
+ <%- doc.each_line do |line| -%>
6
+ # <%= line -%>
7
+ <%- end %>
8
+ <%- end -%>
9
+ Puppet::Resource::ResourceType3.new(
10
+ <%= name %>,
11
+ [
12
+ <%- properties.each_with_index do |property, index| -%>
13
+ <%- unless property.doc.empty? -%>
14
+ <%- property.doc.each_line do |line| -%>
15
+ # <%= line -%>
16
+ <%- end %>
17
+ <%- end -%>
18
+ Puppet::Resource::Param(<%= property.type %>, <%= property.name %><% if property.is_namevar? %>, true<% end %>)<% if index + 1 < properties.size %>,
19
+
20
+ <%- end -%>
21
+ <%- end %>
22
+ ],
23
+ [
24
+ <%- parameters.each_with_index do |parameter, index| -%>
25
+ <%- unless parameter.doc.empty? -%>
26
+ <%- parameter.doc.each_line do |line| -%>
27
+ # <%= line -%>
28
+ <%- end %>
29
+ <%- end -%>
30
+ Puppet::Resource::Param(<%= parameter.type %>, <%= parameter.name %><% if parameter.is_namevar? %>, true<% end %>)<% if index + 1 < parameters.size %>,
31
+
32
+ <%- end -%>
33
+ <%- end %>
34
+ ],
35
+ {
36
+ <%- title_patterns.each_with_index do |mapping, index| -%>
37
+ <%= mapping[0] %> => [<%= mapping[1].join(', ')%>]<%= "," if index + 1 < title_patterns.size %>
38
+ <%- end -%>
39
+ },
40
+ <%= isomorphic -%>
41
+ )