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,1141 @@
1
+ # frozen_string_literal: true
2
+
3
+ # The scope class, which handles storing and retrieving variables and types and
4
+ # such.
5
+ require 'forwardable'
6
+
7
+ require_relative '../../puppet/parser'
8
+ require_relative '../../puppet/parser/templatewrapper'
9
+ require_relative '../../puppet/parser/resource'
10
+
11
+ # This class is part of the internal parser/evaluator/compiler functionality of Puppet.
12
+ # It is passed between the various classes that participate in evaluation.
13
+ # None of its methods are API except those that are clearly marked as such.
14
+ #
15
+ # @api public
16
+ class Puppet::Parser::Scope
17
+ extend Forwardable
18
+
19
+ # Variables that always exist with nil value even if not set
20
+ BUILT_IN_VARS = %w[module_name caller_module_name].freeze
21
+ EMPTY_HASH = {}.freeze
22
+
23
+ Puppet::Util.logmethods(self)
24
+
25
+ include Puppet::Util::Errors
26
+ attr_accessor :source, :resource
27
+ attr_reader :compiler
28
+ attr_accessor :parent
29
+
30
+ # Hash of hashes of default values per type name
31
+ attr_reader :defaults
32
+
33
+ # Alias for `compiler.environment`
34
+ def environment
35
+ @compiler.environment
36
+ end
37
+
38
+ # Alias for `compiler.catalog`
39
+ def catalog
40
+ @compiler.catalog
41
+ end
42
+
43
+ # Abstract base class for LocalScope and MatchScope
44
+ #
45
+ class Ephemeral
46
+ attr_reader :parent
47
+
48
+ def initialize(parent = nil)
49
+ @parent = parent
50
+ end
51
+
52
+ def is_local_scope?
53
+ false
54
+ end
55
+
56
+ def [](name)
57
+ if @parent
58
+ @parent[name]
59
+ end
60
+ end
61
+
62
+ def include?(name)
63
+ (@parent and @parent.include?(name))
64
+ end
65
+
66
+ def bound?(name)
67
+ false
68
+ end
69
+
70
+ def add_entries_to(target = {}, include_undef = false)
71
+ @parent.add_entries_to(target, include_undef) unless @parent.nil?
72
+ # do not include match data ($0-$n)
73
+ target
74
+ end
75
+ end
76
+
77
+ class LocalScope < Ephemeral
78
+ def initialize(parent = nil)
79
+ super parent
80
+ @symbols = {}
81
+ end
82
+
83
+ def [](name)
84
+ val = @symbols[name]
85
+ val.nil? && !@symbols.include?(name) ? super : val
86
+ end
87
+
88
+ def is_local_scope?
89
+ true
90
+ end
91
+
92
+ def []=(name, value)
93
+ @symbols[name] = value
94
+ end
95
+
96
+ def include?(name)
97
+ bound?(name) || super
98
+ end
99
+
100
+ def delete(name)
101
+ @symbols.delete(name)
102
+ end
103
+
104
+ def bound?(name)
105
+ @symbols.include?(name)
106
+ end
107
+
108
+ def add_entries_to(target = {}, include_undef = false)
109
+ super
110
+ @symbols.each do |k, v|
111
+ if (v == :undef || v.nil?) && !include_undef
112
+ target.delete(k)
113
+ else
114
+ target[k] = v
115
+ end
116
+ end
117
+ target
118
+ end
119
+ end
120
+
121
+ class MatchScope < Ephemeral
122
+ attr_accessor :match_data
123
+
124
+ def initialize(parent = nil, match_data = nil)
125
+ super parent
126
+ @match_data = match_data
127
+ end
128
+
129
+ def is_local_scope?
130
+ false
131
+ end
132
+
133
+ def [](name)
134
+ if bound?(name)
135
+ @match_data[name.to_i]
136
+ else
137
+ super
138
+ end
139
+ end
140
+
141
+ def include?(name)
142
+ bound?(name) or super
143
+ end
144
+
145
+ def bound?(name)
146
+ # A "match variables" scope reports all numeric variables to be bound if the scope has
147
+ # match_data. Without match data the scope is transparent.
148
+ #
149
+ @match_data && name =~ /^\d+$/
150
+ end
151
+
152
+ def []=(name, value)
153
+ # TODO: Bad choice of exception
154
+ raise Puppet::ParseError, _("Numerical variables cannot be changed. Attempt to set $%{name}") % { name: name }
155
+ end
156
+
157
+ def delete(name)
158
+ # TODO: Bad choice of exception
159
+ raise Puppet::ParseError, _("Numerical variables cannot be deleted: Attempt to delete: $%{name}") % { name: name }
160
+ end
161
+
162
+ def add_entries_to(target = {}, include_undef = false)
163
+ # do not include match data ($0-$n)
164
+ super
165
+ end
166
+ end
167
+
168
+ # @api private
169
+ class ParameterScope < Ephemeral
170
+ class Access
171
+ attr_accessor :value
172
+
173
+ def assigned?
174
+ instance_variable_defined?(:@value)
175
+ end
176
+ end
177
+
178
+ # A parameter default must be evaluated using a special scope. The scope that is given to this method must
179
+ # have a `ParameterScope` as its last ephemeral scope. This method will then push a `MatchScope` while the
180
+ # given `expression` is evaluated. The method will catch any throw of `:unevaluated_parameter` and produce
181
+ # an error saying that the evaluated parameter X tries to access the unevaluated parameter Y.
182
+ #
183
+ # @param name [String] the name of the currently evaluated parameter
184
+ # @param expression [Puppet::Parser::AST] the expression to evaluate
185
+ # @param scope [Puppet::Parser::Scope] a scope where a `ParameterScope` has been pushed
186
+ # @return [Object] the result of the evaluation
187
+ #
188
+ # @api private
189
+ def evaluate3x(name, expression, scope)
190
+ scope.with_guarded_scope do
191
+ bad = catch(:unevaluated_parameter) do
192
+ scope.new_match_scope(nil)
193
+ return as_read_only { expression.safeevaluate(scope) }
194
+ end
195
+ parameter_reference_failure(name, bad)
196
+ end
197
+ end
198
+
199
+ def evaluate(name, expression, scope, evaluator)
200
+ scope.with_guarded_scope do
201
+ bad = catch(:unevaluated_parameter) do
202
+ scope.new_match_scope(nil)
203
+ return as_read_only { evaluator.evaluate(expression, scope) }
204
+ end
205
+ parameter_reference_failure(name, bad)
206
+ end
207
+ end
208
+
209
+ def parameter_reference_failure(from, to)
210
+ # Parameters are evaluated in the order they have in the @params hash.
211
+ keys = @params.keys
212
+ raise Puppet::Error, _("%{callee}: expects a value for parameter $%{to}") % { callee: @callee_name, to: to } if keys.index(to) < keys.index(from)
213
+
214
+ raise Puppet::Error, _("%{callee}: default expression for $%{from} tries to illegally access not yet evaluated $%{to}") % { callee: @callee_name, from: from, to: to }
215
+ end
216
+ private :parameter_reference_failure
217
+
218
+ def initialize(parent, callee_name, param_names)
219
+ super(parent)
220
+ @callee_name = callee_name
221
+ @params = {}
222
+ param_names.each { |name| @params[name] = Access.new }
223
+ end
224
+
225
+ def [](name)
226
+ access = @params[name]
227
+ return super if access.nil?
228
+
229
+ throw(:unevaluated_parameter, name) unless access.assigned?
230
+ access.value
231
+ end
232
+
233
+ def []=(name, value)
234
+ raise Puppet::Error, _("Attempt to assign variable %{name} when evaluating parameters") % { name: name } if @read_only
235
+
236
+ @params[name] ||= Access.new
237
+ @params[name].value = value
238
+ end
239
+
240
+ def bound?(name)
241
+ @params.include?(name)
242
+ end
243
+
244
+ def include?(name)
245
+ @params.include?(name) || super
246
+ end
247
+
248
+ def is_local_scope?
249
+ true
250
+ end
251
+
252
+ def as_read_only
253
+ read_only = @read_only
254
+ @read_only = true
255
+ begin
256
+ yield
257
+ ensure
258
+ @read_only = read_only
259
+ end
260
+ end
261
+
262
+ def to_hash
263
+ @params.select { |_, access| access.assigned? }.transform_values(&:value)
264
+ end
265
+ end
266
+
267
+ # Returns true if the variable of the given name has a non nil value.
268
+ # TODO: This has vague semantics - does the variable exist or not?
269
+ # use ['name'] to get nil or value, and if nil check with exist?('name')
270
+ # this include? is only useful because of checking against the boolean value false.
271
+ #
272
+ def include?(name)
273
+ catch(:undefined_variable) {
274
+ return !self[name].nil?
275
+ }
276
+ false
277
+ end
278
+
279
+ # Returns true if the variable of the given name is set to any value (including nil)
280
+ #
281
+ # @return [Boolean] if variable exists or not
282
+ #
283
+ def exist?(name)
284
+ # Note !! ensure the answer is boolean
285
+ !!if name =~ /^(.*)::(.+)$/
286
+ class_name = ::Regexp.last_match(1)
287
+ variable_name = ::Regexp.last_match(2)
288
+ return true if class_name == '' && BUILT_IN_VARS.include?(variable_name)
289
+
290
+ # lookup class, but do not care if it is not evaluated since that will result
291
+ # in it not existing anyway. (Tests may run with just scopes and no evaluated classes which
292
+ # will result in class_scope for "" not returning topscope).
293
+ klass = find_hostclass(class_name)
294
+ other_scope = klass.nil? ? nil : class_scope(klass)
295
+ if other_scope.nil?
296
+ class_name == '' ? compiler.topscope.exist?(variable_name) : false
297
+ else
298
+ other_scope.exist?(variable_name)
299
+ end
300
+ else # rubocop:disable Layout/ElseAlignment
301
+ next_scope = inherited_scope || enclosing_scope
302
+ effective_symtable(true).include?(name) || next_scope && next_scope.exist?(name) || BUILT_IN_VARS.include?(name)
303
+ end # rubocop:disable Layout/EndAlignment
304
+ end
305
+
306
+ # Returns true if the given name is bound in the current (most nested) scope for assignments.
307
+ #
308
+ def bound?(name)
309
+ # Do not look in ephemeral (match scope), the semantics is to answer if an assignable variable is bound
310
+ effective_symtable(false).bound?(name)
311
+ end
312
+
313
+ # Is the value true? This allows us to control the definition of truth
314
+ # in one place.
315
+ def self.true?(value)
316
+ case value
317
+ when ''
318
+ false
319
+ when :undef
320
+ false
321
+ else
322
+ !!value
323
+ end
324
+ end
325
+
326
+ # Coerce value to a number, or return `nil` if it isn't one.
327
+ def self.number?(value)
328
+ case value
329
+ when Numeric
330
+ value
331
+ when /^-?\d+(:?\.\d+|(:?\.\d+)?e\d+)$/
332
+ value.to_f
333
+ when /^0x[0-9a-f]+$/i
334
+ value.to_i(16)
335
+ when /^0[0-7]+$/
336
+ value.to_i(8)
337
+ when /^-?\d+$/
338
+ value.to_i
339
+ else
340
+ nil
341
+ end
342
+ end
343
+
344
+ def find_hostclass(name)
345
+ environment.known_resource_types.find_hostclass(name)
346
+ end
347
+
348
+ def find_definition(name)
349
+ environment.known_resource_types.find_definition(name)
350
+ end
351
+
352
+ def find_global_scope
353
+ # walk upwards until first found node_scope or top_scope
354
+ if is_nodescope? || is_topscope?
355
+ self
356
+ else
357
+ next_scope = inherited_scope || enclosing_scope
358
+ if next_scope.nil?
359
+ # this happens when testing, and there is only a single test scope and no link to any
360
+ # other scopes
361
+ self
362
+ else
363
+ next_scope.find_global_scope()
364
+ end
365
+ end
366
+ end
367
+
368
+ def findresource(type, title = nil)
369
+ @compiler.catalog.resource(type, title)
370
+ end
371
+
372
+ # Initialize our new scope. Defaults to having no parent.
373
+ def initialize(compiler, source: nil, resource: nil)
374
+ if compiler.is_a? Puppet::Parser::AbstractCompiler
375
+ @compiler = compiler
376
+ else
377
+ raise Puppet::DevError, _("you must pass a compiler instance to a new scope object")
378
+ end
379
+
380
+ @source = source
381
+ @resource = resource
382
+
383
+ extend_with_functions_module
384
+
385
+ # The symbol table for this scope. This is where we store variables.
386
+ # @symtable = Ephemeral.new(nil, true)
387
+ @symtable = LocalScope.new(nil)
388
+
389
+ @ephemeral = [MatchScope.new(@symtable, nil)]
390
+
391
+ # All of the defaults set for types. It's a hash of hashes,
392
+ # with the first key being the type, then the second key being
393
+ # the parameter.
394
+ @defaults = Hash.new { |dhash, type|
395
+ dhash[type] = {}
396
+ }
397
+
398
+ # The table for storing class singletons. This will only actually
399
+ # be used by top scopes and node scopes.
400
+ @class_scopes = {}
401
+ end
402
+
403
+ # Store the fact that we've evaluated a class, and store a reference to
404
+ # the scope in which it was evaluated, so that we can look it up later.
405
+ def class_set(name, scope)
406
+ if parent
407
+ parent.class_set(name, scope)
408
+ else
409
+ @class_scopes[name] = scope
410
+ end
411
+ end
412
+
413
+ # Return the scope associated with a class. This is just here so
414
+ # that subclasses can set their parent scopes to be the scope of
415
+ # their parent class, and it's also used when looking up qualified
416
+ # variables.
417
+ def class_scope(klass)
418
+ # They might pass in either the class or class name
419
+ k = klass.respond_to?(:name) ? klass.name : klass
420
+ @class_scopes[k] || (parent && parent.class_scope(k))
421
+ end
422
+
423
+ # Collect all of the defaults set at any higher scopes.
424
+ # This is a different type of lookup because it's
425
+ # additive -- it collects all of the defaults, with defaults
426
+ # in closer scopes overriding those in later scopes.
427
+ #
428
+ # The lookupdefaults searches in the order:
429
+ #
430
+ # * inherited
431
+ # * contained (recursive)
432
+ # * self
433
+ #
434
+ def lookupdefaults(type)
435
+ values = {}
436
+
437
+ # first collect the values from the parents
438
+ if parent
439
+ parent.lookupdefaults(type).each { |var, value|
440
+ values[var] = value
441
+ }
442
+ end
443
+
444
+ # then override them with any current values
445
+ # this should probably be done differently
446
+ if @defaults.include?(type)
447
+ @defaults[type].each { |var, value|
448
+ values[var] = value
449
+ }
450
+ end
451
+
452
+ values
453
+ end
454
+
455
+ # Check if the given value is a known default for the given type
456
+ #
457
+ def is_default?(type, key, value)
458
+ defaults_for_type = @defaults[type]
459
+ unless defaults_for_type.nil?
460
+ default_param = defaults_for_type[key]
461
+ return true if !default_param.nil? && value == default_param.value
462
+ end
463
+ !parent.nil? && parent.is_default?(type, key, value)
464
+ end
465
+
466
+ # Look up a defined type.
467
+ def lookuptype(name)
468
+ # This happens a lot, avoid making a call to make a call
469
+ krt = environment.known_resource_types
470
+ krt.find_definition(name) || krt.find_hostclass(name)
471
+ end
472
+
473
+ def undef_as(x, v)
474
+ if v.nil? or v == :undef
475
+ x
476
+ else
477
+ v
478
+ end
479
+ end
480
+
481
+ # Lookup a variable within this scope using the Puppet language's
482
+ # scoping rules. Variables can be qualified using just as in a
483
+ # manifest.
484
+ #
485
+ # @param [String] name the variable name to lookup
486
+ # @param [Hash] hash of options, only internal code should give this
487
+ # @param [Boolean] if resolution is of the leaf of a qualified name - only internal code should give this
488
+ # @return Object the value of the variable, or if not found; nil if `strict_variables` is false, and thrown :undefined_variable otherwise
489
+ #
490
+ # @api public
491
+ def lookupvar(name, options = EMPTY_HASH)
492
+ unless name.is_a? String
493
+ raise Puppet::ParseError, _("Scope variable name %{name} is a %{klass}, not a string") % { name: name.inspect, klass: name.class }
494
+ end
495
+
496
+ # If name has '::' in it, it is resolved as a qualified variable
497
+ unless (idx = name.index('::')).nil?
498
+ # Always drop leading '::' if present as that is how the values are keyed.
499
+ return lookup_qualified_variable(idx == 0 ? name[2..] : name, options)
500
+ end
501
+
502
+ # At this point, search is for a non qualified (simple) name
503
+ table = @ephemeral.last
504
+ val = table[name]
505
+ return val unless val.nil? && !table.include?(name)
506
+
507
+ next_scope = inherited_scope || enclosing_scope
508
+ if next_scope
509
+ next_scope.lookupvar(name, options)
510
+ else
511
+ variable_not_found(name)
512
+ end
513
+ end
514
+
515
+ UNDEFINED_VARIABLES_KIND = 'undefined_variables'
516
+
517
+ # The exception raised when a throw is uncaught is different in different versions
518
+ # of ruby. In >=2.2.0 it is UncaughtThrowError (which did not exist prior to this)
519
+ #
520
+ UNCAUGHT_THROW_EXCEPTION = defined?(UncaughtThrowError) ? UncaughtThrowError : ArgumentError
521
+
522
+ def variable_not_found(name, reason = nil)
523
+ # Built in variables and numeric variables always exist
524
+ if BUILT_IN_VARS.include?(name) || name =~ Puppet::Pops::Patterns::NUMERIC_VAR_NAME
525
+ return nil
526
+ end
527
+
528
+ begin
529
+ throw(:undefined_variable, reason)
530
+ rescue UNCAUGHT_THROW_EXCEPTION
531
+ case Puppet[:strict]
532
+ when :off
533
+ # do nothing
534
+ when :warning
535
+ Puppet.warn_once(UNDEFINED_VARIABLES_KIND, _("Variable: %{name}") % { name: name },
536
+ _("Undefined variable '%{name}'; %{reason}") % { name: name, reason: reason })
537
+ when :error
538
+ if Puppet.lookup(:avoid_hiera_interpolation_errors) { false }
539
+ Puppet.warn_once(UNDEFINED_VARIABLES_KIND, _("Variable: %{name}") % { name: name },
540
+ _("Interpolation failed with '%{name}', but compilation continuing; %{reason}") % { name: name, reason: reason })
541
+ else
542
+ raise ArgumentError, _("Undefined variable '%{name}'; %{reason}") % { name: name, reason: reason }
543
+ end
544
+ end
545
+ end
546
+ nil
547
+ end
548
+
549
+ # Retrieves the variable value assigned to the name given as an argument. The name must be a String,
550
+ # and namespace can be qualified with '::'. The value is looked up in this scope, its parent scopes,
551
+ # or in a specific visible named scope.
552
+ #
553
+ # @param varname [String] the name of the variable (may be a qualified name using `(ns'::')*varname`
554
+ # @param options [Hash] Additional options, not part of api.
555
+ # @return [Object] the value assigned to the given varname
556
+ # @see #[]=
557
+ # @api public
558
+ #
559
+ def [](varname, options = EMPTY_HASH)
560
+ lookupvar(varname, options)
561
+ end
562
+
563
+ # The class scope of the inherited thing of this scope's resource.
564
+ #
565
+ # @return [Puppet::Parser::Scope] The scope or nil if there is not an inherited scope
566
+ def inherited_scope
567
+ if resource && resource.type == TYPENAME_CLASS && !resource.resource_type.parent.nil?
568
+ qualified_scope(resource.resource_type.parent)
569
+ else
570
+ nil
571
+ end
572
+ end
573
+
574
+ # The enclosing scope (topscope or nodescope) of this scope.
575
+ # The enclosing scopes are produced when a class or define is included at
576
+ # some point. The parent scope of the included class or define becomes the
577
+ # scope in which it was included. The chain of parent scopes is followed
578
+ # until a node scope or the topscope is found
579
+ #
580
+ # @return [Puppet::Parser::Scope] The scope or nil if there is no enclosing scope
581
+ def enclosing_scope
582
+ if has_enclosing_scope?
583
+ if parent.is_topscope? || parent.is_nodescope?
584
+ parent
585
+ else
586
+ parent.enclosing_scope
587
+ end
588
+ end
589
+ end
590
+
591
+ def is_classscope?
592
+ resource && resource.type == TYPENAME_CLASS
593
+ end
594
+
595
+ def is_nodescope?
596
+ resource && resource.type == TYPENAME_NODE
597
+ end
598
+
599
+ def is_topscope?
600
+ equal?(@compiler.topscope)
601
+ end
602
+
603
+ # @api private
604
+ def lookup_qualified_variable(fqn, options)
605
+ table = @compiler.qualified_variables
606
+ val = table[fqn]
607
+ return val if !val.nil? || table.include?(fqn)
608
+
609
+ # not found - search inherited scope for class
610
+ leaf_index = fqn.rindex('::')
611
+ unless leaf_index.nil?
612
+ leaf_name = fqn[(leaf_index + 2)..]
613
+ class_name = fqn[0, leaf_index]
614
+ begin
615
+ qs = qualified_scope(class_name)
616
+ unless qs.nil?
617
+ return qs.get_local_variable(leaf_name) if qs.has_local_variable?(leaf_name)
618
+
619
+ iscope = qs.inherited_scope
620
+ return lookup_qualified_variable("#{iscope.source.name}::#{leaf_name}", options) unless iscope.nil?
621
+ end
622
+ rescue RuntimeError => e
623
+ # because a failure to find the class, or inherited should be reported against given name
624
+ return handle_not_found(class_name, leaf_name, options, e.message)
625
+ end
626
+ end
627
+ # report with leading '::' by using empty class_name
628
+ handle_not_found('', fqn, options)
629
+ end
630
+
631
+ # @api private
632
+ def has_local_variable?(name)
633
+ @ephemeral.last.include?(name)
634
+ end
635
+
636
+ # @api private
637
+ def get_local_variable(name)
638
+ @ephemeral.last[name]
639
+ end
640
+
641
+ def handle_not_found(class_name, variable_name, position, reason = nil)
642
+ unless Puppet[:strict_variables]
643
+ # Do not issue warning if strict variables are on, as an error will be raised by variable_not_found
644
+ location = if position[:lineproc]
645
+ Puppet::Util::Errors.error_location_with_space(nil, position[:lineproc].call)
646
+ else
647
+ Puppet::Util::Errors.error_location_with_space(position[:file], position[:line])
648
+ end
649
+ variable_not_found("#{class_name}::#{variable_name}", "#{reason}#{location}")
650
+ return nil
651
+ end
652
+ variable_not_found("#{class_name}::#{variable_name}", reason)
653
+ end
654
+
655
+ def has_enclosing_scope?
656
+ !parent.nil?
657
+ end
658
+ private :has_enclosing_scope?
659
+
660
+ def qualified_scope(classname)
661
+ klass = find_hostclass(classname)
662
+ raise _("class %{classname} could not be found") % { classname: classname } unless klass
663
+
664
+ kscope = class_scope(klass)
665
+ raise _("class %{classname} has not been evaluated") % { classname: classname } unless kscope
666
+
667
+ kscope
668
+ end
669
+ private :qualified_scope
670
+
671
+ # Returns a Hash containing all variables and their values, optionally (and
672
+ # by default) including the values defined in parent. Local values
673
+ # shadow parent values. Ephemeral scopes for match results ($0 - $n) are not included.
674
+ # Optionally include the variables that are explicitly set to `undef`.
675
+ #
676
+ def to_hash(recursive = true, include_undef = false)
677
+ if recursive and has_enclosing_scope?
678
+ target = enclosing_scope.to_hash(recursive)
679
+ unless (inherited = inherited_scope).nil?
680
+ target.merge!(inherited.to_hash(recursive))
681
+ end
682
+ else
683
+ target = Hash.new
684
+ end
685
+
686
+ # add all local scopes
687
+ @ephemeral.last.add_entries_to(target, include_undef)
688
+ target
689
+ end
690
+
691
+ # Create a new scope and set these options.
692
+ def newscope(options = {})
693
+ compiler.newscope(self, options)
694
+ end
695
+
696
+ def parent_module_name
697
+ return nil unless @parent && @parent.source
698
+
699
+ @parent.source.module_name
700
+ end
701
+
702
+ # Set defaults for a type. The typename should already be downcased,
703
+ # so that the syntax is isolated. We don't do any kind of type-checking
704
+ # here; instead we let the resource do it when the defaults are used.
705
+ def define_settings(type, params)
706
+ table = @defaults[type]
707
+
708
+ # if we got a single param, it'll be in its own array
709
+ params = [params] unless params.is_a?(Array)
710
+
711
+ params.each { |param|
712
+ if table.include?(param.name)
713
+ raise Puppet::ParseError.new(_("Default already defined for %{type} { %{param} }; cannot redefine") % { type: type, param: param.name }, param.file, param.line)
714
+ end
715
+
716
+ table[param.name] = param
717
+ }
718
+ end
719
+
720
+ # Merge all settings for the given _env_name_ into this scope
721
+ # @param env_name [Symbol] the name of the environment
722
+ # @param set_in_this_scope [Boolean] if the settings variables should also be set in this instance of scope
723
+ def merge_settings(env_name, set_in_this_scope = true)
724
+ settings = Puppet.settings
725
+ table = effective_symtable(false)
726
+ global_table = compiler.qualified_variables
727
+ all_local = {}
728
+ settings.each_key do |name|
729
+ next if :name == name
730
+
731
+ key = name.to_s
732
+ value = transform_setting(settings.value_sym(name, env_name))
733
+ if set_in_this_scope
734
+ table[key] = value
735
+ end
736
+ all_local[key] = value
737
+ # also write the fqn into global table for direct lookup
738
+ global_table["settings::#{key}"] = value
739
+ end
740
+ # set the 'all_local' - a hash of all settings
741
+ global_table["settings::all_local"] = all_local
742
+ nil
743
+ end
744
+
745
+ def transform_setting(val)
746
+ case val
747
+ when String, Numeric, true, false, nil
748
+ val
749
+ when Array
750
+ val.map { |entry| transform_setting(entry) }
751
+ when Hash
752
+ result = {}
753
+ val.each { |k, v| result[transform_setting(k)] = transform_setting(v) }
754
+ result
755
+ else
756
+ # not ideal, but required as there are settings values that are special
757
+ :undef == val ? nil : val.to_s
758
+ end
759
+ end
760
+ private :transform_setting
761
+
762
+ VARNAME_TRUSTED = 'trusted'
763
+ VARNAME_FACTS = 'facts'
764
+ VARNAME_SERVER_FACTS = 'server_facts'
765
+ RESERVED_VARIABLE_NAMES = [VARNAME_TRUSTED, VARNAME_FACTS].freeze
766
+ TYPENAME_CLASS = 'Class'
767
+ TYPENAME_NODE = 'Node'
768
+
769
+ # Set a variable in the current scope. This will override settings
770
+ # in scopes above, but will not allow variables in the current scope
771
+ # to be reassigned.
772
+ # It's preferred that you use self[]= instead of this; only use this
773
+ # when you need to set options.
774
+ def setvar(name, value, options = EMPTY_HASH)
775
+ if name =~ /^[0-9]+$/
776
+ raise Puppet::ParseError, _("Cannot assign to a numeric match result variable '$%{name}'") % { name: name } # unless options[:ephemeral]
777
+ end
778
+ unless name.is_a? String
779
+ raise Puppet::ParseError, _("Scope variable name %{name} is a %{class_type}, not a string") % { name: name.inspect, class_type: name.class }
780
+ end
781
+
782
+ # Check for reserved variable names
783
+ if (name == VARNAME_TRUSTED || name == VARNAME_FACTS) && !options[:privileged]
784
+ raise Puppet::ParseError, _("Attempt to assign to a reserved variable name: '%{name}'") % { name: name }
785
+ end
786
+
787
+ # Check for server_facts reserved variable name
788
+ if name == VARNAME_SERVER_FACTS && !options[:privileged]
789
+ raise Puppet::ParseError, _("Attempt to assign to a reserved variable name: '%{name}'") % { name: name }
790
+ end
791
+
792
+ table = effective_symtable(options[:ephemeral])
793
+ if table.bound?(name)
794
+ error = Puppet::ParseError.new(_("Cannot reassign variable '$%{name}'") % { name: name })
795
+ error.file = options[:file] if options[:file]
796
+ error.line = options[:line] if options[:line]
797
+ raise error
798
+ end
799
+
800
+ table[name] = value
801
+
802
+ # Assign the qualified name in the environment
803
+ # Note that Settings scope has a source set to Boolean true.
804
+ #
805
+ # Only meaningful to set a fqn globally if table to assign to is the top of the scope's ephemeral stack
806
+ if @symtable.equal?(table)
807
+ if is_topscope?
808
+ # the scope name is '::'
809
+ compiler.qualified_variables[name] = value
810
+ elsif source.is_a?(Puppet::Resource::Type) && source.type == :hostclass
811
+ # the name is the name of the class
812
+ sourcename = source.name
813
+ compiler.qualified_variables["#{sourcename}::#{name}"] = value
814
+ end
815
+ end
816
+ value
817
+ end
818
+
819
+ def set_trusted(hash)
820
+ setvar('trusted', deep_freeze(hash), :privileged => true)
821
+ end
822
+
823
+ def set_facts(hash)
824
+ setvar('facts', deep_freeze(hash), :privileged => true)
825
+ end
826
+
827
+ def set_server_facts(hash)
828
+ setvar('server_facts', deep_freeze(hash), :privileged => true)
829
+ end
830
+
831
+ # Deeply freezes the given object. The object and its content must be of the types:
832
+ # Array, Hash, Numeric, Boolean, Regexp, NilClass, or String. All other types raises an Error.
833
+ # (i.e. if they are assignable to Puppet::Pops::Types::Data type).
834
+ #
835
+ def deep_freeze(object)
836
+ case object
837
+ when Array
838
+ object.each { |v| deep_freeze(v) }
839
+ object.freeze
840
+ when Hash
841
+ object.each { |k, v| deep_freeze(k); deep_freeze(v) }
842
+ object.freeze
843
+ when NilClass, Numeric, TrueClass, FalseClass
844
+ # do nothing
845
+ when String
846
+ object.freeze
847
+ else
848
+ raise Puppet::Error, _("Unsupported data type: '%{klass}'") % { klass: object.class }
849
+ end
850
+ object
851
+ end
852
+ private :deep_freeze
853
+
854
+ # Return the effective "table" for setting variables.
855
+ # This method returns the first ephemeral "table" that acts as a local scope, or this
856
+ # scope's symtable. If the parameter `use_ephemeral` is true, the "top most" ephemeral "table"
857
+ # will be returned (irrespective of it being a match scope or a local scope).
858
+ #
859
+ # @param use_ephemeral [Boolean] whether the top most ephemeral (of any kind) should be used or not
860
+ def effective_symtable(use_ephemeral)
861
+ s = @ephemeral[-1]
862
+ return s || @symtable if use_ephemeral
863
+
864
+ while s && !s.is_local_scope?()
865
+ s = s.parent
866
+ end
867
+ s || @symtable
868
+ end
869
+
870
+ # Sets the variable value of the name given as an argument to the given value. The value is
871
+ # set in the current scope and may shadow a variable with the same name in a visible outer scope.
872
+ # It is illegal to re-assign a variable in the same scope. It is illegal to set a variable in some other
873
+ # scope/namespace than the scope passed to a method.
874
+ #
875
+ # @param varname [String] The variable name to which the value is assigned. Must not contain `::`
876
+ # @param value [String] The value to assign to the given variable name.
877
+ # @param options [Hash] Additional options, not part of api and no longer used.
878
+ #
879
+ # @api public
880
+ #
881
+ def []=(varname, value, _ = nil)
882
+ setvar(varname, value)
883
+ end
884
+
885
+ # Used mainly for logging
886
+ def to_s
887
+ # As this is used for logging, this should really not be done in this class at all...
888
+ return "Scope(#{@resource})" unless @resource.nil?
889
+
890
+ # For logging of function-scope - it is now showing the file and line.
891
+ detail = Puppet::Pops::PuppetStack.top_of_stack
892
+ return "Scope()" if detail.empty?
893
+
894
+ # shorten the path if possible
895
+ path = detail[0]
896
+ env_path = nil
897
+ env_path = environment.configuration.path_to_env unless environment.nil? || environment.configuration.nil?
898
+ # check module paths first since they may be in the environment (i.e. they are longer)
899
+ module_path = environment.full_modulepath.detect { |m_path| path.start_with?(m_path) }
900
+ if module_path
901
+ path = "<module>" + path[module_path.length..]
902
+ elsif env_path && path && path.start_with?(env_path)
903
+ path = "<env>" + path[env_path.length..]
904
+ end
905
+ # Make the output appear as "Scope(path, line)"
906
+ "Scope(#{[path, detail[1]].join(', ')})"
907
+ end
908
+
909
+ alias_method :inspect, :to_s
910
+
911
+ # Pop ephemeral scopes up to level and return them
912
+ #
913
+ # @param level [Integer] a positive integer
914
+ # @return [Array] the removed ephemeral scopes
915
+ # @api private
916
+ def pop_ephemerals(level)
917
+ @ephemeral.pop(@ephemeral.size - level)
918
+ end
919
+
920
+ # Push ephemeral scopes onto the ephemeral scope stack
921
+ # @param ephemeral_scopes [Array]
922
+ # @api private
923
+ def push_ephemerals(ephemeral_scopes)
924
+ ephemeral_scopes.each { |ephemeral_scope| @ephemeral.push(ephemeral_scope) } unless ephemeral_scopes.nil?
925
+ end
926
+
927
+ def ephemeral_level
928
+ @ephemeral.size
929
+ end
930
+
931
+ # TODO: Who calls this?
932
+ def new_ephemeral(local_scope = false)
933
+ if local_scope
934
+ @ephemeral.push(LocalScope.new(@ephemeral.last))
935
+ else
936
+ @ephemeral.push(MatchScope.new(@ephemeral.last, nil))
937
+ end
938
+ end
939
+
940
+ # Execute given block in global scope with no ephemerals present
941
+ #
942
+ # @yieldparam [Scope] global_scope the global and ephemeral less scope
943
+ # @return [Object] the return of the block
944
+ #
945
+ # @api private
946
+ def with_global_scope(&block)
947
+ find_global_scope.without_ephemeral_scopes(&block)
948
+ end
949
+
950
+ # Execute given block with a ephemeral scope containing the given variables
951
+ # @api private
952
+ def with_local_scope(scope_variables)
953
+ local = LocalScope.new(@ephemeral.last)
954
+ scope_variables.each_pair { |k, v| local[k] = v }
955
+ @ephemeral.push(local)
956
+ begin
957
+ yield(self)
958
+ ensure
959
+ @ephemeral.pop
960
+ end
961
+ end
962
+
963
+ # Execute given block with all ephemeral popped from the ephemeral stack
964
+ #
965
+ # @api private
966
+ def without_ephemeral_scopes
967
+ save_ephemeral = @ephemeral
968
+ begin
969
+ @ephemeral = [@symtable]
970
+ yield(self)
971
+ ensure
972
+ @ephemeral = save_ephemeral
973
+ end
974
+ end
975
+
976
+ # Nests a parameter scope
977
+ # @param [String] callee_name the name of the function, template, or resource that defines the parameters
978
+ # @param [Array<String>] param_names list of parameter names
979
+ # @yieldparam [ParameterScope] param_scope the nested scope
980
+ # @api private
981
+ def with_parameter_scope(callee_name, param_names)
982
+ param_scope = ParameterScope.new(@ephemeral.last, callee_name, param_names)
983
+ with_guarded_scope do
984
+ @ephemeral.push(param_scope)
985
+ yield(param_scope)
986
+ end
987
+ end
988
+
989
+ # Execute given block and ensure that ephemeral level is restored
990
+ #
991
+ # @return [Object] the return of the block
992
+ #
993
+ # @api private
994
+ def with_guarded_scope
995
+ elevel = ephemeral_level
996
+ begin
997
+ yield
998
+ ensure
999
+ pop_ephemerals(elevel)
1000
+ end
1001
+ end
1002
+
1003
+ # Sets match data in the most nested scope (which always is a MatchScope), it clobbers match data already set there
1004
+ #
1005
+ def set_match_data(match_data)
1006
+ @ephemeral.last.match_data = match_data
1007
+ end
1008
+
1009
+ # Nests a match data scope
1010
+ def new_match_scope(match_data)
1011
+ @ephemeral.push(MatchScope.new(@ephemeral.last, match_data))
1012
+ end
1013
+
1014
+ def ephemeral_from(match, file = nil, line = nil)
1015
+ case match
1016
+ when Hash
1017
+ # Create local scope ephemeral and set all values from hash
1018
+ new_ephemeral(true)
1019
+ match.each { |k, v| setvar(k, v, :file => file, :line => line, :ephemeral => true) }
1020
+ # Must always have an inner match data scope (that starts out as transparent)
1021
+ # In 3x slightly wasteful, since a new nested scope is created for a match
1022
+ # (TODO: Fix that problem)
1023
+ new_ephemeral(false)
1024
+ else
1025
+ raise(ArgumentError, _("Invalid regex match data. Got a %{klass}") % { klass: match.class }) unless match.is_a?(MatchData)
1026
+
1027
+ # Create a match ephemeral and set values from match data
1028
+ new_match_scope(match)
1029
+ end
1030
+ end
1031
+
1032
+ # @api private
1033
+ def find_resource_type(type)
1034
+ raise Puppet::DevError, _("Scope#find_resource_type() is no longer supported, use Puppet::Pops::Evaluator::Runtime3ResourceSupport instead")
1035
+ end
1036
+
1037
+ # @api private
1038
+ def find_builtin_resource_type(type)
1039
+ raise Puppet::DevError, _("Scope#find_builtin_resource_type() is no longer supported, use Puppet::Pops::Evaluator::Runtime3ResourceSupport instead")
1040
+ end
1041
+
1042
+ # @api private
1043
+ def find_defined_resource_type(type)
1044
+ raise Puppet::DevError, _("Scope#find_defined_resource_type() is no longer supported, use Puppet::Pops::Evaluator::Runtime3ResourceSupport instead")
1045
+ end
1046
+
1047
+ def method_missing(method, *args, &block)
1048
+ method.to_s =~ /^function_(.*)$/
1049
+ name = ::Regexp.last_match(1)
1050
+ super unless name
1051
+ super unless Puppet::Parser::Functions.function(name)
1052
+ # In odd circumstances, this might not end up defined by the previous
1053
+ # method, so we might as well be certain.
1054
+ if respond_to? method
1055
+ send(method, *args)
1056
+ else
1057
+ raise Puppet::DevError, _("Function %{name} not defined despite being loaded!") % { name: name }
1058
+ end
1059
+ end
1060
+
1061
+ # To be removed when enough time has passed after puppet 5.0.0
1062
+ # @api private
1063
+ def resolve_type_and_titles(type, titles)
1064
+ raise Puppet::DevError, _("Scope#resolve_type_and_title() is no longer supported, use Puppet::Pops::Evaluator::Runtime3ResourceSupport instead")
1065
+ end
1066
+
1067
+ # Transforms references to classes to the form suitable for
1068
+ # lookup in the compiler.
1069
+ #
1070
+ # Makes names passed in the names array absolute if they are relative.
1071
+ #
1072
+ # Transforms Class[] and Resource[] type references to class name
1073
+ # or raises an error if a Class[] is unspecific, if a Resource is not
1074
+ # a 'class' resource, or if unspecific (no title).
1075
+ #
1076
+ #
1077
+ # @param names [Array<String>] names to (optionally) make absolute
1078
+ # @return [Array<String>] names after transformation
1079
+ #
1080
+ def transform_and_assert_classnames(names)
1081
+ names.map do |name|
1082
+ case name
1083
+ when NilClass
1084
+ raise ArgumentError, _("Cannot use undef as a class name")
1085
+ when String
1086
+ raise ArgumentError, _("Cannot use empty string as a class name") if name.empty?
1087
+
1088
+ name.sub(/^([^:]{1,2})/, '::\1')
1089
+
1090
+ when Puppet::Resource
1091
+ assert_class_and_title(name.type, name.title)
1092
+ name.title.sub(/^([^:]{1,2})/, '::\1')
1093
+
1094
+ when Puppet::Pops::Types::PClassType
1095
+ # TRANSLATORS "Class" and "Type" are Puppet keywords and should not be translated
1096
+ raise ArgumentError, _("Cannot use an unspecific Class[] Type") unless name.class_name
1097
+
1098
+ name.class_name.sub(/^([^:]{1,2})/, '::\1')
1099
+
1100
+ when Puppet::Pops::Types::PResourceType
1101
+ assert_class_and_title(name.type_name, name.title)
1102
+ name.title.sub(/^([^:]{1,2})/, '::\1')
1103
+ end.downcase
1104
+ end
1105
+ end
1106
+
1107
+ # Calls a 3.x or 4.x function by name with arguments given in an array using the 4.x calling convention
1108
+ # and returns the result.
1109
+ # Note that it is the caller's responsibility to rescue the given ArgumentError and provide location information
1110
+ # to aid the user find the problem. The problem is otherwise reported against the source location that
1111
+ # invoked the function that ultimately called this method.
1112
+ #
1113
+ # @return [Object] the result of the called function
1114
+ # @raise ArgumentError if the function does not exist
1115
+ def call_function(func_name, args, &block)
1116
+ Puppet::Pops::Parser::EvaluatingParser.new.evaluator.external_call_function(func_name, args, self, &block)
1117
+ end
1118
+
1119
+ private
1120
+
1121
+ def assert_class_and_title(type_name, title)
1122
+ if type_name.nil? || type_name == ''
1123
+ # TRANSLATORS "Resource" is a class name and should not be translated
1124
+ raise ArgumentError, _("Cannot use an unspecific Resource[] where a Resource['class', name] is expected")
1125
+ end
1126
+ unless type_name =~ /^[Cc]lass$/
1127
+ # TRANSLATORS "Resource" is a class name and should not be translated
1128
+ raise ArgumentError, _("Cannot use a Resource[%{type_name}] where a Resource['class', name] is expected") % { type_name: type_name }
1129
+ end
1130
+ if title.nil?
1131
+ # TRANSLATORS "Resource" is a class name and should not be translated
1132
+ raise ArgumentError, _("Cannot use an unspecific Resource['class'] where a Resource['class', name] is expected")
1133
+ end
1134
+ end
1135
+
1136
+ def extend_with_functions_module
1137
+ root = Puppet.lookup(:root_environment)
1138
+ extend Puppet::Parser::Functions.environment_module(root)
1139
+ extend Puppet::Parser::Functions.environment_module(environment) if environment != root
1140
+ end
1141
+ end