openvox 8.19.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 (1104) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +19 -0
  3. data/CODEOWNERS +11 -0
  4. data/CODE_OF_CONDUCT.md +70 -0
  5. data/Gemfile +87 -0
  6. data/Guardfile.example +76 -0
  7. data/LICENSE +202 -0
  8. data/README.md +63 -0
  9. data/Rakefile +170 -0
  10. data/bin/puppet +10 -0
  11. data/conf/environment.conf +18 -0
  12. data/conf/fileserver.conf +32 -0
  13. data/conf/hiera.yaml +11 -0
  14. data/conf/puppet.conf +6 -0
  15. data/examples/enc/regexp_nodes/classes/databases +2 -0
  16. data/examples/enc/regexp_nodes/classes/webservers +2 -0
  17. data/examples/enc/regexp_nodes/environment/development +2 -0
  18. data/examples/enc/regexp_nodes/parameters/service/prod +1 -0
  19. data/examples/enc/regexp_nodes/parameters/service/qa +3 -0
  20. data/examples/enc/regexp_nodes/parameters/service/sandbox +1 -0
  21. data/examples/enc/regexp_nodes/regexp_nodes.rb +270 -0
  22. data/examples/hiera/README.md +102 -0
  23. data/examples/hiera/data/common.yaml +12 -0
  24. data/examples/hiera/data/dc1.yaml +6 -0
  25. data/examples/hiera/hiera.yaml +15 -0
  26. data/examples/hiera/modules/ntp/data/common.yaml +4 -0
  27. data/examples/hiera/modules/ntp/hiera.yaml +9 -0
  28. data/examples/hiera/modules/ntp/manifests/config.pp +18 -0
  29. data/examples/hiera/modules/ntp/templates/ntp.conf.epp +3 -0
  30. data/examples/hiera/modules/users/manifests/common.pp +9 -0
  31. data/examples/hiera/modules/users/manifests/dc1.pp +9 -0
  32. data/examples/hiera/site.pp +3 -0
  33. data/examples/nagios/check_puppet.rb +123 -0
  34. data/ext/README.md +13 -0
  35. data/ext/build_defaults.yaml +18 -0
  36. data/ext/debian/puppet.default +4 -0
  37. data/ext/debian/puppet.init +113 -0
  38. data/ext/hiera/hiera.yaml +15 -0
  39. data/ext/osx/puppet.plist +32 -0
  40. data/ext/project_data.yaml +20 -0
  41. data/ext/redhat/client.init +169 -0
  42. data/ext/redhat/client.sysconfig +2 -0
  43. data/ext/solaris/smf/puppet +44 -0
  44. data/ext/solaris/smf/puppet.xml +46 -0
  45. data/ext/suse/client.init +141 -0
  46. data/ext/systemd/puppet.service +26 -0
  47. data/ext/windows/puppet_interactive.bat +6 -0
  48. data/ext/windows/puppet_shell.bat +9 -0
  49. data/ext/windows/run_puppet_interactive.bat +9 -0
  50. data/ext/windows/service/daemon.bat +6 -0
  51. data/ext/windows/service/daemon.rb +219 -0
  52. data/install.rb +428 -0
  53. data/lib/hiera/puppet_function.rb +86 -0
  54. data/lib/hiera/scope.rb +92 -0
  55. data/lib/hiera_puppet.rb +78 -0
  56. data/lib/puppet/agent/disabler.rb +55 -0
  57. data/lib/puppet/agent/locker.rb +46 -0
  58. data/lib/puppet/agent.rb +178 -0
  59. data/lib/puppet/application/agent.rb +527 -0
  60. data/lib/puppet/application/apply.rb +435 -0
  61. data/lib/puppet/application/catalog.rb +6 -0
  62. data/lib/puppet/application/config.rb +7 -0
  63. data/lib/puppet/application/describe.rb +255 -0
  64. data/lib/puppet/application/device.rb +440 -0
  65. data/lib/puppet/application/doc.rb +232 -0
  66. data/lib/puppet/application/epp.rb +7 -0
  67. data/lib/puppet/application/face_base.rb +277 -0
  68. data/lib/puppet/application/facts.rb +11 -0
  69. data/lib/puppet/application/filebucket.rb +324 -0
  70. data/lib/puppet/application/generate.rb +7 -0
  71. data/lib/puppet/application/help.rb +7 -0
  72. data/lib/puppet/application/indirection_base.rb +6 -0
  73. data/lib/puppet/application/lookup.rb +433 -0
  74. data/lib/puppet/application/module.rb +6 -0
  75. data/lib/puppet/application/node.rb +6 -0
  76. data/lib/puppet/application/parser.rb +7 -0
  77. data/lib/puppet/application/plugin.rb +6 -0
  78. data/lib/puppet/application/report.rb +6 -0
  79. data/lib/puppet/application/resource.rb +264 -0
  80. data/lib/puppet/application/script.rb +266 -0
  81. data/lib/puppet/application/ssl.rb +331 -0
  82. data/lib/puppet/application.rb +596 -0
  83. data/lib/puppet/application_support.rb +69 -0
  84. data/lib/puppet/coercion.rb +42 -0
  85. data/lib/puppet/compilable_resource_type.rb +17 -0
  86. data/lib/puppet/concurrent/lock.rb +15 -0
  87. data/lib/puppet/concurrent/synchronized.rb +15 -0
  88. data/lib/puppet/concurrent/thread_local_singleton.rb +18 -0
  89. data/lib/puppet/concurrent.rb +4 -0
  90. data/lib/puppet/configurer/downloader.rb +91 -0
  91. data/lib/puppet/configurer/fact_handler.rb +51 -0
  92. data/lib/puppet/configurer/plugin_handler.rb +61 -0
  93. data/lib/puppet/configurer.rb +759 -0
  94. data/lib/puppet/confine/any.rb +28 -0
  95. data/lib/puppet/confine/boolean.rb +47 -0
  96. data/lib/puppet/confine/exists.rb +21 -0
  97. data/lib/puppet/confine/false.rb +27 -0
  98. data/lib/puppet/confine/feature.rb +18 -0
  99. data/lib/puppet/confine/true.rb +28 -0
  100. data/lib/puppet/confine/variable.rb +61 -0
  101. data/lib/puppet/confine.rb +86 -0
  102. data/lib/puppet/confine_collection.rb +54 -0
  103. data/lib/puppet/confiner.rb +48 -0
  104. data/lib/puppet/context/trusted_information.rb +122 -0
  105. data/lib/puppet/context.rb +190 -0
  106. data/lib/puppet/daemon.rb +198 -0
  107. data/lib/puppet/data_binding.rb +16 -0
  108. data/lib/puppet/datatypes/error.rb +23 -0
  109. data/lib/puppet/datatypes/impl/error.rb +42 -0
  110. data/lib/puppet/datatypes.rb +218 -0
  111. data/lib/puppet/defaults.rb +2316 -0
  112. data/lib/puppet/environments.rb +599 -0
  113. data/lib/puppet/error.rb +142 -0
  114. data/lib/puppet/etc.rb +185 -0
  115. data/lib/puppet/external/dot.rb +315 -0
  116. data/lib/puppet/face/catalog/select.rb +51 -0
  117. data/lib/puppet/face/catalog.rb +167 -0
  118. data/lib/puppet/face/config.rb +266 -0
  119. data/lib/puppet/face/epp.rb +565 -0
  120. data/lib/puppet/face/facts.rb +176 -0
  121. data/lib/puppet/face/generate.rb +69 -0
  122. data/lib/puppet/face/help/action.erb +89 -0
  123. data/lib/puppet/face/help/face.erb +114 -0
  124. data/lib/puppet/face/help/global.erb +16 -0
  125. data/lib/puppet/face/help/man.erb +152 -0
  126. data/lib/puppet/face/help.rb +260 -0
  127. data/lib/puppet/face/module/changes.rb +44 -0
  128. data/lib/puppet/face/module/install.rb +149 -0
  129. data/lib/puppet/face/module/list.rb +271 -0
  130. data/lib/puppet/face/module/uninstall.rb +91 -0
  131. data/lib/puppet/face/module/upgrade.rb +89 -0
  132. data/lib/puppet/face/module.rb +21 -0
  133. data/lib/puppet/face/node/clean.rb +109 -0
  134. data/lib/puppet/face/node.rb +45 -0
  135. data/lib/puppet/face/parser.rb +226 -0
  136. data/lib/puppet/face/plugin.rb +62 -0
  137. data/lib/puppet/face/report.rb +54 -0
  138. data/lib/puppet/face/resource.rb +55 -0
  139. data/lib/puppet/face.rb +14 -0
  140. data/lib/puppet/facter_impl.rb +96 -0
  141. data/lib/puppet/feature/base.rb +76 -0
  142. data/lib/puppet/feature/bolt.rb +5 -0
  143. data/lib/puppet/feature/cfpropertylist.rb +5 -0
  144. data/lib/puppet/feature/eventlog.rb +7 -0
  145. data/lib/puppet/feature/hiera_eyaml.rb +5 -0
  146. data/lib/puppet/feature/hocon.rb +5 -0
  147. data/lib/puppet/feature/libuser.rb +10 -0
  148. data/lib/puppet/feature/msgpack.rb +5 -0
  149. data/lib/puppet/feature/pe_license.rb +6 -0
  150. data/lib/puppet/feature/pson.rb +6 -0
  151. data/lib/puppet/feature/selinux.rb +5 -0
  152. data/lib/puppet/feature/ssh.rb +5 -0
  153. data/lib/puppet/feature/telnet.rb +5 -0
  154. data/lib/puppet/feature/zlib.rb +7 -0
  155. data/lib/puppet/ffi/posix/constants.rb +16 -0
  156. data/lib/puppet/ffi/posix/functions.rb +25 -0
  157. data/lib/puppet/ffi/posix.rb +12 -0
  158. data/lib/puppet/ffi/windows/api_types.rb +313 -0
  159. data/lib/puppet/ffi/windows/constants.rb +406 -0
  160. data/lib/puppet/ffi/windows/functions.rb +629 -0
  161. data/lib/puppet/ffi/windows/structs.rb +339 -0
  162. data/lib/puppet/ffi/windows.rb +14 -0
  163. data/lib/puppet/file_bucket/dipper.rb +183 -0
  164. data/lib/puppet/file_bucket/file.rb +131 -0
  165. data/lib/puppet/file_bucket.rb +6 -0
  166. data/lib/puppet/file_serving/base.rb +94 -0
  167. data/lib/puppet/file_serving/configuration/parser.rb +116 -0
  168. data/lib/puppet/file_serving/configuration.rb +116 -0
  169. data/lib/puppet/file_serving/content.rb +45 -0
  170. data/lib/puppet/file_serving/fileset.rb +190 -0
  171. data/lib/puppet/file_serving/http_metadata.rb +61 -0
  172. data/lib/puppet/file_serving/metadata.rb +174 -0
  173. data/lib/puppet/file_serving/mount/file.rb +126 -0
  174. data/lib/puppet/file_serving/mount/locales.rb +35 -0
  175. data/lib/puppet/file_serving/mount/modules.rb +29 -0
  176. data/lib/puppet/file_serving/mount/pluginfacts.rb +35 -0
  177. data/lib/puppet/file_serving/mount/plugins.rb +35 -0
  178. data/lib/puppet/file_serving/mount/scripts.rb +27 -0
  179. data/lib/puppet/file_serving/mount/tasks.rb +26 -0
  180. data/lib/puppet/file_serving/mount.rb +41 -0
  181. data/lib/puppet/file_serving/terminus_helper.rb +33 -0
  182. data/lib/puppet/file_serving/terminus_selector.rb +33 -0
  183. data/lib/puppet/file_serving.rb +5 -0
  184. data/lib/puppet/file_system/file_impl.rb +189 -0
  185. data/lib/puppet/file_system/jruby.rb +25 -0
  186. data/lib/puppet/file_system/memory_file.rb +82 -0
  187. data/lib/puppet/file_system/memory_impl.rb +103 -0
  188. data/lib/puppet/file_system/path_pattern.rb +95 -0
  189. data/lib/puppet/file_system/posix.rb +52 -0
  190. data/lib/puppet/file_system/uniquefile.rb +190 -0
  191. data/lib/puppet/file_system/windows.rb +224 -0
  192. data/lib/puppet/file_system.rb +421 -0
  193. data/lib/puppet/forge/cache.rb +61 -0
  194. data/lib/puppet/forge/errors.rb +113 -0
  195. data/lib/puppet/forge/repository.rb +98 -0
  196. data/lib/puppet/forge.rb +257 -0
  197. data/lib/puppet/functions/abs.rb +64 -0
  198. data/lib/puppet/functions/alert.rb +16 -0
  199. data/lib/puppet/functions/all.rb +106 -0
  200. data/lib/puppet/functions/annotate.rb +110 -0
  201. data/lib/puppet/functions/any.rb +111 -0
  202. data/lib/puppet/functions/assert_type.rb +96 -0
  203. data/lib/puppet/functions/binary_file.rb +35 -0
  204. data/lib/puppet/functions/break.rb +49 -0
  205. data/lib/puppet/functions/call.rb +81 -0
  206. data/lib/puppet/functions/camelcase.rb +63 -0
  207. data/lib/puppet/functions/capitalize.rb +62 -0
  208. data/lib/puppet/functions/ceiling.rb +38 -0
  209. data/lib/puppet/functions/chomp.rb +58 -0
  210. data/lib/puppet/functions/chop.rb +68 -0
  211. data/lib/puppet/functions/compare.rb +127 -0
  212. data/lib/puppet/functions/contain.rb +58 -0
  213. data/lib/puppet/functions/convert_to.rb +36 -0
  214. data/lib/puppet/functions/crit.rb +16 -0
  215. data/lib/puppet/functions/debug.rb +16 -0
  216. data/lib/puppet/functions/defined.rb +163 -0
  217. data/lib/puppet/functions/dig.rb +70 -0
  218. data/lib/puppet/functions/downcase.rb +91 -0
  219. data/lib/puppet/functions/each.rb +169 -0
  220. data/lib/puppet/functions/emerg.rb +16 -0
  221. data/lib/puppet/functions/empty.rb +87 -0
  222. data/lib/puppet/functions/epp.rb +50 -0
  223. data/lib/puppet/functions/err.rb +16 -0
  224. data/lib/puppet/functions/eyaml_lookup_key.rb +103 -0
  225. data/lib/puppet/functions/filter.rb +138 -0
  226. data/lib/puppet/functions/find_file.rb +50 -0
  227. data/lib/puppet/functions/find_template.rb +65 -0
  228. data/lib/puppet/functions/flatten.rb +66 -0
  229. data/lib/puppet/functions/floor.rb +38 -0
  230. data/lib/puppet/functions/get.rb +152 -0
  231. data/lib/puppet/functions/getvar.rb +89 -0
  232. data/lib/puppet/functions/group_by.rb +62 -0
  233. data/lib/puppet/functions/hiera.rb +91 -0
  234. data/lib/puppet/functions/hiera_array.rb +83 -0
  235. data/lib/puppet/functions/hiera_hash.rb +94 -0
  236. data/lib/puppet/functions/hiera_include.rb +107 -0
  237. data/lib/puppet/functions/hocon_data.rb +41 -0
  238. data/lib/puppet/functions/import.rb +9 -0
  239. data/lib/puppet/functions/include.rb +56 -0
  240. data/lib/puppet/functions/index.rb +168 -0
  241. data/lib/puppet/functions/info.rb +16 -0
  242. data/lib/puppet/functions/inline_epp.rb +61 -0
  243. data/lib/puppet/functions/join.rb +58 -0
  244. data/lib/puppet/functions/json_data.rb +33 -0
  245. data/lib/puppet/functions/keys.rb +27 -0
  246. data/lib/puppet/functions/length.rb +45 -0
  247. data/lib/puppet/functions/lest.rb +57 -0
  248. data/lib/puppet/functions/lookup.rb +224 -0
  249. data/lib/puppet/functions/lstrip.rb +59 -0
  250. data/lib/puppet/functions/map.rb +137 -0
  251. data/lib/puppet/functions/match.rb +133 -0
  252. data/lib/puppet/functions/max.rb +250 -0
  253. data/lib/puppet/functions/min.rb +249 -0
  254. data/lib/puppet/functions/module_directory.rb +43 -0
  255. data/lib/puppet/functions/new.rb +1013 -0
  256. data/lib/puppet/functions/next.rb +35 -0
  257. data/lib/puppet/functions/notice.rb +16 -0
  258. data/lib/puppet/functions/partition.rb +62 -0
  259. data/lib/puppet/functions/reduce.rb +159 -0
  260. data/lib/puppet/functions/regsubst.rb +100 -0
  261. data/lib/puppet/functions/require.rb +81 -0
  262. data/lib/puppet/functions/return.rb +17 -0
  263. data/lib/puppet/functions/reverse_each.rb +96 -0
  264. data/lib/puppet/functions/round.rb +26 -0
  265. data/lib/puppet/functions/rstrip.rb +59 -0
  266. data/lib/puppet/functions/scanf.rb +46 -0
  267. data/lib/puppet/functions/size.rb +15 -0
  268. data/lib/puppet/functions/slice.rb +127 -0
  269. data/lib/puppet/functions/sort.rb +76 -0
  270. data/lib/puppet/functions/split.rb +78 -0
  271. data/lib/puppet/functions/step.rb +100 -0
  272. data/lib/puppet/functions/strftime.rb +214 -0
  273. data/lib/puppet/functions/strip.rb +59 -0
  274. data/lib/puppet/functions/then.rb +80 -0
  275. data/lib/puppet/functions/tree_each.rb +198 -0
  276. data/lib/puppet/functions/type.rb +74 -0
  277. data/lib/puppet/functions/unique.rb +135 -0
  278. data/lib/puppet/functions/unwrap.rb +61 -0
  279. data/lib/puppet/functions/upcase.rb +91 -0
  280. data/lib/puppet/functions/values.rb +27 -0
  281. data/lib/puppet/functions/versioncmp.rb +41 -0
  282. data/lib/puppet/functions/warning.rb +16 -0
  283. data/lib/puppet/functions/with.rb +34 -0
  284. data/lib/puppet/functions/yaml_data.rb +45 -0
  285. data/lib/puppet/functions.rb +858 -0
  286. data/lib/puppet/generate/models/type/property.rb +73 -0
  287. data/lib/puppet/generate/models/type/type.rb +68 -0
  288. data/lib/puppet/generate/templates/type/pcore.erb +42 -0
  289. data/lib/puppet/generate/type.rb +255 -0
  290. data/lib/puppet/gettext/config.rb +282 -0
  291. data/lib/puppet/gettext/module_translations.rb +43 -0
  292. data/lib/puppet/gettext/stubs.rb +13 -0
  293. data/lib/puppet/graph/key.rb +28 -0
  294. data/lib/puppet/graph/prioritizer.rb +31 -0
  295. data/lib/puppet/graph/rb_tree_map.rb +407 -0
  296. data/lib/puppet/graph/relationship_graph.rb +286 -0
  297. data/lib/puppet/graph/sequential_prioritizer.rb +33 -0
  298. data/lib/puppet/graph/simple_graph.rb +552 -0
  299. data/lib/puppet/graph.rb +11 -0
  300. data/lib/puppet/http/client.rb +529 -0
  301. data/lib/puppet/http/dns.rb +159 -0
  302. data/lib/puppet/http/errors.rb +50 -0
  303. data/lib/puppet/http/external_client.rb +89 -0
  304. data/lib/puppet/http/factory.rb +53 -0
  305. data/lib/puppet/http/pool.rb +174 -0
  306. data/lib/puppet/http/pool_entry.rb +19 -0
  307. data/lib/puppet/http/proxy.rb +139 -0
  308. data/lib/puppet/http/redirector.rb +87 -0
  309. data/lib/puppet/http/resolver/server_list.rb +88 -0
  310. data/lib/puppet/http/resolver/settings.rb +24 -0
  311. data/lib/puppet/http/resolver/srv.rb +42 -0
  312. data/lib/puppet/http/resolver.rb +50 -0
  313. data/lib/puppet/http/response.rb +104 -0
  314. data/lib/puppet/http/response_converter.rb +25 -0
  315. data/lib/puppet/http/response_net_http.rb +43 -0
  316. data/lib/puppet/http/retry_after_handler.rb +78 -0
  317. data/lib/puppet/http/service/ca.rb +133 -0
  318. data/lib/puppet/http/service/compiler.rb +356 -0
  319. data/lib/puppet/http/service/file_server.rb +200 -0
  320. data/lib/puppet/http/service/puppetserver.rb +54 -0
  321. data/lib/puppet/http/service/report.rb +62 -0
  322. data/lib/puppet/http/service.rb +177 -0
  323. data/lib/puppet/http/session.rb +124 -0
  324. data/lib/puppet/http/site.rb +44 -0
  325. data/lib/puppet/http.rb +48 -0
  326. data/lib/puppet/indirector/catalog/compiler.rb +432 -0
  327. data/lib/puppet/indirector/catalog/json.rb +42 -0
  328. data/lib/puppet/indirector/catalog/msgpack.rb +8 -0
  329. data/lib/puppet/indirector/catalog/rest.rb +51 -0
  330. data/lib/puppet/indirector/catalog/store_configs.rb +8 -0
  331. data/lib/puppet/indirector/catalog/yaml.rb +8 -0
  332. data/lib/puppet/indirector/code.rb +8 -0
  333. data/lib/puppet/indirector/data_binding/hiera.rb +8 -0
  334. data/lib/puppet/indirector/data_binding/none.rb +10 -0
  335. data/lib/puppet/indirector/direct_file_server.rb +20 -0
  336. data/lib/puppet/indirector/envelope.rb +13 -0
  337. data/lib/puppet/indirector/errors.rb +7 -0
  338. data/lib/puppet/indirector/exec.rb +40 -0
  339. data/lib/puppet/indirector/face.rb +142 -0
  340. data/lib/puppet/indirector/fact_search.rb +62 -0
  341. data/lib/puppet/indirector/facts/facter.rb +120 -0
  342. data/lib/puppet/indirector/facts/json.rb +29 -0
  343. data/lib/puppet/indirector/facts/memory.rb +11 -0
  344. data/lib/puppet/indirector/facts/network_device.rb +29 -0
  345. data/lib/puppet/indirector/facts/rest.rb +46 -0
  346. data/lib/puppet/indirector/facts/store_configs.rb +12 -0
  347. data/lib/puppet/indirector/facts/yaml.rb +31 -0
  348. data/lib/puppet/indirector/file_bucket_file/file.rb +268 -0
  349. data/lib/puppet/indirector/file_bucket_file/rest.rb +53 -0
  350. data/lib/puppet/indirector/file_bucket_file/selector.rb +54 -0
  351. data/lib/puppet/indirector/file_content/file.rb +9 -0
  352. data/lib/puppet/indirector/file_content/file_server.rb +9 -0
  353. data/lib/puppet/indirector/file_content/rest.rb +37 -0
  354. data/lib/puppet/indirector/file_content/selector.rb +32 -0
  355. data/lib/puppet/indirector/file_content.rb +7 -0
  356. data/lib/puppet/indirector/file_metadata/file.rb +9 -0
  357. data/lib/puppet/indirector/file_metadata/file_server.rb +9 -0
  358. data/lib/puppet/indirector/file_metadata/http.rb +49 -0
  359. data/lib/puppet/indirector/file_metadata/rest.rb +58 -0
  360. data/lib/puppet/indirector/file_metadata/selector.rb +32 -0
  361. data/lib/puppet/indirector/file_metadata.rb +7 -0
  362. data/lib/puppet/indirector/file_server.rb +57 -0
  363. data/lib/puppet/indirector/generic_http.rb +7 -0
  364. data/lib/puppet/indirector/hiera.rb +101 -0
  365. data/lib/puppet/indirector/indirection.rb +381 -0
  366. data/lib/puppet/indirector/json.rb +82 -0
  367. data/lib/puppet/indirector/memory.rb +37 -0
  368. data/lib/puppet/indirector/msgpack.rb +87 -0
  369. data/lib/puppet/indirector/node/exec.rb +70 -0
  370. data/lib/puppet/indirector/node/json.rb +9 -0
  371. data/lib/puppet/indirector/node/memory.rb +12 -0
  372. data/lib/puppet/indirector/node/msgpack.rb +9 -0
  373. data/lib/puppet/indirector/node/plain.rb +23 -0
  374. data/lib/puppet/indirector/node/rest.rb +31 -0
  375. data/lib/puppet/indirector/node/store_configs.rb +8 -0
  376. data/lib/puppet/indirector/node/yaml.rb +9 -0
  377. data/lib/puppet/indirector/none.rb +10 -0
  378. data/lib/puppet/indirector/plain.rb +11 -0
  379. data/lib/puppet/indirector/report/json.rb +36 -0
  380. data/lib/puppet/indirector/report/msgpack.rb +13 -0
  381. data/lib/puppet/indirector/report/processor.rb +63 -0
  382. data/lib/puppet/indirector/report/rest.rb +31 -0
  383. data/lib/puppet/indirector/report/yaml.rb +36 -0
  384. data/lib/puppet/indirector/request.rb +197 -0
  385. data/lib/puppet/indirector/resource/ral.rb +66 -0
  386. data/lib/puppet/indirector/resource/store_configs.rb +14 -0
  387. data/lib/puppet/indirector/resource/validator.rb +10 -0
  388. data/lib/puppet/indirector/rest.rb +66 -0
  389. data/lib/puppet/indirector/store_configs.rb +32 -0
  390. data/lib/puppet/indirector/terminus.rb +180 -0
  391. data/lib/puppet/indirector/yaml.rb +65 -0
  392. data/lib/puppet/indirector.rb +64 -0
  393. data/lib/puppet/info_service/class_information_service.rb +108 -0
  394. data/lib/puppet/info_service/plan_information_service.rb +38 -0
  395. data/lib/puppet/info_service/task_information_service.rb +45 -0
  396. data/lib/puppet/info_service.rb +27 -0
  397. data/lib/puppet/interface/action.rb +410 -0
  398. data/lib/puppet/interface/action_builder.rb +167 -0
  399. data/lib/puppet/interface/action_manager.rb +101 -0
  400. data/lib/puppet/interface/documentation.rb +363 -0
  401. data/lib/puppet/interface/face_collection.rb +141 -0
  402. data/lib/puppet/interface/option.rb +184 -0
  403. data/lib/puppet/interface/option_builder.rb +110 -0
  404. data/lib/puppet/interface/option_manager.rb +108 -0
  405. data/lib/puppet/interface.rb +240 -0
  406. data/lib/puppet/loaders.rb +31 -0
  407. data/lib/puppet/metatype/manager.rb +198 -0
  408. data/lib/puppet/module/plan.rb +166 -0
  409. data/lib/puppet/module/task.rb +288 -0
  410. data/lib/puppet/module.rb +487 -0
  411. data/lib/puppet/module_tool/applications/application.rb +96 -0
  412. data/lib/puppet/module_tool/applications/checksummer.rb +62 -0
  413. data/lib/puppet/module_tool/applications/installer.rb +402 -0
  414. data/lib/puppet/module_tool/applications/uninstaller.rb +121 -0
  415. data/lib/puppet/module_tool/applications/unpacker.rb +102 -0
  416. data/lib/puppet/module_tool/applications/upgrader.rb +288 -0
  417. data/lib/puppet/module_tool/applications.rb +14 -0
  418. data/lib/puppet/module_tool/checksums.rb +50 -0
  419. data/lib/puppet/module_tool/dependency.rb +42 -0
  420. data/lib/puppet/module_tool/errors/base.rb +17 -0
  421. data/lib/puppet/module_tool/errors/installer.rb +94 -0
  422. data/lib/puppet/module_tool/errors/shared.rb +228 -0
  423. data/lib/puppet/module_tool/errors/uninstaller.rb +51 -0
  424. data/lib/puppet/module_tool/errors/upgrader.rb +64 -0
  425. data/lib/puppet/module_tool/errors.rb +13 -0
  426. data/lib/puppet/module_tool/install_directory.rb +48 -0
  427. data/lib/puppet/module_tool/installed_modules.rb +99 -0
  428. data/lib/puppet/module_tool/local_tarball.rb +92 -0
  429. data/lib/puppet/module_tool/metadata.rb +227 -0
  430. data/lib/puppet/module_tool/shared_behaviors.rb +199 -0
  431. data/lib/puppet/module_tool/tar/gnu.rb +23 -0
  432. data/lib/puppet/module_tool/tar/mini.rb +118 -0
  433. data/lib/puppet/module_tool/tar.rb +20 -0
  434. data/lib/puppet/module_tool.rb +194 -0
  435. data/lib/puppet/network/authconfig.rb +9 -0
  436. data/lib/puppet/network/authorization.rb +21 -0
  437. data/lib/puppet/network/client_request.rb +32 -0
  438. data/lib/puppet/network/format.rb +116 -0
  439. data/lib/puppet/network/format_handler.rb +110 -0
  440. data/lib/puppet/network/format_support.rb +140 -0
  441. data/lib/puppet/network/formats.rb +338 -0
  442. data/lib/puppet/network/http/api/indirected_routes.rb +270 -0
  443. data/lib/puppet/network/http/api/indirection_type.rb +33 -0
  444. data/lib/puppet/network/http/api/master/v3/environments.rb +4 -0
  445. data/lib/puppet/network/http/api/master/v3.rb +4 -0
  446. data/lib/puppet/network/http/api/master.rb +5 -0
  447. data/lib/puppet/network/http/api/server/v3/environments.rb +54 -0
  448. data/lib/puppet/network/http/api/server/v3.rb +40 -0
  449. data/lib/puppet/network/http/api/server.rb +12 -0
  450. data/lib/puppet/network/http/api.rb +41 -0
  451. data/lib/puppet/network/http/connection.rb +288 -0
  452. data/lib/puppet/network/http/error.rb +75 -0
  453. data/lib/puppet/network/http/handler.rb +213 -0
  454. data/lib/puppet/network/http/issues.rb +14 -0
  455. data/lib/puppet/network/http/memory_response.rb +15 -0
  456. data/lib/puppet/network/http/request.rb +83 -0
  457. data/lib/puppet/network/http/response.rb +25 -0
  458. data/lib/puppet/network/http/route.rb +104 -0
  459. data/lib/puppet/network/http.rb +30 -0
  460. data/lib/puppet/network/http_pool.rb +78 -0
  461. data/lib/puppet/network/uri.rb +20 -0
  462. data/lib/puppet/network.rb +5 -0
  463. data/lib/puppet/node/environment.rb +638 -0
  464. data/lib/puppet/node/facts.rb +165 -0
  465. data/lib/puppet/node/server_facts.rb +46 -0
  466. data/lib/puppet/node.rb +256 -0
  467. data/lib/puppet/pal/catalog_compiler.rb +107 -0
  468. data/lib/puppet/pal/compiler.rb +227 -0
  469. data/lib/puppet/pal/function_signature.rb +54 -0
  470. data/lib/puppet/pal/json_catalog_encoder.rb +76 -0
  471. data/lib/puppet/pal/pal_api.rb +17 -0
  472. data/lib/puppet/pal/pal_impl.rb +585 -0
  473. data/lib/puppet/pal/plan_signature.rb +73 -0
  474. data/lib/puppet/pal/script_compiler.rb +75 -0
  475. data/lib/puppet/pal/task_signature.rb +64 -0
  476. data/lib/puppet/parameter/boolean.rb +17 -0
  477. data/lib/puppet/parameter/package_options.rb +33 -0
  478. data/lib/puppet/parameter/path.rb +61 -0
  479. data/lib/puppet/parameter/value.rb +93 -0
  480. data/lib/puppet/parameter/value_collection.rb +213 -0
  481. data/lib/puppet/parameter.rb +590 -0
  482. data/lib/puppet/parser/abstract_compiler.rb +35 -0
  483. data/lib/puppet/parser/ast/block_expression.rb +17 -0
  484. data/lib/puppet/parser/ast/branch.rb +21 -0
  485. data/lib/puppet/parser/ast/hostclass.rb +29 -0
  486. data/lib/puppet/parser/ast/leaf.rb +84 -0
  487. data/lib/puppet/parser/ast/node.rb +19 -0
  488. data/lib/puppet/parser/ast/pops_bridge.rb +245 -0
  489. data/lib/puppet/parser/ast/resource.rb +66 -0
  490. data/lib/puppet/parser/ast/resource_instance.rb +13 -0
  491. data/lib/puppet/parser/ast/resourceparam.rb +33 -0
  492. data/lib/puppet/parser/ast/top_level_construct.rb +6 -0
  493. data/lib/puppet/parser/ast.rb +62 -0
  494. data/lib/puppet/parser/catalog_compiler.rb +56 -0
  495. data/lib/puppet/parser/compiler/catalog_validator/relationship_validator.rb +41 -0
  496. data/lib/puppet/parser/compiler/catalog_validator.rb +35 -0
  497. data/lib/puppet/parser/compiler.rb +616 -0
  498. data/lib/puppet/parser/e4_parser_adapter.rb +61 -0
  499. data/lib/puppet/parser/files.rb +95 -0
  500. data/lib/puppet/parser/functions/assert_type.rb +62 -0
  501. data/lib/puppet/parser/functions/binary_file.rb +26 -0
  502. data/lib/puppet/parser/functions/break.rb +41 -0
  503. data/lib/puppet/parser/functions/contain.rb +32 -0
  504. data/lib/puppet/parser/functions/create_resources.rb +114 -0
  505. data/lib/puppet/parser/functions/defined.rb +109 -0
  506. data/lib/puppet/parser/functions/dig.rb +40 -0
  507. data/lib/puppet/parser/functions/digest.rb +7 -0
  508. data/lib/puppet/parser/functions/each.rb +106 -0
  509. data/lib/puppet/parser/functions/epp.rb +40 -0
  510. data/lib/puppet/parser/functions/fail.rb +13 -0
  511. data/lib/puppet/parser/functions/file.rb +35 -0
  512. data/lib/puppet/parser/functions/filter.rb +81 -0
  513. data/lib/puppet/parser/functions/find_file.rb +29 -0
  514. data/lib/puppet/parser/functions/fqdn_rand.rb +46 -0
  515. data/lib/puppet/parser/functions/generate.rb +39 -0
  516. data/lib/puppet/parser/functions/hiera.rb +105 -0
  517. data/lib/puppet/parser/functions/hiera_array.rb +93 -0
  518. data/lib/puppet/parser/functions/hiera_hash.rb +103 -0
  519. data/lib/puppet/parser/functions/hiera_include.rb +102 -0
  520. data/lib/puppet/parser/functions/include.rb +36 -0
  521. data/lib/puppet/parser/functions/inline_epp.rb +52 -0
  522. data/lib/puppet/parser/functions/inline_template.rb +28 -0
  523. data/lib/puppet/parser/functions/lest.rb +51 -0
  524. data/lib/puppet/parser/functions/lookup.rb +134 -0
  525. data/lib/puppet/parser/functions/map.rb +78 -0
  526. data/lib/puppet/parser/functions/match.rb +45 -0
  527. data/lib/puppet/parser/functions/md5.rb +7 -0
  528. data/lib/puppet/parser/functions/new.rb +992 -0
  529. data/lib/puppet/parser/functions/next.rb +40 -0
  530. data/lib/puppet/parser/functions/realize.rb +22 -0
  531. data/lib/puppet/parser/functions/reduce.rb +139 -0
  532. data/lib/puppet/parser/functions/regsubst.rb +65 -0
  533. data/lib/puppet/parser/functions/require.rb +43 -0
  534. data/lib/puppet/parser/functions/return.rb +94 -0
  535. data/lib/puppet/parser/functions/reverse_each.rb +85 -0
  536. data/lib/puppet/parser/functions/scanf.rb +40 -0
  537. data/lib/puppet/parser/functions/sha1.rb +7 -0
  538. data/lib/puppet/parser/functions/sha256.rb +7 -0
  539. data/lib/puppet/parser/functions/shellquote.rb +63 -0
  540. data/lib/puppet/parser/functions/slice.rb +41 -0
  541. data/lib/puppet/parser/functions/split.rb +29 -0
  542. data/lib/puppet/parser/functions/sprintf.rb +62 -0
  543. data/lib/puppet/parser/functions/step.rb +86 -0
  544. data/lib/puppet/parser/functions/strftime.rb +187 -0
  545. data/lib/puppet/parser/functions/tag.rb +15 -0
  546. data/lib/puppet/parser/functions/tagged.rb +24 -0
  547. data/lib/puppet/parser/functions/template.rb +42 -0
  548. data/lib/puppet/parser/functions/then.rb +75 -0
  549. data/lib/puppet/parser/functions/type.rb +55 -0
  550. data/lib/puppet/parser/functions/versioncmp.rb +31 -0
  551. data/lib/puppet/parser/functions/with.rb +30 -0
  552. data/lib/puppet/parser/functions.rb +324 -0
  553. data/lib/puppet/parser/parser_factory.rb +32 -0
  554. data/lib/puppet/parser/relationship.rb +90 -0
  555. data/lib/puppet/parser/resource/param.rb +37 -0
  556. data/lib/puppet/parser/resource.rb +353 -0
  557. data/lib/puppet/parser/scope.rb +1141 -0
  558. data/lib/puppet/parser/script_compiler.rb +123 -0
  559. data/lib/puppet/parser/templatewrapper.rb +105 -0
  560. data/lib/puppet/parser/type_loader.rb +151 -0
  561. data/lib/puppet/parser.rb +22 -0
  562. data/lib/puppet/plugins/configuration.rb +31 -0
  563. data/lib/puppet/plugins/syntax_checkers.rb +99 -0
  564. data/lib/puppet/plugins.rb +11 -0
  565. data/lib/puppet/pops/adaptable.rb +199 -0
  566. data/lib/puppet/pops/adapters.rb +159 -0
  567. data/lib/puppet/pops/evaluator/access_operator.rb +732 -0
  568. data/lib/puppet/pops/evaluator/callable_signature.rb +108 -0
  569. data/lib/puppet/pops/evaluator/closure.rb +370 -0
  570. data/lib/puppet/pops/evaluator/collector_transformer.rb +237 -0
  571. data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +88 -0
  572. data/lib/puppet/pops/evaluator/collectors/catalog_collector.rb +30 -0
  573. data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +71 -0
  574. data/lib/puppet/pops/evaluator/collectors/fixed_set_collector.rb +38 -0
  575. data/lib/puppet/pops/evaluator/compare_operator.rb +269 -0
  576. data/lib/puppet/pops/evaluator/deferred_resolver.rb +227 -0
  577. data/lib/puppet/pops/evaluator/epp_evaluator.rb +121 -0
  578. data/lib/puppet/pops/evaluator/evaluator_impl.rb +1317 -0
  579. data/lib/puppet/pops/evaluator/external_syntax_support.rb +47 -0
  580. data/lib/puppet/pops/evaluator/json_strict_literal_evaluator.rb +83 -0
  581. data/lib/puppet/pops/evaluator/literal_evaluator.rb +100 -0
  582. data/lib/puppet/pops/evaluator/puppet_proc.rb +72 -0
  583. data/lib/puppet/pops/evaluator/relationship_operator.rb +188 -0
  584. data/lib/puppet/pops/evaluator/runtime3_converter.rb +225 -0
  585. data/lib/puppet/pops/evaluator/runtime3_resource_support.rb +119 -0
  586. data/lib/puppet/pops/evaluator/runtime3_support.rb +528 -0
  587. data/lib/puppet/pops/functions/dispatch.rb +107 -0
  588. data/lib/puppet/pops/functions/dispatcher.rb +76 -0
  589. data/lib/puppet/pops/functions/function.rb +137 -0
  590. data/lib/puppet/pops/issue_reporter.rb +140 -0
  591. data/lib/puppet/pops/issues.rb +933 -0
  592. data/lib/puppet/pops/label_provider.rb +92 -0
  593. data/lib/puppet/pops/loader/base_loader.rb +178 -0
  594. data/lib/puppet/pops/loader/dependency_loader.rb +95 -0
  595. data/lib/puppet/pops/loader/gem_support.rb +54 -0
  596. data/lib/puppet/pops/loader/generic_plan_instantiator.rb +30 -0
  597. data/lib/puppet/pops/loader/loader.rb +221 -0
  598. data/lib/puppet/pops/loader/loader_paths.rb +413 -0
  599. data/lib/puppet/pops/loader/module_loaders.rb +552 -0
  600. data/lib/puppet/pops/loader/predefined_loader.rb +28 -0
  601. data/lib/puppet/pops/loader/puppet_function_instantiator.rb +88 -0
  602. data/lib/puppet/pops/loader/puppet_plan_instantiator.rb +97 -0
  603. data/lib/puppet/pops/loader/puppet_resource_type_impl_instantiator.rb +80 -0
  604. data/lib/puppet/pops/loader/ruby_data_type_instantiator.rb +43 -0
  605. data/lib/puppet/pops/loader/ruby_function_instantiator.rb +49 -0
  606. data/lib/puppet/pops/loader/ruby_legacy_function_instantiator.rb +130 -0
  607. data/lib/puppet/pops/loader/runtime3_type_loader.rb +104 -0
  608. data/lib/puppet/pops/loader/simple_environment_loader.rb +20 -0
  609. data/lib/puppet/pops/loader/static_loader.rb +133 -0
  610. data/lib/puppet/pops/loader/task_instantiator.rb +46 -0
  611. data/lib/puppet/pops/loader/type_definition_instantiator.rb +104 -0
  612. data/lib/puppet/pops/loader/typed_name.rb +56 -0
  613. data/lib/puppet/pops/loader/uri_helper.rb +24 -0
  614. data/lib/puppet/pops/loaders.rb +550 -0
  615. data/lib/puppet/pops/lookup/configured_data_provider.rb +95 -0
  616. data/lib/puppet/pops/lookup/context.rb +208 -0
  617. data/lib/puppet/pops/lookup/data_adapter.rb +29 -0
  618. data/lib/puppet/pops/lookup/data_dig_function_provider.rb +146 -0
  619. data/lib/puppet/pops/lookup/data_hash_function_provider.rb +128 -0
  620. data/lib/puppet/pops/lookup/data_provider.rb +94 -0
  621. data/lib/puppet/pops/lookup/environment_data_provider.rb +37 -0
  622. data/lib/puppet/pops/lookup/explainer.rb +597 -0
  623. data/lib/puppet/pops/lookup/function_provider.rb +112 -0
  624. data/lib/puppet/pops/lookup/global_data_provider.rb +76 -0
  625. data/lib/puppet/pops/lookup/hiera_config.rb +823 -0
  626. data/lib/puppet/pops/lookup/interpolation.rb +166 -0
  627. data/lib/puppet/pops/lookup/invocation.rb +272 -0
  628. data/lib/puppet/pops/lookup/key_recorder.rb +21 -0
  629. data/lib/puppet/pops/lookup/location_resolver.rb +101 -0
  630. data/lib/puppet/pops/lookup/lookup_adapter.rb +533 -0
  631. data/lib/puppet/pops/lookup/lookup_key.rb +101 -0
  632. data/lib/puppet/pops/lookup/lookup_key_function_provider.rb +94 -0
  633. data/lib/puppet/pops/lookup/module_data_provider.rb +92 -0
  634. data/lib/puppet/pops/lookup/sub_lookup.rb +96 -0
  635. data/lib/puppet/pops/lookup.rb +102 -0
  636. data/lib/puppet/pops/merge_strategy.rb +447 -0
  637. data/lib/puppet/pops/migration/migration_checker.rb +61 -0
  638. data/lib/puppet/pops/model/ast.pp +669 -0
  639. data/lib/puppet/pops/model/ast.rb +4776 -0
  640. data/lib/puppet/pops/model/ast_transformer.rb +131 -0
  641. data/lib/puppet/pops/model/factory.rb +1157 -0
  642. data/lib/puppet/pops/model/model_label_provider.rb +137 -0
  643. data/lib/puppet/pops/model/model_tree_dumper.rb +447 -0
  644. data/lib/puppet/pops/model/pn_transformer.rb +384 -0
  645. data/lib/puppet/pops/model/tree_dumper.rb +62 -0
  646. data/lib/puppet/pops/parser/code_merger.rb +29 -0
  647. data/lib/puppet/pops/parser/egrammar.ra +889 -0
  648. data/lib/puppet/pops/parser/eparser.rb +3184 -0
  649. data/lib/puppet/pops/parser/epp_parser.rb +52 -0
  650. data/lib/puppet/pops/parser/epp_support.rb +266 -0
  651. data/lib/puppet/pops/parser/evaluating_parser.rb +166 -0
  652. data/lib/puppet/pops/parser/heredoc_support.rb +153 -0
  653. data/lib/puppet/pops/parser/interpolation_support.rb +249 -0
  654. data/lib/puppet/pops/parser/lexer2.rb +789 -0
  655. data/lib/puppet/pops/parser/lexer_support.rb +221 -0
  656. data/lib/puppet/pops/parser/locatable.rb +23 -0
  657. data/lib/puppet/pops/parser/locator.rb +361 -0
  658. data/lib/puppet/pops/parser/parser_support.rb +252 -0
  659. data/lib/puppet/pops/parser/pn_parser.rb +318 -0
  660. data/lib/puppet/pops/parser/slurp_support.rb +119 -0
  661. data/lib/puppet/pops/patterns.rb +60 -0
  662. data/lib/puppet/pops/pcore.rb +136 -0
  663. data/lib/puppet/pops/pn.rb +239 -0
  664. data/lib/puppet/pops/puppet_stack.rb +63 -0
  665. data/lib/puppet/pops/resource/param.rb +56 -0
  666. data/lib/puppet/pops/resource/resource_type_impl.rb +296 -0
  667. data/lib/puppet/pops/resource/resource_type_set.pcore +22 -0
  668. data/lib/puppet/pops/semantic_error.rb +31 -0
  669. data/lib/puppet/pops/serialization/abstract_reader.rb +182 -0
  670. data/lib/puppet/pops/serialization/abstract_writer.rb +224 -0
  671. data/lib/puppet/pops/serialization/deserializer.rb +83 -0
  672. data/lib/puppet/pops/serialization/extension.rb +166 -0
  673. data/lib/puppet/pops/serialization/from_data_converter.rb +231 -0
  674. data/lib/puppet/pops/serialization/instance_reader.rb +21 -0
  675. data/lib/puppet/pops/serialization/instance_writer.rb +16 -0
  676. data/lib/puppet/pops/serialization/json.rb +301 -0
  677. data/lib/puppet/pops/serialization/json_path.rb +129 -0
  678. data/lib/puppet/pops/serialization/object.rb +73 -0
  679. data/lib/puppet/pops/serialization/serializer.rb +144 -0
  680. data/lib/puppet/pops/serialization/time_factory.rb +68 -0
  681. data/lib/puppet/pops/serialization/to_data_converter.rb +316 -0
  682. data/lib/puppet/pops/serialization/to_stringified_converter.rb +227 -0
  683. data/lib/puppet/pops/serialization.rb +45 -0
  684. data/lib/puppet/pops/time/timespan.rb +728 -0
  685. data/lib/puppet/pops/time/timestamp.rb +167 -0
  686. data/lib/puppet/pops/types/annotatable.rb +37 -0
  687. data/lib/puppet/pops/types/annotation.rb +73 -0
  688. data/lib/puppet/pops/types/class_loader.rb +134 -0
  689. data/lib/puppet/pops/types/implementation_registry.rb +137 -0
  690. data/lib/puppet/pops/types/iterable.rb +375 -0
  691. data/lib/puppet/pops/types/p_binary_type.rb +232 -0
  692. data/lib/puppet/pops/types/p_init_type.rb +241 -0
  693. data/lib/puppet/pops/types/p_meta_type.rb +95 -0
  694. data/lib/puppet/pops/types/p_object_type.rb +1142 -0
  695. data/lib/puppet/pops/types/p_object_type_extension.rb +229 -0
  696. data/lib/puppet/pops/types/p_runtime_type.rb +117 -0
  697. data/lib/puppet/pops/types/p_sem_ver_range_type.rb +191 -0
  698. data/lib/puppet/pops/types/p_sem_ver_type.rb +155 -0
  699. data/lib/puppet/pops/types/p_sensitive_type.rb +81 -0
  700. data/lib/puppet/pops/types/p_timespan_type.rb +194 -0
  701. data/lib/puppet/pops/types/p_timestamp_type.rb +74 -0
  702. data/lib/puppet/pops/types/p_type_set_type.rb +394 -0
  703. data/lib/puppet/pops/types/p_uri_type.rb +198 -0
  704. data/lib/puppet/pops/types/puppet_object.rb +41 -0
  705. data/lib/puppet/pops/types/recursion_guard.rb +142 -0
  706. data/lib/puppet/pops/types/ruby_generator.rb +477 -0
  707. data/lib/puppet/pops/types/ruby_method.rb +32 -0
  708. data/lib/puppet/pops/types/string_converter.rb +1144 -0
  709. data/lib/puppet/pops/types/tree_iterators.rb +250 -0
  710. data/lib/puppet/pops/types/type_acceptor.rb +27 -0
  711. data/lib/puppet/pops/types/type_asserter.rb +49 -0
  712. data/lib/puppet/pops/types/type_assertion_error.rb +27 -0
  713. data/lib/puppet/pops/types/type_calculator.rb +829 -0
  714. data/lib/puppet/pops/types/type_conversion_error.rb +7 -0
  715. data/lib/puppet/pops/types/type_factory.rb +640 -0
  716. data/lib/puppet/pops/types/type_formatter.rb +796 -0
  717. data/lib/puppet/pops/types/type_mismatch_describer.rb +1105 -0
  718. data/lib/puppet/pops/types/type_parser.rb +690 -0
  719. data/lib/puppet/pops/types/type_set_reference.rb +62 -0
  720. data/lib/puppet/pops/types/type_with_members.rb +43 -0
  721. data/lib/puppet/pops/types/types.rb +3651 -0
  722. data/lib/puppet/pops/utils.rb +117 -0
  723. data/lib/puppet/pops/validation/checker4_0.rb +1155 -0
  724. data/lib/puppet/pops/validation/tasks_checker.rb +95 -0
  725. data/lib/puppet/pops/validation/validator_factory_4_0.rb +45 -0
  726. data/lib/puppet/pops/validation.rb +462 -0
  727. data/lib/puppet/pops/visitable.rb +8 -0
  728. data/lib/puppet/pops/visitor.rb +136 -0
  729. data/lib/puppet/pops.rb +124 -0
  730. data/lib/puppet/property/boolean.rb +9 -0
  731. data/lib/puppet/property/ensure.rb +107 -0
  732. data/lib/puppet/property/keyvalue.rb +159 -0
  733. data/lib/puppet/property/list.rb +71 -0
  734. data/lib/puppet/property/ordered_list.rb +30 -0
  735. data/lib/puppet/property.rb +610 -0
  736. data/lib/puppet/provider/aix_object.rb +491 -0
  737. data/lib/puppet/provider/command.rb +27 -0
  738. data/lib/puppet/provider/confine.rb +8 -0
  739. data/lib/puppet/provider/exec/posix.rb +63 -0
  740. data/lib/puppet/provider/exec/shell.rb +27 -0
  741. data/lib/puppet/provider/exec/windows.rb +57 -0
  742. data/lib/puppet/provider/exec.rb +107 -0
  743. data/lib/puppet/provider/file/posix.rb +162 -0
  744. data/lib/puppet/provider/file/windows.rb +151 -0
  745. data/lib/puppet/provider/group/aix.rb +101 -0
  746. data/lib/puppet/provider/group/directoryservice.rb +24 -0
  747. data/lib/puppet/provider/group/groupadd.rb +180 -0
  748. data/lib/puppet/provider/group/ldap.rb +51 -0
  749. data/lib/puppet/provider/group/pw.rb +52 -0
  750. data/lib/puppet/provider/group/windows_adsi.rb +116 -0
  751. data/lib/puppet/provider/ldap.rb +143 -0
  752. data/lib/puppet/provider/nameservice/directoryservice.rb +522 -0
  753. data/lib/puppet/provider/nameservice/objectadd.rb +22 -0
  754. data/lib/puppet/provider/nameservice/pw.rb +21 -0
  755. data/lib/puppet/provider/nameservice.rb +297 -0
  756. data/lib/puppet/provider/network_device.rb +74 -0
  757. data/lib/puppet/provider/package/aix.rb +171 -0
  758. data/lib/puppet/provider/package/appdmg.rb +113 -0
  759. data/lib/puppet/provider/package/apple.rb +49 -0
  760. data/lib/puppet/provider/package/apt.rb +265 -0
  761. data/lib/puppet/provider/package/aptitude.rb +35 -0
  762. data/lib/puppet/provider/package/aptrpm.rb +87 -0
  763. data/lib/puppet/provider/package/blastwave.rb +109 -0
  764. data/lib/puppet/provider/package/dnf.rb +57 -0
  765. data/lib/puppet/provider/package/dnfmodule.rb +143 -0
  766. data/lib/puppet/provider/package/dpkg.rb +191 -0
  767. data/lib/puppet/provider/package/fink.rb +99 -0
  768. data/lib/puppet/provider/package/freebsd.rb +49 -0
  769. data/lib/puppet/provider/package/gem.rb +296 -0
  770. data/lib/puppet/provider/package/hpux.rb +46 -0
  771. data/lib/puppet/provider/package/macports.rb +112 -0
  772. data/lib/puppet/provider/package/nim.rb +290 -0
  773. data/lib/puppet/provider/package/openbsd.rb +263 -0
  774. data/lib/puppet/provider/package/opkg.rb +85 -0
  775. data/lib/puppet/provider/package/pacman.rb +270 -0
  776. data/lib/puppet/provider/package/pip.rb +347 -0
  777. data/lib/puppet/provider/package/pip2.rb +18 -0
  778. data/lib/puppet/provider/package/pip3.rb +18 -0
  779. data/lib/puppet/provider/package/pkg.rb +300 -0
  780. data/lib/puppet/provider/package/pkgdmg.rb +159 -0
  781. data/lib/puppet/provider/package/pkgin.rb +88 -0
  782. data/lib/puppet/provider/package/pkgng.rb +178 -0
  783. data/lib/puppet/provider/package/pkgutil.rb +186 -0
  784. data/lib/puppet/provider/package/portage.rb +314 -0
  785. data/lib/puppet/provider/package/ports.rb +94 -0
  786. data/lib/puppet/provider/package/portupgrade.rb +233 -0
  787. data/lib/puppet/provider/package/puppet_gem.rb +25 -0
  788. data/lib/puppet/provider/package/puppetserver_gem.rb +174 -0
  789. data/lib/puppet/provider/package/rpm.rb +255 -0
  790. data/lib/puppet/provider/package/rug.rb +51 -0
  791. data/lib/puppet/provider/package/sun.rb +137 -0
  792. data/lib/puppet/provider/package/sunfreeware.rb +11 -0
  793. data/lib/puppet/provider/package/tdnf.rb +35 -0
  794. data/lib/puppet/provider/package/up2date.rb +40 -0
  795. data/lib/puppet/provider/package/urpmi.rb +57 -0
  796. data/lib/puppet/provider/package/windows/exe_package.rb +108 -0
  797. data/lib/puppet/provider/package/windows/msi_package.rb +72 -0
  798. data/lib/puppet/provider/package/windows/package.rb +113 -0
  799. data/lib/puppet/provider/package/windows.rb +131 -0
  800. data/lib/puppet/provider/package/xbps.rb +127 -0
  801. data/lib/puppet/provider/package/yum.rb +390 -0
  802. data/lib/puppet/provider/package/zypper.rb +206 -0
  803. data/lib/puppet/provider/package.rb +61 -0
  804. data/lib/puppet/provider/package_targetable.rb +71 -0
  805. data/lib/puppet/provider/parsedfile.rb +494 -0
  806. data/lib/puppet/provider/service/base.rb +135 -0
  807. data/lib/puppet/provider/service/bsd.rb +53 -0
  808. data/lib/puppet/provider/service/daemontools.rb +196 -0
  809. data/lib/puppet/provider/service/debian.rb +77 -0
  810. data/lib/puppet/provider/service/freebsd.rb +141 -0
  811. data/lib/puppet/provider/service/gentoo.rb +47 -0
  812. data/lib/puppet/provider/service/init.rb +194 -0
  813. data/lib/puppet/provider/service/launchd.rb +391 -0
  814. data/lib/puppet/provider/service/openbsd.rb +101 -0
  815. data/lib/puppet/provider/service/openrc.rb +72 -0
  816. data/lib/puppet/provider/service/openwrt.rb +37 -0
  817. data/lib/puppet/provider/service/rcng.rb +53 -0
  818. data/lib/puppet/provider/service/redhat.rb +75 -0
  819. data/lib/puppet/provider/service/runit.rb +107 -0
  820. data/lib/puppet/provider/service/service.rb +67 -0
  821. data/lib/puppet/provider/service/smf.rb +322 -0
  822. data/lib/puppet/provider/service/src.rb +147 -0
  823. data/lib/puppet/provider/service/systemd.rb +232 -0
  824. data/lib/puppet/provider/service/upstart.rb +385 -0
  825. data/lib/puppet/provider/service/windows.rb +179 -0
  826. data/lib/puppet/provider/user/aix.rb +365 -0
  827. data/lib/puppet/provider/user/directoryservice.rb +687 -0
  828. data/lib/puppet/provider/user/hpux.rb +93 -0
  829. data/lib/puppet/provider/user/ldap.rb +135 -0
  830. data/lib/puppet/provider/user/openbsd.rb +79 -0
  831. data/lib/puppet/provider/user/pw.rb +109 -0
  832. data/lib/puppet/provider/user/user_role_add.rb +243 -0
  833. data/lib/puppet/provider/user/useradd.rb +417 -0
  834. data/lib/puppet/provider/user/windows_adsi.rb +176 -0
  835. data/lib/puppet/provider.rb +613 -0
  836. data/lib/puppet/reference/configuration.rb +105 -0
  837. data/lib/puppet/reference/function.rb +19 -0
  838. data/lib/puppet/reference/indirection.rb +76 -0
  839. data/lib/puppet/reference/metaparameter.rb +35 -0
  840. data/lib/puppet/reference/providers.rb +119 -0
  841. data/lib/puppet/reference/report.rb +22 -0
  842. data/lib/puppet/reference/type.rb +111 -0
  843. data/lib/puppet/relationship.rb +85 -0
  844. data/lib/puppet/reports/http.rb +45 -0
  845. data/lib/puppet/reports/log.rb +15 -0
  846. data/lib/puppet/reports/store.rb +71 -0
  847. data/lib/puppet/reports.rb +95 -0
  848. data/lib/puppet/resource/catalog.rb +655 -0
  849. data/lib/puppet/resource/status.rb +231 -0
  850. data/lib/puppet/resource/type.rb +449 -0
  851. data/lib/puppet/resource/type_collection.rb +235 -0
  852. data/lib/puppet/resource.rb +673 -0
  853. data/lib/puppet/runtime.rb +67 -0
  854. data/lib/puppet/scheduler/job.rb +55 -0
  855. data/lib/puppet/scheduler/scheduler.rb +46 -0
  856. data/lib/puppet/scheduler/splay_job.rb +45 -0
  857. data/lib/puppet/scheduler/timer.rb +15 -0
  858. data/lib/puppet/scheduler.rb +18 -0
  859. data/lib/puppet/settings/alias_setting.rb +37 -0
  860. data/lib/puppet/settings/array_setting.rb +18 -0
  861. data/lib/puppet/settings/autosign_setting.rb +23 -0
  862. data/lib/puppet/settings/base_setting.rb +228 -0
  863. data/lib/puppet/settings/boolean_setting.rb +34 -0
  864. data/lib/puppet/settings/certificate_revocation_setting.rb +22 -0
  865. data/lib/puppet/settings/config_file.rb +148 -0
  866. data/lib/puppet/settings/directory_setting.rb +20 -0
  867. data/lib/puppet/settings/duration_setting.rb +33 -0
  868. data/lib/puppet/settings/enum_setting.rb +18 -0
  869. data/lib/puppet/settings/environment_conf.rb +228 -0
  870. data/lib/puppet/settings/errors.rb +14 -0
  871. data/lib/puppet/settings/file_or_directory_setting.rb +37 -0
  872. data/lib/puppet/settings/file_setting.rb +232 -0
  873. data/lib/puppet/settings/http_extra_headers_setting.rb +26 -0
  874. data/lib/puppet/settings/ini_file.rb +228 -0
  875. data/lib/puppet/settings/integer_setting.rb +19 -0
  876. data/lib/puppet/settings/path_setting.rb +10 -0
  877. data/lib/puppet/settings/port_setting.rb +17 -0
  878. data/lib/puppet/settings/priority_setting.rb +44 -0
  879. data/lib/puppet/settings/server_list_setting.rb +30 -0
  880. data/lib/puppet/settings/string_setting.rb +11 -0
  881. data/lib/puppet/settings/symbolic_enum_setting.rb +19 -0
  882. data/lib/puppet/settings/terminus_setting.rb +16 -0
  883. data/lib/puppet/settings/ttl_setting.rb +53 -0
  884. data/lib/puppet/settings/value_translator.rb +16 -0
  885. data/lib/puppet/settings.rb +1650 -0
  886. data/lib/puppet/ssl/base.rb +152 -0
  887. data/lib/puppet/ssl/certificate.rb +98 -0
  888. data/lib/puppet/ssl/certificate_request.rb +320 -0
  889. data/lib/puppet/ssl/certificate_request_attributes.rb +40 -0
  890. data/lib/puppet/ssl/certificate_signer.rb +39 -0
  891. data/lib/puppet/ssl/digest.rb +22 -0
  892. data/lib/puppet/ssl/error.rb +29 -0
  893. data/lib/puppet/ssl/oids.rb +199 -0
  894. data/lib/puppet/ssl/openssl_loader.rb +26 -0
  895. data/lib/puppet/ssl/ssl_context.rb +27 -0
  896. data/lib/puppet/ssl/ssl_provider.rb +354 -0
  897. data/lib/puppet/ssl/state_machine.rb +605 -0
  898. data/lib/puppet/ssl/verifier.rb +143 -0
  899. data/lib/puppet/ssl.rb +25 -0
  900. data/lib/puppet/syntax_checkers/base64.rb +42 -0
  901. data/lib/puppet/syntax_checkers/epp.rb +35 -0
  902. data/lib/puppet/syntax_checkers/json.rb +35 -0
  903. data/lib/puppet/syntax_checkers/pp.rb +35 -0
  904. data/lib/puppet/syntax_checkers.rb +5 -0
  905. data/lib/puppet/test/test_helper.rb +251 -0
  906. data/lib/puppet/thread_local.rb +6 -0
  907. data/lib/puppet/transaction/additional_resource_generator.rb +225 -0
  908. data/lib/puppet/transaction/event.rb +171 -0
  909. data/lib/puppet/transaction/event_manager.rb +180 -0
  910. data/lib/puppet/transaction/persistence.rb +119 -0
  911. data/lib/puppet/transaction/report.rb +511 -0
  912. data/lib/puppet/transaction/resource_harness.rb +331 -0
  913. data/lib/puppet/transaction.rb +493 -0
  914. data/lib/puppet/trusted_external.rb +46 -0
  915. data/lib/puppet/type/component.rb +96 -0
  916. data/lib/puppet/type/exec.rb +730 -0
  917. data/lib/puppet/type/file/checksum.rb +54 -0
  918. data/lib/puppet/type/file/checksum_value.rb +56 -0
  919. data/lib/puppet/type/file/content.rb +180 -0
  920. data/lib/puppet/type/file/ctime.rb +22 -0
  921. data/lib/puppet/type/file/data_sync.rb +101 -0
  922. data/lib/puppet/type/file/ensure.rb +194 -0
  923. data/lib/puppet/type/file/group.rb +50 -0
  924. data/lib/puppet/type/file/mode.rb +192 -0
  925. data/lib/puppet/type/file/mtime.rb +21 -0
  926. data/lib/puppet/type/file/owner.rb +52 -0
  927. data/lib/puppet/type/file/selcontext.rb +143 -0
  928. data/lib/puppet/type/file/source.rb +380 -0
  929. data/lib/puppet/type/file/target.rb +86 -0
  930. data/lib/puppet/type/file/type.rb +21 -0
  931. data/lib/puppet/type/file.rb +1139 -0
  932. data/lib/puppet/type/filebucket.rb +123 -0
  933. data/lib/puppet/type/group.rb +238 -0
  934. data/lib/puppet/type/notify.rb +48 -0
  935. data/lib/puppet/type/package.rb +715 -0
  936. data/lib/puppet/type/resources.rb +192 -0
  937. data/lib/puppet/type/schedule.rb +441 -0
  938. data/lib/puppet/type/service.rb +310 -0
  939. data/lib/puppet/type/stage.rb +29 -0
  940. data/lib/puppet/type/tidy.rb +382 -0
  941. data/lib/puppet/type/user.rb +865 -0
  942. data/lib/puppet/type/whit.rb +35 -0
  943. data/lib/puppet/type.rb +2629 -0
  944. data/lib/puppet/util/at_fork/noop.rb +20 -0
  945. data/lib/puppet/util/at_fork/solaris.rb +158 -0
  946. data/lib/puppet/util/at_fork.rb +37 -0
  947. data/lib/puppet/util/autoload.rb +221 -0
  948. data/lib/puppet/util/backups.rb +88 -0
  949. data/lib/puppet/util/character_encoding.rb +83 -0
  950. data/lib/puppet/util/checksums.rb +380 -0
  951. data/lib/puppet/util/classgen.rb +223 -0
  952. data/lib/puppet/util/colors.rb +102 -0
  953. data/lib/puppet/util/command_line/puppet_option_parser.rb +89 -0
  954. data/lib/puppet/util/command_line/trollop.rb +847 -0
  955. data/lib/puppet/util/command_line.rb +198 -0
  956. data/lib/puppet/util/constant_inflector.rb +25 -0
  957. data/lib/puppet/util/diff.rb +80 -0
  958. data/lib/puppet/util/docs.rb +132 -0
  959. data/lib/puppet/util/errors.rb +161 -0
  960. data/lib/puppet/util/execution.rb +446 -0
  961. data/lib/puppet/util/execution_stub.rb +28 -0
  962. data/lib/puppet/util/feature.rb +129 -0
  963. data/lib/puppet/util/file_watcher.rb +31 -0
  964. data/lib/puppet/util/fileparsing.rb +404 -0
  965. data/lib/puppet/util/filetype.rb +358 -0
  966. data/lib/puppet/util/http_proxy.rb +6 -0
  967. data/lib/puppet/util/inifile.rb +335 -0
  968. data/lib/puppet/util/instance_loader.rb +69 -0
  969. data/lib/puppet/util/json.rb +94 -0
  970. data/lib/puppet/util/json_lockfile.rb +47 -0
  971. data/lib/puppet/util/ldap/connection.rb +75 -0
  972. data/lib/puppet/util/ldap/generator.rb +44 -0
  973. data/lib/puppet/util/ldap/manager.rb +283 -0
  974. data/lib/puppet/util/ldap.rb +4 -0
  975. data/lib/puppet/util/libuser.conf +15 -0
  976. data/lib/puppet/util/libuser.rb +13 -0
  977. data/lib/puppet/util/limits.rb +14 -0
  978. data/lib/puppet/util/lockfile.rb +66 -0
  979. data/lib/puppet/util/log/destination.rb +50 -0
  980. data/lib/puppet/util/log/destinations.rb +253 -0
  981. data/lib/puppet/util/log.rb +436 -0
  982. data/lib/puppet/util/logging.rb +304 -0
  983. data/lib/puppet/util/metaid.rb +22 -0
  984. data/lib/puppet/util/metric.rb +68 -0
  985. data/lib/puppet/util/monkey_patches.rb +114 -0
  986. data/lib/puppet/util/multi_match.rb +55 -0
  987. data/lib/puppet/util/network_device/base.rb +24 -0
  988. data/lib/puppet/util/network_device/config.rb +105 -0
  989. data/lib/puppet/util/network_device/transport/base.rb +26 -0
  990. data/lib/puppet/util/network_device/transport.rb +7 -0
  991. data/lib/puppet/util/network_device.rb +19 -0
  992. data/lib/puppet/util/package/version/debian.rb +177 -0
  993. data/lib/puppet/util/package/version/gem.rb +18 -0
  994. data/lib/puppet/util/package/version/pip.rb +173 -0
  995. data/lib/puppet/util/package/version/range/eq.rb +17 -0
  996. data/lib/puppet/util/package/version/range/gt.rb +17 -0
  997. data/lib/puppet/util/package/version/range/gt_eq.rb +17 -0
  998. data/lib/puppet/util/package/version/range/lt.rb +17 -0
  999. data/lib/puppet/util/package/version/range/lt_eq.rb +17 -0
  1000. data/lib/puppet/util/package/version/range/min_max.rb +26 -0
  1001. data/lib/puppet/util/package/version/range/simple.rb +13 -0
  1002. data/lib/puppet/util/package/version/range.rb +57 -0
  1003. data/lib/puppet/util/package/version/rpm.rb +75 -0
  1004. data/lib/puppet/util/package.rb +43 -0
  1005. data/lib/puppet/util/pidlock.rb +103 -0
  1006. data/lib/puppet/util/platform.rb +72 -0
  1007. data/lib/puppet/util/plist.rb +161 -0
  1008. data/lib/puppet/util/posix.rb +206 -0
  1009. data/lib/puppet/util/profiler/aggregate.rb +82 -0
  1010. data/lib/puppet/util/profiler/around_profiler.rb +68 -0
  1011. data/lib/puppet/util/profiler/logging.rb +50 -0
  1012. data/lib/puppet/util/profiler/object_counts.rb +19 -0
  1013. data/lib/puppet/util/profiler/wall_clock.rb +36 -0
  1014. data/lib/puppet/util/profiler.rb +55 -0
  1015. data/lib/puppet/util/provider_features.rb +183 -0
  1016. data/lib/puppet/util/psych_support.rb +32 -0
  1017. data/lib/puppet/util/rdoc/code_objects.rb +293 -0
  1018. data/lib/puppet/util/rdoc/generators/puppet_generator.rb +902 -0
  1019. data/lib/puppet/util/rdoc/generators/template/puppet/puppet.rb +1068 -0
  1020. data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +262 -0
  1021. data/lib/puppet/util/rdoc/parser/puppet_parser_rdoc2.rb +16 -0
  1022. data/lib/puppet/util/rdoc/parser.rb +14 -0
  1023. data/lib/puppet/util/rdoc.rb +54 -0
  1024. data/lib/puppet/util/reference.rb +94 -0
  1025. data/lib/puppet/util/resource_template.rb +63 -0
  1026. data/lib/puppet/util/retry_action.rb +47 -0
  1027. data/lib/puppet/util/rpm_compare.rb +196 -0
  1028. data/lib/puppet/util/rubygems.rb +67 -0
  1029. data/lib/puppet/util/run_mode.rb +164 -0
  1030. data/lib/puppet/util/selinux.rb +331 -0
  1031. data/lib/puppet/util/skip_tags.rb +15 -0
  1032. data/lib/puppet/util/splayer.rb +20 -0
  1033. data/lib/puppet/util/storage.rb +100 -0
  1034. data/lib/puppet/util/suidmanager.rb +167 -0
  1035. data/lib/puppet/util/symbolic_file_mode.rb +156 -0
  1036. data/lib/puppet/util/tag_set.rb +29 -0
  1037. data/lib/puppet/util/tagging.rb +131 -0
  1038. data/lib/puppet/util/terminal.rb +18 -0
  1039. data/lib/puppet/util/user_attr.rb +23 -0
  1040. data/lib/puppet/util/warnings.rb +35 -0
  1041. data/lib/puppet/util/watched_file.rb +40 -0
  1042. data/lib/puppet/util/watcher/change_watcher.rb +35 -0
  1043. data/lib/puppet/util/watcher/periodic_watcher.rb +38 -0
  1044. data/lib/puppet/util/watcher/timer.rb +21 -0
  1045. data/lib/puppet/util/watcher.rb +17 -0
  1046. data/lib/puppet/util/windows/access_control_entry.rb +86 -0
  1047. data/lib/puppet/util/windows/access_control_list.rb +116 -0
  1048. data/lib/puppet/util/windows/adsi.rb +662 -0
  1049. data/lib/puppet/util/windows/com.rb +228 -0
  1050. data/lib/puppet/util/windows/daemon.rb +340 -0
  1051. data/lib/puppet/util/windows/error.rb +86 -0
  1052. data/lib/puppet/util/windows/eventlog.rb +191 -0
  1053. data/lib/puppet/util/windows/file.rb +359 -0
  1054. data/lib/puppet/util/windows/monkey_patches/process.rb +413 -0
  1055. data/lib/puppet/util/windows/principal.rb +204 -0
  1056. data/lib/puppet/util/windows/process.rb +360 -0
  1057. data/lib/puppet/util/windows/registry.rb +443 -0
  1058. data/lib/puppet/util/windows/root_certs.rb +110 -0
  1059. data/lib/puppet/util/windows/security.rb +909 -0
  1060. data/lib/puppet/util/windows/security_descriptor.rb +64 -0
  1061. data/lib/puppet/util/windows/service.rb +708 -0
  1062. data/lib/puppet/util/windows/sid.rb +291 -0
  1063. data/lib/puppet/util/windows/string.rb +17 -0
  1064. data/lib/puppet/util/windows/user.rb +551 -0
  1065. data/lib/puppet/util/windows.rb +58 -0
  1066. data/lib/puppet/util/yaml.rb +67 -0
  1067. data/lib/puppet/util.rb +759 -0
  1068. data/lib/puppet/vendor/require_vendored.rb +4 -0
  1069. data/lib/puppet/vendor.rb +59 -0
  1070. data/lib/puppet/version.rb +98 -0
  1071. data/lib/puppet/x509/cert_provider.rb +405 -0
  1072. data/lib/puppet/x509/pem_store.rb +57 -0
  1073. data/lib/puppet/x509.rb +13 -0
  1074. data/lib/puppet.rb +348 -0
  1075. data/lib/puppet_pal.rb +10 -0
  1076. data/lib/puppet_x.rb +16 -0
  1077. data/locales/config.yaml +29 -0
  1078. data/locales/en/puppet.po +19 -0
  1079. data/locales/puppet.pot +9738 -0
  1080. data/man/man5/puppet.conf.5 +1407 -0
  1081. data/man/man8/puppet-agent.8 +135 -0
  1082. data/man/man8/puppet-apply.8 +67 -0
  1083. data/man/man8/puppet-catalog.8 +194 -0
  1084. data/man/man8/puppet-config.8 +103 -0
  1085. data/man/man8/puppet-describe.8 +35 -0
  1086. data/man/man8/puppet-device.8 +83 -0
  1087. data/man/man8/puppet-doc.8 +30 -0
  1088. data/man/man8/puppet-epp.8 +232 -0
  1089. data/man/man8/puppet-facts.8 +156 -0
  1090. data/man/man8/puppet-filebucket.8 +134 -0
  1091. data/man/man8/puppet-generate.8 +54 -0
  1092. data/man/man8/puppet-help.8 +46 -0
  1093. data/man/man8/puppet-lookup.8 +71 -0
  1094. data/man/man8/puppet-module.8 +220 -0
  1095. data/man/man8/puppet-node.8 +142 -0
  1096. data/man/man8/puppet-parser.8 +87 -0
  1097. data/man/man8/puppet-plugin.8 +50 -0
  1098. data/man/man8/puppet-report.8 +84 -0
  1099. data/man/man8/puppet-resource.8 +63 -0
  1100. data/man/man8/puppet-script.8 +48 -0
  1101. data/man/man8/puppet-ssl.8 +45 -0
  1102. data/man/man8/puppet.8 +98 -0
  1103. data/tasks/tag.rake +34 -0
  1104. metadata +1336 -0
