puppet 4.3.0 → 4.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (560) hide show
  1. checksums.yaml +7 -0
  2. data/COMMITTERS.md +2 -2
  3. data/CONTRIBUTING.md +6 -6
  4. data/LICENSE +1 -1
  5. data/README.md +8 -9
  6. data/conf/auth.conf +2 -2
  7. data/ext/README.environment +1 -1
  8. data/ext/build_defaults.yaml +1 -1
  9. data/ext/debian/README.source +1 -1
  10. data/ext/debian/control +1 -1
  11. data/ext/debian/copyright +4 -4
  12. data/ext/debian/puppetmaster.README.debian +11 -9
  13. data/ext/emacs/puppet-mode.el +1 -1
  14. data/ext/envpuppet +2 -2
  15. data/ext/ips/puppetagent.xml +1 -1
  16. data/ext/ips/puppetmaster.xml +1 -1
  17. data/ext/project_data.yaml +8 -0
  18. data/ext/puppet-test +3 -3
  19. data/ext/rack/example-passenger-vhost.conf +1 -1
  20. data/ext/redhat/puppet.spec.erb +2 -2
  21. data/ext/regexp_nodes/regexp_nodes.rb +1 -1
  22. data/ext/solaris/pkginfo +1 -1
  23. data/ext/solaris/smf/puppet.xml +1 -1
  24. data/ext/suse/puppet.spec +2 -2
  25. data/ext/upload_facts.rb +1 -1
  26. data/ext/windows/puppet_interactive.bat +6 -0
  27. data/ext/windows/puppet_shell.bat +9 -0
  28. data/ext/windows/run_puppet_interactive.bat +9 -0
  29. data/ext/yaml_nodes.rb +1 -1
  30. data/install.rb +30 -20
  31. data/lib/hiera/scope.rb +1 -1
  32. data/lib/puppet/agent.rb +1 -1
  33. data/lib/puppet/application/agent.rb +4 -2
  34. data/lib/puppet/application/apply.rb +7 -4
  35. data/lib/puppet/application/cert.rb +1 -1
  36. data/lib/puppet/application/device.rb +1 -1
  37. data/lib/puppet/application/filebucket.rb +1 -1
  38. data/lib/puppet/application/inspect.rb +1 -1
  39. data/lib/puppet/application/lookup.rb +45 -47
  40. data/lib/puppet/application/master.rb +2 -2
  41. data/lib/puppet/application/resource.rb +1 -1
  42. data/lib/puppet/configurer.rb +100 -22
  43. data/lib/puppet/data_providers/hiera_config.rb +28 -3
  44. data/lib/puppet/data_providers/hiera_interpolate.rb +30 -15
  45. data/lib/puppet/data_providers/hiera_support.rb +1 -1
  46. data/lib/puppet/data_providers/json_data_provider_factory.rb +2 -2
  47. data/lib/puppet/data_providers/lookup_adapter.rb +73 -26
  48. data/lib/puppet/data_providers/yaml_data_provider_factory.rb +2 -2
  49. data/lib/puppet/defaults.rb +69 -22
  50. data/lib/puppet/environments.rb +3 -1
  51. data/lib/puppet/face/config.rb +1 -1
  52. data/lib/puppet/face/epp.rb +1 -1
  53. data/lib/puppet/face/help/man.erb +1 -1
  54. data/lib/puppet/face/module/install.rb +6 -6
  55. data/lib/puppet/face/parser.rb +12 -9
  56. data/lib/puppet/face/status.rb +2 -1
  57. data/lib/puppet/feature/cfpropertylist.rb +3 -0
  58. data/lib/puppet/feature/telnet.rb +9 -0
  59. data/lib/puppet/file_serving/http_metadata.rb +46 -0
  60. data/lib/puppet/file_serving/metadata.rb +18 -2
  61. data/lib/puppet/file_serving/terminus_selector.rb +2 -0
  62. data/lib/puppet/file_system/file_impl.rb +2 -2
  63. data/lib/puppet/file_system/memory_impl.rb +1 -1
  64. data/lib/puppet/file_system/uniquefile.rb +1 -1
  65. data/lib/puppet/file_system.rb +2 -2
  66. data/lib/puppet/forge/repository.rb +1 -31
  67. data/lib/puppet/forge.rb +1 -1
  68. data/lib/puppet/functions/assert_type.rb +9 -9
  69. data/lib/puppet/functions/each.rb +5 -13
  70. data/lib/puppet/functions/filter.rb +5 -14
  71. data/lib/puppet/functions/lookup.rb +126 -150
  72. data/lib/puppet/functions/map.rb +6 -14
  73. data/lib/puppet/functions/match.rb +1 -0
  74. data/lib/puppet/functions/reduce.rb +5 -13
  75. data/lib/puppet/functions/reverse_each.rb +82 -0
  76. data/lib/puppet/functions/scanf.rb +15 -18
  77. data/lib/puppet/functions/slice.rb +22 -36
  78. data/lib/puppet/functions/split.rb +2 -2
  79. data/lib/puppet/functions/step.rb +88 -0
  80. data/lib/puppet/functions/type.rb +70 -0
  81. data/lib/puppet/functions.rb +45 -6
  82. data/lib/puppet/graph/rb_tree_map.rb +1 -1
  83. data/lib/puppet/indirector/catalog/compiler.rb +188 -5
  84. data/lib/puppet/indirector/facts/facter.rb +2 -13
  85. data/lib/puppet/indirector/file_content/http.rb +15 -0
  86. data/lib/puppet/indirector/file_metadata/http.rb +27 -0
  87. data/lib/puppet/indirector/generic_http.rb +16 -0
  88. data/lib/puppet/indirector/hiera.rb +3 -1
  89. data/lib/puppet/indirector/indirection.rb +6 -2
  90. data/lib/puppet/indirector/json.rb +2 -2
  91. data/lib/puppet/indirector/node/exec.rb +1 -1
  92. data/lib/puppet/indirector/node/ldap.rb +1 -1
  93. data/lib/puppet/indirector/rest.rb +2 -1
  94. data/lib/puppet/info_service/class_information_service.rb +13 -12
  95. data/lib/puppet/loaders.rb +1 -0
  96. data/lib/puppet/module.rb +6 -2
  97. data/lib/puppet/module_tool/skeleton/templates/generator/Gemfile +9 -2
  98. data/lib/puppet/module_tool/skeleton/templates/generator/spec/classes/init_spec.rb.erb +1 -1
  99. data/lib/puppet/module_tool/skeleton/templates/generator/tests/init.pp.erb +2 -2
  100. data/lib/puppet/module_tool/tar/mini.rb +3 -3
  101. data/lib/puppet/network/http/pool.rb +9 -0
  102. data/lib/puppet/node/environment.rb +11 -2
  103. data/lib/puppet/node.rb +11 -2
  104. data/lib/puppet/parser/ast/pops_bridge.rb +19 -22
  105. data/lib/puppet/parser/compiler.rb +4 -11
  106. data/lib/puppet/parser/environment_compiler.rb +0 -1
  107. data/lib/puppet/parser/functions/fqdn_rand.rb +1 -1
  108. data/lib/puppet/parser/functions/inline_template.rb +1 -1
  109. data/lib/puppet/parser/functions/lookup.rb +128 -149
  110. data/lib/puppet/parser/functions/map.rb +1 -1
  111. data/lib/puppet/parser/functions/match.rb +1 -0
  112. data/lib/puppet/parser/functions/scanf.rb +15 -26
  113. data/lib/puppet/parser/functions/slice.rb +17 -24
  114. data/lib/puppet/parser/functions/split.rb +1 -1
  115. data/lib/puppet/parser/functions.rb +28 -16
  116. data/lib/puppet/parser/resource.rb +19 -17
  117. data/lib/puppet/parser/scope.rb +176 -5
  118. data/lib/puppet/plugins/data_providers/data_provider.rb +56 -14
  119. data/lib/puppet/pops/adaptable.rb +4 -1
  120. data/lib/puppet/pops/adapters.rb +80 -12
  121. data/lib/puppet/pops/binder/binder.rb +21 -17
  122. data/lib/puppet/pops/binder/binder_issues.rb +8 -6
  123. data/lib/puppet/pops/binder/bindings_checker.rb +12 -8
  124. data/lib/puppet/pops/binder/bindings_composer.rb +16 -12
  125. data/lib/puppet/pops/binder/bindings_factory.rb +108 -104
  126. data/lib/puppet/pops/binder/bindings_model.rb +49 -47
  127. data/lib/puppet/pops/binder/config/diagnostic_producer.rb +10 -6
  128. data/lib/puppet/pops/binder/injector.rb +53 -48
  129. data/lib/puppet/pops/binder/key_factory.rb +10 -6
  130. data/lib/puppet/pops/binder/producers.rb +67 -62
  131. data/lib/puppet/pops/evaluator/access_operator.rb +98 -96
  132. data/lib/puppet/pops/evaluator/closure.rb +122 -106
  133. data/lib/puppet/pops/evaluator/collector_transformer.rb +34 -14
  134. data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +0 -1
  135. data/lib/puppet/pops/evaluator/compare_operator.rb +13 -9
  136. data/lib/puppet/pops/evaluator/epp_evaluator.rb +9 -8
  137. data/lib/puppet/pops/evaluator/evaluator_impl.rb +78 -76
  138. data/lib/puppet/pops/evaluator/json_strict_literal_evaluator.rb +85 -0
  139. data/lib/puppet/pops/evaluator/relationship_operator.rb +13 -11
  140. data/lib/puppet/pops/evaluator/runtime3_converter.rb +5 -0
  141. data/lib/puppet/pops/evaluator/runtime3_support.rb +47 -42
  142. data/lib/puppet/pops/functions/function.rb +6 -2
  143. data/lib/puppet/pops/issue_reporter.rb +6 -4
  144. data/lib/puppet/pops/issues.rb +50 -11
  145. data/lib/puppet/pops/loader/base_loader.rb +1 -1
  146. data/lib/puppet/pops/loader/loader.rb +1 -1
  147. data/lib/puppet/pops/loader/loader_paths.rb +15 -0
  148. data/lib/puppet/pops/loader/module_loaders.rb +17 -13
  149. data/lib/puppet/pops/loader/puppet_function_instantiator.rb +18 -13
  150. data/lib/puppet/pops/loader/ruby_function_instantiator.rb +16 -3
  151. data/lib/puppet/pops/loader/type_definition_instantiator.rb +55 -0
  152. data/lib/puppet/pops/loaders.rb +51 -9
  153. data/lib/puppet/pops/lookup/explainer.rb +73 -3
  154. data/lib/puppet/pops/lookup/invocation.rb +21 -19
  155. data/lib/puppet/pops/lookup.rb +17 -12
  156. data/lib/puppet/pops/merge_strategy.rb +16 -19
  157. data/lib/puppet/pops/model/factory.rb +179 -157
  158. data/lib/puppet/pops/model/model.rb +17 -8
  159. data/lib/puppet/pops/model/model_label_provider.rb +14 -7
  160. data/lib/puppet/pops/model/model_meta.rb +17 -0
  161. data/lib/puppet/pops/model/model_tree_dumper.rb +8 -0
  162. data/lib/puppet/pops/parser/egrammar.ra +38 -14
  163. data/lib/puppet/pops/parser/eparser.rb +1353 -1276
  164. data/lib/puppet/pops/parser/epp_support.rb +11 -7
  165. data/lib/puppet/pops/parser/evaluating_parser.rb +17 -13
  166. data/lib/puppet/pops/parser/heredoc_support.rb +15 -11
  167. data/lib/puppet/pops/parser/lexer2.rb +428 -403
  168. data/lib/puppet/pops/parser/lexer_support.rb +85 -7
  169. data/lib/puppet/pops/parser/locator.rb +21 -0
  170. data/lib/puppet/pops/parser/parser_support.rb +19 -16
  171. data/lib/puppet/pops/parser/slurp_support.rb +16 -8
  172. data/lib/puppet/pops/types/class_loader.rb +23 -19
  173. data/lib/puppet/pops/types/enumeration.rb +9 -26
  174. data/lib/puppet/pops/types/iterable.rb +308 -0
  175. data/lib/puppet/pops/types/recursion_guard.rb +82 -0
  176. data/lib/puppet/pops/types/type_acceptor.rb +25 -0
  177. data/lib/puppet/pops/types/type_asserter.rb +10 -9
  178. data/lib/puppet/pops/types/type_calculator.rb +140 -387
  179. data/lib/puppet/pops/types/type_factory.rb +91 -57
  180. data/lib/puppet/pops/types/type_formatter.rb +334 -0
  181. data/lib/puppet/pops/types/type_mismatch_describer.rb +226 -59
  182. data/lib/puppet/pops/types/type_parser.rb +159 -112
  183. data/lib/puppet/pops/types/types.rb +2057 -1253
  184. data/lib/puppet/pops/utils.rb +11 -10
  185. data/lib/puppet/pops/validation/checker4_0.rb +115 -63
  186. data/lib/puppet/pops/validation/validator_factory_4_0.rb +8 -4
  187. data/lib/puppet/pops/validation.rb +11 -9
  188. data/lib/puppet/pops.rb +0 -8
  189. data/lib/puppet/provider/aixobject.rb +1 -1
  190. data/lib/puppet/provider/augeas/augeas.rb +1 -1
  191. data/lib/puppet/provider/cron/crontab.rb +1 -1
  192. data/lib/puppet/provider/exec/windows.rb +1 -1
  193. data/lib/puppet/provider/group/windows_adsi.rb +2 -2
  194. data/lib/puppet/provider/macauthorization/macauthorization.rb +10 -9
  195. data/lib/puppet/provider/nameservice/directoryservice.rb +35 -50
  196. data/lib/puppet/provider/package/appdmg.rb +3 -2
  197. data/lib/puppet/provider/package/dnf.rb +1 -1
  198. data/lib/puppet/provider/package/pip.rb +16 -9
  199. data/lib/puppet/provider/package/pip3.rb +1 -1
  200. data/lib/puppet/provider/package/pkg.rb +1 -1
  201. data/lib/puppet/provider/package/pkgdmg.rb +3 -2
  202. data/lib/puppet/provider/package/pkgng.rb +13 -4
  203. data/lib/puppet/provider/package/rpm.rb +0 -1
  204. data/lib/puppet/provider/package/windows.rb +1 -1
  205. data/lib/puppet/provider/package/yum.rb +2 -2
  206. data/lib/puppet/provider/package/zypper.rb +19 -0
  207. data/lib/puppet/provider/service/debian.rb +7 -20
  208. data/lib/puppet/provider/service/init.rb +7 -0
  209. data/lib/puppet/provider/service/launchd.rb +6 -12
  210. data/lib/puppet/provider/service/systemd.rb +9 -2
  211. data/lib/puppet/provider/sshkey/parsed.rb +1 -1
  212. data/lib/puppet/provider/user/aix.rb +1 -1
  213. data/lib/puppet/provider/user/directoryservice.rb +33 -58
  214. data/lib/puppet/provider/user/windows_adsi.rb +2 -2
  215. data/lib/puppet/provider/yumrepo/inifile.rb +6 -3
  216. data/lib/puppet/provider/zfs/zfs.rb +1 -1
  217. data/lib/puppet/provider/zpool/zpool.rb +1 -1
  218. data/lib/puppet/reference/configuration.rb +1 -1
  219. data/lib/puppet/reference/providers.rb +1 -1
  220. data/lib/puppet/resource/capability_finder.rb +20 -13
  221. data/lib/puppet/resource/catalog.rb +60 -3
  222. data/lib/puppet/resource/status.rb +11 -2
  223. data/lib/puppet/resource/type.rb +33 -42
  224. data/lib/puppet/resource.rb +15 -12
  225. data/lib/puppet/settings/config_file.rb +1 -1
  226. data/lib/puppet/settings/environment_conf.rb +13 -5
  227. data/lib/puppet/settings.rb +1 -1
  228. data/lib/puppet/ssl/certificate_factory.rb +3 -3
  229. data/lib/puppet/ssl/certificate_request.rb +4 -4
  230. data/lib/puppet/ssl/certificate_signer.rb +1 -1
  231. data/lib/puppet/ssl/validator/default_validator.rb +1 -1
  232. data/lib/puppet/test/test_helper.rb +16 -4
  233. data/lib/puppet/transaction/additional_resource_generator.rb +23 -5
  234. data/lib/puppet/transaction/report.rb +31 -1
  235. data/lib/puppet/transaction/resource_harness.rb +0 -25
  236. data/lib/puppet/transaction.rb +15 -2
  237. data/lib/puppet/type/augeas.rb +1 -1
  238. data/lib/puppet/type/cron.rb +12 -12
  239. data/lib/puppet/type/file/checksum_value.rb +53 -0
  240. data/lib/puppet/type/file/content.rb +26 -111
  241. data/lib/puppet/type/file/data_sync.rb +84 -0
  242. data/lib/puppet/type/file/ensure.rb +17 -14
  243. data/lib/puppet/type/file/selcontext.rb +1 -1
  244. data/lib/puppet/type/file/source.rb +103 -18
  245. data/lib/puppet/type/file.rb +91 -39
  246. data/lib/puppet/type/filebucket.rb +1 -1
  247. data/lib/puppet/type/group.rb +6 -2
  248. data/lib/puppet/type/interface.rb +8 -3
  249. data/lib/puppet/type/macauthorization.rb +1 -1
  250. data/lib/puppet/type/package.rb +6 -0
  251. data/lib/puppet/type/schedule.rb +1 -1
  252. data/lib/puppet/type/stage.rb +1 -1
  253. data/lib/puppet/type/user.rb +19 -17
  254. data/lib/puppet/type/yumrepo.rb +20 -0
  255. data/lib/puppet/type.rb +11 -11
  256. data/lib/puppet/util/autoload.rb +16 -11
  257. data/lib/puppet/util/checksums.rb +74 -31
  258. data/lib/puppet/util/execution.rb +1 -1
  259. data/lib/puppet/util/http_proxy.rb +72 -0
  260. data/lib/puppet/util/log.rb +2 -0
  261. data/lib/puppet/util/logging.rb +43 -1
  262. data/lib/puppet/util/monkey_patches.rb +2 -2
  263. data/lib/puppet/util/multi_match.rb +51 -0
  264. data/lib/puppet/util/network_device/cisco/device.rb +10 -2
  265. data/lib/puppet/util/network_device/cisco/interface.rb +21 -8
  266. data/lib/puppet/util/network_device/transport/ssh.rb +7 -3
  267. data/lib/puppet/util/network_device/transport/telnet.rb +39 -36
  268. data/lib/puppet/util/plist.rb +130 -0
  269. data/lib/puppet/util/resource_template.rb +1 -1
  270. data/lib/puppet/util/run_mode.rb +2 -2
  271. data/lib/puppet/util/skip_tags.rb +9 -0
  272. data/lib/puppet/util/windows/access_control_entry.rb +1 -1
  273. data/lib/puppet/util/windows/access_control_list.rb +3 -3
  274. data/lib/puppet/util/windows/adsi.rb +65 -28
  275. data/lib/puppet/util/windows/api_types.rb +24 -18
  276. data/lib/puppet/util/windows/com.rb +3 -3
  277. data/lib/puppet/util/windows/error.rb +1 -1
  278. data/lib/puppet/util/windows/file.rb +8 -8
  279. data/lib/puppet/util/windows/principal.rb +190 -0
  280. data/lib/puppet/util/windows/process.rb +78 -11
  281. data/lib/puppet/util/windows/registry.rb +22 -16
  282. data/lib/puppet/util/windows/root_certs.rb +5 -5
  283. data/lib/puppet/util/windows/security.rb +33 -35
  284. data/lib/puppet/util/windows/security_descriptor.rb +1 -1
  285. data/lib/puppet/util/windows/sid.rb +84 -15
  286. data/lib/puppet/util/windows/taskscheduler.rb +15 -15
  287. data/lib/puppet/util/windows/user.rb +10 -10
  288. data/lib/puppet/util/windows.rb +4 -0
  289. data/lib/puppet/util.rb +109 -22
  290. data/lib/puppet/vendor/deep_merge/deep_merge.gemspec +1 -1
  291. data/lib/puppet/vendor/pathspec/LICENSE +2 -2
  292. data/lib/puppet/vendor/pathspec/README.md +1 -1
  293. data/lib/puppet/vendor/rgen/README.rdoc +1 -1
  294. data/lib/puppet/vendor/semantic/lib/semantic/dependency/module_release.rb +14 -0
  295. data/lib/puppet/version.rb +1 -1
  296. data/lib/puppet.rb +17 -0
  297. data/lib/semver.rb +17 -1
  298. data/man/man5/puppet.conf.5 +12 -12
  299. data/man/man8/extlookup2hiera.8 +1 -1
  300. data/man/man8/puppet-agent.8 +2 -2
  301. data/man/man8/puppet-apply.8 +2 -2
  302. data/man/man8/puppet-ca.8 +2 -2
  303. data/man/man8/puppet-catalog.8 +2 -2
  304. data/man/man8/puppet-cert.8 +2 -2
  305. data/man/man8/puppet-certificate.8 +2 -2
  306. data/man/man8/puppet-certificate_request.8 +2 -2
  307. data/man/man8/puppet-certificate_revocation_list.8 +2 -2
  308. data/man/man8/puppet-config.8 +3 -3
  309. data/man/man8/puppet-describe.8 +1 -1
  310. data/man/man8/puppet-device.8 +1 -1
  311. data/man/man8/puppet-doc.8 +1 -1
  312. data/man/man8/puppet-epp.8 +2 -2
  313. data/man/man8/puppet-facts.8 +2 -2
  314. data/man/man8/puppet-file.8 +2 -2
  315. data/man/man8/puppet-filebucket.8 +2 -2
  316. data/man/man8/puppet-help.8 +2 -2
  317. data/man/man8/puppet-inspect.8 +2 -2
  318. data/man/man8/puppet-key.8 +2 -2
  319. data/man/man8/puppet-man.8 +2 -2
  320. data/man/man8/puppet-master.8 +2 -2
  321. data/man/man8/puppet-module.8 +9 -9
  322. data/man/man8/puppet-node.8 +2 -2
  323. data/man/man8/puppet-parser.8 +2 -2
  324. data/man/man8/puppet-plugin.8 +2 -2
  325. data/man/man8/puppet-report.8 +2 -2
  326. data/man/man8/puppet-resource.8 +2 -2
  327. data/man/man8/puppet-resource_type.8 +2 -2
  328. data/man/man8/puppet-status.8 +3 -3
  329. data/man/man8/puppet.8 +1 -1
  330. data/spec/fixtures/module.tar.gz +0 -0
  331. data/spec/fixtures/unit/application/environments/production/data/common.yaml +4 -0
  332. data/spec/fixtures/unit/application/environments/production/manifests/site.pp +1 -0
  333. data/spec/fixtures/unit/application/environments/puppet_func_provider/environment.conf +1 -0
  334. data/spec/fixtures/unit/application/environments/puppet_func_provider/functions/data.pp +10 -0
  335. data/spec/fixtures/unit/application/environments/puppet_func_provider/manifests/site.pp +1 -0
  336. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/data/common.yaml +4 -0
  337. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/data/specific.yaml +4 -0
  338. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/hiera.yaml +7 -0
  339. data/spec/fixtures/unit/data_providers/environments/hiera_modules/data/common.yaml +4 -0
  340. data/spec/fixtures/unit/data_providers/environments/hiera_modules/data/specific.yaml +4 -0
  341. data/spec/fixtures/unit/data_providers/environments/hiera_modules/environment.conf +2 -0
  342. data/spec/fixtures/unit/data_providers/environments/hiera_modules/hiera.yaml +7 -0
  343. data/spec/fixtures/unit/data_providers/environments/hiera_modules/manifests/site.pp +1 -0
  344. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/data/common.yaml +6 -0
  345. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/hiera.yaml +5 -0
  346. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/manifests/init.pp +2 -0
  347. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/metadata.json +9 -0
  348. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/data/common.yaml +4 -0
  349. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/hiera.yaml +5 -0
  350. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/manifests/init.pp +3 -0
  351. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/metadata.json +9 -0
  352. data/spec/fixtures/unit/functions/lookup/environments/production/modules/bad_data/lib/puppet/functions/bad_data/data.rb +1 -0
  353. data/spec/fixtures/unit/functions/lookup/environments/production/modules/bad_data/manifests/init.pp +0 -1
  354. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/data/empty.json +0 -0
  355. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/hiera.yaml +5 -0
  356. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/manifests/init.pp +2 -0
  357. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/metadata.json +9 -0
  358. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/data/empty.yaml +1 -0
  359. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/hiera.yaml +5 -0
  360. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/manifests/init.pp +2 -0
  361. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/metadata.json +9 -0
  362. data/spec/fixtures/unit/functions/lookup/environments/production/modules/hieraprovider/data/first.json +2 -1
  363. data/spec/fixtures/unit/module/trailing-comma.json +1 -1
  364. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/functions/usee_puppet.pp +3 -0
  365. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/lib/puppet/functions/usee/usee_ruby.rb +6 -0
  366. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/manifests/init.pp +8 -0
  367. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/types/zero.pp +1 -0
  368. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee2/lib/puppet/functions/usee2/callee.rb +5 -0
  369. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_puppet.pp +5 -0
  370. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_puppet_init.pp +5 -0
  371. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_ruby.pp +5 -0
  372. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/caller2.rb +5 -0
  373. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_puppet.rb +5 -0
  374. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_puppet_init.rb +5 -0
  375. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_ruby.rb +5 -0
  376. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/manifests/init.pp +81 -0
  377. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/{user → modules/user}/metadata.json +2 -1
  378. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/types/withuseeone.pp +1 -0
  379. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/types/withuseezero.pp +1 -0
  380. data/spec/fixtures/unit/provider/package/yum/yum-check-update-broken-notices.txt +187 -0
  381. data/spec/fixtures/unit/provider/sshkey/parsed/sample_with_blank_lines +8 -0
  382. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_fetch_if_not_on_the_local_disk.yml +205 -0
  383. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_not_update_if_content_on_disk_is_up-to-date.yml +213 -0
  384. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_update_if_content_differs_on_disk.yml +213 -0
  385. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_mtime_is_older_on_disk.yml +205 -0
  386. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_no_header_specified.yml +197 -0
  387. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_not_on_the_local_disk.yml +205 -0
  388. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_not_update_if_mtime_is_newer_on_disk.yml +205 -0
  389. data/spec/integration/defaults_spec.rb +14 -2
  390. data/spec/integration/file_system/uniquefile_spec.rb +29 -0
  391. data/spec/integration/module_tool/tar/mini_spec.rb +28 -0
  392. data/spec/integration/node/environment_spec.rb +13 -0
  393. data/spec/integration/parser/collection_spec.rb +8 -0
  394. data/spec/integration/parser/dynamic_scoping_spec.rb +67 -0
  395. data/spec/integration/parser/parameter_defaults_spec.rb +336 -0
  396. data/spec/integration/parser/undef_param_spec.rb +8 -0
  397. data/spec/integration/provider/yumrepo_spec.rb +1 -1
  398. data/spec/integration/test/test_helper_spec.rb +28 -0
  399. data/spec/integration/transaction/report_spec.rb +16 -0
  400. data/spec/integration/transaction_spec.rb +11 -0
  401. data/spec/integration/type/file_spec.rb +194 -4
  402. data/spec/integration/type/package_spec.rb +5 -1
  403. data/spec/integration/type/tidy_spec.rb +21 -9
  404. data/spec/integration/util/execution_spec.rb +22 -0
  405. data/spec/integration/util/windows/principal_spec.rb +201 -0
  406. data/spec/integration/util/windows/process_spec.rb +31 -0
  407. data/spec/{unit → integration}/util/windows/registry_spec.rb +91 -1
  408. data/spec/integration/util/windows/security_spec.rb +8 -8
  409. data/spec/integration/util/windows/user_spec.rb +1 -1
  410. data/spec/integration/util_spec.rb +49 -27
  411. data/spec/lib/puppet_spec/compiler.rb +17 -0
  412. data/spec/lib/puppet_spec/files.rb +2 -2
  413. data/spec/lib/puppet_spec/pops.rb +13 -0
  414. data/spec/shared_behaviours/iterative_functions.rb +1 -1
  415. data/spec/shared_contexts/types_setup.rb +96 -0
  416. data/spec/unit/agent_spec.rb +1 -0
  417. data/spec/unit/application/agent_spec.rb +10 -0
  418. data/spec/unit/application/apply_spec.rb +9 -0
  419. data/spec/unit/application/lookup_spec.rb +138 -28
  420. data/spec/unit/configurer/downloader_spec.rb +5 -5
  421. data/spec/unit/configurer_spec.rb +271 -39
  422. data/spec/unit/data_providers/hiera_data_provider_spec.rb +182 -5
  423. data/spec/unit/data_providers/hiera_interpolation_spec.rb +57 -0
  424. data/spec/unit/defaults_spec.rb +15 -0
  425. data/spec/unit/environments_spec.rb +24 -4
  426. data/spec/unit/face/epp_face_spec.rb +2 -2
  427. data/spec/unit/face/parser_spec.rb +43 -2
  428. data/spec/unit/file_serving/http_metadata_spec.rb +85 -0
  429. data/spec/unit/file_serving/metadata_spec.rb +50 -0
  430. data/spec/unit/file_serving/terminus_selector_spec.rb +12 -2
  431. data/spec/unit/file_system_spec.rb +26 -0
  432. data/spec/unit/functions/assert_type_spec.rb +36 -2
  433. data/spec/unit/functions/defined_spec.rb +2 -2
  434. data/spec/unit/functions/epp_spec.rb +17 -9
  435. data/spec/unit/functions/inline_epp_spec.rb +4 -4
  436. data/spec/unit/functions/lookup_spec.rb +88 -16
  437. data/spec/unit/functions/regsubst_spec.rb +1 -1
  438. data/spec/unit/functions/reverse_each_spec.rb +108 -0
  439. data/spec/unit/functions/step_spec.rb +113 -0
  440. data/spec/unit/functions/type_spec.rb +35 -0
  441. data/spec/unit/functions4_spec.rb +62 -6
  442. data/spec/unit/hiera/scope_spec.rb +5 -2
  443. data/spec/unit/indirector/catalog/compiler_spec.rb +705 -4
  444. data/spec/unit/indirector/file_bucket_file/file_spec.rb +1 -1
  445. data/spec/unit/indirector/indirection_spec.rb +1 -1
  446. data/spec/unit/indirector/json_spec.rb +1 -1
  447. data/spec/unit/info_service_spec.rb +94 -32
  448. data/spec/unit/module_spec.rb +14 -0
  449. data/spec/unit/module_tool/applications/builder_spec.rb +4 -4
  450. data/spec/unit/network/authstore_spec.rb +1 -1
  451. data/spec/unit/network/http/connection_spec.rb +1 -0
  452. data/spec/unit/network/http/pool_spec.rb +30 -0
  453. data/spec/unit/node_spec.rb +8 -0
  454. data/spec/unit/parser/compiler_spec.rb +16 -18
  455. data/spec/unit/parser/scope_spec.rb +28 -11
  456. data/spec/unit/pops/evaluator/access_ops_spec.rb +7 -7
  457. data/spec/unit/pops/evaluator/comparison_ops_spec.rb +3 -0
  458. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +8 -2
  459. data/spec/unit/pops/evaluator/evaluator_rspec_helper.rb +4 -4
  460. data/spec/unit/pops/evaluator/json_strict_literal_evaluator_spec.rb +63 -0
  461. data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +6 -0
  462. data/spec/unit/pops/loaders/dependency_loader_spec.rb +53 -0
  463. data/spec/unit/pops/loaders/loaders_spec.rb +127 -2
  464. data/spec/unit/pops/parser/lexer2_spec.rb +118 -3
  465. data/spec/unit/pops/parser/parse_calls_spec.rb +8 -0
  466. data/spec/unit/pops/parser/parser_rspec_helper.rb +5 -0
  467. data/spec/unit/pops/parser/parser_spec.rb +10 -0
  468. data/spec/unit/pops/parser/source_pos_adapter_spec.rb +26 -0
  469. data/spec/unit/pops/types/iterable_spec.rb +262 -0
  470. data/spec/unit/pops/types/recursion_guard_spec.rb +91 -0
  471. data/spec/unit/pops/types/type_acceptor_spec.rb +105 -0
  472. data/spec/unit/pops/types/type_asserter_spec.rb +43 -0
  473. data/spec/unit/pops/types/type_calculator_spec.rb +275 -390
  474. data/spec/unit/pops/types/type_formatter_spec.rb +280 -0
  475. data/spec/unit/pops/types/type_mismatch_describer_spec.rb +152 -0
  476. data/spec/unit/pops/types/type_parser_spec.rb +58 -13
  477. data/spec/unit/pops/types/types_spec.rb +241 -0
  478. data/spec/unit/pops/validator/validator_spec.rb +159 -15
  479. data/spec/unit/provider/cron/parsed_spec.rb +1 -0
  480. data/spec/unit/provider/group/windows_adsi_spec.rb +8 -8
  481. data/spec/unit/provider/macauthorization_spec.rb +5 -2
  482. data/spec/unit/provider/nameservice/directoryservice_spec.rb +14 -19
  483. data/spec/unit/provider/package/appdmg_spec.rb +3 -3
  484. data/spec/unit/provider/package/dnf_spec.rb +16 -0
  485. data/spec/unit/provider/package/pip3_spec.rb +60 -42
  486. data/spec/unit/provider/package/pip_spec.rb +88 -47
  487. data/spec/unit/provider/package/pkgdmg_spec.rb +18 -9
  488. data/spec/unit/provider/package/pkgng_spec.rb +4 -2
  489. data/spec/unit/provider/package/rpm_spec.rb +2 -25
  490. data/spec/unit/provider/package/yum_spec.rb +12 -1
  491. data/spec/unit/provider/package/zypper_spec.rb +14 -0
  492. data/spec/unit/provider/service/debian_spec.rb +6 -24
  493. data/spec/unit/provider/service/init_spec.rb +11 -1
  494. data/spec/unit/provider/service/launchd_spec.rb +18 -25
  495. data/spec/unit/provider/service/systemd_spec.rb +25 -12
  496. data/spec/unit/provider/service/upstart_spec.rb +57 -0
  497. data/spec/unit/provider/sshkey/parsed_spec.rb +20 -19
  498. data/spec/unit/provider/user/directoryservice_spec.rb +40 -59
  499. data/spec/unit/provider/user/windows_adsi_spec.rb +5 -5
  500. data/spec/unit/provider/yumrepo/inifile_spec.rb +16 -0
  501. data/spec/unit/resource/capability_finder_spec.rb +28 -15
  502. data/spec/unit/resource/catalog_spec.rb +33 -1
  503. data/spec/unit/resource/type_spec.rb +149 -7
  504. data/spec/unit/resource_spec.rb +99 -50
  505. data/spec/unit/settings/environment_conf_spec.rb +18 -1
  506. data/spec/unit/ssl/certificate_revocation_list_spec.rb +3 -3
  507. data/spec/unit/transaction/report_spec.rb +27 -0
  508. data/spec/unit/transaction/resource_harness_spec.rb +0 -47
  509. data/spec/unit/transaction_spec.rb +5 -0
  510. data/spec/unit/type/file/checksum_spec.rb +6 -0
  511. data/spec/unit/type/file/checksum_value_spec.rb +286 -0
  512. data/spec/unit/type/file/content_spec.rb +12 -193
  513. data/spec/unit/type/file/source_spec.rb +211 -119
  514. data/spec/unit/type/file_spec.rb +133 -34
  515. data/spec/unit/type/interface_spec.rb +32 -0
  516. data/spec/unit/type/macauthorization_spec.rb +4 -1
  517. data/spec/unit/type/yumrepo_spec.rb +2 -2
  518. data/spec/unit/util/filetype_spec.rb +1 -1
  519. data/spec/unit/util/http_proxy_spec.rb +2 -2
  520. data/spec/unit/util/log/destinations_spec.rb +0 -2
  521. data/spec/unit/util/logging_spec.rb +69 -0
  522. data/spec/unit/util/multi_match_spec.rb +39 -0
  523. data/spec/unit/util/network_device/cisco/device_spec.rb +253 -216
  524. data/spec/unit/util/network_device/transport/telnet_spec.rb +60 -58
  525. data/spec/unit/util/plist_spec.rb +110 -0
  526. data/spec/unit/util/resource_template_spec.rb +2 -2
  527. data/spec/unit/util/run_mode_spec.rb +27 -3
  528. data/spec/unit/util/windows/adsi_spec.rb +46 -38
  529. data/spec/unit/util/windows/api_types_spec.rb +42 -0
  530. data/spec/unit/util/windows/security_descriptor_spec.rb +3 -3
  531. data/spec/unit/util/windows/sid_spec.rb +48 -11
  532. data/spec/unit/util_spec.rb +123 -13
  533. data/tasks/cfpropertylist.rake +15 -0
  534. metadata +3342 -3195
  535. data/lib/puppet/vendor/load_plist.rb +0 -1
  536. data/lib/puppet/vendor/plist/CHANGELOG +0 -82
  537. data/lib/puppet/vendor/plist/MIT-LICENSE +0 -21
  538. data/lib/puppet/vendor/plist/PUPPET_README.md +0 -6
  539. data/lib/puppet/vendor/plist/README +0 -36
  540. data/lib/puppet/vendor/plist/Rakefile +0 -144
  541. data/lib/puppet/vendor/plist/docs/USAGE +0 -104
  542. data/lib/puppet/vendor/plist/docs/jamis-template.rb +0 -591
  543. data/lib/puppet/vendor/plist/lib/plist/generator.rb +0 -224
  544. data/lib/puppet/vendor/plist/lib/plist/parser.rb +0 -225
  545. data/lib/puppet/vendor/plist/lib/plist.rb +0 -22
  546. data/lib/puppet/vendor/plist/test/assets/AlbumData.xml +0 -203
  547. data/lib/puppet/vendor/plist/test/assets/Cookies.plist +0 -104
  548. data/lib/puppet/vendor/plist/test/assets/commented.plist +0 -9
  549. data/lib/puppet/vendor/plist/test/assets/example_data.bin +0 -0
  550. data/lib/puppet/vendor/plist/test/assets/example_data.jpg +0 -0
  551. data/lib/puppet/vendor/plist/test/assets/example_data.plist +0 -259
  552. data/lib/puppet/vendor/plist/test/assets/test_data_elements.plist +0 -24
  553. data/lib/puppet/vendor/plist/test/assets/test_empty_key.plist +0 -13
  554. data/lib/puppet/vendor/plist/test/test_data_elements.rb +0 -115
  555. data/lib/puppet/vendor/plist/test/test_generator.rb +0 -59
  556. data/lib/puppet/vendor/plist/test/test_generator_basic_types.rb +0 -58
  557. data/lib/puppet/vendor/plist/test/test_generator_collections.rb +0 -82
  558. data/lib/puppet/vendor/plist/test/test_parser.rb +0 -90
  559. /data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/{usee → modules/usee}/lib/puppet/functions/usee/callee.rb +0 -0
  560. /data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/{user → modules/user}/lib/puppet/functions/user/caller.rb +0 -0
