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,19 @@
1
+ module Puppet::Pops
2
+ module Serialization
3
+ # An InstanceReader is responsible for reading an instance of a complex object using a deserializer. The read involves creating the
4
+ # instance, register it with the deserializer (so that self references can be resolved) and then read the instance data (which normally
5
+ # amounts to all attribute values).
6
+ # Instance readers are registered with of {Types::PObjectType}s to aid the type when reading instances.
7
+ #
8
+ # @api private
9
+ module InstanceReader
10
+ # @param [Class] impl_class the class of the instance to be created and initialized
11
+ # @param [Integer] value_count the expected number of objects that forms the initialization data
12
+ # @param [Deserializer] deserializer the deserializer to read from, and to register the instance with
13
+ # @return [Object] the instance that has been read
14
+ def read(impl_class, value_count, deserializer)
15
+ Serialization.not_implemented(self, 'read')
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,14 @@
1
+ module Puppet::Pops
2
+ module Serialization
3
+ # An instance writer is responsible for writing complex objects using a {Serializer}
4
+ # @api private
5
+ module InstanceWriter
6
+ # @param [Types::PObjectType] type the type of instance to write
7
+ # @param [Object] value the instance
8
+ # @param [Serializer] serializer the serializer that will receive the written instance
9
+ def write(type, value, serializer)
10
+ Serialization.not_implemented(self, 'write')
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,247 @@
1
+ require 'json'
2
+
3
+ module Puppet::Pops
4
+ module Serialization
5
+
6
+ require_relative 'time_factory'
7
+ require_relative 'abstract_reader'
8
+ require_relative 'abstract_writer'
9
+
10
+ module JSON
11
+ # A Writer that writes output in JSON format
12
+ # @api private
13
+ class Writer < AbstractWriter
14
+ def initialize(io, options = {})
15
+ super(Packer.new(io, options), options)
16
+ end
17
+
18
+ def extension_packer
19
+ @packer
20
+ end
21
+
22
+ def packer
23
+ @packer
24
+ end
25
+
26
+ def build_payload
27
+ yield(@packer)
28
+ end
29
+
30
+ def to_json
31
+ @packer.to_json
32
+ end
33
+ end
34
+
35
+ # A Reader that reads JSON formatted input
36
+ # @api private
37
+ class Reader < AbstractReader
38
+ def initialize(io)
39
+ super(Unpacker.new(io))
40
+ end
41
+
42
+ def read_payload(data)
43
+ yield(@unpacker)
44
+ end
45
+ end
46
+
47
+ # The JSON Packer. Modeled after the MessagePack::Packer
48
+ # @api private
49
+ class Packer
50
+ def initialize(io, options = {})
51
+ @io = io
52
+ @type_registry = {}
53
+ @nested = []
54
+ @verbose = options[:verbose]
55
+ @verbose = false if @verbose.nil?
56
+ @indent = options[:indent] || 0
57
+ end
58
+
59
+ def register_type(type, klass, &block)
60
+ @type_registry[klass] = [type, klass, block]
61
+ end
62
+
63
+ def empty?
64
+ @io.pos == 0
65
+ end
66
+
67
+ def flush
68
+ pos = @io.pos
69
+ case pos
70
+ when 1
71
+ # Just start marker present.
72
+ when 0
73
+ @io << '['
74
+ else
75
+ # Drop last comma
76
+ @io.pos = pos - 1
77
+ end
78
+ @io << ']'
79
+ @io.flush
80
+ end
81
+
82
+ def write(obj)
83
+ assert_started
84
+ case obj
85
+ when Array
86
+ write_array_header(obj.size)
87
+ obj.each { |x| write(x) }
88
+ when Hash
89
+ write_map_header(obj.size)
90
+ obj.each_pair {|k, v| write(k); write(v) }
91
+ when nil
92
+ write_nil
93
+ else
94
+ write_scalar(obj)
95
+ end
96
+ end
97
+ alias pack write
98
+
99
+ def write_array_header(n)
100
+ assert_started
101
+ if n < 1
102
+ @io << '[]'
103
+ else
104
+ @io << '['
105
+ @nested << [false, n]
106
+ end
107
+ end
108
+
109
+ def write_map_header(n)
110
+ assert_started
111
+ if n < 1
112
+ @io << '{}'
113
+ else
114
+ @io << '{'
115
+ @nested << [true, n * 2]
116
+ end
117
+ end
118
+
119
+ def write_nil
120
+ assert_started
121
+ @io << 'null'
122
+ write_delim
123
+ end
124
+
125
+ def to_s
126
+ to_json
127
+ end
128
+
129
+ def to_json
130
+ string = @io.string
131
+ if @indent > 0
132
+ options = { :indent => ' ' * @indent }
133
+ string = ::JSON.pretty_unparse(::JSON.parse(string), options)
134
+ end
135
+ string
136
+ end
137
+
138
+ # Write a payload object. Not subject to extensions
139
+ def write_pl(obj)
140
+ @io << obj.to_json << ','
141
+ end
142
+
143
+ def assert_started
144
+ @io << '[' if @io.pos == 0
145
+ end
146
+ private :assert_started
147
+
148
+ def write_delim
149
+ nesting = @nested.last
150
+ cnt = nesting.nil? ? nil : nesting[1]
151
+ case cnt
152
+ when 1
153
+ @io << (nesting[0] ? '}' : ']')
154
+ @nested.pop
155
+ write_delim
156
+ when Integer
157
+ if (cnt % 2) == 0 || !nesting[0]
158
+ @io << ','
159
+ else
160
+ @io << ':'
161
+ end
162
+ nesting[1] = cnt - 1
163
+ else
164
+ @io << ','
165
+ end
166
+ end
167
+ private :write_delim
168
+
169
+ def write_scalar(obj)
170
+ ext = @type_registry[obj.class]
171
+ if ext.nil?
172
+ case obj
173
+ when Numeric, String, true, false, nil
174
+ @io << obj.to_json
175
+ write_delim
176
+ else
177
+ raise SerializationError, "Unable to serialize a #{obj.class.name}"
178
+ end
179
+ else
180
+ write_extension(ext, obj)
181
+ end
182
+ end
183
+ private :write_scalar
184
+
185
+ def write_extension(ext, obj)
186
+ @io << '[' << extension_indicator(ext).to_json << ','
187
+ write_extension_payload(ext, obj)
188
+ if obj.is_a?(Extension::SequenceStart) && obj.sequence_size > 0
189
+ @nested << [false, obj.sequence_size]
190
+ else
191
+ @io.pos -= 1
192
+ @io << ']'
193
+ write_delim
194
+ end
195
+ end
196
+ private :write_extension
197
+
198
+ def write_extension_payload(ext, obj)
199
+ ext[2].call(obj)
200
+ end
201
+ private :write_extension_payload
202
+
203
+ def extension_indicator(ext)
204
+ @verbose ? ext[1].name.sub(/^Puppet::Pops::Serialization::\w+::(.+)$/, '\1') : ext[0]
205
+ end
206
+ private :extension_indicator
207
+ end
208
+
209
+ class Unpacker
210
+ def initialize(io)
211
+ parsed = ::JSON.parse(io.read(nil))
212
+ raise SerializationError, "JSON stream is not an array" unless parsed.is_a?(Array)
213
+ @etor_stack = [parsed.each]
214
+ @type_registry = {}
215
+ @nested = []
216
+ end
217
+
218
+ def read
219
+ obj = nil
220
+ loop do
221
+ raise SerializationError, 'Unexpected end of input' if @etor_stack.empty?
222
+ etor = @etor_stack.last
223
+ begin
224
+ obj = etor.next
225
+ break
226
+ rescue StopIteration
227
+ @etor_stack.pop
228
+ end
229
+ end
230
+ if obj.is_a?(Array)
231
+ ext_etor = obj.each
232
+ @etor_stack << ext_etor
233
+ ext_no = ext_etor.next
234
+ ext_block = @type_registry[ext_no]
235
+ raise SerializationError, "Invalid input. #{ext_no} is not a valid extension number" if ext_block.nil?
236
+ obj = ext_block.call(nil)
237
+ end
238
+ obj
239
+ end
240
+
241
+ def register_type(extension_number, &block)
242
+ @type_registry[extension_number] = block
243
+ end
244
+ end
245
+ end
246
+ end
247
+ end
@@ -0,0 +1,63 @@
1
+ require_relative 'instance_reader'
2
+ require_relative 'instance_writer'
3
+
4
+ module Puppet::Pops
5
+ module Serialization
6
+
7
+ # Instance reader for objects that implement {Types::PuppetObject}
8
+ # @api private
9
+ class ObjectReader
10
+ include InstanceReader
11
+
12
+ def read(impl_class, value_count, deserializer)
13
+ type = impl_class._ptype
14
+ (names, types, required_count) = type.parameter_info
15
+ max = names.size
16
+ unless value_count >= required_count && value_count <= max
17
+ raise Serialization::SerializationError, "Feature count mismatch for #{impl_class.name}. Expected #{min} - #{max}, actual #{value_count}"
18
+ end
19
+ # Deserializer must know about this instance before we read its attributes
20
+ val = deserializer.remember(impl_class.allocate)
21
+ args = Array.new(value_count) { deserializer.read }
22
+ types.each_with_index do |ptype, index|
23
+ if index < args.size
24
+ arg = args[index]
25
+ Types::TypeAsserter.assert_instance_of(nil, ptype, arg) { "#{type.name}[#{names[index]}]" } unless arg == :default
26
+ else
27
+ attr = type[names[index]]
28
+ raise Serialization::SerializationError, "Missing default value for #{type.name}[#{names[index]}]" unless attr.value?
29
+ args << attr.value
30
+ end
31
+ end
32
+ val.send(:initialize, *args)
33
+ val
34
+ end
35
+
36
+ INSTANCE = ObjectReader.new
37
+ end
38
+
39
+ # Instance writer for objects that implement {Types::PuppetObject}
40
+ # @api private
41
+ class ObjectWriter
42
+ include InstanceWriter
43
+
44
+ def write(type, value, serializer)
45
+ impl_class = value.class
46
+ (names, types, required_count) = type.parameter_info(true)
47
+ args = names.map { |name| value.send(name) }
48
+
49
+ # Pop optional arguments that are nil
50
+ while args.size > required_count
51
+ break unless args.last.nil?
52
+ args.pop
53
+ end
54
+
55
+ serializer.start_object(type.name, args.size)
56
+ args.each { |arg| serializer.write(arg) }
57
+ end
58
+
59
+ INSTANCE = ObjectWriter.new
60
+ end
61
+ end
62
+ end
63
+
@@ -0,0 +1,151 @@
1
+ require_relative 'instance_reader'
2
+ require_relative 'instance_writer'
3
+
4
+ module Puppet::Pops
5
+ module Serialization
6
+
7
+ # @api private
8
+ module RGen
9
+ class Base
10
+ def features(impl_class)
11
+ impl_class.ecore.eAllStructuralFeatures.reject {|feature| feature.derived }
12
+ end
13
+ end
14
+
15
+ # Instance reader for RGen::Ecore objects
16
+ # @api private
17
+ class RGenReader < Base
18
+ include InstanceReader
19
+
20
+ def read(impl_class, value_count, deserializer)
21
+ features = features(impl_class)
22
+ raise SerializationError, "Feature count mismatch for #{impl_class}" unless value_count == features.size
23
+ # Deserializer must know about this instance before we read its attributes
24
+ obj = deserializer.remember(impl_class.new)
25
+ features.each { |feature| obj.setGeneric(feature.name, deserializer.read) }
26
+ obj
27
+ end
28
+
29
+ INSTANCE = RGenReader.new
30
+ end
31
+
32
+ # Instance writer for RGen::Ecore objects
33
+ # @api private
34
+ class RGenWriter < Base
35
+ include InstanceWriter
36
+
37
+ def write(type, value, serializer)
38
+ impl_class = value.class
39
+ features = features(impl_class)
40
+ serializer.start_object(type.name, features.size)
41
+ features.each { |feature| serializer.write(value.getGeneric(feature.name)) }
42
+ end
43
+
44
+ INSTANCE = RGenWriter.new
45
+ end
46
+
47
+ # A generator that produces a {Types::PTypeSetType} instance based on an ruby {Module}
48
+ # that represents an RGen::ECore::EPackage.
49
+ #
50
+ # The generator is not complete. In particular, it does not deal with:
51
+ # - references that extend beyond eCore and the given ePackage
52
+ # - sub packages
53
+ # - methods
54
+ # - annotations
55
+ #
56
+ class TypeGenerator
57
+
58
+ ECore = ::RGen::ECore
59
+
60
+ def generate_type_set(namespace, package, loader)
61
+ types = {}
62
+ package.constants.each do |c|
63
+ cls = package.const_get(c)
64
+ next unless cls.is_a?(Class) && cls.respond_to?(:ecore)
65
+ e_class = cls.ecore
66
+ types[e_class.name] = generate_type_hash(e_class)
67
+ end
68
+ type_set = Types::PTypeSetType.new(namespace, {
69
+ Pcore::KEY_PCORE_VERSION => Pcore::PCORE_VERSION,
70
+ Types::KEY_VERSION => '0.1.0',
71
+ Types::KEY_TYPES => types
72
+ }, Pcore::RUNTIME_NAME_AUTHORITY).resolve(Types::TypeParser.singleton, loader)
73
+
74
+ type_set.types.values.each do |type|
75
+ type.reader = RGenReader::INSTANCE
76
+ type.writer = RGenWriter::INSTANCE
77
+ end
78
+ type_set
79
+ end
80
+
81
+ def generate_type_hash(e_class)
82
+ attributes = {}
83
+ e_class.eStructuralFeatures.each do |feature|
84
+ attr = {}
85
+ attributes[feature.name] = attr
86
+ type = feature_type(feature)
87
+ value = feature.defaultValue
88
+ if value.nil?
89
+ if feature.lowerBound == 0
90
+ if feature.upperBound == -1 || feature.upperBound > 1
91
+ attr[Types::KEY_VALUE] = []
92
+ elsif !feature.derived
93
+ type = Types::POptionalType.new(type)
94
+ attr[Types::KEY_VALUE] = nil
95
+ end
96
+ end
97
+ else
98
+ value = value.to_s if value.is_a?(Symbol)
99
+ attr['value'] = value
100
+ end
101
+ attr[Types::KEY_TYPE] = type
102
+ if feature.derived
103
+ attr[Types::KEY_KIND] = Types::PObjectType::ATTRIBUTE_KIND_DERIVED
104
+ elsif feature.unsettable
105
+ attr[Types::KEY_KIND] = Types::PObjectType::ATTRIBUTE_KIND_CONSTANT
106
+ end
107
+ end
108
+ result = { Types::KEY_ATTRIBUTES => attributes }
109
+ supers = e_class.eSuperTypes
110
+ case supers.size
111
+ when 0
112
+ when 1
113
+ result['parent'] = Types::PTypeReferenceType.new(supers[0].name)
114
+ else
115
+ raise SerializationError, "Multiple inheritance is not supported. #{e_class.name} has #{supers.size} super types"
116
+ end
117
+ result
118
+ end
119
+
120
+ def feature_type(feature)
121
+ eType = feature.eType
122
+ type = case eType
123
+ when ECore::EInt, ECore::ELong
124
+ Types::PIntegerType::DEFAULT
125
+ when ECore::EFloat
126
+ Types::PFloatType::DEFAULT
127
+ when ECore::EEnum
128
+ Types::PEnumType.new(eType.eLiterals.map { |e| e.name })
129
+ when ECore::EBoolean
130
+ Types::PBooleanType::DEFAULT
131
+ when ECore::EString
132
+ Types::PStringType::DEFAULT
133
+ when ECore::EClass
134
+ Types::PTypeReferenceType.new(eType.name)
135
+ else
136
+ Types::PAnyType::DEFAULT
137
+ end
138
+
139
+ case feature.upperBound
140
+ when 1
141
+ type
142
+ when -1
143
+ Types::PArrayType.new(type, Types::PIntegerType.new(feature.lowerBound))
144
+ else
145
+ Types::PArrayType.new(type, Types::PIntegerType.new(feature.lowerBound, feature.upperBound))
146
+ end
147
+ end
148
+ end
149
+ end
150
+ end
151
+ end