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
@@ -0,0 +1,21 @@
1
+ type Puppet::Resource::Param = Object[{
2
+ attributes => {
3
+ type => Type,
4
+ name => String[1],
5
+ name_var => { type => Boolean, value => false }
6
+ },
7
+ equality => [name],
8
+ }]
9
+
10
+
11
+ type Puppet::Resource::ResourceType3 = Object[{
12
+ attributes => {
13
+ name => String[1],
14
+ properties => { type => Array[Puppet::Resource::Param], value = []},
15
+ parameters => { type => Array[Puppet::Resource::Param], value = []},
16
+ title_patterns => { type => Optional[Hash[Regexp, Array[String[1]]], value => nil },
17
+ isomorphic => { type => Boolean, value => true },
18
+ },
19
+ equality => [name],
20
+ }]
21
+
@@ -0,0 +1,17 @@
1
+ module Puppet::Pops
2
+ module Serialization
3
+ def self.not_implemented(impl, method_name)
4
+ raise NotImplementedError, "The class #{impl.class.name} should have implemented the method #{method_name}()"
5
+ end
6
+
7
+ class SerializationError < Puppet::Error
8
+ end
9
+ end
10
+ end
11
+
12
+ require_relative 'serialization/serializer'
13
+ require_relative 'serialization/deserializer'
14
+ require_relative 'serialization/json'
15
+ require_relative 'serialization/time_factory'
16
+ require_relative 'serialization/rgen'
17
+ require_relative 'serialization/object'
@@ -0,0 +1,149 @@
1
+ require_relative 'extension'
2
+ require_relative 'time_factory'
3
+
4
+ module Puppet::Pops
5
+ module Serialization
6
+ # Abstract class for protocol specific readers such as MsgPack or JSON
7
+ # The abstract reader is capable of reading the primitive scalars:
8
+ # - Boolean
9
+ # - Integer
10
+ # - Float
11
+ # - String
12
+ # and, by using extensions, also
13
+ # - Array start
14
+ # - Map start
15
+ # - Object start
16
+ # - Regexp
17
+ # - Version
18
+ # - VersionRange
19
+ # - Timestamp
20
+ # - Default
21
+ #
22
+ # @api public
23
+ class AbstractReader
24
+ # @param [MessagePack::Unpacker,JSON::Unpacker] unpacker The low lever unpacker that delivers the primitive objects
25
+ # @param [MessagePack::Unpacker,JSON::Unpacker] extension_unpacker Optional unpacker for extensions. Defaults to the unpacker
26
+ # @api public
27
+ def initialize(unpacker, extension_unpacker = nil)
28
+ @read = []
29
+ @unpacker = unpacker
30
+ @extension_unpacker = extension_unpacker.nil? ? unpacker : extension_unpacker
31
+ register_types
32
+ end
33
+
34
+ # Read an object from the underlying unpacker
35
+ # @return [Object] the object that was read
36
+ # @api public
37
+ def read
38
+ obj = @unpacker.read
39
+ case obj
40
+ when Extension::InnerTabulation
41
+ @read[obj.index]
42
+ when Numeric, Symbol, Extension::NotTabulated, true, false, nil
43
+ # not tabulated
44
+ obj
45
+ else
46
+ @read << obj
47
+ obj
48
+ end
49
+ end
50
+
51
+ # @return [Integer] The total count of unique primitive values that has been read
52
+ # @api private
53
+ def primitive_count
54
+ @read.size
55
+ end
56
+
57
+ # @api private
58
+ def read_payload(data)
59
+ raise SerializationError, "Internal error: Class #{self.class} does not implement method 'read_payload'"
60
+ end
61
+
62
+ # @api private
63
+ def read_tpl_qname(ep)
64
+ Array.new(ep.read) { read_tpl(ep) }.join('::')
65
+ end
66
+
67
+ # @api private
68
+ def read_tpl(ep)
69
+ obj = ep.read
70
+ case obj
71
+ when Integer
72
+ @read[obj]
73
+ else
74
+ @read << obj
75
+ obj
76
+ end
77
+ end
78
+
79
+ # @api private
80
+ def extension_unpacker
81
+ @extension_unpacker
82
+ end
83
+
84
+ # @api private
85
+ def register_type(extension_number, &block)
86
+ @unpacker.register_type(extension_number, &block)
87
+ end
88
+
89
+ # @api private
90
+ def register_types
91
+ register_type(Extension::INNER_TABULATION) do |data|
92
+ read_payload(data) { |ep| Extension::InnerTabulation.new(ep.read) }
93
+ end
94
+
95
+ register_type(Extension::TABULATION) do |data|
96
+ read_payload(data) { |ep| Extension::Tabulation.new(ep.read) }
97
+ end
98
+
99
+ register_type(Extension::ARRAY_START) do |data|
100
+ read_payload(data) { |ep| Extension::ArrayStart.new(ep.read) }
101
+ end
102
+
103
+ register_type(Extension::MAP_START) do |data|
104
+ read_payload(data) { |ep| Extension::MapStart.new(ep.read) }
105
+ end
106
+
107
+ register_type(Extension::OBJECT_START) do |data|
108
+ read_payload(data) { |ep| type_name = read_tpl_qname(ep); Extension::ObjectStart.new(type_name, ep.read) }
109
+ end
110
+
111
+ register_type(Extension::DEFAULT) do |data|
112
+ read_payload(data) { |ep| Extension::Default::INSTANCE }
113
+ end
114
+
115
+ register_type(Extension::COMMENT) do |data|
116
+ read_payload(data) { |ep| Extension::Comment.new(ep.read) }
117
+ end
118
+
119
+ register_type(Extension::REGEXP) do |data|
120
+ read_payload(data) { |ep| Regexp.new(ep.read) }
121
+ end
122
+
123
+ register_type(Extension::TYPE_REFERENCE) do |data|
124
+ read_payload(data) { |ep| Types::PTypeReferenceType.new(read_tpl_qname(ep)) }
125
+ end
126
+
127
+ register_type(Extension::SYMBOL) do |data|
128
+ read_payload(data) { |ep| ep.read.to_sym }
129
+ end
130
+
131
+ register_type(Extension::TIME) do |data|
132
+ read_payload(data) do |ep|
133
+ sec = ep.read
134
+ nsec = ep.read
135
+ TimeFactory.from_sec_nsec(sec, nsec)
136
+ end
137
+ end
138
+
139
+ register_type(Extension::VERSION) do |data|
140
+ read_payload(data) { |ep| Semantic::Version.parse(ep.read) }
141
+ end
142
+
143
+ register_type(Extension::VERSION_RANGE) do |data|
144
+ read_payload(data) { |ep| Semantic::VersionRange.parse(ep.read) }
145
+ end
146
+ end
147
+ end
148
+ end
149
+ end
@@ -0,0 +1,179 @@
1
+ require_relative 'extension'
2
+
3
+ module Puppet::Pops
4
+ module Serialization
5
+
6
+ MAX_INTEGER = 0x7fffffffffffffff
7
+ MIN_INTEGER = -0x8000000000000000
8
+
9
+ # Abstract class for protocol specific writers such as MsgPack or JSON
10
+ # The abstract write is capable of writing the primitive scalars:
11
+ # - Boolean
12
+ # - Integer
13
+ # - Float
14
+ # - String
15
+ # and, by using extensions, also
16
+ # - Array start
17
+ # - Map start
18
+ # - Object start
19
+ # - Regexp
20
+ # - Version
21
+ # - VersionRange
22
+ # - Timestamp
23
+ # - Default
24
+ #
25
+ # @api public
26
+ class AbstractWriter
27
+ # @param [MessagePack::Packer,JSON::Packer] packer the underlying packer stream
28
+ # @param [Hash] options
29
+ # @option options [Boolean] :tabulate `true` if tabulation is enabled (which is the default).
30
+ # @param [DebugPacker,nil] extension_packer Optional specific extension packer. Only used for debug output
31
+ # @api public
32
+ def initialize(packer, options, extension_packer = nil)
33
+ @tabulate = options[:tabulate]
34
+ @tabulate = true if @tabulate.nil?
35
+ @written = {}
36
+ @packer = packer
37
+ @extension_packer = extension_packer.nil? ? packer : extension_packer
38
+ register_types
39
+ end
40
+
41
+ # Tell the underlying packer to flush.
42
+ # @api public
43
+ def finish
44
+ @packer.flush
45
+ end
46
+
47
+ # Write a value on the underlying stream
48
+ # @api public
49
+ def write(value)
50
+ written = false
51
+ case value
52
+ when Integer
53
+ # not tabulated, but integers larger than 64-bit cannot be allowed.
54
+ raise SerializationError, 'Integer out of bounds' if value > MAX_INTEGER || value < MIN_INTEGER
55
+ when Numeric, Symbol, Extension::NotTabulated, true, false, nil
56
+ # not tabulated
57
+ else
58
+ if @tabulate
59
+ index = @written[value]
60
+ if index.nil?
61
+ @packer.write(value)
62
+ written = true
63
+ @written[value] = @written.size
64
+ else
65
+ value = Extension::InnerTabulation.new(index)
66
+ end
67
+ end
68
+ end
69
+ @packer.write(value) unless written
70
+ end
71
+
72
+ # Called from extension callbacks only
73
+ #
74
+ # @api private
75
+ def build_payload
76
+ raise SerializationError, "Internal error: Class #{self.class} does not implement method 'build_payload'"
77
+ end
78
+
79
+ # @api private
80
+ def extension_packer
81
+ @extension_packer
82
+ end
83
+
84
+ # Called from extension callbacks only
85
+ #
86
+ # @api private
87
+ def write_tpl_qname(ep, qname)
88
+ names = qname.split('::')
89
+ ep.write(names.size)
90
+ names.each {|n| write_tpl(ep, n)}
91
+ end
92
+
93
+ # Called from extension callbacks only
94
+ #
95
+ # @api private
96
+ def write_tpl(ep, value)
97
+ raise ArgumentError, 'Internal error. Integers cannot be tabulated in extension payload' if value.is_a?(Integer)
98
+ if @tabulate
99
+ index = @written[value]
100
+ if index.nil?
101
+ @written[value] = @written.size
102
+ else
103
+ value = index
104
+ end
105
+ end
106
+ ep.write(value)
107
+ end
108
+
109
+ # @api private
110
+ def register_type(extension_number, payload_class, &block)
111
+ @packer.register_type(extension_number, payload_class, &block)
112
+ end
113
+
114
+ # @api private
115
+ def register_types
116
+ # 0x00 - 0x0F are reserved for low-level serialization / tabulation extensions
117
+
118
+ register_type(Extension::INNER_TABULATION, Extension::InnerTabulation) do |o|
119
+ build_payload { |ep| ep.write(o.index) }
120
+ end
121
+
122
+ register_type(Extension::TABULATION, Extension::Tabulation) do |o|
123
+ build_payload { |ep| ep.write(o.index) }
124
+ end
125
+
126
+ # 0x10 - 0x1F are reserved for structural extensions
127
+
128
+ register_type(Extension::ARRAY_START, Extension::ArrayStart) do |o|
129
+ build_payload { |ep| ep.write(o.size) }
130
+ end
131
+
132
+ register_type(Extension::MAP_START, Extension::MapStart) do |o|
133
+ build_payload { |ep| ep.write(o.size) }
134
+ end
135
+
136
+ register_type(Extension::OBJECT_START, Extension::ObjectStart) do |o|
137
+ build_payload { |ep| write_tpl_qname(ep, o.type_name); ep.write(o.attribute_count) }
138
+ end
139
+
140
+ # 0x20 - 0x2f reserved for special extension objects
141
+
142
+ register_type(Extension::DEFAULT, Extension::Default) do |o|
143
+ build_payload { |ep| }
144
+ end
145
+
146
+ register_type(Extension::COMMENT, Extension::Comment) do |o|
147
+ build_payload { |ep| ep.write(o.comment) }
148
+ end
149
+
150
+ # 0x30 - 0x7f reserved for mapping of specific runtime classes
151
+
152
+ register_type(Extension::REGEXP, Regexp) do |o|
153
+ build_payload { |ep| ep.write(o.source) }
154
+ end
155
+
156
+ register_type(Extension::TYPE_REFERENCE, Types::PTypeReferenceType) do |o|
157
+ build_payload { |ep| write_tpl_qname(ep, o.type_string) }
158
+ end
159
+
160
+ register_type(Extension::SYMBOL, Symbol) do |o|
161
+ build_payload { |ep| ep.write(o.to_s) }
162
+ end
163
+
164
+ register_type(Extension::TIME, Time) do |o|
165
+ build_payload { |ep| ep.write(o.tv_sec); ep.write(o.tv_nsec) }
166
+ end
167
+
168
+ register_type(Extension::VERSION, Semantic::Version) do |o|
169
+ build_payload { |ep| ep.write(o.to_s) }
170
+ end
171
+
172
+ register_type(Extension::VERSION_RANGE, Semantic::VersionRange) do |o|
173
+ build_payload { |ep| ep.write(o.to_s) }
174
+ end
175
+ end
176
+ end
177
+ end
178
+ end
179
+
@@ -0,0 +1,60 @@
1
+ require_relative 'extension'
2
+
3
+ module Puppet::Pops
4
+ module Serialization
5
+ # The deserializer is capable of reading, arrays, maps, and complex objects using an underlying protocol reader. It takes care of
6
+ # resolving tabulations and assembling complex objects. The type of the complex objects are resolved using a loader.
7
+ # @api public
8
+ class Deserializer
9
+ # @param [AbstractReader] reader the reader used when reading primitive objects from a stream
10
+ # @param [Loader::Loader] loader the loader used when resolving names of types
11
+ # @api public
12
+ def initialize(reader, loader)
13
+ @read = []
14
+ @reader = reader
15
+ @loader = loader
16
+ end
17
+
18
+ # Read the next value from the reader.
19
+ #
20
+ # @return [Object] the value that was read
21
+ # @api public
22
+ def read
23
+ val = @reader.read
24
+ case val
25
+ when Extension::Tabulation
26
+ @read[val.index]
27
+ when Extension::Default
28
+ :default
29
+ when Extension::ArrayStart
30
+ result = remember([])
31
+ val.size.times { result << read }
32
+ result
33
+ when Extension::MapStart
34
+ result = remember({})
35
+ val.size.times { key = read; result[key] = read }
36
+ result
37
+ when Extension::ObjectStart
38
+ type_name = val.type_name
39
+ type = Types::TypeParser.singleton.parse(type_name, @loader)
40
+ raise SerializationError, "No implementation mapping found for Puppet Type #{type_name}" if type.is_a?(Types::PTypeReferenceType)
41
+ type.read(val.attribute_count, self)
42
+ when Numeric, String, true, false, nil, Time
43
+ val
44
+ else
45
+ remember(val)
46
+ end
47
+ end
48
+
49
+ # Remember that a value has been read. This means that the value is given an index
50
+ # and that subsequent reads of a tabulation with that index should return the value.
51
+ # @param [Object] value The value to remember
52
+ # @return [Object] the argument
53
+ # @api private
54
+ def remember(value)
55
+ @read << value
56
+ value
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,126 @@
1
+ module Puppet::Pops
2
+ module Serialization
3
+ module Extension
4
+ # 0x00 - 0x0F are reserved for low-level serialization / tabulation extensions
5
+
6
+ # Tabulation internal to the low level protocol reader/writer
7
+ INNER_TABULATION = 0x00
8
+
9
+ # Tabulation managed by the serializer / deserializer
10
+ TABULATION = 0x01
11
+
12
+ # 0x10 - 0x1F are reserved for structural extensions
13
+ ARRAY_START = 0x10
14
+ MAP_START = 0x11
15
+ OBJECT_START = 0x12
16
+
17
+ # 0x20 - 0x2f reserved for special extension objects
18
+ DEFAULT = 0x20
19
+ COMMENT = 0x21
20
+
21
+ # 0x30 - 0x7f reserved for mapping of specific runtime classes
22
+ REGEXP = 0x30
23
+ TYPE_REFERENCE = 0x31
24
+ SYMBOL = 0x32
25
+ TIME = 0x33
26
+ TIMESPAN = 0x34
27
+ VERSION = 0x35
28
+ VERSION_RANGE = 0x36
29
+
30
+ # Marker module indicating whether or not an instance is tabulated or not
31
+ module NotTabulated; end
32
+
33
+ # Marker module for objects that starts a sequence, i.e. ArrayStart, MapStart, and ObjectStart
34
+ module SequenceStart; end
35
+
36
+ # The class that triggers the use of the DEFAULT extension. It doesn't have any payload
37
+ class Default
38
+ include NotTabulated
39
+ INSTANCE = Default.new
40
+ end
41
+
42
+ # The class that triggers the use of the TABULATION extension. The payload is the tabulation index
43
+ class Tabulation
44
+ include NotTabulated
45
+ attr_reader :index
46
+ def initialize(index)
47
+ @index = index
48
+ end
49
+ end
50
+
51
+ # Tabulation internal to the protocol reader/writer
52
+ class InnerTabulation < Tabulation
53
+ end
54
+
55
+ # The class that triggers the use of the MAP_START extension. The payload is the map size (number of entries)
56
+ class MapStart
57
+ include NotTabulated
58
+ include SequenceStart
59
+ attr_reader :size
60
+ def initialize(size)
61
+ @size = size
62
+ end
63
+
64
+ # Sequence size is twice the map size since each entry is written as key and value
65
+ def sequence_size
66
+ @size * 2
67
+ end
68
+ end
69
+
70
+ # The class that triggers the use of the ARRAY_START extension. The payload is the array size
71
+ class ArrayStart
72
+ include NotTabulated
73
+ include SequenceStart
74
+ attr_reader :size
75
+ def initialize(size)
76
+ @size = size
77
+ end
78
+
79
+ def sequence_size
80
+ @size
81
+ end
82
+ end
83
+
84
+ # The class that triggers the use of the OBJECT_START extension. The payload is the name of the object type and the
85
+ # number of attributes in the instance.
86
+ class ObjectStart
87
+ include SequenceStart
88
+ attr_reader :type_name, :attribute_count
89
+ def initialize(type_name, attribute_count)
90
+ @type_name = type_name
91
+ @attribute_count = attribute_count
92
+ end
93
+
94
+ def hash
95
+ @type_name.hash * 29 + attribute_count.hash
96
+ end
97
+
98
+ def eql?(o)
99
+ o.is_a?(ObjectStart) && o.type_name == @type_name && o.attribute_count == @attribute_count
100
+ end
101
+ alias == eql?
102
+
103
+ def sequence_size
104
+ @attribute_count
105
+ end
106
+ end
107
+
108
+ # The class that triggers the use of the COMMENT extension. The payload is comment text
109
+ class Comment
110
+ attr_reader :comment
111
+ def initialize(comment)
112
+ @comment = comment
113
+ end
114
+
115
+ def hash
116
+ @comment.hash
117
+ end
118
+
119
+ def eql?(o)
120
+ o.is_a?(Comment) && o.comment == @comment
121
+ end
122
+ alias == eql?
123
+ end
124
+ end
125
+ end
126
+ end