@@ -1,5 +1,6 @@
1
1
  # Provides utility methods
2
- module Puppet::Pops::Utils
2
+ module Puppet::Pops
3
+ module Utils
3
4
  # Can the given o be converted to numeric? (or is numeric already)
4
5
  # Accepts a leading '::'
5
6
  # Returns a boolean if the value is numeric
@@ -10,11 +11,11 @@ module Puppet::Pops::Utils
10
11
  when Numeric
11
12
  true
12
13
  else
13
- !!Puppet::Pops::Patterns::NUMERIC.match(relativize_name(o.to_s))
14
+ !!Patterns::NUMERIC.match(relativize_name(o.to_s))
14
15
  end
15
16
  end
16
17
 
17
- # Convert a match from Puppet::Pops::Patterns::NUMERIC to floating point value if
18
+ # Convert a match from Patterns::NUMERIC to floating point value if
18
19
  # possible
19
20
  def self.match_to_fp(match)
20
21
  if match[5].to_s.length > 0
@@ -45,7 +46,7 @@ module Puppet::Pops::Utils
45
46
  begin
46
47
  case o
47
48
  when String
48
- match = Puppet::Pops::Patterns::NUMERIC.match(relativize_name(o))
49
+ match = Patterns::NUMERIC.match(relativize_name(o))
49
50
  if !match
