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,1157 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Factory is a helper class that makes construction of a Pops Model
4
+ # much more convenient. It can be viewed as a small internal DSL for model
5
+ # constructions.
6
+ # For usage see tests using the factory.
7
+ #
8
+ # @todo All those uppercase methods ... they look bad in one way, but stand out nicely in the grammar...
9
+ # decide if they should change into lower case names (some of the are lower case)...
10
+ #
11
+ module Puppet::Pops
12
+ module Model
13
+ class Factory
14
+ # Shared build_visitor, since there are many instances of Factory being used
15
+
16
+ KEY_LENGTH = 'length'
17
+ KEY_OFFSET = 'offset'
18
+ KEY_LOCATOR = 'locator'
19
+ KEY_OPERATOR = 'operator'
20
+
21
+ KEY_VALUE = 'value'
22
+ KEY_KEYS = 'keys'
23
+ KEY_NAME = 'name'
24
+ KEY_BODY = 'body'
25
+ KEY_EXPR = 'expr'
26
+ KEY_LEFT_EXPR = 'left_expr'
27
+ KEY_RIGHT_EXPR = 'right_expr'
28
+ KEY_PARAMETERS = 'parameters'
29
+
30
+ BUILD_VISITOR = Visitor.new(self, 'build')
31
+ INFER_VISITOR = Visitor.new(self, 'infer')
32
+ INTERPOLATION_VISITOR = Visitor.new(self, 'interpolate')
33
+ MAPOFFSET_VISITOR = Visitor.new(self, 'map_offset')
34
+
35
+ def self.infer(o)
36
+ if o.instance_of?(Factory)
37
+ o
38
+ else
39
+ new(o)
40
+ end
41
+ end
42
+
43
+ attr_reader :model_class, :unfolded
44
+
45
+ def [](key)
46
+ @init_hash[key]
47
+ end
48
+
49
+ def []=(key, value)
50
+ @init_hash[key] = value
51
+ end
52
+
53
+ def all_factories(&block)
54
+ block.call(self)
55
+ @init_hash.each_value { |value| value.all_factories(&block) if value.instance_of?(Factory) }
56
+ end
57
+
58
+ def model
59
+ if @current.nil?
60
+ # Assign a default Locator if it's missing. Should only happen when the factory is used by other
61
+ # means than from a parser (e.g. unit tests)
62
+ unless @init_hash.include?(KEY_LOCATOR)
63
+ @init_hash[KEY_LOCATOR] = Parser::Locator.locator('<no source>', 'no file')
64
+ unless @model_class <= Program
65
+ @init_hash[KEY_OFFSET] = 0
66
+ @init_hash[KEY_LENGTH] = 0
67
+ end
68
+ end
69
+ @current = create_model
70
+ end
71
+ @current
72
+ end
73
+
74
+ # Backward API compatibility
75
+ alias current model
76
+
77
+ def create_model
78
+ @init_hash.each_pair { |key, elem| @init_hash[key] = factory_to_model(elem) }
79
+ model_class.from_asserted_hash(@init_hash)
80
+ end
81
+
82
+ # Initialize a factory with a single object, or a class with arguments applied to build of
83
+ # created instance
84
+ #
85
+ def initialize(o, *args)
86
+ @init_hash = {}
87
+ if o.instance_of?(Class)
88
+ @model_class = o
89
+ BUILD_VISITOR.visit_this_class(self, o, args)
90
+ else
91
+ INFER_VISITOR.visit_this(self, o, EMPTY_ARRAY)
92
+ end
93
+ end
94
+
95
+ def map_offset(model, locator)
96
+ MAPOFFSET_VISITOR.visit_this_1(self, model, locator)
97
+ end
98
+
99
+ def map_offset_Object(o, locator)
100
+ o
101
+ end
102
+
103
+ def map_offset_Factory(o, locator)
104
+ map_offset(o.model, locator)
105
+ end
106
+
107
+ def map_offset_Positioned(o, locator)
108
+ # Transpose the local offset, length to global "coordinates"
109
+ global_offset, global_length = locator.to_global(o.offset, o.length)
110
+
111
+ # mutate
112
+ o.instance_variable_set(:'@offset', global_offset)
113
+ o.instance_variable_set(:'@length', global_length)
114
+ # Change locator since the positions were transposed to the global coordinates
115
+ o.instance_variable_set(:'@locator', locator.locator) if locator.is_a? Puppet::Pops::Parser::Locator::SubLocator
116
+ end
117
+
118
+ # Polymorphic interpolate
119
+ def interpolate
120
+ INTERPOLATION_VISITOR.visit_this_class(self, @model_class, EMPTY_ARRAY)
121
+ end
122
+
123
+ # Building of Model classes
124
+
125
+ def build_ArithmeticExpression(o, op, a, b)
126
+ @init_hash[KEY_OPERATOR] = op
127
+ build_BinaryExpression(o, a, b)
128
+ end
129
+
130
+ def build_AssignmentExpression(o, op, a, b)
131
+ @init_hash[KEY_OPERATOR] = op
132
+ build_BinaryExpression(o, a, b)
133
+ end
134
+
135
+ def build_AttributeOperation(o, name, op, value)
136
+ @init_hash[KEY_OPERATOR] = op
137
+ @init_hash['attribute_name'] = name.to_s # BOOLEAN is allowed in the grammar
138
+ @init_hash['value_expr'] = value
139
+ end
140
+
141
+ def build_AttributesOperation(o, value)
142
+ @init_hash[KEY_EXPR] = value
143
+ end
144
+
145
+ def build_AccessExpression(o, left, keys)
146
+ @init_hash[KEY_LEFT_EXPR] = left
147
+ @init_hash[KEY_KEYS] = keys
148
+ end
149
+
150
+ def build_BinaryExpression(o, left, right)
151
+ @init_hash[KEY_LEFT_EXPR] = left
152
+ @init_hash[KEY_RIGHT_EXPR] = right
153
+ end
154
+
155
+ def build_BlockExpression(o, args)
156
+ @init_hash['statements'] = args
157
+ end
158
+
159
+ def build_EppExpression(o, parameters_specified, body)
160
+ @init_hash['parameters_specified'] = parameters_specified
161
+ b = f_build_body(body)
162
+ @init_hash[KEY_BODY] = b unless b.nil?
163
+ end
164
+
165
+ # @param rval_required [Boolean] if the call must produce a value
166
+ def build_CallExpression(o, functor, rval_required, args)
167
+ @init_hash['functor_expr'] = functor
168
+ @init_hash['rval_required'] = rval_required
169
+ @init_hash['arguments'] = args
170
+ end
171
+
172
+ def build_CallMethodExpression(o, functor, rval_required, lambda, args)
173
+ build_CallExpression(o, functor, rval_required, args)
174
+ @init_hash['lambda'] = lambda
175
+ end
176
+
177
+ def build_CaseExpression(o, test, args)
178
+ @init_hash['test'] = test
179
+ @init_hash['options'] = args
180
+ end
181
+
182
+ def build_CaseOption(o, value_list, then_expr)
183
+ value_list = [value_list] unless value_list.is_a?(Array)
184
+ @init_hash['values'] = value_list
185
+ b = f_build_body(then_expr)
186
+ @init_hash['then_expr'] = b unless b.nil?
187
+ end
188
+
189
+ def build_CollectExpression(o, type_expr, query_expr, attribute_operations)
190
+ @init_hash['type_expr'] = type_expr
191
+ @init_hash['query'] = query_expr
192
+ @init_hash['operations'] = attribute_operations
193
+ end
194
+
195
+ def build_ComparisonExpression(o, op, a, b)
196
+ @init_hash[KEY_OPERATOR] = op
197
+ build_BinaryExpression(o, a, b)
198
+ end
199
+
200
+ def build_ConcatenatedString(o, args)
201
+ # Strip empty segments
202
+ @init_hash['segments'] = args.reject { |arg| arg.model_class == LiteralString && arg['value'].empty? }
203
+ end
204
+
205
+ def build_HeredocExpression(o, name, expr)
206
+ @init_hash['syntax'] = name
207
+ @init_hash['text_expr'] = expr
208
+ end
209
+
210
+ # @param name [String] a valid classname
211
+ # @param parameters [Array<Parameter>] may be empty
212
+ # @param parent_class_name [String, nil] a valid classname referencing a parent class, optional.
213
+ # @param body [Array<Expression>, Expression, nil] expression that constitute the body
214
+ # @return [HostClassDefinition] configured from the parameters
215
+ #
216
+ def build_HostClassDefinition(o, name, parameters, parent_class_name, body)
217
+ build_NamedDefinition(o, name, parameters, body)
218
+ @init_hash['parent_class'] = parent_class_name unless parent_class_name.nil?
219
+ end
220
+
221
+ def build_ResourceOverrideExpression(o, resources, attribute_operations)
222
+ @init_hash['resources'] = resources
223
+ @init_hash['operations'] = attribute_operations
224
+ end
225
+
226
+ def build_ReservedWord(o, name, future)
227
+ @init_hash['word'] = name
228
+ @init_hash['future'] = future
229
+ end
230
+
231
+ def build_KeyedEntry(o, k, v)
232
+ @init_hash['key'] = k
233
+ @init_hash[KEY_VALUE] = v
234
+ end
235
+
236
+ def build_LiteralHash(o, keyed_entries, unfolded)
237
+ @init_hash['entries'] = keyed_entries
238
+ @unfolded = unfolded
239
+ end
240
+
241
+ def build_LiteralList(o, values)
242
+ @init_hash['values'] = values
243
+ end
244
+
245
+ def build_LiteralFloat(o, val)
246
+ @init_hash[KEY_VALUE] = val
247
+ end
248
+
249
+ def build_LiteralInteger(o, val, radix)
250
+ @init_hash[KEY_VALUE] = val
251
+ @init_hash['radix'] = radix
252
+ end
253
+
254
+ def build_LiteralString(o, value)
255
+ @init_hash[KEY_VALUE] = val
256
+ end
257
+
258
+ def build_IfExpression(o, t, ift, els)
259
+ @init_hash['test'] = t
260
+ @init_hash['then_expr'] = ift
261
+ @init_hash['else_expr'] = els
262
+ end
263
+
264
+ def build_ApplyExpression(o, args, body)
265
+ @init_hash['arguments'] = args
266
+ @init_hash['body'] = body
267
+ end
268
+
269
+ def build_MatchExpression(o, op, a, b)
270
+ @init_hash[KEY_OPERATOR] = op
271
+ build_BinaryExpression(o, a, b)
272
+ end
273
+
274
+ # Building model equivalences of Ruby objects
275
+ # Allows passing regular ruby objects to the factory to produce instructions
276
+ # that when evaluated produce the same thing.
277
+
278
+ def infer_String(o)
279
+ @model_class = LiteralString
280
+ @init_hash[KEY_VALUE] = o
281
+ end
282
+
283
+ def infer_NilClass(o)
284
+ @model_class = Nop
285
+ end
286
+
287
+ def infer_TrueClass(o)
288
+ @model_class = LiteralBoolean
289
+ @init_hash[KEY_VALUE] = o
290
+ end
291
+
292
+ def infer_FalseClass(o)
293
+ @model_class = LiteralBoolean
294
+ @init_hash[KEY_VALUE] = o
295
+ end
296
+
297
+ def infer_Integer(o)
298
+ @model_class = LiteralInteger
299
+ @init_hash[KEY_VALUE] = o
300
+ end
301
+
302
+ def infer_Float(o)
303
+ @model_class = LiteralFloat
304
+ @init_hash[KEY_VALUE] = o
305
+ end
306
+
307
+ def infer_Regexp(o)
308
+ @model_class = LiteralRegularExpression
309
+ @init_hash['pattern'] = o.inspect
310
+ @init_hash[KEY_VALUE] = o
311
+ end
312
+
313
+ # Creates a String literal, unless the symbol is one of the special :undef, or :default
314
+ # which instead creates a LiterlUndef, or a LiteralDefault.
315
+ # Supports :undef because nil creates a no-op instruction.
316
+ def infer_Symbol(o)
317
+ case o
318
+ when :undef
319
+ @model_class = LiteralUndef
320
+ when :default
321
+ @model_class = LiteralDefault
322
+ else
323
+ infer_String(o.to_s)
324
+ end
325
+ end
326
+
327
+ # Creates a LiteralList instruction from an Array, where the entries are built.
328
+ def infer_Array(o)
329
+ @model_class = LiteralList
330
+ @init_hash['values'] = o.map { |e| Factory.infer(e) }
331
+ end
332
+
333
+ # Create a LiteralHash instruction from a hash, where keys and values are built
334
+ # The hash entries are added in sorted order based on key.to_s
335
+ #
336
+ def infer_Hash(o)
337
+ @model_class = LiteralHash
338
+ @init_hash['entries'] = o.sort_by { |k, _| k.to_s }.map { |k, v| Factory.new(KeyedEntry, Factory.infer(k), Factory.infer(v)) }
339
+ @unfolded = false
340
+ end
341
+
342
+ def f_build_body(body)
343
+ case body
344
+ when NilClass
345
+ nil
346
+ when Array
347
+ Factory.new(BlockExpression, body)
348
+ when Factory
349
+ body
350
+ else
351
+ Factory.infer(body)
352
+ end
353
+ end
354
+
355
+ def build_LambdaExpression(o, parameters, body, return_type)
356
+ @init_hash[KEY_PARAMETERS] = parameters
357
+ b = f_build_body(body)
358
+ @init_hash[KEY_BODY] = b unless b.nil?
359
+ @init_hash['return_type'] = return_type unless return_type.nil?
360
+ end
361
+
362
+ def build_NamedDefinition(o, name, parameters, body)
363
+ @init_hash[KEY_PARAMETERS] = parameters
364
+ b = f_build_body(body)
365
+ @init_hash[KEY_BODY] = b unless b.nil?
366
+ @init_hash[KEY_NAME] = name
367
+ end
368
+
369
+ def build_FunctionDefinition(o, name, parameters, body, return_type)
370
+ @init_hash[KEY_PARAMETERS] = parameters
371
+ b = f_build_body(body)
372
+ @init_hash[KEY_BODY] = b unless b.nil?
373
+ @init_hash[KEY_NAME] = name
374
+ @init_hash['return_type'] = return_type unless return_type.nil?
375
+ end
376
+
377
+ def build_PlanDefinition(o, name, parameters, body, return_type = nil)
378
+ @init_hash[KEY_PARAMETERS] = parameters
379
+ b = f_build_body(body)
380
+ @init_hash[KEY_BODY] = b unless b.nil?
381
+ @init_hash[KEY_NAME] = name
382
+ @init_hash['return_type'] = return_type unless return_type.nil?
383
+ end
384
+
385
+ def build_NodeDefinition(o, hosts, parent, body)
386
+ @init_hash['host_matches'] = hosts
387
+ @init_hash['parent'] = parent unless parent.nil? # no nop here
388
+ b = f_build_body(body)
389
+ @init_hash[KEY_BODY] = b unless b.nil?
390
+ end
391
+
392
+ def build_Parameter(o, name, expr)
393
+ @init_hash[KEY_NAME] = name
394
+ @init_hash[KEY_VALUE] = expr
395
+ end
396
+
397
+ def build_QualifiedReference(o, name)
398
+ @init_hash['cased_value'] = name.to_s
399
+ end
400
+
401
+ def build_RelationshipExpression(o, op, a, b)
402
+ @init_hash[KEY_OPERATOR] = op
403
+ build_BinaryExpression(o, a, b)
404
+ end
405
+
406
+ def build_ResourceExpression(o, type_name, bodies)
407
+ @init_hash['type_name'] = type_name
408
+ @init_hash['bodies'] = bodies
409
+ end
410
+
411
+ def build_RenderStringExpression(o, string)
412
+ @init_hash[KEY_VALUE] = string;
413
+ end
414
+
415
+ def build_ResourceBody(o, title_expression, attribute_operations)
416
+ @init_hash['title'] = title_expression
417
+ @init_hash['operations'] = attribute_operations
418
+ end
419
+
420
+ def build_ResourceDefaultsExpression(o, type_ref, attribute_operations)
421
+ @init_hash['type_ref'] = type_ref
422
+ @init_hash['operations'] = attribute_operations
423
+ end
424
+
425
+ def build_SelectorExpression(o, left, *selectors)
426
+ @init_hash[KEY_LEFT_EXPR] = left
427
+ @init_hash['selectors'] = selectors
428
+ end
429
+
430
+ def build_SelectorEntry(o, matching, value)
431
+ @init_hash['matching_expr'] = matching
432
+ @init_hash['value_expr'] = value
433
+ end
434
+
435
+ def build_QueryExpression(o, expr)
436
+ @init_hash[KEY_EXPR] = expr unless Factory.nop?(expr)
437
+ end
438
+
439
+ def build_TypeAlias(o, name, type_expr)
440
+ if type_expr.model_class <= KeyedEntry
441
+ # KeyedEntry is used for the form:
442
+ #
443
+ # type Foo = Bar { ... }
444
+ #
445
+ # The entry contains Bar => { ... } and must be transformed into:
446
+ #
447
+ # Object[{parent => Bar, ... }]
448
+ #
449
+ parent = type_expr['key']
450
+ hash = type_expr['value']
451
+ pn = parent['cased_value']
452
+ unless pn == 'Object' || pn == 'TypeSet'
453
+ hash['entries'] << Factory.KEY_ENTRY(Factory.QNAME('parent'), parent)
454
+ parent = Factory.QREF('Object')
455
+ end
456
+ type_expr = parent.access([hash])
457
+ elsif type_expr.model_class <= LiteralHash
458
+ # LiteralHash is used for the form:
459
+ #
460
+ # type Foo = { ... }
461
+ #
462
+ # The hash must be transformed into:
463
+ #
464
+ # Object[{ ... }]
465
+ #
466
+ type_expr = Factory.QREF('Object').access([type_expr])
467
+ end
468
+ @init_hash['type_expr'] = type_expr
469
+ @init_hash[KEY_NAME] = name
470
+ end
471
+
472
+ def build_TypeMapping(o, lhs, rhs)
473
+ @init_hash['type_expr'] = lhs
474
+ @init_hash['mapping_expr'] = rhs
475
+ end
476
+
477
+ def build_TypeDefinition(o, name, parent, body)
478
+ b = f_build_body(body)
479
+ @init_hash[KEY_BODY] = b unless b.nil?
480
+ @init_hash['parent'] = parent
481
+ @init_hash[KEY_NAME] = name
482
+ end
483
+
484
+ def build_UnaryExpression(o, expr)
485
+ @init_hash[KEY_EXPR] = expr unless Factory.nop?(expr)
486
+ end
487
+
488
+ def build_Program(o, body, definitions, locator)
489
+ @init_hash[KEY_BODY] = body
490
+ # non containment
491
+ @init_hash['definitions'] = definitions
492
+ @init_hash[KEY_LOCATOR] = locator
493
+ end
494
+
495
+ def build_QualifiedName(o, name)
496
+ @init_hash[KEY_VALUE] = name
497
+ end
498
+
499
+ def build_TokenValue(o)
500
+ raise "Factory can not deal with a Lexer Token. Got token: #{o}. Probably caused by wrong index in grammar val[n]."
501
+ end
502
+
503
+ # Factory helpers
504
+ def f_build_unary(klazz, expr)
505
+ Factory.new(klazz, expr)
506
+ end
507
+
508
+ def f_build_binary_op(klazz, op, left, right)
509
+ Factory.new(klazz, op, left, right)
510
+ end
511
+
512
+ def f_build_binary(klazz, left, right)
513
+ Factory.new(klazz, left, right)
514
+ end
515
+
516
+ def f_arithmetic(op, r)
517
+ f_build_binary_op(ArithmeticExpression, op, self, r)
518
+ end
519
+
520
+ def f_comparison(op, r)
521
+ f_build_binary_op(ComparisonExpression, op, self, r)
522
+ end
523
+
524
+ def f_match(op, r)
525
+ f_build_binary_op(MatchExpression, op, self, r)
526
+ end
527
+
528
+ # Operator helpers
529
+ def in(r) f_build_binary(InExpression, self, r); end
530
+
531
+ def or(r) f_build_binary(OrExpression, self, r); end
532
+
533
+ def and(r) f_build_binary(AndExpression, self, r); end
534
+
535
+ def not(); f_build_unary(NotExpression, self); end
536
+
537
+ def minus(); f_build_unary(UnaryMinusExpression, self); end
538
+
539
+ def unfold(); f_build_unary(UnfoldExpression, self); end
540
+
541
+ def text(); f_build_unary(TextExpression, self); end
542
+
543
+ def var(); f_build_unary(VariableExpression, self); end
544
+
545
+ def access(r); f_build_binary(AccessExpression, self, r); end
546
+
547
+ def dot r; f_build_binary(NamedAccessExpression, self, r); end
548
+
549
+ def + r; f_arithmetic('+', r); end
550
+
551
+ def - r; f_arithmetic('-', r); end
552
+
553
+ def / r; f_arithmetic('/', r); end
554
+
555
+ def * r; f_arithmetic('*', r); end
556
+
557
+ def % r; f_arithmetic('%', r); end
558
+
559
+ def << r; f_arithmetic('<<', r); end
560
+
561
+ def >> r; f_arithmetic('>>', r); end
562
+
563
+ def < r; f_comparison('<', r); end
564
+
565
+ def <= r; f_comparison('<=', r); end
566
+
567
+ def > r; f_comparison('>', r); end
568
+
569
+ def >= r; f_comparison('>=', r); end
570
+
571
+ def eq r; f_comparison('==', r); end
572
+
573
+ def ne r; f_comparison('!=', r); end
574
+
575
+ def =~ r; f_match('=~', r); end
576
+
577
+ def mne r; f_match('!~', r); end
578
+
579
+ def paren; f_build_unary(ParenthesizedExpression, self); end
580
+
581
+ def relop(op, r)
582
+ f_build_binary_op(RelationshipExpression, op, self, r)
583
+ end
584
+
585
+ def select(*args)
586
+ Factory.new(SelectorExpression, self, *args)
587
+ end
588
+
589
+ # Same as access, but with varargs and arguments that must be inferred. For testing purposes
590
+ def access_at(*r)
591
+ f_build_binary(AccessExpression, self, r.map { |arg| Factory.infer(arg) })
592
+ end
593
+
594
+ # For CaseExpression, setting the default for an already build CaseExpression
595
+ def default(r)
596
+ @init_hash['options'] << Factory.WHEN(Factory.infer(:default), r)
597
+ self
598
+ end
599
+
600
+ def lambda=(lambda)
601
+ @init_hash['lambda'] = lambda
602
+ end
603
+
604
+ # Assignment =
605
+ def set(r)
606
+ f_build_binary_op(AssignmentExpression, '=', self, r)
607
+ end
608
+
609
+ # Assignment +=
610
+ def plus_set(r)
611
+ f_build_binary_op(AssignmentExpression, '+=', self, r)
612
+ end
613
+
614
+ # Assignment -=
615
+ def minus_set(r)
616
+ f_build_binary_op(AssignmentExpression, '-=', self, r)
617
+ end
618
+
619
+ def attributes(*args)
620
+ @init_hash['attributes'] = args
621
+ self
622
+ end
623
+
624
+ def offset
625
+ @init_hash[KEY_OFFSET]
626
+ end
627
+
628
+ def length
629
+ @init_hash[KEY_LENGTH]
630
+ end
631
+
632
+ # Records the position (start -> end) and computes the resulting length.
633
+ #
634
+ def record_position(locator, start_locatable, end_locatable)
635
+ # record information directly in the Positioned object
636
+ start_offset = start_locatable.offset
637
+ @init_hash[KEY_LOCATOR] = locator
638
+ @init_hash[KEY_OFFSET] = start_offset
639
+ @init_hash[KEY_LENGTH] = end_locatable.nil? ? start_locatable.length : end_locatable.offset + end_locatable.length - start_offset
640
+ self
641
+ end
642
+
643
+ # Sets the form of the resource expression (:regular (the default), :virtual, or :exported).
644
+ # Produces true if the expression was a resource expression, false otherwise.
645
+ #
646
+ def self.set_resource_form(expr, form)
647
+ # Note: Validation handles illegal combinations
648
+ return false unless expr.instance_of?(self) && expr.model_class <= AbstractResource
649
+
650
+ expr['form'] = form
651
+ true
652
+ end
653
+
654
+ # Returns symbolic information about an expected shape of a resource expression given the LHS of a resource expr.
655
+ #
656
+ # * `name { }` => `:resource`, create a resource of the given type
657
+ # * `Name { }` => ':defaults`, set defaults for the referenced type
658
+ # * `Name[] { }` => `:override`, overrides instances referenced by LHS
659
+ # * _any other_ => ':error', all other are considered illegal
660
+ #
661
+ def self.resource_shape(expr)
662
+ if expr == 'class'
663
+ :class
664
+ elsif expr.instance_of?(self)
665
+ mc = expr.model_class
666
+ if mc <= QualifiedName
667
+ :resource
668
+ elsif mc <= QualifiedReference
669
+ :defaults
670
+ elsif mc <= AccessExpression
671
+ # if Resource[e], then it is not resource specific
672
+ lhs = expr[KEY_LEFT_EXPR]
673
+ if lhs.model_class <= QualifiedReference && lhs[KEY_VALUE] == 'resource' && expr[KEY_KEYS].size == 1
674
+ :defaults
675
+ else
676
+ :override
677
+ end
678
+ else
679
+ :error
680
+ end
681
+ else
682
+ :error
683
+ end
684
+ end
685
+
686
+ # Factory starting points
687
+
688
+ def self.literal(o); infer(o); end
689
+
690
+ def self.minus(o); infer(o).minus; end
691
+
692
+ def self.unfold(o); infer(o).unfold; end
693
+
694
+ def self.var(o); infer(o).var; end
695
+
696
+ def self.block(*args); new(BlockExpression, args.map { |arg| infer(arg) }); end
697
+
698
+ def self.string(*args); new(ConcatenatedString, args.map { |arg| infer(arg) }); end
699
+
700
+ def self.text(o); infer(o).text; end
701
+
702
+ def self.IF(test_e, then_e, else_e); new(IfExpression, test_e, then_e, else_e); end
703
+
704
+ def self.UNLESS(test_e, then_e, else_e); new(UnlessExpression, test_e, then_e, else_e); end
705
+
706
+ def self.CASE(test_e, *options); new(CaseExpression, test_e, options); end
707
+
708
+ def self.WHEN(values_list, block); new(CaseOption, values_list, block); end
709
+
710
+ def self.MAP(match, value); new(SelectorEntry, match, value); end
711
+
712
+ def self.KEY_ENTRY(key, val); new(KeyedEntry, key, val); end
713
+
714
+ def self.HASH(entries); new(LiteralHash, entries, false); end
715
+
716
+ def self.HASH_UNFOLDED(entries); new(LiteralHash, entries, true); end
717
+
718
+ def self.HEREDOC(name, expr); new(HeredocExpression, name, expr); end
719
+
720
+ def self.STRING(*args); new(ConcatenatedString, args); end
721
+
722
+ def self.LIST(entries); new(LiteralList, entries); end
723
+
724
+ def self.PARAM(name, expr = nil); new(Parameter, name, expr); end
725
+
726
+ def self.NODE(hosts, parent, body); new(NodeDefinition, hosts, parent, body); end
727
+
728
+ # Parameters
729
+
730
+ # Mark parameter as capturing the rest of arguments
731
+ def captures_rest
732
+ @init_hash['captures_rest'] = true
733
+ end
734
+
735
+ # Set Expression that should evaluate to the parameter's type
736
+ def type_expr(o)
737
+ @init_hash['type_expr'] = o
738
+ end
739
+
740
+ # Creates a QualifiedName representation of o, unless o already represents a QualifiedName in which
741
+ # case it is returned.
742
+ #
743
+ def self.fqn(o)
744
+ o.instance_of?(Factory) && o.model_class <= QualifiedName ? self : new(QualifiedName, o)
745
+ end
746
+
747
+ # Creates a QualifiedName representation of o, unless o already represents a QualifiedName in which
748
+ # case it is returned.
749
+ #
750
+ def self.fqr(o)
751
+ o.instance_of?(Factory) && o.model_class <= QualifiedReference ? self : new(QualifiedReference, o)
752
+ end
753
+
754
+ def self.SUBLOCATE(token, expr_factory)
755
+ # expr is a Factory wrapped LiteralString, or ConcatenatedString
756
+ # The token is SUBLOCATED token which has a SubLocator as the token's locator
757
+ # Use the SubLocator to recalculate the offsets and lengths.
758
+ model = expr_factory.model
759
+ locator = token.locator
760
+ expr_factory.map_offset(model, locator)
761
+ model._pcore_all_contents([]) { |element| expr_factory.map_offset(element, locator) }
762
+
763
+ # Returned the factory wrapping the now offset/length transformed expression(s)
764
+ expr_factory
765
+ end
766
+
767
+ def self.TEXT(expr)
768
+ new(TextExpression, infer(expr).interpolate)
769
+ end
770
+
771
+ # TODO_EPP
772
+ def self.RENDER_STRING(o)
773
+ new(RenderStringExpression, o)
774
+ end
775
+
776
+ def self.RENDER_EXPR(expr)
777
+ new(RenderExpression, expr)
778
+ end
779
+
780
+ def self.EPP(parameters, body)
781
+ if parameters.nil?
782
+ params = []
783
+ parameters_specified = false
784
+ else
785
+ params = parameters
786
+ parameters_specified = true
787
+ end
788
+ LAMBDA(params, new(EppExpression, parameters_specified, body), nil)
789
+ end
790
+
791
+ def self.RESERVED(name, future = false)
792
+ new(ReservedWord, name, future)
793
+ end
794
+
795
+ # TODO: This is the same a fqn factory method, don't know if callers to fqn and QNAME can live with the
796
+ # same result or not yet - refactor into one method when decided.
797
+ #
798
+ def self.QNAME(name)
799
+ new(QualifiedName, name)
800
+ end
801
+
802
+ def self.NUMBER(name_or_numeric)
803
+ n_radix = Utils.to_n_with_radix(name_or_numeric)
804
+ if n_radix
805
+ val, radix = n_radix
806
+ if val.is_a?(Float)
807
+ new(LiteralFloat, val)
808
+ else
809
+ new(LiteralInteger, val, radix)
810
+ end
811
+ else
812
+ # Bad number should already have been caught by lexer - this should never happen
813
+ # TRANSLATORS 'NUMBER' refers to a method name and the 'name_or_numeric' was the passed in value and should not be translated
814
+ raise ArgumentError, _("Internal Error, NUMBER token does not contain a valid number, %{name_or_numeric}") %
815
+ { name_or_numeric: name_or_numeric }
816
+ end
817
+ end
818
+
819
+ # Convert input string to either a qualified name, a LiteralInteger with radix, or a LiteralFloat
820
+ #
821
+ def self.QNAME_OR_NUMBER(name)
822
+ n_radix = Utils.to_n_with_radix(name)
823
+ if n_radix
824
+ val, radix = n_radix
825
+ if val.is_a?(Float)
826
+ new(LiteralFloat, val)
827
+ else
828
+ new(LiteralInteger, val, radix)
829
+ end
830
+ else
831
+ new(QualifiedName, name)
832
+ end
833
+ end
834
+
835
+ def self.QREF(name)
836
+ new(QualifiedReference, name)
837
+ end
838
+
839
+ def self.VIRTUAL_QUERY(query_expr)
840
+ new(VirtualQuery, query_expr)
841
+ end
842
+
843
+ def self.EXPORTED_QUERY(query_expr)
844
+ new(ExportedQuery, query_expr)
845
+ end
846
+
847
+ def self.ARGUMENTS(args, arg)
848
+ if !args.empty? && arg.model_class <= LiteralHash && arg.unfolded
849
+ last = args[args.size() - 1]
850
+ if last.model_class <= LiteralHash && last.unfolded
851
+ last['entries'].concat(arg['entries'])
852
+ return args
853
+ end
854
+ end
855
+ args.push(arg)
856
+ end
857
+
858
+ def self.ATTRIBUTE_OP(name, op, expr)
859
+ new(AttributeOperation, name, op, expr)
860
+ end
861
+
862
+ def self.ATTRIBUTES_OP(expr)
863
+ new(AttributesOperation, expr)
864
+ end
865
+
866
+ # Same as CALL_NAMED but with inference and varargs (for testing purposes)
867
+ def self.call_named(name, rval_required, *argument_list)
868
+ new(CallNamedFunctionExpression, fqn(name), rval_required, argument_list.map { |arg| infer(arg) })
869
+ end
870
+
871
+ def self.CALL_NAMED(name, rval_required, argument_list)
872
+ new(CallNamedFunctionExpression, name, rval_required, argument_list)
873
+ end
874
+
875
+ def self.CALL_METHOD(functor, argument_list)
876
+ new(CallMethodExpression, functor, true, nil, argument_list)
877
+ end
878
+
879
+ def self.COLLECT(type_expr, query_expr, attribute_operations)
880
+ new(CollectExpression, type_expr, query_expr, attribute_operations)
881
+ end
882
+
883
+ def self.NAMED_ACCESS(type_name, bodies)
884
+ new(NamedAccessExpression, type_name, bodies)
885
+ end
886
+
887
+ def self.RESOURCE(type_name, bodies)
888
+ new(ResourceExpression, type_name, bodies)
889
+ end
890
+
891
+ def self.RESOURCE_DEFAULTS(type_name, attribute_operations)
892
+ new(ResourceDefaultsExpression, type_name, attribute_operations)
893
+ end
894
+
895
+ def self.RESOURCE_OVERRIDE(resource_ref, attribute_operations)
896
+ new(ResourceOverrideExpression, resource_ref, attribute_operations)
897
+ end
898
+
899
+ def self.RESOURCE_BODY(resource_title, attribute_operations)
900
+ new(ResourceBody, resource_title, attribute_operations)
901
+ end
902
+
903
+ def self.PROGRAM(body, definitions, locator)
904
+ new(Program, body, definitions, locator)
905
+ end
906
+
907
+ # Builds a BlockExpression if args size > 1, else the single expression/value in args
908
+ def self.block_or_expression(args, left_brace = nil, right_brace = nil)
909
+ if args.size > 1
910
+ block_expr = new(BlockExpression, args)
911
+
912
+ # If given a left and right brace position, use those
913
+ # otherwise use the first and last element of the block
914
+ if !left_brace.nil? && !right_brace.nil?
915
+ block_expr.record_position(args.first[KEY_LOCATOR], left_brace, right_brace)
916
+ else
917
+ block_expr.record_position(args.first[KEY_LOCATOR], args.first, args.last)
918
+ end
919
+
920
+ block_expr
921
+ else
922
+ args[0]
923
+ end
924
+ end
925
+
926
+ def self.HOSTCLASS(name, parameters, parent, body)
927
+ new(HostClassDefinition, name, parameters, parent, body)
928
+ end
929
+
930
+ def self.DEFINITION(name, parameters, body)
931
+ new(ResourceTypeDefinition, name, parameters, body)
932
+ end
933
+
934
+ def self.PLAN(name, parameters, body)
935
+ new(PlanDefinition, name, parameters, body, nil)
936
+ end
937
+
938
+ def self.APPLY(arguments, body)
939
+ new(ApplyExpression, arguments, body)
940
+ end
941
+
942
+ def self.APPLY_BLOCK(statements)
943
+ new(ApplyBlockExpression, statements)
944
+ end
945
+
946
+ def self.FUNCTION(name, parameters, body, return_type)
947
+ new(FunctionDefinition, name, parameters, body, return_type)
948
+ end
949
+
950
+ def self.LAMBDA(parameters, body, return_type)
951
+ new(LambdaExpression, parameters, body, return_type)
952
+ end
953
+
954
+ def self.TYPE_ASSIGNMENT(lhs, rhs)
955
+ if lhs.model_class <= AccessExpression
956
+ new(TypeMapping, lhs, rhs)
957
+ else
958
+ new(TypeAlias, lhs['cased_value'], rhs)
959
+ end
960
+ end
961
+
962
+ def self.TYPE_DEFINITION(name, parent, body)
963
+ new(TypeDefinition, name, parent, body)
964
+ end
965
+
966
+ def self.nop? o
967
+ o.nil? || o.instance_of?(Factory) && o.model_class <= Nop
968
+ end
969
+
970
+ STATEMENT_CALLS = {
971
+ 'require' => true,
972
+ 'realize' => true,
973
+ 'include' => true,
974
+ 'contain' => true,
975
+ 'tag' => true,
976
+
977
+ 'debug' => true,
978
+ 'info' => true,
979
+ 'notice' => true,
980
+ 'warning' => true,
981
+ 'err' => true,
982
+
983
+ 'fail' => true,
984
+ 'import' => true, # discontinued, but transform it to make it call error reporting function
985
+ 'break' => true,
986
+ 'next' => true,
987
+ 'return' => true
988
+ }.freeze
989
+
990
+ # Returns true if the given name is a "statement keyword" (require, include, contain,
991
+ # error, notice, info, debug
992
+ #
993
+ def self.name_is_statement?(name)
994
+ STATEMENT_CALLS.include?(name)
995
+ end
996
+
997
+ class ArgsToNonCallError < RuntimeError
998
+ attr_reader :args, :name_expr
999
+
1000
+ def initialize(args, name_expr)
1001
+ @args = args
1002
+ @name_expr = name_expr
1003
+ end
1004
+ end
1005
+
1006
+ # Transforms an array of expressions containing literal name expressions to calls if followed by an
1007
+ # expression, or expression list.
1008
+ #
1009
+ def self.transform_calls(expressions)
1010
+ expressions.each_with_object([]) do |expr, memo|
1011
+ name = memo[-1]
1012
+ if name.instance_of?(Factory) && name.model_class <= QualifiedName && name_is_statement?(name[KEY_VALUE])
1013
+ if expr.is_a?(Array)
1014
+ expr = expr.reject { |e| e.is_a?(Parser::LexerSupport::TokenValue) }
1015
+ else
1016
+ expr = [expr]
1017
+ end
1018
+ the_call = self.CALL_NAMED(name, false, expr)
1019
+ # last positioned is last arg if there are several
1020
+ the_call.record_position(name[KEY_LOCATOR], name, expr[-1])
1021
+ memo[-1] = the_call
1022
+ if expr.is_a?(CallNamedFunctionExpression)
1023
+ # Patch statement function call to expression style
1024
+ # This is needed because it is first parsed as a "statement" and the requirement changes as it becomes
1025
+ # an argument to the name to call transform above.
1026
+ expr.rval_required = true
1027
+ end
1028
+ elsif expr.is_a?(Array)
1029
+ raise ArgsToNonCallError.new(expr, name)
1030
+ else
1031
+ memo << expr
1032
+ if expr.model_class <= CallNamedFunctionExpression
1033
+ # Patch rvalue expression function call to statement style.
1034
+ # This is not really required but done to be AST model compliant
1035
+ expr['rval_required'] = false
1036
+ end
1037
+ end
1038
+ end
1039
+ end
1040
+
1041
+ # Transforms a left expression followed by an untitled resource (in the form of attribute_operations)
1042
+ # @param left [Factory, Expression] the lhs followed what may be a hash
1043
+ def self.transform_resource_wo_title(left, attribute_ops, lbrace_token, rbrace_token)
1044
+ # Returning nil means accepting the given as a potential resource expression
1045
+ return nil unless attribute_ops.is_a? Array
1046
+ return nil unless left.model_class <= QualifiedName
1047
+
1048
+ keyed_entries = attribute_ops.map do |ao|
1049
+ return nil if ao[KEY_OPERATOR] == '+>'
1050
+
1051
+ KEY_ENTRY(infer(ao['attribute_name']), ao['value_expr'])
1052
+ end
1053
+ a_hash = HASH(keyed_entries)
1054
+ a_hash.record_position(left[KEY_LOCATOR], lbrace_token, rbrace_token)
1055
+ block_or_expression(transform_calls([left, a_hash]))
1056
+ end
1057
+
1058
+ def interpolate_Factory(c)
1059
+ self
1060
+ end
1061
+
1062
+ def interpolate_LiteralInteger(c)
1063
+ # convert number to a variable
1064
+ var
1065
+ end
1066
+
1067
+ def interpolate_Object(c)
1068
+ self
1069
+ end
1070
+
1071
+ def interpolate_QualifiedName(c)
1072
+ var
1073
+ end
1074
+
1075
+ # rewrite left expression to variable if it is name, number, and recurse if it is an access expression
1076
+ # this is for interpolation support in new lexer (${NAME}, ${NAME[}}, ${NUMBER}, ${NUMBER[]} - all
1077
+ # other expressions requires variables to be preceded with $
1078
+ #
1079
+ def interpolate_AccessExpression(c)
1080
+ lhs = @init_hash[KEY_LEFT_EXPR]
1081
+ if is_interop_rewriteable?(lhs)
1082
+ @init_hash[KEY_LEFT_EXPR] = lhs.interpolate
1083
+ end
1084
+ self
1085
+ end
1086
+
1087
+ def interpolate_NamedAccessExpression(c)
1088
+ lhs = @init_hash[KEY_LEFT_EXPR]
1089
+ if is_interop_rewriteable?(lhs)
1090
+ @init_hash[KEY_LEFT_EXPR] = lhs.interpolate
1091
+ end
1092
+ self
1093
+ end
1094
+
1095
+ # Rewrite method calls on the form ${x.each ...} to ${$x.each}
1096
+ def interpolate_CallMethodExpression(c)
1097
+ functor_expr = @init_hash['functor_expr']
1098
+ if is_interop_rewriteable?(functor_expr)
1099
+ @init_hash['functor_expr'] = functor_expr.interpolate
1100
+ end
1101
+ self
1102
+ end
1103
+
1104
+ def is_interop_rewriteable?(o)
1105
+ mc = o.model_class
1106
+ if mc <= AccessExpression || mc <= QualifiedName || mc <= NamedAccessExpression || mc <= CallMethodExpression
1107
+ true
1108
+ elsif mc <= LiteralInteger
1109
+ # Only decimal integers can represent variables, else it is a number
1110
+ o['radix'] == 10
1111
+ else
1112
+ false
1113
+ end
1114
+ end
1115
+
1116
+ def self.concat(*args)
1117
+ result = ''.dup
1118
+ args.each do |e|
1119
+ if e.instance_of?(Factory) && e.model_class <= LiteralString
1120
+ result << e[KEY_VALUE]
1121
+ elsif e.is_a?(String)
1122
+ result << e
1123
+ else
1124
+ raise ArgumentError, _("can only concatenate strings, got %{class_name}") % { class_name: e.class }
1125
+ end
1126
+ end
1127
+ infer(result)
1128
+ end
1129
+
1130
+ def to_s
1131
+ "Factory for #{@model_class}"
1132
+ end
1133
+
1134
+ def factory_to_model(value)
1135
+ if value.instance_of?(Factory)
1136
+ value.contained_current(self)
1137
+ elsif value.instance_of?(Array)
1138
+ value.each_with_index { |el, idx| value[idx] = el.contained_current(self) if el.instance_of?(Factory) }
1139
+ else
1140
+ value
1141
+ end
1142
+ end
1143
+
1144
+ def contained_current(container)
1145
+ if @current.nil?
1146
+ unless @init_hash.include?(KEY_LOCATOR)
1147
+ @init_hash[KEY_LOCATOR] = container[KEY_LOCATOR]
1148
+ @init_hash[KEY_OFFSET] = container[KEY_OFFSET] || 0
1149
+ @init_hash[KEY_LENGTH] = 0
1150
+ end
1151
+ @current = create_model
1152
+ end
1153
+ @current
1154
+ end
1155
+ end
1156
+ end
1157
+ end