bolt 0.0.1 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of bolt might be problematic. Click here for more details.

Files changed (1291) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +33 -0
  3. data/.gitmodules +12 -0
  4. data/.rspec +2 -0
  5. data/.rubocop.yml +61 -0
  6. data/.travis.yml +18 -0
  7. data/Gemfile +9 -0
  8. data/INSTALL.md +70 -0
  9. data/LICENSE +201 -0
  10. data/README.md +372 -0
  11. data/Rakefile +27 -0
  12. data/Vagrantfile +13 -0
  13. data/appveyor.yml +29 -0
  14. data/bolt.gemspec +50 -0
  15. data/docs/writing_tasks_and_plans.pdf +0 -0
  16. data/exe/bolt +15 -0
  17. data/lib/bolt.rb +13 -0
  18. data/lib/bolt/cli.rb +409 -0
  19. data/lib/bolt/executor.rb +71 -0
  20. data/lib/bolt/node.rb +79 -0
  21. data/lib/bolt/node/formatter.rb +15 -0
  22. data/lib/bolt/node/orch.rb +118 -0
  23. data/lib/bolt/node/result.rb +110 -0
  24. data/lib/bolt/node/ssh.rb +145 -0
  25. data/lib/bolt/node/winrm.rb +237 -0
  26. data/lib/bolt/node_uri.rb +42 -0
  27. data/lib/bolt/result.rb +139 -0
  28. data/lib/bolt/version.rb +3 -0
  29. data/metadata.json +13 -0
  30. data/tasks/init.json +3 -0
  31. data/tasks/init.rb +44 -0
  32. data/ux/bolt-CLI-spec.md +186 -0
  33. data/vendored/facter/lib/facter.rb +261 -0
  34. data/vendored/facter/lib/facter/Cfkey.rb +42 -0
  35. data/vendored/facter/lib/facter/application.rb +206 -0
  36. data/vendored/facter/lib/facter/architecture.rb +50 -0
  37. data/vendored/facter/lib/facter/augeasversion.rb +28 -0
  38. data/vendored/facter/lib/facter/blockdevices.rb +105 -0
  39. data/vendored/facter/lib/facter/core/aggregate.rb +220 -0
  40. data/vendored/facter/lib/facter/core/directed_graph.rb +46 -0
  41. data/vendored/facter/lib/facter/core/execution.rb +123 -0
  42. data/vendored/facter/lib/facter/core/execution/base.rb +81 -0
  43. data/vendored/facter/lib/facter/core/execution/posix.rb +50 -0
  44. data/vendored/facter/lib/facter/core/execution/windows.rb +57 -0
  45. data/vendored/facter/lib/facter/core/logging.rb +197 -0
  46. data/vendored/facter/lib/facter/core/resolvable.rb +94 -0
  47. data/vendored/facter/lib/facter/core/suitable.rb +113 -0
  48. data/vendored/facter/lib/facter/dhcp_servers.rb +45 -0
  49. data/vendored/facter/lib/facter/domain.rb +99 -0
  50. data/vendored/facter/lib/facter/ec2.rb +68 -0
  51. data/vendored/facter/lib/facter/ec2/rest.rb +137 -0
  52. data/vendored/facter/lib/facter/facterversion.rb +15 -0
  53. data/vendored/facter/lib/facter/filesystems.rb +45 -0
  54. data/vendored/facter/lib/facter/fqdn.rb +24 -0
  55. data/vendored/facter/lib/facter/gce.rb +16 -0
  56. data/vendored/facter/lib/facter/gce/metadata.rb +87 -0
  57. data/vendored/facter/lib/facter/gid.rb +25 -0
  58. data/vendored/facter/lib/facter/hardwareisa.rb +20 -0
  59. data/vendored/facter/lib/facter/hardwaremodel.rb +67 -0
  60. data/vendored/facter/lib/facter/hostname.rb +31 -0
  61. data/vendored/facter/lib/facter/id.rb +21 -0
  62. data/vendored/facter/lib/facter/interfaces.rb +58 -0
  63. data/vendored/facter/lib/facter/ipaddress.rb +169 -0
  64. data/vendored/facter/lib/facter/ipaddress6.rb +82 -0
  65. data/vendored/facter/lib/facter/iphostnumber.rb +29 -0
  66. data/vendored/facter/lib/facter/kernel.rb +22 -0
  67. data/vendored/facter/lib/facter/kernelmajversion.rb +23 -0
  68. data/vendored/facter/lib/facter/kernelrelease.rb +45 -0
  69. data/vendored/facter/lib/facter/kernelversion.rb +22 -0
  70. data/vendored/facter/lib/facter/ldom.rb +51 -0
  71. data/vendored/facter/lib/facter/lsbdistcodename.rb +20 -0
  72. data/vendored/facter/lib/facter/lsbdistdescription.rb +21 -0
  73. data/vendored/facter/lib/facter/lsbdistid.rb +20 -0
  74. data/vendored/facter/lib/facter/lsbdistrelease.rb +20 -0
  75. data/vendored/facter/lib/facter/lsbmajdistrelease.rb +22 -0
  76. data/vendored/facter/lib/facter/lsbminordistrelease.rb +22 -0
  77. data/vendored/facter/lib/facter/lsbrelease.rb +20 -0
  78. data/vendored/facter/lib/facter/macaddress.rb +99 -0
  79. data/vendored/facter/lib/facter/macosx.rb +56 -0
  80. data/vendored/facter/lib/facter/manufacturer.rb +68 -0
  81. data/vendored/facter/lib/facter/memory.rb +168 -0
  82. data/vendored/facter/lib/facter/netmask.rb +43 -0
  83. data/vendored/facter/lib/facter/network.rb +20 -0
  84. data/vendored/facter/lib/facter/operatingsystem.rb +24 -0
  85. data/vendored/facter/lib/facter/operatingsystem/base.rb +61 -0
  86. data/vendored/facter/lib/facter/operatingsystem/cumuluslinux.rb +27 -0
  87. data/vendored/facter/lib/facter/operatingsystem/implementation.rb +33 -0
  88. data/vendored/facter/lib/facter/operatingsystem/linux.rb +484 -0
  89. data/vendored/facter/lib/facter/operatingsystem/osreleaselinux.rb +28 -0
  90. data/vendored/facter/lib/facter/operatingsystem/sunos.rb +54 -0
  91. data/vendored/facter/lib/facter/operatingsystem/vmkernel.rb +11 -0
  92. data/vendored/facter/lib/facter/operatingsystem/windows.rb +43 -0
  93. data/vendored/facter/lib/facter/operatingsystemmajrelease.rb +31 -0
  94. data/vendored/facter/lib/facter/operatingsystemrelease.rb +29 -0
  95. data/vendored/facter/lib/facter/os.rb +98 -0
  96. data/vendored/facter/lib/facter/osfamily.rb +18 -0
  97. data/vendored/facter/lib/facter/partitions.rb +39 -0
  98. data/vendored/facter/lib/facter/path.rb +14 -0
  99. data/vendored/facter/lib/facter/physicalprocessorcount.rb +27 -0
  100. data/vendored/facter/lib/facter/processor.rb +52 -0
  101. data/vendored/facter/lib/facter/processors.rb +66 -0
  102. data/vendored/facter/lib/facter/processors/os.rb +244 -0
  103. data/vendored/facter/lib/facter/ps.rb +31 -0
  104. data/vendored/facter/lib/facter/puppetversion.rb +20 -0
  105. data/vendored/facter/lib/facter/rackspace.rb +37 -0
  106. data/vendored/facter/lib/facter/rubyplatform.rb +12 -0
  107. data/vendored/facter/lib/facter/rubysitedir.rb +15 -0
  108. data/vendored/facter/lib/facter/rubyversion.rb +12 -0
  109. data/vendored/facter/lib/facter/selinux.rb +154 -0
  110. data/vendored/facter/lib/facter/ssh.rb +73 -0
  111. data/vendored/facter/lib/facter/system32.rb +21 -0
  112. data/vendored/facter/lib/facter/system_uptime.rb +44 -0
  113. data/vendored/facter/lib/facter/timezone.rb +14 -0
  114. data/vendored/facter/lib/facter/uniqueid.rb +4 -0
  115. data/vendored/facter/lib/facter/uptime.rb +16 -0
  116. data/vendored/facter/lib/facter/uptime_days.rb +13 -0
  117. data/vendored/facter/lib/facter/uptime_hours.rb +13 -0
  118. data/vendored/facter/lib/facter/uptime_seconds.rb +20 -0
  119. data/vendored/facter/lib/facter/util/architecture.rb +19 -0
  120. data/vendored/facter/lib/facter/util/collection.rb +161 -0
  121. data/vendored/facter/lib/facter/util/composite_loader.rb +12 -0
  122. data/vendored/facter/lib/facter/util/config.rb +88 -0
  123. data/vendored/facter/lib/facter/util/confine.rb +66 -0
  124. data/vendored/facter/lib/facter/util/dhcp_servers.rb +58 -0
  125. data/vendored/facter/lib/facter/util/directory_loader.rb +88 -0
  126. data/vendored/facter/lib/facter/util/ec2.rb +106 -0
  127. data/vendored/facter/lib/facter/util/fact.rb +204 -0
  128. data/vendored/facter/lib/facter/util/file_read.rb +37 -0
  129. data/vendored/facter/lib/facter/util/formatter.rb +39 -0
  130. data/vendored/facter/lib/facter/util/ip.rb +340 -0
  131. data/vendored/facter/lib/facter/util/ip/windows.rb +215 -0
  132. data/vendored/facter/lib/facter/util/loader.rb +155 -0
  133. data/vendored/facter/lib/facter/util/macaddress.rb +43 -0
  134. data/vendored/facter/lib/facter/util/macosx.rb +73 -0
  135. data/vendored/facter/lib/facter/util/manufacturer.rb +99 -0
  136. data/vendored/facter/lib/facter/util/memory.rb +228 -0
  137. data/vendored/facter/lib/facter/util/netmask.rb +40 -0
  138. data/vendored/facter/lib/facter/util/normalization.rb +94 -0
  139. data/vendored/facter/lib/facter/util/nothing_loader.rb +12 -0
  140. data/vendored/facter/lib/facter/util/operatingsystem.rb +21 -0
  141. data/vendored/facter/lib/facter/util/parser.rb +168 -0
  142. data/vendored/facter/lib/facter/util/partitions.rb +47 -0
  143. data/vendored/facter/lib/facter/util/partitions/linux.rb +71 -0
  144. data/vendored/facter/lib/facter/util/partitions/openbsd.rb +40 -0
  145. data/vendored/facter/lib/facter/util/plist.rb +24 -0
  146. data/vendored/facter/lib/facter/util/plist/generator.rb +228 -0
  147. data/vendored/facter/lib/facter/util/plist/parser.rb +226 -0
  148. data/vendored/facter/lib/facter/util/posix.rb +16 -0
  149. data/vendored/facter/lib/facter/util/processor.rb +289 -0
  150. data/vendored/facter/lib/facter/util/registry.rb +11 -0
  151. data/vendored/facter/lib/facter/util/resolution.rb +160 -0
  152. data/vendored/facter/lib/facter/util/solaris_zones.rb +158 -0
  153. data/vendored/facter/lib/facter/util/unix_root.rb +5 -0
  154. data/vendored/facter/lib/facter/util/uptime.rb +83 -0
  155. data/vendored/facter/lib/facter/util/values.rb +109 -0
  156. data/vendored/facter/lib/facter/util/virtual.rb +212 -0
  157. data/vendored/facter/lib/facter/util/vlans.rb +21 -0
  158. data/vendored/facter/lib/facter/util/windows.rb +10 -0
  159. data/vendored/facter/lib/facter/util/windows/api_types.rb +135 -0
  160. data/vendored/facter/lib/facter/util/windows/dir.rb +43 -0
  161. data/vendored/facter/lib/facter/util/windows/error.rb +87 -0
  162. data/vendored/facter/lib/facter/util/windows/process.rb +294 -0
  163. data/vendored/facter/lib/facter/util/windows/user.rb +186 -0
  164. data/vendored/facter/lib/facter/util/windows_root.rb +7 -0
  165. data/vendored/facter/lib/facter/util/wmi.rb +49 -0
  166. data/vendored/facter/lib/facter/util/xendomains.rb +28 -0
  167. data/vendored/facter/lib/facter/version.rb +86 -0
  168. data/vendored/facter/lib/facter/virtual.rb +328 -0
  169. data/vendored/facter/lib/facter/vlans.rb +17 -0
  170. data/vendored/facter/lib/facter/xendomains.rb +20 -0
  171. data/vendored/facter/lib/facter/zfs_version.rb +14 -0
  172. data/vendored/facter/lib/facter/zonename.rb +6 -0
  173. data/vendored/facter/lib/facter/zones.rb +18 -0
  174. data/vendored/facter/lib/facter/zpool_version.rb +10 -0
  175. data/vendored/hiera/lib/hiera.rb +119 -0
  176. data/vendored/hiera/lib/hiera/backend.rb +360 -0
  177. data/vendored/hiera/lib/hiera/backend/json_backend.rb +58 -0
  178. data/vendored/hiera/lib/hiera/backend/yaml_backend.rb +63 -0
  179. data/vendored/hiera/lib/hiera/config.rb +97 -0
  180. data/vendored/hiera/lib/hiera/console_logger.rb +13 -0
  181. data/vendored/hiera/lib/hiera/error.rb +4 -0
  182. data/vendored/hiera/lib/hiera/fallback_logger.rb +41 -0
  183. data/vendored/hiera/lib/hiera/filecache.rb +86 -0
  184. data/vendored/hiera/lib/hiera/interpolate.rb +121 -0
  185. data/vendored/hiera/lib/hiera/noop_logger.rb +8 -0
  186. data/vendored/hiera/lib/hiera/puppet_logger.rb +17 -0
  187. data/vendored/hiera/lib/hiera/recursive_guard.rb +20 -0
  188. data/vendored/hiera/lib/hiera/util.rb +65 -0
  189. data/vendored/hiera/lib/hiera/util/win32.rb +40 -0
  190. data/vendored/hiera/lib/hiera/version.rb +89 -0
  191. data/vendored/puppet/lib/hiera/puppet_function.rb +81 -0
  192. data/vendored/puppet/lib/hiera/scope.rb +61 -0
  193. data/vendored/puppet/lib/hiera_puppet.rb +79 -0
  194. data/vendored/puppet/lib/puppet.rb +311 -0
  195. data/vendored/puppet/lib/puppet/agent.rb +114 -0
  196. data/vendored/puppet/lib/puppet/agent/disabler.rb +53 -0
  197. data/vendored/puppet/lib/puppet/agent/locker.rb +52 -0
  198. data/vendored/puppet/lib/puppet/application.rb +485 -0
  199. data/vendored/puppet/lib/puppet/application/agent.rb +468 -0
  200. data/vendored/puppet/lib/puppet/application/apply.rb +358 -0
  201. data/vendored/puppet/lib/puppet/application/ca.rb +11 -0
  202. data/vendored/puppet/lib/puppet/application/catalog.rb +4 -0
  203. data/vendored/puppet/lib/puppet/application/cert.rb +334 -0
  204. data/vendored/puppet/lib/puppet/application/certificate.rb +17 -0
  205. data/vendored/puppet/lib/puppet/application/certificate_request.rb +7 -0
  206. data/vendored/puppet/lib/puppet/application/certificate_revocation_list.rb +7 -0
  207. data/vendored/puppet/lib/puppet/application/config.rb +4 -0
  208. data/vendored/puppet/lib/puppet/application/describe.rb +258 -0
  209. data/vendored/puppet/lib/puppet/application/device.rb +292 -0
  210. data/vendored/puppet/lib/puppet/application/doc.rb +230 -0
  211. data/vendored/puppet/lib/puppet/application/epp.rb +5 -0
  212. data/vendored/puppet/lib/puppet/application/face_base.rb +268 -0
  213. data/vendored/puppet/lib/puppet/application/facts.rb +4 -0
  214. data/vendored/puppet/lib/puppet/application/filebucket.rb +262 -0
  215. data/vendored/puppet/lib/puppet/application/generate.rb +5 -0
  216. data/vendored/puppet/lib/puppet/application/help.rb +4 -0
  217. data/vendored/puppet/lib/puppet/application/indirection_base.rb +4 -0
  218. data/vendored/puppet/lib/puppet/application/key.rb +4 -0
  219. data/vendored/puppet/lib/puppet/application/lookup.rb +361 -0
  220. data/vendored/puppet/lib/puppet/application/man.rb +4 -0
  221. data/vendored/puppet/lib/puppet/application/master.rb +317 -0
  222. data/vendored/puppet/lib/puppet/application/module.rb +4 -0
  223. data/vendored/puppet/lib/puppet/application/node.rb +4 -0
  224. data/vendored/puppet/lib/puppet/application/parser.rb +5 -0
  225. data/vendored/puppet/lib/puppet/application/plugin.rb +3 -0
  226. data/vendored/puppet/lib/puppet/application/report.rb +4 -0
  227. data/vendored/puppet/lib/puppet/application/resource.rb +231 -0
  228. data/vendored/puppet/lib/puppet/application/script.rb +255 -0
  229. data/vendored/puppet/lib/puppet/application/status.rb +4 -0
  230. data/vendored/puppet/lib/puppet/application_support.rb +57 -0
  231. data/vendored/puppet/lib/puppet/bindings.rb +147 -0
  232. data/vendored/puppet/lib/puppet/coercion.rb +40 -0
  233. data/vendored/puppet/lib/puppet/compilable_resource_type.rb +15 -0
  234. data/vendored/puppet/lib/puppet/configurer.rb +447 -0
  235. data/vendored/puppet/lib/puppet/configurer/downloader.rb +67 -0
  236. data/vendored/puppet/lib/puppet/configurer/downloader_factory.rb +34 -0
  237. data/vendored/puppet/lib/puppet/configurer/fact_handler.rb +46 -0
  238. data/vendored/puppet/lib/puppet/configurer/plugin_handler.rb +25 -0
  239. data/vendored/puppet/lib/puppet/confine.rb +80 -0
  240. data/vendored/puppet/lib/puppet/confine/any.rb +26 -0
  241. data/vendored/puppet/lib/puppet/confine/exists.rb +19 -0
  242. data/vendored/puppet/lib/puppet/confine/false.rb +19 -0
  243. data/vendored/puppet/lib/puppet/confine/feature.rb +17 -0
  244. data/vendored/puppet/lib/puppet/confine/true.rb +20 -0
  245. data/vendored/puppet/lib/puppet/confine/variable.rb +59 -0
  246. data/vendored/puppet/lib/puppet/confine_collection.rb +50 -0
  247. data/vendored/puppet/lib/puppet/confiner.rb +46 -0
  248. data/vendored/puppet/lib/puppet/context.rb +116 -0
  249. data/vendored/puppet/lib/puppet/context/trusted_information.rb +76 -0
  250. data/vendored/puppet/lib/puppet/daemon.rb +195 -0
  251. data/vendored/puppet/lib/puppet/data_binding.rb +14 -0
  252. data/vendored/puppet/lib/puppet/defaults.rb +1957 -0
  253. data/vendored/puppet/lib/puppet/environments.rb +509 -0
  254. data/vendored/puppet/lib/puppet/error.rb +117 -0
  255. data/vendored/puppet/lib/puppet/etc.rb +161 -0
  256. data/vendored/puppet/lib/puppet/external/dot.rb +326 -0
  257. data/vendored/puppet/lib/puppet/external/nagios.rb +46 -0
  258. data/vendored/puppet/lib/puppet/external/nagios/base.rb +472 -0
  259. data/vendored/puppet/lib/puppet/external/nagios/grammar.ry +248 -0
  260. data/vendored/puppet/lib/puppet/external/nagios/makefile +9 -0
  261. data/vendored/puppet/lib/puppet/external/nagios/parser.rb +400 -0
  262. data/vendored/puppet/lib/puppet/external/pson/common.rb +374 -0
  263. data/vendored/puppet/lib/puppet/external/pson/pure.rb +15 -0
  264. data/vendored/puppet/lib/puppet/external/pson/pure/generator.rb +395 -0
  265. data/vendored/puppet/lib/puppet/external/pson/pure/parser.rb +307 -0
  266. data/vendored/puppet/lib/puppet/external/pson/version.rb +8 -0
  267. data/vendored/puppet/lib/puppet/face.rb +12 -0
  268. data/vendored/puppet/lib/puppet/face/ca.rb +266 -0
  269. data/vendored/puppet/lib/puppet/face/catalog.rb +130 -0
  270. data/vendored/puppet/lib/puppet/face/catalog/select.rb +49 -0
  271. data/vendored/puppet/lib/puppet/face/certificate.rb +165 -0
  272. data/vendored/puppet/lib/puppet/face/certificate_request.rb +56 -0
  273. data/vendored/puppet/lib/puppet/face/certificate_revocation_list.rb +56 -0
  274. data/vendored/puppet/lib/puppet/face/config.rb +119 -0
  275. data/vendored/puppet/lib/puppet/face/epp.rb +527 -0
  276. data/vendored/puppet/lib/puppet/face/facts.rb +38 -0
  277. data/vendored/puppet/lib/puppet/face/generate.rb +64 -0
  278. data/vendored/puppet/lib/puppet/face/help.rb +205 -0
  279. data/vendored/puppet/lib/puppet/face/help/action.erb +86 -0
  280. data/vendored/puppet/lib/puppet/face/help/face.erb +114 -0
  281. data/vendored/puppet/lib/puppet/face/help/global.erb +16 -0
  282. data/vendored/puppet/lib/puppet/face/help/man.erb +152 -0
  283. data/vendored/puppet/lib/puppet/face/key.rb +16 -0
  284. data/vendored/puppet/lib/puppet/face/man.rb +101 -0
  285. data/vendored/puppet/lib/puppet/face/module.rb +19 -0
  286. data/vendored/puppet/lib/puppet/face/module/build.rb +63 -0
  287. data/vendored/puppet/lib/puppet/face/module/changes.rb +42 -0
  288. data/vendored/puppet/lib/puppet/face/module/generate.rb +251 -0
  289. data/vendored/puppet/lib/puppet/face/module/install.rb +149 -0
  290. data/vendored/puppet/lib/puppet/face/module/list.rb +279 -0
  291. data/vendored/puppet/lib/puppet/face/module/search.rb +94 -0
  292. data/vendored/puppet/lib/puppet/face/module/uninstall.rb +81 -0
  293. data/vendored/puppet/lib/puppet/face/module/upgrade.rb +90 -0
  294. data/vendored/puppet/lib/puppet/face/node.rb +42 -0
  295. data/vendored/puppet/lib/puppet/face/node/clean.rb +96 -0
  296. data/vendored/puppet/lib/puppet/face/parser.rb +161 -0
  297. data/vendored/puppet/lib/puppet/face/plugin.rb +58 -0
  298. data/vendored/puppet/lib/puppet/face/report.rb +54 -0
  299. data/vendored/puppet/lib/puppet/face/resource.rb +53 -0
  300. data/vendored/puppet/lib/puppet/face/status.rb +50 -0
  301. data/vendored/puppet/lib/puppet/feature/base.rb +95 -0
  302. data/vendored/puppet/lib/puppet/feature/bolt.rb +3 -0
  303. data/vendored/puppet/lib/puppet/feature/cfpropertylist.rb +3 -0
  304. data/vendored/puppet/lib/puppet/feature/eventlog.rb +5 -0
  305. data/vendored/puppet/lib/puppet/feature/hiera_eyaml.rb +3 -0
  306. data/vendored/puppet/lib/puppet/feature/hocon.rb +3 -0
  307. data/vendored/puppet/lib/puppet/feature/libuser.rb +8 -0
  308. data/vendored/puppet/lib/puppet/feature/msgpack.rb +3 -0
  309. data/vendored/puppet/lib/puppet/feature/pe_license.rb +4 -0
  310. data/vendored/puppet/lib/puppet/feature/rack.rb +19 -0
  311. data/vendored/puppet/lib/puppet/feature/selinux.rb +3 -0
  312. data/vendored/puppet/lib/puppet/feature/ssh.rb +3 -0
  313. data/vendored/puppet/lib/puppet/feature/telnet.rb +9 -0
  314. data/vendored/puppet/lib/puppet/feature/zlib.rb +5 -0
  315. data/vendored/puppet/lib/puppet/file_bucket.rb +4 -0
  316. data/vendored/puppet/lib/puppet/file_bucket/dipper.rb +174 -0
  317. data/vendored/puppet/lib/puppet/file_bucket/file.rb +131 -0
  318. data/vendored/puppet/lib/puppet/file_serving.rb +3 -0
  319. data/vendored/puppet/lib/puppet/file_serving/base.rb +85 -0
  320. data/vendored/puppet/lib/puppet/file_serving/configuration.rb +112 -0
  321. data/vendored/puppet/lib/puppet/file_serving/configuration/parser.rb +123 -0
  322. data/vendored/puppet/lib/puppet/file_serving/content.rb +43 -0
  323. data/vendored/puppet/lib/puppet/file_serving/fileset.rb +174 -0
  324. data/vendored/puppet/lib/puppet/file_serving/http_metadata.rb +46 -0
  325. data/vendored/puppet/lib/puppet/file_serving/metadata.rb +163 -0
  326. data/vendored/puppet/lib/puppet/file_serving/mount.rb +39 -0
  327. data/vendored/puppet/lib/puppet/file_serving/mount/file.rb +121 -0
  328. data/vendored/puppet/lib/puppet/file_serving/mount/modules.rb +24 -0
  329. data/vendored/puppet/lib/puppet/file_serving/mount/pluginfacts.rb +35 -0
  330. data/vendored/puppet/lib/puppet/file_serving/mount/plugins.rb +35 -0
  331. data/vendored/puppet/lib/puppet/file_serving/mount/tasks.rb +21 -0
  332. data/vendored/puppet/lib/puppet/file_serving/terminus_helper.rb +31 -0
  333. data/vendored/puppet/lib/puppet/file_serving/terminus_selector.rb +32 -0
  334. data/vendored/puppet/lib/puppet/file_system.rb +404 -0
  335. data/vendored/puppet/lib/puppet/file_system/file_impl.rb +154 -0
  336. data/vendored/puppet/lib/puppet/file_system/memory_file.rb +66 -0
  337. data/vendored/puppet/lib/puppet/file_system/memory_impl.rb +86 -0
  338. data/vendored/puppet/lib/puppet/file_system/path_pattern.rb +98 -0
  339. data/vendored/puppet/lib/puppet/file_system/posix.rb +46 -0
  340. data/vendored/puppet/lib/puppet/file_system/uniquefile.rb +190 -0
  341. data/vendored/puppet/lib/puppet/file_system/windows.rb +130 -0
  342. data/vendored/puppet/lib/puppet/forge.rb +229 -0
  343. data/vendored/puppet/lib/puppet/forge/cache.rb +60 -0
  344. data/vendored/puppet/lib/puppet/forge/errors.rb +112 -0
  345. data/vendored/puppet/lib/puppet/forge/repository.rb +155 -0
  346. data/vendored/puppet/lib/puppet/functions.rb +745 -0
  347. data/vendored/puppet/lib/puppet/functions/alert.rb +14 -0
  348. data/vendored/puppet/lib/puppet/functions/all.rb +104 -0
  349. data/vendored/puppet/lib/puppet/functions/annotate.rb +108 -0
  350. data/vendored/puppet/lib/puppet/functions/any.rb +109 -0
  351. data/vendored/puppet/lib/puppet/functions/assert_type.rb +93 -0
  352. data/vendored/puppet/lib/puppet/functions/binary_file.rb +19 -0
  353. data/vendored/puppet/lib/puppet/functions/break.rb +22 -0
  354. data/vendored/puppet/lib/puppet/functions/call.rb +42 -0
  355. data/vendored/puppet/lib/puppet/functions/contain.rb +39 -0
  356. data/vendored/puppet/lib/puppet/functions/crit.rb +14 -0
  357. data/vendored/puppet/lib/puppet/functions/debug.rb +14 -0
  358. data/vendored/puppet/lib/puppet/functions/defined.rb +160 -0
  359. data/vendored/puppet/lib/puppet/functions/dig.rb +23 -0
  360. data/vendored/puppet/lib/puppet/functions/each.rb +163 -0
  361. data/vendored/puppet/lib/puppet/functions/emerg.rb +14 -0
  362. data/vendored/puppet/lib/puppet/functions/epp.rb +48 -0
  363. data/vendored/puppet/lib/puppet/functions/err.rb +14 -0
  364. data/vendored/puppet/lib/puppet/functions/eyaml_lookup_key.rb +94 -0
  365. data/vendored/puppet/lib/puppet/functions/file_upload.rb +48 -0
  366. data/vendored/puppet/lib/puppet/functions/filter.rb +143 -0
  367. data/vendored/puppet/lib/puppet/functions/find_file.rb +31 -0
  368. data/vendored/puppet/lib/puppet/functions/hiera.rb +88 -0
  369. data/vendored/puppet/lib/puppet/functions/hiera_array.rb +81 -0
  370. data/vendored/puppet/lib/puppet/functions/hiera_hash.rb +92 -0
  371. data/vendored/puppet/lib/puppet/functions/hiera_include.rb +104 -0
  372. data/vendored/puppet/lib/puppet/functions/hocon_data.rb +41 -0
  373. data/vendored/puppet/lib/puppet/functions/import.rb +7 -0
  374. data/vendored/puppet/lib/puppet/functions/include.rb +27 -0
  375. data/vendored/puppet/lib/puppet/functions/info.rb +14 -0
  376. data/vendored/puppet/lib/puppet/functions/inline_epp.rb +59 -0
  377. data/vendored/puppet/lib/puppet/functions/json_data.rb +33 -0
  378. data/vendored/puppet/lib/puppet/functions/lest.rb +17 -0
  379. data/vendored/puppet/lib/puppet/functions/lookup.rb +223 -0
  380. data/vendored/puppet/lib/puppet/functions/map.rb +126 -0
  381. data/vendored/puppet/lib/puppet/functions/match.rb +120 -0
  382. data/vendored/puppet/lib/puppet/functions/new.rb +32 -0
  383. data/vendored/puppet/lib/puppet/functions/next.rb +23 -0
  384. data/vendored/puppet/lib/puppet/functions/notice.rb +14 -0
  385. data/vendored/puppet/lib/puppet/functions/reduce.rb +164 -0
  386. data/vendored/puppet/lib/puppet/functions/regsubst.rb +76 -0
  387. data/vendored/puppet/lib/puppet/functions/require.rb +43 -0
  388. data/vendored/puppet/lib/puppet/functions/return.rb +22 -0
  389. data/vendored/puppet/lib/puppet/functions/reverse_each.rb +25 -0
  390. data/vendored/puppet/lib/puppet/functions/run_command.rb +41 -0
  391. data/vendored/puppet/lib/puppet/functions/run_plan.rb +40 -0
  392. data/vendored/puppet/lib/puppet/functions/run_script.rb +50 -0
  393. data/vendored/puppet/lib/puppet/functions/run_task.rb +73 -0
  394. data/vendored/puppet/lib/puppet/functions/scanf.rb +44 -0
  395. data/vendored/puppet/lib/puppet/functions/slice.rb +111 -0
  396. data/vendored/puppet/lib/puppet/functions/split.rb +47 -0
  397. data/vendored/puppet/lib/puppet/functions/step.rb +26 -0
  398. data/vendored/puppet/lib/puppet/functions/strftime.rb +43 -0
  399. data/vendored/puppet/lib/puppet/functions/then.rb +14 -0
  400. data/vendored/puppet/lib/puppet/functions/tree_each.rb +200 -0
  401. data/vendored/puppet/lib/puppet/functions/type.rb +31 -0
  402. data/vendored/puppet/lib/puppet/functions/unique.rb +132 -0
  403. data/vendored/puppet/lib/puppet/functions/unwrap.rb +40 -0
  404. data/vendored/puppet/lib/puppet/functions/versioncmp.rb +36 -0
  405. data/vendored/puppet/lib/puppet/functions/warning.rb +14 -0
  406. data/vendored/puppet/lib/puppet/functions/with.rb +30 -0
  407. data/vendored/puppet/lib/puppet/functions/yaml_data.rb +42 -0
  408. data/vendored/puppet/lib/puppet/generate/models/type/property.rb +70 -0
  409. data/vendored/puppet/lib/puppet/generate/models/type/type.rb +62 -0
  410. data/vendored/puppet/lib/puppet/generate/templates/type/pcore.erb +42 -0
  411. data/vendored/puppet/lib/puppet/generate/type.rb +239 -0
  412. data/vendored/puppet/lib/puppet/gettext/config.rb +70 -0
  413. data/vendored/puppet/lib/puppet/gettext/stubs.rb +11 -0
  414. data/vendored/puppet/lib/puppet/graph.rb +11 -0
  415. data/vendored/puppet/lib/puppet/graph/key.rb +26 -0
  416. data/vendored/puppet/lib/puppet/graph/prioritizer.rb +29 -0
  417. data/vendored/puppet/lib/puppet/graph/random_prioritizer.rb +16 -0
  418. data/vendored/puppet/lib/puppet/graph/rb_tree_map.rb +388 -0
  419. data/vendored/puppet/lib/puppet/graph/relationship_graph.rb +277 -0
  420. data/vendored/puppet/lib/puppet/graph/sequential_prioritizer.rb +31 -0
  421. data/vendored/puppet/lib/puppet/graph/simple_graph.rb +539 -0
  422. data/vendored/puppet/lib/puppet/graph/title_hash_prioritizer.rb +16 -0
  423. data/vendored/puppet/lib/puppet/indirector.rb +61 -0
  424. data/vendored/puppet/lib/puppet/indirector/catalog/compiler.rb +384 -0
  425. data/vendored/puppet/lib/puppet/indirector/catalog/json.rb +24 -0
  426. data/vendored/puppet/lib/puppet/indirector/catalog/msgpack.rb +6 -0
  427. data/vendored/puppet/lib/puppet/indirector/catalog/rest.rb +6 -0
  428. data/vendored/puppet/lib/puppet/indirector/catalog/store_configs.rb +8 -0
  429. data/vendored/puppet/lib/puppet/indirector/catalog/yaml.rb +22 -0
  430. data/vendored/puppet/lib/puppet/indirector/certificate/ca.rb +9 -0
  431. data/vendored/puppet/lib/puppet/indirector/certificate/disabled_ca.rb +22 -0
  432. data/vendored/puppet/lib/puppet/indirector/certificate/file.rb +9 -0
  433. data/vendored/puppet/lib/puppet/indirector/certificate/rest.rb +16 -0
  434. data/vendored/puppet/lib/puppet/indirector/certificate_request/ca.rb +22 -0
  435. data/vendored/puppet/lib/puppet/indirector/certificate_request/disabled_ca.rb +22 -0
  436. data/vendored/puppet/lib/puppet/indirector/certificate_request/file.rb +8 -0
  437. data/vendored/puppet/lib/puppet/indirector/certificate_request/memory.rb +6 -0
  438. data/vendored/puppet/lib/puppet/indirector/certificate_request/rest.rb +10 -0
  439. data/vendored/puppet/lib/puppet/indirector/certificate_revocation_list/ca.rb +8 -0
  440. data/vendored/puppet/lib/puppet/indirector/certificate_revocation_list/disabled_ca.rb +22 -0
  441. data/vendored/puppet/lib/puppet/indirector/certificate_revocation_list/file.rb +8 -0
  442. data/vendored/puppet/lib/puppet/indirector/certificate_revocation_list/rest.rb +22 -0
  443. data/vendored/puppet/lib/puppet/indirector/certificate_status.rb +4 -0
  444. data/vendored/puppet/lib/puppet/indirector/certificate_status/file.rb +91 -0
  445. data/vendored/puppet/lib/puppet/indirector/certificate_status/rest.rb +11 -0
  446. data/vendored/puppet/lib/puppet/indirector/code.rb +6 -0
  447. data/vendored/puppet/lib/puppet/indirector/data_binding/hiera.rb +7 -0
  448. data/vendored/puppet/lib/puppet/indirector/data_binding/none.rb +8 -0
  449. data/vendored/puppet/lib/puppet/indirector/direct_file_server.rb +17 -0
  450. data/vendored/puppet/lib/puppet/indirector/envelope.rb +11 -0
  451. data/vendored/puppet/lib/puppet/indirector/errors.rb +5 -0
  452. data/vendored/puppet/lib/puppet/indirector/exec.rb +38 -0
  453. data/vendored/puppet/lib/puppet/indirector/face.rb +153 -0
  454. data/vendored/puppet/lib/puppet/indirector/facts/facter.rb +90 -0
  455. data/vendored/puppet/lib/puppet/indirector/facts/memory.rb +9 -0
  456. data/vendored/puppet/lib/puppet/indirector/facts/network_device.rb +27 -0
  457. data/vendored/puppet/lib/puppet/indirector/facts/store_configs.rb +11 -0
  458. data/vendored/puppet/lib/puppet/indirector/facts/yaml.rb +86 -0
  459. data/vendored/puppet/lib/puppet/indirector/file_bucket_file/file.rb +255 -0
  460. data/vendored/puppet/lib/puppet/indirector/file_bucket_file/rest.rb +8 -0
  461. data/vendored/puppet/lib/puppet/indirector/file_bucket_file/selector.rb +53 -0
  462. data/vendored/puppet/lib/puppet/indirector/file_content.rb +5 -0
  463. data/vendored/puppet/lib/puppet/indirector/file_content/file.rb +7 -0
  464. data/vendored/puppet/lib/puppet/indirector/file_content/file_server.rb +7 -0
  465. data/vendored/puppet/lib/puppet/indirector/file_content/http.rb +15 -0
  466. data/vendored/puppet/lib/puppet/indirector/file_content/rest.rb +9 -0
  467. data/vendored/puppet/lib/puppet/indirector/file_content/selector.rb +30 -0
  468. data/vendored/puppet/lib/puppet/indirector/file_metadata.rb +5 -0
  469. data/vendored/puppet/lib/puppet/indirector/file_metadata/file.rb +7 -0
  470. data/vendored/puppet/lib/puppet/indirector/file_metadata/file_server.rb +7 -0
  471. data/vendored/puppet/lib/puppet/indirector/file_metadata/http.rb +27 -0
  472. data/vendored/puppet/lib/puppet/indirector/file_metadata/rest.rb +9 -0
  473. data/vendored/puppet/lib/puppet/indirector/file_metadata/selector.rb +30 -0
  474. data/vendored/puppet/lib/puppet/indirector/file_server.rb +59 -0
  475. data/vendored/puppet/lib/puppet/indirector/generic_http.rb +16 -0
  476. data/vendored/puppet/lib/puppet/indirector/hiera.rb +94 -0
  477. data/vendored/puppet/lib/puppet/indirector/indirection.rb +336 -0
  478. data/vendored/puppet/lib/puppet/indirector/json.rb +75 -0
  479. data/vendored/puppet/lib/puppet/indirector/key/ca.rb +16 -0
  480. data/vendored/puppet/lib/puppet/indirector/key/disabled_ca.rb +22 -0
  481. data/vendored/puppet/lib/puppet/indirector/key/file.rb +50 -0
  482. data/vendored/puppet/lib/puppet/indirector/key/memory.rb +6 -0
  483. data/vendored/puppet/lib/puppet/indirector/ldap.rb +80 -0
  484. data/vendored/puppet/lib/puppet/indirector/memory.rb +34 -0
  485. data/vendored/puppet/lib/puppet/indirector/msgpack.rb +83 -0
  486. data/vendored/puppet/lib/puppet/indirector/node/exec.rb +71 -0
  487. data/vendored/puppet/lib/puppet/indirector/node/ldap.rb +259 -0
  488. data/vendored/puppet/lib/puppet/indirector/node/memory.rb +10 -0
  489. data/vendored/puppet/lib/puppet/indirector/node/msgpack.rb +7 -0
  490. data/vendored/puppet/lib/puppet/indirector/node/plain.rb +21 -0
  491. data/vendored/puppet/lib/puppet/indirector/node/rest.rb +7 -0
  492. data/vendored/puppet/lib/puppet/indirector/node/store_configs.rb +8 -0
  493. data/vendored/puppet/lib/puppet/indirector/node/write_only_yaml.rb +37 -0
  494. data/vendored/puppet/lib/puppet/indirector/node/yaml.rb +13 -0
  495. data/vendored/puppet/lib/puppet/indirector/none.rb +9 -0
  496. data/vendored/puppet/lib/puppet/indirector/plain.rb +9 -0
  497. data/vendored/puppet/lib/puppet/indirector/report/msgpack.rb +11 -0
  498. data/vendored/puppet/lib/puppet/indirector/report/processor.rb +59 -0
  499. data/vendored/puppet/lib/puppet/indirector/report/rest.rb +28 -0
  500. data/vendored/puppet/lib/puppet/indirector/report/yaml.rb +11 -0
  501. data/vendored/puppet/lib/puppet/indirector/request.rb +274 -0
  502. data/vendored/puppet/lib/puppet/indirector/resource/ral.rb +63 -0
  503. data/vendored/puppet/lib/puppet/indirector/resource/store_configs.rb +12 -0
  504. data/vendored/puppet/lib/puppet/indirector/resource/validator.rb +8 -0
  505. data/vendored/puppet/lib/puppet/indirector/rest.rb +348 -0
  506. data/vendored/puppet/lib/puppet/indirector/ssl_file.rb +201 -0
  507. data/vendored/puppet/lib/puppet/indirector/status.rb +3 -0
  508. data/vendored/puppet/lib/puppet/indirector/status/local.rb +12 -0
  509. data/vendored/puppet/lib/puppet/indirector/status/rest.rb +9 -0
  510. data/vendored/puppet/lib/puppet/indirector/store_configs.rb +30 -0
  511. data/vendored/puppet/lib/puppet/indirector/terminus.rb +169 -0
  512. data/vendored/puppet/lib/puppet/indirector/yaml.rb +63 -0
  513. data/vendored/puppet/lib/puppet/info_service.rb +17 -0
  514. data/vendored/puppet/lib/puppet/info_service/class_information_service.rb +110 -0
  515. data/vendored/puppet/lib/puppet/info_service/task_information_service.rb +32 -0
  516. data/vendored/puppet/lib/puppet/interface.rb +236 -0
  517. data/vendored/puppet/lib/puppet/interface/action.rb +374 -0
  518. data/vendored/puppet/lib/puppet/interface/action_builder.rb +149 -0
  519. data/vendored/puppet/lib/puppet/interface/action_manager.rb +97 -0
  520. data/vendored/puppet/lib/puppet/interface/documentation.rb +342 -0
  521. data/vendored/puppet/lib/puppet/interface/face_collection.rb +130 -0
  522. data/vendored/puppet/lib/puppet/interface/option.rb +150 -0
  523. data/vendored/puppet/lib/puppet/interface/option_builder.rb +91 -0
  524. data/vendored/puppet/lib/puppet/interface/option_manager.rb +99 -0
  525. data/vendored/puppet/lib/puppet/loaders.rb +26 -0
  526. data/vendored/puppet/lib/puppet/metatype/manager.rb +195 -0
  527. data/vendored/puppet/lib/puppet/module.rb +473 -0
  528. data/vendored/puppet/lib/puppet/module/task.rb +90 -0
  529. data/vendored/puppet/lib/puppet/module_tool.rb +196 -0
  530. data/vendored/puppet/lib/puppet/module_tool/applications.rb +14 -0
  531. data/vendored/puppet/lib/puppet/module_tool/applications/application.rb +90 -0
  532. data/vendored/puppet/lib/puppet/module_tool/applications/builder.rb +148 -0
  533. data/vendored/puppet/lib/puppet/module_tool/applications/checksummer.rb +62 -0
  534. data/vendored/puppet/lib/puppet/module_tool/applications/installer.rb +352 -0
  535. data/vendored/puppet/lib/puppet/module_tool/applications/searcher.rb +29 -0
  536. data/vendored/puppet/lib/puppet/module_tool/applications/uninstaller.rb +118 -0
  537. data/vendored/puppet/lib/puppet/module_tool/applications/unpacker.rb +100 -0
  538. data/vendored/puppet/lib/puppet/module_tool/applications/upgrader.rb +278 -0
  539. data/vendored/puppet/lib/puppet/module_tool/checksums.rb +49 -0
  540. data/vendored/puppet/lib/puppet/module_tool/contents_description.rb +88 -0
  541. data/vendored/puppet/lib/puppet/module_tool/dependency.rb +41 -0
  542. data/vendored/puppet/lib/puppet/module_tool/errors.rb +11 -0
  543. data/vendored/puppet/lib/puppet/module_tool/errors/base.rb +15 -0
  544. data/vendored/puppet/lib/puppet/module_tool/errors/installer.rb +95 -0
  545. data/vendored/puppet/lib/puppet/module_tool/errors/shared.rb +190 -0
  546. data/vendored/puppet/lib/puppet/module_tool/errors/uninstaller.rb +49 -0
  547. data/vendored/puppet/lib/puppet/module_tool/errors/upgrader.rb +63 -0
  548. data/vendored/puppet/lib/puppet/module_tool/install_directory.rb +45 -0
  549. data/vendored/puppet/lib/puppet/module_tool/installed_modules.rb +96 -0
  550. data/vendored/puppet/lib/puppet/module_tool/local_tarball.rb +90 -0
  551. data/vendored/puppet/lib/puppet/module_tool/metadata.rb +224 -0
  552. data/vendored/puppet/lib/puppet/module_tool/shared_behaviors.rb +180 -0
  553. data/vendored/puppet/lib/puppet/module_tool/skeleton/templates/generator/.fixtures.yml.erb +7 -0
  554. data/vendored/puppet/lib/puppet/module_tool/skeleton/templates/generator/.gitignore +18 -0
  555. data/vendored/puppet/lib/puppet/module_tool/skeleton/templates/generator/.rubocop.yml +42 -0
  556. data/vendored/puppet/lib/puppet/module_tool/skeleton/templates/generator/.yardopts +1 -0
  557. data/vendored/puppet/lib/puppet/module_tool/skeleton/templates/generator/Gemfile +18 -0
  558. data/vendored/puppet/lib/puppet/module_tool/skeleton/templates/generator/README.md.erb +89 -0
  559. data/vendored/puppet/lib/puppet/module_tool/skeleton/templates/generator/Rakefile +32 -0
  560. data/vendored/puppet/lib/puppet/module_tool/skeleton/templates/generator/examples/init.pp.erb +12 -0
  561. data/vendored/puppet/lib/puppet/module_tool/skeleton/templates/generator/manifests/init.pp.erb +48 -0
  562. data/vendored/puppet/lib/puppet/module_tool/skeleton/templates/generator/metadata.json.erb +1 -0
  563. data/vendored/puppet/lib/puppet/module_tool/skeleton/templates/generator/spec/classes/init_spec.rb.erb +6 -0
  564. data/vendored/puppet/lib/puppet/module_tool/skeleton/templates/generator/spec/spec_helper.rb +1 -0
  565. data/vendored/puppet/lib/puppet/module_tool/tar.rb +18 -0
  566. data/vendored/puppet/lib/puppet/module_tool/tar/gnu.rb +19 -0
  567. data/vendored/puppet/lib/puppet/module_tool/tar/mini.rb +53 -0
  568. data/vendored/puppet/lib/puppet/network.rb +3 -0
  569. data/vendored/puppet/lib/puppet/network/auth_config_parser.rb +85 -0
  570. data/vendored/puppet/lib/puppet/network/authconfig.rb +112 -0
  571. data/vendored/puppet/lib/puppet/network/authorization.rb +41 -0
  572. data/vendored/puppet/lib/puppet/network/authstore.rb +282 -0
  573. data/vendored/puppet/lib/puppet/network/client_request.rb +29 -0
  574. data/vendored/puppet/lib/puppet/network/format.rb +110 -0
  575. data/vendored/puppet/lib/puppet/network/format_handler.rb +108 -0
  576. data/vendored/puppet/lib/puppet/network/format_support.rb +134 -0
  577. data/vendored/puppet/lib/puppet/network/formats.rb +171 -0
  578. data/vendored/puppet/lib/puppet/network/http.rb +30 -0
  579. data/vendored/puppet/lib/puppet/network/http/api.rb +44 -0
  580. data/vendored/puppet/lib/puppet/network/http/api/ca.rb +2 -0
  581. data/vendored/puppet/lib/puppet/network/http/api/ca/v1.rb +11 -0
  582. data/vendored/puppet/lib/puppet/network/http/api/indirected_routes.rb +278 -0
  583. data/vendored/puppet/lib/puppet/network/http/api/indirection_type.rb +32 -0
  584. data/vendored/puppet/lib/puppet/network/http/api/master.rb +2 -0
  585. data/vendored/puppet/lib/puppet/network/http/api/master/v3.rb +28 -0
  586. data/vendored/puppet/lib/puppet/network/http/api/master/v3/authorization.rb +18 -0
  587. data/vendored/puppet/lib/puppet/network/http/api/master/v3/environment.rb +82 -0
  588. data/vendored/puppet/lib/puppet/network/http/api/master/v3/environments.rb +35 -0
  589. data/vendored/puppet/lib/puppet/network/http/compression.rb +120 -0
  590. data/vendored/puppet/lib/puppet/network/http/connection.rb +332 -0
  591. data/vendored/puppet/lib/puppet/network/http/error.rb +73 -0
  592. data/vendored/puppet/lib/puppet/network/http/factory.rb +47 -0
  593. data/vendored/puppet/lib/puppet/network/http/handler.rb +183 -0
  594. data/vendored/puppet/lib/puppet/network/http/issues.rb +12 -0
  595. data/vendored/puppet/lib/puppet/network/http/memory_response.rb +13 -0
  596. data/vendored/puppet/lib/puppet/network/http/nocache_pool.rb +21 -0
  597. data/vendored/puppet/lib/puppet/network/http/pool.rb +129 -0
  598. data/vendored/puppet/lib/puppet/network/http/rack.rb +33 -0
  599. data/vendored/puppet/lib/puppet/network/http/rack/rest.rb +162 -0
  600. data/vendored/puppet/lib/puppet/network/http/request.rb +70 -0
  601. data/vendored/puppet/lib/puppet/network/http/response.rb +23 -0
  602. data/vendored/puppet/lib/puppet/network/http/route.rb +100 -0
  603. data/vendored/puppet/lib/puppet/network/http/session.rb +17 -0
  604. data/vendored/puppet/lib/puppet/network/http/site.rb +39 -0
  605. data/vendored/puppet/lib/puppet/network/http/webrick.rb +125 -0
  606. data/vendored/puppet/lib/puppet/network/http/webrick/rest.rb +114 -0
  607. data/vendored/puppet/lib/puppet/network/http_pool.rb +61 -0
  608. data/vendored/puppet/lib/puppet/network/resolver.rb +86 -0
  609. data/vendored/puppet/lib/puppet/network/rest_controller.rb +2 -0
  610. data/vendored/puppet/lib/puppet/network/rights.rb +209 -0
  611. data/vendored/puppet/lib/puppet/network/server.rb +39 -0
  612. data/vendored/puppet/lib/puppet/node.rb +262 -0
  613. data/vendored/puppet/lib/puppet/node/environment.rb +572 -0
  614. data/vendored/puppet/lib/puppet/node/facts.rb +128 -0
  615. data/vendored/puppet/lib/puppet/parameter.rb +567 -0
  616. data/vendored/puppet/lib/puppet/parameter/boolean.rb +15 -0
  617. data/vendored/puppet/lib/puppet/parameter/package_options.rb +31 -0
  618. data/vendored/puppet/lib/puppet/parameter/path.rb +57 -0
  619. data/vendored/puppet/lib/puppet/parameter/value.rb +91 -0
  620. data/vendored/puppet/lib/puppet/parameter/value_collection.rb +212 -0
  621. data/vendored/puppet/lib/puppet/parser.rb +20 -0
  622. data/vendored/puppet/lib/puppet/parser/abstract_compiler.rb +36 -0
  623. data/vendored/puppet/lib/puppet/parser/ast.rb +65 -0
  624. data/vendored/puppet/lib/puppet/parser/ast/block_expression.rb +15 -0
  625. data/vendored/puppet/lib/puppet/parser/ast/branch.rb +19 -0
  626. data/vendored/puppet/lib/puppet/parser/ast/hostclass.rb +27 -0
  627. data/vendored/puppet/lib/puppet/parser/ast/leaf.rb +75 -0
  628. data/vendored/puppet/lib/puppet/parser/ast/node.rb +17 -0
  629. data/vendored/puppet/lib/puppet/parser/ast/pops_bridge.rb +273 -0
  630. data/vendored/puppet/lib/puppet/parser/ast/resource.rb +66 -0
  631. data/vendored/puppet/lib/puppet/parser/ast/resource_instance.rb +10 -0
  632. data/vendored/puppet/lib/puppet/parser/ast/resourceparam.rb +31 -0
  633. data/vendored/puppet/lib/puppet/parser/ast/top_level_construct.rb +4 -0
  634. data/vendored/puppet/lib/puppet/parser/compiler.rb +788 -0
  635. data/vendored/puppet/lib/puppet/parser/compiler/catalog_validator.rb +33 -0
  636. data/vendored/puppet/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +64 -0
  637. data/vendored/puppet/lib/puppet/parser/compiler/catalog_validator/relationship_validator.rb +57 -0
  638. data/vendored/puppet/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +20 -0
  639. data/vendored/puppet/lib/puppet/parser/e4_parser_adapter.rb +60 -0
  640. data/vendored/puppet/lib/puppet/parser/environment_compiler.rb +199 -0
  641. data/vendored/puppet/lib/puppet/parser/files.rb +92 -0
  642. data/vendored/puppet/lib/puppet/parser/functions.rb +278 -0
  643. data/vendored/puppet/lib/puppet/parser/functions/assert_type.rb +60 -0
  644. data/vendored/puppet/lib/puppet/parser/functions/binary_file.rb +24 -0
  645. data/vendored/puppet/lib/puppet/parser/functions/break.rb +39 -0
  646. data/vendored/puppet/lib/puppet/parser/functions/contain.rb +30 -0
  647. data/vendored/puppet/lib/puppet/parser/functions/create_resources.rb +112 -0
  648. data/vendored/puppet/lib/puppet/parser/functions/defined.rb +107 -0
  649. data/vendored/puppet/lib/puppet/parser/functions/dig.rb +38 -0
  650. data/vendored/puppet/lib/puppet/parser/functions/digest.rb +5 -0
  651. data/vendored/puppet/lib/puppet/parser/functions/each.rb +104 -0
  652. data/vendored/puppet/lib/puppet/parser/functions/epp.rb +39 -0
  653. data/vendored/puppet/lib/puppet/parser/functions/fail.rb +4 -0
  654. data/vendored/puppet/lib/puppet/parser/functions/file.rb +33 -0
  655. data/vendored/puppet/lib/puppet/parser/functions/filter.rb +78 -0
  656. data/vendored/puppet/lib/puppet/parser/functions/find_file.rb +28 -0
  657. data/vendored/puppet/lib/puppet/parser/functions/fqdn_rand.rb +21 -0
  658. data/vendored/puppet/lib/puppet/parser/functions/generate.rb +38 -0
  659. data/vendored/puppet/lib/puppet/parser/functions/hiera.rb +103 -0
  660. data/vendored/puppet/lib/puppet/parser/functions/hiera_array.rb +92 -0
  661. data/vendored/puppet/lib/puppet/parser/functions/hiera_hash.rb +102 -0
  662. data/vendored/puppet/lib/puppet/parser/functions/hiera_include.rb +102 -0
  663. data/vendored/puppet/lib/puppet/parser/functions/include.rb +34 -0
  664. data/vendored/puppet/lib/puppet/parser/functions/inline_epp.rb +51 -0
  665. data/vendored/puppet/lib/puppet/parser/functions/inline_template.rb +27 -0
  666. data/vendored/puppet/lib/puppet/parser/functions/lest.rb +49 -0
  667. data/vendored/puppet/lib/puppet/parser/functions/lookup.rb +132 -0
  668. data/vendored/puppet/lib/puppet/parser/functions/map.rb +76 -0
  669. data/vendored/puppet/lib/puppet/parser/functions/match.rb +43 -0
  670. data/vendored/puppet/lib/puppet/parser/functions/md5.rb +5 -0
  671. data/vendored/puppet/lib/puppet/parser/functions/new.rb +1006 -0
  672. data/vendored/puppet/lib/puppet/parser/functions/next.rb +38 -0
  673. data/vendored/puppet/lib/puppet/parser/functions/realize.rb +20 -0
  674. data/vendored/puppet/lib/puppet/parser/functions/reduce.rb +137 -0
  675. data/vendored/puppet/lib/puppet/parser/functions/regsubst.rb +62 -0
  676. data/vendored/puppet/lib/puppet/parser/functions/require.rb +40 -0
  677. data/vendored/puppet/lib/puppet/parser/functions/return.rb +71 -0
  678. data/vendored/puppet/lib/puppet/parser/functions/reverse_each.rb +83 -0
  679. data/vendored/puppet/lib/puppet/parser/functions/scanf.rb +38 -0
  680. data/vendored/puppet/lib/puppet/parser/functions/sha1.rb +5 -0
  681. data/vendored/puppet/lib/puppet/parser/functions/shellquote.rb +61 -0
  682. data/vendored/puppet/lib/puppet/parser/functions/slice.rb +39 -0
  683. data/vendored/puppet/lib/puppet/parser/functions/split.rb +28 -0
  684. data/vendored/puppet/lib/puppet/parser/functions/sprintf.rb +36 -0
  685. data/vendored/puppet/lib/puppet/parser/functions/step.rb +84 -0
  686. data/vendored/puppet/lib/puppet/parser/functions/strftime.rb +185 -0
  687. data/vendored/puppet/lib/puppet/parser/functions/tag.rb +12 -0
  688. data/vendored/puppet/lib/puppet/parser/functions/tagged.rb +24 -0
  689. data/vendored/puppet/lib/puppet/parser/functions/template.rb +35 -0
  690. data/vendored/puppet/lib/puppet/parser/functions/then.rb +73 -0
  691. data/vendored/puppet/lib/puppet/parser/functions/type.rb +53 -0
  692. data/vendored/puppet/lib/puppet/parser/functions/versioncmp.rb +30 -0
  693. data/vendored/puppet/lib/puppet/parser/functions/with.rb +28 -0
  694. data/vendored/puppet/lib/puppet/parser/parser_factory.rb +30 -0
  695. data/vendored/puppet/lib/puppet/parser/relationship.rb +83 -0
  696. data/vendored/puppet/lib/puppet/parser/resource.rb +418 -0
  697. data/vendored/puppet/lib/puppet/parser/resource/param.rb +22 -0
  698. data/vendored/puppet/lib/puppet/parser/scope.rb +1112 -0
  699. data/vendored/puppet/lib/puppet/parser/script_compiler.rb +117 -0
  700. data/vendored/puppet/lib/puppet/parser/templatewrapper.rb +101 -0
  701. data/vendored/puppet/lib/puppet/parser/type_loader.rb +149 -0
  702. data/vendored/puppet/lib/puppet/plugins.rb +9 -0
  703. data/vendored/puppet/lib/puppet/plugins/configuration.rb +25 -0
  704. data/vendored/puppet/lib/puppet/plugins/syntax_checkers.rb +98 -0
  705. data/vendored/puppet/lib/puppet/pops.rb +120 -0
  706. data/vendored/puppet/lib/puppet/pops/adaptable.rb +206 -0
  707. data/vendored/puppet/lib/puppet/pops/adapters.rb +138 -0
  708. data/vendored/puppet/lib/puppet/pops/evaluator/access_operator.rb +706 -0
  709. data/vendored/puppet/lib/puppet/pops/evaluator/callable_signature.rb +107 -0
  710. data/vendored/puppet/lib/puppet/pops/evaluator/closure.rb +373 -0
  711. data/vendored/puppet/lib/puppet/pops/evaluator/collector_transformer.rb +233 -0
  712. data/vendored/puppet/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +86 -0
  713. data/vendored/puppet/lib/puppet/pops/evaluator/collectors/catalog_collector.rb +29 -0
  714. data/vendored/puppet/lib/puppet/pops/evaluator/collectors/exported_collector.rb +69 -0
  715. data/vendored/puppet/lib/puppet/pops/evaluator/collectors/fixed_set_collector.rb +37 -0
  716. data/vendored/puppet/lib/puppet/pops/evaluator/compare_operator.rb +252 -0
  717. data/vendored/puppet/lib/puppet/pops/evaluator/epp_evaluator.rb +94 -0
  718. data/vendored/puppet/lib/puppet/pops/evaluator/evaluator_impl.rb +1258 -0
  719. data/vendored/puppet/lib/puppet/pops/evaluator/external_syntax_support.rb +45 -0
  720. data/vendored/puppet/lib/puppet/pops/evaluator/json_strict_literal_evaluator.rb +82 -0
  721. data/vendored/puppet/lib/puppet/pops/evaluator/literal_evaluator.rb +87 -0
  722. data/vendored/puppet/lib/puppet/pops/evaluator/puppet_proc.rb +69 -0
  723. data/vendored/puppet/lib/puppet/pops/evaluator/relationship_operator.rb +185 -0
  724. data/vendored/puppet/lib/puppet/pops/evaluator/runtime3_converter.rb +200 -0
  725. data/vendored/puppet/lib/puppet/pops/evaluator/runtime3_resource_support.rb +117 -0
  726. data/vendored/puppet/lib/puppet/pops/evaluator/runtime3_support.rb +538 -0
  727. data/vendored/puppet/lib/puppet/pops/functions/dispatch.rb +100 -0
  728. data/vendored/puppet/lib/puppet/pops/functions/dispatcher.rb +71 -0
  729. data/vendored/puppet/lib/puppet/pops/functions/function.rb +135 -0
  730. data/vendored/puppet/lib/puppet/pops/issue_reporter.rb +115 -0
  731. data/vendored/puppet/lib/puppet/pops/issues.rb +888 -0
  732. data/vendored/puppet/lib/puppet/pops/label_provider.rb +90 -0
  733. data/vendored/puppet/lib/puppet/pops/loader/base_loader.rb +166 -0
  734. data/vendored/puppet/lib/puppet/pops/loader/dependency_loader.rb +92 -0
  735. data/vendored/puppet/lib/puppet/pops/loader/gem_support.rb +49 -0
  736. data/vendored/puppet/lib/puppet/pops/loader/loader.rb +204 -0
  737. data/vendored/puppet/lib/puppet/pops/loader/loader_paths.rb +296 -0
  738. data/vendored/puppet/lib/puppet/pops/loader/module_loaders.rb +452 -0
  739. data/vendored/puppet/lib/puppet/pops/loader/null_loader.rb +60 -0
  740. data/vendored/puppet/lib/puppet/pops/loader/predefined_loader.rb +24 -0
  741. data/vendored/puppet/lib/puppet/pops/loader/puppet_function_instantiator.rb +84 -0
  742. data/vendored/puppet/lib/puppet/pops/loader/puppet_plan_instantiator.rb +84 -0
  743. data/vendored/puppet/lib/puppet/pops/loader/puppet_resource_type_impl_instantiator.rb +79 -0
  744. data/vendored/puppet/lib/puppet/pops/loader/ruby_function_instantiator.rb +46 -0
  745. data/vendored/puppet/lib/puppet/pops/loader/runtime3_type_loader.rb +101 -0
  746. data/vendored/puppet/lib/puppet/pops/loader/simple_environment_loader.rb +20 -0
  747. data/vendored/puppet/lib/puppet/pops/loader/static_loader.rb +164 -0
  748. data/vendored/puppet/lib/puppet/pops/loader/task_instantiator.rb +117 -0
  749. data/vendored/puppet/lib/puppet/pops/loader/type_definition_instantiator.rb +97 -0
  750. data/vendored/puppet/lib/puppet/pops/loader/typed_name.rb +54 -0
  751. data/vendored/puppet/lib/puppet/pops/loader/uri_helper.rb +22 -0
  752. data/vendored/puppet/lib/puppet/pops/loaders.rb +517 -0
  753. data/vendored/puppet/lib/puppet/pops/lookup.rb +96 -0
  754. data/vendored/puppet/lib/puppet/pops/lookup/configured_data_provider.rb +93 -0
  755. data/vendored/puppet/lib/puppet/pops/lookup/context.rb +200 -0
  756. data/vendored/puppet/lib/puppet/pops/lookup/data_adapter.rb +27 -0
  757. data/vendored/puppet/lib/puppet/pops/lookup/data_dig_function_provider.rb +145 -0
  758. data/vendored/puppet/lib/puppet/pops/lookup/data_hash_function_provider.rb +126 -0
  759. data/vendored/puppet/lib/puppet/pops/lookup/data_provider.rb +92 -0
  760. data/vendored/puppet/lib/puppet/pops/lookup/environment_data_provider.rb +35 -0
  761. data/vendored/puppet/lib/puppet/pops/lookup/explainer.rb +594 -0
  762. data/vendored/puppet/lib/puppet/pops/lookup/function_provider.rb +110 -0
  763. data/vendored/puppet/lib/puppet/pops/lookup/global_data_provider.rb +75 -0
  764. data/vendored/puppet/lib/puppet/pops/lookup/hiera_config.rb +761 -0
  765. data/vendored/puppet/lib/puppet/pops/lookup/interpolation.rb +154 -0
  766. data/vendored/puppet/lib/puppet/pops/lookup/invocation.rb +261 -0
  767. data/vendored/puppet/lib/puppet/pops/lookup/location_resolver.rb +99 -0
  768. data/vendored/puppet/lib/puppet/pops/lookup/lookup_adapter.rb +472 -0
  769. data/vendored/puppet/lib/puppet/pops/lookup/lookup_key.rb +99 -0
  770. data/vendored/puppet/lib/puppet/pops/lookup/lookup_key_function_provider.rb +92 -0
  771. data/vendored/puppet/lib/puppet/pops/lookup/module_data_provider.rb +89 -0
  772. data/vendored/puppet/lib/puppet/pops/lookup/sub_lookup.rb +92 -0
  773. data/vendored/puppet/lib/puppet/pops/merge_strategy.rb +434 -0
  774. data/vendored/puppet/lib/puppet/pops/migration/migration_checker.rb +58 -0
  775. data/vendored/puppet/lib/puppet/pops/model/ast.pp +695 -0
  776. data/vendored/puppet/lib/puppet/pops/model/ast.rb +4870 -0
  777. data/vendored/puppet/lib/puppet/pops/model/ast_transformer.rb +131 -0
  778. data/vendored/puppet/lib/puppet/pops/model/factory.rb +1145 -0
  779. data/vendored/puppet/lib/puppet/pops/model/model_label_provider.rb +132 -0
  780. data/vendored/puppet/lib/puppet/pops/model/model_tree_dumper.rb +463 -0
  781. data/vendored/puppet/lib/puppet/pops/model/tree_dumper.rb +59 -0
  782. data/vendored/puppet/lib/puppet/pops/parser/code_merger.rb +29 -0
  783. data/vendored/puppet/lib/puppet/pops/parser/egrammar.ra +937 -0
  784. data/vendored/puppet/lib/puppet/pops/parser/eparser.rb +3347 -0
  785. data/vendored/puppet/lib/puppet/pops/parser/epp_parser.rb +51 -0
  786. data/vendored/puppet/lib/puppet/pops/parser/epp_support.rb +262 -0
  787. data/vendored/puppet/lib/puppet/pops/parser/evaluating_parser.rb +165 -0
  788. data/vendored/puppet/lib/puppet/pops/parser/heredoc_support.rb +143 -0
  789. data/vendored/puppet/lib/puppet/pops/parser/interpolation_support.rb +244 -0
  790. data/vendored/puppet/lib/puppet/pops/parser/lexer2.rb +796 -0
  791. data/vendored/puppet/lib/puppet/pops/parser/lexer_support.rb +220 -0
  792. data/vendored/puppet/lib/puppet/pops/parser/locatable.rb +23 -0
  793. data/vendored/puppet/lib/puppet/pops/parser/locator.rb +344 -0
  794. data/vendored/puppet/lib/puppet/pops/parser/parser_support.rb +247 -0
  795. data/vendored/puppet/lib/puppet/pops/parser/slurp_support.rb +120 -0
  796. data/vendored/puppet/lib/puppet/pops/patterns.rb +60 -0
  797. data/vendored/puppet/lib/puppet/pops/pcore.rb +107 -0
  798. data/vendored/puppet/lib/puppet/pops/puppet_stack.rb +43 -0
  799. data/vendored/puppet/lib/puppet/pops/resource/param.rb +55 -0
  800. data/vendored/puppet/lib/puppet/pops/resource/resource_type_impl.rb +314 -0
  801. data/vendored/puppet/lib/puppet/pops/resource/resource_type_set.pcore +22 -0
  802. data/vendored/puppet/lib/puppet/pops/semantic_error.rb +29 -0
  803. data/vendored/puppet/lib/puppet/pops/serialization.rb +41 -0
  804. data/vendored/puppet/lib/puppet/pops/serialization/abstract_reader.rb +176 -0
  805. data/vendored/puppet/lib/puppet/pops/serialization/abstract_writer.rb +215 -0
  806. data/vendored/puppet/lib/puppet/pops/serialization/deserializer.rb +80 -0
  807. data/vendored/puppet/lib/puppet/pops/serialization/extension.rb +157 -0
  808. data/vendored/puppet/lib/puppet/pops/serialization/from_data_converter.rb +169 -0
  809. data/vendored/puppet/lib/puppet/pops/serialization/instance_reader.rb +19 -0
  810. data/vendored/puppet/lib/puppet/pops/serialization/instance_writer.rb +14 -0
  811. data/vendored/puppet/lib/puppet/pops/serialization/json.rb +297 -0
  812. data/vendored/puppet/lib/puppet/pops/serialization/json_path.rb +126 -0
  813. data/vendored/puppet/lib/puppet/pops/serialization/object.rb +71 -0
  814. data/vendored/puppet/lib/puppet/pops/serialization/serializer.rb +139 -0
  815. data/vendored/puppet/lib/puppet/pops/serialization/time_factory.rb +67 -0
  816. data/vendored/puppet/lib/puppet/pops/serialization/to_data_converter.rb +301 -0
  817. data/vendored/puppet/lib/puppet/pops/time/timespan.rb +718 -0
  818. data/vendored/puppet/lib/puppet/pops/time/timestamp.rb +160 -0
  819. data/vendored/puppet/lib/puppet/pops/types/annotatable.rb +36 -0
  820. data/vendored/puppet/lib/puppet/pops/types/annotation.rb +71 -0
  821. data/vendored/puppet/lib/puppet/pops/types/class_loader.rb +129 -0
  822. data/vendored/puppet/lib/puppet/pops/types/enumeration.rb +16 -0
  823. data/vendored/puppet/lib/puppet/pops/types/execution_result.rb +126 -0
  824. data/vendored/puppet/lib/puppet/pops/types/implementation_registry.rb +141 -0
  825. data/vendored/puppet/lib/puppet/pops/types/iterable.rb +330 -0
  826. data/vendored/puppet/lib/puppet/pops/types/p_binary_type.rb +226 -0
  827. data/vendored/puppet/lib/puppet/pops/types/p_error_type.rb +146 -0
  828. data/vendored/puppet/lib/puppet/pops/types/p_init_type.rb +238 -0
  829. data/vendored/puppet/lib/puppet/pops/types/p_meta_type.rb +90 -0
  830. data/vendored/puppet/lib/puppet/pops/types/p_object_type.rb +976 -0
  831. data/vendored/puppet/lib/puppet/pops/types/p_runtime_type.rb +115 -0
  832. data/vendored/puppet/lib/puppet/pops/types/p_sem_ver_range_type.rb +191 -0
  833. data/vendored/puppet/lib/puppet/pops/types/p_sem_ver_type.rb +141 -0
  834. data/vendored/puppet/lib/puppet/pops/types/p_sensitive_type.rb +73 -0
  835. data/vendored/puppet/lib/puppet/pops/types/p_timespan_type.rb +192 -0
  836. data/vendored/puppet/lib/puppet/pops/types/p_timestamp_type.rb +73 -0
  837. data/vendored/puppet/lib/puppet/pops/types/p_type_set_type.rb +361 -0
  838. data/vendored/puppet/lib/puppet/pops/types/puppet_object.rb +30 -0
  839. data/vendored/puppet/lib/puppet/pops/types/recursion_guard.rb +136 -0
  840. data/vendored/puppet/lib/puppet/pops/types/ruby_generator.rb +432 -0
  841. data/vendored/puppet/lib/puppet/pops/types/ruby_method.rb +31 -0
  842. data/vendored/puppet/lib/puppet/pops/types/string_converter.rb +1102 -0
  843. data/vendored/puppet/lib/puppet/pops/types/task.rb +116 -0
  844. data/vendored/puppet/lib/puppet/pops/types/tree_iterators.rb +250 -0
  845. data/vendored/puppet/lib/puppet/pops/types/type_acceptor.rb +25 -0
  846. data/vendored/puppet/lib/puppet/pops/types/type_asserter.rb +47 -0
  847. data/vendored/puppet/lib/puppet/pops/types/type_assertion_error.rb +27 -0
  848. data/vendored/puppet/lib/puppet/pops/types/type_calculator.rb +799 -0
  849. data/vendored/puppet/lib/puppet/pops/types/type_conversion_error.rb +15 -0
  850. data/vendored/puppet/lib/puppet/pops/types/type_factory.rb +599 -0
  851. data/vendored/puppet/lib/puppet/pops/types/type_formatter.rb +769 -0
  852. data/vendored/puppet/lib/puppet/pops/types/type_mismatch_describer.rb +1062 -0
  853. data/vendored/puppet/lib/puppet/pops/types/type_parser.rb +602 -0
  854. data/vendored/puppet/lib/puppet/pops/types/type_set_reference.rb +59 -0
  855. data/vendored/puppet/lib/puppet/pops/types/types.rb +3519 -0
  856. data/vendored/puppet/lib/puppet/pops/utils.rb +119 -0
  857. data/vendored/puppet/lib/puppet/pops/validation.rb +464 -0
  858. data/vendored/puppet/lib/puppet/pops/validation/checker4_0.rb +996 -0
  859. data/vendored/puppet/lib/puppet/pops/validation/tasks_checker.rb +60 -0
  860. data/vendored/puppet/lib/puppet/pops/validation/validator_factory_4_0.rb +43 -0
  861. data/vendored/puppet/lib/puppet/pops/visitable.rb +6 -0
  862. data/vendored/puppet/lib/puppet/pops/visitor.rb +116 -0
  863. data/vendored/puppet/lib/puppet/property.rb +600 -0
  864. data/vendored/puppet/lib/puppet/property/boolean.rb +7 -0
  865. data/vendored/puppet/lib/puppet/property/ensure.rb +105 -0
  866. data/vendored/puppet/lib/puppet/property/keyvalue.rb +95 -0
  867. data/vendored/puppet/lib/puppet/property/list.rb +69 -0
  868. data/vendored/puppet/lib/puppet/property/ordered_list.rb +29 -0
  869. data/vendored/puppet/lib/puppet/provider.rb +603 -0
  870. data/vendored/puppet/lib/puppet/provider/aixobject.rb +392 -0
  871. data/vendored/puppet/lib/puppet/provider/augeas/augeas.rb +567 -0
  872. data/vendored/puppet/lib/puppet/provider/cisco.rb +9 -0
  873. data/vendored/puppet/lib/puppet/provider/command.rb +25 -0
  874. data/vendored/puppet/lib/puppet/provider/computer/computer.rb +20 -0
  875. data/vendored/puppet/lib/puppet/provider/confine.rb +6 -0
  876. data/vendored/puppet/lib/puppet/provider/cron/crontab.rb +297 -0
  877. data/vendored/puppet/lib/puppet/provider/exec.rb +98 -0
  878. data/vendored/puppet/lib/puppet/provider/exec/posix.rb +48 -0
  879. data/vendored/puppet/lib/puppet/provider/exec/shell.rb +25 -0
  880. data/vendored/puppet/lib/puppet/provider/exec/windows.rb +55 -0
  881. data/vendored/puppet/lib/puppet/provider/file/posix.rb +136 -0
  882. data/vendored/puppet/lib/puppet/provider/file/windows.rb +104 -0
  883. data/vendored/puppet/lib/puppet/provider/group/aix.rb +141 -0
  884. data/vendored/puppet/lib/puppet/provider/group/directoryservice.rb +22 -0
  885. data/vendored/puppet/lib/puppet/provider/group/groupadd.rb +85 -0
  886. data/vendored/puppet/lib/puppet/provider/group/ldap.rb +45 -0
  887. data/vendored/puppet/lib/puppet/provider/group/pw.rb +49 -0
  888. data/vendored/puppet/lib/puppet/provider/group/windows_adsi.rb +109 -0
  889. data/vendored/puppet/lib/puppet/provider/host/parsed.rb +46 -0
  890. data/vendored/puppet/lib/puppet/provider/interface/cisco.rb +27 -0
  891. data/vendored/puppet/lib/puppet/provider/ldap.rb +137 -0
  892. data/vendored/puppet/lib/puppet/provider/macauthorization/macauthorization.rb +298 -0
  893. data/vendored/puppet/lib/puppet/provider/mailalias/aliases.rb +50 -0
  894. data/vendored/puppet/lib/puppet/provider/maillist/mailman.rb +108 -0
  895. data/vendored/puppet/lib/puppet/provider/mcx/mcxcontent.rb +173 -0
  896. data/vendored/puppet/lib/puppet/provider/mount.rb +59 -0
  897. data/vendored/puppet/lib/puppet/provider/mount/parsed.rb +282 -0
  898. data/vendored/puppet/lib/puppet/provider/naginator.rb +63 -0
  899. data/vendored/puppet/lib/puppet/provider/nameservice.rb +317 -0
  900. data/vendored/puppet/lib/puppet/provider/nameservice/directoryservice.rb +507 -0
  901. data/vendored/puppet/lib/puppet/provider/nameservice/objectadd.rb +33 -0
  902. data/vendored/puppet/lib/puppet/provider/nameservice/pw.rb +21 -0
  903. data/vendored/puppet/lib/puppet/provider/network_device.rb +72 -0
  904. data/vendored/puppet/lib/puppet/provider/package.rb +56 -0
  905. data/vendored/puppet/lib/puppet/provider/package/aix.rb +152 -0
  906. data/vendored/puppet/lib/puppet/provider/package/appdmg.rb +110 -0
  907. data/vendored/puppet/lib/puppet/provider/package/apple.rb +47 -0
  908. data/vendored/puppet/lib/puppet/provider/package/apt.rb +116 -0
  909. data/vendored/puppet/lib/puppet/provider/package/aptitude.rb +29 -0
  910. data/vendored/puppet/lib/puppet/provider/package/aptrpm.rb +83 -0
  911. data/vendored/puppet/lib/puppet/provider/package/blastwave.rb +111 -0
  912. data/vendored/puppet/lib/puppet/provider/package/dnf.rb +46 -0
  913. data/vendored/puppet/lib/puppet/provider/package/dpkg.rb +165 -0
  914. data/vendored/puppet/lib/puppet/provider/package/fink.rb +79 -0
  915. data/vendored/puppet/lib/puppet/provider/package/freebsd.rb +47 -0
  916. data/vendored/puppet/lib/puppet/provider/package/gem.rb +175 -0
  917. data/vendored/puppet/lib/puppet/provider/package/hpux.rb +44 -0
  918. data/vendored/puppet/lib/puppet/provider/package/macports.rb +107 -0
  919. data/vendored/puppet/lib/puppet/provider/package/nim.rb +283 -0
  920. data/vendored/puppet/lib/puppet/provider/package/openbsd.rb +242 -0
  921. data/vendored/puppet/lib/puppet/provider/package/opkg.rb +81 -0
  922. data/vendored/puppet/lib/puppet/provider/package/pacman.rb +267 -0
  923. data/vendored/puppet/lib/puppet/provider/package/pip.rb +188 -0
  924. data/vendored/puppet/lib/puppet/provider/package/pip3.rb +20 -0
  925. data/vendored/puppet/lib/puppet/provider/package/pkg.rb +249 -0
  926. data/vendored/puppet/lib/puppet/provider/package/pkgdmg.rb +152 -0
  927. data/vendored/puppet/lib/puppet/provider/package/pkgin.rb +87 -0
  928. data/vendored/puppet/lib/puppet/provider/package/pkgng.rb +143 -0
  929. data/vendored/puppet/lib/puppet/provider/package/pkgutil.rb +186 -0
  930. data/vendored/puppet/lib/puppet/provider/package/portage.rb +301 -0
  931. data/vendored/puppet/lib/puppet/provider/package/ports.rb +91 -0
  932. data/vendored/puppet/lib/puppet/provider/package/portupgrade.rb +239 -0
  933. data/vendored/puppet/lib/puppet/provider/package/puppet_gem.rb +17 -0
  934. data/vendored/puppet/lib/puppet/provider/package/rpm.rb +405 -0
  935. data/vendored/puppet/lib/puppet/provider/package/rug.rb +51 -0
  936. data/vendored/puppet/lib/puppet/provider/package/sun.rb +133 -0
  937. data/vendored/puppet/lib/puppet/provider/package/sunfreeware.rb +9 -0
  938. data/vendored/puppet/lib/puppet/provider/package/tdnf.rb +28 -0
  939. data/vendored/puppet/lib/puppet/provider/package/up2date.rb +40 -0
  940. data/vendored/puppet/lib/puppet/provider/package/urpmi.rb +55 -0
  941. data/vendored/puppet/lib/puppet/provider/package/windows.rb +113 -0
  942. data/vendored/puppet/lib/puppet/provider/package/windows/exe_package.rb +71 -0
  943. data/vendored/puppet/lib/puppet/provider/package/windows/msi_package.rb +62 -0
  944. data/vendored/puppet/lib/puppet/provider/package/windows/package.rb +100 -0
  945. data/vendored/puppet/lib/puppet/provider/package/yum.rb +278 -0
  946. data/vendored/puppet/lib/puppet/provider/package/zypper.rb +145 -0
  947. data/vendored/puppet/lib/puppet/provider/parsedfile.rb +459 -0
  948. data/vendored/puppet/lib/puppet/provider/scheduled_task/win32_taskscheduler.rb +590 -0
  949. data/vendored/puppet/lib/puppet/provider/selboolean/getsetsebool.rb +47 -0
  950. data/vendored/puppet/lib/puppet/provider/selmodule/semodule.rb +138 -0
  951. data/vendored/puppet/lib/puppet/provider/service/base.rb +121 -0
  952. data/vendored/puppet/lib/puppet/provider/service/bsd.rb +51 -0
  953. data/vendored/puppet/lib/puppet/provider/service/daemontools.rb +194 -0
  954. data/vendored/puppet/lib/puppet/provider/service/debian.rb +74 -0
  955. data/vendored/puppet/lib/puppet/provider/service/freebsd.rb +143 -0
  956. data/vendored/puppet/lib/puppet/provider/service/gentoo.rb +45 -0
  957. data/vendored/puppet/lib/puppet/provider/service/init.rb +193 -0
  958. data/vendored/puppet/lib/puppet/provider/service/launchd.rb +346 -0
  959. data/vendored/puppet/lib/puppet/provider/service/openbsd.rb +100 -0
  960. data/vendored/puppet/lib/puppet/provider/service/openrc.rb +71 -0
  961. data/vendored/puppet/lib/puppet/provider/service/openwrt.rb +36 -0
  962. data/vendored/puppet/lib/puppet/provider/service/rcng.rb +51 -0
  963. data/vendored/puppet/lib/puppet/provider/service/redhat.rb +71 -0
  964. data/vendored/puppet/lib/puppet/provider/service/runit.rb +111 -0
  965. data/vendored/puppet/lib/puppet/provider/service/service.rb +42 -0
  966. data/vendored/puppet/lib/puppet/provider/service/smf.rb +167 -0
  967. data/vendored/puppet/lib/puppet/provider/service/src.rb +147 -0
  968. data/vendored/puppet/lib/puppet/provider/service/systemd.rb +186 -0
  969. data/vendored/puppet/lib/puppet/provider/service/upstart.rb +359 -0
  970. data/vendored/puppet/lib/puppet/provider/service/windows.rb +106 -0
  971. data/vendored/puppet/lib/puppet/provider/ssh_authorized_key/parsed.rb +105 -0
  972. data/vendored/puppet/lib/puppet/provider/sshkey/parsed.rb +50 -0
  973. data/vendored/puppet/lib/puppet/provider/user/aix.rb +375 -0
  974. data/vendored/puppet/lib/puppet/provider/user/directoryservice.rb +632 -0
  975. data/vendored/puppet/lib/puppet/provider/user/hpux.rb +95 -0
  976. data/vendored/puppet/lib/puppet/provider/user/ldap.rb +128 -0
  977. data/vendored/puppet/lib/puppet/provider/user/openbsd.rb +75 -0
  978. data/vendored/puppet/lib/puppet/provider/user/pw.rb +98 -0
  979. data/vendored/puppet/lib/puppet/provider/user/user_role_add.rb +227 -0
  980. data/vendored/puppet/lib/puppet/provider/user/useradd.rb +231 -0
  981. data/vendored/puppet/lib/puppet/provider/user/windows_adsi.rb +148 -0
  982. data/vendored/puppet/lib/puppet/provider/vlan/cisco.rb +28 -0
  983. data/vendored/puppet/lib/puppet/provider/yumrepo/inifile.rb +304 -0
  984. data/vendored/puppet/lib/puppet/provider/zfs/zfs.rb +84 -0
  985. data/vendored/puppet/lib/puppet/provider/zone/solaris.rb +364 -0
  986. data/vendored/puppet/lib/puppet/provider/zpool/zpool.rb +125 -0
  987. data/vendored/puppet/lib/puppet/reference/configuration.rb +82 -0
  988. data/vendored/puppet/lib/puppet/reference/function.rb +17 -0
  989. data/vendored/puppet/lib/puppet/reference/indirection.rb +71 -0
  990. data/vendored/puppet/lib/puppet/reference/metaparameter.rb +35 -0
  991. data/vendored/puppet/lib/puppet/reference/providers.rb +118 -0
  992. data/vendored/puppet/lib/puppet/reference/report.rb +20 -0
  993. data/vendored/puppet/lib/puppet/reference/type.rb +114 -0
  994. data/vendored/puppet/lib/puppet/relationship.rb +88 -0
  995. data/vendored/puppet/lib/puppet/reports.rb +93 -0
  996. data/vendored/puppet/lib/puppet/reports/http.rb +37 -0
  997. data/vendored/puppet/lib/puppet/reports/log.rb +14 -0
  998. data/vendored/puppet/lib/puppet/reports/store.rb +68 -0
  999. data/vendored/puppet/lib/puppet/resource.rb +669 -0
  1000. data/vendored/puppet/lib/puppet/resource/capability_finder.rb +147 -0
  1001. data/vendored/puppet/lib/puppet/resource/catalog.rb +667 -0
  1002. data/vendored/puppet/lib/puppet/resource/status.rb +221 -0
  1003. data/vendored/puppet/lib/puppet/resource/type.rb +524 -0
  1004. data/vendored/puppet/lib/puppet/resource/type_collection.rb +263 -0
  1005. data/vendored/puppet/lib/puppet/scheduler.rb +16 -0
  1006. data/vendored/puppet/lib/puppet/scheduler/job.rb +53 -0
  1007. data/vendored/puppet/lib/puppet/scheduler/scheduler.rb +44 -0
  1008. data/vendored/puppet/lib/puppet/scheduler/splay_job.rb +32 -0
  1009. data/vendored/puppet/lib/puppet/scheduler/timer.rb +13 -0
  1010. data/vendored/puppet/lib/puppet/settings.rb +1457 -0
  1011. data/vendored/puppet/lib/puppet/settings/array_setting.rb +17 -0
  1012. data/vendored/puppet/lib/puppet/settings/autosign_setting.rb +22 -0
  1013. data/vendored/puppet/lib/puppet/settings/base_setting.rb +177 -0
  1014. data/vendored/puppet/lib/puppet/settings/boolean_setting.rb +32 -0
  1015. data/vendored/puppet/lib/puppet/settings/certificate_revocation_setting.rb +21 -0
  1016. data/vendored/puppet/lib/puppet/settings/config_file.rb +143 -0
  1017. data/vendored/puppet/lib/puppet/settings/directory_setting.rb +18 -0
  1018. data/vendored/puppet/lib/puppet/settings/duration_setting.rb +32 -0
  1019. data/vendored/puppet/lib/puppet/settings/enum_setting.rb +16 -0
  1020. data/vendored/puppet/lib/puppet/settings/environment_conf.rb +204 -0
  1021. data/vendored/puppet/lib/puppet/settings/errors.rb +11 -0
  1022. data/vendored/puppet/lib/puppet/settings/file_or_directory_setting.rb +40 -0
  1023. data/vendored/puppet/lib/puppet/settings/file_setting.rb +245 -0
  1024. data/vendored/puppet/lib/puppet/settings/ini_file.rb +200 -0
  1025. data/vendored/puppet/lib/puppet/settings/path_setting.rb +8 -0
  1026. data/vendored/puppet/lib/puppet/settings/priority_setting.rb +42 -0
  1027. data/vendored/puppet/lib/puppet/settings/server_list_setting.rb +20 -0
  1028. data/vendored/puppet/lib/puppet/settings/string_setting.rb +9 -0
  1029. data/vendored/puppet/lib/puppet/settings/symbolic_enum_setting.rb +17 -0
  1030. data/vendored/puppet/lib/puppet/settings/terminus_setting.rb +14 -0
  1031. data/vendored/puppet/lib/puppet/settings/ttl_setting.rb +46 -0
  1032. data/vendored/puppet/lib/puppet/settings/value_translator.rb +15 -0
  1033. data/vendored/puppet/lib/puppet/ssl.rb +13 -0
  1034. data/vendored/puppet/lib/puppet/ssl/base.rb +153 -0
  1035. data/vendored/puppet/lib/puppet/ssl/certificate.rb +95 -0
  1036. data/vendored/puppet/lib/puppet/ssl/certificate_authority.rb +553 -0
  1037. data/vendored/puppet/lib/puppet/ssl/certificate_authority/autosign_command.rb +45 -0
  1038. data/vendored/puppet/lib/puppet/ssl/certificate_authority/interface.rb +324 -0
  1039. data/vendored/puppet/lib/puppet/ssl/certificate_factory.rb +219 -0
  1040. data/vendored/puppet/lib/puppet/ssl/certificate_request.rb +327 -0
  1041. data/vendored/puppet/lib/puppet/ssl/certificate_request_attributes.rb +37 -0
  1042. data/vendored/puppet/lib/puppet/ssl/certificate_revocation_list.rb +111 -0
  1043. data/vendored/puppet/lib/puppet/ssl/certificate_signer.rb +27 -0
  1044. data/vendored/puppet/lib/puppet/ssl/configuration.rb +61 -0
  1045. data/vendored/puppet/lib/puppet/ssl/digest.rb +20 -0
  1046. data/vendored/puppet/lib/puppet/ssl/host.rb +400 -0
  1047. data/vendored/puppet/lib/puppet/ssl/inventory.rb +55 -0
  1048. data/vendored/puppet/lib/puppet/ssl/key.rb +63 -0
  1049. data/vendored/puppet/lib/puppet/ssl/oids.rb +187 -0
  1050. data/vendored/puppet/lib/puppet/ssl/validator.rb +60 -0
  1051. data/vendored/puppet/lib/puppet/ssl/validator/default_validator.rb +173 -0
  1052. data/vendored/puppet/lib/puppet/ssl/validator/no_validator.rb +20 -0
  1053. data/vendored/puppet/lib/puppet/status.rb +40 -0
  1054. data/vendored/puppet/lib/puppet/syntax_checkers.rb +3 -0
  1055. data/vendored/puppet/lib/puppet/syntax_checkers/base64.rb +41 -0
  1056. data/vendored/puppet/lib/puppet/syntax_checkers/json.rb +35 -0
  1057. data/vendored/puppet/lib/puppet/test/test_helper.rb +252 -0
  1058. data/vendored/puppet/lib/puppet/transaction.rb +417 -0
  1059. data/vendored/puppet/lib/puppet/transaction/additional_resource_generator.rb +220 -0
  1060. data/vendored/puppet/lib/puppet/transaction/event.rb +144 -0
  1061. data/vendored/puppet/lib/puppet/transaction/event_manager.rb +167 -0
  1062. data/vendored/puppet/lib/puppet/transaction/persistence.rb +84 -0
  1063. data/vendored/puppet/lib/puppet/transaction/report.rb +460 -0
  1064. data/vendored/puppet/lib/puppet/transaction/resource_harness.rb +318 -0
  1065. data/vendored/puppet/lib/puppet/type.rb +2664 -0
  1066. data/vendored/puppet/lib/puppet/type/augeas.rb +211 -0
  1067. data/vendored/puppet/lib/puppet/type/component.rb +88 -0
  1068. data/vendored/puppet/lib/puppet/type/computer.rb +66 -0
  1069. data/vendored/puppet/lib/puppet/type/cron.rb +475 -0
  1070. data/vendored/puppet/lib/puppet/type/exec.rb +622 -0
  1071. data/vendored/puppet/lib/puppet/type/file.rb +1039 -0
  1072. data/vendored/puppet/lib/puppet/type/file/checksum.rb +44 -0
  1073. data/vendored/puppet/lib/puppet/type/file/checksum_value.rb +53 -0
  1074. data/vendored/puppet/lib/puppet/type/file/content.rb +160 -0
  1075. data/vendored/puppet/lib/puppet/type/file/ctime.rb +20 -0
  1076. data/vendored/puppet/lib/puppet/type/file/data_sync.rb +92 -0
  1077. data/vendored/puppet/lib/puppet/type/file/ensure.rb +192 -0
  1078. data/vendored/puppet/lib/puppet/type/file/group.rb +41 -0
  1079. data/vendored/puppet/lib/puppet/type/file/mode.rb +177 -0
  1080. data/vendored/puppet/lib/puppet/type/file/mtime.rb +18 -0
  1081. data/vendored/puppet/lib/puppet/type/file/owner.rb +44 -0
  1082. data/vendored/puppet/lib/puppet/type/file/selcontext.rb +141 -0
  1083. data/vendored/puppet/lib/puppet/type/file/source.rb +356 -0
  1084. data/vendored/puppet/lib/puppet/type/file/target.rb +87 -0
  1085. data/vendored/puppet/lib/puppet/type/file/type.rb +19 -0
  1086. data/vendored/puppet/lib/puppet/type/filebucket.rb +117 -0
  1087. data/vendored/puppet/lib/puppet/type/group.rb +206 -0
  1088. data/vendored/puppet/lib/puppet/type/host.rb +95 -0
  1089. data/vendored/puppet/lib/puppet/type/interface.rb +121 -0
  1090. data/vendored/puppet/lib/puppet/type/k5login.rb +88 -0
  1091. data/vendored/puppet/lib/puppet/type/macauthorization.rb +167 -0
  1092. data/vendored/puppet/lib/puppet/type/mailalias.rb +46 -0
  1093. data/vendored/puppet/lib/puppet/type/maillist.rb +62 -0
  1094. data/vendored/puppet/lib/puppet/type/mcx.rb +98 -0
  1095. data/vendored/puppet/lib/puppet/type/mount.rb +310 -0
  1096. data/vendored/puppet/lib/puppet/type/nagios_command.rb +3 -0
  1097. data/vendored/puppet/lib/puppet/type/nagios_contact.rb +3 -0
  1098. data/vendored/puppet/lib/puppet/type/nagios_contactgroup.rb +3 -0
  1099. data/vendored/puppet/lib/puppet/type/nagios_host.rb +3 -0
  1100. data/vendored/puppet/lib/puppet/type/nagios_hostdependency.rb +3 -0
  1101. data/vendored/puppet/lib/puppet/type/nagios_hostescalation.rb +3 -0
  1102. data/vendored/puppet/lib/puppet/type/nagios_hostextinfo.rb +3 -0
  1103. data/vendored/puppet/lib/puppet/type/nagios_hostgroup.rb +3 -0
  1104. data/vendored/puppet/lib/puppet/type/nagios_service.rb +3 -0
  1105. data/vendored/puppet/lib/puppet/type/nagios_servicedependency.rb +3 -0
  1106. data/vendored/puppet/lib/puppet/type/nagios_serviceescalation.rb +3 -0
  1107. data/vendored/puppet/lib/puppet/type/nagios_serviceextinfo.rb +3 -0
  1108. data/vendored/puppet/lib/puppet/type/nagios_servicegroup.rb +3 -0
  1109. data/vendored/puppet/lib/puppet/type/nagios_timeperiod.rb +3 -0
  1110. data/vendored/puppet/lib/puppet/type/notify.rb +46 -0
  1111. data/vendored/puppet/lib/puppet/type/package.rb +571 -0
  1112. data/vendored/puppet/lib/puppet/type/resources.rb +180 -0
  1113. data/vendored/puppet/lib/puppet/type/router.rb +17 -0
  1114. data/vendored/puppet/lib/puppet/type/schedule.rb +469 -0
  1115. data/vendored/puppet/lib/puppet/type/scheduled_task.rb +183 -0
  1116. data/vendored/puppet/lib/puppet/type/selboolean.rb +26 -0
  1117. data/vendored/puppet/lib/puppet/type/selmodule.rb +59 -0
  1118. data/vendored/puppet/lib/puppet/type/service.rb +258 -0
  1119. data/vendored/puppet/lib/puppet/type/ssh_authorized_key.rb +143 -0
  1120. data/vendored/puppet/lib/puppet/type/sshkey.rb +83 -0
  1121. data/vendored/puppet/lib/puppet/type/stage.rb +27 -0
  1122. data/vendored/puppet/lib/puppet/type/tidy.rb +336 -0
  1123. data/vendored/puppet/lib/puppet/type/user.rb +770 -0
  1124. data/vendored/puppet/lib/puppet/type/vlan.rb +26 -0
  1125. data/vendored/puppet/lib/puppet/type/whit.rb +34 -0
  1126. data/vendored/puppet/lib/puppet/type/yumrepo.rb +409 -0
  1127. data/vendored/puppet/lib/puppet/type/zfs.rb +150 -0
  1128. data/vendored/puppet/lib/puppet/type/zone.rb +382 -0
  1129. data/vendored/puppet/lib/puppet/type/zpool.rb +91 -0
  1130. data/vendored/puppet/lib/puppet/util.rb +705 -0
  1131. data/vendored/puppet/lib/puppet/util/at_fork.rb +35 -0
  1132. data/vendored/puppet/lib/puppet/util/at_fork/noop.rb +18 -0
  1133. data/vendored/puppet/lib/puppet/util/at_fork/solaris.rb +158 -0
  1134. data/vendored/puppet/lib/puppet/util/autoload.rb +226 -0
  1135. data/vendored/puppet/lib/puppet/util/backups.rb +86 -0
  1136. data/vendored/puppet/lib/puppet/util/character_encoding.rb +98 -0
  1137. data/vendored/puppet/lib/puppet/util/checksums.rb +282 -0
  1138. data/vendored/puppet/lib/puppet/util/classgen.rb +228 -0
  1139. data/vendored/puppet/lib/puppet/util/colors.rb +100 -0
  1140. data/vendored/puppet/lib/puppet/util/command_line.rb +185 -0
  1141. data/vendored/puppet/lib/puppet/util/command_line/puppet_option_parser.rb +87 -0
  1142. data/vendored/puppet/lib/puppet/util/command_line/trollop.rb +824 -0
  1143. data/vendored/puppet/lib/puppet/util/constant_inflector.rb +24 -0
  1144. data/vendored/puppet/lib/puppet/util/diff.rb +79 -0
  1145. data/vendored/puppet/lib/puppet/util/docs.rb +128 -0
  1146. data/vendored/puppet/lib/puppet/util/errors.rb +108 -0
  1147. data/vendored/puppet/lib/puppet/util/execution.rb +412 -0
  1148. data/vendored/puppet/lib/puppet/util/execution_stub.rb +26 -0
  1149. data/vendored/puppet/lib/puppet/util/feature.rb +95 -0
  1150. data/vendored/puppet/lib/puppet/util/file_watcher.rb +28 -0
  1151. data/vendored/puppet/lib/puppet/util/fileparsing.rb +377 -0
  1152. data/vendored/puppet/lib/puppet/util/filetype.rb +309 -0
  1153. data/vendored/puppet/lib/puppet/util/http_proxy.rb +197 -0
  1154. data/vendored/puppet/lib/puppet/util/inifile.rb +341 -0
  1155. data/vendored/puppet/lib/puppet/util/instance_loader.rb +81 -0
  1156. data/vendored/puppet/lib/puppet/util/json_lockfile.rb +44 -0
  1157. data/vendored/puppet/lib/puppet/util/ldap.rb +2 -0
  1158. data/vendored/puppet/lib/puppet/util/ldap/connection.rb +71 -0
  1159. data/vendored/puppet/lib/puppet/util/ldap/generator.rb +42 -0
  1160. data/vendored/puppet/lib/puppet/util/ldap/manager.rb +278 -0
  1161. data/vendored/puppet/lib/puppet/util/libuser.conf +15 -0
  1162. data/vendored/puppet/lib/puppet/util/libuser.rb +12 -0
  1163. data/vendored/puppet/lib/puppet/util/limits.rb +12 -0
  1164. data/vendored/puppet/lib/puppet/util/lockfile.rb +66 -0
  1165. data/vendored/puppet/lib/puppet/util/log.rb +423 -0
  1166. data/vendored/puppet/lib/puppet/util/log/destination.rb +49 -0
  1167. data/vendored/puppet/lib/puppet/util/log/destinations.rb +249 -0
  1168. data/vendored/puppet/lib/puppet/util/logging.rb +318 -0
  1169. data/vendored/puppet/lib/puppet/util/metaid.rb +21 -0
  1170. data/vendored/puppet/lib/puppet/util/methodhelper.rb +32 -0
  1171. data/vendored/puppet/lib/puppet/util/metric.rb +64 -0
  1172. data/vendored/puppet/lib/puppet/util/monkey_patches.rb +108 -0
  1173. data/vendored/puppet/lib/puppet/util/multi_match.rb +51 -0
  1174. data/vendored/puppet/lib/puppet/util/nagios_maker.rb +85 -0
  1175. data/vendored/puppet/lib/puppet/util/network_device.rb +17 -0
  1176. data/vendored/puppet/lib/puppet/util/network_device/base.rb +23 -0
  1177. data/vendored/puppet/lib/puppet/util/network_device/cisco.rb +4 -0
  1178. data/vendored/puppet/lib/puppet/util/network_device/cisco/device.rb +285 -0
  1179. data/vendored/puppet/lib/puppet/util/network_device/cisco/facts.rb +72 -0
  1180. data/vendored/puppet/lib/puppet/util/network_device/cisco/interface.rb +94 -0
  1181. data/vendored/puppet/lib/puppet/util/network_device/config.rb +98 -0
  1182. data/vendored/puppet/lib/puppet/util/network_device/ipcalc.rb +68 -0
  1183. data/vendored/puppet/lib/puppet/util/network_device/transport.rb +5 -0
  1184. data/vendored/puppet/lib/puppet/util/network_device/transport/base.rb +26 -0
  1185. data/vendored/puppet/lib/puppet/util/network_device/transport/ssh.rb +126 -0
  1186. data/vendored/puppet/lib/puppet/util/network_device/transport/telnet.rb +47 -0
  1187. data/vendored/puppet/lib/puppet/util/package.rb +31 -0
  1188. data/vendored/puppet/lib/puppet/util/pidlock.rb +62 -0
  1189. data/vendored/puppet/lib/puppet/util/platform.rb +22 -0
  1190. data/vendored/puppet/lib/puppet/util/plist.rb +153 -0
  1191. data/vendored/puppet/lib/puppet/util/posix.rb +137 -0
  1192. data/vendored/puppet/lib/puppet/util/profiler.rb +53 -0
  1193. data/vendored/puppet/lib/puppet/util/profiler/aggregate.rb +85 -0
  1194. data/vendored/puppet/lib/puppet/util/profiler/around_profiler.rb +67 -0
  1195. data/vendored/puppet/lib/puppet/util/profiler/logging.rb +48 -0
  1196. data/vendored/puppet/lib/puppet/util/profiler/object_counts.rb +17 -0
  1197. data/vendored/puppet/lib/puppet/util/profiler/wall_clock.rb +35 -0
  1198. data/vendored/puppet/lib/puppet/util/provider_features.rb +184 -0
  1199. data/vendored/puppet/lib/puppet/util/psych_support.rb +30 -0
  1200. data/vendored/puppet/lib/puppet/util/rdoc.rb +60 -0
  1201. data/vendored/puppet/lib/puppet/util/rdoc/code_objects.rb +294 -0
  1202. data/vendored/puppet/lib/puppet/util/rdoc/generators/puppet_generator.rb +910 -0
  1203. data/vendored/puppet/lib/puppet/util/rdoc/generators/template/puppet/puppet.rb +1085 -0
  1204. data/vendored/puppet/lib/puppet/util/rdoc/parser.rb +12 -0
  1205. data/vendored/puppet/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +259 -0
  1206. data/vendored/puppet/lib/puppet/util/rdoc/parser/puppet_parser_rdoc2.rb +14 -0
  1207. data/vendored/puppet/lib/puppet/util/reference.rb +126 -0
  1208. data/vendored/puppet/lib/puppet/util/resource_template.rb +61 -0
  1209. data/vendored/puppet/lib/puppet/util/retry_action.rb +46 -0
  1210. data/vendored/puppet/lib/puppet/util/rubygems.rb +75 -0
  1211. data/vendored/puppet/lib/puppet/util/run_mode.rb +110 -0
  1212. data/vendored/puppet/lib/puppet/util/selinux.rb +264 -0
  1213. data/vendored/puppet/lib/puppet/util/skip_tags.rb +9 -0
  1214. data/vendored/puppet/lib/puppet/util/splayer.rb +18 -0
  1215. data/vendored/puppet/lib/puppet/util/ssl.rb +53 -0
  1216. data/vendored/puppet/lib/puppet/util/storage.rb +89 -0
  1217. data/vendored/puppet/lib/puppet/util/suidmanager.rb +165 -0
  1218. data/vendored/puppet/lib/puppet/util/symbolic_file_mode.rb +144 -0
  1219. data/vendored/puppet/lib/puppet/util/tag_set.rb +27 -0
  1220. data/vendored/puppet/lib/puppet/util/tagging.rb +118 -0
  1221. data/vendored/puppet/lib/puppet/util/terminal.rb +16 -0
  1222. data/vendored/puppet/lib/puppet/util/user_attr.rb +21 -0
  1223. data/vendored/puppet/lib/puppet/util/warnings.rb +33 -0
  1224. data/vendored/puppet/lib/puppet/util/watched_file.rb +37 -0
  1225. data/vendored/puppet/lib/puppet/util/watcher.rb +17 -0
  1226. data/vendored/puppet/lib/puppet/util/watcher/change_watcher.rb +33 -0
  1227. data/vendored/puppet/lib/puppet/util/watcher/periodic_watcher.rb +37 -0
  1228. data/vendored/puppet/lib/puppet/util/watcher/timer.rb +19 -0
  1229. data/vendored/puppet/lib/puppet/util/windows.rb +35 -0
  1230. data/vendored/puppet/lib/puppet/util/windows/access_control_entry.rb +84 -0
  1231. data/vendored/puppet/lib/puppet/util/windows/access_control_list.rb +113 -0
  1232. data/vendored/puppet/lib/puppet/util/windows/adsi.rb +548 -0
  1233. data/vendored/puppet/lib/puppet/util/windows/api_types.rb +282 -0
  1234. data/vendored/puppet/lib/puppet/util/windows/com.rb +224 -0
  1235. data/vendored/puppet/lib/puppet/util/windows/error.rb +83 -0
  1236. data/vendored/puppet/lib/puppet/util/windows/eventlog.rb +192 -0
  1237. data/vendored/puppet/lib/puppet/util/windows/file.rb +488 -0
  1238. data/vendored/puppet/lib/puppet/util/windows/principal.rb +191 -0
  1239. data/vendored/puppet/lib/puppet/util/windows/process.rb +497 -0
  1240. data/vendored/puppet/lib/puppet/util/windows/registry.rb +374 -0
  1241. data/vendored/puppet/lib/puppet/util/windows/root_certs.rb +108 -0
  1242. data/vendored/puppet/lib/puppet/util/windows/security.rb +857 -0
  1243. data/vendored/puppet/lib/puppet/util/windows/security_descriptor.rb +62 -0
  1244. data/vendored/puppet/lib/puppet/util/windows/sid.rb +231 -0
  1245. data/vendored/puppet/lib/puppet/util/windows/string.rb +16 -0
  1246. data/vendored/puppet/lib/puppet/util/windows/taskscheduler.rb +1276 -0
  1247. data/vendored/puppet/lib/puppet/util/windows/user.rb +309 -0
  1248. data/vendored/puppet/lib/puppet/util/yaml.rb +36 -0
  1249. data/vendored/puppet/lib/puppet/vendor.rb +57 -0
  1250. data/vendored/puppet/lib/puppet/vendor/deep_merge/CHANGELOG +45 -0
  1251. data/vendored/puppet/lib/puppet/vendor/deep_merge/Gemfile +3 -0
  1252. data/vendored/puppet/lib/puppet/vendor/deep_merge/LICENSE +21 -0
  1253. data/vendored/puppet/lib/puppet/vendor/deep_merge/PUPPET_README.md +6 -0
  1254. data/vendored/puppet/lib/puppet/vendor/deep_merge/README.md +113 -0
  1255. data/vendored/puppet/lib/puppet/vendor/deep_merge/Rakefile +19 -0
  1256. data/vendored/puppet/lib/puppet/vendor/deep_merge/deep_merge.gemspec +35 -0
  1257. data/vendored/puppet/lib/puppet/vendor/deep_merge/lib/deep_merge.rb +2 -0
  1258. data/vendored/puppet/lib/puppet/vendor/deep_merge/lib/deep_merge/core.rb +210 -0
  1259. data/vendored/puppet/lib/puppet/vendor/deep_merge/lib/deep_merge/deep_merge_hash.rb +28 -0
  1260. data/vendored/puppet/lib/puppet/vendor/deep_merge/lib/deep_merge/rails_compat.rb +27 -0
  1261. data/vendored/puppet/lib/puppet/vendor/deep_merge/test/test_deep_merge.rb +608 -0
  1262. data/vendored/puppet/lib/puppet/vendor/load_deep_merge.rb +1 -0
  1263. data/vendored/puppet/lib/puppet/vendor/load_pathspec.rb +1 -0
  1264. data/vendored/puppet/lib/puppet/vendor/load_semantic.rb +1 -0
  1265. data/vendored/puppet/lib/puppet/vendor/load_semantic_puppet.rb +1 -0
  1266. data/vendored/puppet/lib/puppet/vendor/pathspec/CHANGELOG.md +2 -0
  1267. data/vendored/puppet/lib/puppet/vendor/pathspec/LICENSE +201 -0
  1268. data/vendored/puppet/lib/puppet/vendor/pathspec/PUPPET_README.md +6 -0
  1269. data/vendored/puppet/lib/puppet/vendor/pathspec/README.md +53 -0
  1270. data/vendored/puppet/lib/puppet/vendor/pathspec/lib/pathspec.rb +122 -0
  1271. data/vendored/puppet/lib/puppet/vendor/pathspec/lib/pathspec/gitignorespec.rb +275 -0
  1272. data/vendored/puppet/lib/puppet/vendor/pathspec/lib/pathspec/regexspec.rb +17 -0
  1273. data/vendored/puppet/lib/puppet/vendor/pathspec/lib/pathspec/spec.rb +14 -0
  1274. data/vendored/puppet/lib/puppet/vendor/require_vendored.rb +6 -0
  1275. data/vendored/puppet/lib/puppet/vendor/semantic/lib/semantic.rb +5 -0
  1276. data/vendored/puppet/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet.rb +7 -0
  1277. data/vendored/puppet/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/dependency.rb +181 -0
  1278. data/vendored/puppet/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/dependency/graph.rb +60 -0
  1279. data/vendored/puppet/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/dependency/graph_node.rb +117 -0
  1280. data/vendored/puppet/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/dependency/module_release.rb +58 -0
  1281. data/vendored/puppet/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/dependency/source.rb +25 -0
  1282. data/vendored/puppet/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/dependency/unsatisfiable_graph.rb +31 -0
  1283. data/vendored/puppet/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/gem_version.rb +3 -0
  1284. data/vendored/puppet/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/version.rb +203 -0
  1285. data/vendored/puppet/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/version_range.rb +758 -0
  1286. data/vendored/puppet/lib/puppet/vendor/semantic_puppet/locales/config.yaml +21 -0
  1287. data/vendored/puppet/lib/puppet/version.rb +93 -0
  1288. data/vendored/puppet/lib/puppet_pal.rb +290 -0
  1289. data/vendored/puppet/lib/puppet_x.rb +14 -0
  1290. data/vendored/require_vendored.rb +11 -0
  1291. metadata +1501 -9