50
51
  nil
51
52
  elsif match[5].to_s.length > 0
@@ -84,7 +85,7 @@ module Puppet::Pops::Utils
84
85
  begin
85
86
  case o
86
87
  when String
87
- match = Puppet::Pops::Patterns::NUMERIC.match(relativize_name(o))
88
+ match = Patterns::NUMERIC.match(relativize_name(o))
88
89
  if !match
89
90
  nil
90
91
  elsif match[5].to_s.length > 0
@@ -129,14 +130,14 @@ module Puppet::Pops::Utils
129
130
  return find_adapter(o.eContainer, adapter)
130
131
  end
131
132
 
132
- # Finds the closest positioned Puppet::Pops::Model::Positioned object, or object decorated with
133
+ # Finds the closest positioned Model::Positioned object, or object decorated with
133
134
  # a SourcePosAdapter, and returns
134
135
  # a SourcePosAdapter for the first found, or nil if not found.
135
136
  #
136
137
  def self.find_closest_positioned(o)
137
- return nil if o.nil? || o.is_a?(Puppet::Pops::Model::Program) || (o.is_a?(Array) && o.empty?)
138
- return find_adapter(o, Puppet::Pops::Adapters::SourcePosAdapter) unless o.is_a?(Puppet::Pops::Model::Positioned)
139
- o.offset.nil? ? find_closest_positioned(o.eContainer) : Puppet::Pops::Adapters::SourcePosAdapter.adapt(o)
138
+ return nil if o.nil? || o.is_a?(Model::Program) || (o.is_a?(Array) && o.empty?)
139
+ return find_adapter(o, Adapters::SourcePosAdapter) unless o.is_a?(Model::Positioned)
140
+ o.offset.nil? ? find_closest_positioned(o.eContainer) : Adapters::SourcePosAdapter.adapt(o)
140
141
  end
