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,1148 @@
1
+ require_relative '../../../puppet/pops/evaluator/external_syntax_support'
2
+
3
+ module Puppet::Pops
4
+ module Validation
5
+
6
+ # A Validator validates a model.
7
+ #
8
+ # Validation is performed on each model element in isolation. Each method should validate the model element's state
9
+ # but not validate its referenced/contained elements except to check their validity in their respective role.
10
+ # The intent is to drive the validation with a tree iterator that visits all elements in a model.
11
+ #
12
+ #
13
+ # TODO: Add validation of multiplicities - this is a general validation that can be checked for all
14
+ # Model objects via their metamodel. (I.e an extra call to multiplicity check in polymorph check).
15
+ # This is however mostly valuable when validating model to model transformations, and is therefore T.B.D
16
+ #
17
+ class Checker4_0 < Evaluator::LiteralEvaluator
18
+ include Puppet::Pops::Evaluator::ExternalSyntaxSupport
19
+
20
+ attr_reader :acceptor
21
+ attr_reader :migration_checker
22
+
23
+ def self.check_visitor
24
+ # Class instance variable rather than Class variable because methods visited
25
+ # may be overridden in subclass
26
+ @check_visitor ||= Visitor.new(nil, 'check', 0, 0)
27
+ end
28
+
29
+ # Initializes the validator with a diagnostics producer. This object must respond to
30
+ # `:will_accept?` and `:accept`.
31
+ #
32
+ def initialize(diagnostics_producer)
33
+ super()
34
+ @@rvalue_visitor ||= Visitor.new(nil, "rvalue", 0, 0)
35
+ @@hostname_visitor ||= Visitor.new(nil, "hostname", 1, 2)
36
+ @@assignment_visitor ||= Visitor.new(nil, "assign", 0, 1)
37
+ @@query_visitor ||= Visitor.new(nil, "query", 0, 0)
38
+ @@relation_visitor ||= Visitor.new(nil, "relation", 0, 0)
39
+ @@idem_visitor ||= Visitor.new(nil, "idem", 0, 0)
40
+
41
+ @check_visitor = self.class.check_visitor
42
+ @acceptor = diagnostics_producer
43
+
44
+ # Use null migration checker unless given in context
45
+ @migration_checker = (Puppet.lookup(:migration_checker) { Migration::MigrationChecker.new() })
46
+ end
47
+
48
+ # Validates the entire model by visiting each model element and calling `check`.
49
+ # The result is collected (or acted on immediately) by the configured diagnostic provider/acceptor
50
+ # given when creating this Checker.
51
+ #
52
+ def validate(model)
53
+ # tree iterate the model, and call check for each element
54
+ @path = []
55
+ check(model)
56
+ internal_check_top_construct_in_module(model)
57
+ model._pcore_all_contents(@path) { |element| check(element) }
58
+ end
59
+
60
+ def container(index = -1)
61
+ @path[index]
62
+ end
63
+
64
+ # Performs regular validity check
65
+ def check(o)
66
+ @check_visitor.visit_this_0(self, o)
67
+ end
68
+
69
+ # Performs check if this is a vaid hostname expression
70
+ # @param single_feature_name [String, nil] the name of a single valued hostname feature of the value's container. e.g. 'parent'
71
+ def hostname(o, semantic)
72
+ @@hostname_visitor.visit_this_1(self, o, semantic)
73
+ end
74
+
75
+ # Performs check if this is valid as a query
76
+ def query(o)
77
+ @@query_visitor.visit_this_0(self, o)
78
+ end
79
+
80
+ # Performs check if this is valid as a relationship side
81
+ def relation(o)
82
+ @@relation_visitor.visit_this_0(self, o)
83
+ end
84
+
85
+ # Performs check if this is valid as a rvalue
86
+ def rvalue(o)
87
+ @@rvalue_visitor.visit_this_0(self, o)
88
+ end
89
+
90
+ #---TOP CHECK
91
+ # Performs check if this is valid as a container of a definition (class, define, node)
92
+ def top(definition, idx = -1)
93
+ o = container(idx)
94
+ idx -= 1
95
+ case o
96
+ when NilClass, Model::ApplyExpression, Model::HostClassDefinition, Model::Program
97
+ # ok, stop scanning parents
98
+ when Model::BlockExpression
99
+ c = container(idx)
100
+ if !c.is_a?(Model::Program) &&
101
+ (definition.is_a?(Model::FunctionDefinition) || definition.is_a?(Model::TypeAlias) || definition.is_a?(Model::TypeDefinition))
102
+
103
+ # not ok. These can never be nested in a block
104
+ acceptor.accept(Issues::NOT_ABSOLUTE_TOP_LEVEL, definition)
105
+ else
106
+ # ok, if this is a block representing the body of a class, or is top level
107
+ top(definition, idx)
108
+ end
109
+ when Model::LambdaExpression
110
+ # A LambdaExpression is a BlockExpression, and this check is needed to prevent the polymorph method for BlockExpression
111
+ # to accept a lambda.
112
+ # A lambda can not iteratively create classes, nodes or defines as the lambda does not have a closure.
113
+ acceptor.accept(Issues::NOT_TOP_LEVEL, definition)
114
+ else
115
+ # fail, reached a container that is not top level
116
+ acceptor.accept(Issues::NOT_TOP_LEVEL, definition)
117
+ end
118
+ end
119
+
120
+ # Checks the LHS of an assignment (is it assignable?).
121
+ # If args[0] is true, assignment via index is checked.
122
+ #
123
+ def assign(o, via_index = false)
124
+ @@assignment_visitor.visit_this_1(self, o, via_index)
125
+ end
126
+
127
+ # Checks if the expression has side effect ('idem' is latin for 'the same', here meaning that the evaluation state
128
+ # is known to be unchanged after the expression has been evaluated). The result is not 100% authoritative for
129
+ # negative answers since analysis of function behavior is not possible.
130
+ # @return [Boolean] true if expression is known to have no effect on evaluation state
131
+ #
132
+ def idem(o)
133
+ @@idem_visitor.visit_this_0(self, o)
134
+ end
135
+
136
+ # Returns the last expression in a block, or the expression, if that expression is idem
137
+ def ends_with_idem(o)
138
+ if o.is_a?(Model::BlockExpression)
139
+ last = o.statements[-1]
140
+ idem(last) ? last : nil
141
+ else
142
+ idem(o) ? o : nil
143
+ end
144
+ end
145
+
146
+ #---ASSIGNMENT CHECKS
147
+
148
+ def assign_VariableExpression(o, via_index)
149
+ varname_string = varname_to_s(o.expr)
150
+ if varname_string =~ Patterns::NUMERIC_VAR_NAME
151
+ acceptor.accept(Issues::ILLEGAL_NUMERIC_ASSIGNMENT, o, :varname => varname_string)
152
+ end
153
+ # Can not assign to something in another namespace (i.e. a '::' in the name is not legal)
154
+ if acceptor.will_accept? Issues::CROSS_SCOPE_ASSIGNMENT
155
+ if varname_string =~ /::/
156
+ acceptor.accept(Issues::CROSS_SCOPE_ASSIGNMENT, o, :name => varname_string)
157
+ end
158
+ end
159
+
160
+ # TODO: Could scan for reassignment of the same variable if done earlier in the same container
161
+ # Or if assigning to a parameter (more work).
162
+ end
163
+
164
+ def assign_AccessExpression(o, via_index)
165
+ # Are indexed assignments allowed at all ? $x[x] = '...'
166
+ if acceptor.will_accept? Issues::ILLEGAL_INDEXED_ASSIGNMENT
167
+ acceptor.accept(Issues::ILLEGAL_INDEXED_ASSIGNMENT, o)
168
+ else
169
+ # Then the left expression must be assignable-via-index
170
+ assign(o.left_expr, true)
171
+ end
172
+ end
173
+
174
+ def assign_LiteralList(o, via_index)
175
+ o.values.each {|x| assign(x) }
176
+ end
177
+
178
+ def assign_Object(o, via_index)
179
+ # Can not assign to anything else (differentiate if this is via index or not)
180
+ # i.e. 10 = 'hello' vs. 10['x'] = 'hello' (the root is reported as being in error in both cases)
181
+ #
182
+ acceptor.accept(via_index ? Issues::ILLEGAL_ASSIGNMENT_VIA_INDEX : Issues::ILLEGAL_ASSIGNMENT, o)
183
+ end
184
+
185
+ #---CHECKS
186
+
187
+ def check_Object(o)
188
+ end
189
+
190
+ def check_Factory(o)
191
+ check(o.model)
192
+ end
193
+
194
+ def check_AccessExpression(o)
195
+ # Only min range is checked, all other checks are RT checks as they depend on the resulting type
196
+ # of the LHS.
197
+ if o.keys.size < 1
198
+ acceptor.accept(Issues::MISSING_INDEX, o)
199
+ end
200
+ end
201
+
202
+ def check_AssignmentExpression(o)
203
+ case o.operator
204
+ when '='
205
+ assign(o.left_expr)
206
+ rvalue(o.right_expr)
207
+ when '+=', '-='
208
+ acceptor.accept(Issues::APPENDS_DELETES_NO_LONGER_SUPPORTED, o, {:operator => o.operator})
209
+ else
210
+ acceptor.accept(Issues::UNSUPPORTED_OPERATOR, o, {:operator => o.operator})
211
+ end
212
+ end
213
+
214
+ # Checks that operation with :+> is contained in a ResourceOverride or Collector.
215
+ #
216
+ # Parent of an AttributeOperation can be one of:
217
+ # * CollectExpression
218
+ # * ResourceOverride
219
+ # * ResourceBody (ILLEGAL this is a regular resource expression)
220
+ # * ResourceDefaults (ILLEGAL)
221
+ #
222
+ def check_AttributeOperation(o)
223
+ if o.operator == '+>'
224
+ # Append operator use is constrained
225
+ p = container
226
+ unless p.is_a?(Model::CollectExpression) || p.is_a?(Model::ResourceOverrideExpression)
227
+ acceptor.accept(Issues::ILLEGAL_ATTRIBUTE_APPEND, o, {:name=>o.attribute_name, :parent=>p})
228
+ end
229
+ end
230
+ rvalue(o.value_expr)
231
+ end
232
+
233
+ def check_AttributesOperation(o)
234
+ # Append operator use is constrained
235
+ p = container
236
+ case p
237
+ when Model::AbstractResource
238
+ when Model::CollectExpression
239
+ else
240
+ # protect against just testing a snippet that has no parent, error message will be a bit strange
241
+ # but it is not for a real program.
242
+ parent2 = p.nil? ? o : container(-2)
243
+ unless parent2.is_a?(Model::AbstractResource)
244
+ acceptor.accept(Issues::UNSUPPORTED_OPERATOR_IN_CONTEXT, parent2, :operator=>'* =>')
245
+ end
246
+ end
247
+ rvalue(o.expr)
248
+ end
249
+
250
+ def check_BinaryExpression(o)
251
+ rvalue(o.left_expr)
252
+ rvalue(o.right_expr)
253
+ end
254
+
255
+ def resource_without_title?(o)
256
+ if o.instance_of?(Model::BlockExpression)
257
+ statements = o.statements
258
+ statements.length == 2 && statements[0].instance_of?(Model::QualifiedName) && statements[1].instance_of?(Model::LiteralHash)
259
+ else
260
+ false
261
+ end
262
+ end
263
+
264
+ def check_BlockExpression(o)
265
+ if resource_without_title?(o)
266
+ acceptor.accept(Issues::RESOURCE_WITHOUT_TITLE, o, :name => o.statements[0].value)
267
+ else
268
+ o.statements[0..-2].each do |statement|
269
+ if idem(statement)
270
+ acceptor.accept(Issues::IDEM_EXPRESSION_NOT_LAST, statement)
271
+ break # only flag the first
272
+ end
273
+ end
274
+ end
275
+ end
276
+
277
+ def check_CallNamedFunctionExpression(o)
278
+ functor = o.functor_expr
279
+ if functor.is_a?(Model::QualifiedReference) ||
280
+ functor.is_a?(Model::AccessExpression) && functor.left_expr.is_a?(Model::QualifiedReference)
281
+ # ok (a call to a type)
282
+ return nil
283
+ end
284
+ case functor
285
+ when Model::QualifiedName
286
+ # ok
287
+ nil
288
+ when Model::RenderStringExpression
289
+ # helpful to point out this easy to make Epp error
290
+ acceptor.accept(Issues::ILLEGAL_EPP_PARAMETERS, o)
291
+ else
292
+ acceptor.accept(Issues::ILLEGAL_EXPRESSION, o.functor_expr, {:feature=>'function name', :container => o})
293
+ end
294
+ end
295
+
296
+ def check_EppExpression(o)
297
+ p = container
298
+ if p.is_a?(Model::LambdaExpression)
299
+ internal_check_no_capture(p, o)
300
+ internal_check_parameter_name_uniqueness(p)
301
+ end
302
+ end
303
+
304
+ def check_HeredocExpression(o)
305
+ # Only syntax check static text in heredoc during validation - dynamic text is validated by the evaluator.
306
+ expr = o.text_expr
307
+ if expr.is_a?(Model::LiteralString)
308
+ assert_external_syntax(nil, expr.value, o.syntax, o.text_expr)
309
+ end
310
+ end
311
+
312
+ def check_MethodCallExpression(o)
313
+ unless o.functor_expr.is_a? Model::QualifiedName
314
+ acceptor.accept(Issues::ILLEGAL_EXPRESSION, o.functor_expr, :feature => 'function name', :container => o)
315
+ end
316
+ end
317
+
318
+ def check_CaseExpression(o)
319
+ rvalue(o.test)
320
+ # There can only be one LiteralDefault case option value
321
+ found_default = false
322
+ o.options.each do |option|
323
+ option.values.each do |value|
324
+ if value.is_a?(Model::LiteralDefault)
325
+ # Flag the second default as 'unreachable'
326
+ acceptor.accept(Issues::DUPLICATE_DEFAULT, value, :container => o) if found_default
327
+ found_default = true
328
+ end
329
+ end
330
+ end
331
+ end
332
+
333
+ def check_CaseOption(o)
334
+ o.values.each { |v| rvalue(v) }
335
+ end
336
+
337
+ def check_CollectExpression(o)
338
+ unless o.type_expr.is_a? Model::QualifiedReference
339
+ acceptor.accept(Issues::ILLEGAL_EXPRESSION, o.type_expr, :feature=> 'type name', :container => o)
340
+ end
341
+ end
342
+
343
+ # Only used for function names, grammar should not be able to produce something faulty, but
344
+ # check anyway if model is created programmatically (it will fail in transformation to AST for sure).
345
+ def check_NamedAccessExpression(o)
346
+ name = o.right_expr
347
+ unless name.is_a? Model::QualifiedName
348
+ acceptor.accept(Issues::ILLEGAL_EXPRESSION, name, :feature=> 'function name', :container => container)
349
+ end
350
+ end
351
+
352
+ RESERVED_TYPE_NAMES = {
353
+ 'type' => true,
354
+ 'any' => true,
355
+ 'unit' => true,
356
+ 'scalar' => true,
357
+ 'boolean' => true,
358
+ 'numeric' => true,
359
+ 'integer' => true,
360
+ 'float' => true,
361
+ 'collection' => true,
362
+ 'array' => true,
363
+ 'hash' => true,
364
+ 'tuple' => true,
365
+ 'struct' => true,
366
+ 'variant' => true,
367
+ 'optional' => true,
368
+ 'enum' => true,
369
+ 'regexp' => true,
370
+ 'pattern' => true,
371
+ 'runtime' => true,
372
+ 'init' => true,
373
+ 'object' => true,
374
+ 'sensitive' => true,
375
+ 'semver' => true,
376
+ 'semverrange' => true,
377
+ 'string' => true,
378
+ 'timestamp' => true,
379
+ 'timespan' => true,
380
+ 'typeset' => true,
381
+ }
382
+
383
+ FUTURE_RESERVED_WORDS = {
384
+ 'plan' => true
385
+ }
386
+
387
+ # for 'class', 'define', and function
388
+ def check_NamedDefinition(o)
389
+ top(o)
390
+ if o.name !~ Patterns::CLASSREF_DECL
391
+ acceptor.accept(Issues::ILLEGAL_DEFINITION_NAME, o, {:name=>o.name})
392
+ end
393
+
394
+ internal_check_file_namespace(o)
395
+ internal_check_reserved_type_name(o, o.name)
396
+ internal_check_future_reserved_word(o, o.name)
397
+ end
398
+
399
+ def check_TypeAlias(o)
400
+ top(o)
401
+ if o.name !~ Patterns::CLASSREF_EXT_DECL
402
+ acceptor.accept(Issues::ILLEGAL_DEFINITION_NAME, o, {:name=>o.name})
403
+ end
404
+ internal_check_reserved_type_name(o, o.name)
405
+ internal_check_type_ref(o, o.type_expr)
406
+ end
407
+
408
+ def check_TypeMapping(o)
409
+ top(o)
410
+ lhs = o.type_expr
411
+ lhs_type = 0 # Not Runtime
412
+ if lhs.is_a?(Model::AccessExpression)
413
+ left = lhs.left_expr
414
+ if left.is_a?(Model::QualifiedReference) && left.cased_value == 'Runtime'
415
+ lhs_type = 1 # Runtime
416
+ keys = lhs.keys
417
+
418
+ # Must be a literal string or pattern replacement
419
+ lhs_type = 2 if keys.size == 2 && pattern_with_replacement?(keys[1])
420
+ end
421
+ end
422
+
423
+ if lhs_type == 0
424
+ # This is not a TypeMapping. Something other than Runtime[] on LHS
425
+ acceptor.accept(Issues::UNSUPPORTED_EXPRESSION, o)
426
+ else
427
+ rhs = o.mapping_expr
428
+ if pattern_with_replacement?(rhs)
429
+ acceptor.accept(Issues::ILLEGAL_SINGLE_TYPE_MAPPING, o) if lhs_type == 1
430
+ elsif type_ref?(rhs)
431
+ acceptor.accept(Issues::ILLEGAL_REGEXP_TYPE_MAPPING, o) if lhs_type == 2
432
+ else
433
+ acceptor.accept(lhs_type == 1 ? Issues::ILLEGAL_SINGLE_TYPE_MAPPING : Issues::ILLEGAL_REGEXP_TYPE_MAPPING, o)
434
+ end
435
+ end
436
+ end
437
+
438
+ def pattern_with_replacement?(o)
439
+ if o.is_a?(Model::LiteralList)
440
+ v = o.values
441
+ v.size == 2 && v[0].is_a?(Model::LiteralRegularExpression) && v[1].is_a?(Model::LiteralString)
442
+ else
443
+ false
444
+ end
445
+ end
446
+
447
+ def type_ref?(o)
448
+ o = o.left_expr if o.is_a?(Model::AccessExpression)
449
+ o.is_a?(Model::QualifiedReference)
450
+ end
451
+
452
+ def check_TypeDefinition(o)
453
+ top(o)
454
+ internal_check_reserved_type_name(o, o.name)
455
+ # TODO: Check TypeDefinition body. For now, just error out
456
+ acceptor.accept(Issues::UNSUPPORTED_EXPRESSION, o)
457
+ end
458
+
459
+ def check_FunctionDefinition(o)
460
+ check_NamedDefinition(o)
461
+ internal_check_return_type(o)
462
+ internal_check_parameter_name_uniqueness(o)
463
+ end
464
+
465
+ def check_HostClassDefinition(o)
466
+ check_NamedDefinition(o)
467
+ internal_check_no_capture(o)
468
+ internal_check_parameter_name_uniqueness(o)
469
+ internal_check_reserved_params(o)
470
+ internal_check_no_idem_last(o)
471
+ internal_check_parameter_type_literal(o)
472
+ end
473
+
474
+ def check_ResourceTypeDefinition(o)
475
+ check_NamedDefinition(o)
476
+ internal_check_no_capture(o)
477
+ internal_check_parameter_name_uniqueness(o)
478
+ internal_check_reserved_params(o)
479
+ internal_check_no_idem_last(o)
480
+ end
481
+
482
+ def internal_check_parameter_type_literal(o)
483
+ o.parameters.each do |p|
484
+ next unless p.type_expr
485
+
486
+ type = nil
487
+ catch :not_literal do
488
+ type = literal(p.type_expr)
489
+ end
490
+ acceptor.accept(Issues::ILLEGAL_NONLITERAL_PARAMETER_TYPE, p, { name: p.name, type_class: p.type_expr.class }) if type.nil?
491
+ end
492
+ end
493
+
494
+ def internal_check_return_type(o)
495
+ r = o.return_type
496
+ internal_check_type_ref(o, r) unless r.nil?
497
+ end
498
+
499
+ def internal_check_type_ref(o, r)
500
+ n = r.is_a?(Model::AccessExpression) ? r.left_expr : r
501
+ if n.is_a? Model::QualifiedReference
502
+ internal_check_future_reserved_word(r, n.value)
503
+ else
504
+ acceptor.accept(Issues::ILLEGAL_EXPRESSION, r, :feature => 'a type reference', :container => o)
505
+ end
506
+ end
507
+
508
+ def internal_check_no_idem_last(o)
509
+ violator = ends_with_idem(o.body)
510
+ if violator
511
+ acceptor.accept(Issues::IDEM_NOT_ALLOWED_LAST, violator, {:container => o}) unless resource_without_title?(violator)
512
+ end
513
+ end
514
+
515
+ def internal_check_capture_last(o)
516
+ accepted_index = o.parameters.size() -1
517
+ o.parameters.each_with_index do |p, index|
518
+ if p.captures_rest && index != accepted_index
519
+ acceptor.accept(Issues::CAPTURES_REST_NOT_LAST, p, {:param_name => p.name})
520
+ end
521
+ end
522
+ end
523
+
524
+ def internal_check_no_capture(o, container = o)
525
+ o.parameters.each do |p|
526
+ if p.captures_rest
527
+ acceptor.accept(Issues::CAPTURES_REST_NOT_SUPPORTED, p, {:container => container, :param_name => p.name})
528
+ end
529
+ end
530
+ end
531
+
532
+ def internal_check_reserved_type_name(o, name)
533
+ if RESERVED_TYPE_NAMES[name]
534
+ acceptor.accept(Issues::RESERVED_TYPE_NAME, o, {:name => name})
535
+ end
536
+ end
537
+
538
+ def internal_check_future_reserved_word(o, name)
539
+ if FUTURE_RESERVED_WORDS[name]
540
+ acceptor.accept(Issues::FUTURE_RESERVED_WORD, o, {:word => name})
541
+ end
542
+ end
543
+
544
+ NO_NAMESPACE = :no_namespace
545
+ NO_PATH = :no_path
546
+ BAD_MODULE_FILE = :bad_module_file
547
+
548
+ def internal_check_file_namespace(o)
549
+ file = o.locator.file
550
+ return if file.nil? || file == '' #e.g. puppet apply -e '...'
551
+
552
+ file_namespace = namespace_for_file(file)
553
+ return if file_namespace == NO_NAMESPACE
554
+
555
+ # Downcasing here because check is case-insensitive
556
+ if file_namespace == BAD_MODULE_FILE || !o.name.downcase.start_with?(file_namespace)
557
+ acceptor.accept(Issues::ILLEGAL_DEFINITION_LOCATION, o, {:name => o.name, :file => file})
558
+ end
559
+ end
560
+
561
+ def internal_check_top_construct_in_module(prog)
562
+ return unless prog.is_a?(Model::Program) && !prog.body.nil?
563
+
564
+ #Check that this is a module autoloaded file
565
+ file = prog.locator.file
566
+ return if file.nil?
567
+ return if namespace_for_file(file) == NO_NAMESPACE
568
+
569
+ body = prog.body
570
+ return if prog.body.is_a?(Model::Nop) #Ignore empty or comment-only files
571
+
572
+ if(body.is_a?(Model::BlockExpression))
573
+ body.statements.each { |s| acceptor.accept(Issues::ILLEGAL_TOP_CONSTRUCT_LOCATION, s) unless valid_top_construct?(s) }
574
+ else
575
+ acceptor.accept(Issues::ILLEGAL_TOP_CONSTRUCT_LOCATION, body) unless valid_top_construct?(body)
576
+ end
577
+ end
578
+
579
+ def valid_top_construct?(o)
580
+ o.is_a?(Model::Definition) && !o.is_a?(Model::NodeDefinition)
581
+ end
582
+
583
+ # @api private
584
+ class Puppet::Util::FileNamespaceAdapter < Puppet::Pops::Adaptable::Adapter
585
+ attr_accessor :file_to_namespace
586
+
587
+ def self.create_adapter(env)
588
+ adapter = super(env)
589
+ adapter.file_to_namespace = {}
590
+ adapter
591
+ end
592
+ end
593
+
594
+ def namespace_for_file(file)
595
+ env = Puppet.lookup(:current_environment)
596
+ return NO_NAMESPACE if env.nil?
597
+
598
+ adapter = Puppet::Util::FileNamespaceAdapter.adapt(env)
599
+
600
+ file_namespace = adapter.file_to_namespace[file]
601
+ return file_namespace unless file_namespace.nil? # No cache entry, so we do the calculation
602
+
603
+ path = Pathname.new(file)
604
+
605
+ return adapter.file_to_namespace[file] = NO_NAMESPACE if path.extname != ".pp"
606
+
607
+ path = path.expand_path
608
+
609
+ return adapter.file_to_namespace[file] = NO_NAMESPACE if initial_manifest?(path, env.manifest)
610
+
611
+ #All auto-loaded files from modules come from a module search path dir
612
+ relative_path = get_module_relative_path(path, env.full_modulepath)
613
+
614
+ return adapter.file_to_namespace[file] = NO_NAMESPACE if relative_path == NO_PATH
615
+
616
+ #If a file comes from a module, but isn't in the right place, always error
617
+ names = dir_to_names(relative_path)
618
+
619
+ return adapter.file_to_namespace[file] = (names == BAD_MODULE_FILE ? BAD_MODULE_FILE : names.join("::").freeze)
620
+ end
621
+
622
+ def initial_manifest?(path, manifest_setting)
623
+ return false if manifest_setting.nil? || manifest_setting == :no_manifest
624
+
625
+ string_path = path.to_s
626
+
627
+ string_path == manifest_setting || string_path.start_with?(manifest_setting)
628
+ end
629
+
630
+ # Get the path of +file_path+ relative to the first directory in
631
+ # +modulepath_directories+ that is an ancestor of +file_path+. Return NO_PATH
632
+ # if none is found.
633
+ def get_module_relative_path(file_path, modulepath_directories)
634
+ clean_file = file_path.cleanpath.to_s
635
+ parent_path = modulepath_directories.find { |path_dir| is_parent_dir_of(path_dir, clean_file) }
636
+ return NO_PATH if parent_path.nil?
637
+
638
+ file_path.relative_path_from(Pathname.new(parent_path))
639
+ end
640
+ private :get_module_relative_path
641
+
642
+ def is_parent_dir_of(parent_dir, child_dir)
643
+ parent_dir_path = Pathname.new(parent_dir)
644
+ clean_parent = parent_dir_path.cleanpath.to_s + File::SEPARATOR
645
+
646
+ return child_dir.start_with?(clean_parent)
647
+ end
648
+ private :is_parent_dir_of
649
+
650
+ def dir_to_names(relative_path)
651
+ # Downcasing here because check is case-insensitive
652
+ path_components = relative_path.to_s.downcase.split(File::SEPARATOR)
653
+
654
+ # Example definition dir: manifests in this path:
655
+ # <module name>/manifests/<module subdir>/<classfile>.pp
656
+ dir = path_components[1]
657
+
658
+ # How can we get this result?
659
+ # If it is not an initial manifest, it must come from a module,
660
+ # and from the manifests dir there. This may never get used...
661
+ return BAD_MODULE_FILE unless dir == 'manifests' || dir == 'functions' || dir == 'types' || dir == 'plans'
662
+
663
+ names = path_components[2 .. -2] # Directories inside module
664
+ names.unshift(path_components[0]) # Name of the module itself
665
+
666
+ # Do not include name of module init file at top level of module
667
+ # e.g. <module name>/manifests/init.pp
668
+ filename = path_components[-1]
669
+ if !(path_components.length == 3 && filename == 'init.pp')
670
+ names.push(filename[0 .. -4]) # Remove .pp from filename
671
+ end
672
+
673
+ names
674
+ end
675
+
676
+ RESERVED_PARAMETERS = {
677
+ 'name' => true,
678
+ 'title' => true,
679
+ }
680
+
681
+ def internal_check_reserved_params(o)
682
+ o.parameters.each do |p|
683
+ if RESERVED_PARAMETERS[p.name]
684
+ acceptor.accept(Issues::RESERVED_PARAMETER, p, {:container => o, :param_name => p.name})
685
+ end
686
+ end
687
+ end
688
+
689
+ def internal_check_parameter_name_uniqueness(o)
690
+ unique = Set.new
691
+ o.parameters.each do |p|
692
+ acceptor.accept(Issues::DUPLICATE_PARAMETER, p, {:param_name => p.name}) unless unique.add?(p.name)
693
+ end
694
+ end
695
+
696
+ def check_IfExpression(o)
697
+ rvalue(o.test)
698
+ end
699
+
700
+ def check_KeyedEntry(o)
701
+ rvalue(o.key)
702
+ rvalue(o.value)
703
+ # In case there are additional things to forbid than non-rvalues
704
+ # acceptor.accept(Issues::ILLEGAL_EXPRESSION, o.key, :feature => 'hash key', :container => container)
705
+ end
706
+
707
+ def check_LambdaExpression(o)
708
+ internal_check_capture_last(o)
709
+ internal_check_return_type(o)
710
+ end
711
+
712
+ def check_LiteralList(o)
713
+ o.values.each {|v| rvalue(v) }
714
+ end
715
+
716
+ def check_LiteralInteger(o)
717
+ v = o.value
718
+ if v < MIN_INTEGER || v > MAX_INTEGER
719
+ acceptor.accept(Issues::NUMERIC_OVERFLOW, o, {:value => v})
720
+ end
721
+ end
722
+
723
+ def check_LiteralHash(o)
724
+ # the keys of a literal hash may be non-literal expressions. They cannot be checked.
725
+ unique = Set.new
726
+ o.entries.each do |entry|
727
+ catch(:not_literal) do
728
+ literal_key = literal(entry.key)
729
+ acceptor.accept(Issues::DUPLICATE_KEY, entry, {:key => literal_key}) if unique.add?(literal_key).nil?
730
+ end
731
+ end
732
+ end
733
+
734
+ def check_NodeDefinition(o)
735
+ # Check that hostnames are valid hostnames (or regular expressions)
736
+ hostname(o.host_matches, o)
737
+ top(o)
738
+ violator = ends_with_idem(o.body)
739
+ if violator
740
+ acceptor.accept(Issues::IDEM_NOT_ALLOWED_LAST, violator, {:container => o}) unless resource_without_title?(violator)
741
+ end
742
+ unless o.parent.nil?
743
+ acceptor.accept(Issues::ILLEGAL_NODE_INHERITANCE, o.parent)
744
+ end
745
+ end
746
+
747
+ # No checking takes place - all expressions using a QualifiedName need to check. This because the
748
+ # rules are slightly different depending on the container (A variable allows a numeric start, but not
749
+ # other names). This means that (if the lexer/parser so chooses) a QualifiedName
750
+ # can be anything when it represents a Bare Word and evaluates to a String.
751
+ #
752
+ def check_QualifiedName(o)
753
+ end
754
+
755
+ # Checks that the value is a valid UpperCaseWord (a CLASSREF), and optionally if it contains a hypen.
756
+ # DOH: QualifiedReferences are created with LOWER CASE NAMES at parse time
757
+ def check_QualifiedReference(o)
758
+ # Is this a valid qualified name?
759
+ if o.cased_value !~ Patterns::CLASSREF_EXT
760
+ acceptor.accept(Issues::ILLEGAL_CLASSREF, o, {:name=>o.cased_value})
761
+ end
762
+ end
763
+
764
+ def check_QueryExpression(o)
765
+ query(o.expr) if o.expr # is optional
766
+ end
767
+
768
+ def relation_Object(o)
769
+ rvalue(o)
770
+ end
771
+
772
+ def relation_CollectExpression(o); end
773
+
774
+ def relation_RelationshipExpression(o); end
775
+
776
+ def check_Parameter(o)
777
+ if o.name =~ /^(?:0x)?[0-9]+$/
778
+ acceptor.accept(Issues::ILLEGAL_NUMERIC_PARAMETER, o, :name => o.name)
779
+ end
780
+
781
+ unless o.name =~ Patterns::PARAM_NAME
782
+ acceptor.accept(Issues::ILLEGAL_PARAM_NAME, o, :name => o.name)
783
+ end
784
+ return unless o.value
785
+
786
+ internal_check_illegal_assignment(o.value)
787
+ end
788
+
789
+ def internal_check_illegal_assignment(o)
790
+ if o.is_a?(Model::AssignmentExpression)
791
+ acceptor.accept(Issues::ILLEGAL_ASSIGNMENT_CONTEXT, o)
792
+ else
793
+ # recursively check all contents unless it's a lambda expression. A lambda may contain
794
+ # local assignments
795
+ o._pcore_contents {|model| internal_check_illegal_assignment(model) } unless o.is_a?(Model::LambdaExpression)
796
+ end
797
+ end
798
+
799
+ #relationship_side: resource
800
+ # | resourceref
801
+ # | collection
802
+ # | variable
803
+ # | quotedtext
804
+ # | selector
805
+ # | casestatement
806
+ # | hasharrayaccesses
807
+
808
+ def check_RelationshipExpression(o)
809
+ relation(o.left_expr)
810
+ relation(o.right_expr)
811
+ end
812
+
813
+ def check_ResourceExpression(o)
814
+ # The expression for type name cannot be statically checked - this is instead done at runtime
815
+ # to enable better error message of the result of the expression rather than the static instruction.
816
+ # (This can be revised as there are static constructs that are illegal, but require updating many
817
+ # tests that expect the detailed reporting).
818
+ type_name_expr = o.type_name
819
+ if o.form && o.form != 'regular' && type_name_expr.is_a?(Model::QualifiedName) && type_name_expr.value == 'class'
820
+ acceptor.accept(Issues::CLASS_NOT_VIRTUALIZABLE, o)
821
+ end
822
+ end
823
+
824
+ def check_ResourceBody(o)
825
+ seenUnfolding = false
826
+ o.operations.each do |ao|
827
+ if ao.is_a?(Model::AttributesOperation)
828
+ if seenUnfolding
829
+ acceptor.accept(Issues::MULTIPLE_ATTRIBUTES_UNFOLD, ao)
830
+ else
831
+ seenUnfolding = true
832
+ end
833
+ end
834
+ end
835
+ end
836
+
837
+ def check_ResourceDefaultsExpression(o)
838
+ if o.form != 'regular'
839
+ acceptor.accept(Issues::NOT_VIRTUALIZEABLE, o)
840
+ end
841
+ end
842
+
843
+ def check_ResourceOverrideExpression(o)
844
+ if o.form != 'regular'
845
+ acceptor.accept(Issues::NOT_VIRTUALIZEABLE, o)
846
+ end
847
+ end
848
+
849
+ def check_ReservedWord(o)
850
+ if o.future
851
+ acceptor.accept(Issues::FUTURE_RESERVED_WORD, o, :word => o.word)
852
+ else
853
+ acceptor.accept(Issues::RESERVED_WORD, o, :word => o.word)
854
+ end
855
+ end
856
+
857
+ def check_SelectorExpression(o)
858
+ rvalue(o.left_expr)
859
+ # There can only be one LiteralDefault case option value
860
+ defaults = o.selectors.select {|v| v.matching_expr.is_a?(Model::LiteralDefault) }
861
+ unless defaults.size <= 1
862
+ # Flag the second default as 'unreachable'
863
+ acceptor.accept(Issues::DUPLICATE_DEFAULT, defaults[1].matching_expr, :container => o)
864
+ end
865
+ end
866
+
867
+ def check_SelectorEntry(o)
868
+ rvalue(o.matching_expr)
869
+ end
870
+
871
+ def check_UnaryExpression(o)
872
+ rvalue(o.expr)
873
+ end
874
+
875
+ def check_UnlessExpression(o)
876
+ rvalue(o.test)
877
+ # TODO: Unless may not have an else part that is an IfExpression (grammar denies this though)
878
+ end
879
+
880
+ # Checks that variable is either strictly 0, or a non 0 starting decimal number, or a valid VAR_NAME
881
+ def check_VariableExpression(o)
882
+ # The expression must be a qualified name or an integer
883
+ name_expr = o.expr
884
+ return if name_expr.is_a?(Model::LiteralInteger)
885
+ if !name_expr.is_a?(Model::QualifiedName)
886
+ acceptor.accept(Issues::ILLEGAL_EXPRESSION, o, :feature => 'name', :container => o)
887
+ else
888
+ # name must be either a decimal string value, or a valid NAME
889
+ name = o.expr.value
890
+ if name[0,1] =~ /[0-9]/
891
+ unless name =~ Patterns::NUMERIC_VAR_NAME
892
+ acceptor.accept(Issues::ILLEGAL_NUMERIC_VAR_NAME, o, :name => name)
893
+ end
894
+ else
895
+ unless name =~ Patterns::VAR_NAME
896
+ acceptor.accept(Issues::ILLEGAL_VAR_NAME, o, :name => name)
897
+ end
898
+ end
899
+ end
900
+ end
901
+
902
+ #--- HOSTNAME CHECKS
903
+
904
+ # Transforms Array of host matching expressions into a (Ruby) array of AST::HostName
905
+ def hostname_Array(o, semantic)
906
+ o.each {|x| hostname(x, semantic) }
907
+ end
908
+
909
+ def hostname_String(o, semantic)
910
+ # The 3.x checker only checks for illegal characters - if matching /[^-\w.]/ the name is invalid,
911
+ # but this allows pathological names like "a..b......c", "----"
912
+ # TODO: Investigate if more illegal hostnames should be flagged.
913
+ #
914
+ if o =~ Patterns::ILLEGAL_HOSTNAME_CHARS
915
+ acceptor.accept(Issues::ILLEGAL_HOSTNAME_CHARS, semantic, :hostname => o)
916
+ end
917
+ end
918
+
919
+ def hostname_LiteralValue(o, semantic)
920
+ hostname_String(o.value.to_s, o)
921
+ end
922
+
923
+ def hostname_ConcatenatedString(o, semantic)
924
+ # Puppet 3.1. only accepts a concatenated string without interpolated expressions
925
+ the_expr = o.segments.index {|s| s.is_a?(Model::TextExpression) }
926
+ if the_expr
927
+ acceptor.accept(Issues::ILLEGAL_HOSTNAME_INTERPOLATION, o.segments[the_expr].expr)
928
+ elsif o.segments.size() != 1
929
+ # corner case, bad model, concatenation of several plain strings
930
+ acceptor.accept(Issues::ILLEGAL_HOSTNAME_INTERPOLATION, o)
931
+ else
932
+ # corner case, may be ok, but lexer may have replaced with plain string, this is
933
+ # here if it does not
934
+ hostname_String(o.segments[0], o.segments[0])
935
+ end
936
+ end
937
+
938
+ def hostname_QualifiedName(o, semantic)
939
+ hostname_String(o.value.to_s, o)
940
+ end
941
+
942
+ def hostname_QualifiedReference(o, semantic)
943
+ hostname_String(o.value.to_s, o)
944
+ end
945
+
946
+ def hostname_LiteralNumber(o, semantic)
947
+ # always ok
948
+ end
949
+
950
+ def hostname_LiteralDefault(o, semantic)
951
+ # always ok
952
+ end
953
+
954
+ def hostname_LiteralRegularExpression(o, semantic)
955
+ # always ok
956
+ end
957
+
958
+ def hostname_Object(o, semantic)
959
+ acceptor.accept(Issues::ILLEGAL_EXPRESSION, o, {:feature => 'hostname', :container => semantic})
960
+ end
961
+
962
+ #---QUERY CHECKS
963
+
964
+ # Anything not explicitly allowed is flagged as error.
965
+ def query_Object(o)
966
+ acceptor.accept(Issues::ILLEGAL_QUERY_EXPRESSION, o)
967
+ end
968
+
969
+ # Puppet AST only allows == and !=
970
+ #
971
+ def query_ComparisonExpression(o)
972
+ acceptor.accept(Issues::ILLEGAL_QUERY_EXPRESSION, o) unless ['==', '!='].include? o.operator
973
+ end
974
+
975
+ # Allows AND, OR, and checks if left/right are allowed in query.
976
+ def query_BooleanExpression(o)
977
+ query o.left_expr
978
+ query o.right_expr
979
+ end
980
+
981
+ def query_ParenthesizedExpression(o)
982
+ query(o.expr)
983
+ end
984
+
985
+ def query_VariableExpression(o); end
986
+
987
+ def query_QualifiedName(o); end
988
+
989
+ def query_LiteralNumber(o); end
990
+
991
+ def query_LiteralString(o); end
992
+
993
+ def query_LiteralBoolean(o); end
994
+
995
+ #---RVALUE CHECKS
996
+
997
+ # By default, all expressions are reported as being rvalues
998
+ # Implement specific rvalue checks for those that are not.
999
+ #
1000
+ def rvalue_Expression(o); end
1001
+
1002
+ def rvalue_CollectExpression(o)
1003
+ acceptor.accept(Issues::NOT_RVALUE, o)
1004
+ end
1005
+
1006
+ def rvalue_Definition(o)
1007
+ acceptor.accept(Issues::NOT_RVALUE, o)
1008
+ end
1009
+
1010
+ def rvalue_NodeDefinition(o)
1011
+ acceptor.accept(Issues::NOT_RVALUE, o)
1012
+ end
1013
+
1014
+ def rvalue_UnaryExpression(o)
1015
+ rvalue o.expr
1016
+ end
1017
+
1018
+ #--IDEM CHECK
1019
+ def idem_Object(o)
1020
+ false
1021
+ end
1022
+
1023
+ def idem_Nop(o)
1024
+ true
1025
+ end
1026
+
1027
+ def idem_NilClass(o)
1028
+ true
1029
+ end
1030
+
1031
+ def idem_Literal(o)
1032
+ true
1033
+ end
1034
+
1035
+ def idem_LiteralList(o)
1036
+ true
1037
+ end
1038
+
1039
+ def idem_LiteralHash(o)
1040
+ true
1041
+ end
1042
+
1043
+ def idem_Factory(o)
1044
+ idem(o.model)
1045
+ end
1046
+
1047
+ def idem_AccessExpression(o)
1048
+ true
1049
+ end
1050
+
1051
+ def idem_BinaryExpression(o)
1052
+ true
1053
+ end
1054
+
1055
+ def idem_MatchExpression(o)
1056
+ false # can have side effect of setting $n match variables
1057
+ end
1058
+
1059
+ def idem_RelationshipExpression(o)
1060
+ # Always side effect
1061
+ false
1062
+ end
1063
+
1064
+ def idem_AssignmentExpression(o)
1065
+ # Always side effect
1066
+ false
1067
+ end
1068
+
1069
+ # Handles UnaryMinusExpression, NotExpression, VariableExpression
1070
+ def idem_UnaryExpression(o)
1071
+ true
1072
+ end
1073
+
1074
+ # Allow (no-effect parentheses) to be used around a productive expression
1075
+ def idem_ParenthesizedExpression(o)
1076
+ idem(o.expr)
1077
+ end
1078
+
1079
+ def idem_RenderExpression(o)
1080
+ false
1081
+ end
1082
+
1083
+ def idem_RenderStringExpression(o)
1084
+ false
1085
+ end
1086
+
1087
+ def idem_BlockExpression(o)
1088
+ # productive if there is at least one productive expression
1089
+ ! o.statements.any? {|expr| !idem(expr) }
1090
+ end
1091
+
1092
+ # Returns true even though there may be interpolated expressions that have side effect.
1093
+ # Report as idem anyway, as it is very bad design to evaluate an interpolated string for its
1094
+ # side effect only.
1095
+ def idem_ConcatenatedString(o)
1096
+ true
1097
+ end
1098
+
1099
+ # Heredoc is just a string, but may contain interpolated string (which may have side effects).
1100
+ # This is still bad design and should be reported as idem.
1101
+ def idem_HeredocExpression(o)
1102
+ true
1103
+ end
1104
+
1105
+ # May technically have side effects inside the Selector, but this is bad design - treat as idem
1106
+ def idem_SelectorExpression(o)
1107
+ true
1108
+ end
1109
+
1110
+ # An apply expression exists purely for the side effect of applying a
1111
+ # catalog somewhere, so it always has side effects
1112
+ def idem_ApplyExpression(o)
1113
+ false
1114
+ end
1115
+
1116
+ def idem_IfExpression(o)
1117
+ [o.test, o.then_expr, o.else_expr].all? {|e| idem(e) }
1118
+ end
1119
+
1120
+ # Case expression is idem, if test, and all options are idem
1121
+ def idem_CaseExpression(o)
1122
+ return false if !idem(o.test)
1123
+ ! o.options.any? {|opt| !idem(opt) }
1124
+ end
1125
+
1126
+ # An option is idem if values and the then_expression are idem
1127
+ def idem_CaseOption(o)
1128
+ return false if o.values.any? { |value| !idem(value) }
1129
+ idem(o.then_expr)
1130
+ end
1131
+
1132
+ #--- NON POLYMORPH, NON CHECKING CODE
1133
+
1134
+ # Produces string part of something named, or nil if not a QualifiedName or QualifiedReference
1135
+ #
1136
+ def varname_to_s(o)
1137
+ case o
1138
+ when Model::QualifiedName
1139
+ o.value
1140
+ when Model::QualifiedReference
1141
+ o.value
1142
+ else
1143
+ nil
1144
+ end
1145
+ end
1146
+ end
1147
+ end
1148
+ end