@@ -0,0 +1,252 @@
1
+ module Puppet::Pops
2
+ module Evaluator
3
+ # Compares the puppet DSL way
4
+ #
5
+ # ==Equality
6
+ # All string vs. numeric equalities check for numeric equality first, then string equality
7
+ # Arrays are equal to arrays if they have the same length, and each element #equals
8
+ # Hashes are equal to hashes if they have the same size and keys and values #equals.
9
+ # All other objects are equal if they are ruby #== equal
10
+ #
11
+ class CompareOperator
12
+ include Utils
13
+
14
+ # Provides access to the Puppet 3.x runtime (scope, etc.)
15
+ # This separation has been made to make it easier to later migrate the evaluator to an improved runtime.
16
+ #
17
+ include Runtime3Support
18
+
19
+ def initialize
20
+ @@equals_visitor ||= Visitor.new(self, "equals", 1, 1)
21
+ @@compare_visitor ||= Visitor.new(self, "cmp", 1, 1)
22
+ @@match_visitor ||= Visitor.new(self, "match", 2, 2)
23
+ @@include_visitor ||= Visitor.new(self, "include", 2, 2)
24
+ end
25
+
26
+ def equals (a, b)
27
+ @@equals_visitor.visit_this_1(self, a, b)
28
+ end
29
+
30
+ # Performs a comparison of a and b, and return > 0 if a is bigger, 0 if equal, and < 0 if b is bigger.
31
+ # Comparison of String vs. Numeric always compares using numeric.
32
+ def compare(a, b)
33
+ @@compare_visitor.visit_this_1(self, a, b)
34
+ end
35
+
36
+ # Performs a match of a and b, and returns true if b matches a
37
+ def match(a, b, scope)
38
+ @@match_visitor.visit_this_2(self, b, a, scope)
39
+ end
40
+
41
+ # Answers is b included in a
42
+ def include?(a, b, scope)
43
+ @@include_visitor.visit_this_2(self, a, b, scope)
44
+ end
45
+
46
+ protected
47
+
48
+ def cmp_String(a, b)
49
+ return a.casecmp(b) if b.is_a?(String)
50
+ raise ArgumentError.new(_("A String is not comparable to a non String"))
51
+ end
52
+
53
+ # Equality is case independent.
54
+ def equals_String(a, b)
55
+ return false unless b.is_a?(String)
56
+ a.casecmp(b) == 0
57
+ end
58
+
59
+ def cmp_Numeric(a, b)
60
+ if b.is_a?(Numeric)
61
+ a <=> b
62
+ else
63
+ raise ArgumentError.new(_("A Numeric is not comparable to non Numeric"))
64
+ end
65
+ end
66
+
67
+ def equals_Numeric(a, b)
68
+ if b.is_a?(Numeric)
69
+ a == b
70
+ else
71
+ false
72
+ end
73
+ end
74
+
75
+ def equals_Array(a, b)
76
+ return false unless b.is_a?(Array) && a.size == b.size
77
+ a.each_index {|i| return false unless equals(a.slice(i), b.slice(i)) }
78
+ true
79
+ end
80
+
81
+ def equals_Hash(a, b)
82
+ return false unless b.is_a?(Hash) && a.size == b.size
83
+ a.each {|ak, av| return false unless equals(b[ak], av)}
84
+ true
85
+ end
86
+
87
+ def cmp_Symbol(a, b)
88
+ if b.is_a?(Symbol)
89
+ a <=> b
90
+ else
91
+ raise ArgumentError.new(_("Symbol not comparable to non Symbol"))
92
+ end
93
+ end
94
+
95
+ def cmp_Timespan(a, b)
96
+ raise ArgumentError.new(_('Timespans are only comparable to Timespans, Integers, and Floats')) unless b.is_a?(Time::Timespan) || b.is_a?(Integer) || b.is_a?(Float)
97
+ a <=> b
98
+ end
99
+
100
+ def cmp_Timestamp(a, b)
101
+ raise ArgumentError.new(_('Timestamps are only comparable to Timestamps, Integers, and Floats')) unless b.is_a?(Time::Timestamp) || b.is_a?(Integer) || b.is_a?(Float)
102
+ a <=> b
103
+ end
104
+
105
+ def cmp_Version(a, b)
106
+ raise ArgumentError.new(_('Versions not comparable to non Versions')) unless b.is_a?(SemanticPuppet::Version)
107
+ a <=> b
108
+ end
109
+
110
+ def cmp_Object(a, b)
111
+ raise ArgumentError.new(_('Only Strings, Numbers, Timespans, Timestamps, and Versions are comparable'))
112
+ end
113
+
114
+
115
+ def equals_Object(a, b)
116
+ a == b
117
+ end
118
+
119
+ def equals_NilClass(a, b)
120
+ # :undef supported in case it is passed from a 3x data structure
121
+ b.nil? || b == :undef
122
+ end
123
+
124
+ def equals_Symbol(a, b)
125
+ # :undef supported in case it is passed from a 3x data structure
126
+ a == b || a == :undef && b.nil?
127
+ end
128
+
129
+ def include_Object(a, b, scope)
130
+ false
131
+ end
132
+
133
+ def include_String(a, b, scope)
134
+ case b
135
+ when String
136
+ # subsstring search downcased
137
+ a.downcase.include?(b.downcase)
138
+ when Regexp
139
+ matched = a.match(b) # nil, or MatchData
140
+ set_match_data(matched, scope) # creates ephemeral
141
+ !!matched # match (convert to boolean)
142
+ when Numeric
143
+ # convert string to number, true if ==
144
+ equals(a, b)
145
+ else
146
+ false
147
+ end
148
+ end
149
+
150
+ def include_Binary(a, b, scope)
151
+ case b
152
+ when Puppet::Pops::Types::PBinaryType::Binary
153
+ a.binary_buffer.include?(b.binary_buffer)
154
+ when String
155
+ a.binary_buffer.include?(b)
156
+ when Numeric
157
+ a.binary_buffer.bytes.include?(b)
158
+ else
159
+ false
160
+ end
161
+ end
162
+
163
+ def include_Array(a, b, scope)
164
+ case b
165
+ when Regexp
166
+ matched = nil
167
+ a.each do |element|
168
+ next unless element.is_a? String
169
+ matched = element.match(b) # nil, or MatchData
170
+ break if matched
171
+ end
172
+ # Always set match data, a "not found" should not keep old match data visible
173
+ set_match_data(matched, scope) # creates ephemeral
174
+ return !!matched
175
+ when String, SemanticPuppet::Version
176
+ a.any? { |element| match(b, element, scope) }
177
+ when Types::PAnyType
178
+ a.each {|element| return true if b.instance?(element) }
179
+ return false
180
+ else
181
+ a.each {|element| return true if equals(element, b) }
182
+ return false
183
+ end
184
+ end
185
+
186
+ def include_Hash(a, b, scope)
187
+ include?(a.keys, b, scope)
188
+ end
189
+
190
+ def include_VersionRange(a, b, scope)
191
+ Types::PSemVerRangeType.include?(a, b)
192
+ end
193
+
194
+ # Matches in general by using == operator
195
+ def match_Object(pattern, a, scope)
196
+ equals(a, pattern)
197
+ end
198
+
199
+ # Matches only against strings
200
+ def match_Regexp(regexp, left, scope)
201
+ return false unless left.is_a? String
202
+ matched = regexp.match(left)
203
+ set_match_data(matched, scope) # creates or clears ephemeral
204
+ !!matched # convert to boolean
205
+ end
206
+
207
+ # Matches against semvers and strings
208
+ def match_Version(version, left, scope)
209
+ if left.is_a?(SemanticPuppet::Version)
210
+ version == left
211
+ elsif left.is_a? String
212
+ begin
213
+ version == SemanticPuppet::Version.parse(left)
214
+ rescue ArgumentError
215
+ false
216
+ end
217
+ else
218
+ false
219
+ end
220
+ end
221
+
222
+ # Matches against semvers and strings
223
+ def match_VersionRange(range, left, scope)
224
+ Types::PSemVerRangeType.include?(range, left)
225
+ end
226
+
227
+ def match_PAnyType(any_type, left, scope)
228
+ # right is a type and left is not - check if left is an instance of the given type
229
+ # (The reverse is not terribly meaningful - computing which of the case options that first produces
230
+ # an instance of a given type).
231
+ #
232
+ any_type.instance?(left)
233
+ end
234
+
235
+ def match_Array(array, left, scope)
236
+ return false unless left.is_a?(Array)
237
+ return false unless left.length == array.length
238
+ array.each_with_index.all? { | pattern, index| match(left[index], pattern, scope) }
239
+ end
240
+
241
+ def match_Hash(hash, left, scope)
242
+ return false unless left.is_a?(Hash)
243
+ hash.all? {|x,y| match(left[x], y, scope) }
244
+ end
245
+
246
+ def match_Symbol(symbol, left, scope)
247
+ return true if symbol == :default
248
+ equals(left, default, scope)
249
+ end
250
+ end
251
+ end
252
+ end
@@ -0,0 +1,94 @@
1
+ # Handler of Epp call/evaluation from the epp and inline_epp functions
2
+ #
3
+ class Puppet::Pops::Evaluator::EppEvaluator
4
+
5
+ def self.inline_epp(scope, epp_source, template_args = nil)
6
+ unless epp_source.is_a?(String)
7
+ raise ArgumentError, "inline_epp(): the first argument must be a String with the epp source text, got a #{epp_source.class}"
8
+ end
9
+
10
+ # Parse and validate the source
11
+ parser = Puppet::Pops::Parser::EvaluatingParser::EvaluatingEppParser.new
12
+ begin
13
+ result = parser.parse_string(epp_source, 'inlined-epp-text')
14
+ rescue Puppet::ParseError => e
15
+ raise ArgumentError, "inline_epp(): Invalid EPP: #{e.message}"
16
+ end
17
+
18
+ # Evaluate (and check template_args)
19
+ evaluate(parser, 'inline_epp', scope, false, result, template_args)
20
+ end
21
+
22
+ def self.epp(scope, file, env_name, template_args = nil)
23
+ unless file.is_a?(String)
24
+ raise ArgumentError, "epp(): the first argument must be a String with the filename, got a #{file.class}"
25
+ end
26
+
27
+ unless Puppet::FileSystem.exist?(file)
28
+ unless file =~ /\.epp$/
29
+ file = file + ".epp"
30
+ end
31
+ end
32
+
33
+ scope.debug "Retrieving epp template #{file}"
34
+ template_file = Puppet::Parser::Files.find_template(file, env_name)
35
+ if template_file.nil? || !Puppet::FileSystem.exist?(template_file)
36
+ raise Puppet::ParseError, _("Could not find template '%{file}'") % { file: file }
37
+ end
38
+
39
+ # Parse and validate the source
40
+ parser = Puppet::Pops::Parser::EvaluatingParser::EvaluatingEppParser.new
41
+ begin
42
+ result = parser.parse_file(template_file)
43
+ rescue Puppet::ParseError => e
44
+ raise ArgumentError, "epp(): Invalid EPP: #{e.message}"
45
+ end
46
+
47
+ # Evaluate (and check template_args)
48
+ evaluate(parser, 'epp', scope, true, result, template_args)
49
+ end
50
+
51
+ private
52
+
53
+ def self.evaluate(parser, func_name, scope, use_global_scope_only, parse_result, template_args)
54
+ template_args, template_args_set = handle_template_args(func_name, template_args)
55
+
56
+ body = parse_result.body
57
+ unless body.is_a?(Puppet::Pops::Model::LambdaExpression)
58
+ raise ArgumentError, "#{func_name}(): the parser did not produce a LambdaExpression, got '#{body.class}'"
59
+ end
60
+ unless body.body.is_a?(Puppet::Pops::Model::EppExpression)
61
+ raise ArgumentError, "#{func_name}(): the parser did not produce an EppExpression, got '#{body.body.class}'"
62
+ end
63
+ unless parse_result.definitions.empty?
64
+ raise ArgumentError, "#{func_name}(): The EPP template contains illegal expressions (definitions)"
65
+ end
66
+
67
+ parameters_specified = body.body.parameters_specified
68
+ if parameters_specified || template_args_set
69
+ enforce_parameters = parameters_specified
70
+ else
71
+ enforce_parameters = true
72
+ end
73
+
74
+ # inline_epp() logic sees all local variables, epp() all global
75
+ if use_global_scope_only
76
+ scope.with_global_scope do |global_scope|
77
+ parser.closure(body, global_scope).call_by_name(template_args, enforce_parameters)
78
+ end
79
+ else
80
+ parser.closure(body, scope).call_by_name(template_args, enforce_parameters)
81
+ end
82
+ end
83
+
84
+ def self.handle_template_args(func_name, template_args)
85
+ if template_args.nil?
86
+ [{}, false]
87
+ else
88
+ unless template_args.is_a?(Hash)
89
+ raise ArgumentError, "#{func_name}(): the template_args must be a Hash, got a #{template_args.class}"
90
+ end
91
+ [template_args, true]
92
+ end
93
+ end
94
+ end
@@ -0,0 +1,1258 @@
1
+ require 'puppet/parser/scope'
2
+ require 'puppet/pops/evaluator/compare_operator'
3
+ require 'puppet/pops/evaluator/relationship_operator'
4
+ require 'puppet/pops/evaluator/access_operator'
5
+ require 'puppet/pops/evaluator/closure'
6
+ require 'puppet/pops/evaluator/external_syntax_support'
7
+ require 'puppet/pops/types/iterable'
8
+
9
+ module Puppet::Pops
10
+ module Evaluator
11
+ # This implementation of {Evaluator} performs evaluation using the puppet 3.x runtime system
12
+ # in a manner largely compatible with Puppet 3.x, but adds new features and introduces constraints.
13
+ #
14
+ # The evaluation uses _polymorphic dispatch_ which works by dispatching to the first found method named after
15
+ # the class or one of its super-classes. The EvaluatorImpl itself mainly deals with evaluation (it currently
16
+ # also handles assignment), and it uses a delegation pattern to more specialized handlers of some operators
17
+ # that in turn use polymorphic dispatch; this to not clutter EvaluatorImpl with too much responsibility).
18
+ #
19
+ # Since a pattern is used, only the main entry points are fully documented. The parameters _o_ and _scope_ are
20
+ # the same in all the polymorphic methods, (the type of the parameter _o_ is reflected in the method's name;
21
+ # either the actual class, or one of its super classes). The _scope_ parameter is always the scope in which
22
+ # the evaluation takes place. If nothing else is mentioned, the return is always the result of evaluation.
23
+ #
24
+ # See {Visitable} and {Visitor} for more information about
25
+ # polymorphic calling.
26
+ #
27
+ class EvaluatorImpl
28
+ include Utils
29
+
30
+ # Provides access to the Puppet 3.x runtime (scope, etc.)
31
+ # This separation has been made to make it easier to later migrate the evaluator to an improved runtime.
32
+ #
33
+ include Runtime3Support
34
+ include ExternalSyntaxSupport
35
+
36
+ COMMA_SEPARATOR = ', '.freeze
37
+
38
+ # Reference to Issues name space makes it easier to refer to issues
39
+ # (Issues are shared with the validator).
40
+ #
41
+ Issues = Issues
42
+
43
+ def initialize
44
+ @@initialized ||= static_initialize
45
+
46
+ # Use null migration checker unless given in context
47
+ @migration_checker = Puppet.lookup(:migration_checker) { Migration::MigrationChecker.singleton }
48
+ end
49
+
50
+ # @api private
51
+ def static_initialize
52
+ @@eval_visitor ||= Visitor.new(self, "eval", 1, 1)
53
+ @@lvalue_visitor ||= Visitor.new(self, "lvalue", 1, 1)
54
+ @@assign_visitor ||= Visitor.new(self, "assign", 3, 3)
55
+ @@string_visitor ||= Visitor.new(self, "string", 1, 1)
56
+
57
+ @@type_calculator ||= Types::TypeCalculator.singleton
58
+
59
+ @@compare_operator ||= CompareOperator.new
60
+ @@relationship_operator ||= RelationshipOperator.new
61
+ true
62
+ end
63
+ private :static_initialize
64
+
65
+ # @api private
66
+ def type_calculator
67
+ @@type_calculator
68
+ end
69
+
70
+ # Evaluates the given _target_ object in the given scope.
71
+ #
72
+ # @overload evaluate(target, scope)
73
+ # @param target [Object] evaluation target - see methods on the pattern assign_TYPE for actual supported types.
74
+ # @param scope [Object] the runtime specific scope class where evaluation should take place
75
+ # @return [Object] the result of the evaluation
76
+ #
77
+ # @api public
78
+ #
79
+ def evaluate(target, scope)
80
+ begin
81
+ @@eval_visitor.visit_this_1(self, target, scope)
82
+
83
+ rescue SemanticError => e
84
+ # A raised issue may not know the semantic target, use errors call stack, but fill in the
85
+ # rest from a supplied semantic object, or the target instruction if there is not semantic
86
+ # object.
87
+ #
88
+ fail(e.issue, e.semantic || target, e.options, e)
89
+
90
+ rescue Puppet::PreformattedError => e
91
+ # Already formatted with location information, and with the wanted call stack.
92
+ # Note this is currently a specialized ParseError, so rescue-order is important
93
+ #
94
+ raise e
95
+
96
+ rescue Puppet::ParseError => e
97
+ # ParseError may be raised in ruby code without knowing the location
98
+ # in puppet code.
99
+ # Accept a ParseError that has file or line information available
100
+ # as an error that should be used verbatim. (Tests typically run without
101
+ # setting a file name).
102
+ # ParseError can supply an original - it is impossible to determine which
103
+ # call stack that should be propagated, using the ParseError's backtrace.
104
+ #
105
+ if e.file || e.line
106
+ raise e
107
+ else
108
+ # Since it had no location information, treat it as user intended a general purpose
109
+ # error. Pass on its call stack.
110
+ fail(Issues::RUNTIME_ERROR, target, {:detail => e.message}, e)
111
+ end
112
+
113
+
114
+ rescue Puppet::Error => e
115
+ # PuppetError has the ability to wrap an exception, if so, use the wrapped exception's
116
+ # call stack instead
117
+ fail(Issues::RUNTIME_ERROR, target, {:detail => e.message}, e.original || e)
118
+
119
+ rescue StopIteration => e
120
+ # Ensure these are not rescued as StandardError
121
+ raise e
122
+
123
+ rescue StandardError => e
124
+ # All other errors, use its message and call stack
125
+ fail(Issues::RUNTIME_ERROR, target, {:detail => e.message}, e)
126
+ end
127
+ end
128
+
129
+ # Assigns the given _value_ to the given _target_. The additional argument _o_ is the instruction that
130
+ # produced the target/value tuple and it is used to set the origin of the result.
131
+ #
132
+ # @param target [Object] assignment target - see methods on the pattern assign_TYPE for actual supported types.
133
+ # @param value [Object] the value to assign to `target`
134
+ # @param o [Model::PopsObject] originating instruction
135
+ # @param scope [Object] the runtime specific scope where evaluation should take place
136
+ #
137
+ # @api private
138
+ #
139
+ def assign(target, value, o, scope)
140
+ @@assign_visitor.visit_this_3(self, target, value, o, scope)
141
+ end
142
+
143
+ # Computes a value that can be used as the LHS in an assignment.
144
+ # @param o [Object] the expression to evaluate as a left (assignable) entity
145
+ # @param scope [Object] the runtime specific scope where evaluation should take place
146
+ #
147
+ # @api private
148
+ #
149
+ def lvalue(o, scope)
150
+ @@lvalue_visitor.visit_this_1(self, o, scope)
151
+ end
152
+
153
+ # Produces a String representation of the given object _o_ as used in interpolation.
154
+ # @param o [Object] the expression of which a string representation is wanted
155
+ # @param scope [Object] the runtime specific scope where evaluation should take place
156
+ #
157
+ # @api public
158
+ #
159
+ def string(o, scope)
160
+ @@string_visitor.visit_this_1(self, o, scope)
161
+ end
162
+
163
+ # Evaluate a BlockExpression in a new scope with variables bound to the
164
+ # given values.
165
+ #
166
+ # @param scope [Puppet::Parser::Scope] the parent scope
167
+ # @param variable_bindings [Hash{String => Object}] the variable names and values to bind (names are keys, bound values are values)
168
+ # @param block [Model::BlockExpression] the sequence of expressions to evaluate in the new scope
169
+ #
170
+ # @api private
171
+ #
172
+ def evaluate_block_with_bindings(scope, variable_bindings, block_expr)
173
+ scope.with_guarded_scope do
174
+ # change to create local scope_from - cannot give it file and line -
175
+ # that is the place of the call, not "here"
176
+ create_local_scope_from(variable_bindings, scope)
177
+ evaluate(block_expr, scope)
178
+ end
179
+ end
180
+
181
+ protected
182
+
183
+ def lvalue_VariableExpression(o, scope)
184
+ # evaluate the name
185
+ evaluate(o.expr, scope)
186
+ end
187
+
188
+ # Catches all illegal lvalues
189
+ #
190
+ def lvalue_Object(o, scope)
191
+ fail(Issues::ILLEGAL_ASSIGNMENT, o)
192
+ end
193
+
194
+ # An array is assignable if all entries are lvalues
195
+ def lvalue_LiteralList(o, scope)
196
+ o.values.map {|x| lvalue(x, scope) }
197
+ end
198
+
199
+ # Assign value to named variable.
200
+ # The '$' sign is never part of the name.
201
+ # @example In Puppet DSL
202
+ # $name = value
203
+ # @param name [String] name of variable without $
204
+ # @param value [Object] value to assign to the variable
205
+ # @param o [Model::PopsObject] originating instruction
206
+ # @param scope [Object] the runtime specific scope where evaluation should take place
207
+ # @return [value<Object>]
208
+ #
209
+ def assign_String(name, value, o, scope)
210
+ if name =~ /::/
211
+ fail(Issues::CROSS_SCOPE_ASSIGNMENT, o.left_expr, {:name => name})
212
+ end
213
+ set_variable(name, value, o, scope)
214
+ value
215
+ end
216
+
217
+ def assign_Numeric(n, value, o, scope)
218
+ fail(Issues::ILLEGAL_NUMERIC_ASSIGNMENT, o.left_expr, {:varname => n.to_s})
219
+ end
220
+
221
+ # Catches all illegal assignment (e.g. 1 = 2, {'a'=>1} = 2, etc)
222
+ #
223
+ def assign_Object(name, value, o, scope)
224
+ fail(Issues::ILLEGAL_ASSIGNMENT, o)
225
+ end
226
+
227
+ def assign_Array(lvalues, values, o, scope)
228
+ if values.is_a?(Hash)
229
+ lvalues.map do |lval|
230
+ assign(lval,
231
+ values.fetch(lval) {|k| fail(Issues::MISSING_MULTI_ASSIGNMENT_KEY, o, :key =>k)},
232
+ o, scope)
233
+ end
234
+ elsif values.is_a?(Puppet::Pops::Types::PClassType)
235
+ if Puppet[:tasks]
236
+ fail(Issues::CATALOG_OPERATION_NOT_SUPPORTED_WHEN_SCRIPTING, o, {:operation => _('multi var assignment from class')})
237
+ end
238
+ # assign variables from class variables
239
+ # lookup class resource and return one or more parameter values
240
+ # TODO: behavior when class_name is nil
241
+ resource = find_resource(scope, 'class', values.class_name)
242
+ if resource
243
+ base_name = "#{values.class_name.downcase}::"
244
+ idx = -1
245
+ result = lvalues.map do |lval|
246
+ idx += 1
247
+ varname = "#{base_name}#{lval}"
248
+ if variable_exists?(varname, scope)
249
+ result = get_variable_value(varname, o, scope)
250
+ assign(lval, result, o, scope)
251
+ else
252
+ fail(Puppet::Pops::Issues::MISSING_MULTI_ASSIGNMENT_VARIABLE, o.left_expr.values[idx], {:name => varname})
253
+ end
254
+ end
255
+ else
256
+ fail(Issues::UNKNOWN_RESOURCE, o.right_expr, {:type_name => 'Class', :title => values.class_name})
257
+ end
258
+
259
+ else
260
+ values = [values] unless values.is_a?(Array)
261
+ if values.size != lvalues.size
262
+ fail(Issues::ILLEGAL_MULTI_ASSIGNMENT_SIZE, o, :expected =>lvalues.size, :actual => values.size)
263
+ end
264
+ lvalues.zip(values).map { |lval, val| assign(lval, val, o, scope) }
265
+ end
266
+ end
267
+
268
+ def eval_Factory(o, scope)
269
+ evaluate(o.model, scope)
270
+ end
271
+
272
+ # Evaluates any object not evaluated to something else to itself.
273
+ def eval_Object o, scope
274
+ o
275
+ end
276
+
277
+ # Allows nil to be used as a Nop, Evaluates to nil
278
+ def eval_NilClass(o, scope)
279
+ nil
280
+ end
281
+
282
+ # Evaluates Nop to nil.
283
+ def eval_Nop(o, scope)
284
+ nil
285
+ end
286
+
287
+ # Captures all LiteralValues not handled elsewhere.
288
+ #
289
+ def eval_LiteralValue(o, scope)
290
+ o.value
291
+ end
292
+
293
+ # Reserved Words fail to evaluate
294
+ #
295
+ def eval_ReservedWord(o, scope)
296
+ if !o.future
297
+ fail(Issues::RESERVED_WORD, o, {:word => o.word})
298
+ else
299
+ o.word
300
+ end
301
+ end
302
+
303
+ def eval_LiteralDefault(o, scope)
304
+ :default
305
+ end
306
+
307
+ def eval_LiteralUndef(o, scope)
308
+ nil
309
+ end
310
+
311
+ # A QualifiedReference (i.e. a capitalized qualified name such as Foo, or Foo::Bar) evaluates to a PTypeType
312
+ #
313
+ def eval_QualifiedReference(o, scope)
314
+ type = Types::TypeParser.singleton.interpret(o)
315
+ fail(Issues::UNKNOWN_RESOURCE_TYPE, o, {:type_name => type.type_string }) if type.is_a?(Types::PTypeReferenceType)
316
+ type
317
+ end
318
+
319
+ def eval_NotExpression(o, scope)
320
+ ! is_true?(evaluate(o.expr, scope), o.expr)
321
+ end
322
+
323
+ def eval_UnaryMinusExpression(o, scope)
324
+ - coerce_numeric(evaluate(o.expr, scope), o, scope)
325
+ end
326
+
327
+ def eval_UnfoldExpression(o, scope)
328
+ candidate = evaluate(o.expr, scope)
329
+ case candidate
330
+ when nil
331
+ []
332
+ when Array
333
+ candidate
334
+ when Hash
335
+ candidate.to_a
336
+ when Puppet::Pops::Types::Iterator
337
+ candidate.to_a
338
+ else
339
+ # turns anything else into an array (so result can be unfolded)
340
+ [candidate]
341
+ end
342
+ end
343
+
344
+ # Abstract evaluation, returns array [left, right] with the evaluated result of left_expr and
345
+ # right_expr
346
+ # @return <Array<Object, Object>> array with result of evaluating left and right expressions
347
+ #
348
+ def eval_BinaryExpression o, scope
349
+ [ evaluate(o.left_expr, scope), evaluate(o.right_expr, scope) ]
350
+ end
351
+
352
+ # Evaluates assignment with operators =, +=, -= and
353
+ #
354
+ # @example Puppet DSL
355
+ # $a = 1
356
+ # $a += 1
357
+ # $a -= 1
358
+ #
359
+ def eval_AssignmentExpression(o, scope)
360
+ name = lvalue(o.left_expr, scope)
361
+ value = evaluate(o.right_expr, scope)
362
+
363
+ if o.operator == '='
364
+ assign(name, value, o, scope)
365
+ else
366
+ fail(Issues::UNSUPPORTED_OPERATOR, o, {:operator => o.operator})
367
+ end
368
+ value
369
+ end
370
+
371
+ ARITHMETIC_OPERATORS = ['+', '-', '*', '/', '%', '<<', '>>'].freeze
372
+ COLLECTION_OPERATORS = ['+', '-', '<<'].freeze
373
+
374
+ # Handles binary expression where lhs and rhs are array/hash or numeric and operator is +, - , *, % / << >>
375
+ #
376
+ def eval_ArithmeticExpression(o, scope)
377
+ left = evaluate(o.left_expr, scope)
378
+ right = evaluate(o.right_expr, scope)
379
+
380
+ begin
381
+ result = calculate(left, right, o, scope)
382
+ rescue ArgumentError => e
383
+ fail(Issues::RUNTIME_ERROR, o, {:detail => e.message}, e)
384
+ end
385
+ result
386
+ end
387
+
388
+
389
+ # Handles binary expression where lhs and rhs are array/hash or numeric and operator is +, - , *, % / << >>
390
+ #
391
+ def calculate(left, right, bin_expr, scope)
392
+ operator = bin_expr.operator
393
+ unless ARITHMETIC_OPERATORS.include?(operator)
394
+ fail(Issues::UNSUPPORTED_OPERATOR, bin_expr, {:operator => operator})
395
+ end
396
+
397
+ left_o = bin_expr.left_expr
398
+ if (left.is_a?(Array) || left.is_a?(Hash)) && COLLECTION_OPERATORS.include?(operator)
399
+ # Handle operation on collections
400
+ case operator
401
+ when '+'
402
+ concatenate(left, right)
403
+ when '-'
404
+ delete(left, right)
405
+ when '<<'
406
+ unless left.is_a?(Array)
407
+ fail(Issues::OPERATOR_NOT_APPLICABLE, left_o, {:operator => operator, :left_value => left})
408
+ end
409
+ left + [right]
410
+ end
411
+ else
412
+ # Handle operation on numeric
413
+ left = coerce_numeric(left, left_o, scope)
414
+ right = coerce_numeric(right, bin_expr.right_expr, scope)
415
+ begin
416
+ if operator == '%' && (left.is_a?(Float) || right.is_a?(Float))
417
+ # Deny users the fun of seeing severe rounding errors and confusing results
418
+ fail(Issues::OPERATOR_NOT_APPLICABLE, left_o, {:operator => operator, :left_value => left}) if left.is_a?(Float)
419
+ fail(Issues::OPERATOR_NOT_APPLICABLE_WHEN, left_o, {:operator => operator, :left_value => left, :right_value => right})
420
+ end
421
+ if right.is_a?(Time::TimeData) && !left.is_a?(Time::TimeData)
422
+ if operator == '+' || operator == '*' && right.is_a?(Time::Timespan)
423
+ # Switch places. Let the TimeData do the arithmetic
424
+ x = left
425
+ left = right
426
+ right = x
427
+ elsif operator == '-' && right.is_a?(Time::Timespan)
428
+ left = Time::Timespan.new((left * Time::NSECS_PER_SEC).to_i)
429
+ else
430
+ fail(Issues::OPERATOR_NOT_APPLICABLE_WHEN, left_o, {:operator => operator, :left_value => left, :right_value => right})
431
+ end
432
+ end
433
+ result = left.send(operator, right)
434
+ rescue NoMethodError => e
435
+ fail(Issues::OPERATOR_NOT_APPLICABLE, left_o, {:operator => operator, :left_value => left})
436
+ rescue ZeroDivisionError => e
437
+ fail(Issues::DIV_BY_ZERO, bin_expr.right_expr)
438
+ end
439
+ case result
440
+ when Float
441
+ if result == Float::INFINITY || result == -Float::INFINITY
442
+ fail(Issues::RESULT_IS_INFINITY, left_o, {:operator => operator})
443
+ end
444
+ when Integer
445
+ if result < MIN_INTEGER || result > MAX_INTEGER
446
+ fail(Issues::NUMERIC_OVERFLOW, bin_expr, {:value => result})
447
+ end
448
+ end
449
+ result
450
+ end
451
+ end
452
+
453
+ def eval_EppExpression(o, scope)
454
+ scope["@epp"] = []
455
+ evaluate(o.body, scope)
456
+ result = scope["@epp"].join
457
+ result
458
+ end
459
+
460
+ def eval_RenderStringExpression(o, scope)
461
+ scope["@epp"] << o.value.dup
462
+ nil
463
+ end
464
+
465
+ def eval_RenderExpression(o, scope)
466
+ scope["@epp"] << string(evaluate(o.expr, scope), scope)
467
+ nil
468
+ end
469
+
470
+ # Evaluates Puppet DSL ->, ~>, <-, and <~
471
+ def eval_RelationshipExpression(o, scope)
472
+ # First level evaluation, reduction to basic data types or puppet types, the relationship operator then translates this
473
+ # to the final set of references (turning strings into references, which can not naturally be done by the main evaluator since
474
+ # all strings should not be turned into references.
475
+ #
476
+ real = eval_BinaryExpression(o, scope)
477
+ @@relationship_operator.evaluate(real, o, scope)
478
+ end
479
+
480
+ # Evaluates x[key, key, ...]
481
+ #
482
+ def eval_AccessExpression(o, scope)
483
+ left = evaluate(o.left_expr, scope)
484
+ keys = o.keys || []
485
+ if left.is_a?(Types::PClassType)
486
+ # Evaluate qualified references without errors no undefined types
487
+ keys = keys.map {|key| key.is_a?(Model::QualifiedReference) ? Types::TypeParser.singleton.interpret(key) : evaluate(key, scope) }
488
+ else
489
+ keys = keys.map {|key| evaluate(key, scope) }
490
+ # Resource[File] becomes File
491
+ return keys[0] if Types::PResourceType::DEFAULT == left && keys.size == 1 && keys[0].is_a?(Types::PResourceType)
492
+ end
493
+ AccessOperator.new(o).access(left, scope, *keys)
494
+ end
495
+
496
+ # Evaluates <, <=, >, >=, and ==
497
+ #
498
+ def eval_ComparisonExpression o, scope
499
+ left = evaluate(o.left_expr, scope)
500
+ right = evaluate(o.right_expr, scope)
501
+
502
+ begin
503
+ # Left is a type
504
+ if left.is_a?(Types::PAnyType)
505
+ case o.operator
506
+ when '=='
507
+ @@type_calculator.equals(left,right)
508
+
509
+ when '!='
510
+ !@@type_calculator.equals(left,right)
511
+
512
+ when '<'
513
+ # left can be assigned to right, but they are not equal
514
+ @@type_calculator.assignable?(right, left) && ! @@type_calculator.equals(left,right)
515
+ when '<='
516
+ # left can be assigned to right
517
+ @@type_calculator.assignable?(right, left)
518
+ when '>'
519
+ # right can be assigned to left, but they are not equal
520
+ @@type_calculator.assignable?(left,right) && ! @@type_calculator.equals(left,right)
521
+ when '>='
522
+ # right can be assigned to left
523
+ @@type_calculator.assignable?(left, right)
524
+ else
525
+ fail(Issues::UNSUPPORTED_OPERATOR, o, {:operator => o.operator})
526
+ end
527
+ else
528
+ case o.operator
529
+ when '=='
530
+ @@compare_operator.equals(left,right)
531
+ when '!='
532
+ ! @@compare_operator.equals(left,right)
533
+ when '<'
534
+ @@compare_operator.compare(left,right) < 0
535
+ when '<='
536
+ @@compare_operator.compare(left,right) <= 0
537
+ when '>'
538
+ @@compare_operator.compare(left,right) > 0
539
+ when '>='
540
+ @@compare_operator.compare(left,right) >= 0
541
+ else
542
+ fail(Issues::UNSUPPORTED_OPERATOR, o, {:operator => o.operator})
543
+ end
544
+ end
545
+ rescue ArgumentError => e
546
+ fail(Issues::COMPARISON_NOT_POSSIBLE, o, {
547
+ :operator => o.operator,
548
+ :left_value => left,
549
+ :right_value => right,
550
+ :detail => e.message}, e)
551
+ end
552
+ end
553
+
554
+ # Evaluates matching expressions with type, string or regexp rhs expression.
555
+ # If RHS is a type, the =~ matches compatible (instance? of) type.
556
+ #
557
+ # @example
558
+ # x =~ /abc.*/
559
+ # @example
560
+ # x =~ "abc.*/"
561
+ # @example
562
+ # y = "abc"
563
+ # x =~ "${y}.*"
564
+ # @example
565
+ # [1,2,3] =~ Array[Integer[1,10]]
566
+ #
567
+ # Note that a string is not instance? of Regexp, only Regular expressions are.
568
+ # The Pattern type should instead be used as it is specified as subtype of String.
569
+ #
570
+ # @return [Boolean] if a match was made or not. Also sets $0..$n to matchdata in current scope.
571
+ #
572
+ def eval_MatchExpression o, scope
573
+ left = evaluate(o.left_expr, scope)
574
+ pattern = evaluate(o.right_expr, scope)
575
+
576
+ # matches RHS types as instance of for all types except a parameterized Regexp[R]
577
+ if pattern.is_a?(Types::PAnyType)
578
+ # evaluate as instance? of type check
579
+ matched = pattern.instance?(left)
580
+ # convert match result to Boolean true, or false
581
+ return o.operator == '=~' ? !!matched : !matched
582
+ end
583
+
584
+ if pattern.is_a?(SemanticPuppet::VersionRange)
585
+ # evaluate if range includes version
586
+ matched = Types::PSemVerRangeType.include?(pattern, left)
587
+ return o.operator == '=~' ? matched : !matched
588
+ end
589
+
590
+ begin
591
+ pattern = Regexp.new(pattern) unless pattern.is_a?(Regexp)
592
+ rescue StandardError => e
593
+ fail(Issues::MATCH_NOT_REGEXP, o.right_expr, {:detail => e.message}, e)
594
+ end
595
+ unless left.is_a?(String)
596
+ fail(Issues::MATCH_NOT_STRING, o.left_expr, {:left_value => left})
597
+ end
598
+
599
+ matched = pattern.match(left) # nil, or MatchData
600
+ set_match_data(matched,scope) # creates ephemeral
601
+
602
+ # convert match result to Boolean true, or false
603
+ o.operator == '=~' ? !!matched : !matched
604
+ end
605
+
606
+ # Evaluates Puppet DSL `in` expression
607
+ #
608
+ def eval_InExpression o, scope
609
+ left = evaluate(o.left_expr, scope)
610
+ right = evaluate(o.right_expr, scope)
611
+ @@compare_operator.include?(right, left, scope)
612
+ end
613
+
614
+ # @example
615
+ # $a and $b
616
+ # b is only evaluated if a is true
617
+ #
618
+ def eval_AndExpression o, scope
619
+ is_true?(evaluate(o.left_expr, scope), o.left_expr) ? is_true?(evaluate(o.right_expr, scope), o.right_expr) : false
620
+ end
621
+
622
+ # @example
623
+ # a or b
624
+ # b is only evaluated if a is false
625
+ #
626
+ def eval_OrExpression o, scope
627
+ is_true?(evaluate(o.left_expr, scope), o.left_expr) ? true : is_true?(evaluate(o.right_expr, scope), o.right_expr)
628
+ end
629
+
630
+ # Evaluates each entry of the literal list and creates a new Array
631
+ # Supports unfolding of entries
632
+ # @return [Array] with the evaluated content
633
+ #
634
+ def eval_LiteralList o, scope
635
+ unfold([], o.values, scope)
636
+ end
637
+
638
+ # Evaluates each entry of the literal hash and creates a new Hash.
639
+ # @return [Hash] with the evaluated content
640
+ #
641
+ def eval_LiteralHash o, scope
642
+ # optimized
643
+ o.entries.reduce({}) {|h,entry| h[evaluate(entry.key, scope)] = evaluate(entry.value, scope); h }
644
+ end
645
+
646
+ # Evaluates all statements and produces the last evaluated value
647
+ #
648
+ def eval_BlockExpression o, scope
649
+ o.statements.reduce(nil) {|memo, s| evaluate(s, scope)}
650
+ end
651
+
652
+ # Performs optimized search over case option values, lazily evaluating each
653
+ # until there is a match. If no match is found, the case expression's default expression
654
+ # is evaluated (it may be nil or Nop if there is no default, thus producing nil).
655
+ # If an option matches, the result of evaluating that option is returned.
656
+ # @return [Object, nil] what a matched option returns, or nil if nothing matched.
657
+ #
658
+ def eval_CaseExpression(o, scope)
659
+ # memo scope level before evaluating test - don't want a match in the case test to leak $n match vars
660
+ # to expressions after the case expression.
661
+ #
662
+ scope.with_guarded_scope do
663
+ test = evaluate(o.test, scope)
664
+
665
+ result = nil
666
+ the_default = nil
667
+ if o.options.find do |co|
668
+ # the first case option that matches
669
+ if co.values.find do |c|
670
+ c = unwind_parentheses(c)
671
+ case c
672
+ when Model::LiteralDefault
673
+ the_default = co.then_expr
674
+ next false
675
+ when Model::UnfoldExpression
676
+ # not ideal for error reporting, since it is not known which unfolded result
677
+ # that caused an error - the entire unfold expression is blamed (i.e. the var c, passed to is_match?)
678
+ evaluate(c, scope).any? {|v| is_match?(test, v, c, co, scope) }
679
+ else
680
+ is_match?(test, evaluate(c, scope), c, co, scope)
681
+ end
682
+ end
683
+ result = evaluate(co.then_expr, scope)
684
+ true # the option was picked
685
+ end
686
+ end
687
+ result # an option was picked, and produced a result
688
+ else
689
+ evaluate(the_default, scope) # evaluate the default (should be a nop/nil) if there is no default).
690
+ end
691
+ end
692
+ end
693
+
694
+ # Evaluates a CollectExpression by creating a collector transformer. The transformer
695
+ # will evaulate the collection, create the appropriate collector, and hand it off
696
+ # to the compiler to collect the resources specified by the query.
697
+ #
698
+ def eval_CollectExpression o, scope
699
+ if o.query.is_a?(Model::ExportedQuery)
700
+ optionally_fail(Issues::RT_NO_STORECONFIGS, o);
701
+ end
702
+ CollectorTransformer.new().transform(o,scope)
703
+ end
704
+
705
+ def eval_ParenthesizedExpression(o, scope)
706
+ evaluate(o.expr, scope)
707
+ end
708
+
709
+ # This evaluates classes, nodes and resource type definitions to nil, since 3x:
710
+ # instantiates them, and evaluates their parameters and body. This is achieved by
711
+ # providing bridge AST classes in Puppet::Parser::AST::PopsBridge that bridges a
712
+ # Pops Program and a Pops Expression.
713
+ #
714
+ # Since all Definitions are handled "out of band", they are treated as a no-op when
715
+ # evaluated.
716
+ #
717
+ def eval_Definition(o, scope)
718
+ nil
719
+ end
720
+
721
+ def eval_Program(o, scope)
722
+ begin
723
+ file = o.locator.file
724
+ line = 0
725
+ # Add stack frame for "top scope" logic. See Puppet::Pops::PuppetStack
726
+ return Puppet::Pops::PuppetStack.stack(file, line, self, 'evaluate', [o.body, scope])
727
+ #evaluate(o.body, scope)
728
+ rescue Puppet::Pops::Evaluator::PuppetStopIteration => ex
729
+ # breaking out of a file level program is not allowed
730
+ raise Puppet::ParseError.new("break() from context where this is illegal", ex.file, ex.line)
731
+ end
732
+ end
733
+
734
+ # Produces Array[PAnyType], an array of resource references
735
+ #
736
+ def eval_ResourceExpression(o, scope)
737
+ exported = o.exported
738
+ virtual = o.virtual
739
+
740
+ # Get the type name
741
+ type_name =
742
+ if (tmp_name = o.type_name).is_a?(Model::QualifiedName)
743
+ tmp_name.value # already validated as a name
744
+ else
745
+ type_name_acceptable =
746
+ case o.type_name
747
+ when Model::QualifiedReference
748
+ true
749
+ when Model::AccessExpression
750
+ o.type_name.left_expr.is_a?(Model::QualifiedReference)
751
+ end
752
+
753
+ evaluated_name = evaluate(tmp_name, scope)
754
+ unless type_name_acceptable
755
+ actual = type_calculator.generalize(type_calculator.infer(evaluated_name)).to_s
756
+ fail(Issues::ILLEGAL_RESOURCE_TYPE, o.type_name, {:actual => actual})
757
+ end
758
+
759
+ # must be a CatalogEntry subtype
760
+ case evaluated_name
761
+ when Types::PClassType
762
+ unless evaluated_name.class_name.nil?
763
+ fail(Issues::ILLEGAL_RESOURCE_TYPE, o.type_name, {:actual=> evaluated_name.to_s})
764
+ end
765
+ 'class'
766
+
767
+ when Types::PResourceType
768
+ unless evaluated_name.title().nil?
769
+ fail(Issues::ILLEGAL_RESOURCE_TYPE, o.type_name, {:actual=> evaluated_name.to_s})
770
+ end
771
+ evaluated_name.type_name # assume validated
772
+
773
+ when Types::PTypeReferenceType
774
+ fail(Issues::UNKNOWN_RESOURCE_TYPE, o.type_string, {:type_name => evaluated_name.to_s})
775
+
776
+ else
777
+ actual = type_calculator.generalize(type_calculator.infer(evaluated_name)).to_s
778
+ fail(Issues::ILLEGAL_RESOURCE_TYPE, o.type_name, {:actual=>actual})
779
+ end
780
+ end
781
+
782
+ # This is a runtime check - the model is valid, but will have runtime issues when evaluated
783
+ # and storeconfigs is not set.
784
+ if(o.exported)
785
+ optionally_fail(Issues::RT_NO_STORECONFIGS_EXPORT, o);
786
+ end
787
+
788
+ titles_to_body = {}
789
+ body_to_titles = {}
790
+ body_to_params = {}
791
+
792
+ # titles are evaluated before attribute operations
793
+ o.bodies.map do | body |
794
+ titles = evaluate(body.title, scope)
795
+
796
+ # Title may not be nil
797
+ # Titles may be given as an array, it is ok if it is empty, but not if it contains nil entries
798
+ # Titles may not be an empty String
799
+ # Titles must be unique in the same resource expression
800
+ # There may be a :default entry, its entries apply with lower precedence
801
+ #
802
+ if titles.nil?
803
+ fail(Issues::MISSING_TITLE, body.title)
804
+ end
805
+ titles = [titles].flatten
806
+
807
+ # Check types of evaluated titles and duplicate entries
808
+ titles.each_with_index do |title, index|
809
+ if title.nil?
810
+ fail(Issues::MISSING_TITLE_AT, body.title, {:index => index})
811
+
812
+ elsif !title.is_a?(String) && title != :default
813
+ actual = type_calculator.generalize(type_calculator.infer(title)).to_s
814
+ fail(Issues::ILLEGAL_TITLE_TYPE_AT, body.title, {:index => index, :actual => actual})
815
+
816
+ elsif title == EMPTY_STRING
817
+ fail(Issues::EMPTY_STRING_TITLE_AT, body.title, {:index => index})
818
+
819
+ elsif titles_to_body[title]
820
+ fail(Issues::DUPLICATE_TITLE, o, {:title => title})
821
+ end
822
+ titles_to_body[title] = body
823
+ end
824
+
825
+ # Do not create a real instance from the :default case
826
+ titles.delete(:default)
827
+
828
+ body_to_titles[body] = titles
829
+
830
+ # Store evaluated parameters in a hash associated with the body, but do not yet create resource
831
+ # since the entry containing :defaults may appear later
832
+ body_to_params[body] = body.operations.reduce({}) do |param_memo, op|
833
+ params = evaluate(op, scope)
834
+ params = [params] unless params.is_a?(Array)
835
+ params.each do |p|
836
+ if param_memo.include? p.name
837
+ fail(Issues::DUPLICATE_ATTRIBUTE, o, {:attribute => p.name})
838
+ end
839
+ param_memo[p.name] = p
840
+ end
841
+ param_memo
842
+ end
843
+ end
844
+
845
+ # Titles and Operations have now been evaluated and resources can be created
846
+ # Each production is a PResource, and an array of all is produced as the result of
847
+ # evaluating the ResourceExpression.
848
+ #
849
+ defaults_hash = body_to_params[titles_to_body[:default]] || {}
850
+ o.bodies.map do | body |
851
+ titles = body_to_titles[body]
852
+ params = defaults_hash.merge(body_to_params[body] || {})
853
+ create_resources(o, scope, virtual, exported, type_name, titles, params.values)
854
+ end.flatten.compact
855
+ end
856
+
857
+ def eval_ResourceOverrideExpression(o, scope)
858
+ evaluated_resources = evaluate(o.resources, scope)
859
+ evaluated_parameters = o.operations.map { |op| evaluate(op, scope) }
860
+ create_resource_overrides(o, scope, [evaluated_resources].flatten, evaluated_parameters)
861
+ evaluated_resources
862
+ end
863
+
864
+ # Produces 3x parameter
865
+ def eval_AttributeOperation(o, scope)
866
+ create_resource_parameter(o, scope, o.attribute_name, evaluate(o.value_expr, scope), o.operator)
867
+ end
868
+
869
+ def eval_AttributesOperation(o, scope)
870
+ hashed_params = evaluate(o.expr, scope)
871
+ unless hashed_params.is_a?(Hash)
872
+ actual = type_calculator.generalize(type_calculator.infer(hashed_params)).to_s
873
+ fail(Issues::TYPE_MISMATCH, o.expr, {:expected => 'Hash', :actual => actual})
874
+ end
875
+ hashed_params.map { |k,v| create_resource_parameter(o, scope, k, v, '=>') }
876
+ end
877
+
878
+ # Sets default parameter values for a type, produces the type
879
+ #
880
+ def eval_ResourceDefaultsExpression(o, scope)
881
+ type = evaluate(o.type_ref, scope)
882
+ type_name =
883
+ if type.is_a?(Types::PResourceType) && !type.type_name.nil? && type.title.nil?
884
+ type.type_name # assume it is a valid name
885
+ else
886
+ actual = type_calculator.generalize(type_calculator.infer(type))
887
+ fail(Issues::ILLEGAL_RESOURCE_TYPE, o.type_ref, {:actual => actual})
888
+ end
889
+ evaluated_parameters = o.operations.map {|op| evaluate(op, scope) }
890
+ create_resource_defaults(o, scope, type_name, evaluated_parameters)
891
+ # Produce the type
892
+ type
893
+ end
894
+
895
+ # Evaluates function call by name.
896
+ #
897
+ def eval_CallNamedFunctionExpression(o, scope)
898
+ # If LHS is a type (i.e. Integer, or Integer[...]
899
+ # the call is taken as an instantiation of the given type
900
+ #
901
+ functor = o.functor_expr
902
+ if functor.is_a?(Model::QualifiedReference) ||
903
+ functor.is_a?(Model::AccessExpression) && functor.left_expr.is_a?(Model::QualifiedReference)
904
+ # instantiation
905
+ type = evaluate(functor, scope)
906
+ return call_function_with_block('new', unfold([type], o.arguments || [], scope), o, scope)
907
+ end
908
+
909
+ # The functor expression is not evaluated, it is not possible to select the function to call
910
+ # via an expression like $a()
911
+ case functor
912
+ when Model::QualifiedName
913
+ # ok
914
+ when Model::RenderStringExpression
915
+ # helpful to point out this easy to make Epp error
916
+ fail(Issues::ILLEGAL_EPP_PARAMETERS, o)
917
+ else
918
+ fail(Issues::ILLEGAL_EXPRESSION, o.functor_expr, {:feature=>'function name', :container => o})
919
+ end
920
+ name = o.functor_expr.value
921
+ call_function_with_block(name, unfold([], o.arguments, scope), o, scope)
922
+ end
923
+
924
+ # Evaluation of CallMethodExpression handles a NamedAccessExpression functor (receiver.function_name)
925
+ #
926
+ def eval_CallMethodExpression(o, scope)
927
+ unless o.functor_expr.is_a? Model::NamedAccessExpression
928
+ fail(Issues::ILLEGAL_EXPRESSION, o.functor_expr, {:feature=>'function accessor', :container => o})
929
+ end
930
+ receiver = unfold([], [o.functor_expr.left_expr], scope)
931
+ name = o.functor_expr.right_expr
932
+ unless name.is_a? Model::QualifiedName
933
+ fail(Issues::ILLEGAL_EXPRESSION, o.functor_expr, {:feature=>'function name', :container => o})
934
+ end
935
+ name = name.value # the string function name
936
+
937
+ obj = receiver[0]
938
+ receiver_type = Types::TypeCalculator.infer(obj)
939
+ if receiver_type.is_a?(Types::PObjectType)
940
+ member = receiver_type[name]
941
+ unless member.nil?
942
+ args = unfold([], o.arguments || [], scope)
943
+ return o.lambda.nil? ? member.invoke(obj, scope, args) : member.invoke(obj, scope, args, &proc_from_lambda(o.lambda, scope))
944
+ end
945
+ end
946
+
947
+ call_function_with_block(name, unfold(receiver, o.arguments || [], scope), o, scope)
948
+ end
949
+
950
+ def call_function_with_block(name, evaluated_arguments, o, scope)
951
+ if o.lambda.nil?
952
+ call_function(name, evaluated_arguments, o, scope)
953
+ else
954
+ call_function(name, evaluated_arguments, o, scope, &proc_from_lambda(o.lambda, scope))
955
+ end
956
+ end
957
+ private :call_function_with_block
958
+
959
+ def proc_from_lambda(lambda, scope)
960
+ closure = Closure::Dynamic.new(self, lambda, scope)
961
+ PuppetProc.new(closure) { |*args| closure.call(*args) }
962
+ end
963
+ private :proc_from_lambda
964
+
965
+ # @example
966
+ # $x ? { 10 => true, 20 => false, default => 0 }
967
+ #
968
+ def eval_SelectorExpression o, scope
969
+ # memo scope level before evaluating test - don't want a match in the case test to leak $n match vars
970
+ # to expressions after the selector expression.
971
+ #
972
+ scope.with_guarded_scope do
973
+ test = evaluate(o.left_expr, scope)
974
+
975
+ the_default = nil
976
+ selected = o.selectors.find do |s|
977
+ me = unwind_parentheses(s.matching_expr)
978
+ case me
979
+ when Model::LiteralDefault
980
+ the_default = s.value_expr
981
+ false
982
+ when Model::UnfoldExpression
983
+ # not ideal for error reporting, since it is not known which unfolded result
984
+ # that caused an error - the entire unfold expression is blamed (i.e. the var c, passed to is_match?)
985
+ evaluate(me, scope).any? {|v| is_match?(test, v, me, s, scope) }
986
+ else
987
+ is_match?(test, evaluate(me, scope), me, s, scope)
988
+ end
989
+ end
990
+ if selected
991
+ evaluate(selected.value_expr, scope)
992
+ elsif the_default
993
+ evaluate(the_default, scope)
994
+ else
995
+ fail(Issues::UNMATCHED_SELECTOR, o.left_expr, :param_value => test)
996
+ end
997
+ end
998
+ end
999
+
1000
+ # SubLocatable is simply an expression that holds location information
1001
+ def eval_SubLocatedExpression o, scope
1002
+ evaluate(o.expr, scope)
1003
+ end
1004
+
1005
+ # Evaluates Puppet DSL Heredoc
1006
+ def eval_HeredocExpression o, scope
1007
+ result = evaluate(o.text_expr, scope)
1008
+ assert_external_syntax(scope, result, o.syntax, o.text_expr)
1009
+ result
1010
+ end
1011
+
1012
+ # Evaluates Puppet DSL `if`
1013
+ def eval_IfExpression o, scope
1014
+ scope.with_guarded_scope do
1015
+ if is_true?(evaluate(o.test, scope), o.test)
1016
+ evaluate(o.then_expr, scope)
1017
+ else
1018
+ evaluate(o.else_expr, scope)
1019
+ end
1020
+ end
1021
+ end
1022
+
1023
+ # Evaluates Puppet DSL `unless`
1024
+ def eval_UnlessExpression o, scope
1025
+ scope.with_guarded_scope do
1026
+ unless is_true?(evaluate(o.test, scope), o.test)
1027
+ evaluate(o.then_expr, scope)
1028
+ else
1029
+ evaluate(o.else_expr, scope)
1030
+ end
1031
+ end
1032
+ end
1033
+
1034
+ # Evaluates a variable (getting its value)
1035
+ # The evaluator is lenient; any expression producing a String is used as a name
1036
+ # of a variable.
1037
+ #
1038
+ def eval_VariableExpression o, scope
1039
+ # Evaluator is not too fussy about what constitutes a name as long as the result
1040
+ # is a String and a valid variable name
1041
+ #
1042
+ name = evaluate(o.expr, scope)
1043
+
1044
+ # Should be caught by validation, but make this explicit here as well, or mysterious evaluation issues
1045
+ # may occur for some evaluation use cases.
1046
+ case name
1047
+ when String
1048
+ when Numeric
1049
+ else
1050
+ fail(Issues::ILLEGAL_VARIABLE_EXPRESSION, o.expr)
1051
+ end
1052
+ get_variable_value(name, o, scope)
1053
+ end
1054
+
1055
+ # Evaluates double quoted strings that may contain interpolation
1056
+ #
1057
+ def eval_ConcatenatedString o, scope
1058
+ o.segments.collect {|expr| string(evaluate(expr, scope), scope)}.join
1059
+ end
1060
+
1061
+
1062
+ # If the wrapped expression is a QualifiedName, it is taken as the name of a variable in scope.
1063
+ # Note that this is different from the 3.x implementation, where an initial qualified name
1064
+ # is accepted. (e.g. `"---${var + 1}---"` is legal. This implementation requires such concrete
1065
+ # syntax to be expressed in a model as `(TextExpression (+ (Variable var) 1)` - i.e. moving the decision to
1066
+ # the parser.
1067
+ #
1068
+ # Semantics; the result of an expression is turned into a string, nil is silently transformed to empty
1069
+ # string.
1070
+ # @return [String] the interpolated result
1071
+ #
1072
+ def eval_TextExpression o, scope
1073
+ if o.expr.is_a?(Model::QualifiedName)
1074
+ string(get_variable_value(o.expr.value, o, scope), scope)
1075
+ else
1076
+ string(evaluate(o.expr, scope), scope)
1077
+ end
1078
+ end
1079
+
1080
+ def string_Object(o, scope)
1081
+ o.to_s
1082
+ end
1083
+
1084
+ def string_Symbol(o, scope)
1085
+ if :undef == o # optimized comparison 1.44 vs 1.95
1086
+ EMPTY_STRING
1087
+ else
1088
+ o.to_s
1089
+ end
1090
+ end
1091
+
1092
+ def string_Array(o, scope)
1093
+ "[#{o.map {|e| string(e, scope)}.join(COMMA_SEPARATOR)}]"
1094
+ end
1095
+
1096
+ def string_Hash(o, scope)
1097
+ "{#{o.map {|k,v| "#{string(k, scope)} => #{string(v, scope)}"}.join(COMMA_SEPARATOR)}}"
1098
+ end
1099
+
1100
+ def string_Regexp(o, scope)
1101
+ Types::PRegexpType.regexp_to_s_with_delimiters(o)
1102
+ end
1103
+
1104
+ def string_PAnyType(o, scope)
1105
+ o.to_s
1106
+ end
1107
+
1108
+ # Produces concatenation / merge of x and y.
1109
+ #
1110
+ # When x is an Array, y of type produces:
1111
+ #
1112
+ # * Array => concatenation `[1,2], [3,4] => [1,2,3,4]`
1113
+ # * Hash => concatenation of hash as array `[key, value, key, value, ...]`
1114
+ # * any other => concatenation of single value
1115
+ #
1116
+ # When x is a Hash, y of type produces:
1117
+ #
1118
+ # * Array => merge of array interpreted as `[key, value, key, value,...]`
1119
+ # * Hash => a merge, where entries in `y` overrides
1120
+ # * any other => error
1121
+ #
1122
+ # When x is something else, wrap it in an array first.
1123
+ #
1124
+ # When x is nil, an empty array is used instead.
1125
+ #
1126
+ # @note to concatenate an Array, nest the array - i.e. `[1,2], [[2,3]]`
1127
+ #
1128
+ # @overload concatenate(obj_x, obj_y)
1129
+ # @param obj_x [Object] object to wrap in an array and concatenate to; see other overloaded methods for return type
1130
+ # @param ary_y [Object] array to concatenate at end of `ary_x`
1131
+ # @return [Object] wraps obj_x in array before using other overloaded option based on type of obj_y
1132
+ # @overload concatenate(ary_x, ary_y)
1133
+ # @param ary_x [Array] array to concatenate to
1134
+ # @param ary_y [Array] array to concatenate at end of `ary_x`
1135
+ # @return [Array] new array with `ary_x` + `ary_y`
1136
+ # @overload concatenate(ary_x, hsh_y)
1137
+ # @param ary_x [Array] array to concatenate to
1138
+ # @param hsh_y [Hash] converted to array form, and concatenated to array
1139
+ # @return [Array] new array with `ary_x` + `hsh_y` converted to array
1140
+ # @overload concatenate (ary_x, obj_y)
1141
+ # @param ary_x [Array] array to concatenate to
1142
+ # @param obj_y [Object] non array or hash object to add to array
1143
+ # @return [Array] new array with `ary_x` + `obj_y` added as last entry
1144
+ # @overload concatenate(hsh_x, ary_y)
1145
+ # @param hsh_x [Hash] the hash to merge with
1146
+ # @param ary_y [Array] array interpreted as even numbered sequence of key, value merged with `hsh_x`
1147
+ # @return [Hash] new hash with `hsh_x` merged with `ary_y` interpreted as hash in array form
1148
+ # @overload concatenate(hsh_x, hsh_y)
1149
+ # @param hsh_x [Hash] the hash to merge to
1150
+ # @param hsh_y [Hash] hash merged with `hsh_x`
1151
+ # @return [Hash] new hash with `hsh_x` merged with `hsh_y`
1152
+ # @raise [ArgumentError] when `xxx_x` is neither an Array nor a Hash
1153
+ # @raise [ArgumentError] when `xxx_x` is a Hash, and `xxx_y` is neither Array nor Hash.
1154
+ #
1155
+ def concatenate(x, y)
1156
+ x = [x] unless x.is_a?(Array) || x.is_a?(Hash)
1157
+ case x
1158
+ when Array
1159
+ y = case y
1160
+ when Array then y
1161
+ when Hash then y.to_a
1162
+ else
1163
+ [y]
1164
+ end
1165
+ x + y # new array with concatenation
1166
+ when Hash
1167
+ y = case y
1168
+ when Hash then y
1169
+ when Array
1170
+ # Hash[[a, 1, b, 2]] => {}
1171
+ # Hash[a,1,b,2] => {a => 1, b => 2}
1172
+ # Hash[[a,1], [b,2]] => {[a,1] => [b,2]}
1173
+ # Hash[[[a,1], [b,2]]] => {a => 1, b => 2}
1174
+ # Use type calcultor to determine if array is Array[Array[?]], and if so use second form
1175
+ # of call
1176
+ t = @@type_calculator.infer(y)
1177
+ if t.element_type.is_a? Types::PArrayType
1178
+ Hash[y]
1179
+ else
1180
+ Hash[*y]
1181
+ end
1182
+ else
1183
+ raise ArgumentError.new(_("Can only append Array or Hash to a Hash"))
1184
+ end
1185
+ x.merge y # new hash with overwrite
1186
+ else
1187
+ raise ArgumentError.new(_("Can only append to an Array or a Hash."))
1188
+ end
1189
+ end
1190
+
1191
+ # Produces the result x \ y (set difference)
1192
+ # When `x` is an Array, `y` is transformed to an array and then all matching elements removed from x.
1193
+ # When `x` is a Hash, all contained keys are removed from x as listed in `y` if it is an Array, or all its keys if it is a Hash.
1194
+ # The difference is returned. The given `x` and `y` are not modified by this operation.
1195
+ # @raise [ArgumentError] when `x` is neither an Array nor a Hash
1196
+ #
1197
+ def delete(x, y)
1198
+ result = x.dup
1199
+ case x
1200
+ when Array
1201
+ y = case y
1202
+ when Array then y
1203
+ when Hash then y.to_a
1204
+ else
1205
+ [y]
1206
+ end
1207
+ y.each {|e| result.delete(e) }
1208
+ when Hash
1209
+ y = case y
1210
+ when Array then y
1211
+ when Hash then y.keys
1212
+ else
1213
+ [y]
1214
+ end
1215
+ y.each {|e| result.delete(e) }
1216
+ else
1217
+ raise ArgumentError.new(_("Can only delete from an Array or Hash."))
1218
+ end
1219
+ result
1220
+ end
1221
+
1222
+ # Implementation of case option matching.
1223
+ #
1224
+ # This is the type of matching performed in a case option, using == for every type
1225
+ # of value except regular expression where a match is performed.
1226
+ #
1227
+ def is_match?(left, right, o, option_expr, scope)
1228
+ @@compare_operator.match(left, right, scope)
1229
+ end
1230
+
1231
+ # Maps the expression in the given array to their product except for UnfoldExpressions which are first unfolded.
1232
+ # The result is added to the given result Array.
1233
+ # @param result [Array] Where to add the result (may contain information to add to)
1234
+ # @param array [Array[Model::Expression] the expressions to map
1235
+ # @param scope [Puppet::Parser::Scope] the scope to evaluate in
1236
+ # @return [Array] the given result array with content added from the operation
1237
+ #
1238
+ def unfold(result, array, scope)
1239
+ array.each do |x|
1240
+ x = unwind_parentheses(x)
1241
+ if x.is_a?(Model::UnfoldExpression)
1242
+ result.concat(evaluate(x, scope))
1243
+ else
1244
+ result << evaluate(x, scope)
1245
+ end
1246
+ end
1247
+ result
1248
+ end
1249
+ private :unfold
1250
+
1251
+ def unwind_parentheses(o)
1252
+ return o unless o.is_a?(Model::ParenthesizedExpression)
1253
+ unwind_parentheses(o.expr)
1254
+ end
1255
+ private :unwind_parentheses
1256
+ end
1257
+ end
1258
+ end