openvox 7.37.1

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 (1120) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +15 -0
  3. data/CODEOWNERS +11 -0
  4. data/CODE_OF_CONDUCT.md +70 -0
  5. data/CONTRIBUTING.md +161 -0
  6. data/Gemfile +82 -0
  7. data/Guardfile.example +76 -0
  8. data/LICENSE +202 -0
  9. data/README.md +68 -0
  10. data/Rakefile +160 -0
  11. data/bin/puppet +9 -0
  12. data/conf/environment.conf +18 -0
  13. data/conf/fileserver.conf +32 -0
  14. data/conf/hiera.yaml +11 -0
  15. data/conf/puppet.conf +6 -0
  16. data/examples/enc/regexp_nodes/classes/databases +2 -0
  17. data/examples/enc/regexp_nodes/classes/webservers +2 -0
  18. data/examples/enc/regexp_nodes/environment/development +2 -0
  19. data/examples/enc/regexp_nodes/parameters/service/prod +1 -0
  20. data/examples/enc/regexp_nodes/parameters/service/qa +3 -0
  21. data/examples/enc/regexp_nodes/parameters/service/sandbox +1 -0
  22. data/examples/enc/regexp_nodes/regexp_nodes.rb +270 -0
  23. data/examples/hiera/README.md +91 -0
  24. data/examples/hiera/etc/hiera.yaml +15 -0
  25. data/examples/hiera/etc/hieradb/common.yaml +3 -0
  26. data/examples/hiera/etc/hieradb/dc1.yaml +6 -0
  27. data/examples/hiera/etc/hieradb/development.yaml +2 -0
  28. data/examples/hiera/etc/puppet.conf +3 -0
  29. data/examples/hiera/modules/data/manifests/common.pp +4 -0
  30. data/examples/hiera/modules/ntp/manifests/config.pp +6 -0
  31. data/examples/hiera/modules/ntp/manifests/data.pp +4 -0
  32. data/examples/hiera/modules/ntp/templates/ntp.conf.erb +3 -0
  33. data/examples/hiera/modules/users/manifests/common.pp +4 -0
  34. data/examples/hiera/modules/users/manifests/dc1.pp +4 -0
  35. data/examples/hiera/modules/users/manifests/development.pp +4 -0
  36. data/examples/hiera/site.pp +3 -0
  37. data/examples/nagios/check_puppet.rb +123 -0
  38. data/ext/README.md +13 -0
  39. data/ext/build_defaults.yaml +18 -0
  40. data/ext/debian/puppet.default +4 -0
  41. data/ext/debian/puppet.init +113 -0
  42. data/ext/hiera/hiera.yaml +15 -0
  43. data/ext/osx/puppet.plist +32 -0
  44. data/ext/project_data.yaml +20 -0
  45. data/ext/redhat/client.init +169 -0
  46. data/ext/redhat/client.sysconfig +2 -0
  47. data/ext/solaris/smf/puppet +44 -0
  48. data/ext/solaris/smf/puppet.xml +46 -0
  49. data/ext/suse/client.init +141 -0
  50. data/ext/systemd/puppet.service +26 -0
  51. data/ext/windows/puppet_interactive.bat +6 -0
  52. data/ext/windows/puppet_shell.bat +9 -0
  53. data/ext/windows/run_puppet_interactive.bat +9 -0
  54. data/ext/windows/service/daemon.bat +6 -0
  55. data/ext/windows/service/daemon.rb +225 -0
  56. data/install.rb +499 -0
  57. data/lib/hiera/puppet_function.rb +84 -0
  58. data/lib/hiera/scope.rb +90 -0
  59. data/lib/hiera_puppet.rb +80 -0
  60. data/lib/puppet/agent/disabler.rb +53 -0
  61. data/lib/puppet/agent/locker.rb +46 -0
  62. data/lib/puppet/agent.rb +176 -0
  63. data/lib/puppet/application/agent.rb +523 -0
  64. data/lib/puppet/application/apply.rb +428 -0
  65. data/lib/puppet/application/catalog.rb +4 -0
  66. data/lib/puppet/application/config.rb +5 -0
  67. data/lib/puppet/application/describe.rb +253 -0
  68. data/lib/puppet/application/device.rb +439 -0
  69. data/lib/puppet/application/doc.rb +233 -0
  70. data/lib/puppet/application/epp.rb +5 -0
  71. data/lib/puppet/application/face_base.rb +276 -0
  72. data/lib/puppet/application/facts.rb +9 -0
  73. data/lib/puppet/application/filebucket.rb +318 -0
  74. data/lib/puppet/application/generate.rb +5 -0
  75. data/lib/puppet/application/help.rb +5 -0
  76. data/lib/puppet/application/indirection_base.rb +4 -0
  77. data/lib/puppet/application/lookup.rb +433 -0
  78. data/lib/puppet/application/module.rb +4 -0
  79. data/lib/puppet/application/node.rb +4 -0
  80. data/lib/puppet/application/parser.rb +5 -0
  81. data/lib/puppet/application/plugin.rb +4 -0
  82. data/lib/puppet/application/report.rb +4 -0
  83. data/lib/puppet/application/resource.rb +254 -0
  84. data/lib/puppet/application/script.rb +264 -0
  85. data/lib/puppet/application/ssl.rb +323 -0
  86. data/lib/puppet/application.rb +596 -0
  87. data/lib/puppet/application_support.rb +68 -0
  88. data/lib/puppet/coercion.rb +40 -0
  89. data/lib/puppet/compilable_resource_type.rb +15 -0
  90. data/lib/puppet/concurrent/lock.rb +16 -0
  91. data/lib/puppet/concurrent/synchronized.rb +15 -0
  92. data/lib/puppet/concurrent/thread_local_singleton.rb +17 -0
  93. data/lib/puppet/concurrent.rb +2 -0
  94. data/lib/puppet/configurer/downloader.rb +85 -0
  95. data/lib/puppet/configurer/fact_handler.rb +50 -0
  96. data/lib/puppet/configurer/plugin_handler.rb +59 -0
  97. data/lib/puppet/configurer.rb +755 -0
  98. data/lib/puppet/confine/any.rb +26 -0
  99. data/lib/puppet/confine/boolean.rb +45 -0
  100. data/lib/puppet/confine/exists.rb +19 -0
  101. data/lib/puppet/confine/false.rb +25 -0
  102. data/lib/puppet/confine/feature.rb +17 -0
  103. data/lib/puppet/confine/true.rb +26 -0
  104. data/lib/puppet/confine/variable.rb +59 -0
  105. data/lib/puppet/confine.rb +83 -0
  106. data/lib/puppet/confine_collection.rb +51 -0
  107. data/lib/puppet/confiner.rb +46 -0
  108. data/lib/puppet/context/trusted_information.rb +120 -0
  109. data/lib/puppet/context.rb +188 -0
  110. data/lib/puppet/daemon.rb +182 -0
  111. data/lib/puppet/data_binding.rb +14 -0
  112. data/lib/puppet/datatypes/error.rb +21 -0
  113. data/lib/puppet/datatypes/impl/error.rb +40 -0
  114. data/lib/puppet/datatypes.rb +213 -0
  115. data/lib/puppet/defaults.rb +2277 -0
  116. data/lib/puppet/environments.rb +601 -0
  117. data/lib/puppet/error.rb +138 -0
  118. data/lib/puppet/etc.rb +180 -0
  119. data/lib/puppet/external/dot.rb +325 -0
  120. data/lib/puppet/external/pson/common.rb +374 -0
  121. data/lib/puppet/external/pson/pure/generator.rb +395 -0
  122. data/lib/puppet/external/pson/pure/parser.rb +308 -0
  123. data/lib/puppet/external/pson/pure.rb +15 -0
  124. data/lib/puppet/external/pson/version.rb +8 -0
  125. data/lib/puppet/face/catalog/select.rb +49 -0
  126. data/lib/puppet/face/catalog.rb +165 -0
  127. data/lib/puppet/face/config.rb +267 -0
  128. data/lib/puppet/face/epp.rb +566 -0
  129. data/lib/puppet/face/facts.rb +174 -0
  130. data/lib/puppet/face/generate.rb +66 -0
  131. data/lib/puppet/face/help/action.erb +90 -0
  132. data/lib/puppet/face/help/face.erb +115 -0
  133. data/lib/puppet/face/help/global.erb +16 -0
  134. data/lib/puppet/face/help/man.erb +152 -0
  135. data/lib/puppet/face/help.rb +242 -0
  136. data/lib/puppet/face/module/changes.rb +43 -0
  137. data/lib/puppet/face/module/install.rb +146 -0
  138. data/lib/puppet/face/module/list.rb +272 -0
  139. data/lib/puppet/face/module/uninstall.rb +89 -0
  140. data/lib/puppet/face/module/upgrade.rb +87 -0
  141. data/lib/puppet/face/module.rb +19 -0
  142. data/lib/puppet/face/node/clean.rb +107 -0
  143. data/lib/puppet/face/node.rb +43 -0
  144. data/lib/puppet/face/parser.rb +227 -0
  145. data/lib/puppet/face/plugin.rb +60 -0
  146. data/lib/puppet/face/report.rb +54 -0
  147. data/lib/puppet/face/resource.rb +53 -0
  148. data/lib/puppet/face.rb +12 -0
  149. data/lib/puppet/facter_impl.rb +96 -0
  150. data/lib/puppet/feature/base.rb +76 -0
  151. data/lib/puppet/feature/bolt.rb +3 -0
  152. data/lib/puppet/feature/cfpropertylist.rb +3 -0
  153. data/lib/puppet/feature/eventlog.rb +5 -0
  154. data/lib/puppet/feature/hiera_eyaml.rb +3 -0
  155. data/lib/puppet/feature/hocon.rb +3 -0
  156. data/lib/puppet/feature/libuser.rb +8 -0
  157. data/lib/puppet/feature/msgpack.rb +3 -0
  158. data/lib/puppet/feature/pe_license.rb +4 -0
  159. data/lib/puppet/feature/selinux.rb +3 -0
  160. data/lib/puppet/feature/ssh.rb +3 -0
  161. data/lib/puppet/feature/telnet.rb +9 -0
  162. data/lib/puppet/feature/zlib.rb +5 -0
  163. data/lib/puppet/ffi/posix/constants.rb +14 -0
  164. data/lib/puppet/ffi/posix/functions.rb +24 -0
  165. data/lib/puppet/ffi/posix.rb +10 -0
  166. data/lib/puppet/ffi/windows/api_types.rb +311 -0
  167. data/lib/puppet/ffi/windows/constants.rb +404 -0
  168. data/lib/puppet/ffi/windows/functions.rb +628 -0
  169. data/lib/puppet/ffi/windows/structs.rb +338 -0
  170. data/lib/puppet/ffi/windows.rb +12 -0
  171. data/lib/puppet/file_bucket/dipper.rb +174 -0
  172. data/lib/puppet/file_bucket/file.rb +129 -0
  173. data/lib/puppet/file_bucket.rb +4 -0
  174. data/lib/puppet/file_serving/base.rb +86 -0
  175. data/lib/puppet/file_serving/configuration/parser.rb +113 -0
  176. data/lib/puppet/file_serving/configuration.rb +113 -0
  177. data/lib/puppet/file_serving/content.rb +43 -0
  178. data/lib/puppet/file_serving/fileset.rb +186 -0
  179. data/lib/puppet/file_serving/http_metadata.rb +62 -0
  180. data/lib/puppet/file_serving/metadata.rb +171 -0
  181. data/lib/puppet/file_serving/mount/file.rb +122 -0
  182. data/lib/puppet/file_serving/mount/locales.rb +35 -0
  183. data/lib/puppet/file_serving/mount/modules.rb +26 -0
  184. data/lib/puppet/file_serving/mount/pluginfacts.rb +35 -0
  185. data/lib/puppet/file_serving/mount/plugins.rb +35 -0
  186. data/lib/puppet/file_serving/mount/scripts.rb +24 -0
  187. data/lib/puppet/file_serving/mount/tasks.rb +23 -0
  188. data/lib/puppet/file_serving/mount.rb +38 -0
  189. data/lib/puppet/file_serving/terminus_helper.rb +31 -0
  190. data/lib/puppet/file_serving/terminus_selector.rb +31 -0
  191. data/lib/puppet/file_serving.rb +3 -0
  192. data/lib/puppet/file_system/file_impl.rb +188 -0
  193. data/lib/puppet/file_system/jruby.rb +23 -0
  194. data/lib/puppet/file_system/memory_file.rb +79 -0
  195. data/lib/puppet/file_system/memory_impl.rb +99 -0
  196. data/lib/puppet/file_system/path_pattern.rb +93 -0
  197. data/lib/puppet/file_system/posix.rb +47 -0
  198. data/lib/puppet/file_system/uniquefile.rb +188 -0
  199. data/lib/puppet/file_system/windows.rb +213 -0
  200. data/lib/puppet/file_system.rb +419 -0
  201. data/lib/puppet/forge/cache.rb +60 -0
  202. data/lib/puppet/forge/errors.rb +114 -0
  203. data/lib/puppet/forge/repository.rb +95 -0
  204. data/lib/puppet/forge.rb +259 -0
  205. data/lib/puppet/functions/abs.rb +61 -0
  206. data/lib/puppet/functions/alert.rb +14 -0
  207. data/lib/puppet/functions/all.rb +104 -0
  208. data/lib/puppet/functions/annotate.rb +108 -0
  209. data/lib/puppet/functions/any.rb +109 -0
  210. data/lib/puppet/functions/assert_type.rb +93 -0
  211. data/lib/puppet/functions/binary_file.rb +32 -0
  212. data/lib/puppet/functions/break.rb +47 -0
  213. data/lib/puppet/functions/call.rb +80 -0
  214. data/lib/puppet/functions/camelcase.rb +62 -0
  215. data/lib/puppet/functions/capitalize.rb +61 -0
  216. data/lib/puppet/functions/ceiling.rb +37 -0
  217. data/lib/puppet/functions/chomp.rb +57 -0
  218. data/lib/puppet/functions/chop.rb +67 -0
  219. data/lib/puppet/functions/compare.rb +125 -0
  220. data/lib/puppet/functions/contain.rb +55 -0
  221. data/lib/puppet/functions/convert_to.rb +34 -0
  222. data/lib/puppet/functions/crit.rb +14 -0
  223. data/lib/puppet/functions/debug.rb +14 -0
  224. data/lib/puppet/functions/defined.rb +159 -0
  225. data/lib/puppet/functions/dig.rb +67 -0
  226. data/lib/puppet/functions/downcase.rb +89 -0
  227. data/lib/puppet/functions/each.rb +167 -0
  228. data/lib/puppet/functions/emerg.rb +14 -0
  229. data/lib/puppet/functions/empty.rb +85 -0
  230. data/lib/puppet/functions/epp.rb +49 -0
  231. data/lib/puppet/functions/err.rb +14 -0
  232. data/lib/puppet/functions/eyaml_lookup_key.rb +102 -0
  233. data/lib/puppet/functions/filter.rb +137 -0
  234. data/lib/puppet/functions/find_file.rb +44 -0
  235. data/lib/puppet/functions/find_template.rb +63 -0
  236. data/lib/puppet/functions/flatten.rb +64 -0
  237. data/lib/puppet/functions/floor.rb +37 -0
  238. data/lib/puppet/functions/get.rb +150 -0
  239. data/lib/puppet/functions/getvar.rb +87 -0
  240. data/lib/puppet/functions/group_by.rb +62 -0
  241. data/lib/puppet/functions/hiera.rb +89 -0
  242. data/lib/puppet/functions/hiera_array.rb +81 -0
  243. data/lib/puppet/functions/hiera_hash.rb +92 -0
  244. data/lib/puppet/functions/hiera_include.rb +104 -0
  245. data/lib/puppet/functions/hocon_data.rb +41 -0
  246. data/lib/puppet/functions/import.rb +7 -0
  247. data/lib/puppet/functions/include.rb +53 -0
  248. data/lib/puppet/functions/index.rb +167 -0
  249. data/lib/puppet/functions/info.rb +14 -0
  250. data/lib/puppet/functions/inline_epp.rb +60 -0
  251. data/lib/puppet/functions/join.rb +56 -0
  252. data/lib/puppet/functions/json_data.rb +33 -0
  253. data/lib/puppet/functions/keys.rb +25 -0
  254. data/lib/puppet/functions/length.rb +44 -0
  255. data/lib/puppet/functions/lest.rb +55 -0
  256. data/lib/puppet/functions/lookup.rb +224 -0
  257. data/lib/puppet/functions/lstrip.rb +58 -0
  258. data/lib/puppet/functions/map.rb +135 -0
  259. data/lib/puppet/functions/match.rb +130 -0
  260. data/lib/puppet/functions/max.rb +183 -0
  261. data/lib/puppet/functions/min.rb +182 -0
  262. data/lib/puppet/functions/module_directory.rb +41 -0
  263. data/lib/puppet/functions/new.rb +1011 -0
  264. data/lib/puppet/functions/next.rb +33 -0
  265. data/lib/puppet/functions/notice.rb +14 -0
  266. data/lib/puppet/functions/partition.rb +62 -0
  267. data/lib/puppet/functions/reduce.rb +162 -0
  268. data/lib/puppet/functions/regsubst.rb +101 -0
  269. data/lib/puppet/functions/require.rb +77 -0
  270. data/lib/puppet/functions/return.rb +15 -0
  271. data/lib/puppet/functions/reverse_each.rb +94 -0
  272. data/lib/puppet/functions/round.rb +24 -0
  273. data/lib/puppet/functions/rstrip.rb +58 -0
  274. data/lib/puppet/functions/scanf.rb +44 -0
  275. data/lib/puppet/functions/size.rb +15 -0
  276. data/lib/puppet/functions/slice.rb +124 -0
  277. data/lib/puppet/functions/sort.rb +74 -0
  278. data/lib/puppet/functions/split.rb +76 -0
  279. data/lib/puppet/functions/step.rb +98 -0
  280. data/lib/puppet/functions/strftime.rb +212 -0
  281. data/lib/puppet/functions/strip.rb +58 -0
  282. data/lib/puppet/functions/then.rb +77 -0
  283. data/lib/puppet/functions/tree_each.rb +197 -0
  284. data/lib/puppet/functions/type.rb +72 -0
  285. data/lib/puppet/functions/unique.rb +132 -0
  286. data/lib/puppet/functions/unwrap.rb +59 -0
  287. data/lib/puppet/functions/upcase.rb +89 -0
  288. data/lib/puppet/functions/values.rb +25 -0
  289. data/lib/puppet/functions/versioncmp.rb +40 -0
  290. data/lib/puppet/functions/warning.rb +14 -0
  291. data/lib/puppet/functions/with.rb +32 -0
  292. data/lib/puppet/functions/yaml_data.rb +45 -0
  293. data/lib/puppet/functions.rb +862 -0
  294. data/lib/puppet/generate/models/type/property.rb +70 -0
  295. data/lib/puppet/generate/models/type/type.rb +65 -0
  296. data/lib/puppet/generate/templates/type/pcore.erb +42 -0
  297. data/lib/puppet/generate/type.rb +249 -0
  298. data/lib/puppet/gettext/config.rb +275 -0
  299. data/lib/puppet/gettext/module_translations.rb +42 -0
  300. data/lib/puppet/gettext/stubs.rb +11 -0
  301. data/lib/puppet/graph/key.rb +26 -0
  302. data/lib/puppet/graph/prioritizer.rb +29 -0
  303. data/lib/puppet/graph/rb_tree_map.rb +388 -0
  304. data/lib/puppet/graph/relationship_graph.rb +284 -0
  305. data/lib/puppet/graph/sequential_prioritizer.rb +31 -0
  306. data/lib/puppet/graph/simple_graph.rb +546 -0
  307. data/lib/puppet/graph.rb +9 -0
  308. data/lib/puppet/http/client.rb +525 -0
  309. data/lib/puppet/http/dns.rb +159 -0
  310. data/lib/puppet/http/errors.rb +48 -0
  311. data/lib/puppet/http/external_client.rb +88 -0
  312. data/lib/puppet/http/factory.rb +51 -0
  313. data/lib/puppet/http/pool.rb +172 -0
  314. data/lib/puppet/http/pool_entry.rb +17 -0
  315. data/lib/puppet/http/proxy.rb +137 -0
  316. data/lib/puppet/http/redirector.rb +85 -0
  317. data/lib/puppet/http/resolver/server_list.rb +87 -0
  318. data/lib/puppet/http/resolver/settings.rb +23 -0
  319. data/lib/puppet/http/resolver/srv.rb +41 -0
  320. data/lib/puppet/http/resolver.rb +48 -0
  321. data/lib/puppet/http/response.rb +102 -0
  322. data/lib/puppet/http/response_converter.rb +24 -0
  323. data/lib/puppet/http/response_net_http.rb +42 -0
  324. data/lib/puppet/http/retry_after_handler.rb +77 -0
  325. data/lib/puppet/http/service/ca.rb +101 -0
  326. data/lib/puppet/http/service/compiler.rb +353 -0
  327. data/lib/puppet/http/service/file_server.rb +198 -0
  328. data/lib/puppet/http/service/puppetserver.rb +53 -0
  329. data/lib/puppet/http/service/report.rb +64 -0
  330. data/lib/puppet/http/service.rb +182 -0
  331. data/lib/puppet/http/session.rb +122 -0
  332. data/lib/puppet/http/site.rb +42 -0
  333. data/lib/puppet/http.rb +46 -0
  334. data/lib/puppet/indirector/catalog/compiler.rb +431 -0
  335. data/lib/puppet/indirector/catalog/json.rb +40 -0
  336. data/lib/puppet/indirector/catalog/msgpack.rb +6 -0
  337. data/lib/puppet/indirector/catalog/rest.rb +49 -0
  338. data/lib/puppet/indirector/catalog/store_configs.rb +8 -0
  339. data/lib/puppet/indirector/catalog/yaml.rb +6 -0
  340. data/lib/puppet/indirector/code.rb +6 -0
  341. data/lib/puppet/indirector/data_binding/hiera.rb +7 -0
  342. data/lib/puppet/indirector/data_binding/none.rb +8 -0
  343. data/lib/puppet/indirector/direct_file_server.rb +17 -0
  344. data/lib/puppet/indirector/envelope.rb +11 -0
  345. data/lib/puppet/indirector/errors.rb +5 -0
  346. data/lib/puppet/indirector/exec.rb +38 -0
  347. data/lib/puppet/indirector/face.rb +153 -0
  348. data/lib/puppet/indirector/fact_search.rb +60 -0
  349. data/lib/puppet/indirector/facts/facter.rb +117 -0
  350. data/lib/puppet/indirector/facts/json.rb +27 -0
  351. data/lib/puppet/indirector/facts/memory.rb +9 -0
  352. data/lib/puppet/indirector/facts/network_device.rb +27 -0
  353. data/lib/puppet/indirector/facts/rest.rb +44 -0
  354. data/lib/puppet/indirector/facts/store_configs.rb +11 -0
  355. data/lib/puppet/indirector/facts/yaml.rb +29 -0
  356. data/lib/puppet/indirector/file_bucket_file/file.rb +262 -0
  357. data/lib/puppet/indirector/file_bucket_file/rest.rb +50 -0
  358. data/lib/puppet/indirector/file_bucket_file/selector.rb +53 -0
  359. data/lib/puppet/indirector/file_content/file.rb +7 -0
  360. data/lib/puppet/indirector/file_content/file_server.rb +7 -0
  361. data/lib/puppet/indirector/file_content/rest.rb +35 -0
  362. data/lib/puppet/indirector/file_content/selector.rb +30 -0
  363. data/lib/puppet/indirector/file_content.rb +5 -0
  364. data/lib/puppet/indirector/file_metadata/file.rb +7 -0
  365. data/lib/puppet/indirector/file_metadata/file_server.rb +7 -0
  366. data/lib/puppet/indirector/file_metadata/http.rb +47 -0
  367. data/lib/puppet/indirector/file_metadata/rest.rb +56 -0
  368. data/lib/puppet/indirector/file_metadata/selector.rb +30 -0
  369. data/lib/puppet/indirector/file_metadata.rb +5 -0
  370. data/lib/puppet/indirector/file_server.rb +54 -0
  371. data/lib/puppet/indirector/generic_http.rb +5 -0
  372. data/lib/puppet/indirector/hiera.rb +100 -0
  373. data/lib/puppet/indirector/indirection.rb +372 -0
  374. data/lib/puppet/indirector/json.rb +79 -0
  375. data/lib/puppet/indirector/memory.rb +34 -0
  376. data/lib/puppet/indirector/msgpack.rb +83 -0
  377. data/lib/puppet/indirector/node/exec.rb +70 -0
  378. data/lib/puppet/indirector/node/json.rb +8 -0
  379. data/lib/puppet/indirector/node/memory.rb +10 -0
  380. data/lib/puppet/indirector/node/msgpack.rb +7 -0
  381. data/lib/puppet/indirector/node/plain.rb +21 -0
  382. data/lib/puppet/indirector/node/rest.rb +29 -0
  383. data/lib/puppet/indirector/node/store_configs.rb +8 -0
  384. data/lib/puppet/indirector/node/yaml.rb +7 -0
  385. data/lib/puppet/indirector/none.rb +9 -0
  386. data/lib/puppet/indirector/plain.rb +9 -0
  387. data/lib/puppet/indirector/report/json.rb +34 -0
  388. data/lib/puppet/indirector/report/msgpack.rb +11 -0
  389. data/lib/puppet/indirector/report/processor.rb +60 -0
  390. data/lib/puppet/indirector/report/rest.rb +42 -0
  391. data/lib/puppet/indirector/report/yaml.rb +34 -0
  392. data/lib/puppet/indirector/request.rb +194 -0
  393. data/lib/puppet/indirector/resource/ral.rb +66 -0
  394. data/lib/puppet/indirector/resource/store_configs.rb +12 -0
  395. data/lib/puppet/indirector/resource/validator.rb +8 -0
  396. data/lib/puppet/indirector/rest.rb +64 -0
  397. data/lib/puppet/indirector/store_configs.rb +30 -0
  398. data/lib/puppet/indirector/terminus.rb +176 -0
  399. data/lib/puppet/indirector/yaml.rb +63 -0
  400. data/lib/puppet/indirector.rb +61 -0
  401. data/lib/puppet/info_service/class_information_service.rb +109 -0
  402. data/lib/puppet/info_service/plan_information_service.rb +36 -0
  403. data/lib/puppet/info_service/task_information_service.rb +44 -0
  404. data/lib/puppet/info_service.rb +26 -0
  405. data/lib/puppet/interface/action.rb +406 -0
  406. data/lib/puppet/interface/action_builder.rb +161 -0
  407. data/lib/puppet/interface/action_manager.rb +98 -0
  408. data/lib/puppet/interface/documentation.rb +357 -0
  409. data/lib/puppet/interface/face_collection.rb +137 -0
  410. data/lib/puppet/interface/option.rb +172 -0
  411. data/lib/puppet/interface/option_builder.rb +105 -0
  412. data/lib/puppet/interface/option_manager.rb +106 -0
  413. data/lib/puppet/interface.rb +239 -0
  414. data/lib/puppet/loaders.rb +30 -0
  415. data/lib/puppet/metatype/manager.rb +197 -0
  416. data/lib/puppet/module/plan.rb +159 -0
  417. data/lib/puppet/module/task.rb +283 -0
  418. data/lib/puppet/module.rb +475 -0
  419. data/lib/puppet/module_tool/applications/application.rb +91 -0
  420. data/lib/puppet/module_tool/applications/checksummer.rb +62 -0
  421. data/lib/puppet/module_tool/applications/installer.rb +411 -0
  422. data/lib/puppet/module_tool/applications/uninstaller.rb +119 -0
  423. data/lib/puppet/module_tool/applications/unpacker.rb +100 -0
  424. data/lib/puppet/module_tool/applications/upgrader.rb +282 -0
  425. data/lib/puppet/module_tool/applications.rb +12 -0
  426. data/lib/puppet/module_tool/checksums.rb +49 -0
  427. data/lib/puppet/module_tool/contents_description.rb +89 -0
  428. data/lib/puppet/module_tool/dependency.rb +41 -0
  429. data/lib/puppet/module_tool/errors/base.rb +15 -0
  430. data/lib/puppet/module_tool/errors/installer.rb +93 -0
  431. data/lib/puppet/module_tool/errors/shared.rb +227 -0
  432. data/lib/puppet/module_tool/errors/uninstaller.rb +50 -0
  433. data/lib/puppet/module_tool/errors/upgrader.rb +63 -0
  434. data/lib/puppet/module_tool/errors.rb +11 -0
  435. data/lib/puppet/module_tool/install_directory.rb +45 -0
  436. data/lib/puppet/module_tool/installed_modules.rb +96 -0
  437. data/lib/puppet/module_tool/local_tarball.rb +90 -0
  438. data/lib/puppet/module_tool/metadata.rb +221 -0
  439. data/lib/puppet/module_tool/shared_behaviors.rb +181 -0
  440. data/lib/puppet/module_tool/tar/gnu.rb +19 -0
  441. data/lib/puppet/module_tool/tar/mini.rb +116 -0
  442. data/lib/puppet/module_tool/tar.rb +18 -0
  443. data/lib/puppet/module_tool.rb +194 -0
  444. data/lib/puppet/network/authconfig.rb +7 -0
  445. data/lib/puppet/network/authorization.rb +19 -0
  446. data/lib/puppet/network/client_request.rb +29 -0
  447. data/lib/puppet/network/format.rb +110 -0
  448. data/lib/puppet/network/format_handler.rb +108 -0
  449. data/lib/puppet/network/format_support.rb +139 -0
  450. data/lib/puppet/network/formats.rb +329 -0
  451. data/lib/puppet/network/http/api/indirected_routes.rb +277 -0
  452. data/lib/puppet/network/http/api/indirection_type.rb +32 -0
  453. data/lib/puppet/network/http/api/master/v3/environments.rb +3 -0
  454. data/lib/puppet/network/http/api/master/v3.rb +3 -0
  455. data/lib/puppet/network/http/api/master.rb +3 -0
  456. data/lib/puppet/network/http/api/server/v3/environments.rb +48 -0
  457. data/lib/puppet/network/http/api/server/v3.rb +39 -0
  458. data/lib/puppet/network/http/api/server.rb +10 -0
  459. data/lib/puppet/network/http/api.rb +39 -0
  460. data/lib/puppet/network/http/connection.rb +286 -0
  461. data/lib/puppet/network/http/error.rb +73 -0
  462. data/lib/puppet/network/http/handler.rb +215 -0
  463. data/lib/puppet/network/http/issues.rb +12 -0
  464. data/lib/puppet/network/http/memory_response.rb +13 -0
  465. data/lib/puppet/network/http/request.rb +71 -0
  466. data/lib/puppet/network/http/response.rb +23 -0
  467. data/lib/puppet/network/http/route.rb +101 -0
  468. data/lib/puppet/network/http.rb +28 -0
  469. data/lib/puppet/network/http_pool.rb +77 -0
  470. data/lib/puppet/network/uri.rb +18 -0
  471. data/lib/puppet/network.rb +3 -0
  472. data/lib/puppet/node/environment.rb +635 -0
  473. data/lib/puppet/node/facts.rb +165 -0
  474. data/lib/puppet/node/server_facts.rb +46 -0
  475. data/lib/puppet/node.rb +256 -0
  476. data/lib/puppet/pal/catalog_compiler.rb +108 -0
  477. data/lib/puppet/pal/compiler.rb +222 -0
  478. data/lib/puppet/pal/function_signature.rb +52 -0
  479. data/lib/puppet/pal/json_catalog_encoder.rb +71 -0
  480. data/lib/puppet/pal/pal_api.rb +15 -0
  481. data/lib/puppet/pal/pal_impl.rb +590 -0
  482. data/lib/puppet/pal/plan_signature.rb +71 -0
  483. data/lib/puppet/pal/script_compiler.rb +73 -0
  484. data/lib/puppet/pal/task_signature.rb +58 -0
  485. data/lib/puppet/parameter/boolean.rb +15 -0
  486. data/lib/puppet/parameter/package_options.rb +31 -0
  487. data/lib/puppet/parameter/path.rb +57 -0
  488. data/lib/puppet/parameter/value.rb +91 -0
  489. data/lib/puppet/parameter/value_collection.rb +212 -0
  490. data/lib/puppet/parameter.rb +589 -0
  491. data/lib/puppet/parser/abstract_compiler.rb +36 -0
  492. data/lib/puppet/parser/ast/block_expression.rb +15 -0
  493. data/lib/puppet/parser/ast/branch.rb +19 -0
  494. data/lib/puppet/parser/ast/hostclass.rb +27 -0
  495. data/lib/puppet/parser/ast/leaf.rb +81 -0
  496. data/lib/puppet/parser/ast/node.rb +17 -0
  497. data/lib/puppet/parser/ast/pops_bridge.rb +245 -0
  498. data/lib/puppet/parser/ast/resource.rb +66 -0
  499. data/lib/puppet/parser/ast/resource_instance.rb +10 -0
  500. data/lib/puppet/parser/ast/resourceparam.rb +31 -0
  501. data/lib/puppet/parser/ast/top_level_construct.rb +4 -0
  502. data/lib/puppet/parser/ast.rb +61 -0
  503. data/lib/puppet/parser/catalog_compiler.rb +56 -0
  504. data/lib/puppet/parser/compiler/catalog_validator/relationship_validator.rb +39 -0
  505. data/lib/puppet/parser/compiler/catalog_validator.rb +33 -0
  506. data/lib/puppet/parser/compiler.rb +615 -0
  507. data/lib/puppet/parser/e4_parser_adapter.rb +60 -0
  508. data/lib/puppet/parser/files.rb +93 -0
  509. data/lib/puppet/parser/functions/assert_type.rb +60 -0
  510. data/lib/puppet/parser/functions/binary_file.rb +24 -0
  511. data/lib/puppet/parser/functions/break.rb +39 -0
  512. data/lib/puppet/parser/functions/contain.rb +30 -0
  513. data/lib/puppet/parser/functions/create_resources.rb +110 -0
  514. data/lib/puppet/parser/functions/defined.rb +107 -0
  515. data/lib/puppet/parser/functions/dig.rb +38 -0
  516. data/lib/puppet/parser/functions/digest.rb +5 -0
  517. data/lib/puppet/parser/functions/each.rb +104 -0
  518. data/lib/puppet/parser/functions/epp.rb +39 -0
  519. data/lib/puppet/parser/functions/fail.rb +11 -0
  520. data/lib/puppet/parser/functions/file.rb +33 -0
  521. data/lib/puppet/parser/functions/filter.rb +79 -0
  522. data/lib/puppet/parser/functions/find_file.rb +28 -0
  523. data/lib/puppet/parser/functions/fqdn_rand.rb +44 -0
  524. data/lib/puppet/parser/functions/generate.rb +37 -0
  525. data/lib/puppet/parser/functions/hiera.rb +103 -0
  526. data/lib/puppet/parser/functions/hiera_array.rb +92 -0
  527. data/lib/puppet/parser/functions/hiera_hash.rb +102 -0
  528. data/lib/puppet/parser/functions/hiera_include.rb +101 -0
  529. data/lib/puppet/parser/functions/include.rb +34 -0
  530. data/lib/puppet/parser/functions/inline_epp.rb +51 -0
  531. data/lib/puppet/parser/functions/inline_template.rb +26 -0
  532. data/lib/puppet/parser/functions/lest.rb +49 -0
  533. data/lib/puppet/parser/functions/lookup.rb +132 -0
  534. data/lib/puppet/parser/functions/map.rb +76 -0
  535. data/lib/puppet/parser/functions/match.rb +43 -0
  536. data/lib/puppet/parser/functions/md5.rb +5 -0
  537. data/lib/puppet/parser/functions/new.rb +991 -0
  538. data/lib/puppet/parser/functions/next.rb +38 -0
  539. data/lib/puppet/parser/functions/realize.rb +20 -0
  540. data/lib/puppet/parser/functions/reduce.rb +137 -0
  541. data/lib/puppet/parser/functions/regsubst.rb +62 -0
  542. data/lib/puppet/parser/functions/require.rb +40 -0
  543. data/lib/puppet/parser/functions/return.rb +92 -0
  544. data/lib/puppet/parser/functions/reverse_each.rb +83 -0
  545. data/lib/puppet/parser/functions/scanf.rb +38 -0
  546. data/lib/puppet/parser/functions/sha1.rb +5 -0
  547. data/lib/puppet/parser/functions/sha256.rb +5 -0
  548. data/lib/puppet/parser/functions/shellquote.rb +61 -0
  549. data/lib/puppet/parser/functions/slice.rb +39 -0
  550. data/lib/puppet/parser/functions/split.rb +28 -0
  551. data/lib/puppet/parser/functions/sprintf.rb +61 -0
  552. data/lib/puppet/parser/functions/step.rb +84 -0
  553. data/lib/puppet/parser/functions/strftime.rb +185 -0
  554. data/lib/puppet/parser/functions/tag.rb +12 -0
  555. data/lib/puppet/parser/functions/tagged.rb +21 -0
  556. data/lib/puppet/parser/functions/template.rb +39 -0
  557. data/lib/puppet/parser/functions/then.rb +73 -0
  558. data/lib/puppet/parser/functions/type.rb +53 -0
  559. data/lib/puppet/parser/functions/versioncmp.rb +30 -0
  560. data/lib/puppet/parser/functions/with.rb +28 -0
  561. data/lib/puppet/parser/functions.rb +321 -0
  562. data/lib/puppet/parser/parser_factory.rb +30 -0
  563. data/lib/puppet/parser/relationship.rb +84 -0
  564. data/lib/puppet/parser/resource/param.rb +35 -0
  565. data/lib/puppet/parser/resource.rb +351 -0
  566. data/lib/puppet/parser/scope.rb +1127 -0
  567. data/lib/puppet/parser/script_compiler.rb +123 -0
  568. data/lib/puppet/parser/templatewrapper.rb +104 -0
  569. data/lib/puppet/parser/type_loader.rb +150 -0
  570. data/lib/puppet/parser.rb +20 -0
  571. data/lib/puppet/plugins/configuration.rb +29 -0
  572. data/lib/puppet/plugins/syntax_checkers.rb +98 -0
  573. data/lib/puppet/plugins.rb +9 -0
  574. data/lib/puppet/pops/adaptable.rb +197 -0
  575. data/lib/puppet/pops/adapters.rb +156 -0
  576. data/lib/puppet/pops/evaluator/access_operator.rb +719 -0
  577. data/lib/puppet/pops/evaluator/callable_signature.rb +107 -0
  578. data/lib/puppet/pops/evaluator/closure.rb +375 -0
  579. data/lib/puppet/pops/evaluator/collector_transformer.rb +234 -0
  580. data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +86 -0
  581. data/lib/puppet/pops/evaluator/collectors/catalog_collector.rb +29 -0
  582. data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +70 -0
  583. data/lib/puppet/pops/evaluator/collectors/fixed_set_collector.rb +38 -0
  584. data/lib/puppet/pops/evaluator/compare_operator.rb +254 -0
  585. data/lib/puppet/pops/evaluator/deferred_resolver.rb +225 -0
  586. data/lib/puppet/pops/evaluator/epp_evaluator.rb +120 -0
  587. data/lib/puppet/pops/evaluator/evaluator_impl.rb +1317 -0
  588. data/lib/puppet/pops/evaluator/external_syntax_support.rb +46 -0
  589. data/lib/puppet/pops/evaluator/json_strict_literal_evaluator.rb +82 -0
  590. data/lib/puppet/pops/evaluator/literal_evaluator.rb +100 -0
  591. data/lib/puppet/pops/evaluator/puppet_proc.rb +69 -0
  592. data/lib/puppet/pops/evaluator/relationship_operator.rb +185 -0
  593. data/lib/puppet/pops/evaluator/runtime3_converter.rb +221 -0
  594. data/lib/puppet/pops/evaluator/runtime3_resource_support.rb +119 -0
  595. data/lib/puppet/pops/evaluator/runtime3_support.rb +535 -0
  596. data/lib/puppet/pops/functions/dispatch.rb +107 -0
  597. data/lib/puppet/pops/functions/dispatcher.rb +75 -0
  598. data/lib/puppet/pops/functions/function.rb +139 -0
  599. data/lib/puppet/pops/issue_reporter.rb +137 -0
  600. data/lib/puppet/pops/issues.rb +928 -0
  601. data/lib/puppet/pops/label_provider.rb +90 -0
  602. data/lib/puppet/pops/loader/base_loader.rb +178 -0
  603. data/lib/puppet/pops/loader/dependency_loader.rb +91 -0
  604. data/lib/puppet/pops/loader/gem_support.rb +51 -0
  605. data/lib/puppet/pops/loader/generic_plan_instantiator.rb +28 -0
  606. data/lib/puppet/pops/loader/loader.rb +221 -0
  607. data/lib/puppet/pops/loader/loader_paths.rb +412 -0
  608. data/lib/puppet/pops/loader/module_loaders.rb +556 -0
  609. data/lib/puppet/pops/loader/predefined_loader.rb +28 -0
  610. data/lib/puppet/pops/loader/puppet_function_instantiator.rb +84 -0
  611. data/lib/puppet/pops/loader/puppet_plan_instantiator.rb +93 -0
  612. data/lib/puppet/pops/loader/puppet_resource_type_impl_instantiator.rb +79 -0
  613. data/lib/puppet/pops/loader/ruby_data_type_instantiator.rb +39 -0
  614. data/lib/puppet/pops/loader/ruby_function_instantiator.rb +45 -0
  615. data/lib/puppet/pops/loader/ruby_legacy_function_instantiator.rb +120 -0
  616. data/lib/puppet/pops/loader/runtime3_type_loader.rb +103 -0
  617. data/lib/puppet/pops/loader/simple_environment_loader.rb +20 -0
  618. data/lib/puppet/pops/loader/static_loader.rb +131 -0
  619. data/lib/puppet/pops/loader/task_instantiator.rb +44 -0
  620. data/lib/puppet/pops/loader/type_definition_instantiator.rb +100 -0
  621. data/lib/puppet/pops/loader/typed_name.rb +54 -0
  622. data/lib/puppet/pops/loader/uri_helper.rb +22 -0
  623. data/lib/puppet/pops/loaders.rb +546 -0
  624. data/lib/puppet/pops/lookup/configured_data_provider.rb +93 -0
  625. data/lib/puppet/pops/lookup/context.rb +199 -0
  626. data/lib/puppet/pops/lookup/data_adapter.rb +27 -0
  627. data/lib/puppet/pops/lookup/data_dig_function_provider.rb +145 -0
  628. data/lib/puppet/pops/lookup/data_hash_function_provider.rb +126 -0
  629. data/lib/puppet/pops/lookup/data_provider.rb +92 -0
  630. data/lib/puppet/pops/lookup/environment_data_provider.rb +35 -0
  631. data/lib/puppet/pops/lookup/explainer.rb +595 -0
  632. data/lib/puppet/pops/lookup/function_provider.rb +110 -0
  633. data/lib/puppet/pops/lookup/global_data_provider.rb +75 -0
  634. data/lib/puppet/pops/lookup/hiera_config.rb +775 -0
  635. data/lib/puppet/pops/lookup/interpolation.rb +155 -0
  636. data/lib/puppet/pops/lookup/invocation.rb +268 -0
  637. data/lib/puppet/pops/lookup/key_recorder.rb +18 -0
  638. data/lib/puppet/pops/lookup/location_resolver.rb +99 -0
  639. data/lib/puppet/pops/lookup/lookup_adapter.rb +528 -0
  640. data/lib/puppet/pops/lookup/lookup_key.rb +99 -0
  641. data/lib/puppet/pops/lookup/lookup_key_function_provider.rb +92 -0
  642. data/lib/puppet/pops/lookup/module_data_provider.rb +89 -0
  643. data/lib/puppet/pops/lookup/sub_lookup.rb +92 -0
  644. data/lib/puppet/pops/lookup.rb +97 -0
  645. data/lib/puppet/pops/merge_strategy.rb +441 -0
  646. data/lib/puppet/pops/migration/migration_checker.rb +58 -0
  647. data/lib/puppet/pops/model/ast.pp +669 -0
  648. data/lib/puppet/pops/model/ast.rb +4675 -0
  649. data/lib/puppet/pops/model/ast_transformer.rb +131 -0
  650. data/lib/puppet/pops/model/factory.rb +1155 -0
  651. data/lib/puppet/pops/model/model_label_provider.rb +134 -0
  652. data/lib/puppet/pops/model/model_tree_dumper.rb +445 -0
  653. data/lib/puppet/pops/model/pn_transformer.rb +385 -0
  654. data/lib/puppet/pops/model/tree_dumper.rb +59 -0
  655. data/lib/puppet/pops/parser/code_merger.rb +29 -0
  656. data/lib/puppet/pops/parser/egrammar.ra +889 -0
  657. data/lib/puppet/pops/parser/eparser.rb +3184 -0
  658. data/lib/puppet/pops/parser/epp_parser.rb +51 -0
  659. data/lib/puppet/pops/parser/epp_support.rb +265 -0
  660. data/lib/puppet/pops/parser/evaluating_parser.rb +162 -0
  661. data/lib/puppet/pops/parser/heredoc_support.rb +153 -0
  662. data/lib/puppet/pops/parser/interpolation_support.rb +249 -0
  663. data/lib/puppet/pops/parser/lexer2.rb +777 -0
  664. data/lib/puppet/pops/parser/lexer_support.rb +221 -0
  665. data/lib/puppet/pops/parser/locatable.rb +23 -0
  666. data/lib/puppet/pops/parser/locator.rb +357 -0
  667. data/lib/puppet/pops/parser/parser_support.rb +251 -0
  668. data/lib/puppet/pops/parser/pn_parser.rb +317 -0
  669. data/lib/puppet/pops/parser/slurp_support.rb +118 -0
  670. data/lib/puppet/pops/patterns.rb +60 -0
  671. data/lib/puppet/pops/pcore.rb +135 -0
  672. data/lib/puppet/pops/pn.rb +236 -0
  673. data/lib/puppet/pops/puppet_stack.rb +61 -0
  674. data/lib/puppet/pops/resource/param.rb +55 -0
  675. data/lib/puppet/pops/resource/resource_type_impl.rb +294 -0
  676. data/lib/puppet/pops/resource/resource_type_set.pcore +22 -0
  677. data/lib/puppet/pops/semantic_error.rb +29 -0
  678. data/lib/puppet/pops/serialization/abstract_reader.rb +180 -0
  679. data/lib/puppet/pops/serialization/abstract_writer.rb +222 -0
  680. data/lib/puppet/pops/serialization/deserializer.rb +80 -0
  681. data/lib/puppet/pops/serialization/extension.rb +158 -0
  682. data/lib/puppet/pops/serialization/from_data_converter.rb +224 -0
  683. data/lib/puppet/pops/serialization/instance_reader.rb +19 -0
  684. data/lib/puppet/pops/serialization/instance_writer.rb +14 -0
  685. data/lib/puppet/pops/serialization/json.rb +297 -0
  686. data/lib/puppet/pops/serialization/json_path.rb +127 -0
  687. data/lib/puppet/pops/serialization/object.rb +70 -0
  688. data/lib/puppet/pops/serialization/serializer.rb +140 -0
  689. data/lib/puppet/pops/serialization/time_factory.rb +67 -0
  690. data/lib/puppet/pops/serialization/to_data_converter.rb +313 -0
  691. data/lib/puppet/pops/serialization/to_stringified_converter.rb +226 -0
  692. data/lib/puppet/pops/serialization.rb +43 -0
  693. data/lib/puppet/pops/time/timespan.rb +716 -0
  694. data/lib/puppet/pops/time/timestamp.rb +160 -0
  695. data/lib/puppet/pops/types/annotatable.rb +36 -0
  696. data/lib/puppet/pops/types/annotation.rb +71 -0
  697. data/lib/puppet/pops/types/class_loader.rb +132 -0
  698. data/lib/puppet/pops/types/implementation_registry.rb +134 -0
  699. data/lib/puppet/pops/types/iterable.rb +365 -0
  700. data/lib/puppet/pops/types/p_binary_type.rb +232 -0
  701. data/lib/puppet/pops/types/p_init_type.rb +238 -0
  702. data/lib/puppet/pops/types/p_meta_type.rb +94 -0
  703. data/lib/puppet/pops/types/p_object_type.rb +1117 -0
  704. data/lib/puppet/pops/types/p_object_type_extension.rb +228 -0
  705. data/lib/puppet/pops/types/p_runtime_type.rb +115 -0
  706. data/lib/puppet/pops/types/p_sem_ver_range_type.rb +190 -0
  707. data/lib/puppet/pops/types/p_sem_ver_type.rb +155 -0
  708. data/lib/puppet/pops/types/p_sensitive_type.rb +83 -0
  709. data/lib/puppet/pops/types/p_timespan_type.rb +192 -0
  710. data/lib/puppet/pops/types/p_timestamp_type.rb +73 -0
  711. data/lib/puppet/pops/types/p_type_set_type.rb +387 -0
  712. data/lib/puppet/pops/types/p_uri_type.rb +190 -0
  713. data/lib/puppet/pops/types/puppet_object.rb +40 -0
  714. data/lib/puppet/pops/types/recursion_guard.rb +136 -0
  715. data/lib/puppet/pops/types/ruby_generator.rb +472 -0
  716. data/lib/puppet/pops/types/ruby_method.rb +31 -0
  717. data/lib/puppet/pops/types/string_converter.rb +1134 -0
  718. data/lib/puppet/pops/types/tree_iterators.rb +254 -0
  719. data/lib/puppet/pops/types/type_acceptor.rb +25 -0
  720. data/lib/puppet/pops/types/type_asserter.rb +47 -0
  721. data/lib/puppet/pops/types/type_assertion_error.rb +27 -0
  722. data/lib/puppet/pops/types/type_calculator.rb +822 -0
  723. data/lib/puppet/pops/types/type_conversion_error.rb +15 -0
  724. data/lib/puppet/pops/types/type_factory.rb +631 -0
  725. data/lib/puppet/pops/types/type_formatter.rb +801 -0
  726. data/lib/puppet/pops/types/type_mismatch_describer.rb +1096 -0
  727. data/lib/puppet/pops/types/type_parser.rb +683 -0
  728. data/lib/puppet/pops/types/type_set_reference.rb +59 -0
  729. data/lib/puppet/pops/types/type_with_members.rb +43 -0
  730. data/lib/puppet/pops/types/types.rb +3633 -0
  731. data/lib/puppet/pops/utils.rb +119 -0
  732. data/lib/puppet/pops/validation/checker4_0.rb +1148 -0
  733. data/lib/puppet/pops/validation/tasks_checker.rb +93 -0
  734. data/lib/puppet/pops/validation/validator_factory_4_0.rb +45 -0
  735. data/lib/puppet/pops/validation.rb +459 -0
  736. data/lib/puppet/pops/visitable.rb +6 -0
  737. data/lib/puppet/pops/visitor.rb +122 -0
  738. data/lib/puppet/pops.rb +121 -0
  739. data/lib/puppet/property/boolean.rb +7 -0
  740. data/lib/puppet/property/ensure.rb +106 -0
  741. data/lib/puppet/property/keyvalue.rb +158 -0
  742. data/lib/puppet/property/list.rb +70 -0
  743. data/lib/puppet/property/ordered_list.rb +29 -0
  744. data/lib/puppet/property.rb +611 -0
  745. data/lib/puppet/provider/aix_object.rb +485 -0
  746. data/lib/puppet/provider/command.rb +25 -0
  747. data/lib/puppet/provider/confine.rb +6 -0
  748. data/lib/puppet/provider/exec/posix.rb +60 -0
  749. data/lib/puppet/provider/exec/shell.rb +25 -0
  750. data/lib/puppet/provider/exec/windows.rb +55 -0
  751. data/lib/puppet/provider/exec.rb +105 -0
  752. data/lib/puppet/provider/file/posix.rb +144 -0
  753. data/lib/puppet/provider/file/windows.rb +152 -0
  754. data/lib/puppet/provider/group/aix.rb +99 -0
  755. data/lib/puppet/provider/group/directoryservice.rb +22 -0
  756. data/lib/puppet/provider/group/groupadd.rb +174 -0
  757. data/lib/puppet/provider/group/ldap.rb +48 -0
  758. data/lib/puppet/provider/group/pw.rb +51 -0
  759. data/lib/puppet/provider/group/windows_adsi.rb +113 -0
  760. data/lib/puppet/provider/ldap.rb +141 -0
  761. data/lib/puppet/provider/nameservice/directoryservice.rb +512 -0
  762. data/lib/puppet/provider/nameservice/objectadd.rb +22 -0
  763. data/lib/puppet/provider/nameservice/pw.rb +21 -0
  764. data/lib/puppet/provider/nameservice.rb +293 -0
  765. data/lib/puppet/provider/network_device.rb +74 -0
  766. data/lib/puppet/provider/package/aix.rb +169 -0
  767. data/lib/puppet/provider/package/appdmg.rb +111 -0
  768. data/lib/puppet/provider/package/apple.rb +47 -0
  769. data/lib/puppet/provider/package/apt.rb +262 -0
  770. data/lib/puppet/provider/package/aptitude.rb +35 -0
  771. data/lib/puppet/provider/package/aptrpm.rb +83 -0
  772. data/lib/puppet/provider/package/blastwave.rb +112 -0
  773. data/lib/puppet/provider/package/dnf.rb +50 -0
  774. data/lib/puppet/provider/package/dnfmodule.rb +141 -0
  775. data/lib/puppet/provider/package/dpkg.rb +192 -0
  776. data/lib/puppet/provider/package/fink.rb +97 -0
  777. data/lib/puppet/provider/package/freebsd.rb +47 -0
  778. data/lib/puppet/provider/package/gem.rb +293 -0
  779. data/lib/puppet/provider/package/hpux.rb +44 -0
  780. data/lib/puppet/provider/package/macports.rb +110 -0
  781. data/lib/puppet/provider/package/nim.rb +291 -0
  782. data/lib/puppet/provider/package/openbsd.rb +260 -0
  783. data/lib/puppet/provider/package/opkg.rb +82 -0
  784. data/lib/puppet/provider/package/pacman.rb +273 -0
  785. data/lib/puppet/provider/package/pip.rb +346 -0
  786. data/lib/puppet/provider/package/pip2.rb +17 -0
  787. data/lib/puppet/provider/package/pip3.rb +17 -0
  788. data/lib/puppet/provider/package/pkg.rb +295 -0
  789. data/lib/puppet/provider/package/pkgdmg.rb +153 -0
  790. data/lib/puppet/provider/package/pkgin.rb +87 -0
  791. data/lib/puppet/provider/package/pkgng.rb +173 -0
  792. data/lib/puppet/provider/package/pkgutil.rb +187 -0
  793. data/lib/puppet/provider/package/portage.rb +310 -0
  794. data/lib/puppet/provider/package/ports.rb +91 -0
  795. data/lib/puppet/provider/package/portupgrade.rb +240 -0
  796. data/lib/puppet/provider/package/puppet_gem.rb +34 -0
  797. data/lib/puppet/provider/package/puppetserver_gem.rb +171 -0
  798. data/lib/puppet/provider/package/rpm.rb +250 -0
  799. data/lib/puppet/provider/package/rug.rb +51 -0
  800. data/lib/puppet/provider/package/sun.rb +133 -0
  801. data/lib/puppet/provider/package/sunfreeware.rb +9 -0
  802. data/lib/puppet/provider/package/tdnf.rb +28 -0
  803. data/lib/puppet/provider/package/up2date.rb +40 -0
  804. data/lib/puppet/provider/package/urpmi.rb +55 -0
  805. data/lib/puppet/provider/package/windows/exe_package.rb +106 -0
  806. data/lib/puppet/provider/package/windows/msi_package.rb +70 -0
  807. data/lib/puppet/provider/package/windows/package.rb +110 -0
  808. data/lib/puppet/provider/package/windows.rb +130 -0
  809. data/lib/puppet/provider/package/yum.rb +387 -0
  810. data/lib/puppet/provider/package/zypper.rb +206 -0
  811. data/lib/puppet/provider/package.rb +59 -0
  812. data/lib/puppet/provider/package_targetable.rb +69 -0
  813. data/lib/puppet/provider/parsedfile.rb +490 -0
  814. data/lib/puppet/provider/service/base.rb +139 -0
  815. data/lib/puppet/provider/service/bsd.rb +51 -0
  816. data/lib/puppet/provider/service/daemontools.rb +193 -0
  817. data/lib/puppet/provider/service/debian.rb +75 -0
  818. data/lib/puppet/provider/service/freebsd.rb +143 -0
  819. data/lib/puppet/provider/service/gentoo.rb +45 -0
  820. data/lib/puppet/provider/service/init.rb +192 -0
  821. data/lib/puppet/provider/service/launchd.rb +384 -0
  822. data/lib/puppet/provider/service/openbsd.rb +100 -0
  823. data/lib/puppet/provider/service/openrc.rb +71 -0
  824. data/lib/puppet/provider/service/openwrt.rb +36 -0
  825. data/lib/puppet/provider/service/rcng.rb +51 -0
  826. data/lib/puppet/provider/service/redhat.rb +72 -0
  827. data/lib/puppet/provider/service/runit.rb +106 -0
  828. data/lib/puppet/provider/service/service.rb +68 -0
  829. data/lib/puppet/provider/service/smf.rb +317 -0
  830. data/lib/puppet/provider/service/src.rb +147 -0
  831. data/lib/puppet/provider/service/systemd.rb +232 -0
  832. data/lib/puppet/provider/service/upstart.rb +385 -0
  833. data/lib/puppet/provider/service/windows.rb +182 -0
  834. data/lib/puppet/provider/user/aix.rb +361 -0
  835. data/lib/puppet/provider/user/directoryservice.rb +680 -0
  836. data/lib/puppet/provider/user/hpux.rb +95 -0
  837. data/lib/puppet/provider/user/ldap.rb +132 -0
  838. data/lib/puppet/provider/user/openbsd.rb +77 -0
  839. data/lib/puppet/provider/user/pw.rb +108 -0
  840. data/lib/puppet/provider/user/user_role_add.rb +239 -0
  841. data/lib/puppet/provider/user/useradd.rb +406 -0
  842. data/lib/puppet/provider/user/windows_adsi.rb +172 -0
  843. data/lib/puppet/provider.rb +612 -0
  844. data/lib/puppet/reference/configuration.rb +97 -0
  845. data/lib/puppet/reference/function.rb +17 -0
  846. data/lib/puppet/reference/indirection.rb +71 -0
  847. data/lib/puppet/reference/metaparameter.rb +33 -0
  848. data/lib/puppet/reference/providers.rb +117 -0
  849. data/lib/puppet/reference/report.rb +20 -0
  850. data/lib/puppet/reference/type.rb +109 -0
  851. data/lib/puppet/relationship.rb +84 -0
  852. data/lib/puppet/reports/http.rb +44 -0
  853. data/lib/puppet/reports/log.rb +14 -0
  854. data/lib/puppet/reports/store.rb +68 -0
  855. data/lib/puppet/reports.rb +93 -0
  856. data/lib/puppet/resource/catalog.rb +654 -0
  857. data/lib/puppet/resource/status.rb +229 -0
  858. data/lib/puppet/resource/type.rb +425 -0
  859. data/lib/puppet/resource/type_collection.rb +231 -0
  860. data/lib/puppet/resource.rb +663 -0
  861. data/lib/puppet/runtime.rb +65 -0
  862. data/lib/puppet/scheduler/job.rb +53 -0
  863. data/lib/puppet/scheduler/scheduler.rb +44 -0
  864. data/lib/puppet/scheduler/splay_job.rb +32 -0
  865. data/lib/puppet/scheduler/timer.rb +13 -0
  866. data/lib/puppet/scheduler.rb +16 -0
  867. data/lib/puppet/settings/alias_setting.rb +37 -0
  868. data/lib/puppet/settings/array_setting.rb +17 -0
  869. data/lib/puppet/settings/autosign_setting.rb +22 -0
  870. data/lib/puppet/settings/base_setting.rb +223 -0
  871. data/lib/puppet/settings/boolean_setting.rb +32 -0
  872. data/lib/puppet/settings/certificate_revocation_setting.rb +21 -0
  873. data/lib/puppet/settings/config_file.rb +146 -0
  874. data/lib/puppet/settings/directory_setting.rb +18 -0
  875. data/lib/puppet/settings/duration_setting.rb +32 -0
  876. data/lib/puppet/settings/enum_setting.rb +16 -0
  877. data/lib/puppet/settings/environment_conf.rb +224 -0
  878. data/lib/puppet/settings/errors.rb +11 -0
  879. data/lib/puppet/settings/file_or_directory_setting.rb +40 -0
  880. data/lib/puppet/settings/file_setting.rb +241 -0
  881. data/lib/puppet/settings/http_extra_headers_setting.rb +25 -0
  882. data/lib/puppet/settings/ini_file.rb +226 -0
  883. data/lib/puppet/settings/integer_setting.rb +17 -0
  884. data/lib/puppet/settings/path_setting.rb +8 -0
  885. data/lib/puppet/settings/port_setting.rb +15 -0
  886. data/lib/puppet/settings/priority_setting.rb +43 -0
  887. data/lib/puppet/settings/server_list_setting.rb +29 -0
  888. data/lib/puppet/settings/string_setting.rb +9 -0
  889. data/lib/puppet/settings/symbolic_enum_setting.rb +17 -0
  890. data/lib/puppet/settings/terminus_setting.rb +14 -0
  891. data/lib/puppet/settings/ttl_setting.rb +51 -0
  892. data/lib/puppet/settings/value_translator.rb +14 -0
  893. data/lib/puppet/settings.rb +1642 -0
  894. data/lib/puppet/ssl/base.rb +149 -0
  895. data/lib/puppet/ssl/certificate.rb +96 -0
  896. data/lib/puppet/ssl/certificate_request.rb +324 -0
  897. data/lib/puppet/ssl/certificate_request_attributes.rb +37 -0
  898. data/lib/puppet/ssl/certificate_signer.rb +39 -0
  899. data/lib/puppet/ssl/digest.rb +20 -0
  900. data/lib/puppet/ssl/error.rb +26 -0
  901. data/lib/puppet/ssl/oids.rb +197 -0
  902. data/lib/puppet/ssl/openssl_loader.rb +24 -0
  903. data/lib/puppet/ssl/ssl_context.rb +25 -0
  904. data/lib/puppet/ssl/ssl_provider.rb +350 -0
  905. data/lib/puppet/ssl/state_machine.rb +474 -0
  906. data/lib/puppet/ssl/verifier.rb +142 -0
  907. data/lib/puppet/ssl.rb +23 -0
  908. data/lib/puppet/syntax_checkers/base64.rb +40 -0
  909. data/lib/puppet/syntax_checkers/epp.rb +34 -0
  910. data/lib/puppet/syntax_checkers/json.rb +35 -0
  911. data/lib/puppet/syntax_checkers/pp.rb +34 -0
  912. data/lib/puppet/syntax_checkers.rb +3 -0
  913. data/lib/puppet/test/test_helper.rb +265 -0
  914. data/lib/puppet/thread_local.rb +4 -0
  915. data/lib/puppet/transaction/additional_resource_generator.rb +220 -0
  916. data/lib/puppet/transaction/event.rb +168 -0
  917. data/lib/puppet/transaction/event_manager.rb +179 -0
  918. data/lib/puppet/transaction/persistence.rb +119 -0
  919. data/lib/puppet/transaction/report.rb +504 -0
  920. data/lib/puppet/transaction/resource_harness.rb +323 -0
  921. data/lib/puppet/transaction.rb +491 -0
  922. data/lib/puppet/trusted_external.rb +41 -0
  923. data/lib/puppet/type/component.rb +89 -0
  924. data/lib/puppet/type/exec.rb +720 -0
  925. data/lib/puppet/type/file/checksum.rb +50 -0
  926. data/lib/puppet/type/file/checksum_value.rb +54 -0
  927. data/lib/puppet/type/file/content.rb +176 -0
  928. data/lib/puppet/type/file/ctime.rb +21 -0
  929. data/lib/puppet/type/file/data_sync.rb +98 -0
  930. data/lib/puppet/type/file/ensure.rb +195 -0
  931. data/lib/puppet/type/file/group.rb +48 -0
  932. data/lib/puppet/type/file/mode.rb +189 -0
  933. data/lib/puppet/type/file/mtime.rb +19 -0
  934. data/lib/puppet/type/file/owner.rb +51 -0
  935. data/lib/puppet/type/file/selcontext.rb +142 -0
  936. data/lib/puppet/type/file/source.rb +379 -0
  937. data/lib/puppet/type/file/target.rb +88 -0
  938. data/lib/puppet/type/file/type.rb +20 -0
  939. data/lib/puppet/type/file.rb +1133 -0
  940. data/lib/puppet/type/filebucket.rb +121 -0
  941. data/lib/puppet/type/group.rb +237 -0
  942. data/lib/puppet/type/notify.rb +47 -0
  943. data/lib/puppet/type/package.rb +713 -0
  944. data/lib/puppet/type/resources.rb +187 -0
  945. data/lib/puppet/type/schedule.rb +441 -0
  946. data/lib/puppet/type/service.rb +309 -0
  947. data/lib/puppet/type/stage.rb +27 -0
  948. data/lib/puppet/type/tidy.rb +376 -0
  949. data/lib/puppet/type/user.rb +859 -0
  950. data/lib/puppet/type/whit.rb +34 -0
  951. data/lib/puppet/type.rb +2676 -0
  952. data/lib/puppet/util/at_fork/noop.rb +18 -0
  953. data/lib/puppet/util/at_fork/solaris.rb +160 -0
  954. data/lib/puppet/util/at_fork.rb +35 -0
  955. data/lib/puppet/util/autoload.rb +215 -0
  956. data/lib/puppet/util/backups.rb +86 -0
  957. data/lib/puppet/util/character_encoding.rb +80 -0
  958. data/lib/puppet/util/checksums.rb +376 -0
  959. data/lib/puppet/util/classgen.rb +228 -0
  960. data/lib/puppet/util/colors.rb +100 -0
  961. data/lib/puppet/util/command_line/puppet_option_parser.rb +87 -0
  962. data/lib/puppet/util/command_line/trollop.rb +825 -0
  963. data/lib/puppet/util/command_line.rb +196 -0
  964. data/lib/puppet/util/constant_inflector.rb +24 -0
  965. data/lib/puppet/util/diff.rb +81 -0
  966. data/lib/puppet/util/docs.rb +128 -0
  967. data/lib/puppet/util/errors.rb +159 -0
  968. data/lib/puppet/util/execution.rb +424 -0
  969. data/lib/puppet/util/execution_stub.rb +26 -0
  970. data/lib/puppet/util/feature.rb +129 -0
  971. data/lib/puppet/util/file_watcher.rb +28 -0
  972. data/lib/puppet/util/fileparsing.rb +408 -0
  973. data/lib/puppet/util/filetype.rb +358 -0
  974. data/lib/puppet/util/http_proxy.rb +4 -0
  975. data/lib/puppet/util/inifile.rb +340 -0
  976. data/lib/puppet/util/instance_loader.rb +66 -0
  977. data/lib/puppet/util/json.rb +92 -0
  978. data/lib/puppet/util/json_lockfile.rb +44 -0
  979. data/lib/puppet/util/ldap/connection.rb +73 -0
  980. data/lib/puppet/util/ldap/generator.rb +42 -0
  981. data/lib/puppet/util/ldap/manager.rb +284 -0
  982. data/lib/puppet/util/ldap.rb +2 -0
  983. data/lib/puppet/util/libuser.conf +15 -0
  984. data/lib/puppet/util/libuser.rb +12 -0
  985. data/lib/puppet/util/limits.rb +12 -0
  986. data/lib/puppet/util/lockfile.rb +66 -0
  987. data/lib/puppet/util/log/destination.rb +49 -0
  988. data/lib/puppet/util/log/destinations.rb +253 -0
  989. data/lib/puppet/util/log.rb +427 -0
  990. data/lib/puppet/util/logging.rb +300 -0
  991. data/lib/puppet/util/metaid.rb +21 -0
  992. data/lib/puppet/util/metric.rb +65 -0
  993. data/lib/puppet/util/monkey_patches.rb +122 -0
  994. data/lib/puppet/util/multi_match.rb +51 -0
  995. data/lib/puppet/util/network_device/base.rb +23 -0
  996. data/lib/puppet/util/network_device/config.rb +105 -0
  997. data/lib/puppet/util/network_device/transport/base.rb +26 -0
  998. data/lib/puppet/util/network_device/transport.rb +5 -0
  999. data/lib/puppet/util/network_device.rb +17 -0
  1000. data/lib/puppet/util/package/version/debian.rb +175 -0
  1001. data/lib/puppet/util/package/version/gem.rb +15 -0
  1002. data/lib/puppet/util/package/version/pip.rb +167 -0
  1003. data/lib/puppet/util/package/version/range/eq.rb +14 -0
  1004. data/lib/puppet/util/package/version/range/gt.rb +14 -0
  1005. data/lib/puppet/util/package/version/range/gt_eq.rb +14 -0
  1006. data/lib/puppet/util/package/version/range/lt.rb +14 -0
  1007. data/lib/puppet/util/package/version/range/lt_eq.rb +14 -0
  1008. data/lib/puppet/util/package/version/range/min_max.rb +21 -0
  1009. data/lib/puppet/util/package/version/range/simple.rb +11 -0
  1010. data/lib/puppet/util/package/version/range.rb +53 -0
  1011. data/lib/puppet/util/package/version/rpm.rb +73 -0
  1012. data/lib/puppet/util/package.rb +40 -0
  1013. data/lib/puppet/util/pidlock.rb +102 -0
  1014. data/lib/puppet/util/platform.rb +70 -0
  1015. data/lib/puppet/util/plist.rb +161 -0
  1016. data/lib/puppet/util/posix.rb +203 -0
  1017. data/lib/puppet/util/profiler/aggregate.rb +85 -0
  1018. data/lib/puppet/util/profiler/around_profiler.rb +67 -0
  1019. data/lib/puppet/util/profiler/logging.rb +48 -0
  1020. data/lib/puppet/util/profiler/object_counts.rb +17 -0
  1021. data/lib/puppet/util/profiler/wall_clock.rb +35 -0
  1022. data/lib/puppet/util/profiler.rb +53 -0
  1023. data/lib/puppet/util/provider_features.rb +179 -0
  1024. data/lib/puppet/util/psych_support.rb +30 -0
  1025. data/lib/puppet/util/rdoc/code_objects.rb +295 -0
  1026. data/lib/puppet/util/rdoc/generators/puppet_generator.rb +912 -0
  1027. data/lib/puppet/util/rdoc/generators/template/puppet/puppet.rb +1085 -0
  1028. data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +259 -0
  1029. data/lib/puppet/util/rdoc/parser/puppet_parser_rdoc2.rb +14 -0
  1030. data/lib/puppet/util/rdoc/parser.rb +12 -0
  1031. data/lib/puppet/util/rdoc.rb +53 -0
  1032. data/lib/puppet/util/reference.rb +119 -0
  1033. data/lib/puppet/util/resource_template.rb +61 -0
  1034. data/lib/puppet/util/retry_action.rb +46 -0
  1035. data/lib/puppet/util/rpm_compare.rb +193 -0
  1036. data/lib/puppet/util/rubygems.rb +67 -0
  1037. data/lib/puppet/util/run_mode.rb +122 -0
  1038. data/lib/puppet/util/selinux.rb +297 -0
  1039. data/lib/puppet/util/skip_tags.rb +13 -0
  1040. data/lib/puppet/util/splayer.rb +18 -0
  1041. data/lib/puppet/util/storage.rb +100 -0
  1042. data/lib/puppet/util/suidmanager.rb +166 -0
  1043. data/lib/puppet/util/symbolic_file_mode.rb +156 -0
  1044. data/lib/puppet/util/tag_set.rb +27 -0
  1045. data/lib/puppet/util/tagging.rb +132 -0
  1046. data/lib/puppet/util/terminal.rb +16 -0
  1047. data/lib/puppet/util/user_attr.rb +21 -0
  1048. data/lib/puppet/util/warnings.rb +31 -0
  1049. data/lib/puppet/util/watched_file.rb +37 -0
  1050. data/lib/puppet/util/watcher/change_watcher.rb +33 -0
  1051. data/lib/puppet/util/watcher/periodic_watcher.rb +37 -0
  1052. data/lib/puppet/util/watcher/timer.rb +19 -0
  1053. data/lib/puppet/util/watcher.rb +17 -0
  1054. data/lib/puppet/util/windows/access_control_entry.rb +84 -0
  1055. data/lib/puppet/util/windows/access_control_list.rb +113 -0
  1056. data/lib/puppet/util/windows/adsi.rb +654 -0
  1057. data/lib/puppet/util/windows/com.rb +225 -0
  1058. data/lib/puppet/util/windows/daemon.rb +343 -0
  1059. data/lib/puppet/util/windows/error.rb +84 -0
  1060. data/lib/puppet/util/windows/eventlog.rb +187 -0
  1061. data/lib/puppet/util/windows/file.rb +355 -0
  1062. data/lib/puppet/util/windows/monkey_patches/process.rb +414 -0
  1063. data/lib/puppet/util/windows/principal.rb +201 -0
  1064. data/lib/puppet/util/windows/process.rb +364 -0
  1065. data/lib/puppet/util/windows/registry.rb +441 -0
  1066. data/lib/puppet/util/windows/root_certs.rb +108 -0
  1067. data/lib/puppet/util/windows/security.rb +907 -0
  1068. data/lib/puppet/util/windows/security_descriptor.rb +62 -0
  1069. data/lib/puppet/util/windows/service.rb +696 -0
  1070. data/lib/puppet/util/windows/sid.rb +289 -0
  1071. data/lib/puppet/util/windows/string.rb +15 -0
  1072. data/lib/puppet/util/windows/user.rb +550 -0
  1073. data/lib/puppet/util/windows.rb +51 -0
  1074. data/lib/puppet/util/yaml.rb +65 -0
  1075. data/lib/puppet/util.rb +808 -0
  1076. data/lib/puppet/vendor/require_vendored.rb +4 -0
  1077. data/lib/puppet/vendor.rb +57 -0
  1078. data/lib/puppet/version.rb +95 -0
  1079. data/lib/puppet/x509/cert_provider.rb +369 -0
  1080. data/lib/puppet/x509/pem_store.rb +55 -0
  1081. data/lib/puppet/x509.rb +11 -0
  1082. data/lib/puppet.rb +345 -0
  1083. data/lib/puppet_pal.rb +8 -0
  1084. data/lib/puppet_x.rb +14 -0
  1085. data/locales/config.yaml +29 -0
  1086. data/locales/en/puppet.po +19 -0
  1087. data/locales/puppet.pot +20 -0
  1088. data/man/man5/puppet.conf.5 +2198 -0
  1089. data/man/man8/puppet-agent.8 +203 -0
  1090. data/man/man8/puppet-apply.8 +100 -0
  1091. data/man/man8/puppet-catalog.8 +291 -0
  1092. data/man/man8/puppet-config.8 +151 -0
  1093. data/man/man8/puppet-describe.8 +51 -0
  1094. data/man/man8/puppet-device.8 +119 -0
  1095. data/man/man8/puppet-doc.8 +46 -0
  1096. data/man/man8/puppet-epp.8 +377 -0
  1097. data/man/man8/puppet-facts.8 +234 -0
  1098. data/man/man8/puppet-filebucket.8 +166 -0
  1099. data/man/man8/puppet-generate.8 +84 -0
  1100. data/man/man8/puppet-help.8 +67 -0
  1101. data/man/man8/puppet-lookup.8 +107 -0
  1102. data/man/man8/puppet-module.8 +325 -0
  1103. data/man/man8/puppet-node.8 +163 -0
  1104. data/man/man8/puppet-parser.8 +130 -0
  1105. data/man/man8/puppet-plugin.8 +73 -0
  1106. data/man/man8/puppet-report.8 +127 -0
  1107. data/man/man8/puppet-resource.8 +88 -0
  1108. data/man/man8/puppet-script.8 +70 -0
  1109. data/man/man8/puppet-ssl.8 +63 -0
  1110. data/man/man8/puppet.8 +28 -0
  1111. data/tasks/benchmark.rake +180 -0
  1112. data/tasks/ci.rake +24 -0
  1113. data/tasks/generate_ast_model.rake +90 -0
  1114. data/tasks/generate_cert_fixtures.rake +194 -0
  1115. data/tasks/manpages.rake +67 -0
  1116. data/tasks/memwalk.rake +195 -0
  1117. data/tasks/parallel.rake +410 -0
  1118. data/tasks/parser.rake +22 -0
  1119. data/tasks/yard.rake +59 -0
  1120. metadata +1324 -0