141
-
142
+ end
142
143
  end
@@ -1,3 +1,5 @@
1
+ module Puppet::Pops
2
+ module Validation
1
3
  # A Validator validates a model.
2
4
  #
3
5
  # Validation is performed on each model element in isolation. Each method should validate the model element's state
@@ -9,10 +11,7 @@
9
11
  # Model objects via their metamodel. (I.e an extra call to multiplicity check in polymorph check).
10
12
  # This is however mostly valuable when validating model to model transformations, and is therefore T.B.D
11
13
  #
12
- class Puppet::Pops::Validation::Checker4_0
13
- Issues = Puppet::Pops::Issues
14
- Model = Puppet::Pops::Model
15
-
14
+ class Checker4_0
16
15
  attr_reader :acceptor
17
16
  attr_reader :migration_checker
18
17
 
@@ -20,19 +19,19 @@ class Puppet::Pops::Validation::Checker4_0
20
19
  # `:will_accept?` and `:accept`.
21
20
  #
22
21
  def initialize(diagnostics_producer)
23
- @@check_visitor ||= Puppet::Pops::Visitor.new(nil, "check", 0, 0)
24
- @@rvalue_visitor ||= Puppet::Pops::Visitor.new(nil, "rvalue", 0, 0)
25
- @@hostname_visitor ||= Puppet::Pops::Visitor.new(nil, "hostname", 1, 2)
26
- @@assignment_visitor ||= Puppet::Pops::Visitor.new(nil, "assign", 0, 1)
27
- @@query_visitor ||= Puppet::Pops::Visitor.new(nil, "query", 0, 0)
28
- @@top_visitor ||= Puppet::Pops::Visitor.new(nil, "top", 1, 1)
29
- @@relation_visitor ||= Puppet::Pops::Visitor.new(nil, "relation", 0, 0)
30
- @@idem_visitor ||= Puppet::Pops::Visitor.new(self, "idem", 0, 0)
22
+ @@check_visitor ||= Visitor.new(nil, "check", 0, 0)
23
+ @@rvalue_visitor ||= Visitor.new(nil, "rvalue", 0, 0)
24
+ @@hostname_visitor ||= Visitor.new(nil, "hostname", 1, 2)
25
+ @@assignment_visitor ||= Visitor.new(nil, "assign", 0, 1)
26
+ @@query_visitor ||= Visitor.new(nil, "query", 0, 0)
27
+ @@top_visitor ||= Visitor.new(nil, "top", 1, 1)
28
+ @@relation_visitor ||= Visitor.new(nil, "relation", 0, 0)
29
+ @@idem_visitor ||= Visitor.new(self, "idem", 0, 0)
31
30
 
