bolt 0.20.0 → 0.20.2

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