openvox 9.0.0.pre.rc1-universal-darwin

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