32
31
  @acceptor = diagnostics_producer
33
32
 
34
33
  # Use null migration checker unless given in context
35
- @migration_checker = (Puppet.lookup(:migration_checker) { Puppet::Pops::Migration::MigrationChecker.new() })
34
+ @migration_checker = (Puppet.lookup(:migration_checker) { Migration::MigrationChecker.new() })
36
35
  end
37
36
 
38
37
  # Validates the entire model by visiting each model element and calling `check`.
@@ -94,7 +93,7 @@ class Puppet::Pops::Validation::Checker4_0
94
93
 
95
94
  # Returns the last expression in a block, or the expression, if that expression is idem
96
95
  def ends_with_idem(o)
97
- if o.is_a?(Puppet::Pops::Model::BlockExpression)
96
+ if o.is_a?(Model::BlockExpression)
98
97
  last = o.statements[-1]
99
98
  idem(last) ? last : nil
100
99
  else
@@ -106,7 +105,7 @@ class Puppet::Pops::Validation::Checker4_0
106
105
 
107
106
  def assign_VariableExpression(o, via_index)
108
107
  varname_string = varname_to_s(o.expr)
109
- if varname_string =~ Puppet::Pops::Patterns::NUMERIC_VAR_NAME
108
+ if varname_string =~ Patterns::NUMERIC_VAR_NAME
110
109
  acceptor.accept(Issues::ILLEGAL_NUMERIC_ASSIGNMENT, o, :varname => varname_string)
