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,1144 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../../../puppet/concurrent/thread_local_singleton'
4
+
5
+ module Puppet::Pops
6
+ module Types
7
+ # Converts Puppet runtime objects to String under the control of a Format.
8
+ # Use from Puppet Language is via the function `new`.
9
+ #
10
+ # @api private
11
+ #
12
+ class StringConverter
13
+ # @api private
14
+ class FormatError < ArgumentError
15
+ def initialize(type_string, actual, expected)
16
+ super "Illegal format '#{actual}' specified for value of #{type_string} type - expected one of the characters '#{expected}'"
17
+ end
18
+ end
19
+
20
+ class Indentation
21
+ attr_reader :level
22
+ attr_reader :first
23
+ attr_reader :is_indenting
24
+ alias :first? :first
25
+ alias :is_indenting? :is_indenting
26
+
27
+ def initialize(level, first, is_indenting)
28
+ @level = level
29
+ @first = first
30
+ @is_indenting = is_indenting
31
+ end
32
+
33
+ def subsequent
34
+ first? ? self.class.new(level, false, @is_indenting) : self
35
+ end
36
+
37
+ def indenting(indenting_flag)
38
+ self.class.new(level, first?, indenting_flag)
39
+ end
40
+
41
+ def increase(indenting_flag = false)
42
+ self.class.new(level + 1, true, indenting_flag)
43
+ end
44
+
45
+ def breaks?
46
+ is_indenting? && level > 0 && !first?
47
+ end
48
+
49
+ def padding
50
+ ' ' * 2 * level
51
+ end
52
+ end
53
+
54
+ # Format represents one format specification that is textually represented by %<flags><width>.<precision><format>
55
+ # Format parses and makes the individual parts available when an instance is created.
56
+ #
57
+ # @api private
58
+ #
59
+ class Format
60
+ # Boolean, alternate form (varies in meaning)
61
+ attr_reader :alt
62
+ alias :alt? :alt
63
+
64
+ # Nil or Integer with width of field > 0
65
+ attr_reader :width
66
+ # Nil or Integer precisions
67
+ attr_reader :prec
68
+ # One char symbol denoting the format
69
+ attr_reader :format
70
+ # Symbol, :space, :plus, :ignore
71
+ attr_reader :plus
72
+ # Boolean, left adjust in given width or not
73
+ attr_reader :left
74
+ # Boolean left_pad with zero instead of space
75
+ attr_reader :zero_pad
76
+ # Delimiters for containers, a "left" char representing the pair <[{(
77
+ attr_reader :delimiters
78
+
79
+ # Map of type to format for elements contained in an object this format applies to
80
+ attr_accessor :container_string_formats
81
+
82
+ # Separator string inserted between elements in a container
83
+ attr_accessor :separator
84
+
85
+ # Separator string inserted between sub elements in a container
86
+ attr_accessor :separator2
87
+
88
+ attr_reader :orig_fmt
89
+
90
+ FMT_PATTERN_STR = '^%([\s\[+#0{<(|-]*)([1-9][0-9]*)?(?:\.([0-9]+))?([a-zA-Z])$'
91
+ FMT_PATTERN = Regexp.compile(FMT_PATTERN_STR)
92
+ DELIMITERS = ['[', '{', '(', '<', '|']
93
+ DELIMITER_MAP = {
94
+ '[' => ['[', ']'],
95
+ '{' => ['{', '}'],
96
+ '(' => ['(', ')'],
97
+ '<' => ['<', '>'],
98
+ '|' => ['|', '|'],
99
+ :space => ['', '']
100
+ }.freeze
101
+
102
+ def initialize(fmt)
103
+ @orig_fmt = fmt
104
+ match = FMT_PATTERN.match(fmt)
105
+ unless match
106
+ raise ArgumentError, "The format '#{fmt}' is not a valid format on the form '%<flags><width>.<prec><format>'"
107
+ end
108
+
109
+ @format = match[4]
110
+ unless @format.is_a?(String) && @format.length == 1
111
+ raise ArgumentError, "The format must be a one letter format specifier, got '#{@format}'"
112
+ end
113
+
114
+ @format = @format.to_sym
115
+ flags = match[1].split('') || []
116
+ unless flags.uniq.size == flags.size
117
+ raise ArgumentError, "The same flag can only be used once, got '#{fmt}'"
118
+ end
119
+
120
+ @left = flags.include?('-')
121
+ @alt = flags.include?('#')
122
+ @plus = if flags.include?(' ')
123
+ :space
124
+ else
125
+ flags.include?('+') ? :plus : :ignore
126
+ end
127
+ @zero_pad = flags.include?('0')
128
+
129
+ @delimiters = nil
130
+ DELIMITERS.each do |d|
131
+ next unless flags.include?(d)
132
+ unless @delimiters.nil?
133
+ raise ArgumentError, "Only one of the delimiters [ { ( < | can be given in the format flags, got '#{fmt}'"
134
+ end
135
+
136
+ @delimiters = d
137
+ end
138
+
139
+ @width = match[2] ? match[2].to_i : nil
140
+ @prec = match[3] ? match[3].to_i : nil
141
+ end
142
+
143
+ # Merges one format into this and returns a new `Format`. The `other` format overrides this.
144
+ # @param [Format] other
145
+ # @returns [Format] a merged format
146
+ #
147
+ def merge(other)
148
+ result = Format.new(other.orig_fmt)
149
+ result.separator = other.separator || separator
150
+ result.separator2 = other.separator2 || separator2
151
+ result.container_string_formats = Format.merge_string_formats(container_string_formats, other.container_string_formats)
152
+ result
153
+ end
154
+
155
+ # Merges two formats where the `higher` format overrides the `lower`. Produces a new `Format`
156
+ # @param [Format] lower
157
+ # @param [Format] higher
158
+ # @returns [Format] the merged result
159
+ #
160
+ def self.merge(lower, higher)
161
+ unless lower && higher
162
+ return lower || higher
163
+ end
164
+
165
+ lower.merge(higher)
166
+ end
167
+
168
+ # Merges a type => format association and returns a new merged and sorted association.
169
+ # @param [Format] lower
170
+ # @param [Format] higher
171
+ # @returns [Hash] the merged type => format result
172
+ #
173
+ def self.merge_string_formats(lower, higher)
174
+ unless lower && higher
175
+ return lower || higher
176
+ end
177
+
178
+ # drop all formats in lower than is more generic in higher. Lower must never
179
+ # override higher
180
+ lower = lower.reject { |lk, _| higher.keys.any? { |hk| hk != lk && hk.assignable?(lk) } }
181
+
182
+ merged = (lower.keys + higher.keys).uniq.map do |k|
183
+ [k, merge(lower[k], higher[k])]
184
+ end
185
+ sort_formats(merged)
186
+ end
187
+
188
+ # Sorts format based on generality of types - most specific types before general
189
+ #
190
+ def self.sort_formats(format_map)
191
+ format_map = format_map.sort do |(a, _), (b, _)|
192
+ ab = b.assignable?(a)
193
+ ba = a.assignable?(b)
194
+ if a == b
195
+ 0
196
+ elsif ab && !ba
197
+ -1
198
+ elsif !ab && ba
199
+ 1
200
+ else
201
+ # arbitrary order if disjunct (based on name of type)
202
+ rank_a = type_rank(a)
203
+ rank_b = type_rank(b)
204
+ if rank_a == 0 || rank_b == 0
205
+ a.to_s <=> b.to_s
206
+ else
207
+ rank_a <=> rank_b
208
+ end
209
+ end
210
+ end
211
+ format_map.to_h
212
+ end
213
+
214
+ # Ranks type on specificity where it matters
215
+ # lower number means more specific
216
+ def self.type_rank(t)
217
+ case t
218
+ when PStructType
219
+ 1
220
+ when PHashType
221
+ 2
222
+ when PTupleType
223
+ 3
224
+ when PArrayType
225
+ 4
226
+ when PPatternType
227
+ 10
228
+ when PEnumType
229
+ 11
230
+ when PStringType
231
+ 12
232
+ else
233
+ 0
234
+ end
235
+ end
236
+
237
+ # Returns an array with a delimiter pair derived from the format.
238
+ # If format does not contain a delimiter specification the given default is returned
239
+ #
240
+ # @param [Array<String>] the default delimiters
241
+ # @returns [Array<String>] a tuple with left, right delimiters
242
+ #
243
+ def delimiter_pair(default = StringConverter::DEFAULT_ARRAY_DELIMITERS)
244
+ DELIMITER_MAP[@delimiters || @plus] || default
245
+ end
246
+
247
+ def to_s
248
+ "%#{@flags}#{@width}.#{@prec}#{@format}"
249
+ end
250
+ end
251
+
252
+ extend Puppet::Concurrent::ThreadLocalSingleton
253
+
254
+ # @api public
255
+ def self.convert(value, string_formats = :default)
256
+ singleton.convert(value, string_formats)
257
+ end
258
+
259
+ # @api private
260
+ #
261
+ def initialize
262
+ @string_visitor = Visitor.new(self, "string", 3, 3)
263
+ end
264
+
265
+ DEFAULT_INDENTATION = Indentation.new(0, true, false).freeze
266
+
267
+ # format used by default for values in a container
268
+ # (basically strings are quoted since they may contain a ','))
269
+ #
270
+ DEFAULT_CONTAINER_FORMATS = {
271
+ PAnyType::DEFAULT => Format.new('%p').freeze, # quoted string (Ruby inspect)
272
+ }.freeze
273
+
274
+ DEFAULT_ARRAY_FORMAT = Format.new('%a')
275
+ DEFAULT_ARRAY_FORMAT.separator = ', '
276
+ DEFAULT_ARRAY_FORMAT.separator2 = ', '
277
+ DEFAULT_ARRAY_FORMAT.container_string_formats = DEFAULT_CONTAINER_FORMATS
278
+ DEFAULT_ARRAY_FORMAT.freeze
279
+
280
+ DEFAULT_HASH_FORMAT = Format.new('%h')
281
+ DEFAULT_HASH_FORMAT.separator = ', '
282
+ DEFAULT_HASH_FORMAT.separator2 = ' => '
283
+ DEFAULT_HASH_FORMAT.container_string_formats = DEFAULT_CONTAINER_FORMATS
284
+ DEFAULT_HASH_FORMAT.freeze
285
+
286
+ DEFAULT_HASH_DELIMITERS = ['{', '}'].freeze
287
+ DEFAULT_ARRAY_DELIMITERS = ['[', ']'].freeze
288
+
289
+ DEFAULT_STRING_FORMATS = {
290
+ PObjectType::DEFAULT => Format.new('%p').freeze, # call with initialization hash
291
+ PFloatType::DEFAULT => Format.new('%f').freeze, # float
292
+ PNumericType::DEFAULT => Format.new('%d').freeze, # decimal number
293
+ PArrayType::DEFAULT => DEFAULT_ARRAY_FORMAT.freeze,
294
+ PHashType::DEFAULT => DEFAULT_HASH_FORMAT.freeze,
295
+ PBinaryType::DEFAULT => Format.new('%B').freeze, # strict base64 string unquoted
296
+ PAnyType::DEFAULT => Format.new('%s').freeze, # unquoted string
297
+ }.freeze
298
+
299
+ DEFAULT_PARAMETER_FORMAT = {
300
+ PCollectionType::DEFAULT => '%#p',
301
+ PObjectType::DEFAULT => '%#p',
302
+ PBinaryType::DEFAULT => '%p',
303
+ PStringType::DEFAULT => '%p',
304
+ PRuntimeType::DEFAULT => '%p'
305
+ }.freeze
306
+
307
+ # Converts the given value to a String, under the direction of formatting rules per type.
308
+ #
309
+ # When converting to string it is possible to use a set of built in conversion rules.
310
+ #
311
+ # A format is specified on the form:
312
+ #
313
+ # ´´´
314
+ # %[Flags][Width][.Precision]Format
315
+ # ´´´
316
+ #
317
+ # `Width` is the number of characters into which the value should be fitted. This allocated space is
318
+ # padded if value is shorter. By default it is space padded, and the flag 0 will cause padding with 0
319
+ # for numerical formats.
320
+ #
321
+ # `Precision` is the number of fractional digits to show for floating point, and the maximum characters
322
+ # included in a string format.
323
+ #
324
+ # Note that all data type supports the formats `s` and `p` with the meaning "default to-string" and
325
+ # "default-programmatic to-string".
326
+ #
327
+ # ### Integer
328
+ #
329
+ # | Format | Integer Formats
330
+ # | ------ | ---------------
331
+ # | d | Decimal, negative values produces leading '-'
332
+ # | x X | Hexadecimal in lower or upper case. Uses ..f/..F for negative values unless # is also used
333
+ # | o | Octal. Uses ..0 for negative values unless # is also used
334
+ # | b B | Binary with prefix 'b' or 'B'. Uses ..1/..1 for negative values unless # is also used
335
+ # | c | numeric value representing a Unicode value, result is a one unicode character string, quoted if alternative flag # is used
336
+ # | s | same as d, or d in quotes if alternative flag # is used
337
+ # | p | same as d
338
+ # | eEfgGaA | converts integer to float and formats using the floating point rules
339
+ #
340
+ # Defaults to `d`
341
+ #
342
+ # ### Float
343
+ #
344
+ # | Format | Float formats
345
+ # | ------ | -------------
346
+ # | f | floating point in non exponential notation
347
+ # | e E | exponential notation with 'e' or 'E'
348
+ # | g G | conditional exponential with 'e' or 'E' if exponent < -4 or >= the precision
349
+ # | a A | hexadecimal exponential form, using 'x'/'X' as prefix and 'p'/'P' before exponent
350
+ # | s | converted to string using format p, then applying string formatting rule, alternate form # quotes result
351
+ # | p | f format with minimum significant number of fractional digits, prec has no effect
352
+ # | dxXobBc | converts float to integer and formats using the integer rules
353
+ #
354
+ # Defaults to `p`
355
+ #
356
+ # ### String
357
+ #
358
+ # | Format | String
359
+ # | ------ | ------
360
+ # | s | unquoted string, verbatim output of control chars
361
+ # | p | programmatic representation - strings are quoted, interior quotes and control chars are escaped
362
+ # | C | each :: name segment capitalized, quoted if alternative flag # is used
363
+ # | c | capitalized string, quoted if alternative flag # is used
364
+ # | d | downcased string, quoted if alternative flag # is used
365
+ # | u | upcased string, quoted if alternative flag # is used
366
+ # | t | trims leading and trailing whitespace from the string, quoted if alternative flag # is used
367
+ #
368
+ # Defaults to `s` at top level and `p` inside array or hash.
369
+ #
370
+ # ### Boolean
371
+ #
372
+ # | Format | Boolean Formats
373
+ # | ---- | -------------------
374
+ # | t T | 'true'/'false' or 'True'/'False' , first char if alternate form is used (i.e. 't'/'f' or 'T'/'F').
375
+ # | y Y | 'yes'/'no', 'Yes'/'No', 'y'/'n' or 'Y'/'N' if alternative flag # is used
376
+ # | dxXobB | numeric value 0/1 in accordance with the given format which must be valid integer format
377
+ # | eEfgGaA | numeric value 0.0/1.0 in accordance with the given float format and flags
378
+ # | s | 'true' / 'false'
379
+ # | p | 'true' / 'false'
380
+ #
381
+ # ### Regexp
382
+ #
383
+ # | Format | Regexp Formats (%/)
384
+ # | ---- | ------------------
385
+ # | s | / / delimiters, alternate flag replaces / delimiters with quotes
386
+ # | p | / / delimiters
387
+ #
388
+ # ### Undef
389
+ #
390
+ # | Format | Undef formats
391
+ # | ------ | -------------
392
+ # | s | empty string, or quoted empty string if alternative flag # is used
393
+ # | p | 'undef', or quoted '"undef"' if alternative flag # is used
394
+ # | n | 'nil', or 'null' if alternative flag # is used
395
+ # | dxXobB | 'NaN'
396
+ # | eEfgGaA | 'NaN'
397
+ # | v | 'n/a'
398
+ # | V | 'N/A'
399
+ # | u | 'undef', or 'undefined' if alternative # flag is used
400
+ #
401
+ # ### Default (value)
402
+ #
403
+ # | Format | Default formats
404
+ # | ------ | ---------------
405
+ # | d D | 'default' or 'Default', alternative form # causes value to be quoted
406
+ # | s | same as d
407
+ # | p | same as d
408
+ #
409
+ # ### Binary (value)
410
+ #
411
+ # | Format | Default formats
412
+ # | ------ | ---------------
413
+ # | s | binary as unquoted characters
414
+ # | p | 'Binary("<base64strict>")'
415
+ # | b | '<base64>' - base64 string with newlines inserted
416
+ # | B | '<base64strict>' - base64 strict string (without newlines inserted)
417
+ # | u | '<base64urlsafe>' - base64 urlsafe string
418
+ # | t | 'Binary' - outputs the name of the type only
419
+ # | T | 'BINARY' - output the name of the type in all caps only
420
+ #
421
+ # The alternate form flag `#` will quote the binary or base64 text output
422
+ # The width and precision values are applied to the text part only in `%p` format.
423
+ #
424
+ # ### Array & Tuple
425
+ #
426
+ # | Format | Array/Tuple Formats
427
+ # | ------ | -------------
428
+ # | a | formats with `[ ]` delimiters and `,`, alternate form `#` indents nested arrays/hashes
429
+ # | s | same as a
430
+ # | p | same as a
431
+ #
432
+ # See "Flags" `<[({\|` for formatting of delimiters, and "Additional parameters for containers; Array and Hash" for
433
+ # more information about options.
434
+ #
435
+ # The alternate form flag `#` will cause indentation of nested array or hash containers. If width is also set
436
+ # it is taken as the maximum allowed length of a sequence of elements (not including delimiters). If this max length
437
+ # is exceeded, each element will be indented.
438
+ #
439
+ # ### Hash & Struct
440
+ #
441
+ # | Format | Hash/Struct Formats
442
+ # | ------ | -------------
443
+ # | h | formats with `{ }` delimiters, `,` element separator and ` => ` inner element separator unless overridden by flags
444
+ # | s | same as h
445
+ # | p | same as h
446
+ # | a | converts the hash to an array of [k,v] tuples and formats it using array rule(s)
447
+ #
448
+ # See "Flags" `<[({\|` for formatting of delimiters, and "Additional parameters for containers; Array and Hash" for
449
+ # more information about options.
450
+ #
451
+ # The alternate form flag `#` will format each hash key/value entry indented on a separate line.
452
+ #
453
+ # ### Type
454
+ #
455
+ # | Format | Array/Tuple Formats
456
+ # | ------ | -------------
457
+ # | s | The same as p, quoted if alternative flag # is used
458
+ # | p | Outputs the type in string form as specified by the Puppet Language
459
+ #
460
+ # ### Flags
461
+ #
462
+ # | Flag | Effect
463
+ # | ------ | ------
464
+ # | (space) | space instead of + for numeric output (- is shown), for containers skips delimiters
465
+ # | # | alternate format; prefix 0x/0x, 0 (octal) and 0b/0B for binary, Floats force decimal '.'. For g/G keep trailing 0.
466
+ # | + | show sign +/- depending on value's sign, changes x,X, o,b, B format to not use 2's complement form
467
+ # | - | left justify the value in the given width
468
+ # | 0 | pad with 0 instead of space for widths larger than value
469
+ # | <[({\| | defines an enclosing pair <> [] () {} or \| \| when used with a container type
470
+ #
471
+ #
472
+ # ### Additional parameters for containers; Array and Hash
473
+ #
474
+ # For containers (Array and Hash), the format is specified by a hash where the following keys can be set:
475
+ # * `'format'` - the format specifier for the container itself
476
+ # * `'separator'` - the separator string to use between elements, should not contain padding space at the end
477
+ # * `'separator2'` - the separator string to use between association of hash entries key/value
478
+ # * `'string_formats'´ - a map of type to format for elements contained in the container
479
+ #
480
+ # Note that the top level format applies to Array and Hash objects contained/nested in an Array or a Hash.
481
+ #
482
+ # Given format mappings are merged with (default) formats and a format specified for a narrower type
483
+ # wins over a broader.
484
+ #
485
+ # @param mode [String, Symbol] :strict or :extended (or :default which is the same as :strict)
486
+ # @param string_formats [String, Hash] format tring, or a hash mapping type to a format string, and for Array and Hash types map to hash of details
487
+ #
488
+ def convert(value, string_formats = :default)
489
+ options = DEFAULT_STRING_FORMATS
490
+
491
+ value_type = TypeCalculator.infer_set(value)
492
+ if string_formats.is_a?(String)
493
+ # For Array and Hash, the format is given as a Hash where 'format' key is the format for the collection itself
494
+ if Puppet::Pops::Types::PArrayType::DEFAULT.assignable?(value_type)
495
+ # add the format given for the exact type
496
+ string_formats = { Puppet::Pops::Types::PArrayType::DEFAULT => { 'format' => string_formats } }
497
+ elsif Puppet::Pops::Types::PHashType::DEFAULT.assignable?(value_type)
498
+ # add the format given for the exact type
499
+ string_formats = { Puppet::Pops::Types::PHashType::DEFAULT => { 'format' => string_formats } }
500
+ else
501
+ # add the format given for the exact type
502
+ string_formats = { value_type => string_formats }
503
+ end
504
+ end
505
+
506
+ case string_formats
507
+ when :default
508
+ # do nothing, use default formats
509
+
510
+ when Hash
511
+ # Convert and validate user input
512
+ string_formats = validate_input(string_formats)
513
+ # Merge user given with defaults such that user options wins, merge is deep and format specific
514
+ options = Format.merge_string_formats(DEFAULT_STRING_FORMATS, string_formats)
515
+ else
516
+ raise ArgumentError, "string conversion expects a Default value or a Hash of type to format mappings, got a '#{string_formats.class}'"
517
+ end
518
+
519
+ _convert(value_type, value, options, DEFAULT_INDENTATION)
520
+ end
521
+
522
+ # # A method only used for manual debugging as the default output of the formatting rules is
523
+ # # very hard to read otherwise.
524
+ # #
525
+ # # @api private
526
+ # def dump_string_formats(f, indent = 1)
527
+ # return f.to_s unless f.is_a?(Hash)
528
+ # "{#{f.map {|k,v| "#{k.to_s} => #{dump_string_formats(v,indent+1)}"}.join(",\n#{' '*indent} ")}}"
529
+ # end
530
+
531
+ def _convert(val_type, value, format_map, indentation)
532
+ @string_visitor.visit_this_3(self, val_type, value, format_map, indentation)
533
+ end
534
+ private :_convert
535
+
536
+ def validate_input(fmt)
537
+ return nil if fmt.nil?
538
+ unless fmt.is_a?(Hash)
539
+ raise ArgumentError, "expected a hash with type to format mappings, got instance of '#{fmt.class}'"
540
+ end
541
+
542
+ fmt.each_with_object({}) do |entry, result|
543
+ key, value = entry
544
+ unless key.is_a?(Types::PAnyType)
545
+ raise ArgumentError, "top level keys in the format hash must be data types, got instance of '#{key.class}'"
546
+ end
547
+
548
+ if value.is_a?(Hash)
549
+ result[key] = validate_container_input(value)
550
+ else
551
+ result[key] = Format.new(value)
552
+ end
553
+ end
554
+ end
555
+ private :validate_input
556
+
557
+ FMT_KEYS = %w[separator separator2 format string_formats].freeze
558
+
559
+ def validate_container_input(fmt)
560
+ if (fmt.keys - FMT_KEYS).size > 0
561
+ raise ArgumentError, "only #{FMT_KEYS.map { |k| "'#{k}'" }.join(', ')} are allowed in a container format, got #{fmt}"
562
+ end
563
+
564
+ result = Format.new(fmt['format'])
565
+ result.separator = fmt['separator']
566
+ result.separator2 = fmt['separator2']
567
+ result.container_string_formats = validate_input(fmt['string_formats'])
568
+ result
569
+ end
570
+ private :validate_container_input
571
+
572
+ def string_PObjectType(val_type, val, format_map, indentation)
573
+ f = get_format(val_type, format_map)
574
+ case f.format
575
+ when :p
576
+ fmt = TypeFormatter.singleton
577
+ indentation = indentation.indenting(f.alt? || indentation.is_indenting?)
578
+ fmt = fmt.indented(indentation.level, 2) if indentation.is_indenting?
579
+ fmt.string(val)
580
+ when :s
581
+ val.to_s
582
+ when :q
583
+ val.inspect
584
+ else
585
+ raise FormatError.new('Object', f.format, 'spq')
586
+ end
587
+ end
588
+
589
+ def string_PObjectTypeExtension(val_type, val, format_map, indentation)
590
+ string_PObjectType(val_type.base_type, val, format_map, indentation)
591
+ end
592
+
593
+ def string_PRuntimeType(val_type, val, format_map, indent)
594
+ # Before giving up on this, and use a string representation of the unknown
595
+ # object, a check is made to see if the object can present itself as
596
+ # a hash or an array. If it can, then that representation is used instead.
597
+ case val
598
+ when Hash
599
+ hash = val.to_hash
600
+ # Ensure that the returned value isn't derived from Hash
601
+ return string_PHashType(val_type, hash, format_map, indent) if hash.instance_of?(Hash)
602
+ when Array
603
+ array = val.to_a
604
+ # Ensure that the returned value isn't derived from Array
605
+ return string_PArrayType(val_type, array, format_map, indent) if array.instance_of?(Array)
606
+ end
607
+
608
+ f = get_format(val_type, format_map)
609
+ case f.format
610
+ when :s
611
+ val.to_s
612
+ when :p
613
+ puppet_quote(val.to_s)
614
+ when :q
615
+ val.inspect
616
+ else
617
+ raise FormatError.new('Runtime', f.format, 'spq')
618
+ end
619
+ end
620
+
621
+ # Basically string_PAnyType converts the value to a String and then formats it according
622
+ # to the resulting type
623
+ #
624
+ # @api private
625
+ def string_PAnyType(val_type, val, format_map, _)
626
+ f = get_format(val_type, format_map)
627
+ Kernel.format(f.orig_fmt, val)
628
+ end
629
+
630
+ def string_PDefaultType(val_type, val, format_map, _)
631
+ f = get_format(val_type, format_map)
632
+ apply_string_flags(f, case f.format
633
+ when :d, :s, :p
634
+ f.alt? ? '"default"' : 'default'
635
+ when :D
636
+ f.alt? ? '"Default"' : 'Default'
637
+ else
638
+ raise FormatError.new('Default', f.format, 'dDsp')
639
+ end)
640
+ end
641
+
642
+ # @api private
643
+ def string_PUndefType(val_type, val, format_map, _)
644
+ f = get_format(val_type, format_map)
645
+ apply_string_flags(f, case f.format
646
+ when :n
647
+ f.alt? ? 'null' : 'nil'
648
+ when :u
649
+ f.alt? ? 'undefined' : 'undef'
650
+ when :d, :x, :X, :o, :b, :B, :e, :E, :f, :g, :G, :a, :A
651
+ 'NaN'
652
+ when :v
653
+ 'n/a'
654
+ when :V
655
+ 'N/A'
656
+ when :s
657
+ f.alt? ? '""' : ''
658
+ when :p
659
+ f.alt? ? '"undef"' : 'undef'
660
+ else
661
+ raise FormatError.new('Undef', f.format,
662
+ 'nudxXobBeEfgGaAvVsp')
663
+ end)
664
+ end
665
+
666
+ # @api private
667
+ def string_PBooleanType(val_type, val, format_map, indentation)
668
+ f = get_format(val_type, format_map)
669
+ case f.format
670
+ when :t
671
+ # 'true'/'false' or 't'/'f' if in alt mode
672
+ str_bool = val.to_s
673
+ apply_string_flags(f, f.alt? ? str_bool[0] : str_bool)
674
+
675
+ when :T
676
+ # 'True'/'False' or 'T'/'F' if in alt mode
677
+ str_bool = val.to_s.capitalize
678
+ apply_string_flags(f, f.alt? ? str_bool[0] : str_bool)
679
+
680
+ when :y
681
+ # 'yes'/'no' or 'y'/'n' if in alt mode
682
+ str_bool = val ? 'yes' : 'no'
683
+ apply_string_flags(f, f.alt? ? str_bool[0] : str_bool)
684
+
685
+ when :Y
686
+ # 'Yes'/'No' or 'Y'/'N' if in alt mode
687
+ str_bool = val ? 'Yes' : 'No'
688
+ apply_string_flags(f, f.alt? ? str_bool[0] : str_bool)
689
+
690
+ when :d, :x, :X, :o, :b, :B
691
+ # Boolean in numeric form, formated by integer rule
692
+ numeric_bool = val ? 1 : 0
693
+ string_formats = { Puppet::Pops::Types::PIntegerType::DEFAULT => f }
694
+ _convert(TypeCalculator.infer_set(numeric_bool), numeric_bool, string_formats, indentation)
695
+
696
+ when :e, :E, :f, :g, :G, :a, :A
697
+ # Boolean in numeric form, formated by float rule
698
+ numeric_bool = val ? 1.0 : 0.0
699
+ string_formats = { Puppet::Pops::Types::PFloatType::DEFAULT => f }
700
+ _convert(TypeCalculator.infer_set(numeric_bool), numeric_bool, string_formats, indentation)
701
+
702
+ when :s
703
+ apply_string_flags(f, val.to_s)
704
+
705
+ when :p
706
+ apply_string_flags(f, val.inspect)
707
+
708
+ else
709
+ raise FormatError.new('Boolean', f.format, 'tTyYdxXobBeEfgGaAsp')
710
+ end
711
+ end
712
+
713
+ # Performs post-processing of literals to apply width and precision flags
714
+ def apply_string_flags(f, literal_str)
715
+ if f.left || f.width || f.prec
716
+ fmt = '%'.dup
717
+ fmt << '-' if f.left
718
+ fmt << f.width.to_s if f.width
719
+ fmt << '.' << f.prec.to_s if f.prec
720
+ fmt << 's'
721
+ Kernel.format(fmt, literal_str)
722
+ else
723
+ literal_str
724
+ end
725
+ end
726
+ private :apply_string_flags
727
+
728
+ # @api private
729
+ def string_PIntegerType(val_type, val, format_map, _)
730
+ f = get_format(val_type, format_map)
731
+ case f.format
732
+ when :d, :x, :X, :o, :b, :B, :p
733
+ Kernel.format(f.orig_fmt, val)
734
+
735
+ when :e, :E, :f, :g, :G, :a, :A
736
+ Kernel.format(f.orig_fmt, val.to_f)
737
+
738
+ when :c
739
+ char = [val].pack("U")
740
+ char = f.alt? ? "\"#{char}\"" : char
741
+ Kernel.format(f.orig_fmt.tr('c', 's'), char)
742
+
743
+ when :s
744
+ fmt = f.alt? ? 'p' : 's'
745
+ int_str = Kernel.format('%d', val)
746
+ Kernel.format(f.orig_fmt.gsub('s', fmt), int_str)
747
+
748
+ else
749
+ raise FormatError.new('Integer', f.format, 'dxXobBeEfgGaAspc')
750
+ end
751
+ end
752
+
753
+ # @api private
754
+ def string_PFloatType(val_type, val, format_map, _)
755
+ f = get_format(val_type, format_map)
756
+ case f.format
757
+ when :d, :x, :X, :o, :b, :B
758
+ Kernel.format(f.orig_fmt, val.to_i)
759
+
760
+ when :e, :E, :f, :g, :G, :a, :A, :p
761
+ Kernel.format(f.orig_fmt, val)
762
+
763
+ when :s
764
+ float_str = f.alt? ? "\"#{Kernel.format('%p', val)}\"" : Kernel.format('%p', val)
765
+ Kernel.format(f.orig_fmt, float_str)
766
+
767
+ else
768
+ raise FormatError.new('Float', f.format, 'dxXobBeEfgGaAsp')
769
+ end
770
+ end
771
+
772
+ # @api private
773
+ def string_PBinaryType(val_type, val, format_map, _)
774
+ f = get_format(val_type, format_map)
775
+ substitute = f.alt? ? 'p' : 's'
776
+ case f.format
777
+ when :s
778
+ val_to_convert = val.binary_buffer
779
+ if !f.alt?
780
+ # Assume it is valid UTF-8
781
+ val_to_convert = val_to_convert.dup.force_encoding('UTF-8')
782
+ # If it isn't
783
+ unless val_to_convert.valid_encoding?
784
+ # try to convert and fail with details about what is wrong
785
+ val_to_convert = val.binary_buffer.encode('UTF-8')
786
+ end
787
+ else
788
+ val_to_convert = val.binary_buffer
789
+ end
790
+ Kernel.format(f.orig_fmt.gsub('s', substitute), val_to_convert)
791
+
792
+ when :p
793
+ # width & precision applied to string, not the name of the type
794
+ "Binary(\"#{Kernel.format(f.orig_fmt.tr('p', 's'), val.to_s)}\")"
795
+
796
+ when :b
797
+ Kernel.format(f.orig_fmt.gsub('b', substitute), val.relaxed_to_s)
798
+
799
+ when :B
800
+ Kernel.format(f.orig_fmt.gsub('B', substitute), val.to_s)
801
+
802
+ when :u
803
+ Kernel.format(f.orig_fmt.gsub('u', substitute), val.urlsafe_to_s)
804
+
805
+ when :t
806
+ # Output as the type without any data
807
+ Kernel.format(f.orig_fmt.gsub('t', substitute), 'Binary')
808
+
809
+ when :T
810
+ # Output as the type without any data in all caps
811
+ Kernel.format(f.orig_fmt.gsub('T', substitute), 'BINARY')
812
+
813
+ else
814
+ raise FormatError.new('Binary', f.format, 'bButTsp')
815
+ end
816
+ end
817
+
818
+ # @api private
819
+ def string_PStringType(val_type, val, format_map, _)
820
+ f = get_format(val_type, format_map)
821
+ case f.format
822
+ when :s
823
+ Kernel.format(f.orig_fmt, val)
824
+
825
+ when :p
826
+ apply_string_flags(f, puppet_quote(val, f.alt?))
827
+
828
+ when :c
829
+ c_val = val.capitalize
830
+ f.alt? ? apply_string_flags(f, puppet_quote(c_val)) : Kernel.format(f.orig_fmt.tr('c', 's'), c_val)
831
+
832
+ when :C
833
+ c_val = val.split('::').map(&:capitalize).join('::')
834
+ f.alt? ? apply_string_flags(f, puppet_quote(c_val)) : Kernel.format(f.orig_fmt.tr('C', 's'), c_val)
835
+
836
+ when :u
837
+ c_val = val.upcase
838
+ f.alt? ? apply_string_flags(f, puppet_quote(c_val)) : Kernel.format(f.orig_fmt.tr('u', 's'), c_val)
839
+
840
+ when :d
841
+ c_val = val.downcase
842
+ f.alt? ? apply_string_flags(f, puppet_quote(c_val)) : Kernel.format(f.orig_fmt.tr('d', 's'), c_val)
843
+
844
+ when :t # trim
845
+ c_val = val.strip
846
+ f.alt? ? apply_string_flags(f, puppet_quote(c_val)) : Kernel.format(f.orig_fmt.tr('t', 's'), c_val)
847
+
848
+ else
849
+ raise FormatError.new('String', f.format, 'cCudspt')
850
+ end
851
+ end
852
+
853
+ # Performs a '%p' formatting of the given _str_ such that the output conforms to Puppet syntax. An ascii string
854
+ # without control characters, dollar, single-qoute, or backslash, will be quoted using single quotes. All other
855
+ # strings will be quoted using double quotes.
856
+ #
857
+ # @param [String] str the string that should be formatted
858
+ # @param [Boolean] enforce_double_quotes if true the result will be double quoted (even if single quotes would be possible)
859
+ # @return [String] the formatted string
860
+ #
861
+ # @api public
862
+ def puppet_quote(str, enforce_double_quotes = false)
863
+ if enforce_double_quotes
864
+ return puppet_double_quote(str)
865
+ end
866
+
867
+ # Assume that the string can be single quoted
868
+ bld = "'".dup
869
+ bld.force_encoding(str.encoding)
870
+ escaped = false
871
+ str.each_codepoint do |codepoint|
872
+ # Control characters and non-ascii characters cannot be present in a single quoted string
873
+ return puppet_double_quote(str) if codepoint < 0x20
874
+
875
+ if escaped
876
+ bld << 0x5c << codepoint
877
+ escaped = false
878
+ elsif codepoint == 0x27
879
+ bld << 0x5c << codepoint
880
+ elsif codepoint == 0x5c
881
+ escaped = true
882
+ elsif codepoint <= 0x7f
883
+ bld << codepoint
884
+ else
885
+ bld << [codepoint].pack('U')
886
+ end
887
+ end
888
+
889
+ # If string ended with a backslash, then that backslash must be escaped
890
+ bld << 0x5c if escaped
891
+
892
+ bld << "'"
893
+ bld
894
+ end
895
+
896
+ def puppet_double_quote(str)
897
+ bld = '"'.dup
898
+ str.each_codepoint do |codepoint|
899
+ case codepoint
900
+ when 0x09
901
+ bld << '\\t'
902
+ when 0x0a
903
+ bld << '\\n'
904
+ when 0x0d
905
+ bld << '\\r'
906
+ when 0x22
907
+ bld << '\\"'
908
+ when 0x24
909
+ bld << '\\$'
910
+ when 0x5c
911
+ bld << '\\\\'
912
+ else
913
+ if codepoint < 0x20
914
+ bld << sprintf('\\u{%X}', codepoint)
915
+ elsif codepoint <= 0x7f
916
+ bld << codepoint
917
+ else
918
+ bld << [codepoint].pack('U')
919
+ end
920
+ end
921
+ end
922
+ bld << '"'
923
+ bld
924
+ end
925
+
926
+ # @api private
927
+ def string_PRegexpType(val_type, val, format_map, _)
928
+ f = get_format(val_type, format_map)
929
+ case f.format
930
+ when :p
931
+ str_regexp = PRegexpType.regexp_to_s_with_delimiters(val)
932
+ f.orig_fmt == '%p' ? str_regexp : Kernel.format(f.orig_fmt.tr('p', 's'), str_regexp)
933
+ when :s
934
+ str_regexp = PRegexpType.regexp_to_s(val)
935
+ str_regexp = puppet_quote(str_regexp) if f.alt?
936
+ f.orig_fmt == '%s' ? str_regexp : Kernel.format(f.orig_fmt, str_regexp)
937
+ else
938
+ raise FormatError.new('Regexp', f.format, 'sp')
939
+ end
940
+ end
941
+
942
+ def string_PArrayType(val_type, val, format_map, indentation)
943
+ format = get_format(val_type, format_map)
944
+ sep = format.separator || DEFAULT_ARRAY_FORMAT.separator
945
+ string_formats = format.container_string_formats || DEFAULT_CONTAINER_FORMATS
946
+ delims = format.delimiter_pair(DEFAULT_ARRAY_DELIMITERS)
947
+
948
+ # Make indentation active, if array is in alternative format, or if nested in indenting
949
+ indentation = indentation.indenting(format.alt? || indentation.is_indenting?)
950
+
951
+ case format.format
952
+ when :a, :s, :p
953
+ buf = ''.dup
954
+ if indentation.breaks?
955
+ buf << "\n"
956
+ buf << indentation.padding
957
+ end
958
+ buf << delims[0]
959
+
960
+ # Make a first pass to format each element
961
+ children_indentation = indentation.increase(format.alt?) # tell children they are expected to indent
962
+ mapped = val.map do |v|
963
+ if children_indentation.first?
964
+ children_indentation = children_indentation.subsequent
965
+ end
966
+ val_t = TypeCalculator.infer_set(v)
967
+ _convert(val_t, v, is_container?(val_t) ? format_map : string_formats, children_indentation)
968
+ end
969
+
970
+ # compute widest run in the array, skip nested arrays and hashes
971
+ # then if size > width, set flag if a break on each element should be performed
972
+ if format.alt? && format.width
973
+ widest = val.each_with_index.each_with_object([0]) do |v_i, memo|
974
+ # array or hash breaks
975
+ if is_a_or_h?(v_i[0])
976
+ memo << 0
977
+ else
978
+ memo[-1] += mapped[v_i[1]].length
979
+ end
980
+ end
981
+ widest = widest.max
982
+ sz_break = widest > (format.width || Float::INFINITY)
983
+ else
984
+ sz_break = false
985
+ end
986
+
987
+ # output each element with breaks and padding
988
+ children_indentation = indentation.increase(format.alt?)
989
+ val.each_with_index do |v, i|
990
+ str_val = mapped[i]
991
+ if children_indentation.first?
992
+ children_indentation = children_indentation.subsequent
993
+ # if breaking, indent first element by one
994
+ if sz_break && !is_a_or_h?(v)
995
+ buf << ' '
996
+ end
997
+ else
998
+ buf << sep
999
+ # if break on each (and breaking will not occur because next is an array or hash)
1000
+ # or, if indenting, and previous was an array or hash, then break and continue on next line
1001
+ # indented.
1002
+ if (sz_break && !is_a_or_h?(v)) || (format.alt? && i > 0 && is_a_or_h?(val[i - 1]) && !is_a_or_h?(v))
1003
+ buf.rstrip! unless buf[-1] == "\n"
1004
+ buf << "\n"
1005
+ buf << children_indentation.padding
1006
+ end
1007
+ end
1008
+ # remove trailing space added by separator if followed by break
1009
+ buf.rstrip! if buf[-1] == ' ' && str_val[0] == "\n"
1010
+ buf << str_val
1011
+ end
1012
+ buf << delims[1]
1013
+ buf
1014
+ else
1015
+ raise FormatError.new('Array', format.format, 'asp')
1016
+ end
1017
+ end
1018
+
1019
+ def is_a_or_h?(x)
1020
+ x.is_a?(Array) || x.is_a?(Hash)
1021
+ end
1022
+
1023
+ def is_container?(t)
1024
+ case t
1025
+ when PArrayType, PHashType, PStructType, PTupleType, PObjectType
1026
+ true
1027
+ else
1028
+ false
1029
+ end
1030
+ end
1031
+
1032
+ # @api private
1033
+ def string_PTupleType(val_type, val, format_map, indentation)
1034
+ string_PArrayType(val_type, val, format_map, indentation)
1035
+ end
1036
+
1037
+ # @api private
1038
+ def string_PIteratorType(val_type, val, format_map, indentation)
1039
+ v = val.to_a
1040
+ _convert(TypeCalculator.infer_set(v), v, format_map, indentation)
1041
+ end
1042
+
1043
+ # @api private
1044
+ def string_PHashType(val_type, val, format_map, indentation)
1045
+ format = get_format(val_type, format_map)
1046
+ sep = format.separator || DEFAULT_HASH_FORMAT.separator
1047
+ assoc = format.separator2 || DEFAULT_HASH_FORMAT.separator2
1048
+ string_formats = format.container_string_formats || DEFAULT_CONTAINER_FORMATS
1049
+ delims = format.delimiter_pair(DEFAULT_HASH_DELIMITERS)
1050
+
1051
+ if format.alt?
1052
+ sep = sep.rstrip unless sep[-1] == "\n"
1053
+ sep = "#{sep}\n"
1054
+ end
1055
+
1056
+ cond_break = ''
1057
+ padding = ''
1058
+
1059
+ case format.format
1060
+ when :a
1061
+ # Convert to array and use array rules
1062
+ array_hash = val.to_a
1063
+ _convert(TypeCalculator.infer_set(array_hash), array_hash, format_map, indentation)
1064
+
1065
+ when :h, :s, :p
1066
+ indentation = indentation.indenting(format.alt? || indentation.is_indenting?)
1067
+ buf = ''.dup
1068
+ if indentation.breaks?
1069
+ buf << "\n"
1070
+ buf << indentation.padding
1071
+ end
1072
+
1073
+ children_indentation = indentation.increase
1074
+ if format.alt?
1075
+ cond_break = "\n"
1076
+ padding = children_indentation.padding
1077
+ end
1078
+ buf << delims[0]
1079
+ buf << cond_break # break after opening delimiter if pretty printing
1080
+ buf << val.map do |k, v|
1081
+ key_type = TypeCalculator.infer_set(k)
1082
+ val_type = TypeCalculator.infer_set(v)
1083
+ key = _convert(key_type, k, is_container?(key_type) ? format_map : string_formats, children_indentation)
1084
+ val = _convert(val_type, v, is_container?(val_type) ? format_map : string_formats, children_indentation)
1085
+ "#{padding}#{key}#{assoc}#{val}"
1086
+ end.join(sep)
1087
+ if format.alt?
1088
+ buf << cond_break
1089
+ buf << indentation.padding
1090
+ end
1091
+ buf << delims[1]
1092
+ buf
1093
+ else
1094
+ raise FormatError.new('Hash', format.format, 'hasp')
1095
+ end
1096
+ end
1097
+
1098
+ # @api private
1099
+ def string_PStructType(val_type, val, format_map, indentation)
1100
+ string_PHashType(val_type, val, format_map, indentation)
1101
+ end
1102
+
1103
+ # @api private
1104
+ def string_PTypeType(val_type, val, format_map, _)
1105
+ f = get_format(val_type, format_map)
1106
+ case f.format
1107
+ when :s
1108
+ str_val = f.alt? ? "\"#{val}\"" : val.to_s
1109
+ Kernel.format(f.orig_fmt, str_val)
1110
+ when :p
1111
+ Kernel.format(f.orig_fmt.tr('p', 's'), val.to_s)
1112
+ else
1113
+ raise FormatError.new('Type', f.format, 'sp')
1114
+ end
1115
+ end
1116
+
1117
+ # @api private
1118
+ def string_PURIType(val_type, val, format_map, indentation)
1119
+ f = get_format(val_type, format_map)
1120
+ case f.format
1121
+ when :p
1122
+ fmt = TypeFormatter.singleton
1123
+ indentation = indentation.indenting(f.alt? || indentation.is_indenting?)
1124
+ fmt = fmt.indented(indentation.level, 2) if indentation.is_indenting?
1125
+ fmt.string(val)
1126
+ when :s
1127
+ str_val = val.to_s
1128
+ Kernel.format(f.orig_fmt, f.alt? ? puppet_quote(str_val) : str_val)
1129
+ else
1130
+ raise FormatError.new('URI', f.format, 'sp')
1131
+ end
1132
+ end
1133
+
1134
+ # Maps the inferred type of o to a formatting rule
1135
+ def get_format(val_t, format_options)
1136
+ fmt = format_options.find { |k, _| k.assignable?(val_t) }
1137
+ return fmt[1] unless fmt.nil?
1138
+
1139
+ Format.new("%s")
1140
+ end
1141
+ private :get_format
1142
+ end
1143
+ end
1144
+ end