openvox 8.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1104) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +19 -0
  3. data/CODEOWNERS +11 -0
  4. data/CODE_OF_CONDUCT.md +70 -0
  5. data/Gemfile +87 -0
  6. data/Guardfile.example +76 -0
  7. data/LICENSE +202 -0
  8. data/README.md +63 -0
  9. data/Rakefile +170 -0
  10. data/bin/puppet +10 -0
  11. data/conf/environment.conf +18 -0
  12. data/conf/fileserver.conf +32 -0
  13. data/conf/hiera.yaml +11 -0
  14. data/conf/puppet.conf +6 -0
  15. data/examples/enc/regexp_nodes/classes/databases +2 -0
  16. data/examples/enc/regexp_nodes/classes/webservers +2 -0
  17. data/examples/enc/regexp_nodes/environment/development +2 -0
  18. data/examples/enc/regexp_nodes/parameters/service/prod +1 -0
  19. data/examples/enc/regexp_nodes/parameters/service/qa +3 -0
  20. data/examples/enc/regexp_nodes/parameters/service/sandbox +1 -0
  21. data/examples/enc/regexp_nodes/regexp_nodes.rb +270 -0
  22. data/examples/hiera/README.md +102 -0
  23. data/examples/hiera/data/common.yaml +12 -0
  24. data/examples/hiera/data/dc1.yaml +6 -0
  25. data/examples/hiera/hiera.yaml +15 -0
  26. data/examples/hiera/modules/ntp/data/common.yaml +4 -0
  27. data/examples/hiera/modules/ntp/hiera.yaml +9 -0
  28. data/examples/hiera/modules/ntp/manifests/config.pp +18 -0
  29. data/examples/hiera/modules/ntp/templates/ntp.conf.epp +3 -0
  30. data/examples/hiera/modules/users/manifests/common.pp +9 -0
  31. data/examples/hiera/modules/users/manifests/dc1.pp +9 -0
  32. data/examples/hiera/site.pp +3 -0
  33. data/examples/nagios/check_puppet.rb +123 -0
  34. data/ext/README.md +13 -0
  35. data/ext/build_defaults.yaml +18 -0
  36. data/ext/debian/puppet.default +4 -0
  37. data/ext/debian/puppet.init +113 -0
  38. data/ext/hiera/hiera.yaml +15 -0
  39. data/ext/osx/puppet.plist +32 -0
  40. data/ext/project_data.yaml +20 -0
  41. data/ext/redhat/client.init +169 -0
  42. data/ext/redhat/client.sysconfig +2 -0
  43. data/ext/solaris/smf/puppet +44 -0
  44. data/ext/solaris/smf/puppet.xml +46 -0
  45. data/ext/suse/client.init +141 -0
  46. data/ext/systemd/puppet.service +26 -0
  47. data/ext/windows/puppet_interactive.bat +6 -0
  48. data/ext/windows/puppet_shell.bat +9 -0
  49. data/ext/windows/run_puppet_interactive.bat +9 -0
  50. data/ext/windows/service/daemon.bat +6 -0
  51. data/ext/windows/service/daemon.rb +219 -0
  52. data/install.rb +428 -0
  53. data/lib/hiera/puppet_function.rb +86 -0
  54. data/lib/hiera/scope.rb +92 -0
  55. data/lib/hiera_puppet.rb +78 -0
  56. data/lib/puppet/agent/disabler.rb +55 -0
  57. data/lib/puppet/agent/locker.rb +46 -0
  58. data/lib/puppet/agent.rb +178 -0
  59. data/lib/puppet/application/agent.rb +527 -0
  60. data/lib/puppet/application/apply.rb +435 -0
  61. data/lib/puppet/application/catalog.rb +6 -0
  62. data/lib/puppet/application/config.rb +7 -0
  63. data/lib/puppet/application/describe.rb +255 -0
  64. data/lib/puppet/application/device.rb +440 -0
  65. data/lib/puppet/application/doc.rb +232 -0
  66. data/lib/puppet/application/epp.rb +7 -0
  67. data/lib/puppet/application/face_base.rb +277 -0
  68. data/lib/puppet/application/facts.rb +11 -0
  69. data/lib/puppet/application/filebucket.rb +324 -0
  70. data/lib/puppet/application/generate.rb +7 -0
  71. data/lib/puppet/application/help.rb +7 -0
  72. data/lib/puppet/application/indirection_base.rb +6 -0
  73. data/lib/puppet/application/lookup.rb +433 -0
  74. data/lib/puppet/application/module.rb +6 -0
  75. data/lib/puppet/application/node.rb +6 -0
  76. data/lib/puppet/application/parser.rb +7 -0
  77. data/lib/puppet/application/plugin.rb +6 -0
  78. data/lib/puppet/application/report.rb +6 -0
  79. data/lib/puppet/application/resource.rb +264 -0
  80. data/lib/puppet/application/script.rb +266 -0
  81. data/lib/puppet/application/ssl.rb +331 -0
  82. data/lib/puppet/application.rb +596 -0
  83. data/lib/puppet/application_support.rb +69 -0
  84. data/lib/puppet/coercion.rb +42 -0
  85. data/lib/puppet/compilable_resource_type.rb +17 -0
  86. data/lib/puppet/concurrent/lock.rb +15 -0
  87. data/lib/puppet/concurrent/synchronized.rb +15 -0
  88. data/lib/puppet/concurrent/thread_local_singleton.rb +18 -0
  89. data/lib/puppet/concurrent.rb +4 -0
  90. data/lib/puppet/configurer/downloader.rb +91 -0
  91. data/lib/puppet/configurer/fact_handler.rb +51 -0
  92. data/lib/puppet/configurer/plugin_handler.rb +61 -0
  93. data/lib/puppet/configurer.rb +759 -0
  94. data/lib/puppet/confine/any.rb +28 -0
  95. data/lib/puppet/confine/boolean.rb +47 -0
  96. data/lib/puppet/confine/exists.rb +21 -0
  97. data/lib/puppet/confine/false.rb +27 -0
  98. data/lib/puppet/confine/feature.rb +18 -0
  99. data/lib/puppet/confine/true.rb +28 -0
  100. data/lib/puppet/confine/variable.rb +61 -0
  101. data/lib/puppet/confine.rb +86 -0
  102. data/lib/puppet/confine_collection.rb +54 -0
  103. data/lib/puppet/confiner.rb +48 -0
  104. data/lib/puppet/context/trusted_information.rb +122 -0
  105. data/lib/puppet/context.rb +190 -0
  106. data/lib/puppet/daemon.rb +198 -0
  107. data/lib/puppet/data_binding.rb +16 -0
  108. data/lib/puppet/datatypes/error.rb +23 -0
  109. data/lib/puppet/datatypes/impl/error.rb +42 -0
  110. data/lib/puppet/datatypes.rb +218 -0
  111. data/lib/puppet/defaults.rb +2316 -0
  112. data/lib/puppet/environments.rb +599 -0
  113. data/lib/puppet/error.rb +142 -0
  114. data/lib/puppet/etc.rb +185 -0
  115. data/lib/puppet/external/dot.rb +315 -0
  116. data/lib/puppet/face/catalog/select.rb +51 -0
  117. data/lib/puppet/face/catalog.rb +167 -0
  118. data/lib/puppet/face/config.rb +266 -0
  119. data/lib/puppet/face/epp.rb +565 -0
  120. data/lib/puppet/face/facts.rb +176 -0
  121. data/lib/puppet/face/generate.rb +69 -0
  122. data/lib/puppet/face/help/action.erb +89 -0
  123. data/lib/puppet/face/help/face.erb +114 -0
  124. data/lib/puppet/face/help/global.erb +16 -0
  125. data/lib/puppet/face/help/man.erb +152 -0
  126. data/lib/puppet/face/help.rb +260 -0
  127. data/lib/puppet/face/module/changes.rb +44 -0
  128. data/lib/puppet/face/module/install.rb +149 -0
  129. data/lib/puppet/face/module/list.rb +271 -0
  130. data/lib/puppet/face/module/uninstall.rb +91 -0
  131. data/lib/puppet/face/module/upgrade.rb +89 -0
  132. data/lib/puppet/face/module.rb +21 -0
  133. data/lib/puppet/face/node/clean.rb +109 -0
  134. data/lib/puppet/face/node.rb +45 -0
  135. data/lib/puppet/face/parser.rb +226 -0
  136. data/lib/puppet/face/plugin.rb +62 -0
  137. data/lib/puppet/face/report.rb +54 -0
  138. data/lib/puppet/face/resource.rb +55 -0
  139. data/lib/puppet/face.rb +14 -0
  140. data/lib/puppet/facter_impl.rb +96 -0
  141. data/lib/puppet/feature/base.rb +76 -0
  142. data/lib/puppet/feature/bolt.rb +5 -0
  143. data/lib/puppet/feature/cfpropertylist.rb +5 -0
  144. data/lib/puppet/feature/eventlog.rb +7 -0
  145. data/lib/puppet/feature/hiera_eyaml.rb +5 -0
  146. data/lib/puppet/feature/hocon.rb +5 -0
  147. data/lib/puppet/feature/libuser.rb +10 -0
  148. data/lib/puppet/feature/msgpack.rb +5 -0
  149. data/lib/puppet/feature/pe_license.rb +6 -0
  150. data/lib/puppet/feature/pson.rb +6 -0
  151. data/lib/puppet/feature/selinux.rb +5 -0
  152. data/lib/puppet/feature/ssh.rb +5 -0
  153. data/lib/puppet/feature/telnet.rb +5 -0
  154. data/lib/puppet/feature/zlib.rb +7 -0
  155. data/lib/puppet/ffi/posix/constants.rb +16 -0
  156. data/lib/puppet/ffi/posix/functions.rb +25 -0
  157. data/lib/puppet/ffi/posix.rb +12 -0
  158. data/lib/puppet/ffi/windows/api_types.rb +313 -0
  159. data/lib/puppet/ffi/windows/constants.rb +406 -0
  160. data/lib/puppet/ffi/windows/functions.rb +629 -0
  161. data/lib/puppet/ffi/windows/structs.rb +339 -0
  162. data/lib/puppet/ffi/windows.rb +14 -0
  163. data/lib/puppet/file_bucket/dipper.rb +183 -0
  164. data/lib/puppet/file_bucket/file.rb +131 -0
  165. data/lib/puppet/file_bucket.rb +6 -0
  166. data/lib/puppet/file_serving/base.rb +94 -0
  167. data/lib/puppet/file_serving/configuration/parser.rb +116 -0
  168. data/lib/puppet/file_serving/configuration.rb +116 -0
  169. data/lib/puppet/file_serving/content.rb +45 -0
  170. data/lib/puppet/file_serving/fileset.rb +190 -0
  171. data/lib/puppet/file_serving/http_metadata.rb +61 -0
  172. data/lib/puppet/file_serving/metadata.rb +174 -0
  173. data/lib/puppet/file_serving/mount/file.rb +126 -0
  174. data/lib/puppet/file_serving/mount/locales.rb +35 -0
  175. data/lib/puppet/file_serving/mount/modules.rb +29 -0
  176. data/lib/puppet/file_serving/mount/pluginfacts.rb +35 -0
  177. data/lib/puppet/file_serving/mount/plugins.rb +35 -0
  178. data/lib/puppet/file_serving/mount/scripts.rb +27 -0
  179. data/lib/puppet/file_serving/mount/tasks.rb +26 -0
  180. data/lib/puppet/file_serving/mount.rb +41 -0
  181. data/lib/puppet/file_serving/terminus_helper.rb +33 -0
  182. data/lib/puppet/file_serving/terminus_selector.rb +33 -0
  183. data/lib/puppet/file_serving.rb +5 -0
  184. data/lib/puppet/file_system/file_impl.rb +189 -0
  185. data/lib/puppet/file_system/jruby.rb +25 -0
  186. data/lib/puppet/file_system/memory_file.rb +82 -0
  187. data/lib/puppet/file_system/memory_impl.rb +103 -0
  188. data/lib/puppet/file_system/path_pattern.rb +95 -0
  189. data/lib/puppet/file_system/posix.rb +52 -0
  190. data/lib/puppet/file_system/uniquefile.rb +190 -0
  191. data/lib/puppet/file_system/windows.rb +224 -0
  192. data/lib/puppet/file_system.rb +421 -0
  193. data/lib/puppet/forge/cache.rb +61 -0
  194. data/lib/puppet/forge/errors.rb +113 -0
  195. data/lib/puppet/forge/repository.rb +98 -0
  196. data/lib/puppet/forge.rb +257 -0
  197. data/lib/puppet/functions/abs.rb +64 -0
  198. data/lib/puppet/functions/alert.rb +16 -0
  199. data/lib/puppet/functions/all.rb +106 -0
  200. data/lib/puppet/functions/annotate.rb +110 -0
  201. data/lib/puppet/functions/any.rb +111 -0
  202. data/lib/puppet/functions/assert_type.rb +96 -0
  203. data/lib/puppet/functions/binary_file.rb +35 -0
  204. data/lib/puppet/functions/break.rb +49 -0
  205. data/lib/puppet/functions/call.rb +81 -0
  206. data/lib/puppet/functions/camelcase.rb +63 -0
  207. data/lib/puppet/functions/capitalize.rb +62 -0
  208. data/lib/puppet/functions/ceiling.rb +38 -0
  209. data/lib/puppet/functions/chomp.rb +58 -0
  210. data/lib/puppet/functions/chop.rb +68 -0
  211. data/lib/puppet/functions/compare.rb +127 -0
  212. data/lib/puppet/functions/contain.rb +58 -0
  213. data/lib/puppet/functions/convert_to.rb +36 -0
  214. data/lib/puppet/functions/crit.rb +16 -0
  215. data/lib/puppet/functions/debug.rb +16 -0
  216. data/lib/puppet/functions/defined.rb +163 -0
  217. data/lib/puppet/functions/dig.rb +70 -0
  218. data/lib/puppet/functions/downcase.rb +91 -0
  219. data/lib/puppet/functions/each.rb +169 -0
  220. data/lib/puppet/functions/emerg.rb +16 -0
  221. data/lib/puppet/functions/empty.rb +87 -0
  222. data/lib/puppet/functions/epp.rb +50 -0
  223. data/lib/puppet/functions/err.rb +16 -0
  224. data/lib/puppet/functions/eyaml_lookup_key.rb +103 -0
  225. data/lib/puppet/functions/filter.rb +138 -0
  226. data/lib/puppet/functions/find_file.rb +50 -0
  227. data/lib/puppet/functions/find_template.rb +65 -0
  228. data/lib/puppet/functions/flatten.rb +66 -0
  229. data/lib/puppet/functions/floor.rb +38 -0
  230. data/lib/puppet/functions/get.rb +152 -0
  231. data/lib/puppet/functions/getvar.rb +89 -0
  232. data/lib/puppet/functions/group_by.rb +62 -0
  233. data/lib/puppet/functions/hiera.rb +91 -0
  234. data/lib/puppet/functions/hiera_array.rb +83 -0
  235. data/lib/puppet/functions/hiera_hash.rb +94 -0
  236. data/lib/puppet/functions/hiera_include.rb +107 -0
  237. data/lib/puppet/functions/hocon_data.rb +41 -0
  238. data/lib/puppet/functions/import.rb +9 -0
  239. data/lib/puppet/functions/include.rb +56 -0
  240. data/lib/puppet/functions/index.rb +168 -0
  241. data/lib/puppet/functions/info.rb +16 -0
  242. data/lib/puppet/functions/inline_epp.rb +61 -0
  243. data/lib/puppet/functions/join.rb +58 -0
  244. data/lib/puppet/functions/json_data.rb +33 -0
  245. data/lib/puppet/functions/keys.rb +27 -0
  246. data/lib/puppet/functions/length.rb +45 -0
  247. data/lib/puppet/functions/lest.rb +57 -0
  248. data/lib/puppet/functions/lookup.rb +224 -0
  249. data/lib/puppet/functions/lstrip.rb +59 -0
  250. data/lib/puppet/functions/map.rb +137 -0
  251. data/lib/puppet/functions/match.rb +133 -0
  252. data/lib/puppet/functions/max.rb +250 -0
  253. data/lib/puppet/functions/min.rb +249 -0
  254. data/lib/puppet/functions/module_directory.rb +43 -0
  255. data/lib/puppet/functions/new.rb +1013 -0
  256. data/lib/puppet/functions/next.rb +35 -0
  257. data/lib/puppet/functions/notice.rb +16 -0
  258. data/lib/puppet/functions/partition.rb +62 -0
  259. data/lib/puppet/functions/reduce.rb +159 -0
  260. data/lib/puppet/functions/regsubst.rb +100 -0
  261. data/lib/puppet/functions/require.rb +81 -0
  262. data/lib/puppet/functions/return.rb +17 -0
  263. data/lib/puppet/functions/reverse_each.rb +96 -0
  264. data/lib/puppet/functions/round.rb +26 -0
  265. data/lib/puppet/functions/rstrip.rb +59 -0
  266. data/lib/puppet/functions/scanf.rb +46 -0
  267. data/lib/puppet/functions/size.rb +15 -0
  268. data/lib/puppet/functions/slice.rb +127 -0
  269. data/lib/puppet/functions/sort.rb +76 -0
  270. data/lib/puppet/functions/split.rb +78 -0
  271. data/lib/puppet/functions/step.rb +100 -0
  272. data/lib/puppet/functions/strftime.rb +214 -0
  273. data/lib/puppet/functions/strip.rb +59 -0
  274. data/lib/puppet/functions/then.rb +80 -0
  275. data/lib/puppet/functions/tree_each.rb +198 -0
  276. data/lib/puppet/functions/type.rb +74 -0
  277. data/lib/puppet/functions/unique.rb +135 -0
  278. data/lib/puppet/functions/unwrap.rb +61 -0
  279. data/lib/puppet/functions/upcase.rb +91 -0
  280. data/lib/puppet/functions/values.rb +27 -0
  281. data/lib/puppet/functions/versioncmp.rb +41 -0
  282. data/lib/puppet/functions/warning.rb +16 -0
  283. data/lib/puppet/functions/with.rb +34 -0
  284. data/lib/puppet/functions/yaml_data.rb +45 -0
  285. data/lib/puppet/functions.rb +858 -0
  286. data/lib/puppet/generate/models/type/property.rb +73 -0
  287. data/lib/puppet/generate/models/type/type.rb +68 -0
  288. data/lib/puppet/generate/templates/type/pcore.erb +42 -0
  289. data/lib/puppet/generate/type.rb +255 -0
  290. data/lib/puppet/gettext/config.rb +282 -0
  291. data/lib/puppet/gettext/module_translations.rb +43 -0
  292. data/lib/puppet/gettext/stubs.rb +13 -0
  293. data/lib/puppet/graph/key.rb +28 -0
  294. data/lib/puppet/graph/prioritizer.rb +31 -0
  295. data/lib/puppet/graph/rb_tree_map.rb +407 -0
  296. data/lib/puppet/graph/relationship_graph.rb +286 -0
  297. data/lib/puppet/graph/sequential_prioritizer.rb +33 -0
  298. data/lib/puppet/graph/simple_graph.rb +552 -0
  299. data/lib/puppet/graph.rb +11 -0
  300. data/lib/puppet/http/client.rb +529 -0
  301. data/lib/puppet/http/dns.rb +159 -0
  302. data/lib/puppet/http/errors.rb +50 -0
  303. data/lib/puppet/http/external_client.rb +89 -0
  304. data/lib/puppet/http/factory.rb +53 -0
  305. data/lib/puppet/http/pool.rb +174 -0
  306. data/lib/puppet/http/pool_entry.rb +19 -0
  307. data/lib/puppet/http/proxy.rb +139 -0
  308. data/lib/puppet/http/redirector.rb +87 -0
  309. data/lib/puppet/http/resolver/server_list.rb +88 -0
  310. data/lib/puppet/http/resolver/settings.rb +24 -0
  311. data/lib/puppet/http/resolver/srv.rb +42 -0
  312. data/lib/puppet/http/resolver.rb +50 -0
  313. data/lib/puppet/http/response.rb +104 -0
  314. data/lib/puppet/http/response_converter.rb +25 -0
  315. data/lib/puppet/http/response_net_http.rb +43 -0
  316. data/lib/puppet/http/retry_after_handler.rb +78 -0
  317. data/lib/puppet/http/service/ca.rb +133 -0
  318. data/lib/puppet/http/service/compiler.rb +356 -0
  319. data/lib/puppet/http/service/file_server.rb +200 -0
  320. data/lib/puppet/http/service/puppetserver.rb +54 -0
  321. data/lib/puppet/http/service/report.rb +62 -0
  322. data/lib/puppet/http/service.rb +177 -0
  323. data/lib/puppet/http/session.rb +124 -0
  324. data/lib/puppet/http/site.rb +44 -0
  325. data/lib/puppet/http.rb +48 -0
  326. data/lib/puppet/indirector/catalog/compiler.rb +432 -0
  327. data/lib/puppet/indirector/catalog/json.rb +42 -0
  328. data/lib/puppet/indirector/catalog/msgpack.rb +8 -0
  329. data/lib/puppet/indirector/catalog/rest.rb +51 -0
  330. data/lib/puppet/indirector/catalog/store_configs.rb +8 -0
  331. data/lib/puppet/indirector/catalog/yaml.rb +8 -0
  332. data/lib/puppet/indirector/code.rb +8 -0
  333. data/lib/puppet/indirector/data_binding/hiera.rb +8 -0
  334. data/lib/puppet/indirector/data_binding/none.rb +10 -0
  335. data/lib/puppet/indirector/direct_file_server.rb +20 -0
  336. data/lib/puppet/indirector/envelope.rb +13 -0
  337. data/lib/puppet/indirector/errors.rb +7 -0
  338. data/lib/puppet/indirector/exec.rb +40 -0
  339. data/lib/puppet/indirector/face.rb +142 -0
  340. data/lib/puppet/indirector/fact_search.rb +62 -0
  341. data/lib/puppet/indirector/facts/facter.rb +120 -0
  342. data/lib/puppet/indirector/facts/json.rb +29 -0
  343. data/lib/puppet/indirector/facts/memory.rb +11 -0
  344. data/lib/puppet/indirector/facts/network_device.rb +29 -0
  345. data/lib/puppet/indirector/facts/rest.rb +46 -0
  346. data/lib/puppet/indirector/facts/store_configs.rb +12 -0
  347. data/lib/puppet/indirector/facts/yaml.rb +31 -0
  348. data/lib/puppet/indirector/file_bucket_file/file.rb +268 -0
  349. data/lib/puppet/indirector/file_bucket_file/rest.rb +53 -0
  350. data/lib/puppet/indirector/file_bucket_file/selector.rb +54 -0
  351. data/lib/puppet/indirector/file_content/file.rb +9 -0
  352. data/lib/puppet/indirector/file_content/file_server.rb +9 -0
  353. data/lib/puppet/indirector/file_content/rest.rb +37 -0
  354. data/lib/puppet/indirector/file_content/selector.rb +32 -0
  355. data/lib/puppet/indirector/file_content.rb +7 -0
  356. data/lib/puppet/indirector/file_metadata/file.rb +9 -0
  357. data/lib/puppet/indirector/file_metadata/file_server.rb +9 -0
  358. data/lib/puppet/indirector/file_metadata/http.rb +49 -0
  359. data/lib/puppet/indirector/file_metadata/rest.rb +58 -0
  360. data/lib/puppet/indirector/file_metadata/selector.rb +32 -0
  361. data/lib/puppet/indirector/file_metadata.rb +7 -0
  362. data/lib/puppet/indirector/file_server.rb +57 -0
  363. data/lib/puppet/indirector/generic_http.rb +7 -0
  364. data/lib/puppet/indirector/hiera.rb +101 -0
  365. data/lib/puppet/indirector/indirection.rb +381 -0
  366. data/lib/puppet/indirector/json.rb +82 -0
  367. data/lib/puppet/indirector/memory.rb +37 -0
  368. data/lib/puppet/indirector/msgpack.rb +87 -0
  369. data/lib/puppet/indirector/node/exec.rb +70 -0
  370. data/lib/puppet/indirector/node/json.rb +9 -0
  371. data/lib/puppet/indirector/node/memory.rb +12 -0
  372. data/lib/puppet/indirector/node/msgpack.rb +9 -0
  373. data/lib/puppet/indirector/node/plain.rb +23 -0
  374. data/lib/puppet/indirector/node/rest.rb +31 -0
  375. data/lib/puppet/indirector/node/store_configs.rb +8 -0
  376. data/lib/puppet/indirector/node/yaml.rb +9 -0
  377. data/lib/puppet/indirector/none.rb +10 -0
  378. data/lib/puppet/indirector/plain.rb +11 -0
  379. data/lib/puppet/indirector/report/json.rb +36 -0
  380. data/lib/puppet/indirector/report/msgpack.rb +13 -0
  381. data/lib/puppet/indirector/report/processor.rb +63 -0
  382. data/lib/puppet/indirector/report/rest.rb +31 -0
  383. data/lib/puppet/indirector/report/yaml.rb +36 -0
  384. data/lib/puppet/indirector/request.rb +197 -0
  385. data/lib/puppet/indirector/resource/ral.rb +66 -0
  386. data/lib/puppet/indirector/resource/store_configs.rb +14 -0
  387. data/lib/puppet/indirector/resource/validator.rb +10 -0
  388. data/lib/puppet/indirector/rest.rb +66 -0
  389. data/lib/puppet/indirector/store_configs.rb +32 -0
  390. data/lib/puppet/indirector/terminus.rb +180 -0
  391. data/lib/puppet/indirector/yaml.rb +65 -0
  392. data/lib/puppet/indirector.rb +64 -0
  393. data/lib/puppet/info_service/class_information_service.rb +108 -0
  394. data/lib/puppet/info_service/plan_information_service.rb +38 -0
  395. data/lib/puppet/info_service/task_information_service.rb +45 -0
  396. data/lib/puppet/info_service.rb +27 -0
  397. data/lib/puppet/interface/action.rb +410 -0
  398. data/lib/puppet/interface/action_builder.rb +167 -0
  399. data/lib/puppet/interface/action_manager.rb +101 -0
  400. data/lib/puppet/interface/documentation.rb +363 -0
  401. data/lib/puppet/interface/face_collection.rb +141 -0
  402. data/lib/puppet/interface/option.rb +184 -0
  403. data/lib/puppet/interface/option_builder.rb +110 -0
  404. data/lib/puppet/interface/option_manager.rb +108 -0
  405. data/lib/puppet/interface.rb +240 -0
  406. data/lib/puppet/loaders.rb +31 -0
  407. data/lib/puppet/metatype/manager.rb +198 -0
  408. data/lib/puppet/module/plan.rb +166 -0
  409. data/lib/puppet/module/task.rb +288 -0
  410. data/lib/puppet/module.rb +487 -0
  411. data/lib/puppet/module_tool/applications/application.rb +96 -0
  412. data/lib/puppet/module_tool/applications/checksummer.rb +62 -0
  413. data/lib/puppet/module_tool/applications/installer.rb +402 -0
  414. data/lib/puppet/module_tool/applications/uninstaller.rb +121 -0
  415. data/lib/puppet/module_tool/applications/unpacker.rb +102 -0
  416. data/lib/puppet/module_tool/applications/upgrader.rb +288 -0
  417. data/lib/puppet/module_tool/applications.rb +14 -0
  418. data/lib/puppet/module_tool/checksums.rb +50 -0
  419. data/lib/puppet/module_tool/dependency.rb +42 -0
  420. data/lib/puppet/module_tool/errors/base.rb +17 -0
  421. data/lib/puppet/module_tool/errors/installer.rb +94 -0
  422. data/lib/puppet/module_tool/errors/shared.rb +228 -0
  423. data/lib/puppet/module_tool/errors/uninstaller.rb +51 -0
  424. data/lib/puppet/module_tool/errors/upgrader.rb +64 -0
  425. data/lib/puppet/module_tool/errors.rb +13 -0
  426. data/lib/puppet/module_tool/install_directory.rb +48 -0
  427. data/lib/puppet/module_tool/installed_modules.rb +99 -0
  428. data/lib/puppet/module_tool/local_tarball.rb +92 -0
  429. data/lib/puppet/module_tool/metadata.rb +227 -0
  430. data/lib/puppet/module_tool/shared_behaviors.rb +199 -0
  431. data/lib/puppet/module_tool/tar/gnu.rb +23 -0
  432. data/lib/puppet/module_tool/tar/mini.rb +118 -0
  433. data/lib/puppet/module_tool/tar.rb +20 -0
  434. data/lib/puppet/module_tool.rb +194 -0
  435. data/lib/puppet/network/authconfig.rb +9 -0
  436. data/lib/puppet/network/authorization.rb +21 -0
  437. data/lib/puppet/network/client_request.rb +32 -0
  438. data/lib/puppet/network/format.rb +116 -0
  439. data/lib/puppet/network/format_handler.rb +110 -0
  440. data/lib/puppet/network/format_support.rb +140 -0
  441. data/lib/puppet/network/formats.rb +338 -0
  442. data/lib/puppet/network/http/api/indirected_routes.rb +270 -0
  443. data/lib/puppet/network/http/api/indirection_type.rb +33 -0
  444. data/lib/puppet/network/http/api/master/v3/environments.rb +4 -0
  445. data/lib/puppet/network/http/api/master/v3.rb +4 -0
  446. data/lib/puppet/network/http/api/master.rb +5 -0
  447. data/lib/puppet/network/http/api/server/v3/environments.rb +54 -0
  448. data/lib/puppet/network/http/api/server/v3.rb +40 -0
  449. data/lib/puppet/network/http/api/server.rb +12 -0
  450. data/lib/puppet/network/http/api.rb +41 -0
  451. data/lib/puppet/network/http/connection.rb +288 -0
  452. data/lib/puppet/network/http/error.rb +75 -0
  453. data/lib/puppet/network/http/handler.rb +213 -0
  454. data/lib/puppet/network/http/issues.rb +14 -0
  455. data/lib/puppet/network/http/memory_response.rb +15 -0
  456. data/lib/puppet/network/http/request.rb +83 -0
  457. data/lib/puppet/network/http/response.rb +25 -0
  458. data/lib/puppet/network/http/route.rb +104 -0
  459. data/lib/puppet/network/http.rb +30 -0
  460. data/lib/puppet/network/http_pool.rb +78 -0
  461. data/lib/puppet/network/uri.rb +20 -0
  462. data/lib/puppet/network.rb +5 -0
  463. data/lib/puppet/node/environment.rb +638 -0
  464. data/lib/puppet/node/facts.rb +165 -0
  465. data/lib/puppet/node/server_facts.rb +46 -0
  466. data/lib/puppet/node.rb +256 -0
  467. data/lib/puppet/pal/catalog_compiler.rb +107 -0
  468. data/lib/puppet/pal/compiler.rb +227 -0
  469. data/lib/puppet/pal/function_signature.rb +54 -0
  470. data/lib/puppet/pal/json_catalog_encoder.rb +76 -0
  471. data/lib/puppet/pal/pal_api.rb +17 -0
  472. data/lib/puppet/pal/pal_impl.rb +585 -0
  473. data/lib/puppet/pal/plan_signature.rb +73 -0
  474. data/lib/puppet/pal/script_compiler.rb +75 -0
  475. data/lib/puppet/pal/task_signature.rb +64 -0
  476. data/lib/puppet/parameter/boolean.rb +17 -0
  477. data/lib/puppet/parameter/package_options.rb +33 -0
  478. data/lib/puppet/parameter/path.rb +61 -0
  479. data/lib/puppet/parameter/value.rb +93 -0
  480. data/lib/puppet/parameter/value_collection.rb +213 -0
  481. data/lib/puppet/parameter.rb +590 -0
  482. data/lib/puppet/parser/abstract_compiler.rb +35 -0
  483. data/lib/puppet/parser/ast/block_expression.rb +17 -0
  484. data/lib/puppet/parser/ast/branch.rb +21 -0
  485. data/lib/puppet/parser/ast/hostclass.rb +29 -0
  486. data/lib/puppet/parser/ast/leaf.rb +84 -0
  487. data/lib/puppet/parser/ast/node.rb +19 -0
  488. data/lib/puppet/parser/ast/pops_bridge.rb +245 -0
  489. data/lib/puppet/parser/ast/resource.rb +66 -0
  490. data/lib/puppet/parser/ast/resource_instance.rb +13 -0
  491. data/lib/puppet/parser/ast/resourceparam.rb +33 -0
  492. data/lib/puppet/parser/ast/top_level_construct.rb +6 -0
  493. data/lib/puppet/parser/ast.rb +62 -0
  494. data/lib/puppet/parser/catalog_compiler.rb +56 -0
  495. data/lib/puppet/parser/compiler/catalog_validator/relationship_validator.rb +41 -0
  496. data/lib/puppet/parser/compiler/catalog_validator.rb +35 -0
  497. data/lib/puppet/parser/compiler.rb +616 -0
  498. data/lib/puppet/parser/e4_parser_adapter.rb +61 -0
  499. data/lib/puppet/parser/files.rb +95 -0
  500. data/lib/puppet/parser/functions/assert_type.rb +62 -0
  501. data/lib/puppet/parser/functions/binary_file.rb +26 -0
  502. data/lib/puppet/parser/functions/break.rb +41 -0
  503. data/lib/puppet/parser/functions/contain.rb +32 -0
  504. data/lib/puppet/parser/functions/create_resources.rb +114 -0
  505. data/lib/puppet/parser/functions/defined.rb +109 -0
  506. data/lib/puppet/parser/functions/dig.rb +40 -0
  507. data/lib/puppet/parser/functions/digest.rb +7 -0
  508. data/lib/puppet/parser/functions/each.rb +106 -0
  509. data/lib/puppet/parser/functions/epp.rb +40 -0
  510. data/lib/puppet/parser/functions/fail.rb +13 -0
  511. data/lib/puppet/parser/functions/file.rb +35 -0
  512. data/lib/puppet/parser/functions/filter.rb +81 -0
  513. data/lib/puppet/parser/functions/find_file.rb +29 -0
  514. data/lib/puppet/parser/functions/fqdn_rand.rb +46 -0
  515. data/lib/puppet/parser/functions/generate.rb +39 -0
  516. data/lib/puppet/parser/functions/hiera.rb +105 -0
  517. data/lib/puppet/parser/functions/hiera_array.rb +93 -0
  518. data/lib/puppet/parser/functions/hiera_hash.rb +103 -0
  519. data/lib/puppet/parser/functions/hiera_include.rb +102 -0
  520. data/lib/puppet/parser/functions/include.rb +36 -0
  521. data/lib/puppet/parser/functions/inline_epp.rb +52 -0
  522. data/lib/puppet/parser/functions/inline_template.rb +28 -0
  523. data/lib/puppet/parser/functions/lest.rb +51 -0
  524. data/lib/puppet/parser/functions/lookup.rb +134 -0
  525. data/lib/puppet/parser/functions/map.rb +78 -0
  526. data/lib/puppet/parser/functions/match.rb +45 -0
  527. data/lib/puppet/parser/functions/md5.rb +7 -0
  528. data/lib/puppet/parser/functions/new.rb +992 -0
  529. data/lib/puppet/parser/functions/next.rb +40 -0
  530. data/lib/puppet/parser/functions/realize.rb +22 -0
  531. data/lib/puppet/parser/functions/reduce.rb +139 -0
  532. data/lib/puppet/parser/functions/regsubst.rb +65 -0
  533. data/lib/puppet/parser/functions/require.rb +43 -0
  534. data/lib/puppet/parser/functions/return.rb +94 -0
  535. data/lib/puppet/parser/functions/reverse_each.rb +85 -0
  536. data/lib/puppet/parser/functions/scanf.rb +40 -0
  537. data/lib/puppet/parser/functions/sha1.rb +7 -0
  538. data/lib/puppet/parser/functions/sha256.rb +7 -0
  539. data/lib/puppet/parser/functions/shellquote.rb +63 -0
  540. data/lib/puppet/parser/functions/slice.rb +41 -0
  541. data/lib/puppet/parser/functions/split.rb +29 -0
  542. data/lib/puppet/parser/functions/sprintf.rb +62 -0
  543. data/lib/puppet/parser/functions/step.rb +86 -0
  544. data/lib/puppet/parser/functions/strftime.rb +187 -0
  545. data/lib/puppet/parser/functions/tag.rb +15 -0
  546. data/lib/puppet/parser/functions/tagged.rb +24 -0
  547. data/lib/puppet/parser/functions/template.rb +42 -0
  548. data/lib/puppet/parser/functions/then.rb +75 -0
  549. data/lib/puppet/parser/functions/type.rb +55 -0
  550. data/lib/puppet/parser/functions/versioncmp.rb +31 -0
  551. data/lib/puppet/parser/functions/with.rb +30 -0
  552. data/lib/puppet/parser/functions.rb +324 -0
  553. data/lib/puppet/parser/parser_factory.rb +32 -0
  554. data/lib/puppet/parser/relationship.rb +90 -0
  555. data/lib/puppet/parser/resource/param.rb +37 -0
  556. data/lib/puppet/parser/resource.rb +353 -0
  557. data/lib/puppet/parser/scope.rb +1141 -0
  558. data/lib/puppet/parser/script_compiler.rb +123 -0
  559. data/lib/puppet/parser/templatewrapper.rb +105 -0
  560. data/lib/puppet/parser/type_loader.rb +151 -0
  561. data/lib/puppet/parser.rb +22 -0
  562. data/lib/puppet/plugins/configuration.rb +31 -0
  563. data/lib/puppet/plugins/syntax_checkers.rb +99 -0
  564. data/lib/puppet/plugins.rb +11 -0
  565. data/lib/puppet/pops/adaptable.rb +199 -0
  566. data/lib/puppet/pops/adapters.rb +159 -0
  567. data/lib/puppet/pops/evaluator/access_operator.rb +732 -0
  568. data/lib/puppet/pops/evaluator/callable_signature.rb +108 -0
  569. data/lib/puppet/pops/evaluator/closure.rb +370 -0
  570. data/lib/puppet/pops/evaluator/collector_transformer.rb +237 -0
  571. data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +88 -0
  572. data/lib/puppet/pops/evaluator/collectors/catalog_collector.rb +30 -0
  573. data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +71 -0
  574. data/lib/puppet/pops/evaluator/collectors/fixed_set_collector.rb +38 -0
  575. data/lib/puppet/pops/evaluator/compare_operator.rb +269 -0
  576. data/lib/puppet/pops/evaluator/deferred_resolver.rb +227 -0
  577. data/lib/puppet/pops/evaluator/epp_evaluator.rb +121 -0
  578. data/lib/puppet/pops/evaluator/evaluator_impl.rb +1317 -0
  579. data/lib/puppet/pops/evaluator/external_syntax_support.rb +47 -0
  580. data/lib/puppet/pops/evaluator/json_strict_literal_evaluator.rb +83 -0
  581. data/lib/puppet/pops/evaluator/literal_evaluator.rb +100 -0
  582. data/lib/puppet/pops/evaluator/puppet_proc.rb +72 -0
  583. data/lib/puppet/pops/evaluator/relationship_operator.rb +188 -0
  584. data/lib/puppet/pops/evaluator/runtime3_converter.rb +225 -0
  585. data/lib/puppet/pops/evaluator/runtime3_resource_support.rb +119 -0
  586. data/lib/puppet/pops/evaluator/runtime3_support.rb +528 -0
  587. data/lib/puppet/pops/functions/dispatch.rb +107 -0
  588. data/lib/puppet/pops/functions/dispatcher.rb +76 -0
  589. data/lib/puppet/pops/functions/function.rb +137 -0
  590. data/lib/puppet/pops/issue_reporter.rb +140 -0
  591. data/lib/puppet/pops/issues.rb +933 -0
  592. data/lib/puppet/pops/label_provider.rb +92 -0
  593. data/lib/puppet/pops/loader/base_loader.rb +178 -0
  594. data/lib/puppet/pops/loader/dependency_loader.rb +95 -0
  595. data/lib/puppet/pops/loader/gem_support.rb +54 -0
  596. data/lib/puppet/pops/loader/generic_plan_instantiator.rb +30 -0
  597. data/lib/puppet/pops/loader/loader.rb +221 -0
  598. data/lib/puppet/pops/loader/loader_paths.rb +413 -0
  599. data/lib/puppet/pops/loader/module_loaders.rb +552 -0
  600. data/lib/puppet/pops/loader/predefined_loader.rb +28 -0
  601. data/lib/puppet/pops/loader/puppet_function_instantiator.rb +88 -0
  602. data/lib/puppet/pops/loader/puppet_plan_instantiator.rb +97 -0
  603. data/lib/puppet/pops/loader/puppet_resource_type_impl_instantiator.rb +80 -0
  604. data/lib/puppet/pops/loader/ruby_data_type_instantiator.rb +43 -0
  605. data/lib/puppet/pops/loader/ruby_function_instantiator.rb +49 -0
  606. data/lib/puppet/pops/loader/ruby_legacy_function_instantiator.rb +130 -0
  607. data/lib/puppet/pops/loader/runtime3_type_loader.rb +104 -0
  608. data/lib/puppet/pops/loader/simple_environment_loader.rb +20 -0
  609. data/lib/puppet/pops/loader/static_loader.rb +133 -0
  610. data/lib/puppet/pops/loader/task_instantiator.rb +46 -0
  611. data/lib/puppet/pops/loader/type_definition_instantiator.rb +104 -0
  612. data/lib/puppet/pops/loader/typed_name.rb +56 -0
  613. data/lib/puppet/pops/loader/uri_helper.rb +24 -0
  614. data/lib/puppet/pops/loaders.rb +550 -0
  615. data/lib/puppet/pops/lookup/configured_data_provider.rb +95 -0
  616. data/lib/puppet/pops/lookup/context.rb +208 -0
  617. data/lib/puppet/pops/lookup/data_adapter.rb +29 -0
  618. data/lib/puppet/pops/lookup/data_dig_function_provider.rb +146 -0
  619. data/lib/puppet/pops/lookup/data_hash_function_provider.rb +128 -0
  620. data/lib/puppet/pops/lookup/data_provider.rb +94 -0
  621. data/lib/puppet/pops/lookup/environment_data_provider.rb +37 -0
  622. data/lib/puppet/pops/lookup/explainer.rb +597 -0
  623. data/lib/puppet/pops/lookup/function_provider.rb +112 -0
  624. data/lib/puppet/pops/lookup/global_data_provider.rb +76 -0
  625. data/lib/puppet/pops/lookup/hiera_config.rb +823 -0
  626. data/lib/puppet/pops/lookup/interpolation.rb +166 -0
  627. data/lib/puppet/pops/lookup/invocation.rb +272 -0
  628. data/lib/puppet/pops/lookup/key_recorder.rb +21 -0
  629. data/lib/puppet/pops/lookup/location_resolver.rb +101 -0
  630. data/lib/puppet/pops/lookup/lookup_adapter.rb +533 -0
  631. data/lib/puppet/pops/lookup/lookup_key.rb +101 -0
  632. data/lib/puppet/pops/lookup/lookup_key_function_provider.rb +94 -0
  633. data/lib/puppet/pops/lookup/module_data_provider.rb +92 -0
  634. data/lib/puppet/pops/lookup/sub_lookup.rb +96 -0
  635. data/lib/puppet/pops/lookup.rb +102 -0
  636. data/lib/puppet/pops/merge_strategy.rb +447 -0
  637. data/lib/puppet/pops/migration/migration_checker.rb +61 -0
  638. data/lib/puppet/pops/model/ast.pp +669 -0
  639. data/lib/puppet/pops/model/ast.rb +4776 -0
  640. data/lib/puppet/pops/model/ast_transformer.rb +131 -0
  641. data/lib/puppet/pops/model/factory.rb +1157 -0
  642. data/lib/puppet/pops/model/model_label_provider.rb +137 -0
  643. data/lib/puppet/pops/model/model_tree_dumper.rb +447 -0
  644. data/lib/puppet/pops/model/pn_transformer.rb +384 -0
  645. data/lib/puppet/pops/model/tree_dumper.rb +62 -0
  646. data/lib/puppet/pops/parser/code_merger.rb +29 -0
  647. data/lib/puppet/pops/parser/egrammar.ra +889 -0
  648. data/lib/puppet/pops/parser/eparser.rb +3184 -0
  649. data/lib/puppet/pops/parser/epp_parser.rb +52 -0
  650. data/lib/puppet/pops/parser/epp_support.rb +266 -0
  651. data/lib/puppet/pops/parser/evaluating_parser.rb +166 -0
  652. data/lib/puppet/pops/parser/heredoc_support.rb +153 -0
  653. data/lib/puppet/pops/parser/interpolation_support.rb +249 -0
  654. data/lib/puppet/pops/parser/lexer2.rb +789 -0
  655. data/lib/puppet/pops/parser/lexer_support.rb +221 -0
  656. data/lib/puppet/pops/parser/locatable.rb +23 -0
  657. data/lib/puppet/pops/parser/locator.rb +361 -0
  658. data/lib/puppet/pops/parser/parser_support.rb +252 -0
  659. data/lib/puppet/pops/parser/pn_parser.rb +318 -0
  660. data/lib/puppet/pops/parser/slurp_support.rb +119 -0
  661. data/lib/puppet/pops/patterns.rb +60 -0
  662. data/lib/puppet/pops/pcore.rb +136 -0
  663. data/lib/puppet/pops/pn.rb +239 -0
  664. data/lib/puppet/pops/puppet_stack.rb +63 -0
  665. data/lib/puppet/pops/resource/param.rb +56 -0
  666. data/lib/puppet/pops/resource/resource_type_impl.rb +296 -0
  667. data/lib/puppet/pops/resource/resource_type_set.pcore +22 -0
  668. data/lib/puppet/pops/semantic_error.rb +31 -0
  669. data/lib/puppet/pops/serialization/abstract_reader.rb +182 -0
  670. data/lib/puppet/pops/serialization/abstract_writer.rb +224 -0
  671. data/lib/puppet/pops/serialization/deserializer.rb +83 -0
  672. data/lib/puppet/pops/serialization/extension.rb +166 -0
  673. data/lib/puppet/pops/serialization/from_data_converter.rb +231 -0
  674. data/lib/puppet/pops/serialization/instance_reader.rb +21 -0
  675. data/lib/puppet/pops/serialization/instance_writer.rb +16 -0
  676. data/lib/puppet/pops/serialization/json.rb +301 -0
  677. data/lib/puppet/pops/serialization/json_path.rb +129 -0
  678. data/lib/puppet/pops/serialization/object.rb +73 -0
  679. data/lib/puppet/pops/serialization/serializer.rb +144 -0
  680. data/lib/puppet/pops/serialization/time_factory.rb +68 -0
  681. data/lib/puppet/pops/serialization/to_data_converter.rb +316 -0
  682. data/lib/puppet/pops/serialization/to_stringified_converter.rb +227 -0
  683. data/lib/puppet/pops/serialization.rb +45 -0
  684. data/lib/puppet/pops/time/timespan.rb +728 -0
  685. data/lib/puppet/pops/time/timestamp.rb +167 -0
  686. data/lib/puppet/pops/types/annotatable.rb +37 -0
  687. data/lib/puppet/pops/types/annotation.rb +73 -0
  688. data/lib/puppet/pops/types/class_loader.rb +134 -0
  689. data/lib/puppet/pops/types/implementation_registry.rb +137 -0
  690. data/lib/puppet/pops/types/iterable.rb +375 -0
  691. data/lib/puppet/pops/types/p_binary_type.rb +232 -0
  692. data/lib/puppet/pops/types/p_init_type.rb +241 -0
  693. data/lib/puppet/pops/types/p_meta_type.rb +95 -0
  694. data/lib/puppet/pops/types/p_object_type.rb +1142 -0
  695. data/lib/puppet/pops/types/p_object_type_extension.rb +229 -0
  696. data/lib/puppet/pops/types/p_runtime_type.rb +117 -0
  697. data/lib/puppet/pops/types/p_sem_ver_range_type.rb +191 -0
  698. data/lib/puppet/pops/types/p_sem_ver_type.rb +155 -0
  699. data/lib/puppet/pops/types/p_sensitive_type.rb +81 -0
  700. data/lib/puppet/pops/types/p_timespan_type.rb +194 -0
  701. data/lib/puppet/pops/types/p_timestamp_type.rb +74 -0
  702. data/lib/puppet/pops/types/p_type_set_type.rb +394 -0
  703. data/lib/puppet/pops/types/p_uri_type.rb +198 -0
  704. data/lib/puppet/pops/types/puppet_object.rb +41 -0
  705. data/lib/puppet/pops/types/recursion_guard.rb +142 -0
  706. data/lib/puppet/pops/types/ruby_generator.rb +477 -0
  707. data/lib/puppet/pops/types/ruby_method.rb +32 -0
  708. data/lib/puppet/pops/types/string_converter.rb +1144 -0
  709. data/lib/puppet/pops/types/tree_iterators.rb +250 -0
  710. data/lib/puppet/pops/types/type_acceptor.rb +27 -0
  711. data/lib/puppet/pops/types/type_asserter.rb +49 -0
  712. data/lib/puppet/pops/types/type_assertion_error.rb +27 -0
  713. data/lib/puppet/pops/types/type_calculator.rb +829 -0
  714. data/lib/puppet/pops/types/type_conversion_error.rb +7 -0
  715. data/lib/puppet/pops/types/type_factory.rb +640 -0
  716. data/lib/puppet/pops/types/type_formatter.rb +796 -0
  717. data/lib/puppet/pops/types/type_mismatch_describer.rb +1105 -0
  718. data/lib/puppet/pops/types/type_parser.rb +690 -0
  719. data/lib/puppet/pops/types/type_set_reference.rb +62 -0
  720. data/lib/puppet/pops/types/type_with_members.rb +43 -0
  721. data/lib/puppet/pops/types/types.rb +3651 -0
  722. data/lib/puppet/pops/utils.rb +117 -0
  723. data/lib/puppet/pops/validation/checker4_0.rb +1155 -0
  724. data/lib/puppet/pops/validation/tasks_checker.rb +95 -0
  725. data/lib/puppet/pops/validation/validator_factory_4_0.rb +45 -0
  726. data/lib/puppet/pops/validation.rb +462 -0
  727. data/lib/puppet/pops/visitable.rb +8 -0
  728. data/lib/puppet/pops/visitor.rb +136 -0
  729. data/lib/puppet/pops.rb +124 -0
  730. data/lib/puppet/property/boolean.rb +9 -0
  731. data/lib/puppet/property/ensure.rb +107 -0
  732. data/lib/puppet/property/keyvalue.rb +159 -0
  733. data/lib/puppet/property/list.rb +71 -0
  734. data/lib/puppet/property/ordered_list.rb +30 -0
  735. data/lib/puppet/property.rb +610 -0
  736. data/lib/puppet/provider/aix_object.rb +491 -0
  737. data/lib/puppet/provider/command.rb +27 -0
  738. data/lib/puppet/provider/confine.rb +8 -0
  739. data/lib/puppet/provider/exec/posix.rb +63 -0
  740. data/lib/puppet/provider/exec/shell.rb +27 -0
  741. data/lib/puppet/provider/exec/windows.rb +57 -0
  742. data/lib/puppet/provider/exec.rb +107 -0
  743. data/lib/puppet/provider/file/posix.rb +162 -0
  744. data/lib/puppet/provider/file/windows.rb +151 -0
  745. data/lib/puppet/provider/group/aix.rb +101 -0
  746. data/lib/puppet/provider/group/directoryservice.rb +24 -0
  747. data/lib/puppet/provider/group/groupadd.rb +180 -0
  748. data/lib/puppet/provider/group/ldap.rb +51 -0
  749. data/lib/puppet/provider/group/pw.rb +52 -0
  750. data/lib/puppet/provider/group/windows_adsi.rb +116 -0
  751. data/lib/puppet/provider/ldap.rb +143 -0
  752. data/lib/puppet/provider/nameservice/directoryservice.rb +522 -0
  753. data/lib/puppet/provider/nameservice/objectadd.rb +22 -0
  754. data/lib/puppet/provider/nameservice/pw.rb +21 -0
  755. data/lib/puppet/provider/nameservice.rb +297 -0
  756. data/lib/puppet/provider/network_device.rb +74 -0
  757. data/lib/puppet/provider/package/aix.rb +171 -0
  758. data/lib/puppet/provider/package/appdmg.rb +113 -0
  759. data/lib/puppet/provider/package/apple.rb +49 -0
  760. data/lib/puppet/provider/package/apt.rb +265 -0
  761. data/lib/puppet/provider/package/aptitude.rb +35 -0
  762. data/lib/puppet/provider/package/aptrpm.rb +87 -0
  763. data/lib/puppet/provider/package/blastwave.rb +109 -0
  764. data/lib/puppet/provider/package/dnf.rb +57 -0
  765. data/lib/puppet/provider/package/dnfmodule.rb +143 -0
  766. data/lib/puppet/provider/package/dpkg.rb +191 -0
  767. data/lib/puppet/provider/package/fink.rb +99 -0
  768. data/lib/puppet/provider/package/freebsd.rb +49 -0
  769. data/lib/puppet/provider/package/gem.rb +296 -0
  770. data/lib/puppet/provider/package/hpux.rb +46 -0
  771. data/lib/puppet/provider/package/macports.rb +112 -0
  772. data/lib/puppet/provider/package/nim.rb +290 -0
  773. data/lib/puppet/provider/package/openbsd.rb +263 -0
  774. data/lib/puppet/provider/package/opkg.rb +85 -0
  775. data/lib/puppet/provider/package/pacman.rb +270 -0
  776. data/lib/puppet/provider/package/pip.rb +347 -0
  777. data/lib/puppet/provider/package/pip2.rb +18 -0
  778. data/lib/puppet/provider/package/pip3.rb +18 -0
  779. data/lib/puppet/provider/package/pkg.rb +300 -0
  780. data/lib/puppet/provider/package/pkgdmg.rb +159 -0
  781. data/lib/puppet/provider/package/pkgin.rb +88 -0
  782. data/lib/puppet/provider/package/pkgng.rb +178 -0
  783. data/lib/puppet/provider/package/pkgutil.rb +186 -0
  784. data/lib/puppet/provider/package/portage.rb +314 -0
  785. data/lib/puppet/provider/package/ports.rb +94 -0
  786. data/lib/puppet/provider/package/portupgrade.rb +233 -0
  787. data/lib/puppet/provider/package/puppet_gem.rb +25 -0
  788. data/lib/puppet/provider/package/puppetserver_gem.rb +174 -0
  789. data/lib/puppet/provider/package/rpm.rb +255 -0
  790. data/lib/puppet/provider/package/rug.rb +51 -0
  791. data/lib/puppet/provider/package/sun.rb +137 -0
  792. data/lib/puppet/provider/package/sunfreeware.rb +11 -0
  793. data/lib/puppet/provider/package/tdnf.rb +35 -0
  794. data/lib/puppet/provider/package/up2date.rb +40 -0
  795. data/lib/puppet/provider/package/urpmi.rb +57 -0
  796. data/lib/puppet/provider/package/windows/exe_package.rb +108 -0
  797. data/lib/puppet/provider/package/windows/msi_package.rb +72 -0
  798. data/lib/puppet/provider/package/windows/package.rb +113 -0
  799. data/lib/puppet/provider/package/windows.rb +131 -0
  800. data/lib/puppet/provider/package/xbps.rb +127 -0
  801. data/lib/puppet/provider/package/yum.rb +390 -0
  802. data/lib/puppet/provider/package/zypper.rb +206 -0
  803. data/lib/puppet/provider/package.rb +61 -0
  804. data/lib/puppet/provider/package_targetable.rb +71 -0
  805. data/lib/puppet/provider/parsedfile.rb +494 -0
  806. data/lib/puppet/provider/service/base.rb +135 -0
  807. data/lib/puppet/provider/service/bsd.rb +53 -0
  808. data/lib/puppet/provider/service/daemontools.rb +196 -0
  809. data/lib/puppet/provider/service/debian.rb +77 -0
  810. data/lib/puppet/provider/service/freebsd.rb +141 -0
  811. data/lib/puppet/provider/service/gentoo.rb +47 -0
  812. data/lib/puppet/provider/service/init.rb +194 -0
  813. data/lib/puppet/provider/service/launchd.rb +391 -0
  814. data/lib/puppet/provider/service/openbsd.rb +101 -0
  815. data/lib/puppet/provider/service/openrc.rb +72 -0
  816. data/lib/puppet/provider/service/openwrt.rb +37 -0
  817. data/lib/puppet/provider/service/rcng.rb +53 -0
  818. data/lib/puppet/provider/service/redhat.rb +75 -0
  819. data/lib/puppet/provider/service/runit.rb +107 -0
  820. data/lib/puppet/provider/service/service.rb +67 -0
  821. data/lib/puppet/provider/service/smf.rb +322 -0
  822. data/lib/puppet/provider/service/src.rb +147 -0
  823. data/lib/puppet/provider/service/systemd.rb +232 -0
  824. data/lib/puppet/provider/service/upstart.rb +385 -0
  825. data/lib/puppet/provider/service/windows.rb +179 -0
  826. data/lib/puppet/provider/user/aix.rb +365 -0
  827. data/lib/puppet/provider/user/directoryservice.rb +687 -0
  828. data/lib/puppet/provider/user/hpux.rb +93 -0
  829. data/lib/puppet/provider/user/ldap.rb +135 -0
  830. data/lib/puppet/provider/user/openbsd.rb +79 -0
  831. data/lib/puppet/provider/user/pw.rb +109 -0
  832. data/lib/puppet/provider/user/user_role_add.rb +243 -0
  833. data/lib/puppet/provider/user/useradd.rb +417 -0
  834. data/lib/puppet/provider/user/windows_adsi.rb +176 -0
  835. data/lib/puppet/provider.rb +613 -0
  836. data/lib/puppet/reference/configuration.rb +105 -0
  837. data/lib/puppet/reference/function.rb +19 -0
  838. data/lib/puppet/reference/indirection.rb +76 -0
  839. data/lib/puppet/reference/metaparameter.rb +35 -0
  840. data/lib/puppet/reference/providers.rb +119 -0
  841. data/lib/puppet/reference/report.rb +22 -0
  842. data/lib/puppet/reference/type.rb +111 -0
  843. data/lib/puppet/relationship.rb +85 -0
  844. data/lib/puppet/reports/http.rb +45 -0
  845. data/lib/puppet/reports/log.rb +15 -0
  846. data/lib/puppet/reports/store.rb +71 -0
  847. data/lib/puppet/reports.rb +95 -0
  848. data/lib/puppet/resource/catalog.rb +655 -0
  849. data/lib/puppet/resource/status.rb +231 -0
  850. data/lib/puppet/resource/type.rb +449 -0
  851. data/lib/puppet/resource/type_collection.rb +235 -0
  852. data/lib/puppet/resource.rb +673 -0
  853. data/lib/puppet/runtime.rb +67 -0
  854. data/lib/puppet/scheduler/job.rb +55 -0
  855. data/lib/puppet/scheduler/scheduler.rb +46 -0
  856. data/lib/puppet/scheduler/splay_job.rb +45 -0
  857. data/lib/puppet/scheduler/timer.rb +15 -0
  858. data/lib/puppet/scheduler.rb +18 -0
  859. data/lib/puppet/settings/alias_setting.rb +37 -0
  860. data/lib/puppet/settings/array_setting.rb +18 -0
  861. data/lib/puppet/settings/autosign_setting.rb +23 -0
  862. data/lib/puppet/settings/base_setting.rb +228 -0
  863. data/lib/puppet/settings/boolean_setting.rb +34 -0
  864. data/lib/puppet/settings/certificate_revocation_setting.rb +22 -0
  865. data/lib/puppet/settings/config_file.rb +148 -0
  866. data/lib/puppet/settings/directory_setting.rb +20 -0
  867. data/lib/puppet/settings/duration_setting.rb +33 -0
  868. data/lib/puppet/settings/enum_setting.rb +18 -0
  869. data/lib/puppet/settings/environment_conf.rb +228 -0
  870. data/lib/puppet/settings/errors.rb +14 -0
  871. data/lib/puppet/settings/file_or_directory_setting.rb +37 -0
  872. data/lib/puppet/settings/file_setting.rb +232 -0
  873. data/lib/puppet/settings/http_extra_headers_setting.rb +26 -0
  874. data/lib/puppet/settings/ini_file.rb +228 -0
  875. data/lib/puppet/settings/integer_setting.rb +19 -0
  876. data/lib/puppet/settings/path_setting.rb +10 -0
  877. data/lib/puppet/settings/port_setting.rb +17 -0
  878. data/lib/puppet/settings/priority_setting.rb +44 -0
  879. data/lib/puppet/settings/server_list_setting.rb +30 -0
  880. data/lib/puppet/settings/string_setting.rb +11 -0
  881. data/lib/puppet/settings/symbolic_enum_setting.rb +19 -0
  882. data/lib/puppet/settings/terminus_setting.rb +16 -0
  883. data/lib/puppet/settings/ttl_setting.rb +53 -0
  884. data/lib/puppet/settings/value_translator.rb +16 -0
  885. data/lib/puppet/settings.rb +1650 -0
  886. data/lib/puppet/ssl/base.rb +152 -0
  887. data/lib/puppet/ssl/certificate.rb +98 -0
  888. data/lib/puppet/ssl/certificate_request.rb +320 -0
  889. data/lib/puppet/ssl/certificate_request_attributes.rb +40 -0
  890. data/lib/puppet/ssl/certificate_signer.rb +39 -0
  891. data/lib/puppet/ssl/digest.rb +22 -0
  892. data/lib/puppet/ssl/error.rb +29 -0
  893. data/lib/puppet/ssl/oids.rb +199 -0
  894. data/lib/puppet/ssl/openssl_loader.rb +26 -0
  895. data/lib/puppet/ssl/ssl_context.rb +27 -0
  896. data/lib/puppet/ssl/ssl_provider.rb +354 -0
  897. data/lib/puppet/ssl/state_machine.rb +605 -0
  898. data/lib/puppet/ssl/verifier.rb +143 -0
  899. data/lib/puppet/ssl.rb +25 -0
  900. data/lib/puppet/syntax_checkers/base64.rb +42 -0
  901. data/lib/puppet/syntax_checkers/epp.rb +35 -0
  902. data/lib/puppet/syntax_checkers/json.rb +35 -0
  903. data/lib/puppet/syntax_checkers/pp.rb +35 -0
  904. data/lib/puppet/syntax_checkers.rb +5 -0
  905. data/lib/puppet/test/test_helper.rb +251 -0
  906. data/lib/puppet/thread_local.rb +6 -0
  907. data/lib/puppet/transaction/additional_resource_generator.rb +225 -0
  908. data/lib/puppet/transaction/event.rb +171 -0
  909. data/lib/puppet/transaction/event_manager.rb +180 -0
  910. data/lib/puppet/transaction/persistence.rb +119 -0
  911. data/lib/puppet/transaction/report.rb +511 -0
  912. data/lib/puppet/transaction/resource_harness.rb +331 -0
  913. data/lib/puppet/transaction.rb +493 -0
  914. data/lib/puppet/trusted_external.rb +46 -0
  915. data/lib/puppet/type/component.rb +96 -0
  916. data/lib/puppet/type/exec.rb +730 -0
  917. data/lib/puppet/type/file/checksum.rb +54 -0
  918. data/lib/puppet/type/file/checksum_value.rb +56 -0
  919. data/lib/puppet/type/file/content.rb +180 -0
  920. data/lib/puppet/type/file/ctime.rb +22 -0
  921. data/lib/puppet/type/file/data_sync.rb +101 -0
  922. data/lib/puppet/type/file/ensure.rb +194 -0
  923. data/lib/puppet/type/file/group.rb +50 -0
  924. data/lib/puppet/type/file/mode.rb +192 -0
  925. data/lib/puppet/type/file/mtime.rb +21 -0
  926. data/lib/puppet/type/file/owner.rb +52 -0
  927. data/lib/puppet/type/file/selcontext.rb +143 -0
  928. data/lib/puppet/type/file/source.rb +380 -0
  929. data/lib/puppet/type/file/target.rb +86 -0
  930. data/lib/puppet/type/file/type.rb +21 -0
  931. data/lib/puppet/type/file.rb +1139 -0
  932. data/lib/puppet/type/filebucket.rb +123 -0
  933. data/lib/puppet/type/group.rb +238 -0
  934. data/lib/puppet/type/notify.rb +48 -0
  935. data/lib/puppet/type/package.rb +715 -0
  936. data/lib/puppet/type/resources.rb +192 -0
  937. data/lib/puppet/type/schedule.rb +441 -0
  938. data/lib/puppet/type/service.rb +310 -0
  939. data/lib/puppet/type/stage.rb +29 -0
  940. data/lib/puppet/type/tidy.rb +382 -0
  941. data/lib/puppet/type/user.rb +865 -0
  942. data/lib/puppet/type/whit.rb +35 -0
  943. data/lib/puppet/type.rb +2629 -0
  944. data/lib/puppet/util/at_fork/noop.rb +20 -0
  945. data/lib/puppet/util/at_fork/solaris.rb +158 -0
  946. data/lib/puppet/util/at_fork.rb +37 -0
  947. data/lib/puppet/util/autoload.rb +221 -0
  948. data/lib/puppet/util/backups.rb +88 -0
  949. data/lib/puppet/util/character_encoding.rb +83 -0
  950. data/lib/puppet/util/checksums.rb +380 -0
  951. data/lib/puppet/util/classgen.rb +223 -0
  952. data/lib/puppet/util/colors.rb +102 -0
  953. data/lib/puppet/util/command_line/puppet_option_parser.rb +89 -0
  954. data/lib/puppet/util/command_line/trollop.rb +847 -0
  955. data/lib/puppet/util/command_line.rb +198 -0
  956. data/lib/puppet/util/constant_inflector.rb +25 -0
  957. data/lib/puppet/util/diff.rb +80 -0
  958. data/lib/puppet/util/docs.rb +132 -0
  959. data/lib/puppet/util/errors.rb +161 -0
  960. data/lib/puppet/util/execution.rb +446 -0
  961. data/lib/puppet/util/execution_stub.rb +28 -0
  962. data/lib/puppet/util/feature.rb +129 -0
  963. data/lib/puppet/util/file_watcher.rb +31 -0
  964. data/lib/puppet/util/fileparsing.rb +404 -0
  965. data/lib/puppet/util/filetype.rb +358 -0
  966. data/lib/puppet/util/http_proxy.rb +6 -0
  967. data/lib/puppet/util/inifile.rb +335 -0
  968. data/lib/puppet/util/instance_loader.rb +69 -0
  969. data/lib/puppet/util/json.rb +94 -0
  970. data/lib/puppet/util/json_lockfile.rb +47 -0
  971. data/lib/puppet/util/ldap/connection.rb +75 -0
  972. data/lib/puppet/util/ldap/generator.rb +44 -0
  973. data/lib/puppet/util/ldap/manager.rb +283 -0
  974. data/lib/puppet/util/ldap.rb +4 -0
  975. data/lib/puppet/util/libuser.conf +15 -0
  976. data/lib/puppet/util/libuser.rb +13 -0
  977. data/lib/puppet/util/limits.rb +14 -0
  978. data/lib/puppet/util/lockfile.rb +66 -0
  979. data/lib/puppet/util/log/destination.rb +50 -0
  980. data/lib/puppet/util/log/destinations.rb +253 -0
  981. data/lib/puppet/util/log.rb +436 -0
  982. data/lib/puppet/util/logging.rb +304 -0
  983. data/lib/puppet/util/metaid.rb +22 -0
  984. data/lib/puppet/util/metric.rb +68 -0
  985. data/lib/puppet/util/monkey_patches.rb +114 -0
  986. data/lib/puppet/util/multi_match.rb +55 -0
  987. data/lib/puppet/util/network_device/base.rb +24 -0
  988. data/lib/puppet/util/network_device/config.rb +105 -0
  989. data/lib/puppet/util/network_device/transport/base.rb +26 -0
  990. data/lib/puppet/util/network_device/transport.rb +7 -0
  991. data/lib/puppet/util/network_device.rb +19 -0
  992. data/lib/puppet/util/package/version/debian.rb +177 -0
  993. data/lib/puppet/util/package/version/gem.rb +18 -0
  994. data/lib/puppet/util/package/version/pip.rb +173 -0
  995. data/lib/puppet/util/package/version/range/eq.rb +17 -0
  996. data/lib/puppet/util/package/version/range/gt.rb +17 -0
  997. data/lib/puppet/util/package/version/range/gt_eq.rb +17 -0
  998. data/lib/puppet/util/package/version/range/lt.rb +17 -0
  999. data/lib/puppet/util/package/version/range/lt_eq.rb +17 -0
  1000. data/lib/puppet/util/package/version/range/min_max.rb +26 -0
  1001. data/lib/puppet/util/package/version/range/simple.rb +13 -0
  1002. data/lib/puppet/util/package/version/range.rb +57 -0
  1003. data/lib/puppet/util/package/version/rpm.rb +75 -0
  1004. data/lib/puppet/util/package.rb +43 -0
  1005. data/lib/puppet/util/pidlock.rb +103 -0
  1006. data/lib/puppet/util/platform.rb +72 -0
  1007. data/lib/puppet/util/plist.rb +161 -0
  1008. data/lib/puppet/util/posix.rb +206 -0
  1009. data/lib/puppet/util/profiler/aggregate.rb +82 -0
  1010. data/lib/puppet/util/profiler/around_profiler.rb +68 -0
  1011. data/lib/puppet/util/profiler/logging.rb +50 -0
  1012. data/lib/puppet/util/profiler/object_counts.rb +19 -0
  1013. data/lib/puppet/util/profiler/wall_clock.rb +36 -0
  1014. data/lib/puppet/util/profiler.rb +55 -0
  1015. data/lib/puppet/util/provider_features.rb +183 -0
  1016. data/lib/puppet/util/psych_support.rb +32 -0
  1017. data/lib/puppet/util/rdoc/code_objects.rb +293 -0
  1018. data/lib/puppet/util/rdoc/generators/puppet_generator.rb +902 -0
  1019. data/lib/puppet/util/rdoc/generators/template/puppet/puppet.rb +1068 -0
  1020. data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +262 -0
  1021. data/lib/puppet/util/rdoc/parser/puppet_parser_rdoc2.rb +16 -0
  1022. data/lib/puppet/util/rdoc/parser.rb +14 -0
  1023. data/lib/puppet/util/rdoc.rb +54 -0
  1024. data/lib/puppet/util/reference.rb +94 -0
  1025. data/lib/puppet/util/resource_template.rb +63 -0
  1026. data/lib/puppet/util/retry_action.rb +47 -0
  1027. data/lib/puppet/util/rpm_compare.rb +196 -0
  1028. data/lib/puppet/util/rubygems.rb +67 -0
  1029. data/lib/puppet/util/run_mode.rb +164 -0
  1030. data/lib/puppet/util/selinux.rb +331 -0
  1031. data/lib/puppet/util/skip_tags.rb +15 -0
  1032. data/lib/puppet/util/splayer.rb +20 -0
  1033. data/lib/puppet/util/storage.rb +100 -0
  1034. data/lib/puppet/util/suidmanager.rb +167 -0
  1035. data/lib/puppet/util/symbolic_file_mode.rb +156 -0
  1036. data/lib/puppet/util/tag_set.rb +29 -0
  1037. data/lib/puppet/util/tagging.rb +131 -0
  1038. data/lib/puppet/util/terminal.rb +18 -0
  1039. data/lib/puppet/util/user_attr.rb +23 -0
  1040. data/lib/puppet/util/warnings.rb +35 -0
  1041. data/lib/puppet/util/watched_file.rb +40 -0
  1042. data/lib/puppet/util/watcher/change_watcher.rb +35 -0
  1043. data/lib/puppet/util/watcher/periodic_watcher.rb +38 -0
  1044. data/lib/puppet/util/watcher/timer.rb +21 -0
  1045. data/lib/puppet/util/watcher.rb +17 -0
  1046. data/lib/puppet/util/windows/access_control_entry.rb +86 -0
  1047. data/lib/puppet/util/windows/access_control_list.rb +116 -0
  1048. data/lib/puppet/util/windows/adsi.rb +662 -0
  1049. data/lib/puppet/util/windows/com.rb +228 -0
  1050. data/lib/puppet/util/windows/daemon.rb +340 -0
  1051. data/lib/puppet/util/windows/error.rb +86 -0
  1052. data/lib/puppet/util/windows/eventlog.rb +191 -0
  1053. data/lib/puppet/util/windows/file.rb +359 -0
  1054. data/lib/puppet/util/windows/monkey_patches/process.rb +413 -0
  1055. data/lib/puppet/util/windows/principal.rb +204 -0
  1056. data/lib/puppet/util/windows/process.rb +360 -0
  1057. data/lib/puppet/util/windows/registry.rb +443 -0
  1058. data/lib/puppet/util/windows/root_certs.rb +110 -0
  1059. data/lib/puppet/util/windows/security.rb +909 -0
  1060. data/lib/puppet/util/windows/security_descriptor.rb +64 -0
  1061. data/lib/puppet/util/windows/service.rb +708 -0
  1062. data/lib/puppet/util/windows/sid.rb +291 -0
  1063. data/lib/puppet/util/windows/string.rb +17 -0
  1064. data/lib/puppet/util/windows/user.rb +551 -0
  1065. data/lib/puppet/util/windows.rb +58 -0
  1066. data/lib/puppet/util/yaml.rb +67 -0
  1067. data/lib/puppet/util.rb +759 -0
  1068. data/lib/puppet/vendor/require_vendored.rb +4 -0
  1069. data/lib/puppet/vendor.rb +59 -0
  1070. data/lib/puppet/version.rb +98 -0
  1071. data/lib/puppet/x509/cert_provider.rb +405 -0
  1072. data/lib/puppet/x509/pem_store.rb +57 -0
  1073. data/lib/puppet/x509.rb +13 -0
  1074. data/lib/puppet.rb +348 -0
  1075. data/lib/puppet_pal.rb +10 -0
  1076. data/lib/puppet_x.rb +16 -0
  1077. data/locales/config.yaml +29 -0
  1078. data/locales/en/puppet.po +19 -0
  1079. data/locales/puppet.pot +9738 -0
  1080. data/man/man5/puppet.conf.5 +1407 -0
  1081. data/man/man8/puppet-agent.8 +135 -0
  1082. data/man/man8/puppet-apply.8 +67 -0
  1083. data/man/man8/puppet-catalog.8 +194 -0
  1084. data/man/man8/puppet-config.8 +103 -0
  1085. data/man/man8/puppet-describe.8 +35 -0
  1086. data/man/man8/puppet-device.8 +83 -0
  1087. data/man/man8/puppet-doc.8 +30 -0
  1088. data/man/man8/puppet-epp.8 +232 -0
  1089. data/man/man8/puppet-facts.8 +156 -0
  1090. data/man/man8/puppet-filebucket.8 +134 -0
  1091. data/man/man8/puppet-generate.8 +54 -0
  1092. data/man/man8/puppet-help.8 +46 -0
  1093. data/man/man8/puppet-lookup.8 +71 -0
  1094. data/man/man8/puppet-module.8 +220 -0
  1095. data/man/man8/puppet-node.8 +142 -0
  1096. data/man/man8/puppet-parser.8 +87 -0
  1097. data/man/man8/puppet-plugin.8 +50 -0
  1098. data/man/man8/puppet-report.8 +84 -0
  1099. data/man/man8/puppet-resource.8 +63 -0
  1100. data/man/man8/puppet-script.8 +48 -0
  1101. data/man/man8/puppet-ssl.8 +45 -0
  1102. data/man/man8/puppet.8 +98 -0
  1103. data/tasks/tag.rake +34 -0
  1104. metadata +1336 -0