111
110
  end
112
111
  # Can not assign to something in another namespace (i.e. a '::' in the name is not legal)
@@ -213,21 +212,34 @@ class Puppet::Pops::Validation::Checker4_0
213
212
  rvalue(o.right_expr)
214
213
  end
215
214
 
215
+ def resource_without_title?(o)
216
+ if o.instance_of?(Model::BlockExpression)
217
+ statements = o.statements
218
+ statements.length == 2 && statements[0].instance_of?(Model::QualifiedName) && statements[1].instance_of?(Model::LiteralHash)
219
+ else
220
+ false
221
+ end
222
+ end
223
+
216
224
  def check_BlockExpression(o)
217
- o.statements[0..-2].each do |statement|
218
- if idem(statement)
219
- acceptor.accept(Issues::IDEM_EXPRESSION_NOT_LAST, statement)
220
- break # only flag the first
225
+ if resource_without_title?(o)
226
+ acceptor.accept(Issues::RESOURCE_WITHOUT_TITLE, o, :name => o.statements[0].value)
227
+ else
228
+ o.statements[0..-2].each do |statement|
229
+ if idem(statement)
230
+ acceptor.accept(Issues::IDEM_EXPRESSION_NOT_LAST, statement)
231
+ break # only flag the first
232
+ end
221
233
  end
222
234
  end
223
235
  end
224
236
 
225
237
  def check_CallNamedFunctionExpression(o)
226
238
  case o.functor_expr
227
- when Puppet::Pops::Model::QualifiedName
239
+ when Model::QualifiedName
228
240
  # ok
229
241
  nil
230
- when Puppet::Pops::Model::RenderStringExpression
242
+ when Model::RenderStringExpression
231
243
  # helpful to point out this easy to make Epp error
232
244
  acceptor.accept(Issues::ILLEGAL_EPP_PARAMETERS, o)
233
245
  else
@@ -238,16 +250,16 @@ class Puppet::Pops::Validation::Checker4_0
238
250
  def check_CapabilityMapping(o)
239
251
  ok =
240
252
  case o.component
241
- when Puppet::Pops::Model::QualifiedName
253
+ when Model::QualifiedName
242
254
  name = o.component.value
243
- acceptor.accept(Issues::ILLEGAL_CLASSREF, o.component, {:name=>name}) unless name =~ Puppet::Pops::Patterns::CLASSREF_EXT
255
+ acceptor.accept(Issues::ILLEGAL_CLASSREF, o.component, {:name=>name}) unless name =~ Patterns::CLASSREF_EXT
244
256
  true
245
- when Puppet::Pops::Model::AccessExpression
257
+ when Model::AccessExpression
246
258
  keys = o.component.keys
247
259
  expr = o.component.left_expr
248
- if expr.is_a?(Puppet::Pops::Model::QualifiedReference) && keys.size == 1
260
+ if expr.is_a?(Model::QualifiedReference) && keys.size == 1
249
261
  key = keys[0]
250
- key.is_a?(Puppet::Pops::Model::LiteralString) || key.is_a?(Puppet::Pops::Model::QualifiedName) || key.is_a?(Puppet::Pops::Model::QualifiedReference)
262
+ key.is_a?(Model::LiteralString) || key.is_a?(Model::QualifiedName) || key.is_a?(Model::QualifiedReference)
251
263
  else
252
264
  false
253
265
  end
@@ -256,14 +268,15 @@ class Puppet::Pops::Validation::Checker4_0
256
268
  end
257
269
  acceptor.accept(Issues::ILLEGAL_EXPRESSION, o.component, :feature=>'capability mapping', :container => o) unless ok
258
270
 
259
- if o.capability !~ Puppet::Pops::Patterns::CLASSREF_EXT
271
+ if o.capability !~ Patterns::CLASSREF_EXT
260
272
  acceptor.accept(Issues::ILLEGAL_CLASSREF, o, {:name=>o.capability})
261
273
  end
262
274
  end
263
275
 
264
276
  def check_EppExpression(o)
265
- if o.eContainer.is_a?(Puppet::Pops::Model::LambdaExpression)
277
+ if o.eContainer.is_a?(Model::LambdaExpression)
266
278
  internal_check_no_capture(o.eContainer, o)
279
+ internal_check_parameter_name_uniqueness(o.eContainer)
267
280
  end
268
281
  end
269
282
 
@@ -287,13 +300,6 @@ class Puppet::Pops::Validation::Checker4_0
287
300
  unless o.type_expr.is_a? Model::QualifiedReference
288
301
  acceptor.accept(Issues::ILLEGAL_EXPRESSION, o.type_expr, :feature=> 'type name', :container => o)
289
302
  end
290
-
291
- # If a collect expression tries to collect exported resources and storeconfigs is not on
292
- # then it will not work... This was checked in the parser previously. This is a runtime checking
293
- # thing as opposed to a language thing.
294
- if acceptor.will_accept?(Issues::RT_NO_STORECONFIGS) && o.query.is_a?(Model::ExportedQuery)
295
- acceptor.accept(Issues::RT_NO_STORECONFIGS, o)
296
- end
297
303
  end
298
304
 
299
305
  # Only used for function names, grammar should not be able to produce something faulty, but
@@ -336,32 +342,35 @@ class Puppet::Pops::Validation::Checker4_0
336
342
  # for 'class', 'define', and function
337
343
  def check_NamedDefinition(o)
338
344
  top(o.eContainer, o)
339
- if o.name !~ Puppet::Pops::Patterns::CLASSREF
345
+ if o.name !~ Patterns::CLASSREF
340
346
  acceptor.accept(Issues::ILLEGAL_DEFINITION_NAME, o, {:name=>o.name})
341
347
  end
348
+ internal_check_reserved_type_name(o, o.name)
349
+ internal_check_future_reserved_word(o, o.name)
350
+ end
342
351
 
343
- if RESERVED_TYPE_NAMES[o.name()]
344
- acceptor.accept(Issues::RESERVED_TYPE_NAME, o, {:name => o.name})
345
- end
352
+ def check_TypeAlias(o)
353
+ top(o.eContainer, o)
354
+ internal_check_reserved_type_name(o, o.name)
355
+ internal_check_type_ref(o, o.type_expr)
356
+ end
346
357
 
347
- # This is perhaps not ideal but it's very difficult to pass a ReservedWord through
348
- # the mechanism that creates qualified names (namestack, namepop etc.)
349
- if FUTURE_RESERVED_WORDS[o.name]
350
- acceptor.accept(Issues::FUTURE_RESERVED_WORD, o, {:word => o.name})
351
- end
358
+ def check_TypeDefinition(o)
359
+ top(o.eContainer, o)
360
+ internal_check_reserved_type_name(o, o.name)
361
+ # TODO: Check TypeDefinition body. For now, just error out
362
+ acceptor.accept(Issues::UNSUPPORTED_EXPRESSION, o)
352
363
  end
353
364
 
354
365
  def check_FunctionDefinition(o)
355
- # TODO PUP-2080: more strict rule for top - can only be contained in Program (for now)
356
- # sticking functions in classes would create functions in the class name space
357
- # but not be special in any other way
358
- #
359
366
  check_NamedDefinition(o)
367
+ internal_check_parameter_name_uniqueness(o)
360
368
  end
361
369
 
362
370
  def check_HostClassDefinition(o)
363
371
  check_NamedDefinition(o)