@@ -0,0 +1,1127 @@
1
+ # frozen_string_literal: true
2
+ # The scope class, which handles storing and retrieving variables and types and
3
+ # such.
4
+ require 'forwardable'
5
+
6
+ require_relative '../../puppet/parser'
7
+ require_relative '../../puppet/parser/templatewrapper'
8
+ require_relative '../../puppet/parser/resource'
9
+
10
+ # This class is part of the internal parser/evaluator/compiler functionality of Puppet.
11
+ # It is passed between the various classes that participate in evaluation.
12
+ # None of its methods are API except those that are clearly marked as such.
13
+ #
14
+ # @api public
15
+ class Puppet::Parser::Scope
16
+ extend Forwardable
17
+
18
+ # Variables that always exist with nil value even if not set
19
+ BUILT_IN_VARS = ['module_name', 'caller_module_name'].freeze
20
+ EMPTY_HASH = {}.freeze
21
+
22
+ Puppet::Util.logmethods(self)
23
+
24
+ include Puppet::Util::Errors
25
+ attr_accessor :source, :resource
26
+ attr_reader :compiler
27
+ attr_accessor :parent
28
+
29
+ # Hash of hashes of default values per type name
30
+ attr_reader :defaults
31
+
32
+ # Alias for `compiler.environment`
33
+ def environment
34
+ @compiler.environment
35
+ end
36
+
37
+ # Alias for `compiler.catalog`
38
+ def catalog
39
+ @compiler.catalog
40
+ end
41
+
42
+ # Abstract base class for LocalScope and MatchScope
43
+ #
44
+ class Ephemeral
45
+
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
+
79
+ def initialize(parent=nil)
80
+ super parent
81
+ @symbols = {}
82
+ end
83
+
84
+ def [](name)
85
+ val = @symbols[name]
86
+ val.nil? && !@symbols.include?(name) ? super : val
87
+ end
88
+
89
+ def is_local_scope?
90
+ true
91
+ end
92
+
93
+ def []=(name, value)
94
+ @symbols[name] = value
95
+ end
96
+
97
+ def include?(name)
98
+ bound?(name) || super
99
+ end
100
+
101
+ def delete(name)
102
+ @symbols.delete(name)
103
+ end
104
+
105
+ def bound?(name)
106
+ @symbols.include?(name)
107
+ end
108
+
109
+ def add_entries_to(target = {}, include_undef = false)
110
+ super
111
+ @symbols.each do |k, v|
112
+ if (v == :undef || v.nil?) && !include_undef
113
+ target.delete(k)
114
+ else
115
+ target[ k ] = v
116
+ end
117
+ end
118
+ target
119
+ end
120
+ end
121
+
122
+ class MatchScope < Ephemeral
123
+
124
+ attr_accessor :match_data
125
+
126
+ def initialize(parent = nil, match_data = nil)
127
+ super parent
128
+ @match_data = match_data
129
+ end
130
+
131
+ def is_local_scope?
132
+ false
133
+ end
134
+
135
+ def [](name)
136
+ if bound?(name)
137
+ @match_data[name.to_i]
138
+ else
139
+ super
140
+ end
141
+ end
142
+
143
+ def include?(name)
144
+ bound?(name) or super
145
+ end
146
+
147
+ def bound?(name)
148
+ # A "match variables" scope reports all numeric variables to be bound if the scope has
149
+ # match_data. Without match data the scope is transparent.
150
+ #
151
+ @match_data && name =~ /^\d+$/
152
+ end
153
+
154
+ def []=(name, value)
155
+ # TODO: Bad choice of exception
156
+ raise Puppet::ParseError, _("Numerical variables cannot be changed. Attempt to set $%{name}") % { name: name }
157
+ end
158
+
159
+ def delete(name)
160
+ # TODO: Bad choice of exception
161
+ raise Puppet::ParseError, _("Numerical variables cannot be deleted: Attempt to delete: $%{name}") % { name: name }
162
+ end
163
+
164
+ def add_entries_to(target = {}, include_undef = false)
165
+ # do not include match data ($0-$n)
166
+ super
167
+ end
168
+
169
+ end
170
+
171
+ # @api private
172
+ class ParameterScope < Ephemeral
173
+ class Access
174
+ attr_accessor :value
175
+
176
+ def assigned?
177
+ instance_variable_defined?(:@value)
178
+ end
179
+ end
180
+
181
+ # A parameter default must be evaluated using a special scope. The scope that is given to this method must
182
+ # have a `ParameterScope` as its last ephemeral scope. This method will then push a `MatchScope` while the
183
+ # given `expression` is evaluated. The method will catch any throw of `:unevaluated_parameter` and produce
184
+ # an error saying that the evaluated parameter X tries to access the unevaluated parameter Y.
185
+ #
186
+ # @param name [String] the name of the currently evaluated parameter
187
+ # @param expression [Puppet::Parser::AST] the expression to evaluate
188
+ # @param scope [Puppet::Parser::Scope] a scope where a `ParameterScope` has been pushed
189
+ # @return [Object] the result of the evaluation
190
+ #
191
+ # @api private
192
+ def evaluate3x(name, expression, scope)
193
+ scope.with_guarded_scope do
194
+ bad = catch(:unevaluated_parameter) do
195
+ scope.new_match_scope(nil)
196
+ return as_read_only { expression.safeevaluate(scope) }
197
+ end
198
+ parameter_reference_failure(name, bad)
199
+ end
200
+ end
201
+
202
+ def evaluate(name, expression, scope, evaluator)
203
+ scope.with_guarded_scope do
204
+ bad = catch(:unevaluated_parameter) do
205
+ scope.new_match_scope(nil)
206
+ return as_read_only { evaluator.evaluate(expression, scope) }
207
+ end
208
+ parameter_reference_failure(name, bad)
209
+ end
210
+ end
211
+
212
+ def parameter_reference_failure(from, to)
213
+ # Parameters are evaluated in the order they have in the @params hash.
214
+ keys = @params.keys
215
+ raise Puppet::Error, _("%{callee}: expects a value for parameter $%{to}") % { callee: @callee_name, to: to } if keys.index(to) < keys.index(from)
216
+ raise Puppet::Error, _("%{callee}: default expression for $%{from} tries to illegally access not yet evaluated $%{to}") % { callee: @callee_name, from: from, to: to }
217
+ end
218
+ private :parameter_reference_failure
219
+
220
+ def initialize(parent, callee_name, param_names)
221
+ super(parent)
222
+ @callee_name = callee_name
223
+ @params = {}
224
+ param_names.each { |name| @params[name] = Access.new }
225
+ end
226
+
227
+ def [](name)
228
+ access = @params[name]
229
+ return super if access.nil?
230
+ throw(:unevaluated_parameter, name) unless access.assigned?
231
+ access.value
232
+ end
233
+
234
+ def []=(name, value)
235
+ raise Puppet::Error, _("Attempt to assign variable %{name} when evaluating parameters") % { name: name } if @read_only
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
+ Hash[@params.select {|_, access| access.assigned? }.map { |name, access| [name, access.value] }]
264
+ end
265
+ end
266
+
267
+
268
+ # Returns true if the variable of the given name has a non nil value.
269
+ # TODO: This has vague semantics - does the variable exist or not?
270
+ # use ['name'] to get nil or value, and if nil check with exist?('name')
271
+ # this include? is only useful because of checking against the boolean value false.
272
+ #
273
+ def include?(name)
274
+ catch(:undefined_variable) {
275
+ return ! self[name].nil?
276
+ }
277
+ false
278
+ end
279
+
280
+ # Returns true if the variable of the given name is set to any value (including nil)
281
+ #
282
+ # @return [Boolean] if variable exists or not
283
+ #
284
+ def exist?(name)
285
+ # Note !! ensure the answer is boolean
286
+ !! if name =~ /^(.*)::(.+)$/
287
+ class_name = $1
288
+ variable_name = $2
289
+ return true if class_name == '' && BUILT_IN_VARS.include?(variable_name)
290
+
291
+ # lookup class, but do not care if it is not evaluated since that will result
292
+ # in it not existing anyway. (Tests may run with just scopes and no evaluated classes which
293
+ # will result in class_scope for "" not returning topscope).
294
+ klass = find_hostclass(class_name)
295
+ other_scope = klass.nil? ? nil : class_scope(klass)
296
+ if other_scope.nil?
297
+ class_name == '' ? compiler.topscope.exist?(variable_name) : false
298
+ else
299
+ other_scope.exist?(variable_name)
300
+ end
301
+ else
302
+ next_scope = inherited_scope || enclosing_scope
303
+ effective_symtable(true).include?(name) || next_scope && next_scope.exist?(name) || BUILT_IN_VARS.include?(name)
304
+ end
305
+ end
306
+
307
+ # Returns true if the given name is bound in the current (most nested) scope for assignments.
308
+ #
309
+ def bound?(name)
310
+ # Do not look in ephemeral (match scope), the semantics is to answer if an assignable variable is bound
311
+ effective_symtable(false).bound?(name)
312
+ end
313
+
314
+ # Is the value true? This allows us to control the definition of truth
315
+ # in one place.
316
+ def self.true?(value)
317
+ case value
318
+ when ''
319
+ false
320
+ when :undef
321
+ false
322
+ else
323
+ !!value
324
+ end
325
+ end
326
+
327
+ # Coerce value to a number, or return `nil` if it isn't one.
328
+ def self.number?(value)
329
+ case value
330
+ when Numeric
331
+ value
332
+ when /^-?\d+(:?\.\d+|(:?\.\d+)?e\d+)$/
333
+ value.to_f
334
+ when /^0x[0-9a-f]+$/i
335
+ value.to_i(16)
336
+ when /^0[0-7]+$/
337
+ value.to_i(8)
338
+ when /^-?\d+$/
339
+ value.to_i
340
+ else
341
+ nil
342
+ end
343
+ end
344
+
345
+ def find_hostclass(name)
346
+ environment.known_resource_types.find_hostclass(name)
347
+ end
348
+
349
+ def find_definition(name)
350
+ environment.known_resource_types.find_definition(name)
351
+ end
352
+
353
+ def find_global_scope()
354
+ # walk upwards until first found node_scope or top_scope
355
+ if is_nodescope? || is_topscope?
356
+ self
357
+ else
358
+ next_scope = inherited_scope || enclosing_scope
359
+ if next_scope.nil?
360
+ # this happens when testing, and there is only a single test scope and no link to any
361
+ # other scopes
362
+ self
363
+ else
364
+ next_scope.find_global_scope()
365
+ end
366
+ end
367
+ end
368
+
369
+ def findresource(type, title = nil)
370
+ @compiler.catalog.resource(type, title)
371
+ end
372
+
373
+ # Initialize our new scope. Defaults to having no parent.
374
+ def initialize(compiler, source: nil, resource: nil)
375
+ if compiler.is_a? Puppet::Parser::AbstractCompiler
376
+ @compiler = compiler
377
+ else
378
+ raise Puppet::DevError, _("you must pass a compiler instance to a new scope object")
379
+ end
380
+
381
+ @source = source
382
+ @resource = resource
383
+
384
+ extend_with_functions_module
385
+
386
+ # The symbol table for this scope. This is where we store variables.
387
+ # @symtable = Ephemeral.new(nil, true)
388
+ @symtable = LocalScope.new(nil)
389
+
390
+ @ephemeral = [ MatchScope.new(@symtable, nil) ]
391
+
392
+ # All of the defaults set for types. It's a hash of hashes,
393
+ # with the first key being the type, then the second key being
394
+ # the parameter.
395
+ @defaults = Hash.new { |dhash,type|
396
+ dhash[type] = {}
397
+ }
398
+
399
+ # The table for storing class singletons. This will only actually
400
+ # be used by top scopes and node scopes.
401
+ @class_scopes = {}
402
+ end
403
+
404
+ # Store the fact that we've evaluated a class, and store a reference to
405
+ # the scope in which it was evaluated, so that we can look it up later.
406
+ def class_set(name, scope)
407
+ if parent
408
+ parent.class_set(name, scope)
409
+ else
410
+ @class_scopes[name] = scope
411
+ end
412
+ end
413
+
414
+ # Return the scope associated with a class. This is just here so
415
+ # that subclasses can set their parent scopes to be the scope of
416
+ # their parent class, and it's also used when looking up qualified
417
+ # variables.
418
+ def class_scope(klass)
419
+ # They might pass in either the class or class name
420
+ k = klass.respond_to?(:name) ? klass.name : klass
421
+ @class_scopes[k] || (parent && parent.class_scope(k))
422
+ end
423
+
424
+ # Collect all of the defaults set at any higher scopes.
425
+ # This is a different type of lookup because it's
426
+ # additive -- it collects all of the defaults, with defaults
427
+ # in closer scopes overriding those in later scopes.
428
+ #
429
+ # The lookupdefaults searches in the the order:
430
+ #
431
+ # * inherited
432
+ # * contained (recursive)
433
+ # * self
434
+ #
435
+ def lookupdefaults(type)
436
+ values = {}
437
+
438
+ # first collect the values from the parents
439
+ if parent
440
+ parent.lookupdefaults(type).each { |var,value|
441
+ values[var] = value
442
+ }
443
+ end
444
+
445
+ # then override them with any current values
446
+ # this should probably be done differently
447
+ if @defaults.include?(type)
448
+ @defaults[type].each { |var,value|
449
+ values[var] = value
450
+ }
451
+ end
452
+
453
+ values
454
+ end
455
+
456
+ # Check if the given value is a known default for the given type
457
+ #
458
+ def is_default?(type, key, value)
459
+ defaults_for_type = @defaults[type]
460
+ unless defaults_for_type.nil?
461
+ default_param = defaults_for_type[key]
462
+ return true if !default_param.nil? && value == default_param.value
463
+ end
464
+ !parent.nil? && parent.is_default?(type, key, value)
465
+ end
466
+
467
+ # Look up a defined type.
468
+ def lookuptype(name)
469
+ # This happens a lot, avoid making a call to make a call
470
+ krt = environment.known_resource_types
471
+ krt.find_definition(name) || krt.find_hostclass(name)
472
+ end
473
+
474
+ def undef_as(x,v)
475
+ if v.nil? or v == :undef
476
+ x
477
+ else
478
+ v
479
+ end
480
+ end
481
+
482
+ # Lookup a variable within this scope using the Puppet language's
483
+ # scoping rules. Variables can be qualified using just as in a
484
+ # manifest.
485
+ #
486
+ # @param [String] name the variable name to lookup
487
+ # @param [Hash] hash of options, only internal code should give this
488
+ # @param [Boolean] if resolution is of the leaf of a qualified name - only internal code should give this
489
+ # @return Object the value of the variable, or if not found; nil if `strict_variables` is false, and thrown :undefined_variable otherwise
490
+ #
491
+ # @api public
492
+ def lookupvar(name, options = EMPTY_HASH)
493
+ unless name.is_a? String
494
+ raise Puppet::ParseError, _("Scope variable name %{name} is a %{klass}, not a string") % { name: name.inspect, klass: name.class }
495
+ end
496
+
497
+ # If name has '::' in it, it is resolved as a qualified variable
498
+ unless (idx = name.index('::')).nil?
499
+ # Always drop leading '::' if present as that is how the values are keyed.
500
+ return lookup_qualified_variable(idx == 0 ? name[2..-1] : name, options)
501
+ end
502
+
503
+ # At this point, search is for a non qualified (simple) name
504
+ table = @ephemeral.last
505
+ val = table[name]
506
+ return val unless val.nil? && !table.include?(name)
507
+
508
+ next_scope = inherited_scope || enclosing_scope
509
+ if next_scope
510
+ next_scope.lookupvar(name, options)
511
+ else
512
+ variable_not_found(name)
513
+ end
514
+ end
515
+
516
+ UNDEFINED_VARIABLES_KIND = 'undefined_variables'
517
+
518
+ # The exception raised when a throw is uncaught is different in different versions
519
+ # of ruby. In >=2.2.0 it is UncaughtThrowError (which did not exist prior to this)
520
+ #
521
+ UNCAUGHT_THROW_EXCEPTION = defined?(UncaughtThrowError) ? UncaughtThrowError : ArgumentError
522
+
523
+ def variable_not_found(name, reason=nil)
524
+ # Built in variables and numeric variables always exist
525
+ if BUILT_IN_VARS.include?(name) || name =~ Puppet::Pops::Patterns::NUMERIC_VAR_NAME
526
+ return nil
527
+ end
528
+ begin
529
+ throw(:undefined_variable, reason)
530
+ rescue UNCAUGHT_THROW_EXCEPTION
531
+ case Puppet[:strict]
532
+ when :off
533
+ # do nothing
534
+ when :warning
535
+ Puppet.warn_once(UNDEFINED_VARIABLES_KIND, _("Variable: %{name}") % { name: name },
536
+ _("Undefined variable '%{name}'; %{reason}") % { name: name, reason: reason } )
537
+ when :error
538
+ raise ArgumentError, _("Undefined variable '%{name}'; %{reason}") % { name: name, reason: reason }
539
+ end
540
+ end
541
+ nil
542
+ end
543
+
544
+ # Retrieves the variable value assigned to the name given as an argument. The name must be a String,
545
+ # and namespace can be qualified with '::'. The value is looked up in this scope, its parent scopes,
546
+ # or in a specific visible named scope.
547
+ #
548
+ # @param varname [String] the name of the variable (may be a qualified name using `(ns'::')*varname`
549
+ # @param options [Hash] Additional options, not part of api.
550
+ # @return [Object] the value assigned to the given varname
551
+ # @see #[]=
552
+ # @api public
553
+ #
554
+ def [](varname, options = EMPTY_HASH)
555
+ lookupvar(varname, options)
556
+ end
557
+
558
+ # The class scope of the inherited thing of this scope's resource.
559
+ #
560
+ # @return [Puppet::Parser::Scope] The scope or nil if there is not an inherited scope
561
+ def inherited_scope
562
+ if resource && resource.type == TYPENAME_CLASS && !resource.resource_type.parent.nil?
563
+ qualified_scope(resource.resource_type.parent)
564
+ else
565
+ nil
566
+ end
567
+ end
568
+
569
+ # The enclosing scope (topscope or nodescope) of this scope.
570
+ # The enclosing scopes are produced when a class or define is included at
571
+ # some point. The parent scope of the included class or define becomes the
572
+ # scope in which it was included. The chain of parent scopes is followed
573
+ # until a node scope or the topscope is found
574
+ #
575
+ # @return [Puppet::Parser::Scope] The scope or nil if there is no enclosing scope
576
+ def enclosing_scope
577
+ if has_enclosing_scope?
578
+ if parent.is_topscope? || parent.is_nodescope?
579
+ parent
580
+ else
581
+ parent.enclosing_scope
582
+ end
583
+ end
584
+ end
585
+
586
+ def is_classscope?
587
+ resource && resource.type == TYPENAME_CLASS
588
+ end
589
+
590
+ def is_nodescope?
591
+ resource && resource.type == TYPENAME_NODE
592
+ end
593
+
594
+ def is_topscope?
595
+ equal?(@compiler.topscope)
596
+ end
597
+
598
+ # @api private
599
+ def lookup_qualified_variable(fqn, options)
600
+ table = @compiler.qualified_variables
601
+ val = table[fqn]
602
+ return val if !val.nil? || table.include?(fqn)
603
+
604
+ # not found - search inherited scope for class
605
+ leaf_index = fqn.rindex('::')
606
+ unless leaf_index.nil?
607
+ leaf_name = fqn[ (leaf_index+2)..-1 ]
608
+ class_name = fqn[ 0, leaf_index ]
609
+ begin
610
+ qs = qualified_scope(class_name)
611
+ unless qs.nil?
612
+ return qs.get_local_variable(leaf_name) if qs.has_local_variable?(leaf_name)
613
+ iscope = qs.inherited_scope
614
+ return lookup_qualified_variable("#{iscope.source.name}::#{leaf_name}", options) unless iscope.nil?
615
+ end
616
+ rescue RuntimeError => e
617
+ # because a failure to find the class, or inherited should be reported against given name
618
+ return handle_not_found(class_name, leaf_name, options, e.message)
619
+ end
620
+ end
621
+ # report with leading '::' by using empty class_name
622
+ return handle_not_found('', fqn, options)
623
+ end
624
+
625
+ # @api private
626
+ def has_local_variable?(name)
627
+ @ephemeral.last.include?(name)
628
+ end
629
+
630
+ # @api private
631
+ def get_local_variable(name)
632
+ @ephemeral.last[name]
633
+ end
634
+
635
+ def handle_not_found(class_name, variable_name, position, reason = nil)
636
+ unless Puppet[:strict_variables]
637
+ # Do not issue warning if strict variables are on, as an error will be raised by variable_not_found
638
+ location = if position[:lineproc]
639
+ Puppet::Util::Errors.error_location_with_space(nil, position[:lineproc].call)
640
+ else
641
+ Puppet::Util::Errors.error_location_with_space(position[:file], position[:line])
642
+ end
643
+ variable_not_found("#{class_name}::#{variable_name}", "#{reason}#{location}")
644
+ return nil
645
+ end
646
+ variable_not_found("#{class_name}::#{variable_name}", reason)
647
+ end
648
+
649
+ def has_enclosing_scope?
650
+ ! parent.nil?
651
+ end
652
+ private :has_enclosing_scope?
653
+
654
+ def qualified_scope(classname)
655
+ klass = find_hostclass(classname)
656
+ raise _("class %{classname} could not be found") % { classname: classname } unless klass
657
+ kscope = class_scope(klass)
658
+ raise _("class %{classname} has not been evaluated") % { classname: classname } unless kscope
659
+ kscope
660
+ end
661
+ private :qualified_scope
662
+
663
+ # Returns a Hash containing all variables and their values, optionally (and
664
+ # by default) including the values defined in parent. Local values
665
+ # shadow parent values. Ephemeral scopes for match results ($0 - $n) are not included.
666
+ # Optionally include the variables that are explicitly set to `undef`.
667
+ #
668
+ def to_hash(recursive = true, include_undef = false)
669
+ if recursive and has_enclosing_scope?
670
+ target = enclosing_scope.to_hash(recursive)
671
+ if !(inherited = inherited_scope).nil?
672
+ target.merge!(inherited.to_hash(recursive))
673
+ end
674
+ else
675
+ target = Hash.new
676
+ end
677
+
678
+ # add all local scopes
679
+ @ephemeral.last.add_entries_to(target, include_undef)
680
+ target
681
+ end
682
+
683
+ # Create a new scope and set these options.
684
+ def newscope(options = {})
685
+ compiler.newscope(self, options)
686
+ end
687
+
688
+ def parent_module_name
689
+ return nil unless @parent && @parent.source
690
+ @parent.source.module_name
691
+ end
692
+
693
+ # Set defaults for a type. The typename should already be downcased,
694
+ # so that the syntax is isolated. We don't do any kind of type-checking
695
+ # here; instead we let the resource do it when the defaults are used.
696
+ def define_settings(type, params)
697
+ table = @defaults[type]
698
+
699
+ # if we got a single param, it'll be in its own array
700
+ params = [params] unless params.is_a?(Array)
701
+
702
+ params.each { |param|
703
+ if table.include?(param.name)
704
+ raise Puppet::ParseError.new(_("Default already defined for %{type} { %{param} }; cannot redefine") % { type: type, param: param.name }, param.file, param.line)
705
+ end
706
+ table[param.name] = param
707
+ }
708
+ end
709
+
710
+ # Merge all settings for the given _env_name_ into this scope
711
+ # @param env_name [Symbol] the name of the environment
712
+ # @param set_in_this_scope [Boolean] if the settings variables should also be set in this instance of scope
713
+ def merge_settings(env_name, set_in_this_scope=true)
714
+ settings = Puppet.settings
715
+ table = effective_symtable(false)
716
+ global_table = compiler.qualified_variables
717
+ all_local = {}
718
+ settings.each_key do |name|
719
+ next if :name == name
720
+ key = name.to_s
721
+ value = transform_setting(settings.value_sym(name, env_name))
722
+ if set_in_this_scope
723
+ table[key] = value
724
+ end
725
+ all_local[key] = value
726
+ # also write the fqn into global table for direct lookup
727
+ global_table["settings::#{key}"] = value
728
+ end
729
+ # set the 'all_local' - a hash of all settings
730
+ global_table["settings::all_local"] = all_local
731
+ nil
732
+ end
733
+
734
+ def transform_setting(val)
735
+ if val.is_a?(String) || val.is_a?(Numeric) || true == val || false == val || nil == val
736
+ val
737
+ elsif val.is_a?(Array)
738
+ val.map {|entry| transform_setting(entry) }
739
+ elsif val.is_a?(Hash)
740
+ result = {}
741
+ val.each {|k,v| result[transform_setting(k)] = transform_setting(v) }
742
+ result
743
+ else
744
+ # not ideal, but required as there are settings values that are special
745
+ :undef == val ? nil : val.to_s
746
+ end
747
+ end
748
+ private :transform_setting
749
+
750
+ VARNAME_TRUSTED = 'trusted'
751
+ VARNAME_FACTS = 'facts'
752
+ VARNAME_SERVER_FACTS = 'server_facts'
753
+ RESERVED_VARIABLE_NAMES = [VARNAME_TRUSTED, VARNAME_FACTS].freeze
754
+ TYPENAME_CLASS = 'Class'
755
+ TYPENAME_NODE = 'Node'
756
+
757
+ # Set a variable in the current scope. This will override settings
758
+ # in scopes above, but will not allow variables in the current scope
759
+ # to be reassigned.
760
+ # It's preferred that you use self[]= instead of this; only use this
761
+ # when you need to set options.
762
+ def setvar(name, value, options = EMPTY_HASH)
763
+ if name =~ /^[0-9]+$/
764
+ raise Puppet::ParseError.new(_("Cannot assign to a numeric match result variable '$%{name}'") % { name: name }) # unless options[:ephemeral]
765
+ end
766
+ unless name.is_a? String
767
+ raise Puppet::ParseError, _("Scope variable name %{name} is a %{class_type}, not a string") % { name: name.inspect, class_type: name.class }
768
+ end
769
+
770
+ # Check for reserved variable names
771
+ if (name == VARNAME_TRUSTED || name == VARNAME_FACTS) && !options[:privileged]
772
+ raise Puppet::ParseError, _("Attempt to assign to a reserved variable name: '%{name}'") % { name: name }
773
+ end
774
+
775
+ # Check for server_facts reserved variable name
776
+ if name == VARNAME_SERVER_FACTS && !options[:privileged]
777
+ raise Puppet::ParseError, _("Attempt to assign to a reserved variable name: '%{name}'") % { name: name }
778
+ end
779
+
780
+ table = effective_symtable(options[:ephemeral])
781
+ if table.bound?(name)
782
+ error = Puppet::ParseError.new(_("Cannot reassign variable '$%{name}'") % { name: name })
783
+ error.file = options[:file] if options[:file]
784
+ error.line = options[:line] if options[:line]
785
+ raise error
786
+ end
787
+
788
+ table[name] = value
789
+
790
+ # Assign the qualified name in the environment
791
+ # Note that Settings scope has a source set to Boolean true.
792
+ #
793
+ # Only meaningful to set a fqn globally if table to assign to is the top of the scope's ephemeral stack
794
+ if @symtable.equal?(table)
795
+ if is_topscope?
796
+ # the scope name is '::'
797
+ compiler.qualified_variables[name] = value
798
+ elsif source.is_a?(Puppet::Resource::Type) && source.type == :hostclass
799
+ # the name is the name of the class
800
+ sourcename = source.name
801
+ compiler.qualified_variables["#{sourcename}::#{name}"] = value
802
+ end
803
+ end
804
+ value
805
+ end
806
+
807
+ def set_trusted(hash)
808
+ setvar('trusted', deep_freeze(hash), :privileged => true)
809
+ end
810
+
811
+ def set_facts(hash)
812
+ setvar('facts', deep_freeze(hash), :privileged => true)
813
+ end
814
+
815
+ def set_server_facts(hash)
816
+ setvar('server_facts', deep_freeze(hash), :privileged => true)
817
+ end
818
+
819
+ # Deeply freezes the given object. The object and its content must be of the types:
820
+ # Array, Hash, Numeric, Boolean, Regexp, NilClass, or String. All other types raises an Error.
821
+ # (i.e. if they are assignable to Puppet::Pops::Types::Data type).
822
+ #
823
+ def deep_freeze(object)
824
+ case object
825
+ when Array
826
+ object.each {|v| deep_freeze(v) }
827
+ object.freeze
828
+ when Hash
829
+ object.each {|k, v| deep_freeze(k); deep_freeze(v) }
830
+ object.freeze
831
+ when NilClass, Numeric, TrueClass, FalseClass
832
+ # do nothing
833
+ when String
834
+ object.freeze
835
+ else
836
+ raise Puppet::Error, _("Unsupported data type: '%{klass}'") % { klass: object.class }
837
+ end
838
+ object
839
+ end
840
+ private :deep_freeze
841
+
842
+ # Return the effective "table" for setting variables.
843
+ # This method returns the first ephemeral "table" that acts as a local scope, or this
844
+ # scope's symtable. If the parameter `use_ephemeral` is true, the "top most" ephemeral "table"
845
+ # will be returned (irrespective of it being a match scope or a local scope).
846
+ #
847
+ # @param use_ephemeral [Boolean] whether the top most ephemeral (of any kind) should be used or not
848
+ def effective_symtable(use_ephemeral)
849
+ s = @ephemeral[-1]
850
+ return s || @symtable if use_ephemeral
851
+
852
+ while s && !s.is_local_scope?()
853
+ s = s.parent
854
+ end
855
+ s || @symtable
856
+ end
857
+
858
+ # Sets the variable value of the name given as an argument to the given value. The value is
859
+ # set in the current scope and may shadow a variable with the same name in a visible outer scope.
860
+ # It is illegal to re-assign a variable in the same scope. It is illegal to set a variable in some other
861
+ # scope/namespace than the scope passed to a method.
862
+ #
863
+ # @param varname [String] The variable name to which the value is assigned. Must not contain `::`
864
+ # @param value [String] The value to assign to the given variable name.
865
+ # @param options [Hash] Additional options, not part of api and no longer used.
866
+ #
867
+ # @api public
868
+ #
869
+ def []=(varname, value, _ = nil)
870
+ setvar(varname, value)
871
+ end
872
+
873
+ # Used mainly for logging
874
+ def to_s
875
+ # As this is used for logging, this should really not be done in this class at all...
876
+ return "Scope(#{@resource})" unless @resource.nil?
877
+
878
+ # For logging of function-scope - it is now showing the file and line.
879
+ detail = Puppet::Pops::PuppetStack.top_of_stack
880
+ return "Scope()" if detail.empty?
881
+
882
+ # shorten the path if possible
883
+ path = detail[0]
884
+ env_path = nil
885
+ env_path = environment.configuration.path_to_env unless (environment.nil? || environment.configuration.nil?)
886
+ # check module paths first since they may be in the environment (i.e. they are longer)
887
+ module_path = environment.full_modulepath.detect {|m_path| path.start_with?(m_path) }
888
+ if module_path
889
+ path = "<module>" + path[module_path.length..-1]
890
+ elsif env_path && path && path.start_with?(env_path)
891
+ path = "<env>" + path[env_path.length..-1]
892
+ end
893
+ # Make the output appear as "Scope(path, line)"
894
+ "Scope(#{[path, detail[1]].join(', ')})"
895
+ end
896
+
897
+ alias_method :inspect, :to_s
898
+
899
+ # Pop ephemeral scopes up to level and return them
900
+ #
901
+ # @param level [Integer] a positive integer
902
+ # @return [Array] the removed ephemeral scopes
903
+ # @api private
904
+ def pop_ephemerals(level)
905
+ @ephemeral.pop(@ephemeral.size - level)
906
+ end
907
+
908
+ # Push ephemeral scopes onto the ephemeral scope stack
909
+ # @param ephemeral_scopes [Array]
910
+ # @api private
911
+ def push_ephemerals(ephemeral_scopes)
912
+ ephemeral_scopes.each { |ephemeral_scope| @ephemeral.push(ephemeral_scope) } unless ephemeral_scopes.nil?
913
+ end
914
+
915
+ def ephemeral_level
916
+ @ephemeral.size
917
+ end
918
+
919
+ # TODO: Who calls this?
920
+ def new_ephemeral(local_scope = false)
921
+ if local_scope
922
+ @ephemeral.push(LocalScope.new(@ephemeral.last))
923
+ else
924
+ @ephemeral.push(MatchScope.new(@ephemeral.last, nil))
925
+ end
926
+ end
927
+
928
+ # Execute given block in global scope with no ephemerals present
929
+ #
930
+ # @yieldparam [Scope] global_scope the global and ephemeral less scope
931
+ # @return [Object] the return of the block
932
+ #
933
+ # @api private
934
+ def with_global_scope(&block)
935
+ find_global_scope.without_ephemeral_scopes(&block)
936
+ end
937
+
938
+ # Execute given block with a ephemeral scope containing the given variables
939
+ # @api private
940
+ def with_local_scope(scope_variables)
941
+ local = LocalScope.new(@ephemeral.last)
942
+ scope_variables.each_pair { |k, v| local[k] = v }
943
+ @ephemeral.push(local)
944
+ begin
945
+ yield(self)
946
+ ensure
947
+ @ephemeral.pop
948
+ end
949
+ end
950
+
951
+ # Execute given block with all ephemeral popped from the ephemeral stack
952
+ #
953
+ # @api private
954
+ def without_ephemeral_scopes
955
+ save_ephemeral = @ephemeral
956
+ begin
957
+ @ephemeral = [ @symtable ]
958
+ yield(self)
959
+ ensure
960
+ @ephemeral = save_ephemeral
961
+ end
962
+ end
963
+
964
+ # Nests a parameter scope
965
+ # @param [String] callee_name the name of the function, template, or resource that defines the parameters
966
+ # @param [Array<String>] param_names list of parameter names
967
+ # @yieldparam [ParameterScope] param_scope the nested scope
968
+ # @api private
969
+ def with_parameter_scope(callee_name, param_names)
970
+ param_scope = ParameterScope.new(@ephemeral.last, callee_name, param_names)
971
+ with_guarded_scope do
972
+ @ephemeral.push(param_scope)
973
+ yield(param_scope)
974
+ end
975
+ end
976
+
977
+ # Execute given block and ensure that ephemeral level is restored
978
+ #
979
+ # @return [Object] the return of the block
980
+ #
981
+ # @api private
982
+ def with_guarded_scope
983
+ elevel = ephemeral_level
984
+ begin
985
+ yield
986
+ ensure
987
+ pop_ephemerals(elevel)
988
+ end
989
+ end
990
+
991
+ # Sets match data in the most nested scope (which always is a MatchScope), it clobbers match data already set there
992
+ #
993
+ def set_match_data(match_data)
994
+ @ephemeral.last.match_data = match_data
995
+ end
996
+
997
+ # Nests a match data scope
998
+ def new_match_scope(match_data)
999
+ @ephemeral.push(MatchScope.new(@ephemeral.last, match_data))
1000
+ end
1001
+
1002
+ def ephemeral_from(match, file = nil, line = nil)
1003
+ case match
1004
+ when Hash
1005
+ # Create local scope ephemeral and set all values from hash
1006
+ new_ephemeral(true)
1007
+ match.each {|k,v| setvar(k, v, :file => file, :line => line, :ephemeral => true) }
1008
+ # Must always have an inner match data scope (that starts out as transparent)
1009
+ # In 3x slightly wasteful, since a new nested scope is created for a match
1010
+ # (TODO: Fix that problem)
1011
+ new_ephemeral(false)
1012
+ else
1013
+ raise(ArgumentError,_("Invalid regex match data. Got a %{klass}") % { klass: match.class }) unless match.is_a?(MatchData)
1014
+ # Create a match ephemeral and set values from match data
1015
+ new_match_scope(match)
1016
+ end
1017
+ end
1018
+
1019
+ # @api private
1020
+ def find_resource_type(type)
1021
+ raise Puppet::DevError, _("Scope#find_resource_type() is no longer supported, use Puppet::Pops::Evaluator::Runtime3ResourceSupport instead")
1022
+ end
1023
+
1024
+ # @api private
1025
+ def find_builtin_resource_type(type)
1026
+ raise Puppet::DevError, _("Scope#find_builtin_resource_type() is no longer supported, use Puppet::Pops::Evaluator::Runtime3ResourceSupport instead")
1027
+ end
1028
+
1029
+ # @api private
1030
+ def find_defined_resource_type(type)
1031
+ raise Puppet::DevError, _("Scope#find_defined_resource_type() is no longer supported, use Puppet::Pops::Evaluator::Runtime3ResourceSupport instead")
1032
+ end
1033
+
1034
+
1035
+ def method_missing(method, *args, &block)
1036
+ method.to_s =~ /^function_(.*)$/
1037
+ name = $1
1038
+ super unless name
1039
+ super unless Puppet::Parser::Functions.function(name)
1040
+ # In odd circumstances, this might not end up defined by the previous
1041
+ # method, so we might as well be certain.
1042
+ if respond_to? method
1043
+ send(method, *args)
1044
+ else
1045
+ raise Puppet::DevError, _("Function %{name} not defined despite being loaded!") % { name: name }
1046
+ end
1047
+ end
1048
+
1049
+ # To be removed when enough time has passed after puppet 5.0.0
1050
+ # @api private
1051
+ def resolve_type_and_titles(type, titles)
1052
+ raise Puppet::DevError, _("Scope#resolve_type_and_title() is no longer supported, use Puppet::Pops::Evaluator::Runtime3ResourceSupport instead")
1053
+ end
1054
+
1055
+ # Transforms references to classes to the form suitable for
1056
+ # lookup in the compiler.
1057
+ #
1058
+ # Makes names passed in the names array absolute if they are relative.
1059
+ #
1060
+ # Transforms Class[] and Resource[] type references to class name
1061
+ # or raises an error if a Class[] is unspecific, if a Resource is not
1062
+ # a 'class' resource, or if unspecific (no title).
1063
+ #
1064
+ #
1065
+ # @param names [Array<String>] names to (optionally) make absolute
1066
+ # @return [Array<String>] names after transformation
1067
+ #
1068
+ def transform_and_assert_classnames(names)
1069
+ names.map do |name|
1070
+ case name
1071
+ when NilClass
1072
+ raise ArgumentError, _("Cannot use undef as a class name")
1073
+ when String
1074
+ raise ArgumentError, _("Cannot use empty string as a class name") if name.empty?
1075
+ name.sub(/^([^:]{1,2})/, '::\1')
1076
+
1077
+ when Puppet::Resource
1078
+ assert_class_and_title(name.type, name.title)
1079
+ name.title.sub(/^([^:]{1,2})/, '::\1')
1080
+
1081
+ when Puppet::Pops::Types::PClassType
1082
+ #TRANSLATORS "Class" and "Type" are Puppet keywords and should not be translated
1083
+ raise ArgumentError, _("Cannot use an unspecific Class[] Type") unless name.class_name
1084
+ name.class_name.sub(/^([^:]{1,2})/, '::\1')
1085
+
1086
+ when Puppet::Pops::Types::PResourceType
1087
+ assert_class_and_title(name.type_name, name.title)
1088
+ name.title.sub(/^([^:]{1,2})/, '::\1')
1089
+ end.downcase
1090
+ end
1091
+ end
1092
+
1093
+ # Calls a 3.x or 4.x function by name with arguments given in an array using the 4.x calling convention
1094
+ # and returns the result.
1095
+ # Note that it is the caller's responsibility to rescue the given ArgumentError and provide location information
1096
+ # to aid the user find the problem. The problem is otherwise reported against the source location that
1097
+ # invoked the function that ultimately called this method.
1098
+ #
1099
+ # @return [Object] the result of the called function
1100
+ # @raise ArgumentError if the function does not exist
1101
+ def call_function(func_name, args, &block)
1102
+ Puppet::Pops::Parser::EvaluatingParser.new.evaluator.external_call_function(func_name, args, self, &block)
1103
+ end
1104
+
1105
+ private
1106
+
1107
+ def assert_class_and_title(type_name, title)
1108
+ if type_name.nil? || type_name == ''
1109
+ #TRANSLATORS "Resource" is a class name and should not be translated
1110
+ raise ArgumentError, _("Cannot use an unspecific Resource[] where a Resource['class', name] is expected")
1111
+ end
1112
+ unless type_name =~ /^[Cc]lass$/
1113
+ #TRANSLATORS "Resource" is a class name and should not be translated
1114
+ raise ArgumentError, _("Cannot use a Resource[%{type_name}] where a Resource['class', name] is expected") % { type_name: type_name }
1115
+ end
1116
+ if title.nil?
1117
+ #TRANSLATORS "Resource" is a class name and should not be translated
1118
+ raise ArgumentError, _("Cannot use an unspecific Resource['class'] where a Resource['class', name] is expected")
1119
+ end
1120
+ end
1121
+
1122
+ def extend_with_functions_module
1123
+ root = Puppet.lookup(:root_environment)
1124
+ extend Puppet::Parser::Functions.environment_module(root)
1125
+ extend Puppet::Parser::Functions.environment_module(environment) if environment != root
1126
+ end
1127
+ end