@@ -0,0 +1,1155 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../../../puppet/pops/evaluator/external_syntax_support'
4
+
5
+ module Puppet::Pops
6
+ module Validation
7
+ # A Validator validates a model.
8
+ #
9
+ # Validation is performed on each model element in isolation. Each method should validate the model element's state
10
+ # but not validate its referenced/contained elements except to check their validity in their respective role.
11
+ # The intent is to drive the validation with a tree iterator that visits all elements in a model.
12
+ #
13
+ #
14
+ # TODO: Add validation of multiplicities - this is a general validation that can be checked for all
15
+ # Model objects via their metamodel. (I.e an extra call to multiplicity check in polymorph check).
16
+ # This is however mostly valuable when validating model to model transformations, and is therefore T.B.D
17
+ #
18
+ class Checker4_0 < Evaluator::LiteralEvaluator
19
+ include Puppet::Pops::Evaluator::ExternalSyntaxSupport
20
+
21
+ attr_reader :acceptor
22
+ attr_reader :migration_checker
23
+
24
+ def self.check_visitor
25
+ # Class instance variable rather than Class variable because methods visited
26
+ # may be overridden in subclass
27
+ @check_visitor ||= Visitor.new(nil, 'check', 0, 0)
28
+ end
29
+
30
+ # Initializes the validator with a diagnostics producer. This object must respond to
31
+ # `:will_accept?` and `:accept`.
32
+ #
33
+ def initialize(diagnostics_producer)
34
+ super()
35
+ @@rvalue_visitor ||= Visitor.new(nil, "rvalue", 0, 0)
36
+ @@hostname_visitor ||= Visitor.new(nil, "hostname", 1, 2)
37
+ @@assignment_visitor ||= Visitor.new(nil, "assign", 0, 1)
38
+ @@query_visitor ||= Visitor.new(nil, "query", 0, 0)
39
+ @@relation_visitor ||= Visitor.new(nil, "relation", 0, 0)
40
+ @@idem_visitor ||= Visitor.new(nil, "idem", 0, 0)
41
+
42
+ @check_visitor = self.class.check_visitor
43
+ @acceptor = diagnostics_producer
44
+
45
+ # Use null migration checker unless given in context
46
+ @migration_checker = (Puppet.lookup(:migration_checker) { Migration::MigrationChecker.new() })
47
+ end
48
+
49
+ # Validates the entire model by visiting each model element and calling `check`.
50
+ # The result is collected (or acted on immediately) by the configured diagnostic provider/acceptor
51
+ # given when creating this Checker.
52
+ #
53
+ def validate(model)
54
+ # tree iterate the model, and call check for each element
55
+ @path = []
56
+ check(model)
57
+ internal_check_top_construct_in_module(model)
58
+ model._pcore_all_contents(@path) { |element| check(element) }
59
+ end
60
+
61
+ def container(index = -1)
62
+ @path[index]
63
+ end
64
+
65
+ # Performs regular validity check
66
+ def check(o)
67
+ @check_visitor.visit_this_0(self, o)
68
+ end
69
+
70
+ # Performs check if this is a vaid hostname expression
71
+ # @param single_feature_name [String, nil] the name of a single valued hostname feature of the value's container. e.g. 'parent'
72
+ def hostname(o, semantic)
73
+ @@hostname_visitor.visit_this_1(self, o, semantic)
74
+ end
75
+
76
+ # Performs check if this is valid as a query
77
+ def query(o)
78
+ @@query_visitor.visit_this_0(self, o)
79
+ end
80
+
81
+ # Performs check if this is valid as a relationship side
82
+ def relation(o)
83
+ @@relation_visitor.visit_this_0(self, o)
84
+ end
85
+
86
+ # Performs check if this is valid as a rvalue
87
+ def rvalue(o)
88
+ @@rvalue_visitor.visit_this_0(self, o)
89
+ end
90
+
91
+ #---TOP CHECK
92
+ # Performs check if this is valid as a container of a definition (class, define, node)
93
+ def top(definition, idx = -1)
94
+ o = container(idx)
95
+ idx -= 1
96
+ case o
97
+ when NilClass, Model::ApplyExpression, Model::HostClassDefinition, Model::Program
98
+ # ok, stop scanning parents
99
+ when Model::BlockExpression
100
+ c = container(idx)
101
+ if !c.is_a?(Model::Program) &&
102
+ (definition.is_a?(Model::FunctionDefinition) || definition.is_a?(Model::TypeAlias) || definition.is_a?(Model::TypeDefinition))
103
+
104
+ # not ok. These can never be nested in a block
105
+ acceptor.accept(Issues::NOT_ABSOLUTE_TOP_LEVEL, definition)
106
+ else
107
+ # ok, if this is a block representing the body of a class, or is top level
108
+ top(definition, idx)
109
+ end
110
+ when Model::LambdaExpression
111
+ # A LambdaExpression is a BlockExpression, and this check is needed to prevent the polymorph method for BlockExpression
112
+ # to accept a lambda.
113
+ # A lambda can not iteratively create classes, nodes or defines as the lambda does not have a closure.
114
+ acceptor.accept(Issues::NOT_TOP_LEVEL, definition)
115
+ else
116
+ # fail, reached a container that is not top level
117
+ acceptor.accept(Issues::NOT_TOP_LEVEL, definition)
118
+ end
119
+ end
120
+
121
+ # Checks the LHS of an assignment (is it assignable?).
122
+ # If args[0] is true, assignment via index is checked.
123
+ #
124
+ def assign(o, via_index = false)
125
+ @@assignment_visitor.visit_this_1(self, o, via_index)
126
+ end
127
+
128
+ # Checks if the expression has side effect ('idem' is latin for 'the same', here meaning that the evaluation state
129
+ # is known to be unchanged after the expression has been evaluated). The result is not 100% authoritative for
130
+ # negative answers since analysis of function behavior is not possible.
131
+ # @return [Boolean] true if expression is known to have no effect on evaluation state
132
+ #
133
+ def idem(o)
134
+ @@idem_visitor.visit_this_0(self, o)
135
+ end
136
+
137
+ # Returns the last expression in a block, or the expression, if that expression is idem
138
+ def ends_with_idem(o)
139
+ if o.is_a?(Model::BlockExpression)
140
+ last = o.statements[-1]
141
+ idem(last) ? last : nil
142
+ else
143
+ idem(o) ? o : nil
144
+ end
145
+ end
146
+
147
+ #---ASSIGNMENT CHECKS
148
+
149
+ def assign_VariableExpression(o, via_index)
150
+ varname_string = varname_to_s(o.expr)
151
+ if varname_string =~ Patterns::NUMERIC_VAR_NAME
152
+ acceptor.accept(Issues::ILLEGAL_NUMERIC_ASSIGNMENT, o, :varname => varname_string)
153
+ end
154
+ # Can not assign to something in another namespace (i.e. a '::' in the name is not legal)
155
+ if acceptor.will_accept? Issues::CROSS_SCOPE_ASSIGNMENT
156
+ if varname_string =~ /::/
157
+ acceptor.accept(Issues::CROSS_SCOPE_ASSIGNMENT, o, :name => varname_string)
158
+ end
159
+ end
160
+
161
+ # TODO: Could scan for reassignment of the same variable if done earlier in the same container
162
+ # Or if assigning to a parameter (more work).
163
+ end
164
+
165
+ def assign_AccessExpression(o, via_index)
166
+ # Are indexed assignments allowed at all ? $x[x] = '...'
167
+ if acceptor.will_accept? Issues::ILLEGAL_INDEXED_ASSIGNMENT
168
+ acceptor.accept(Issues::ILLEGAL_INDEXED_ASSIGNMENT, o)
169
+ else
170
+ # Then the left expression must be assignable-via-index
171
+ assign(o.left_expr, true)
172
+ end
173
+ end
174
+
175
+ def assign_LiteralList(o, via_index)
176
+ o.values.each { |x| assign(x) }
177
+ end
178
+
179
+ def assign_Object(o, via_index)
180
+ # Can not assign to anything else (differentiate if this is via index or not)
181
+ # i.e. 10 = 'hello' vs. 10['x'] = 'hello' (the root is reported as being in error in both cases)
182
+ #
183
+ acceptor.accept(via_index ? Issues::ILLEGAL_ASSIGNMENT_VIA_INDEX : Issues::ILLEGAL_ASSIGNMENT, o)
184
+ end
185
+
186
+ #---CHECKS
187
+
188
+ def check_Object(o)
189
+ end
190
+
191
+ def check_Factory(o)
192
+ check(o.model)
193
+ end
194
+
195
+ def check_AccessExpression(o)
196
+ # Only min range is checked, all other checks are RT checks as they depend on the resulting type
197
+ # of the LHS.
198
+ if o.keys.size < 1
199
+ acceptor.accept(Issues::MISSING_INDEX, o)
200
+ end
201
+ end
202
+
203
+ def check_AssignmentExpression(o)
204
+ case o.operator
205
+ when '='
206
+ assign(o.left_expr)
207
+ rvalue(o.right_expr)
208
+ when '+=', '-='
209
+ acceptor.accept(Issues::APPENDS_DELETES_NO_LONGER_SUPPORTED, o, { :operator => o.operator })
210
+ else
211
+ acceptor.accept(Issues::UNSUPPORTED_OPERATOR, o, { :operator => o.operator })
212
+ end
213
+ end
214
+
215
+ # Checks that operation with :+> is contained in a ResourceOverride or Collector.
216
+ #
217
+ # Parent of an AttributeOperation can be one of:
218
+ # * CollectExpression
219
+ # * ResourceOverride
220
+ # * ResourceBody (ILLEGAL this is a regular resource expression)
221
+ # * ResourceDefaults (ILLEGAL)
222
+ #
223
+ def check_AttributeOperation(o)
224
+ if o.operator == '+>'
225
+ # Append operator use is constrained
226
+ p = container
227
+ unless p.is_a?(Model::CollectExpression) || p.is_a?(Model::ResourceOverrideExpression)
228
+ acceptor.accept(Issues::ILLEGAL_ATTRIBUTE_APPEND, o, { :name => o.attribute_name, :parent => p })
229
+ end
230
+ end
231
+ rvalue(o.value_expr)
232
+ end
233
+
234
+ def check_AttributesOperation(o)
235
+ # Append operator use is constrained
236
+ p = container
237
+ case p
238
+ when Model::AbstractResource
239
+ # do nothing
240
+ when Model::CollectExpression
241
+ # do nothing
242
+ else
243
+ # protect against just testing a snippet that has no parent, error message will be a bit strange
244
+ # but it is not for a real program.
245
+ parent2 = p.nil? ? o : container(-2)
246
+ unless parent2.is_a?(Model::AbstractResource)
247
+ acceptor.accept(Issues::UNSUPPORTED_OPERATOR_IN_CONTEXT, parent2, :operator => '* =>')
248
+ end
249
+ end
250
+ rvalue(o.expr)
251
+ end
252
+
253
+ def check_BinaryExpression(o)
254
+ rvalue(o.left_expr)
255
+ rvalue(o.right_expr)
256
+ end
257
+
258
+ def resource_without_title?(o)
259
+ if o.instance_of?(Model::BlockExpression)
260
+ statements = o.statements
261
+ statements.length == 2 && statements[0].instance_of?(Model::QualifiedName) && statements[1].instance_of?(Model::LiteralHash)
262
+ else
263
+ false
264
+ end
265
+ end
266
+
267
+ def check_BlockExpression(o)
268
+ if resource_without_title?(o)
269
+ acceptor.accept(Issues::RESOURCE_WITHOUT_TITLE, o, :name => o.statements[0].value)
270
+ else
271
+ o.statements[0..-2].each do |statement|
272
+ if idem(statement)
273
+ acceptor.accept(Issues::IDEM_EXPRESSION_NOT_LAST, statement)
274
+ break # only flag the first
275
+ end
276
+ end
277
+ end
278
+ end
279
+
280
+ def check_CallNamedFunctionExpression(o)
281
+ functor = o.functor_expr
282
+ if functor.is_a?(Model::QualifiedReference) ||
283
+ functor.is_a?(Model::AccessExpression) && functor.left_expr.is_a?(Model::QualifiedReference)
284
+ # ok (a call to a type)
285
+ return nil
286
+ end
287
+
288
+ case functor
289
+ when Model::QualifiedName
290
+ # ok
291
+ nil
292
+ when Model::RenderStringExpression
293
+ # helpful to point out this easy to make Epp error
294
+ acceptor.accept(Issues::ILLEGAL_EPP_PARAMETERS, o)
295
+ else
296
+ acceptor.accept(Issues::ILLEGAL_EXPRESSION, o.functor_expr, { :feature => 'function name', :container => o })
297
+ end
298
+ end
299
+
300
+ def check_EppExpression(o)
301
+ p = container
302
+ if p.is_a?(Model::LambdaExpression)
303
+ internal_check_no_capture(p, o)
304
+ internal_check_parameter_name_uniqueness(p)
305
+ end
306
+ end
307
+
308
+ def check_HeredocExpression(o)
309
+ # Only syntax check static text in heredoc during validation - dynamic text is validated by the evaluator.
310
+ expr = o.text_expr
311
+ if expr.is_a?(Model::LiteralString)
312
+ assert_external_syntax(nil, expr.value, o.syntax, o.text_expr)
313
+ end
314
+ end
315
+
316
+ def check_MethodCallExpression(o)
317
+ unless o.functor_expr.is_a? Model::QualifiedName
318
+ acceptor.accept(Issues::ILLEGAL_EXPRESSION, o.functor_expr, :feature => 'function name', :container => o)
319
+ end
320
+ end
321
+
322
+ def check_CaseExpression(o)
323
+ rvalue(o.test)
324
+ # There can only be one LiteralDefault case option value
325
+ found_default = false
326
+ o.options.each do |option|
327
+ option.values.each do |value|
328
+ next unless value.is_a?(Model::LiteralDefault)
329
+
330
+ # Flag the second default as 'unreachable'
331
+ acceptor.accept(Issues::DUPLICATE_DEFAULT, value, :container => o) if found_default
332
+ found_default = true
333
+ end
334
+ end
335
+ end
336
+
337
+ def check_CaseOption(o)
338
+ o.values.each { |v| rvalue(v) }
339
+ end
340
+
341
+ def check_CollectExpression(o)
342
+ unless o.type_expr.is_a? Model::QualifiedReference
343
+ acceptor.accept(Issues::ILLEGAL_EXPRESSION, o.type_expr, :feature => 'type name', :container => o)
344
+ end
345
+ end
346
+
347
+ # Only used for function names, grammar should not be able to produce something faulty, but
348
+ # check anyway if model is created programmatically (it will fail in transformation to AST for sure).
349
+ def check_NamedAccessExpression(o)
350
+ name = o.right_expr
351
+ unless name.is_a? Model::QualifiedName
352
+ acceptor.accept(Issues::ILLEGAL_EXPRESSION, name, :feature => 'function name', :container => container)
353
+ end
354
+ end
355
+
356
+ RESERVED_TYPE_NAMES = {
357
+ 'type' => true,
358
+ 'any' => true,
359
+ 'unit' => true,
360
+ 'scalar' => true,
361
+ 'boolean' => true,
362
+ 'numeric' => true,
363
+ 'integer' => true,
364
+ 'float' => true,
365
+ 'collection' => true,
366
+ 'array' => true,
367
+ 'hash' => true,
368
+ 'tuple' => true,
369
+ 'struct' => true,
370
+ 'variant' => true,
371
+ 'optional' => true,
372
+ 'enum' => true,
373
+ 'regexp' => true,
374
+ 'pattern' => true,
375
+ 'runtime' => true,
376
+ 'init' => true,
377
+ 'object' => true,
378
+ 'sensitive' => true,
379
+ 'semver' => true,
380
+ 'semverrange' => true,
381
+ 'string' => true,
382
+ 'timestamp' => true,
383
+ 'timespan' => true,
384
+ 'typeset' => true,
385
+ }
386
+
387
+ FUTURE_RESERVED_WORDS = {
388
+ 'plan' => true
389
+ }
390
+
391
+ # for 'class', 'define', and function
392
+ def check_NamedDefinition(o)
393
+ top(o)
394
+ if o.name !~ Patterns::CLASSREF_DECL
395
+ acceptor.accept(Issues::ILLEGAL_DEFINITION_NAME, o, { :name => o.name })
396
+ end
397
+
398
+ internal_check_file_namespace(o)
399
+ internal_check_reserved_type_name(o, o.name)
400
+ internal_check_future_reserved_word(o, o.name)
401
+ end
402
+
403
+ def check_TypeAlias(o)
404
+ top(o)
405
+ if o.name !~ Patterns::CLASSREF_EXT_DECL
406
+ acceptor.accept(Issues::ILLEGAL_DEFINITION_NAME, o, { :name => o.name })
407
+ end
408
+ internal_check_reserved_type_name(o, o.name)
409
+ internal_check_type_ref(o, o.type_expr)
410
+ end
411
+
412
+ def check_TypeMapping(o)
413
+ top(o)
414
+ lhs = o.type_expr
415
+ lhs_type = 0 # Not Runtime
416
+ if lhs.is_a?(Model::AccessExpression)
417
+ left = lhs.left_expr
418
+ if left.is_a?(Model::QualifiedReference) && left.cased_value == 'Runtime'
419
+ lhs_type = 1 # Runtime
420
+ keys = lhs.keys
421
+
422
+ # Must be a literal string or pattern replacement
423
+ lhs_type = 2 if keys.size == 2 && pattern_with_replacement?(keys[1])
424
+ end
425
+ end
426
+
427
+ if lhs_type == 0
428
+ # This is not a TypeMapping. Something other than Runtime[] on LHS
429
+ acceptor.accept(Issues::UNSUPPORTED_EXPRESSION, o)
430
+ else
431
+ rhs = o.mapping_expr
432
+ if pattern_with_replacement?(rhs)
433
+ acceptor.accept(Issues::ILLEGAL_SINGLE_TYPE_MAPPING, o) if lhs_type == 1
434
+ elsif type_ref?(rhs)
435
+ acceptor.accept(Issues::ILLEGAL_REGEXP_TYPE_MAPPING, o) if lhs_type == 2
436
+ else
437
+ acceptor.accept(lhs_type == 1 ? Issues::ILLEGAL_SINGLE_TYPE_MAPPING : Issues::ILLEGAL_REGEXP_TYPE_MAPPING, o)
438
+ end
439
+ end
440
+ end
441
+
442
+ def pattern_with_replacement?(o)
443
+ if o.is_a?(Model::LiteralList)
444
+ v = o.values
445
+ v.size == 2 && v[0].is_a?(Model::LiteralRegularExpression) && v[1].is_a?(Model::LiteralString)
446
+ else
447
+ false
448
+ end
449
+ end
450
+
451
+ def type_ref?(o)
452
+ o = o.left_expr if o.is_a?(Model::AccessExpression)
453
+ o.is_a?(Model::QualifiedReference)
454
+ end
455
+
456
+ def check_TypeDefinition(o)
457
+ top(o)
458
+ internal_check_reserved_type_name(o, o.name)
459
+ # TODO: Check TypeDefinition body. For now, just error out
460
+ acceptor.accept(Issues::UNSUPPORTED_EXPRESSION, o)
461
+ end
462
+
463
+ def check_FunctionDefinition(o)
464
+ check_NamedDefinition(o)
465
+ internal_check_return_type(o)
466
+ internal_check_parameter_name_uniqueness(o)
467
+ end
468
+
469
+ def check_HostClassDefinition(o)
470
+ check_NamedDefinition(o)
471
+ internal_check_no_capture(o)
472
+ internal_check_parameter_name_uniqueness(o)
473
+ internal_check_reserved_params(o)
474
+ internal_check_no_idem_last(o)
475
+ internal_check_parameter_type_literal(o)
476
+ end
477
+
478
+ def check_ResourceTypeDefinition(o)
479
+ check_NamedDefinition(o)
480
+ internal_check_no_capture(o)
481
+ internal_check_parameter_name_uniqueness(o)
482
+ internal_check_reserved_params(o)
483
+ internal_check_no_idem_last(o)
484
+ end
485
+
486
+ def internal_check_parameter_type_literal(o)
487
+ o.parameters.each do |p|
488
+ next unless p.type_expr
489
+
490
+ type = nil
491
+ catch :not_literal do
492
+ type = literal(p.type_expr)
493
+ end
494
+ acceptor.accept(Issues::ILLEGAL_NONLITERAL_PARAMETER_TYPE, p, { name: p.name, type_class: p.type_expr.class }) if type.nil?
495
+ end
496
+ end
497
+
498
+ def internal_check_return_type(o)
499
+ r = o.return_type
500
+ internal_check_type_ref(o, r) unless r.nil?
501
+ end
502
+
503
+ def internal_check_type_ref(o, r)
504
+ n = r.is_a?(Model::AccessExpression) ? r.left_expr : r
505
+ if n.is_a? Model::QualifiedReference
506
+ internal_check_future_reserved_word(r, n.value)
507
+ else
508
+ acceptor.accept(Issues::ILLEGAL_EXPRESSION, r, :feature => 'a type reference', :container => o)
509
+ end
510
+ end
511
+
512
+ def internal_check_no_idem_last(o)
513
+ violator = ends_with_idem(o.body)
514
+ if violator
515
+ acceptor.accept(Issues::IDEM_NOT_ALLOWED_LAST, violator, { :container => o }) unless resource_without_title?(violator)
516
+ end
517
+ end
518
+
519
+ def internal_check_capture_last(o)
520
+ accepted_index = o.parameters.size() - 1
521
+ o.parameters.each_with_index do |p, index|
522
+ if p.captures_rest && index != accepted_index
523
+ acceptor.accept(Issues::CAPTURES_REST_NOT_LAST, p, { :param_name => p.name })
524
+ end
525
+ end
526
+ end
527
+
528
+ def internal_check_no_capture(o, container = o)
529
+ o.parameters.each do |p|
530
+ if p.captures_rest
531
+ acceptor.accept(Issues::CAPTURES_REST_NOT_SUPPORTED, p, { :container => container, :param_name => p.name })
532
+ end
533
+ end
534
+ end
535
+
536
+ def internal_check_reserved_type_name(o, name)
537
+ if RESERVED_TYPE_NAMES[name]
538
+ acceptor.accept(Issues::RESERVED_TYPE_NAME, o, { :name => name })
539
+ end
540
+ end
541
+
542
+ def internal_check_future_reserved_word(o, name)
543
+ if FUTURE_RESERVED_WORDS[name]
544
+ acceptor.accept(Issues::FUTURE_RESERVED_WORD, o, { :word => name })
545
+ end
546
+ end
547
+
548
+ NO_NAMESPACE = :no_namespace
549
+ NO_PATH = :no_path
550
+ BAD_MODULE_FILE = :bad_module_file
551
+
552
+ def internal_check_file_namespace(o)
553
+ file = o.locator.file
554
+ return if file.nil? || file == '' # e.g. puppet apply -e '...'
555
+
556
+ file_namespace = namespace_for_file(file)
557
+ return if file_namespace == NO_NAMESPACE
558
+
559
+ # Downcasing here because check is case-insensitive
560
+ if file_namespace == BAD_MODULE_FILE || !o.name.downcase.start_with?(file_namespace)
561
+ acceptor.accept(Issues::ILLEGAL_DEFINITION_LOCATION, o, { :name => o.name, :file => file })
562
+ end
563
+ end
564
+
565
+ def internal_check_top_construct_in_module(prog)
566
+ return unless prog.is_a?(Model::Program) && !prog.body.nil?
567
+
568
+ # Check that this is a module autoloaded file
569
+ file = prog.locator.file
570
+ return if file.nil?
571
+ return if namespace_for_file(file) == NO_NAMESPACE
572
+
573
+ body = prog.body
574
+ return if prog.body.is_a?(Model::Nop) # Ignore empty or comment-only files
575
+
576
+ if body.is_a?(Model::BlockExpression)
577
+ body.statements.each { |s| acceptor.accept(Issues::ILLEGAL_TOP_CONSTRUCT_LOCATION, s) unless valid_top_construct?(s) }
578
+ else
579
+ acceptor.accept(Issues::ILLEGAL_TOP_CONSTRUCT_LOCATION, body) unless valid_top_construct?(body)
580
+ end
581
+ end
582
+
583
+ def valid_top_construct?(o)
584
+ o.is_a?(Model::Definition) && !o.is_a?(Model::NodeDefinition)
585
+ end
586
+
587
+ # @api private
588
+ class Puppet::Util::FileNamespaceAdapter < Puppet::Pops::Adaptable::Adapter
589
+ attr_accessor :file_to_namespace
590
+
591
+ def self.create_adapter(env)
592
+ adapter = super(env)
593
+ adapter.file_to_namespace = {}
594
+ adapter
595
+ end
596
+ end
597
+
598
+ def namespace_for_file(file)
599
+ env = Puppet.lookup(:current_environment)
600
+ return NO_NAMESPACE if env.nil?
601
+
602
+ adapter = Puppet::Util::FileNamespaceAdapter.adapt(env)
603
+
604
+ file_namespace = adapter.file_to_namespace[file]
605
+ return file_namespace unless file_namespace.nil? # No cache entry, so we do the calculation
606
+
607
+ path = Pathname.new(file)
608
+
609
+ return adapter.file_to_namespace[file] = NO_NAMESPACE if path.extname != ".pp"
610
+
611
+ path = path.expand_path
612
+
613
+ return adapter.file_to_namespace[file] = NO_NAMESPACE if initial_manifest?(path, env.manifest)
614
+
615
+ # All auto-loaded files from modules come from a module search path dir
616
+ relative_path = get_module_relative_path(path, env.full_modulepath)
617
+
618
+ return adapter.file_to_namespace[file] = NO_NAMESPACE if relative_path == NO_PATH
619
+
620
+ # If a file comes from a module, but isn't in the right place, always error
621
+ names = dir_to_names(relative_path)
622
+
623
+ adapter.file_to_namespace[file] = (names == BAD_MODULE_FILE ? BAD_MODULE_FILE : names.join("::").freeze)
624
+ end
625
+
626
+ def initial_manifest?(path, manifest_setting)
627
+ return false if manifest_setting.nil? || manifest_setting == :no_manifest
628
+
629
+ string_path = path.to_s
630
+
631
+ string_path == manifest_setting || string_path.start_with?(manifest_setting)
632
+ end
633
+
634
+ # Get the path of +file_path+ relative to the first directory in
635
+ # +modulepath_directories+ that is an ancestor of +file_path+. Return NO_PATH
636
+ # if none is found.
637
+ def get_module_relative_path(file_path, modulepath_directories)
638
+ clean_file = file_path.cleanpath.to_s
639
+ parent_path = modulepath_directories.find { |path_dir| is_parent_dir_of?(path_dir, clean_file) }
640
+ return NO_PATH if parent_path.nil?
641
+
642
+ file_path.relative_path_from(Pathname.new(parent_path))
643
+ end
644
+ private :get_module_relative_path
645
+
646
+ def is_parent_dir_of?(parent_dir, child_dir)
647
+ parent_dir_path = Pathname.new(parent_dir)
648
+ clean_parent = parent_dir_path.cleanpath.to_s + File::SEPARATOR
649
+
650
+ child_dir.start_with?(clean_parent)
651
+ end
652
+ private :is_parent_dir_of?
653
+
654
+ def dir_to_names(relative_path)
655
+ # Downcasing here because check is case-insensitive
656
+ path_components = relative_path.to_s.downcase.split(File::SEPARATOR)
657
+
658
+ # Example definition dir: manifests in this path:
659
+ # <module name>/manifests/<module subdir>/<classfile>.pp
660
+ dir = path_components[1]
661
+
662
+ # How can we get this result?
663
+ # If it is not an initial manifest, it must come from a module,
664
+ # and from the manifests dir there. This may never get used...
665
+ return BAD_MODULE_FILE unless dir == 'manifests' || dir == 'functions' || dir == 'types' || dir == 'plans'
666
+
667
+ names = path_components[2..-2] # Directories inside module
668
+ names.unshift(path_components[0]) # Name of the module itself
669
+
670
+ # Do not include name of module init file at top level of module
671
+ # e.g. <module name>/manifests/init.pp
672
+ filename = path_components[-1]
673
+ unless path_components.length == 3 && filename == 'init.pp'
674
+ names.push(filename[0..-4]) # Remove .pp from filename
675
+ end
676
+
677
+ names
678
+ end
679
+
680
+ RESERVED_PARAMETERS = {
681
+ 'name' => true,
682
+ 'title' => true,
683
+ }
684
+
685
+ def internal_check_reserved_params(o)
686
+ o.parameters.each do |p|
687
+ if RESERVED_PARAMETERS[p.name]
688
+ acceptor.accept(Issues::RESERVED_PARAMETER, p, { :container => o, :param_name => p.name })
689
+ end
690
+ end
691
+ end
692
+
693
+ def internal_check_parameter_name_uniqueness(o)
694
+ unique = Set.new
695
+ o.parameters.each do |p|
696
+ acceptor.accept(Issues::DUPLICATE_PARAMETER, p, { :param_name => p.name }) unless unique.add?(p.name)
697
+ end
698
+ end
699
+
700
+ def check_IfExpression(o)
701
+ rvalue(o.test)
702
+ end
703
+
704
+ def check_KeyedEntry(o)
705
+ rvalue(o.key)
706
+ rvalue(o.value)
707
+ # In case there are additional things to forbid than non-rvalues
708
+ # acceptor.accept(Issues::ILLEGAL_EXPRESSION, o.key, :feature => 'hash key', :container => container)
709
+ end
710
+
711
+ def check_LambdaExpression(o)
712
+ internal_check_capture_last(o)
713
+ internal_check_return_type(o)
714
+ end
715
+
716
+ def check_LiteralList(o)
717
+ o.values.each { |v| rvalue(v) }
718
+ end
719
+
720
+ def check_LiteralInteger(o)
721
+ v = o.value
722
+ if v < MIN_INTEGER || v > MAX_INTEGER
723
+ acceptor.accept(Issues::NUMERIC_OVERFLOW, o, { :value => v })
724
+ end
725
+ end
726
+
727
+ def check_LiteralHash(o)
728
+ # the keys of a literal hash may be non-literal expressions. They cannot be checked.
729
+ unique = Set.new
730
+ o.entries.each do |entry|
731
+ catch(:not_literal) do
732
+ literal_key = literal(entry.key)
733
+ acceptor.accept(Issues::DUPLICATE_KEY, entry, { :key => literal_key }) if unique.add?(literal_key).nil?
734
+ end
735
+ end
736
+ end
737
+
738
+ def check_NodeDefinition(o)
739
+ # Check that hostnames are valid hostnames (or regular expressions)
740
+ hostname(o.host_matches, o)
741
+ top(o)
742
+ violator = ends_with_idem(o.body)
743
+ if violator
744
+ acceptor.accept(Issues::IDEM_NOT_ALLOWED_LAST, violator, { :container => o }) unless resource_without_title?(violator)
745
+ end
746
+ unless o.parent.nil?
747
+ acceptor.accept(Issues::ILLEGAL_NODE_INHERITANCE, o.parent)
748
+ end
749
+ end
750
+
751
+ # No checking takes place - all expressions using a QualifiedName need to check. This because the
752
+ # rules are slightly different depending on the container (A variable allows a numeric start, but not
753
+ # other names). This means that (if the lexer/parser so chooses) a QualifiedName
754
+ # can be anything when it represents a Bare Word and evaluates to a String.
755
+ #
756
+ def check_QualifiedName(o)
757
+ end
758
+
759
+ # Checks that the value is a valid UpperCaseWord (a CLASSREF), and optionally if it contains a hypen.
760
+ # DOH: QualifiedReferences are created with LOWER CASE NAMES at parse time
761
+ def check_QualifiedReference(o)
762
+ # Is this a valid qualified name?
763
+ if o.cased_value !~ Patterns::CLASSREF_EXT
764
+ acceptor.accept(Issues::ILLEGAL_CLASSREF, o, { :name => o.cased_value })
765
+ end
766
+ end
767
+
768
+ def check_QueryExpression(o)
769
+ query(o.expr) if o.expr # is optional
770
+ end
771
+
772
+ def relation_Object(o)
773
+ rvalue(o)
774
+ end
775
+
776
+ def relation_CollectExpression(o); end
777
+
778
+ def relation_RelationshipExpression(o); end
779
+
780
+ def check_Parameter(o)
781
+ if o.name =~ /^(?:0x)?[0-9]+$/
782
+ acceptor.accept(Issues::ILLEGAL_NUMERIC_PARAMETER, o, :name => o.name)
783
+ end
784
+
785
+ unless o.name =~ Patterns::PARAM_NAME
786
+ acceptor.accept(Issues::ILLEGAL_PARAM_NAME, o, :name => o.name)
787
+ end
788
+ return unless o.value
789
+
790
+ internal_check_illegal_assignment(o.value)
791
+ end
792
+
793
+ def internal_check_illegal_assignment(o)
794
+ if o.is_a?(Model::AssignmentExpression)
795
+ acceptor.accept(Issues::ILLEGAL_ASSIGNMENT_CONTEXT, o)
796
+ else
797
+ # recursively check all contents unless it's a lambda expression. A lambda may contain
798
+ # local assignments
799
+ o._pcore_contents { |model| internal_check_illegal_assignment(model) } unless o.is_a?(Model::LambdaExpression)
800
+ end
801
+ end
802
+
803
+ # relationship_side: resource
804
+ # | resourceref
805
+ # | collection
806
+ # | variable
807
+ # | quotedtext
808
+ # | selector
809
+ # | casestatement
810
+ # | hasharrayaccesses
811
+
812
+ def check_RelationshipExpression(o)
813
+ relation(o.left_expr)
814
+ relation(o.right_expr)
815
+ end
816
+
817
+ def check_ResourceExpression(o)
818
+ # The expression for type name cannot be statically checked - this is instead done at runtime
819
+ # to enable better error message of the result of the expression rather than the static instruction.
820
+ # (This can be revised as there are static constructs that are illegal, but require updating many
821
+ # tests that expect the detailed reporting).
822
+ type_name_expr = o.type_name
823
+ if o.form && o.form != 'regular' && type_name_expr.is_a?(Model::QualifiedName) && type_name_expr.value == 'class'
824
+ acceptor.accept(Issues::CLASS_NOT_VIRTUALIZABLE, o)
825
+ end
826
+ end
827
+
828
+ def check_ResourceBody(o)
829
+ seenUnfolding = false
830
+ o.operations.each do |ao|
831
+ if ao.is_a?(Model::AttributesOperation)
832
+ if seenUnfolding
833
+ acceptor.accept(Issues::MULTIPLE_ATTRIBUTES_UNFOLD, ao)
834
+ else
835
+ seenUnfolding = true
836
+ end
837
+ end
838
+ end
839
+ end
840
+
841
+ def check_ResourceDefaultsExpression(o)
842
+ if o.form != 'regular'
843
+ acceptor.accept(Issues::NOT_VIRTUALIZEABLE, o)
844
+ end
845
+ end
846
+
847
+ def check_ResourceOverrideExpression(o)
848
+ if o.form != 'regular'
849
+ acceptor.accept(Issues::NOT_VIRTUALIZEABLE, o)
850
+ end
851
+ end
852
+
853
+ def check_ReservedWord(o)
854
+ if o.future
855
+ acceptor.accept(Issues::FUTURE_RESERVED_WORD, o, :word => o.word)
856
+ else
857
+ acceptor.accept(Issues::RESERVED_WORD, o, :word => o.word)
858
+ end
859
+ end
860
+
861
+ def check_SelectorExpression(o)
862
+ rvalue(o.left_expr)
863
+ # There can only be one LiteralDefault case option value
864
+ defaults = o.selectors.select { |v| v.matching_expr.is_a?(Model::LiteralDefault) }
865
+ unless defaults.size <= 1
866
+ # Flag the second default as 'unreachable'
867
+ acceptor.accept(Issues::DUPLICATE_DEFAULT, defaults[1].matching_expr, :container => o)
868
+ end
869
+ end
870
+
871
+ def check_SelectorEntry(o)
872
+ rvalue(o.matching_expr)
873
+ end
874
+
875
+ def check_UnaryExpression(o)
876
+ rvalue(o.expr)
877
+ end
878
+
879
+ def check_UnlessExpression(o)
880
+ rvalue(o.test)
881
+ # TODO: Unless may not have an else part that is an IfExpression (grammar denies this though)
882
+ end
883
+
884
+ # Checks that variable is either strictly 0, or a non 0 starting decimal number, or a valid VAR_NAME
885
+ def check_VariableExpression(o)
886
+ # The expression must be a qualified name or an integer
887
+ name_expr = o.expr
888
+ return if name_expr.is_a?(Model::LiteralInteger)
889
+
890
+ if !name_expr.is_a?(Model::QualifiedName)
891
+ acceptor.accept(Issues::ILLEGAL_EXPRESSION, o, :feature => 'name', :container => o)
892
+ else
893
+ # name must be either a decimal string value, or a valid NAME
894
+ name = o.expr.value
895
+ if name[0, 1] =~ /[0-9]/
896
+ unless name =~ Patterns::NUMERIC_VAR_NAME
897
+ acceptor.accept(Issues::ILLEGAL_NUMERIC_VAR_NAME, o, :name => name)
898
+ end
899
+ else
900
+ unless name =~ Patterns::VAR_NAME
901
+ acceptor.accept(Issues::ILLEGAL_VAR_NAME, o, :name => name)
902
+ end
903
+ end
904
+ end
905
+ end
906
+
907
+ #--- HOSTNAME CHECKS
908
+
909
+ # Transforms Array of host matching expressions into a (Ruby) array of AST::HostName
910
+ def hostname_Array(o, semantic)
911
+ o.each { |x| hostname(x, semantic) }
912
+ end
913
+
914
+ def hostname_String(o, semantic)
915
+ # The 3.x checker only checks for illegal characters - if matching /[^-\w.]/ the name is invalid,
916
+ # but this allows pathological names like "a..b......c", "----"
917
+ # TODO: Investigate if more illegal hostnames should be flagged.
918
+ #
919
+ if o =~ Patterns::ILLEGAL_HOSTNAME_CHARS
920
+ acceptor.accept(Issues::ILLEGAL_HOSTNAME_CHARS, semantic, :hostname => o)
921
+ end
922
+ end
923
+
924
+ def hostname_LiteralValue(o, semantic)
925
+ hostname_String(o.value.to_s, o)
926
+ end
927
+
928
+ def hostname_ConcatenatedString(o, semantic)
929
+ # Puppet 3.1. only accepts a concatenated string without interpolated expressions
930
+ the_expr = o.segments.index { |s| s.is_a?(Model::TextExpression) }
931
+ if the_expr
932
+ acceptor.accept(Issues::ILLEGAL_HOSTNAME_INTERPOLATION, o.segments[the_expr].expr)
933
+ elsif o.segments.size() != 1
934
+ # corner case, bad model, concatenation of several plain strings
935
+ acceptor.accept(Issues::ILLEGAL_HOSTNAME_INTERPOLATION, o)
936
+ else
937
+ # corner case, may be ok, but lexer may have replaced with plain string, this is
938
+ # here if it does not
939
+ hostname_String(o.segments[0], o.segments[0])
940
+ end
941
+ end
942
+
943
+ def hostname_QualifiedName(o, semantic)
944
+ hostname_String(o.value.to_s, o)
945
+ end
946
+
947
+ def hostname_QualifiedReference(o, semantic)
948
+ hostname_String(o.value.to_s, o)
949
+ end
950
+
951
+ def hostname_LiteralNumber(o, semantic)
952
+ # always ok
953
+ end
954
+
955
+ def hostname_LiteralDefault(o, semantic)
956
+ # always ok
957
+ end
958
+
959
+ def hostname_LiteralRegularExpression(o, semantic)
960
+ # always ok
961
+ end
962
+
963
+ def hostname_Object(o, semantic)
964
+ acceptor.accept(Issues::ILLEGAL_EXPRESSION, o, { :feature => 'hostname', :container => semantic })
965
+ end
966
+
967
+ #---QUERY CHECKS
968
+
969
+ # Anything not explicitly allowed is flagged as error.
970
+ def query_Object(o)
971
+ acceptor.accept(Issues::ILLEGAL_QUERY_EXPRESSION, o)
972
+ end
973
+
974
+ # Puppet AST only allows == and !=
975
+ #
976
+ def query_ComparisonExpression(o)
977
+ acceptor.accept(Issues::ILLEGAL_QUERY_EXPRESSION, o) unless ['==', '!='].include? o.operator
978
+ end
979
+
980
+ # Allows AND, OR, and checks if left/right are allowed in query.
981
+ def query_BooleanExpression(o)
982
+ query o.left_expr
983
+ query o.right_expr
984
+ end
985
+
986
+ def query_ParenthesizedExpression(o)
987
+ query(o.expr)
988
+ end
989
+
990
+ def query_VariableExpression(o); end
991
+
992
+ def query_QualifiedName(o); end
993
+
994
+ def query_LiteralNumber(o); end
995
+
996
+ def query_LiteralString(o); end
997
+
998
+ def query_LiteralBoolean(o); end
999
+
1000
+ #---RVALUE CHECKS
1001
+
1002
+ # By default, all expressions are reported as being rvalues
1003
+ # Implement specific rvalue checks for those that are not.
1004
+ #
1005
+ def rvalue_Expression(o); end
1006
+
1007
+ def rvalue_CollectExpression(o)
1008
+ acceptor.accept(Issues::NOT_RVALUE, o)
1009
+ end
1010
+
1011
+ def rvalue_Definition(o)
1012
+ acceptor.accept(Issues::NOT_RVALUE, o)
1013
+ end
1014
+
1015
+ def rvalue_NodeDefinition(o)
1016
+ acceptor.accept(Issues::NOT_RVALUE, o)
1017
+ end
1018
+
1019
+ def rvalue_UnaryExpression(o)
1020
+ rvalue o.expr
1021
+ end
1022
+
1023
+ #--IDEM CHECK
1024
+ def idem_Object(o)
1025
+ false
1026
+ end
1027
+
1028
+ def idem_Nop(o)
1029
+ true
1030
+ end
1031
+
1032
+ def idem_NilClass(o)
1033
+ true
1034
+ end
1035
+
1036
+ def idem_Literal(o)
1037
+ true
1038
+ end
1039
+
1040
+ def idem_LiteralList(o)
1041
+ true
1042
+ end
1043
+
1044
+ def idem_LiteralHash(o)
1045
+ true
1046
+ end
1047
+
1048
+ def idem_Factory(o)
1049
+ idem(o.model)
1050
+ end
1051
+
1052
+ def idem_AccessExpression(o)
1053
+ true
1054
+ end
1055
+
1056
+ def idem_BinaryExpression(o)
1057
+ true
1058
+ end
1059
+
1060
+ def idem_MatchExpression(o)
1061
+ false # can have side effect of setting $n match variables
1062
+ end
1063
+
1064
+ def idem_RelationshipExpression(o)
1065
+ # Always side effect
1066
+ false
1067
+ end
1068
+
1069
+ def idem_AssignmentExpression(o)
1070
+ # Always side effect
1071
+ false
1072
+ end
1073
+
1074
+ # Handles UnaryMinusExpression, NotExpression, VariableExpression
1075
+ def idem_UnaryExpression(o)
1076
+ true
1077
+ end
1078
+
1079
+ # Allow (no-effect parentheses) to be used around a productive expression
1080
+ def idem_ParenthesizedExpression(o)
1081
+ idem(o.expr)
1082
+ end
1083
+
1084
+ def idem_RenderExpression(o)
1085
+ false
1086
+ end
1087
+
1088
+ def idem_RenderStringExpression(o)
1089
+ false
1090
+ end
1091
+
1092
+ def idem_BlockExpression(o)
1093
+ # productive if there is at least one productive expression
1094
+ !o.statements.any? { |expr| !idem(expr) }
1095
+ end
1096
+
1097
+ # Returns true even though there may be interpolated expressions that have side effect.
1098
+ # Report as idem anyway, as it is very bad design to evaluate an interpolated string for its
1099
+ # side effect only.
1100
+ def idem_ConcatenatedString(o)
1101
+ true
1102
+ end
1103
+
1104
+ # Heredoc is just a string, but may contain interpolated string (which may have side effects).
1105
+ # This is still bad design and should be reported as idem.
1106
+ def idem_HeredocExpression(o)
1107
+ true
1108
+ end
1109
+
1110
+ # May technically have side effects inside the Selector, but this is bad design - treat as idem
1111
+ def idem_SelectorExpression(o)
1112
+ true
1113
+ end
1114
+
1115
+ # An apply expression exists purely for the side effect of applying a
1116
+ # catalog somewhere, so it always has side effects
1117
+ def idem_ApplyExpression(o)
1118
+ false
1119
+ end
1120
+
1121
+ def idem_IfExpression(o)
1122
+ [o.test, o.then_expr, o.else_expr].all? { |e| idem(e) }
1123
+ end
1124
+
1125
+ # Case expression is idem, if test, and all options are idem
1126
+ def idem_CaseExpression(o)
1127
+ return false unless idem(o.test)
1128
+
1129
+ !o.options.any? { |opt| !idem(opt) }
1130
+ end
1131
+
1132
+ # An option is idem if values and the then_expression are idem
1133
+ def idem_CaseOption(o)
1134
+ return false if o.values.any? { |value| !idem(value) }
1135
+
1136
+ idem(o.then_expr)
1137
+ end
1138
+
1139
+ #--- NON POLYMORPH, NON CHECKING CODE
1140
+
1141
+ # Produces string part of something named, or nil if not a QualifiedName or QualifiedReference
1142
+ #
1143
+ def varname_to_s(o)
1144
+ case o
1145
+ when Model::QualifiedName
1146
+ o.value
1147
+ when Model::QualifiedReference
1148
+ o.value
1149
+ else
1150
+ nil
1151
+ end
1152
+ end
1153
+ end
1154
+ end
1155
+ end