364
372
  internal_check_no_capture(o)
373
+ internal_check_parameter_name_uniqueness(o)
365
374
  internal_check_reserved_params(o)
366
375
  internal_check_no_idem_last(o)
367
376
  end
@@ -369,13 +378,23 @@ class Puppet::Pops::Validation::Checker4_0
369
378
  def check_ResourceTypeDefinition(o)
370
379
  check_NamedDefinition(o)
371
380
  internal_check_no_capture(o)
381
+ internal_check_parameter_name_uniqueness(o)
372
382
  internal_check_reserved_params(o)
373
383
  internal_check_no_idem_last(o)
374
384
  end
375
385
 
386
+ def internal_check_type_ref(o, r)
387
+ n = r.is_a?(Model::AccessExpression) ? r.left_expr : r
388
+ if n.is_a? Model::QualifiedReference
389
+ internal_check_future_reserved_word(r, n.value)
390
+ else
391
+ acceptor.accept(Issues::ILLEGAL_EXPRESSION, r, :feature => 'a type reference', :container => o)
392
+ end
393
+ end
394
+
376
395
  def internal_check_no_idem_last(o)
377
396
  if violator = ends_with_idem(o.body)
378
- acceptor.accept(Issues::IDEM_NOT_ALLOWED_LAST, violator, {:container => o})
397
+ acceptor.accept(Issues::IDEM_NOT_ALLOWED_LAST, violator, {:container => o}) unless resource_without_title?(violator)
379
398
  end
380
399
  end
381
400
 
@@ -396,6 +415,19 @@ class Puppet::Pops::Validation::Checker4_0
396
415
  end
397
416
  end
398
417
 