@@ -0,0 +1,1105 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Puppet::Pops
4
+ module Types
5
+ # @api private
6
+ class TypePathElement
7
+ attr_reader :key
8
+
9
+ def initialize(key)
10
+ @key = key
11
+ end
12
+
13
+ def hash
14
+ key.hash
15
+ end
16
+
17
+ def ==(o)
18
+ self.class == o.class && key == o.key
19
+ end
20
+
21
+ def eql?(o)
22
+ self == o
23
+ end
24
+ end
25
+
26
+ # @api private
27
+ class SubjectPathElement < TypePathElement
28
+ def to_s
29
+ key
30
+ end
31
+ end
32
+
33
+ # @api private
34
+ class EntryValuePathElement < TypePathElement
35
+ def to_s
36
+ "entry '#{key}'"
37
+ end
38
+ end
39
+
40
+ # @api private
41
+ class EntryKeyPathElement < TypePathElement
42
+ def to_s
43
+ "key of entry '#{key}'"
44
+ end
45
+ end
46
+
47
+ # @api private
48
+ class ParameterPathElement < TypePathElement
49
+ def to_s
50
+ "parameter '#{key}'"
51
+ end
52
+ end
53
+
54
+ # @api private
55
+ class ReturnTypeElement < TypePathElement
56
+ def initialize(name = 'return')
57
+ super(name)
58
+ end
59
+
60
+ def to_s
61
+ key
62
+ end
63
+ end
64
+
65
+ # @api private
66
+ class BlockPathElement < ParameterPathElement
67
+ def initialize(name = 'block')
68
+ super(name)
69
+ end
70
+
71
+ def to_s
72
+ key
73
+ end
74
+ end
75
+
76
+ # @api private
77
+ class ArrayPathElement < TypePathElement
78
+ def to_s
79
+ "index #{key}"
80
+ end
81
+ end
82
+
83
+ # @api private
84
+ class VariantPathElement < TypePathElement
85
+ def to_s
86
+ "variant #{key}"
87
+ end
88
+ end
89
+
90
+ # @api private
91
+ class SignaturePathElement < VariantPathElement
92
+ def to_s
93
+ "#{key + 1}."
94
+ end
95
+ end
96
+
97
+ # @api private
98
+ class Mismatch
99
+ attr_reader :path
100
+
101
+ def initialize(path)
102
+ @path = path || EMPTY_ARRAY
103
+ end
104
+
105
+ def canonical_path
106
+ @canonical_path ||= @path.reject { |e| e.is_a?(VariantPathElement) }
107
+ end
108
+
109
+ def message(variant, position)
110
+ "#{variant}unknown mismatch#{position}"
111
+ end
112
+
113
+ def merge(path, o)
114
+ self.class.new(path)
115
+ end
116
+
117
+ def ==(o)
118
+ self.class == o.class && canonical_path == o.canonical_path
119
+ end
120
+
121
+ def eql?(o)
122
+ self == o
123
+ end
124
+
125
+ def hash
126
+ canonical_path.hash
127
+ end
128
+
129
+ def chop_path(element_index)
130
+ return self if element_index >= @path.size
131
+
132
+ chopped_path = @path.clone
133
+ chopped_path.delete_at(element_index)
134
+ copy = clone
135
+ copy.instance_variable_set(:@path, chopped_path)
136
+ copy
137
+ end
138
+
139
+ def path_string
140
+ @path.join(' ')
141
+ end
142
+
143
+ def to_s
144
+ format
145
+ end
146
+
147
+ def format
148
+ p = @path
149
+ variant = ''
150
+ position = ''
151
+ unless p.empty?
152
+ f = p.first
153
+ if f.is_a?(SignaturePathElement)
154
+ variant = " #{f}"
155
+ p = p.drop(1)
156
+ end
157
+ position = " #{p.join(' ')}" unless p.empty?
158
+ end
159
+ message(variant, position)
160
+ end
161
+ end
162
+
163
+ # @abstract
164
+ # @api private
165
+ class KeyMismatch < Mismatch
166
+ attr_reader :key
167
+
168
+ def initialize(path, key)
169
+ super(path)
170
+ @key = key
171
+ end
172
+
173
+ def ==(o)
174
+ super.==(o) && key == o.key
175
+ end
176
+
177
+ def hash
178
+ super.hash ^ key.hash
179
+ end
180
+ end
181
+
182
+ # @api private
183
+ class MissingKey < KeyMismatch
184
+ def message(variant, position)
185
+ "#{variant}#{position} expects a value for key '#{key}'"
186
+ end
187
+ end
188
+
189
+ # @api private
190
+ class MissingParameter < KeyMismatch
191
+ def message(variant, position)
192
+ "#{variant}#{position} expects a value for parameter '#{key}'"
193
+ end
194
+ end
195
+
196
+ # @api private
197
+ class ExtraneousKey < KeyMismatch
198
+ def message(variant, position)
199
+ "#{variant}#{position} unrecognized key '#{@key}'"
200
+ end
201
+ end
202
+
203
+ # @api private
204
+ class InvalidParameter < ExtraneousKey
205
+ def message(variant, position)
206
+ "#{variant}#{position} has no parameter named '#{@key}'"
207
+ end
208
+ end
209
+
210
+ # @api private
211
+ class UnexpectedBlock < Mismatch
212
+ def message(variant, position)
213
+ "#{variant}#{position} does not expect a block"
214
+ end
215
+ end
216
+
217
+ # @api private
218
+ class MissingRequiredBlock < Mismatch
219
+ def message(variant, position)
220
+ "#{variant}#{position} expects a block"
221
+ end
222
+ end
223
+
224
+ # @api private
225
+ class UnresolvedTypeReference < Mismatch
226
+ attr_reader :unresolved
227
+
228
+ def initialize(path, unresolved)
229
+ super(path)
230
+ @unresolved = unresolved
231
+ end
232
+
233
+ def ==(o)
234
+ super.==(o) && @unresolved == o.unresolved
235
+ end
236
+
237
+ def hash
238
+ @unresolved.hash
239
+ end
240
+
241
+ def message(variant, position)
242
+ "#{variant}#{position} references an unresolved type '#{@unresolved}'"
243
+ end
244
+ end
245
+
246
+ # @api private
247
+ class ExpectedActualMismatch < Mismatch
248
+ attr_reader :expected, :actual
249
+
250
+ def initialize(path, expected, actual)
251
+ super(path)
252
+ @expected = (expected.is_a?(Array) ? PVariantType.maybe_create(expected) : expected).normalize
253
+ @actual = actual.normalize
254
+ end
255
+
256
+ def ==(o)
257
+ super.==(o) && expected == o.expected && actual == o.actual
258
+ end
259
+
260
+ def hash
261
+ [canonical_path, expected, actual].hash
262
+ end
263
+ end
264
+
265
+ # @api private
266
+ class TypeMismatch < ExpectedActualMismatch
267
+ include LabelProvider
268
+
269
+ # @return A new instance with the least restrictive respective boundaries
270
+ def merge(path, o)
271
+ self.class.new(path, [expected, o.expected].flatten.uniq, actual)
272
+ end
273
+
274
+ def message(variant, position)
275
+ e = expected
276
+ a = actual
277
+ multi = false
278
+ if e.is_a?(POptionalType)
279
+ e = e.optional_type
280
+ optional = true
281
+ end
282
+
283
+ if e.is_a?(PVariantType)
284
+ e = e.types
285
+ end
286
+
287
+ if e.is_a?(Array)
288
+ if report_detailed?(e, a)
289
+ a = detailed_actual_to_s(e, a)
290
+ e = e.map(&:to_alias_expanded_s)
291
+ else
292
+ e = e.map { |t| short_name(t) }.uniq
293
+ a = short_name(a)
294
+ end
295
+ e.insert(0, 'Undef') if optional
296
+ case e.size
297
+ when 1
298
+ e = e[0]
299
+ when 2
300
+ e = "#{e[0]} or #{e[1]}"
301
+ multi = true
302
+ else
303
+ e = "#{e[0..e.size - 2].join(', ')}, or #{e[e.size - 1]}"
304
+ multi = true
305
+ end
306
+ else
307
+ if report_detailed?(e, a)
308
+ a = detailed_actual_to_s(e, a)
309
+ e = e.to_alias_expanded_s
310
+ else
311
+ e = short_name(e)
312
+ a = short_name(a)
313
+ end
314
+ if optional
315
+ e = "Undef or #{e}"
316
+ multi = true
317
+ end
318
+ end
319
+ if multi
320
+ "#{variant}#{position} expects a value of type #{e}, got #{label(a)}"
321
+ else
322
+ "#{variant}#{position} expects #{a_an(e)} value, got #{label(a)}"
323
+ end
324
+ end
325
+
326
+ def label(o)
327
+ o.to_s
328
+ end
329
+
330
+ private
331
+
332
+ def short_name(t)
333
+ # Ensure that Optional, NotUndef, Sensitive, and Type are reported with included
334
+ # type parameter.
335
+ if t.is_a?(PTypeWithContainedType) && !(t.type.nil? || t.type.instance_of?(PAnyType))
336
+ "#{t.name}[#{t.type.name}]"
337
+ else
338
+ t.name.nil? ? t.simple_name : t.name
339
+ end
340
+ end
341
+
342
+ # Answers the question if `e` is a specialized type of `a`
343
+ # @param e [PAnyType] the expected type
344
+ # @param a [PAnyType] the actual type
345
+ # @return [Boolean] `true` when the _e_ is a specialization of _a_
346
+ #
347
+ def specialization(e, a)
348
+ case e
349
+ when PStructType
350
+ a.is_a?(PHashType)
351
+ when PTupleType
352
+ a.is_a?(PArrayType)
353
+ else
354
+ false
355
+ end
356
+ end
357
+
358
+ # Decides whether or not the report must be fully detailed, or if generalization can be permitted
359
+ # in the mismatch report. All comparisons are made using resolved aliases rather than the alias
360
+ # itself.
361
+ #
362
+ # @param e [PAnyType,Array[PAnyType]] the expected type or array of expected types
363
+ # @param a [PAnyType] the actual type
364
+ # @return [Boolean] `true` when the class of _a_ equals the class _e_ or,
365
+ # in case _e_ is an `Array`, the class of at least one element of _e_
366
+ def always_fully_detailed?(e, a)
367
+ if e.is_a?(Array)
368
+ e.any? { |t| always_fully_detailed?(t, a) }
369
+ else
370
+ e.instance_of?(a.class) || e.is_a?(PTypeAliasType) || a.is_a?(PTypeAliasType) || specialization(e, a)
371
+ end
372
+ end
373
+
374
+ # @param e [PAnyType,Array[PAnyType]] the expected type or array of expected types
375
+ # @param a [PAnyType] the actual type
376
+ # @return [Boolean] `true` when _a_ is assignable to _e_ or, in case _e_ is an `Array`,
377
+ # to at least one element of _e_
378
+ def any_assignable?(e, a)
379
+ e.is_a?(Array) ? e.any? { |t| t.assignable?(a) } : e.assignable?(a)
380
+ end
381
+
382
+ # @param e [PAnyType,Array[PAnyType]] the expected type or array of expected types
383
+ # @param a [PAnyType] the actual type
384
+ # @return [Boolean] `true` when _a_ is assignable to the default generalization of _e_ or,
385
+ # in case _e_ is an `Array`, to the default generalization of at least one element of _e_
386
+ def assignable_to_default?(e, a)
387
+ if e.is_a?(Array)
388
+ e.any? { |t| assignable_to_default?(t, a) }
389
+ else
390
+ e = e.resolved_type if e.is_a?(PTypeAliasType)
391
+ e.class::DEFAULT.assignable?(a)
392
+ end
393
+ end
394
+
395
+ # @param e [PAnyType,Array[PAnyType]] the expected type or array of expected types
396
+ # @param a [PAnyType] the actual type
397
+ # @return [Boolean] `true` when either #always_fully_detailed or #assignable_to_default returns `true`
398
+ def report_detailed?(e, a)
399
+ always_fully_detailed?(e, a) || assignable_to_default?(e, a)
400
+ end
401
+
402
+ # Returns its argument with all type aliases resolved
403
+ # @param e [PAnyType,Array[PAnyType]] the expected type or array of expected types
404
+ # @return [PAnyType,Array[PAnyType]] the resolved result
405
+ def all_resolved(e)
406
+ if e.is_a?(Array)
407
+ e.map { |t| all_resolved(t) }
408
+ else
409
+ e.is_a?(PTypeAliasType) ? all_resolved(e.resolved_type) : e
410
+ end
411
+ end
412
+
413
+ # Returns a string that either represents the generalized type _a_ or the type _a_ verbatim. The latter
414
+ # form is used when at least one of the following conditions are met:
415
+ #
416
+ # - #always_fully_detailed returns `true` for the resolved type of _e_ and _a_
417
+ # - #any_assignable? returns `true` for the resolved type of _e_ and the generalized type of _a_.
418
+ #
419
+ # @param e [PAnyType,Array[PAnyType]] the expected type or array of expected types
420
+ # @param a [PAnyType] the actual type
421
+ # @return [String] The string representation of the type _a_ or generalized type _a_
422
+ def detailed_actual_to_s(e, a)
423
+ e = all_resolved(e)
424
+ if always_fully_detailed?(e, a)
425
+ a.to_alias_expanded_s
426
+ else
427
+ any_assignable?(e, a.generalize) ? a.to_alias_expanded_s : a.simple_name
428
+ end
429
+ end
430
+ end
431
+
432
+ # @api private
433
+ class PatternMismatch < TypeMismatch
434
+ def message(variant, position)
435
+ e = expected
436
+ value_pfx = ''
437
+ if e.is_a?(POptionalType)
438
+ e = e.optional_type
439
+ value_pfx = 'an undef value or '
440
+ end
441
+ "#{variant}#{position} expects #{value_pfx}a match for #{e.to_alias_expanded_s}, got #{actual_string}"
442
+ end
443
+
444
+ def actual_string
445
+ a = actual
446
+ a.is_a?(PStringType) && !a.value.nil? ? "'#{a.value}'" : short_name(a)
447
+ end
448
+ end
449
+
450
+ # @api private
451
+ class SizeMismatch < ExpectedActualMismatch
452
+ def from
453
+ @expected.from || 0
454
+ end
455
+
456
+ def to
457
+ @expected.to || Float::INFINITY
458
+ end
459
+
460
+ # @return A new instance with the least restrictive respective boundaries
461
+ def merge(path, o)
462
+ range = PIntegerType.new(from < o.from ? from : o.from, to > o.to ? to : o.to)
463
+ self.class.new(path, range, @actual)
464
+ end
465
+
466
+ def message(variant, position)
467
+ "#{variant}#{position} expects size to be #{range_to_s(expected, '0')}, got #{range_to_s(actual, '0')}"
468
+ end
469
+
470
+ def range_to_s(range, zero_string)
471
+ min = range.from || 0
472
+ max = range.to || Float::INFINITY
473
+ if min == max
474
+ min == 0 ? zero_string : min.to_s
475
+ elsif min == 0
476
+ max == Float::INFINITY ? 'unlimited' : "at most #{max}"
477
+ elsif max == Float::INFINITY
478
+ "at least #{min}"
479
+ else
480
+ "between #{min} and #{max}"
481
+ end
482
+ end
483
+ end
484
+
485
+ # @api private
486
+ class CountMismatch < SizeMismatch
487
+ def message(variant, position)
488
+ min = expected.from || 0
489
+ max = expected.to || Float::INFINITY
490
+ suffix = min == 1 && (max == 1 || max == Float::INFINITY) || min == 0 && max == 1 ? '' : 's'
491
+ "#{variant}#{position} expects #{range_to_s(expected, 'no')} argument#{suffix}, got #{range_to_s(actual, 'none')}"
492
+ end
493
+ end
494
+
495
+ # @api private
496
+ class TypeMismatchDescriber
497
+ def self.validate_parameters(subject, params_struct, given_hash, missing_ok = false)
498
+ singleton.validate_parameters(subject, params_struct, given_hash, missing_ok)
499
+ end
500
+
501
+ def self.validate_default_parameter(subject, param_name, param_type, value)
502
+ singleton.validate_default_parameter(subject, param_name, param_type, value)
503
+ end
504
+
505
+ def self.describe_signatures(closure, signatures, args_tuple)
506
+ singleton.describe_signatures(closure, signatures, args_tuple)
507
+ end
508
+
509
+ def self.singleton
510
+ @singleton ||= new
511
+ end
512
+
513
+ def tense_deprecated
514
+ # TRANSLATORS TypeMismatchDescriber is a class name and 'tense' is a method name and should not be translated
515
+ message = _("Passing a 'tense' argument to the TypeMismatchDescriber is deprecated and ignored.")
516
+ message += ' ' + _("Everything is now reported using present tense")
517
+ Puppet.warn_once('deprecations', 'typemismatch#tense', message)
518
+ end
519
+
520
+ # Validates that all entries in the give_hash exists in the given param_struct, that their type conforms
521
+ # with the corresponding param_struct element and that all required values are provided.
522
+ #
523
+ # @param subject [String] string to be prepended to the exception message
524
+ # @param params_struct [PStructType] Struct to use for validation
525
+ # @param given_hash [Hash<String,Object>] the parameters to validate
526
+ # @param missing_ok [Boolean] Do not generate errors on missing parameters
527
+ # @param tense [Symbol] deprecated and ignored
528
+ #
529
+ def validate_parameters(subject, params_struct, given_hash, missing_ok = false, tense = :ignored)
530
+ tense_deprecated unless tense == :ignored
531
+ errors = describe_struct_signature(params_struct, given_hash, missing_ok).flatten
532
+ case errors.size
533
+ when 0
534
+ # do nothing
535
+ when 1
536
+ raise Puppet::ParseError, "#{subject}:#{errors[0].format}"
537
+ else
538
+ errors_str = errors.map(&:format).join("\n ")
539
+ raise Puppet::ParseError, "#{subject}:\n #{errors_str}"
540
+ end
541
+ end
542
+
543
+ # Describe a confirmed mismatch using present tense
544
+ #
545
+ # @param name [String] name of mismatch
546
+ # @param expected [PAnyType] expected type
547
+ # @param actual [PAnyType] actual type
548
+ # @param tense [Symbol] deprecated and ignored
549
+ #
550
+ def describe_mismatch(name, expected, actual, tense = :ignored)
551
+ tense_deprecated unless tense == :ignored
552
+ errors = describe(expected, actual, [SubjectPathElement.new(name)])
553
+ case errors.size
554
+ when 0
555
+ ''
556
+ when 1
557
+ errors[0].format.strip
558
+ else
559
+ errors.map(&:format).join("\n ")
560
+ end
561
+ end
562
+
563
+ # @param subject [String] string to be prepended to the exception message
564
+ # @param param_name [String] parameter name
565
+ # @param param_type [PAnyType] parameter type
566
+ # @param value [Object] value to be validated against the given type
567
+ # @param tense [Symbol] deprecated and ignored
568
+ #
569
+ def validate_default_parameter(subject, param_name, param_type, value, tense = :ignored)
570
+ tense_deprecated unless tense == :ignored
571
+ unless param_type.instance?(value)
572
+ errors = describe(param_type, TypeCalculator.singleton.infer_set(value).generalize, [ParameterPathElement.new(param_name)])
573
+ case errors.size
574
+ when 0
575
+ # do nothing
576
+ when 1
577
+ raise Puppet::ParseError, "#{subject}:#{errors[0].format}"
578
+ else
579
+ errors_str = errors.map(&:format).join("\n ")
580
+ raise Puppet::ParseError, "#{subject}:\n #{errors_str}"
581
+ end
582
+ end
583
+ end
584
+
585
+ def get_deferred_function_return_type(value)
586
+ func = Puppet.lookup(:loaders).private_environment_loader
587
+ .load(:function, value.name)
588
+ dispatcher = func.class.dispatcher.find_matching_dispatcher(value.arguments)
589
+ raise ArgumentError, "No matching arity found for #{func.class.name} with arguments #{value.arguments}" unless dispatcher
590
+
591
+ dispatcher.type.return_type
592
+ end
593
+ private :get_deferred_function_return_type
594
+
595
+ # Validates that all entries in the _param_hash_ exists in the given param_struct, that their type conforms
596
+ # with the corresponding param_struct element and that all required values are provided.
597
+ # An error message is created for each problem found.
598
+ #
599
+ # @param params_struct [PStructType] Struct to use for validation
600
+ # @param param_hash [Hash<String,Object>] The parameters to validate
601
+ # @param missing_ok [Boolean] Do not generate errors on missing parameters
602
+ # @return [Array<Mismatch>] An array of found errors. An empty array indicates no errors.
603
+ def describe_struct_signature(params_struct, param_hash, missing_ok = false)
604
+ param_type_hash = params_struct.hashed_elements
605
+ result = param_hash.each_key.reject { |name| param_type_hash.include?(name) }.map { |name| InvalidParameter.new(nil, name) }
606
+
607
+ params_struct.elements.each do |elem|
608
+ name = elem.name
609
+ value = param_hash[name]
610
+ value_type = elem.value_type
611
+ if param_hash.include?(name)
612
+ if Puppet::Pops::Types::TypeFactory.deferred.implementation_class == value.class
613
+ if (df_return_type = get_deferred_function_return_type(value))
614
+ result << describe(value_type, df_return_type, [ParameterPathElement.new(name)]) unless value_type.generalize.assignable?(df_return_type.generalize)
615
+ else
616
+ warning_text = _("Deferred function %{function_name} has no return_type, unable to guarantee value type during compilation.") %
617
+ { function_name: value.name }
618
+ Puppet.warn_once('deprecations',
619
+ "#{value.name}_deferred_warning",
620
+ warning_text)
621
+ end
622
+ else
623
+ result << describe(value_type, TypeCalculator.singleton.infer_set(value), [ParameterPathElement.new(name)]) unless value_type.instance?(value)
624
+ end
625
+ else
626
+ result << MissingParameter.new(nil, name) unless missing_ok || elem.key_type.is_a?(POptionalType)
627
+ end
628
+ end
629
+ result
630
+ end
631
+
632
+ def describe_signatures(closure, signatures, args_tuple, tense = :ignored)
633
+ tense_deprecated unless tense == :ignored
634
+ error_arrays = []
635
+ signatures.each_with_index do |signature, index|
636
+ error_arrays << describe_signature_arguments(signature, args_tuple, [SignaturePathElement.new(index)])
637
+ end
638
+
639
+ # Skip block checks if all signatures have argument errors
640
+ unless error_arrays.all? { |a| !a.empty? }
641
+ block_arrays = []
642
+ signatures.each_with_index do |signature, index|
643
+ block_arrays << describe_signature_block(signature, args_tuple, [SignaturePathElement.new(index)])
644
+ end
645
+ bc_count = block_arrays.count { |a| !a.empty? }
646
+ if bc_count == block_arrays.size
647
+ # Skip argument errors when all alternatives have block errors
648
+ error_arrays = block_arrays
649
+ elsif bc_count > 0
650
+ # Merge errors giving argument errors precedence over block errors
651
+ error_arrays.each_with_index { |a, index| error_arrays[index] = block_arrays[index] if a.empty? }
652
+ end
653
+ end
654
+ return nil if error_arrays.empty?
655
+
656
+ label = closure == 'lambda' ? 'block' : "'#{closure}'"
657
+ errors = merge_descriptions(0, CountMismatch, error_arrays)
658
+ if errors.size == 1
659
+ "#{label}#{errors[0].format}"
660
+ else
661
+ if signatures.size == 1
662
+ sig = signatures[0]
663
+ result = ["#{label} expects (#{signature_string(sig)})"]
664
+ result.concat(error_arrays[0].map { |e| " rejected:#{e.chop_path(0).format}" })
665
+ else
666
+ result = ["The function #{label} was called with arguments it does not accept. It expects one of:"]
667
+ signatures.each_with_index do |sg, index|
668
+ result << " (#{signature_string(sg)})"
669
+ result.concat(error_arrays[index].map { |e| " rejected:#{e.chop_path(0).format}" })
670
+ end
671
+ end
672
+ result.join("\n")
673
+ end
674
+ end
675
+
676
+ def describe_signature_arguments(signature, args_tuple, path)
677
+ params_tuple = signature.type.param_types
678
+ params_size_t = params_tuple.size_type || TypeFactory.range(*params_tuple.size_range)
679
+
680
+ case args_tuple
681
+ when PTupleType
682
+ arg_types = args_tuple.types
683
+ when PArrayType
684
+ arg_types = Array.new(params_tuple.types.size, args_tuple.element_type || PUndefType::DEFAULT)
685
+ else
686
+ return [TypeMismatch.new(path, params_tuple, args_tuple)]
687
+ end
688
+
689
+ if arg_types.last.kind_of_callable?
690
+ # Check other arguments
691
+ arg_count = arg_types.size - 1
692
+ describe_no_block_arguments(signature, arg_types, path, params_size_t, TypeFactory.range(arg_count, arg_count), arg_count)
693
+ else
694
+ args_size_t = TypeFactory.range(*args_tuple.size_range)
695
+ describe_no_block_arguments(signature, arg_types, path, params_size_t, args_size_t, arg_types.size)
696
+ end
697
+ end
698
+
699
+ def describe_signature_block(signature, args_tuple, path)
700
+ param_block_t = signature.block_type
701
+ arg_block_t = args_tuple.is_a?(PTupleType) ? args_tuple.types.last : nil
702
+ if TypeCalculator.is_kind_of_callable?(arg_block_t)
703
+ # Can't pass a block to a callable that doesn't accept one
704
+ if param_block_t.nil?
705
+ [UnexpectedBlock.new(path)]
706
+ else
707
+ # Check that the block is of the right type
708
+ describe(param_block_t, arg_block_t, path + [BlockPathElement.new])
709
+ end
710
+ elsif param_block_t.nil? || param_block_t.assignable?(PUndefType::DEFAULT)
711
+ # Check that the block is optional
712
+ EMPTY_ARRAY
713
+ else
714
+ [MissingRequiredBlock.new(path)]
715
+ end
716
+ end
717
+
718
+ def describe_no_block_arguments(signature, atypes, path, expected_size, actual_size, arg_count)
719
+ # not assignable if the number of types in actual is outside number of types in expected
720
+ if expected_size.assignable?(actual_size)
721
+ etypes = signature.type.param_types.types
722
+ enames = signature.parameter_names
723
+ arg_count.times do |index|
724
+ adx = index >= etypes.size ? etypes.size - 1 : index
725
+ etype = etypes[adx]
726
+ unless etype.assignable?(atypes[index])
727
+ descriptions = describe(etype, atypes[index], path + [ParameterPathElement.new(enames[adx])])
728
+ return descriptions unless descriptions.empty?
729
+ end
730
+ end
731
+ EMPTY_ARRAY
732
+ else
733
+ [CountMismatch.new(path, expected_size, actual_size)]
734
+ end
735
+ end
736
+
737
+ def describe_PVariantType(expected, original, actual, path)
738
+ variant_descriptions = []
739
+ types = expected.types
740
+ types = [PUndefType::DEFAULT] + types if original.is_a?(POptionalType)
741
+ types.each_with_index do |vt, index|
742
+ d = describe(vt, actual, path + [VariantPathElement.new(index)])
743
+ return EMPTY_ARRAY if d.empty?
744
+
745
+ variant_descriptions << d
746
+ end
747
+ descriptions = merge_descriptions(path.length, SizeMismatch, variant_descriptions)
748
+ if original.is_a?(PTypeAliasType) && descriptions.size == 1
749
+ # All variants failed in this alias so we report it as a mismatch on the alias
750
+ # rather than reporting individual failures of the variants
751
+ [TypeMismatch.new(path, original, actual)]
752
+ else
753
+ descriptions
754
+ end
755
+ end
756
+
757
+ def merge_descriptions(varying_path_position, size_mismatch_class, variant_descriptions)
758
+ descriptions = variant_descriptions.flatten
759
+ [size_mismatch_class, MissingRequiredBlock, UnexpectedBlock, TypeMismatch].each do |mismatch_class|
760
+ mismatches = descriptions.select { |desc| desc.is_a?(mismatch_class) }
761
+ next unless mismatches.size == variant_descriptions.size
762
+
763
+ # If they all have the same canonical path, then we can compact this into one
764
+ generic_mismatch = mismatches.inject do |prev, curr|
765
+ break nil unless prev.canonical_path == curr.canonical_path
766
+
767
+ prev.merge(prev.path, curr)
768
+ end
769
+ next if generic_mismatch.nil?
770
+
771
+ # Report the generic mismatch and skip the rest
772
+ descriptions = [generic_mismatch]
773
+ break
774
+ end
775
+ descriptions = descriptions.uniq
776
+ descriptions.size == 1 ? [descriptions[0].chop_path(varying_path_position)] : descriptions
777
+ end
778
+
779
+ def describe_POptionalType(expected, original, actual, path)
780
+ return EMPTY_ARRAY if actual.is_a?(PUndefType) || expected.optional_type.nil?
781
+
782
+ internal_describe(expected.optional_type, original.is_a?(PTypeAliasType) ? original : expected, actual, path)
783
+ end
784
+
785
+ def describe_PEnumType(expected, original, actual, path)
786
+ [PatternMismatch.new(path, original, actual)]
787
+ end
788
+
789
+ def describe_PPatternType(expected, original, actual, path)
790
+ [PatternMismatch.new(path, original, actual)]
791
+ end
792
+
793
+ def describe_PTypeAliasType(expected, original, actual, path)
794
+ internal_describe(expected.resolved_type.normalize, expected, actual, path)
795
+ end
796
+
797
+ def describe_PArrayType(expected, original, actual, path)
798
+ descriptions = []
799
+ element_type = expected.element_type || PAnyType::DEFAULT
800
+ case actual
801
+ when PTupleType
802
+ types = actual.types
803
+ expected_size = expected.size_type || PCollectionType::DEFAULT_SIZE
804
+ actual_size = actual.size_type || PIntegerType.new(types.size, types.size)
805
+ if expected_size.assignable?(actual_size)
806
+ types.each_with_index do |type, idx|
807
+ descriptions.concat(describe(element_type, type, path + [ArrayPathElement.new(idx)])) unless element_type.assignable?(type)
808
+ end
809
+ else
810
+ descriptions << SizeMismatch.new(path, expected_size, actual_size)
811
+ end
812
+ when PArrayType
813
+ expected_size = expected.size_type
814
+ actual_size = actual.size_type || PCollectionType::DEFAULT_SIZE
815
+ if expected_size.nil? || expected_size.assignable?(actual_size)
816
+ descriptions << TypeMismatch.new(path, original, PArrayType.new(actual.element_type))
817
+ else
818
+ descriptions << SizeMismatch.new(path, expected_size, actual_size)
819
+ end
820
+ else
821
+ descriptions << TypeMismatch.new(path, original, actual)
822
+ end
823
+ descriptions
824
+ end
825
+
826
+ def describe_PHashType(expected, original, actual, path)
827
+ descriptions = []
828
+ key_type = expected.key_type || PAnyType::DEFAULT
829
+ value_type = expected.value_type || PAnyType::DEFAULT
830
+ case actual
831
+ when PStructType
832
+ elements = actual.elements
833
+ expected_size = expected.size_type || PCollectionType::DEFAULT_SIZE
834
+ actual_size = PIntegerType.new(elements.count { |a| !a.key_type.assignable?(PUndefType::DEFAULT) }, elements.size)
835
+ if expected_size.assignable?(actual_size)
836
+ elements.each do |a|
837
+ descriptions.concat(describe(key_type, a.key_type, path + [EntryKeyPathElement.new(a.name)])) unless key_type.assignable?(a.key_type)
838
+ descriptions.concat(describe(value_type, a.value_type, path + [EntryValuePathElement.new(a.name)])) unless value_type.assignable?(a.value_type)
839
+ end
840
+ else
841
+ descriptions << SizeMismatch.new(path, expected_size, actual_size)
842
+ end
843
+ when PHashType
844
+ expected_size = expected.size_type
845
+ actual_size = actual.size_type || PCollectionType::DEFAULT_SIZE
846
+ if expected_size.nil? || expected_size.assignable?(actual_size)
847
+ descriptions << TypeMismatch.new(path, original, PHashType.new(actual.key_type, actual.value_type))
848
+ else
849
+ descriptions << SizeMismatch.new(path, expected_size, actual_size)
850
+ end
851
+ else
852
+ descriptions << TypeMismatch.new(path, original, actual)
853
+ end
854
+ descriptions
855
+ end
856
+
857
+ def describe_PStructType(expected, original, actual, path)
858
+ elements = expected.elements
859
+ descriptions = []
860
+ case actual
861
+ when PStructType
862
+ h2 = actual.hashed_elements.clone
863
+ elements.each do |e1|
864
+ key = e1.name
865
+ e2 = h2.delete(key)
866
+ if e2.nil?
867
+ descriptions << MissingKey.new(path, key) unless e1.key_type.assignable?(PUndefType::DEFAULT)
868
+ else
869
+ descriptions.concat(describe(e1.key_type, e2.key_type, path + [EntryKeyPathElement.new(key)])) unless e1.key_type.assignable?(e2.key_type)
870
+ descriptions.concat(describe(e1.value_type, e2.value_type, path + [EntryValuePathElement.new(key)])) unless e1.value_type.assignable?(e2.value_type)
871
+ end
872
+ end
873
+ h2.each_key { |key| descriptions << ExtraneousKey.new(path, key) }
874
+ when PHashType
875
+ actual_size = actual.size_type || PCollectionType::DEFAULT_SIZE
876
+ expected_size = PIntegerType.new(elements.count { |e| !e.key_type.assignable?(PUndefType::DEFAULT) }, elements.size)
877
+ if expected_size.assignable?(actual_size)
878
+ descriptions << TypeMismatch.new(path, original, PHashType.new(actual.key_type, actual.value_type))
879
+ else
880
+ descriptions << SizeMismatch.new(path, expected_size, actual_size)
881
+ end
882
+ else
883
+ descriptions << TypeMismatch.new(path, original, actual)
884
+ end
885
+ descriptions
886
+ end
887
+
888
+ def describe_PTupleType(expected, original, actual, path)
889
+ describe_tuple(expected, original, actual, path, SizeMismatch)
890
+ end
891
+
892
+ def describe_argument_tuple(expected, actual, path)
893
+ describe_tuple(expected, expected, actual, path, CountMismatch)
894
+ end
895
+
896
+ def describe_tuple(expected, original, actual, path, size_mismatch_class)
897
+ return EMPTY_ARRAY if expected == actual || expected.types.empty? && actual.is_a?(PArrayType)
898
+
899
+ expected_size = expected.size_type || TypeFactory.range(*expected.size_range)
900
+
901
+ case actual
902
+ when PTupleType
903
+ actual_size = actual.size_type || TypeFactory.range(*actual.size_range)
904
+
905
+ # not assignable if the number of types in actual is outside number of types in expected
906
+ if expected_size.assignable?(actual_size)
907
+ etypes = expected.types
908
+ descriptions = []
909
+ unless etypes.empty?
910
+ actual.types.each_with_index do |atype, index|
911
+ adx = index >= etypes.size ? etypes.size - 1 : index
912
+ descriptions.concat(describe(etypes[adx], atype, path + [ArrayPathElement.new(adx)]))
913
+ end
914
+ end
915
+ descriptions
916
+ else
917
+ [size_mismatch_class.new(path, expected_size, actual_size)]
918
+ end
919
+ when PArrayType
920
+ t2_entry = actual.element_type
921
+
922
+ if t2_entry.nil?
923
+ # Array of anything can not be assigned (unless tuple is tuple of anything) - this case
924
+ # was handled at the top of this method.
925
+ #
926
+ [TypeMismatch.new(path, original, actual)]
927
+ else
928
+ expected_size = expected.size_type || TypeFactory.range(*expected.size_range)
929
+ actual_size = actual.size_type || PCollectionType::DEFAULT_SIZE
930
+ if expected_size.assignable?(actual_size)
931
+ descriptions = []
932
+ expected.types.each_with_index do |etype, index|
933
+ descriptions.concat(describe(etype, actual.element_type, path + [ArrayPathElement.new(index)]))
934
+ end
935
+ descriptions
936
+ else
937
+ [size_mismatch_class.new(path, expected_size, actual_size)]
938
+ end
939
+ end
940
+ else
941
+ [TypeMismatch.new(path, original, actual)]
942
+ end
943
+ end
944
+
945
+ def describe_PCallableType(expected, original, actual, path)
946
+ if actual.is_a?(PCallableType)
947
+ # nil param_types means, any other Callable is assignable
948
+ if expected.param_types.nil? && expected.return_type.nil?
949
+ EMPTY_ARRAY
950
+ else
951
+ # NOTE: these tests are made in reverse as it is calling the callable that is constrained
952
+ # (it's lower bound), not its upper bound
953
+ param_errors = describe_argument_tuple(expected.param_types, actual.param_types, path)
954
+ if param_errors.empty?
955
+ this_return_t = expected.return_type || PAnyType::DEFAULT
956
+ that_return_t = actual.return_type || PAnyType::DEFAULT
957
+ if this_return_t.assignable?(that_return_t)
958
+ # names are ignored, they are just information
959
+ # Blocks must be compatible
960
+ this_block_t = expected.block_type || PUndefType::DEFAULT
961
+ that_block_t = actual.block_type || PUndefType::DEFAULT
962
+ if that_block_t.assignable?(this_block_t)
963
+ EMPTY_ARRAY
964
+ else
965
+ [TypeMismatch.new(path + [BlockPathElement.new], this_block_t, that_block_t)]
966
+ end
967
+ else
968
+ [TypeMismatch.new(path + [ReturnTypeElement.new], this_return_t, that_return_t)]
969
+ end
970
+ else
971
+ param_errors
972
+ end
973
+ end
974
+ else
975
+ [TypeMismatch.new(path, original, actual)]
976
+ end
977
+ end
978
+
979
+ def describe_PAnyType(expected, original, actual, path)
980
+ expected.assignable?(actual) ? EMPTY_ARRAY : [TypeMismatch.new(path, original, actual)]
981
+ end
982
+
983
+ class UnresolvedTypeFinder
984
+ include TypeAcceptor
985
+
986
+ attr_reader :unresolved
987
+
988
+ def initialize
989
+ @unresolved = nil
990
+ end
991
+
992
+ def visit(type, guard)
993
+ if @unresolved.nil? && type.is_a?(PTypeReferenceType)
994
+ @unresolved = type.type_string
995
+ end
996
+ end
997
+ end
998
+
999
+ def describe(expected, actual, path)
1000
+ ures_finder = UnresolvedTypeFinder.new
1001
+ expected.accept(ures_finder, nil)
1002
+ unresolved = ures_finder.unresolved
1003
+ if unresolved
1004
+ [UnresolvedTypeReference.new(path, unresolved)]
1005
+ else
1006
+ internal_describe(expected.normalize, expected, actual, path)
1007
+ end
1008
+ end
1009
+
1010
+ def internal_describe(expected, original, actual, path)
1011
+ case expected
1012
+ when PVariantType
1013
+ describe_PVariantType(expected, original, actual, path)
1014
+ when PStructType
1015
+ describe_PStructType(expected, original, actual, path)
1016
+ when PHashType
1017
+ describe_PHashType(expected, original, actual, path)
1018
+ when PTupleType
1019
+ describe_PTupleType(expected, original, actual, path)
1020
+ when PArrayType
1021
+ describe_PArrayType(expected, original, actual, path)
1022
+ when PCallableType
1023
+ describe_PCallableType(expected, original, actual, path)
1024
+ when POptionalType
1025
+ describe_POptionalType(expected, original, actual, path)
1026
+ when PPatternType
1027
+ describe_PPatternType(expected, original, actual, path)
1028
+ when PEnumType
1029
+ describe_PEnumType(expected, original, actual, path)
1030
+ when PTypeAliasType
1031
+ describe_PTypeAliasType(expected, original, actual, path)
1032
+ else
1033
+ describe_PAnyType(expected, original, actual, path)
1034
+ end
1035
+ end
1036
+ private :internal_describe
1037
+
1038
+ # Produces a string for the signature(s)
1039
+ #
1040
+ # @api private
1041
+ def signature_string(signature)
1042
+ param_types = signature.type.param_types
1043
+ param_names = signature.parameter_names
1044
+
1045
+ from, to = param_types.size_range
1046
+ if from == 0 && to == 0
1047
+ # No parameters function
1048
+ return ''
1049
+ end
1050
+
1051
+ required_count = from
1052
+ types =
1053
+ case param_types
1054
+ when PTupleType
1055
+ param_types.types
1056
+ when PArrayType
1057
+ [param_types.element_type]
1058
+ end
1059
+
1060
+ # join type with names (types are always present, names are optional)
1061
+ # separate entries with comma
1062
+ #
1063
+ param_names = Array.new(types.size, '') if param_names.empty?
1064
+ limit = param_names.size
1065
+ result = param_names.each_with_index.map do |name, index|
1066
+ type = types[index] || types[-1]
1067
+ indicator = ''
1068
+ if to == Float::INFINITY && index == limit - 1
1069
+ # Last is a repeated_param.
1070
+ indicator = from == param_names.size ? '+' : '*'
1071
+ elsif optional(index, required_count)
1072
+ indicator = '?'
1073
+ type = type.optional_type if type.is_a?(POptionalType)
1074
+ end
1075
+ "#{type} #{name}#{indicator}"
1076
+ end.join(', ')
1077
+
1078
+ # If there is a block, include it
1079
+ case signature.type.block_type
1080
+ when POptionalType
1081
+ result << ', ' unless result == ''
1082
+ result << "#{signature.type.block_type.optional_type} #{signature.block_name}?"
1083
+ when PCallableType
1084
+ result << ', ' unless result == ''
1085
+ result << "#{signature.type.block_type} #{signature.block_name}"
1086
+ when NilClass
1087
+ # nothing
1088
+ end
1089
+ result
1090
+ end
1091
+
1092
+ # Why oh why Ruby do you not have a standard Math.max ?
1093
+ # @api private
1094
+ def max(a, b)
1095
+ a >= b ? a : b
1096
+ end
1097
+
1098
+ # @api private
1099
+ def optional(index, required_count)
1100
+ count = index + 1
1101
+ count > required_count
1102
+ end
1103
+ end
1104
+ end
1105
+ end