418
+ def internal_check_reserved_type_name(o, name)
419
+ if RESERVED_TYPE_NAMES[name]
420
+ acceptor.accept(Issues::RESERVED_TYPE_NAME, o, {:name => name})
421
+ end
422
+ end
423
+
424
+ def internal_check_future_reserved_word(o, name)
425
+ if FUTURE_RESERVED_WORDS[name]
426
+ acceptor.accept(Issues::FUTURE_RESERVED_WORD, o, {:word => name})
427
+ end
428
+ end
429
+
430
+
399
431
  RESERVED_PARAMETERS = {
400
432
  'name' => true,
401
433
  'title' => true,
@@ -409,6 +441,13 @@ class Puppet::Pops::Validation::Checker4_0
409
441
  end
410
442
  end
411
443
 
444
+ def internal_check_parameter_name_uniqueness(o)
445
+ unique = Set.new
446
+ o.parameters.each do |p|
447
+ acceptor.accept(Issues::DUPLICATE_PARAMETER, p, {:param_name => p.name}) unless unique.add?(p.name)
448
+ end
449
+ end
450
+
412
451
  def check_IfExpression(o)
413
452
  rvalue(o.test)
414
453
  end
@@ -433,7 +472,7 @@ class Puppet::Pops::Validation::Checker4_0
433
472
  hostname(o.host_matches, o)
434
473
  top(o.eContainer, o)
435
474
  if violator = ends_with_idem(o.body)
436
- acceptor.accept(Issues::IDEM_NOT_ALLOWED_LAST, violator, {:container => o})
475
+ acceptor.accept(Issues::IDEM_NOT_ALLOWED_LAST, violator, {:container => o}) unless resource_without_title?(violator)
437
476
  end
438
477
  unless o.parent.nil?
439
478
  acceptor.accept(Issues::ILLEGAL_NODE_INHERITANCE, o.parent)
@@ -452,7 +491,7 @@ class Puppet::Pops::Validation::Checker4_0
452
491
  # DOH: QualifiedReferences are created with LOWER CASE NAMES at parse time
453
492
  def check_QualifiedReference(o)
454
493
  # Is this a valid qualified name?
455
- if o.value !~ Puppet::Pops::Patterns::CLASSREF
494
+ if o.value !~ Patterns::CLASSREF
456
495
  acceptor.accept(Issues::ILLEGAL_CLASSREF, o, {:name=>o.value})
457
496
  end
458
497
  end
@@ -474,17 +513,21 @@ class Puppet::Pops::Validation::Checker4_0
474
513
  acceptor.accept(Issues::ILLEGAL_NUMERIC_PARAMETER, o, :name => o.name)
475
514
  end
476
515
 
477
- unless o.name =~ Puppet::Pops::Patterns::PARAM_NAME
516
+ unless o.name =~ Patterns::PARAM_NAME
478
517
  acceptor.accept(Issues::ILLEGAL_PARAM_NAME, o, :name => o.name)
479
518
  end
480
519
  return unless o.value
481
520
 
482
- if o.value.is_a?(Puppet::Pops::Model::AssignmentExpression)
483
- [o.value]
521
+ internal_check_illegal_assignment(o.value)
522
+ end
523
+
524
+ def internal_check_illegal_assignment(o)
525
+ if o.is_a?(Model::AssignmentExpression)
526
+ acceptor.accept(Issues::ILLEGAL_ASSIGNMENT_CONTEXT, o)
484
527
  else
485
- o.value.eAllContents.select {|model| model.is_a? Puppet::Pops::Model::AssignmentExpression }
486
- end.each do |assignment|
487
- acceptor.accept(Issues::ILLEGAL_ASSIGNMENT_CONTEXT, assignment)
528
+ # recursively check all contents unless it's a lambda expression. A lambda may contain
529
+ # local assignments
530
+ o.eContents.each {|model| internal_check_illegal_assignment(model) } unless o.is_a?(Model::LambdaExpression)
488
531
  end
489
532
  end
490
533
 
@@ -512,7 +555,7 @@ class Puppet::Pops::Validation::Checker4_0
512
555
  def check_ResourceBody(o)
513
556
  seenUnfolding = false
514
557
  o.operations.each do |ao|
515
- if ao.is_a?(Puppet::Pops::Model::AttributesOperation)
558
+ if ao.is_a?(Model::AttributesOperation)
516
559
  if seenUnfolding
517
560
  acceptor.accept(Issues::MULTIPLE_ATTRIBUTES_UNFOLD, ao)
518
561
  else
@@ -570,11 +613,11 @@ class Puppet::Pops::Validation::Checker4_0
570
613
  # name must be either a decimal string value, or a valid NAME
571
614
  name = o.expr.value
572
615
  if name[0,1] =~ /[0-9]/
573
- unless name =~ Puppet::Pops::Patterns::NUMERIC_VAR_NAME
616
+ unless name =~ Patterns::NUMERIC_VAR_NAME
574
617
  acceptor.accept(Issues::ILLEGAL_NUMERIC_VAR_NAME, o, :name => name)
575
618
  end
576
619
  else
577
- unless name =~ Puppet::Pops::Patterns::VAR_NAME
620
+ unless name =~ Patterns::VAR_NAME
578
621
  acceptor.accept(Issues::ILLEGAL_VAR_NAME, o, :name => name)
579
622
  end
580
623
  end
@@ -593,7 +636,7 @@ class Puppet::Pops::Validation::Checker4_0
593
636
  # but this allows pathological names like "a..b......c", "----"
594
637
  # TODO: Investigate if more illegal hostnames should be flagged.
595
638
  #
596
- if o =~ Puppet::Pops::Patterns::ILLEGAL_HOSTNAME_CHARS
639
+ if o =~ Patterns::ILLEGAL_HOSTNAME_CHARS
597
640
  acceptor.accept(Issues::ILLEGAL_HOSTNAME_CHARS, semantic, :hostname => o)
598
641
  end
599
642
  end
@@ -700,8 +743,15 @@ class Puppet::Pops::Validation::Checker4_0
700
743
  end
701
744
 
702
745
  def top_BlockExpression(o, definition)
703
- # ok, if this is a block representing the body of a class, or is top level
704
- top o.eContainer, definition
746
+ if !o.eContainer.is_a?(Model::Program) &&
747
+ (definition.is_a?(Model::FunctionDefinition) || definition.is_a?(Model::TypeAlias) || definition.is_a?(Model::TypeDefinition))
748
+
749
+ # not ok. These can never be nested in a block
750
+ acceptor.accept(Issues::NOT_ABSOLUTE_TOP_LEVEL, definition)
751
+ else
752
+ # ok, if this is a block representing the body of a class, or is top level
753
+ top o.eContainer, definition
754
+ end
705
755
  end
706
756
 
707
757
  def top_HostClassDefinition(o, definition)
@@ -840,3 +890,5 @@ class Puppet::Pops::Validation::Checker4_0
840
890
  end
841
891
  end
842
892
  end
893
+ end
894
+ end
@@ -1,16 +1,18 @@
1
+ module Puppet::Pops
2
+ module Validation
1
3
  # Configures validation suitable for 4.0
2
4
  #
3
- class Puppet::Pops::Validation::ValidatorFactory_4_0 < Puppet::Pops::Validation::Factory
4
- Issues = Puppet::Pops::Issues
5
+ class ValidatorFactory_4_0 < Factory
6
+ Issues = Issues
5
7
 
6
8
  # Produces the checker to use
7
9
  def checker diagnostic_producer
8
- Puppet::Pops::Validation::Checker4_0.new(diagnostic_producer)
10
+ Checker4_0.new(diagnostic_producer)
9
11
  end
10
12
 
11
13
  # Produces the label provider to use
12
14
  def label_provider
13
- Puppet::Pops::Model::ModelLabelProvider.new()
15
+ Model::ModelLabelProvider.new()
14
16
  end
15
17
 
16
18
  # Produces the severity producer to use
@@ -30,3 +32,5 @@ class Puppet::Pops::Validation::ValidatorFactory_4_0 < Puppet::Pops::Validation:
30
32
  p
31
33
  end
32
34
  end
35
+ end
36
+ end
@@ -1,3 +1,4 @@
1
+ module Puppet::Pops
1
2
  # A module with base functionality for validation of a model.
2
3
  #
3
4
  # * **Factory** - an abstract factory implementation that makes it easier to create a new validation factory.
@@ -6,7 +7,7 @@
6
7
  # * **Acceptor** - the receiver/sink/collector of computed diagnostics
7
8
  # * **DiagnosticFormatter** - produces human readable output for a Diagnostic
8
9
  #
9
- module Puppet::Pops::Validation
10
+ module Validation
10
11
 
11
12
  # This class is an abstract base implementation of a _model validation factory_ that creates a validator instance
12
13
  # and associates it with a fully configured DiagnosticProducer.
@@ -45,7 +46,7 @@ module Puppet::Pops::Validation
45
46
  # @api public
46
47
  #
47
48
  def diagnostic_producer(acceptor)
48
- Puppet::Pops::Validation::DiagnosticProducer.new(acceptor, severity_producer(), label_provider())
49
+ DiagnosticProducer.new(acceptor, severity_producer(), label_provider())
49
50
  end
50
51
 
51
52
  # Produces the SeverityProducer to use
@@ -56,7 +57,7 @@ module Puppet::Pops::Validation
56
57
  # @api public
57
58
  #
58
59
  def severity_producer
59
- Puppet::Pops::Validation::SeverityProducer.new
60
+ SeverityProducer.new
60
61
  end
61
62
 
62
63
  # Produces the checker to use.
@@ -119,12 +120,12 @@ module Puppet::Pops::Validation
119
120
 
120
121
  # Override a default severity with the given severity level.
121
122
  #
122
- # @param issue [Puppet::Pops::Issues::Issue] the issue for which to set severity
123
+ # @param issue [Issues::Issue] the issue for which to set severity
123
124
  # @param level [Symbol] the severity level (:error, :warning, or :ignore).
124
125
  # @api public
125
126
  #
126
127
  def []=(issue, level)
127
- raise Puppet::DevError.new("Attempt to set validation severity for something that is not an Issue. (Got #{issue.class})") unless issue.is_a? Puppet::Pops::Issues::Issue
128
+ raise Puppet::DevError.new("Attempt to set validation severity for something that is not an Issue. (Got #{issue.class})") unless issue.is_a? Issues::Issue
128
129
  raise Puppet::DevError.new("Illegal severity level: #{option}") unless @@severity_hash[level]
129
130
  raise Puppet::DevError.new("Attempt to demote the hard issue '#{issue.issue_code}' to #{level}") unless issue.demotable? || level == :error
130
131
  @severities[issue] = level
@@ -144,7 +145,7 @@ module Puppet::Pops::Validation
144
145
  # @api private
145
146
  #
146
147
  def assert_issue issue
147
- raise Puppet::DevError.new("Attempt to get validation severity for something that is not an Issue. (Got #{issue.class})") unless issue.is_a? Puppet::Pops::Issues::Issue
148
+ raise Puppet::DevError.new("Attempt to get validation severity for something that is not an Issue. (Got #{issue.class})") unless issue.is_a? Issues::Issue
148
149
  end
149
150
 
150
151
  # Checks if the given severity level is valid.
@@ -203,7 +204,7 @@ module Puppet::Pops::Validation
203
204
  source_pos = semantic
204
205
  file = semantic.file
205
206
  else
206
- source_pos = Puppet::Pops::Utils.find_closest_positioned(semantic)
207
+ source_pos = Utils.find_closest_positioned(semantic)
207
208
  file = source_pos ? source_pos.locator.file : nil
208
209
  end
209
210
 
@@ -404,7 +405,7 @@ module Puppet::Pops::Validation
404
405
  end
405
406
 
406
407
  # Add a diagnostic, or all diagnostics from another acceptor to the set of diagnostics
407
- # @param diagnostic [Puppet::Pops::Validation::Diagnostic, Puppet::Pops::Validation::Acceptor] diagnostic(s) that should be accepted
408
+ # @param diagnostic [Diagnostic, Acceptor] diagnostic(s) that should be accepted
408
409
  def accept(diagnostic)
409
410
  if diagnostic.is_a?(Acceptor)
410
411
  diagnostic.diagnostics.each {|d| self.send(d.severity, d)}
@@ -415,7 +416,7 @@ module Puppet::Pops::Validation
415
416
 
416
417
  # Prunes the contain diagnostics by removing those for which the given block returns true.
417
418
  # The internal statistics is updated as a consequence of removing.
418
- # @return [Array<Puppet::Pops::Validation::Diagnostic, nil] the removed set of diagnostics or nil if nothing was removed
419
+ # @return [Array<Diagnostic, nil] the removed set of diagnostics or nil if nothing was removed
419
420
  #
420
421
  def prune(&block)
421
422
  removed = []
@@ -458,3 +459,4 @@ module Puppet::Pops::Validation
458
459
  end
459
460
  end
460
461
  end
462
+ end
data/lib/puppet/pops.rb CHANGED
@@ -34,14 +34,6 @@ module Puppet
34
34
 
35
35
  # (the Types module initializes itself)
36
36
  require 'puppet/pops/types/types'
37
- require 'puppet/pops/types/type_asserter'
38
- require 'puppet/pops/types/type_assertion_error'
39
- require 'puppet/pops/types/type_calculator'
40
- require 'puppet/pops/types/type_factory'
41
- require 'puppet/pops/types/type_parser'
42
- require 'puppet/pops/types/class_loader'
43
- require 'puppet/pops/types/enumeration'
44
- require 'puppet/pops/types/type_mismatch_describer'
45
37
 
46
38
  require 'puppet/pops/merge_strategy'
47
39
 
@@ -196,7 +196,7 @@ class Puppet::Provider::AixObject < Puppet::Provider
196
196
  end
197
197
 
198
198
  attrs.each { |val|
199
- key = key_list.shift.downcase.to_sym
199
+ key = key_list.shift.to_sym
200
200
  properties = self.load_attribute(key, val, mapping, properties)
201
201
  }
202
202
  properties.empty? ? nil : properties
@@ -5,7 +5,7 @@
5
5
  # you may not use this file except in compliance with the License.
6
6
  # You may obtain a copy of the License at
7
7
  #
8
- # http://www.apache.org/licenses/LICENSE-2.0
8
+ # https://www.apache.org/licenses/LICENSE-2.0
9
9
  #
10
10
  # Unless required by applicable law or agreed to in writing, software
11
11
  # distributed under the License is distributed on an "AS IS" BASIS,
@@ -9,7 +9,7 @@ Puppet::Type.type(:cron).provide(:crontab, :parent => Puppet::Provider::ParsedFi
9
9
 
10
10
  text_line :blank, :match => %r{^\s*$}
11
11
 
12
- text_line :environment, :match => %r{^\s*\w+=}
12
+ text_line :environment, :match => %r{^\s*\w+\s*=}
13
13
 
14
14
  def self.filetype
15
15
  tabname = case Facter.value(:osfamily)
@@ -45,7 +45,7 @@ Puppet::Type.type(:exec).provide :windows, :parent => Puppet::Provider::Exec do
45
45
  end
46
46
 
47
47
  if resource[:path]
48
- Puppet::Util.withenv :PATH => resource[:path].join(File::PATH_SEPARATOR) do
48
+ Puppet::Util.withenv( {'PATH' => resource[:path].join(File::PATH_SEPARATOR)}, :windows) do
49
49
  return if which(exe)
50
50
  end
51
51
  end
@@ -28,7 +28,7 @@ Puppet::Type.type(:group).provide :windows_adsi do
28
28
  specified_users = Puppet::Util::Windows::ADSI::Group.name_sid_hash(should)
29
29
 
30
30
  if @resource[:auth_membership]
31
- current_users == specified_users
31
+ current_users.keys.to_a == specified_users.keys.to_a
32
32
  else
33
33
  (specified_users.keys.to_a & current_users.keys.to_a) == specified_users.keys.to_a
34
34
  end
@@ -48,7 +48,7 @@ Puppet::Type.type(:group).provide :windows_adsi do
48
48
  else
49
49
  account = sid.account
50
50
  end
51
- resource.debug("#{sid.domain}\\#{account} (#{sid.to_s})")
51
+ resource.debug("#{sid.domain}\\#{account} (#{sid.sid})")
52
52
  "#{sid.domain}\\#{account}"
53
53
  end
54
54
  return users.join(',')