bolt 0.0.1 → 0.5.0

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

Potentially problematic release.


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

Files changed (1291) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +33 -0
  3. data/.gitmodules +12 -0
  4. data/.rspec +2 -0
  5. data/.rubocop.yml +61 -0
  6. data/.travis.yml +18 -0
  7. data/Gemfile +9 -0
  8. data/INSTALL.md +70 -0
  9. data/LICENSE +201 -0
  10. data/README.md +372 -0
  11. data/Rakefile +27 -0
  12. data/Vagrantfile +13 -0
  13. data/appveyor.yml +29 -0
  14. data/bolt.gemspec +50 -0
  15. data/docs/writing_tasks_and_plans.pdf +0 -0
  16. data/exe/bolt +15 -0
  17. data/lib/bolt.rb +13 -0
  18. data/lib/bolt/cli.rb +409 -0
  19. data/lib/bolt/executor.rb +71 -0
  20. data/lib/bolt/node.rb +79 -0
  21. data/lib/bolt/node/formatter.rb +15 -0
  22. data/lib/bolt/node/orch.rb +118 -0
  23. data/lib/bolt/node/result.rb +110 -0
  24. data/lib/bolt/node/ssh.rb +145 -0
  25. data/lib/bolt/node/winrm.rb +237 -0
  26. data/lib/bolt/node_uri.rb +42 -0
  27. data/lib/bolt/result.rb +139 -0
  28. data/lib/bolt/version.rb +3 -0
  29. data/metadata.json +13 -0
  30. data/tasks/init.json +3 -0
  31. data/tasks/init.rb +44 -0
  32. data/ux/bolt-CLI-spec.md +186 -0
  33. data/vendored/facter/lib/facter.rb +261 -0
  34. data/vendored/facter/lib/facter/Cfkey.rb +42 -0
  35. data/vendored/facter/lib/facter/application.rb +206 -0
  36. data/vendored/facter/lib/facter/architecture.rb +50 -0
  37. data/vendored/facter/lib/facter/augeasversion.rb +28 -0
  38. data/vendored/facter/lib/facter/blockdevices.rb +105 -0
  39. data/vendored/facter/lib/facter/core/aggregate.rb +220 -0
  40. data/vendored/facter/lib/facter/core/directed_graph.rb +46 -0
  41. data/vendored/facter/lib/facter/core/execution.rb +123 -0
  42. data/vendored/facter/lib/facter/core/execution/base.rb +81 -0
  43. data/vendored/facter/lib/facter/core/execution/posix.rb +50 -0
  44. data/vendored/facter/lib/facter/core/execution/windows.rb +57 -0
  45. data/vendored/facter/lib/facter/core/logging.rb +197 -0
  46. data/vendored/facter/lib/facter/core/resolvable.rb +94 -0
  47. data/vendored/facter/lib/facter/core/suitable.rb +113 -0
  48. data/vendored/facter/lib/facter/dhcp_servers.rb +45 -0
  49. data/vendored/facter/lib/facter/domain.rb +99 -0
  50. data/vendored/facter/lib/facter/ec2.rb +68 -0
  51. data/vendored/facter/lib/facter/ec2/rest.rb +137 -0
  52. data/vendored/facter/lib/facter/facterversion.rb +15 -0
  53. data/vendored/facter/lib/facter/filesystems.rb +45 -0
  54. data/vendored/facter/lib/facter/fqdn.rb +24 -0
  55. data/vendored/facter/lib/facter/gce.rb +16 -0
  56. data/vendored/facter/lib/facter/gce/metadata.rb +87 -0
  57. data/vendored/facter/lib/facter/gid.rb +25 -0
  58. data/vendored/facter/lib/facter/hardwareisa.rb +20 -0
  59. data/vendored/facter/lib/facter/hardwaremodel.rb +67 -0
  60. data/vendored/facter/lib/facter/hostname.rb +31 -0
  61. data/vendored/facter/lib/facter/id.rb +21 -0
  62. data/vendored/facter/lib/facter/interfaces.rb +58 -0
  63. data/vendored/facter/lib/facter/ipaddress.rb +169 -0
  64. data/vendored/facter/lib/facter/ipaddress6.rb +82 -0
  65. data/vendored/facter/lib/facter/iphostnumber.rb +29 -0
  66. data/vendored/facter/lib/facter/kernel.rb +22 -0
  67. data/vendored/facter/lib/facter/kernelmajversion.rb +23 -0
  68. data/vendored/facter/lib/facter/kernelrelease.rb +45 -0
  69. data/vendored/facter/lib/facter/kernelversion.rb +22 -0
  70. data/vendored/facter/lib/facter/ldom.rb +51 -0
  71. data/vendored/facter/lib/facter/lsbdistcodename.rb +20 -0
  72. data/vendored/facter/lib/facter/lsbdistdescription.rb +21 -0
  73. data/vendored/facter/lib/facter/lsbdistid.rb +20 -0
  74. data/vendored/facter/lib/facter/lsbdistrelease.rb +20 -0
  75. data/vendored/facter/lib/facter/lsbmajdistrelease.rb +22 -0
  76. data/vendored/facter/lib/facter/lsbminordistrelease.rb +22 -0
  77. data/vendored/facter/lib/facter/lsbrelease.rb +20 -0
  78. data/vendored/facter/lib/facter/macaddress.rb +99 -0
  79. data/vendored/facter/lib/facter/macosx.rb +56 -0
  80. data/vendored/facter/lib/facter/manufacturer.rb +68 -0
  81. data/vendored/facter/lib/facter/memory.rb +168 -0
  82. data/vendored/facter/lib/facter/netmask.rb +43 -0
  83. data/vendored/facter/lib/facter/network.rb +20 -0
  84. data/vendored/facter/lib/facter/operatingsystem.rb +24 -0
  85. data/vendored/facter/lib/facter/operatingsystem/base.rb +61 -0
  86. data/vendored/facter/lib/facter/operatingsystem/cumuluslinux.rb +27 -0
  87. data/vendored/facter/lib/facter/operatingsystem/implementation.rb +33 -0
  88. data/vendored/facter/lib/facter/operatingsystem/linux.rb +484 -0
  89. data/vendored/facter/lib/facter/operatingsystem/osreleaselinux.rb +28 -0
  90. data/vendored/facter/lib/facter/operatingsystem/sunos.rb +54 -0
  91. data/vendored/facter/lib/facter/operatingsystem/vmkernel.rb +11 -0
  92. data/vendored/facter/lib/facter/operatingsystem/windows.rb +43 -0
  93. data/vendored/facter/lib/facter/operatingsystemmajrelease.rb +31 -0
  94. data/vendored/facter/lib/facter/operatingsystemrelease.rb +29 -0
  95. data/vendored/facter/lib/facter/os.rb +98 -0
  96. data/vendored/facter/lib/facter/osfamily.rb +18 -0
  97. data/vendored/facter/lib/facter/partitions.rb +39 -0
  98. data/vendored/facter/lib/facter/path.rb +14 -0
  99. data/vendored/facter/lib/facter/physicalprocessorcount.rb +27 -0
  100. data/vendored/facter/lib/facter/processor.rb +52 -0
  101. data/vendored/facter/lib/facter/processors.rb +66 -0
  102. data/vendored/facter/lib/facter/processors/os.rb +244 -0
  103. data/vendored/facter/lib/facter/ps.rb +31 -0
  104. data/vendored/facter/lib/facter/puppetversion.rb +20 -0
  105. data/vendored/facter/lib/facter/rackspace.rb +37 -0
  106. data/vendored/facter/lib/facter/rubyplatform.rb +12 -0
  107. data/vendored/facter/lib/facter/rubysitedir.rb +15 -0
  108. data/vendored/facter/lib/facter/rubyversion.rb +12 -0
  109. data/vendored/facter/lib/facter/selinux.rb +154 -0
  110. data/vendored/facter/lib/facter/ssh.rb +73 -0
  111. data/vendored/facter/lib/facter/system32.rb +21 -0
  112. data/vendored/facter/lib/facter/system_uptime.rb +44 -0
  113. data/vendored/facter/lib/facter/timezone.rb +14 -0
  114. data/vendored/facter/lib/facter/uniqueid.rb +4 -0
  115. data/vendored/facter/lib/facter/uptime.rb +16 -0
  116. data/vendored/facter/lib/facter/uptime_days.rb +13 -0
  117. data/vendored/facter/lib/facter/uptime_hours.rb +13 -0
  118. data/vendored/facter/lib/facter/uptime_seconds.rb +20 -0
  119. data/vendored/facter/lib/facter/util/architecture.rb +19 -0
  120. data/vendored/facter/lib/facter/util/collection.rb +161 -0
  121. data/vendored/facter/lib/facter/util/composite_loader.rb +12 -0
  122. data/vendored/facter/lib/facter/util/config.rb +88 -0
  123. data/vendored/facter/lib/facter/util/confine.rb +66 -0
  124. data/vendored/facter/lib/facter/util/dhcp_servers.rb +58 -0
  125. data/vendored/facter/lib/facter/util/directory_loader.rb +88 -0
  126. data/vendored/facter/lib/facter/util/ec2.rb +106 -0
  127. data/vendored/facter/lib/facter/util/fact.rb +204 -0
  128. data/vendored/facter/lib/facter/util/file_read.rb +37 -0
  129. data/vendored/facter/lib/facter/util/formatter.rb +39 -0
  130. data/vendored/facter/lib/facter/util/ip.rb +340 -0
  131. data/vendored/facter/lib/facter/util/ip/windows.rb +215 -0
  132. data/vendored/facter/lib/facter/util/loader.rb +155 -0
  133. data/vendored/facter/lib/facter/util/macaddress.rb +43 -0
  134. data/vendored/facter/lib/facter/util/macosx.rb +73 -0
  135. data/vendored/facter/lib/facter/util/manufacturer.rb +99 -0
  136. data/vendored/facter/lib/facter/util/memory.rb +228 -0
  137. data/vendored/facter/lib/facter/util/netmask.rb +40 -0
  138. data/vendored/facter/lib/facter/util/normalization.rb +94 -0
  139. data/vendored/facter/lib/facter/util/nothing_loader.rb +12 -0
  140. data/vendored/facter/lib/facter/util/operatingsystem.rb +21 -0
  141. data/vendored/facter/lib/facter/util/parser.rb +168 -0
  142. data/vendored/facter/lib/facter/util/partitions.rb +47 -0
  143. data/vendored/facter/lib/facter/util/partitions/linux.rb +71 -0
  144. data/vendored/facter/lib/facter/util/partitions/openbsd.rb +40 -0
  145. data/vendored/facter/lib/facter/util/plist.rb +24 -0
  146. data/vendored/facter/lib/facter/util/plist/generator.rb +228 -0
  147. data/vendored/facter/lib/facter/util/plist/parser.rb +226 -0
  148. data/vendored/facter/lib/facter/util/posix.rb +16 -0
  149. data/vendored/facter/lib/facter/util/processor.rb +289 -0
  150. data/vendored/facter/lib/facter/util/registry.rb +11 -0
  151. data/vendored/facter/lib/facter/util/resolution.rb +160 -0
  152. data/vendored/facter/lib/facter/util/solaris_zones.rb +158 -0
  153. data/vendored/facter/lib/facter/util/unix_root.rb +5 -0
  154. data/vendored/facter/lib/facter/util/uptime.rb +83 -0
  155. data/vendored/facter/lib/facter/util/values.rb +109 -0
  156. data/vendored/facter/lib/facter/util/virtual.rb +212 -0
  157. data/vendored/facter/lib/facter/util/vlans.rb +21 -0
  158. data/vendored/facter/lib/facter/util/windows.rb +10 -0
  159. data/vendored/facter/lib/facter/util/windows/api_types.rb +135 -0
  160. data/vendored/facter/lib/facter/util/windows/dir.rb +43 -0
  161. data/vendored/facter/lib/facter/util/windows/error.rb +87 -0
  162. data/vendored/facter/lib/facter/util/windows/process.rb +294 -0
  163. data/vendored/facter/lib/facter/util/windows/user.rb +186 -0
  164. data/vendored/facter/lib/facter/util/windows_root.rb +7 -0
  165. data/vendored/facter/lib/facter/util/wmi.rb +49 -0
  166. data/vendored/facter/lib/facter/util/xendomains.rb +28 -0
  167. data/vendored/facter/lib/facter/version.rb +86 -0
  168. data/vendored/facter/lib/facter/virtual.rb +328 -0
  169. data/vendored/facter/lib/facter/vlans.rb +17 -0
  170. data/vendored/facter/lib/facter/xendomains.rb +20 -0
  171. data/vendored/facter/lib/facter/zfs_version.rb +14 -0
  172. data/vendored/facter/lib/facter/zonename.rb +6 -0
  173. data/vendored/facter/lib/facter/zones.rb +18 -0
  174. data/vendored/facter/lib/facter/zpool_version.rb +10 -0
  175. data/vendored/hiera/lib/hiera.rb +119 -0
  176. data/vendored/hiera/lib/hiera/backend.rb +360 -0
  177. data/vendored/hiera/lib/hiera/backend/json_backend.rb +58 -0
  178. data/vendored/hiera/lib/hiera/backend/yaml_backend.rb +63 -0
  179. data/vendored/hiera/lib/hiera/config.rb +97 -0
  180. data/vendored/hiera/lib/hiera/console_logger.rb +13 -0
  181. data/vendored/hiera/lib/hiera/error.rb +4 -0
  182. data/vendored/hiera/lib/hiera/fallback_logger.rb +41 -0
  183. data/vendored/hiera/lib/hiera/filecache.rb +86 -0
  184. data/vendored/hiera/lib/hiera/interpolate.rb +121 -0
  185. data/vendored/hiera/lib/hiera/noop_logger.rb +8 -0
  186. data/vendored/hiera/lib/hiera/puppet_logger.rb +17 -0
  187. data/vendored/hiera/lib/hiera/recursive_guard.rb +20 -0
  188. data/vendored/hiera/lib/hiera/util.rb +65 -0
  189. data/vendored/hiera/lib/hiera/util/win32.rb +40 -0
  190. data/vendored/hiera/lib/hiera/version.rb +89 -0
  191. data/vendored/puppet/lib/hiera/puppet_function.rb +81 -0
  192. data/vendored/puppet/lib/hiera/scope.rb +61 -0
  193. data/vendored/puppet/lib/hiera_puppet.rb +79 -0
  194. data/vendored/puppet/lib/puppet.rb +311 -0
  195. data/vendored/puppet/lib/puppet/agent.rb +114 -0
  196. data/vendored/puppet/lib/puppet/agent/disabler.rb +53 -0
  197. data/vendored/puppet/lib/puppet/agent/locker.rb +52 -0
  198. data/vendored/puppet/lib/puppet/application.rb +485 -0
  199. data/vendored/puppet/lib/puppet/application/agent.rb +468 -0
  200. data/vendored/puppet/lib/puppet/application/apply.rb +358 -0
  201. data/vendored/puppet/lib/puppet/application/ca.rb +11 -0
  202. data/vendored/puppet/lib/puppet/application/catalog.rb +4 -0
  203. data/vendored/puppet/lib/puppet/application/cert.rb +334 -0
  204. data/vendored/puppet/lib/puppet/application/certificate.rb +17 -0
  205. data/vendored/puppet/lib/puppet/application/certificate_request.rb +7 -0
  206. data/vendored/puppet/lib/puppet/application/certificate_revocation_list.rb +7 -0
  207. data/vendored/puppet/lib/puppet/application/config.rb +4 -0
  208. data/vendored/puppet/lib/puppet/application/describe.rb +258 -0
  209. data/vendored/puppet/lib/puppet/application/device.rb +292 -0
  210. data/vendored/puppet/lib/puppet/application/doc.rb +230 -0
  211. data/vendored/puppet/lib/puppet/application/epp.rb +5 -0
  212. data/vendored/puppet/lib/puppet/application/face_base.rb +268 -0
  213. data/vendored/puppet/lib/puppet/application/facts.rb +4 -0
  214. data/vendored/puppet/lib/puppet/application/filebucket.rb +262 -0
  215. data/vendored/puppet/lib/puppet/application/generate.rb +5 -0
  216. data/vendored/puppet/lib/puppet/application/help.rb +4 -0
  217. data/vendored/puppet/lib/puppet/application/indirection_base.rb +4 -0
  218. data/vendored/puppet/lib/puppet/application/key.rb +4 -0
  219. data/vendored/puppet/lib/puppet/application/lookup.rb +361 -0
  220. data/vendored/puppet/lib/puppet/application/man.rb +4 -0
  221. data/vendored/puppet/lib/puppet/application/master.rb +317 -0
  222. data/vendored/puppet/lib/puppet/application/module.rb +4 -0
  223. data/vendored/puppet/lib/puppet/application/node.rb +4 -0
  224. data/vendored/puppet/lib/puppet/application/parser.rb +5 -0
  225. data/vendored/puppet/lib/puppet/application/plugin.rb +3 -0
  226. data/vendored/puppet/lib/puppet/application/report.rb +4 -0
  227. data/vendored/puppet/lib/puppet/application/resource.rb +231 -0
  228. data/vendored/puppet/lib/puppet/application/script.rb +255 -0
  229. data/vendored/puppet/lib/puppet/application/status.rb +4 -0
  230. data/vendored/puppet/lib/puppet/application_support.rb +57 -0
  231. data/vendored/puppet/lib/puppet/bindings.rb +147 -0
  232. data/vendored/puppet/lib/puppet/coercion.rb +40 -0
  233. data/vendored/puppet/lib/puppet/compilable_resource_type.rb +15 -0
  234. data/vendored/puppet/lib/puppet/configurer.rb +447 -0
  235. data/vendored/puppet/lib/puppet/configurer/downloader.rb +67 -0
  236. data/vendored/puppet/lib/puppet/configurer/downloader_factory.rb +34 -0
  237. data/vendored/puppet/lib/puppet/configurer/fact_handler.rb +46 -0
  238. data/vendored/puppet/lib/puppet/configurer/plugin_handler.rb +25 -0
  239. data/vendored/puppet/lib/puppet/confine.rb +80 -0
  240. data/vendored/puppet/lib/puppet/confine/any.rb +26 -0
  241. data/vendored/puppet/lib/puppet/confine/exists.rb +19 -0
  242. data/vendored/puppet/lib/puppet/confine/false.rb +19 -0
  243. data/vendored/puppet/lib/puppet/confine/feature.rb +17 -0
  244. data/vendored/puppet/lib/puppet/confine/true.rb +20 -0
  245. data/vendored/puppet/lib/puppet/confine/variable.rb +59 -0
  246. data/vendored/puppet/lib/puppet/confine_collection.rb +50 -0
  247. data/vendored/puppet/lib/puppet/confiner.rb +46 -0
  248. data/vendored/puppet/lib/puppet/context.rb +116 -0
  249. data/vendored/puppet/lib/puppet/context/trusted_information.rb +76 -0
  250. data/vendored/puppet/lib/puppet/daemon.rb +195 -0
  251. data/vendored/puppet/lib/puppet/data_binding.rb +14 -0
  252. data/vendored/puppet/lib/puppet/defaults.rb +1957 -0
  253. data/vendored/puppet/lib/puppet/environments.rb +509 -0
  254. data/vendored/puppet/lib/puppet/error.rb +117 -0
  255. data/vendored/puppet/lib/puppet/etc.rb +161 -0
  256. data/vendored/puppet/lib/puppet/external/dot.rb +326 -0
  257. data/vendored/puppet/lib/puppet/external/nagios.rb +46 -0
  258. data/vendored/puppet/lib/puppet/external/nagios/base.rb +472 -0
  259. data/vendored/puppet/lib/puppet/external/nagios/grammar.ry +248 -0
  260. data/vendored/puppet/lib/puppet/external/nagios/makefile +9 -0
  261. data/vendored/puppet/lib/puppet/external/nagios/parser.rb +400 -0
  262. data/vendored/puppet/lib/puppet/external/pson/common.rb +374 -0
  263. data/vendored/puppet/lib/puppet/external/pson/pure.rb +15 -0
  264. data/vendored/puppet/lib/puppet/external/pson/pure/generator.rb +395 -0
  265. data/vendored/puppet/lib/puppet/external/pson/pure/parser.rb +307 -0
  266. data/vendored/puppet/lib/puppet/external/pson/version.rb +8 -0
  267. data/vendored/puppet/lib/puppet/face.rb +12 -0
  268. data/vendored/puppet/lib/puppet/face/ca.rb +266 -0
  269. data/vendored/puppet/lib/puppet/face/catalog.rb +130 -0
  270. data/vendored/puppet/lib/puppet/face/catalog/select.rb +49 -0
  271. data/vendored/puppet/lib/puppet/face/certificate.rb +165 -0
  272. data/vendored/puppet/lib/puppet/face/certificate_request.rb +56 -0
  273. data/vendored/puppet/lib/puppet/face/certificate_revocation_list.rb +56 -0
  274. data/vendored/puppet/lib/puppet/face/config.rb +119 -0
  275. data/vendored/puppet/lib/puppet/face/epp.rb +527 -0
  276. data/vendored/puppet/lib/puppet/face/facts.rb +38 -0
  277. data/vendored/puppet/lib/puppet/face/generate.rb +64 -0
  278. data/vendored/puppet/lib/puppet/face/help.rb +205 -0
  279. data/vendored/puppet/lib/puppet/face/help/action.erb +86 -0
  280. data/vendored/puppet/lib/puppet/face/help/face.erb +114 -0
  281. data/vendored/puppet/lib/puppet/face/help/global.erb +16 -0
  282. data/vendored/puppet/lib/puppet/face/help/man.erb +152 -0
  283. data/vendored/puppet/lib/puppet/face/key.rb +16 -0
  284. data/vendored/puppet/lib/puppet/face/man.rb +101 -0
  285. data/vendored/puppet/lib/puppet/face/module.rb +19 -0
  286. data/vendored/puppet/lib/puppet/face/module/build.rb +63 -0
  287. data/vendored/puppet/lib/puppet/face/module/changes.rb +42 -0
  288. data/vendored/puppet/lib/puppet/face/module/generate.rb +251 -0
  289. data/vendored/puppet/lib/puppet/face/module/install.rb +149 -0
  290. data/vendored/puppet/lib/puppet/face/module/list.rb +279 -0
  291. data/vendored/puppet/lib/puppet/face/module/search.rb +94 -0
  292. data/vendored/puppet/lib/puppet/face/module/uninstall.rb +81 -0
  293. data/vendored/puppet/lib/puppet/face/module/upgrade.rb +90 -0
  294. data/vendored/puppet/lib/puppet/face/node.rb +42 -0
  295. data/vendored/puppet/lib/puppet/face/node/clean.rb +96 -0
  296. data/vendored/puppet/lib/puppet/face/parser.rb +161 -0
  297. data/vendored/puppet/lib/puppet/face/plugin.rb +58 -0
  298. data/vendored/puppet/lib/puppet/face/report.rb +54 -0
  299. data/vendored/puppet/lib/puppet/face/resource.rb +53 -0
  300. data/vendored/puppet/lib/puppet/face/status.rb +50 -0
  301. data/vendored/puppet/lib/puppet/feature/base.rb +95 -0
  302. data/vendored/puppet/lib/puppet/feature/bolt.rb +3 -0
  303. data/vendored/puppet/lib/puppet/feature/cfpropertylist.rb +3 -0
  304. data/vendored/puppet/lib/puppet/feature/eventlog.rb +5 -0
  305. data/vendored/puppet/lib/puppet/feature/hiera_eyaml.rb +3 -0
  306. data/vendored/puppet/lib/puppet/feature/hocon.rb +3 -0
  307. data/vendored/puppet/lib/puppet/feature/libuser.rb +8 -0
  308. data/vendored/puppet/lib/puppet/feature/msgpack.rb +3 -0
  309. data/vendored/puppet/lib/puppet/feature/pe_license.rb +4 -0
  310. data/vendored/puppet/lib/puppet/feature/rack.rb +19 -0
  311. data/vendored/puppet/lib/puppet/feature/selinux.rb +3 -0
  312. data/vendored/puppet/lib/puppet/feature/ssh.rb +3 -0
  313. data/vendored/puppet/lib/puppet/feature/telnet.rb +9 -0
  314. data/vendored/puppet/lib/puppet/feature/zlib.rb +5 -0
  315. data/vendored/puppet/lib/puppet/file_bucket.rb +4 -0
  316. data/vendored/puppet/lib/puppet/file_bucket/dipper.rb +174 -0
  317. data/vendored/puppet/lib/puppet/file_bucket/file.rb +131 -0
  318. data/vendored/puppet/lib/puppet/file_serving.rb +3 -0
  319. data/vendored/puppet/lib/puppet/file_serving/base.rb +85 -0
  320. data/vendored/puppet/lib/puppet/file_serving/configuration.rb +112 -0
  321. data/vendored/puppet/lib/puppet/file_serving/configuration/parser.rb +123 -0
  322. data/vendored/puppet/lib/puppet/file_serving/content.rb +43 -0
  323. data/vendored/puppet/lib/puppet/file_serving/fileset.rb +174 -0
  324. data/vendored/puppet/lib/puppet/file_serving/http_metadata.rb +46 -0
  325. data/vendored/puppet/lib/puppet/file_serving/metadata.rb +163 -0
  326. data/vendored/puppet/lib/puppet/file_serving/mount.rb +39 -0
  327. data/vendored/puppet/lib/puppet/file_serving/mount/file.rb +121 -0
  328. data/vendored/puppet/lib/puppet/file_serving/mount/modules.rb +24 -0
  329. data/vendored/puppet/lib/puppet/file_serving/mount/pluginfacts.rb +35 -0
  330. data/vendored/puppet/lib/puppet/file_serving/mount/plugins.rb +35 -0
  331. data/vendored/puppet/lib/puppet/file_serving/mount/tasks.rb +21 -0
  332. data/vendored/puppet/lib/puppet/file_serving/terminus_helper.rb +31 -0
  333. data/vendored/puppet/lib/puppet/file_serving/terminus_selector.rb +32 -0
  334. data/vendored/puppet/lib/puppet/file_system.rb +404 -0
  335. data/vendored/puppet/lib/puppet/file_system/file_impl.rb +154 -0
  336. data/vendored/puppet/lib/puppet/file_system/memory_file.rb +66 -0
  337. data/vendored/puppet/lib/puppet/file_system/memory_impl.rb +86 -0
  338. data/vendored/puppet/lib/puppet/file_system/path_pattern.rb +98 -0
  339. data/vendored/puppet/lib/puppet/file_system/posix.rb +46 -0
  340. data/vendored/puppet/lib/puppet/file_system/uniquefile.rb +190 -0
  341. data/vendored/puppet/lib/puppet/file_system/windows.rb +130 -0
  342. data/vendored/puppet/lib/puppet/forge.rb +229 -0
  343. data/vendored/puppet/lib/puppet/forge/cache.rb +60 -0
  344. data/vendored/puppet/lib/puppet/forge/errors.rb +112 -0
  345. data/vendored/puppet/lib/puppet/forge/repository.rb +155 -0
  346. data/vendored/puppet/lib/puppet/functions.rb +745 -0
  347. data/vendored/puppet/lib/puppet/functions/alert.rb +14 -0
  348. data/vendored/puppet/lib/puppet/functions/all.rb +104 -0
  349. data/vendored/puppet/lib/puppet/functions/annotate.rb +108 -0
  350. data/vendored/puppet/lib/puppet/functions/any.rb +109 -0
  351. data/vendored/puppet/lib/puppet/functions/assert_type.rb +93 -0
  352. data/vendored/puppet/lib/puppet/functions/binary_file.rb +19 -0
  353. data/vendored/puppet/lib/puppet/functions/break.rb +22 -0
  354. data/vendored/puppet/lib/puppet/functions/call.rb +42 -0
  355. data/vendored/puppet/lib/puppet/functions/contain.rb +39 -0
  356. data/vendored/puppet/lib/puppet/functions/crit.rb +14 -0
  357. data/vendored/puppet/lib/puppet/functions/debug.rb +14 -0
  358. data/vendored/puppet/lib/puppet/functions/defined.rb +160 -0
  359. data/vendored/puppet/lib/puppet/functions/dig.rb +23 -0
  360. data/vendored/puppet/lib/puppet/functions/each.rb +163 -0
  361. data/vendored/puppet/lib/puppet/functions/emerg.rb +14 -0
  362. data/vendored/puppet/lib/puppet/functions/epp.rb +48 -0
  363. data/vendored/puppet/lib/puppet/functions/err.rb +14 -0
  364. data/vendored/puppet/lib/puppet/functions/eyaml_lookup_key.rb +94 -0
  365. data/vendored/puppet/lib/puppet/functions/file_upload.rb +48 -0
  366. data/vendored/puppet/lib/puppet/functions/filter.rb +143 -0
  367. data/vendored/puppet/lib/puppet/functions/find_file.rb +31 -0
  368. data/vendored/puppet/lib/puppet/functions/hiera.rb +88 -0
  369. data/vendored/puppet/lib/puppet/functions/hiera_array.rb +81 -0
  370. data/vendored/puppet/lib/puppet/functions/hiera_hash.rb +92 -0
  371. data/vendored/puppet/lib/puppet/functions/hiera_include.rb +104 -0
  372. data/vendored/puppet/lib/puppet/functions/hocon_data.rb +41 -0
  373. data/vendored/puppet/lib/puppet/functions/import.rb +7 -0
  374. data/vendored/puppet/lib/puppet/functions/include.rb +27 -0
  375. data/vendored/puppet/lib/puppet/functions/info.rb +14 -0
  376. data/vendored/puppet/lib/puppet/functions/inline_epp.rb +59 -0
  377. data/vendored/puppet/lib/puppet/functions/json_data.rb +33 -0
  378. data/vendored/puppet/lib/puppet/functions/lest.rb +17 -0
  379. data/vendored/puppet/lib/puppet/functions/lookup.rb +223 -0
  380. data/vendored/puppet/lib/puppet/functions/map.rb +126 -0
  381. data/vendored/puppet/lib/puppet/functions/match.rb +120 -0
  382. data/vendored/puppet/lib/puppet/functions/new.rb +32 -0
  383. data/vendored/puppet/lib/puppet/functions/next.rb +23 -0
  384. data/vendored/puppet/lib/puppet/functions/notice.rb +14 -0
  385. data/vendored/puppet/lib/puppet/functions/reduce.rb +164 -0
  386. data/vendored/puppet/lib/puppet/functions/regsubst.rb +76 -0
  387. data/vendored/puppet/lib/puppet/functions/require.rb +43 -0
  388. data/vendored/puppet/lib/puppet/functions/return.rb +22 -0
  389. data/vendored/puppet/lib/puppet/functions/reverse_each.rb +25 -0
  390. data/vendored/puppet/lib/puppet/functions/run_command.rb +41 -0
  391. data/vendored/puppet/lib/puppet/functions/run_plan.rb +40 -0
  392. data/vendored/puppet/lib/puppet/functions/run_script.rb +50 -0
  393. data/vendored/puppet/lib/puppet/functions/run_task.rb +73 -0
  394. data/vendored/puppet/lib/puppet/functions/scanf.rb +44 -0
  395. data/vendored/puppet/lib/puppet/functions/slice.rb +111 -0
  396. data/vendored/puppet/lib/puppet/functions/split.rb +47 -0
  397. data/vendored/puppet/lib/puppet/functions/step.rb +26 -0
  398. data/vendored/puppet/lib/puppet/functions/strftime.rb +43 -0
  399. data/vendored/puppet/lib/puppet/functions/then.rb +14 -0
  400. data/vendored/puppet/lib/puppet/functions/tree_each.rb +200 -0
  401. data/vendored/puppet/lib/puppet/functions/type.rb +31 -0
  402. data/vendored/puppet/lib/puppet/functions/unique.rb +132 -0
  403. data/vendored/puppet/lib/puppet/functions/unwrap.rb +40 -0
  404. data/vendored/puppet/lib/puppet/functions/versioncmp.rb +36 -0
  405. data/vendored/puppet/lib/puppet/functions/warning.rb +14 -0
  406. data/vendored/puppet/lib/puppet/functions/with.rb +30 -0
  407. data/vendored/puppet/lib/puppet/functions/yaml_data.rb +42 -0
  408. data/vendored/puppet/lib/puppet/generate/models/type/property.rb +70 -0
  409. data/vendored/puppet/lib/puppet/generate/models/type/type.rb +62 -0
  410. data/vendored/puppet/lib/puppet/generate/templates/type/pcore.erb +42 -0
  411. data/vendored/puppet/lib/puppet/generate/type.rb +239 -0
  412. data/vendored/puppet/lib/puppet/gettext/config.rb +70 -0
  413. data/vendored/puppet/lib/puppet/gettext/stubs.rb +11 -0
  414. data/vendored/puppet/lib/puppet/graph.rb +11 -0
  415. data/vendored/puppet/lib/puppet/graph/key.rb +26 -0
  416. data/vendored/puppet/lib/puppet/graph/prioritizer.rb +29 -0
  417. data/vendored/puppet/lib/puppet/graph/random_prioritizer.rb +16 -0
  418. data/vendored/puppet/lib/puppet/graph/rb_tree_map.rb +388 -0
  419. data/vendored/puppet/lib/puppet/graph/relationship_graph.rb +277 -0
  420. data/vendored/puppet/lib/puppet/graph/sequential_prioritizer.rb +31 -0
  421. data/vendored/puppet/lib/puppet/graph/simple_graph.rb +539 -0
  422. data/vendored/puppet/lib/puppet/graph/title_hash_prioritizer.rb +16 -0
  423. data/vendored/puppet/lib/puppet/indirector.rb +61 -0
  424. data/vendored/puppet/lib/puppet/indirector/catalog/compiler.rb +384 -0
  425. data/vendored/puppet/lib/puppet/indirector/catalog/json.rb +24 -0
  426. data/vendored/puppet/lib/puppet/indirector/catalog/msgpack.rb +6 -0
  427. data/vendored/puppet/lib/puppet/indirector/catalog/rest.rb +6 -0
  428. data/vendored/puppet/lib/puppet/indirector/catalog/store_configs.rb +8 -0
  429. data/vendored/puppet/lib/puppet/indirector/catalog/yaml.rb +22 -0
  430. data/vendored/puppet/lib/puppet/indirector/certificate/ca.rb +9 -0
  431. data/vendored/puppet/lib/puppet/indirector/certificate/disabled_ca.rb +22 -0
  432. data/vendored/puppet/lib/puppet/indirector/certificate/file.rb +9 -0
  433. data/vendored/puppet/lib/puppet/indirector/certificate/rest.rb +16 -0
  434. data/vendored/puppet/lib/puppet/indirector/certificate_request/ca.rb +22 -0
  435. data/vendored/puppet/lib/puppet/indirector/certificate_request/disabled_ca.rb +22 -0
  436. data/vendored/puppet/lib/puppet/indirector/certificate_request/file.rb +8 -0
  437. data/vendored/puppet/lib/puppet/indirector/certificate_request/memory.rb +6 -0
  438. data/vendored/puppet/lib/puppet/indirector/certificate_request/rest.rb +10 -0
  439. data/vendored/puppet/lib/puppet/indirector/certificate_revocation_list/ca.rb +8 -0
  440. data/vendored/puppet/lib/puppet/indirector/certificate_revocation_list/disabled_ca.rb +22 -0
  441. data/vendored/puppet/lib/puppet/indirector/certificate_revocation_list/file.rb +8 -0
  442. data/vendored/puppet/lib/puppet/indirector/certificate_revocation_list/rest.rb +22 -0
  443. data/vendored/puppet/lib/puppet/indirector/certificate_status.rb +4 -0
  444. data/vendored/puppet/lib/puppet/indirector/certificate_status/file.rb +91 -0
  445. data/vendored/puppet/lib/puppet/indirector/certificate_status/rest.rb +11 -0
  446. data/vendored/puppet/lib/puppet/indirector/code.rb +6 -0
  447. data/vendored/puppet/lib/puppet/indirector/data_binding/hiera.rb +7 -0
  448. data/vendored/puppet/lib/puppet/indirector/data_binding/none.rb +8 -0
  449. data/vendored/puppet/lib/puppet/indirector/direct_file_server.rb +17 -0
  450. data/vendored/puppet/lib/puppet/indirector/envelope.rb +11 -0
  451. data/vendored/puppet/lib/puppet/indirector/errors.rb +5 -0
  452. data/vendored/puppet/lib/puppet/indirector/exec.rb +38 -0
  453. data/vendored/puppet/lib/puppet/indirector/face.rb +153 -0
  454. data/vendored/puppet/lib/puppet/indirector/facts/facter.rb +90 -0
  455. data/vendored/puppet/lib/puppet/indirector/facts/memory.rb +9 -0
  456. data/vendored/puppet/lib/puppet/indirector/facts/network_device.rb +27 -0
  457. data/vendored/puppet/lib/puppet/indirector/facts/store_configs.rb +11 -0
  458. data/vendored/puppet/lib/puppet/indirector/facts/yaml.rb +86 -0
  459. data/vendored/puppet/lib/puppet/indirector/file_bucket_file/file.rb +255 -0
  460. data/vendored/puppet/lib/puppet/indirector/file_bucket_file/rest.rb +8 -0
  461. data/vendored/puppet/lib/puppet/indirector/file_bucket_file/selector.rb +53 -0
  462. data/vendored/puppet/lib/puppet/indirector/file_content.rb +5 -0
  463. data/vendored/puppet/lib/puppet/indirector/file_content/file.rb +7 -0
  464. data/vendored/puppet/lib/puppet/indirector/file_content/file_server.rb +7 -0
  465. data/vendored/puppet/lib/puppet/indirector/file_content/http.rb +15 -0
  466. data/vendored/puppet/lib/puppet/indirector/file_content/rest.rb +9 -0
  467. data/vendored/puppet/lib/puppet/indirector/file_content/selector.rb +30 -0
  468. data/vendored/puppet/lib/puppet/indirector/file_metadata.rb +5 -0
  469. data/vendored/puppet/lib/puppet/indirector/file_metadata/file.rb +7 -0
  470. data/vendored/puppet/lib/puppet/indirector/file_metadata/file_server.rb +7 -0
  471. data/vendored/puppet/lib/puppet/indirector/file_metadata/http.rb +27 -0
  472. data/vendored/puppet/lib/puppet/indirector/file_metadata/rest.rb +9 -0
  473. data/vendored/puppet/lib/puppet/indirector/file_metadata/selector.rb +30 -0
  474. data/vendored/puppet/lib/puppet/indirector/file_server.rb +59 -0
  475. data/vendored/puppet/lib/puppet/indirector/generic_http.rb +16 -0
  476. data/vendored/puppet/lib/puppet/indirector/hiera.rb +94 -0
  477. data/vendored/puppet/lib/puppet/indirector/indirection.rb +336 -0
  478. data/vendored/puppet/lib/puppet/indirector/json.rb +75 -0
  479. data/vendored/puppet/lib/puppet/indirector/key/ca.rb +16 -0
  480. data/vendored/puppet/lib/puppet/indirector/key/disabled_ca.rb +22 -0
  481. data/vendored/puppet/lib/puppet/indirector/key/file.rb +50 -0
  482. data/vendored/puppet/lib/puppet/indirector/key/memory.rb +6 -0
  483. data/vendored/puppet/lib/puppet/indirector/ldap.rb +80 -0
  484. data/vendored/puppet/lib/puppet/indirector/memory.rb +34 -0
  485. data/vendored/puppet/lib/puppet/indirector/msgpack.rb +83 -0
  486. data/vendored/puppet/lib/puppet/indirector/node/exec.rb +71 -0
  487. data/vendored/puppet/lib/puppet/indirector/node/ldap.rb +259 -0
  488. data/vendored/puppet/lib/puppet/indirector/node/memory.rb +10 -0
  489. data/vendored/puppet/lib/puppet/indirector/node/msgpack.rb +7 -0
  490. data/vendored/puppet/lib/puppet/indirector/node/plain.rb +21 -0
  491. data/vendored/puppet/lib/puppet/indirector/node/rest.rb +7 -0
  492. data/vendored/puppet/lib/puppet/indirector/node/store_configs.rb +8 -0
  493. data/vendored/puppet/lib/puppet/indirector/node/write_only_yaml.rb +37 -0
  494. data/vendored/puppet/lib/puppet/indirector/node/yaml.rb +13 -0
  495. data/vendored/puppet/lib/puppet/indirector/none.rb +9 -0
  496. data/vendored/puppet/lib/puppet/indirector/plain.rb +9 -0
  497. data/vendored/puppet/lib/puppet/indirector/report/msgpack.rb +11 -0
  498. data/vendored/puppet/lib/puppet/indirector/report/processor.rb +59 -0
  499. data/vendored/puppet/lib/puppet/indirector/report/rest.rb +28 -0
  500. data/vendored/puppet/lib/puppet/indirector/report/yaml.rb +11 -0
  501. data/vendored/puppet/lib/puppet/indirector/request.rb +274 -0
  502. data/vendored/puppet/lib/puppet/indirector/resource/ral.rb +63 -0
  503. data/vendored/puppet/lib/puppet/indirector/resource/store_configs.rb +12 -0
  504. data/vendored/puppet/lib/puppet/indirector/resource/validator.rb +8 -0
  505. data/vendored/puppet/lib/puppet/indirector/rest.rb +348 -0
  506. data/vendored/puppet/lib/puppet/indirector/ssl_file.rb +201 -0
  507. data/vendored/puppet/lib/puppet/indirector/status.rb +3 -0
  508. data/vendored/puppet/lib/puppet/indirector/status/local.rb +12 -0
  509. data/vendored/puppet/lib/puppet/indirector/status/rest.rb +9 -0
  510. data/vendored/puppet/lib/puppet/indirector/store_configs.rb +30 -0
  511. data/vendored/puppet/lib/puppet/indirector/terminus.rb +169 -0
  512. data/vendored/puppet/lib/puppet/indirector/yaml.rb +63 -0
  513. data/vendored/puppet/lib/puppet/info_service.rb +17 -0
  514. data/vendored/puppet/lib/puppet/info_service/class_information_service.rb +110 -0
  515. data/vendored/puppet/lib/puppet/info_service/task_information_service.rb +32 -0
  516. data/vendored/puppet/lib/puppet/interface.rb +236 -0
  517. data/vendored/puppet/lib/puppet/interface/action.rb +374 -0
  518. data/vendored/puppet/lib/puppet/interface/action_builder.rb +149 -0
  519. data/vendored/puppet/lib/puppet/interface/action_manager.rb +97 -0
  520. data/vendored/puppet/lib/puppet/interface/documentation.rb +342 -0
  521. data/vendored/puppet/lib/puppet/interface/face_collection.rb +130 -0
  522. data/vendored/puppet/lib/puppet/interface/option.rb +150 -0
  523. data/vendored/puppet/lib/puppet/interface/option_builder.rb +91 -0
  524. data/vendored/puppet/lib/puppet/interface/option_manager.rb +99 -0
  525. data/vendored/puppet/lib/puppet/loaders.rb +26 -0
  526. data/vendored/puppet/lib/puppet/metatype/manager.rb +195 -0
  527. data/vendored/puppet/lib/puppet/module.rb +473 -0
  528. data/vendored/puppet/lib/puppet/module/task.rb +90 -0
  529. data/vendored/puppet/lib/puppet/module_tool.rb +196 -0
  530. data/vendored/puppet/lib/puppet/module_tool/applications.rb +14 -0
  531. data/vendored/puppet/lib/puppet/module_tool/applications/application.rb +90 -0
  532. data/vendored/puppet/lib/puppet/module_tool/applications/builder.rb +148 -0
  533. data/vendored/puppet/lib/puppet/module_tool/applications/checksummer.rb +62 -0
  534. data/vendored/puppet/lib/puppet/module_tool/applications/installer.rb +352 -0
  535. data/vendored/puppet/lib/puppet/module_tool/applications/searcher.rb +29 -0
  536. data/vendored/puppet/lib/puppet/module_tool/applications/uninstaller.rb +118 -0
  537. data/vendored/puppet/lib/puppet/module_tool/applications/unpacker.rb +100 -0
  538. data/vendored/puppet/lib/puppet/module_tool/applications/upgrader.rb +278 -0
  539. data/vendored/puppet/lib/puppet/module_tool/checksums.rb +49 -0
  540. data/vendored/puppet/lib/puppet/module_tool/contents_description.rb +88 -0
  541. data/vendored/puppet/lib/puppet/module_tool/dependency.rb +41 -0
  542. data/vendored/puppet/lib/puppet/module_tool/errors.rb +11 -0
  543. data/vendored/puppet/lib/puppet/module_tool/errors/base.rb +15 -0
  544. data/vendored/puppet/lib/puppet/module_tool/errors/installer.rb +95 -0
  545. data/vendored/puppet/lib/puppet/module_tool/errors/shared.rb +190 -0
  546. data/vendored/puppet/lib/puppet/module_tool/errors/uninstaller.rb +49 -0
  547. data/vendored/puppet/lib/puppet/module_tool/errors/upgrader.rb +63 -0
  548. data/vendored/puppet/lib/puppet/module_tool/install_directory.rb +45 -0
  549. data/vendored/puppet/lib/puppet/module_tool/installed_modules.rb +96 -0
  550. data/vendored/puppet/lib/puppet/module_tool/local_tarball.rb +90 -0
  551. data/vendored/puppet/lib/puppet/module_tool/metadata.rb +224 -0
  552. data/vendored/puppet/lib/puppet/module_tool/shared_behaviors.rb +180 -0
  553. data/vendored/puppet/lib/puppet/module_tool/skeleton/templates/generator/.fixtures.yml.erb +7 -0
  554. data/vendored/puppet/lib/puppet/module_tool/skeleton/templates/generator/.gitignore +18 -0
  555. data/vendored/puppet/lib/puppet/module_tool/skeleton/templates/generator/.rubocop.yml +42 -0
  556. data/vendored/puppet/lib/puppet/module_tool/skeleton/templates/generator/.yardopts +1 -0
  557. data/vendored/puppet/lib/puppet/module_tool/skeleton/templates/generator/Gemfile +18 -0
  558. data/vendored/puppet/lib/puppet/module_tool/skeleton/templates/generator/README.md.erb +89 -0
  559. data/vendored/puppet/lib/puppet/module_tool/skeleton/templates/generator/Rakefile +32 -0
  560. data/vendored/puppet/lib/puppet/module_tool/skeleton/templates/generator/examples/init.pp.erb +12 -0
  561. data/vendored/puppet/lib/puppet/module_tool/skeleton/templates/generator/manifests/init.pp.erb +48 -0
  562. data/vendored/puppet/lib/puppet/module_tool/skeleton/templates/generator/metadata.json.erb +1 -0
  563. data/vendored/puppet/lib/puppet/module_tool/skeleton/templates/generator/spec/classes/init_spec.rb.erb +6 -0
  564. data/vendored/puppet/lib/puppet/module_tool/skeleton/templates/generator/spec/spec_helper.rb +1 -0
  565. data/vendored/puppet/lib/puppet/module_tool/tar.rb +18 -0
  566. data/vendored/puppet/lib/puppet/module_tool/tar/gnu.rb +19 -0
  567. data/vendored/puppet/lib/puppet/module_tool/tar/mini.rb +53 -0
  568. data/vendored/puppet/lib/puppet/network.rb +3 -0
  569. data/vendored/puppet/lib/puppet/network/auth_config_parser.rb +85 -0
  570. data/vendored/puppet/lib/puppet/network/authconfig.rb +112 -0
  571. data/vendored/puppet/lib/puppet/network/authorization.rb +41 -0
  572. data/vendored/puppet/lib/puppet/network/authstore.rb +282 -0
  573. data/vendored/puppet/lib/puppet/network/client_request.rb +29 -0
  574. data/vendored/puppet/lib/puppet/network/format.rb +110 -0
  575. data/vendored/puppet/lib/puppet/network/format_handler.rb +108 -0
  576. data/vendored/puppet/lib/puppet/network/format_support.rb +134 -0
  577. data/vendored/puppet/lib/puppet/network/formats.rb +171 -0
  578. data/vendored/puppet/lib/puppet/network/http.rb +30 -0
  579. data/vendored/puppet/lib/puppet/network/http/api.rb +44 -0
  580. data/vendored/puppet/lib/puppet/network/http/api/ca.rb +2 -0
  581. data/vendored/puppet/lib/puppet/network/http/api/ca/v1.rb +11 -0
  582. data/vendored/puppet/lib/puppet/network/http/api/indirected_routes.rb +278 -0
  583. data/vendored/puppet/lib/puppet/network/http/api/indirection_type.rb +32 -0
  584. data/vendored/puppet/lib/puppet/network/http/api/master.rb +2 -0
  585. data/vendored/puppet/lib/puppet/network/http/api/master/v3.rb +28 -0
  586. data/vendored/puppet/lib/puppet/network/http/api/master/v3/authorization.rb +18 -0
  587. data/vendored/puppet/lib/puppet/network/http/api/master/v3/environment.rb +82 -0
  588. data/vendored/puppet/lib/puppet/network/http/api/master/v3/environments.rb +35 -0
  589. data/vendored/puppet/lib/puppet/network/http/compression.rb +120 -0
  590. data/vendored/puppet/lib/puppet/network/http/connection.rb +332 -0
  591. data/vendored/puppet/lib/puppet/network/http/error.rb +73 -0
  592. data/vendored/puppet/lib/puppet/network/http/factory.rb +47 -0
  593. data/vendored/puppet/lib/puppet/network/http/handler.rb +183 -0
  594. data/vendored/puppet/lib/puppet/network/http/issues.rb +12 -0
  595. data/vendored/puppet/lib/puppet/network/http/memory_response.rb +13 -0
  596. data/vendored/puppet/lib/puppet/network/http/nocache_pool.rb +21 -0
  597. data/vendored/puppet/lib/puppet/network/http/pool.rb +129 -0
  598. data/vendored/puppet/lib/puppet/network/http/rack.rb +33 -0
  599. data/vendored/puppet/lib/puppet/network/http/rack/rest.rb +162 -0
  600. data/vendored/puppet/lib/puppet/network/http/request.rb +70 -0
  601. data/vendored/puppet/lib/puppet/network/http/response.rb +23 -0
  602. data/vendored/puppet/lib/puppet/network/http/route.rb +100 -0
  603. data/vendored/puppet/lib/puppet/network/http/session.rb +17 -0
  604. data/vendored/puppet/lib/puppet/network/http/site.rb +39 -0
  605. data/vendored/puppet/lib/puppet/network/http/webrick.rb +125 -0
  606. data/vendored/puppet/lib/puppet/network/http/webrick/rest.rb +114 -0
  607. data/vendored/puppet/lib/puppet/network/http_pool.rb +61 -0
  608. data/vendored/puppet/lib/puppet/network/resolver.rb +86 -0
  609. data/vendored/puppet/lib/puppet/network/rest_controller.rb +2 -0
  610. data/vendored/puppet/lib/puppet/network/rights.rb +209 -0
  611. data/vendored/puppet/lib/puppet/network/server.rb +39 -0
  612. data/vendored/puppet/lib/puppet/node.rb +262 -0
  613. data/vendored/puppet/lib/puppet/node/environment.rb +572 -0
  614. data/vendored/puppet/lib/puppet/node/facts.rb +128 -0
  615. data/vendored/puppet/lib/puppet/parameter.rb +567 -0
  616. data/vendored/puppet/lib/puppet/parameter/boolean.rb +15 -0
  617. data/vendored/puppet/lib/puppet/parameter/package_options.rb +31 -0
  618. data/vendored/puppet/lib/puppet/parameter/path.rb +57 -0
  619. data/vendored/puppet/lib/puppet/parameter/value.rb +91 -0
  620. data/vendored/puppet/lib/puppet/parameter/value_collection.rb +212 -0
  621. data/vendored/puppet/lib/puppet/parser.rb +20 -0
  622. data/vendored/puppet/lib/puppet/parser/abstract_compiler.rb +36 -0
  623. data/vendored/puppet/lib/puppet/parser/ast.rb +65 -0
  624. data/vendored/puppet/lib/puppet/parser/ast/block_expression.rb +15 -0
  625. data/vendored/puppet/lib/puppet/parser/ast/branch.rb +19 -0
  626. data/vendored/puppet/lib/puppet/parser/ast/hostclass.rb +27 -0
  627. data/vendored/puppet/lib/puppet/parser/ast/leaf.rb +75 -0
  628. data/vendored/puppet/lib/puppet/parser/ast/node.rb +17 -0
  629. data/vendored/puppet/lib/puppet/parser/ast/pops_bridge.rb +273 -0
  630. data/vendored/puppet/lib/puppet/parser/ast/resource.rb +66 -0
  631. data/vendored/puppet/lib/puppet/parser/ast/resource_instance.rb +10 -0
  632. data/vendored/puppet/lib/puppet/parser/ast/resourceparam.rb +31 -0
  633. data/vendored/puppet/lib/puppet/parser/ast/top_level_construct.rb +4 -0
  634. data/vendored/puppet/lib/puppet/parser/compiler.rb +788 -0
  635. data/vendored/puppet/lib/puppet/parser/compiler/catalog_validator.rb +33 -0
  636. data/vendored/puppet/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +64 -0
  637. data/vendored/puppet/lib/puppet/parser/compiler/catalog_validator/relationship_validator.rb +57 -0
  638. data/vendored/puppet/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +20 -0
  639. data/vendored/puppet/lib/puppet/parser/e4_parser_adapter.rb +60 -0
  640. data/vendored/puppet/lib/puppet/parser/environment_compiler.rb +199 -0
  641. data/vendored/puppet/lib/puppet/parser/files.rb +92 -0
  642. data/vendored/puppet/lib/puppet/parser/functions.rb +278 -0
  643. data/vendored/puppet/lib/puppet/parser/functions/assert_type.rb +60 -0
  644. data/vendored/puppet/lib/puppet/parser/functions/binary_file.rb +24 -0
  645. data/vendored/puppet/lib/puppet/parser/functions/break.rb +39 -0
  646. data/vendored/puppet/lib/puppet/parser/functions/contain.rb +30 -0
  647. data/vendored/puppet/lib/puppet/parser/functions/create_resources.rb +112 -0
  648. data/vendored/puppet/lib/puppet/parser/functions/defined.rb +107 -0
  649. data/vendored/puppet/lib/puppet/parser/functions/dig.rb +38 -0
  650. data/vendored/puppet/lib/puppet/parser/functions/digest.rb +5 -0
  651. data/vendored/puppet/lib/puppet/parser/functions/each.rb +104 -0
  652. data/vendored/puppet/lib/puppet/parser/functions/epp.rb +39 -0
  653. data/vendored/puppet/lib/puppet/parser/functions/fail.rb +4 -0
  654. data/vendored/puppet/lib/puppet/parser/functions/file.rb +33 -0
  655. data/vendored/puppet/lib/puppet/parser/functions/filter.rb +78 -0
  656. data/vendored/puppet/lib/puppet/parser/functions/find_file.rb +28 -0
  657. data/vendored/puppet/lib/puppet/parser/functions/fqdn_rand.rb +21 -0
  658. data/vendored/puppet/lib/puppet/parser/functions/generate.rb +38 -0
  659. data/vendored/puppet/lib/puppet/parser/functions/hiera.rb +103 -0
  660. data/vendored/puppet/lib/puppet/parser/functions/hiera_array.rb +92 -0
  661. data/vendored/puppet/lib/puppet/parser/functions/hiera_hash.rb +102 -0
  662. data/vendored/puppet/lib/puppet/parser/functions/hiera_include.rb +102 -0
  663. data/vendored/puppet/lib/puppet/parser/functions/include.rb +34 -0
  664. data/vendored/puppet/lib/puppet/parser/functions/inline_epp.rb +51 -0
  665. data/vendored/puppet/lib/puppet/parser/functions/inline_template.rb +27 -0
  666. data/vendored/puppet/lib/puppet/parser/functions/lest.rb +49 -0
  667. data/vendored/puppet/lib/puppet/parser/functions/lookup.rb +132 -0
  668. data/vendored/puppet/lib/puppet/parser/functions/map.rb +76 -0
  669. data/vendored/puppet/lib/puppet/parser/functions/match.rb +43 -0
  670. data/vendored/puppet/lib/puppet/parser/functions/md5.rb +5 -0
  671. data/vendored/puppet/lib/puppet/parser/functions/new.rb +1006 -0
  672. data/vendored/puppet/lib/puppet/parser/functions/next.rb +38 -0
  673. data/vendored/puppet/lib/puppet/parser/functions/realize.rb +20 -0
  674. data/vendored/puppet/lib/puppet/parser/functions/reduce.rb +137 -0
  675. data/vendored/puppet/lib/puppet/parser/functions/regsubst.rb +62 -0
  676. data/vendored/puppet/lib/puppet/parser/functions/require.rb +40 -0
  677. data/vendored/puppet/lib/puppet/parser/functions/return.rb +71 -0
  678. data/vendored/puppet/lib/puppet/parser/functions/reverse_each.rb +83 -0
  679. data/vendored/puppet/lib/puppet/parser/functions/scanf.rb +38 -0
  680. data/vendored/puppet/lib/puppet/parser/functions/sha1.rb +5 -0
  681. data/vendored/puppet/lib/puppet/parser/functions/shellquote.rb +61 -0
  682. data/vendored/puppet/lib/puppet/parser/functions/slice.rb +39 -0
  683. data/vendored/puppet/lib/puppet/parser/functions/split.rb +28 -0
  684. data/vendored/puppet/lib/puppet/parser/functions/sprintf.rb +36 -0
  685. data/vendored/puppet/lib/puppet/parser/functions/step.rb +84 -0
  686. data/vendored/puppet/lib/puppet/parser/functions/strftime.rb +185 -0
  687. data/vendored/puppet/lib/puppet/parser/functions/tag.rb +12 -0
  688. data/vendored/puppet/lib/puppet/parser/functions/tagged.rb +24 -0
  689. data/vendored/puppet/lib/puppet/parser/functions/template.rb +35 -0
  690. data/vendored/puppet/lib/puppet/parser/functions/then.rb +73 -0
  691. data/vendored/puppet/lib/puppet/parser/functions/type.rb +53 -0
  692. data/vendored/puppet/lib/puppet/parser/functions/versioncmp.rb +30 -0
  693. data/vendored/puppet/lib/puppet/parser/functions/with.rb +28 -0
  694. data/vendored/puppet/lib/puppet/parser/parser_factory.rb +30 -0
  695. data/vendored/puppet/lib/puppet/parser/relationship.rb +83 -0
  696. data/vendored/puppet/lib/puppet/parser/resource.rb +418 -0
  697. data/vendored/puppet/lib/puppet/parser/resource/param.rb +22 -0
  698. data/vendored/puppet/lib/puppet/parser/scope.rb +1112 -0
  699. data/vendored/puppet/lib/puppet/parser/script_compiler.rb +117 -0
  700. data/vendored/puppet/lib/puppet/parser/templatewrapper.rb +101 -0
  701. data/vendored/puppet/lib/puppet/parser/type_loader.rb +149 -0
  702. data/vendored/puppet/lib/puppet/plugins.rb +9 -0
  703. data/vendored/puppet/lib/puppet/plugins/configuration.rb +25 -0
  704. data/vendored/puppet/lib/puppet/plugins/syntax_checkers.rb +98 -0
  705. data/vendored/puppet/lib/puppet/pops.rb +120 -0
  706. data/vendored/puppet/lib/puppet/pops/adaptable.rb +206 -0
  707. data/vendored/puppet/lib/puppet/pops/adapters.rb +138 -0
  708. data/vendored/puppet/lib/puppet/pops/evaluator/access_operator.rb +706 -0
  709. data/vendored/puppet/lib/puppet/pops/evaluator/callable_signature.rb +107 -0
  710. data/vendored/puppet/lib/puppet/pops/evaluator/closure.rb +373 -0
  711. data/vendored/puppet/lib/puppet/pops/evaluator/collector_transformer.rb +233 -0
  712. data/vendored/puppet/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +86 -0
  713. data/vendored/puppet/lib/puppet/pops/evaluator/collectors/catalog_collector.rb +29 -0
  714. data/vendored/puppet/lib/puppet/pops/evaluator/collectors/exported_collector.rb +69 -0
  715. data/vendored/puppet/lib/puppet/pops/evaluator/collectors/fixed_set_collector.rb +37 -0
  716. data/vendored/puppet/lib/puppet/pops/evaluator/compare_operator.rb +252 -0
  717. data/vendored/puppet/lib/puppet/pops/evaluator/epp_evaluator.rb +94 -0
  718. data/vendored/puppet/lib/puppet/pops/evaluator/evaluator_impl.rb +1258 -0
  719. data/vendored/puppet/lib/puppet/pops/evaluator/external_syntax_support.rb +45 -0
  720. data/vendored/puppet/lib/puppet/pops/evaluator/json_strict_literal_evaluator.rb +82 -0
  721. data/vendored/puppet/lib/puppet/pops/evaluator/literal_evaluator.rb +87 -0
  722. data/vendored/puppet/lib/puppet/pops/evaluator/puppet_proc.rb +69 -0
  723. data/vendored/puppet/lib/puppet/pops/evaluator/relationship_operator.rb +185 -0
  724. data/vendored/puppet/lib/puppet/pops/evaluator/runtime3_converter.rb +200 -0
  725. data/vendored/puppet/lib/puppet/pops/evaluator/runtime3_resource_support.rb +117 -0
  726. data/vendored/puppet/lib/puppet/pops/evaluator/runtime3_support.rb +538 -0
  727. data/vendored/puppet/lib/puppet/pops/functions/dispatch.rb +100 -0
  728. data/vendored/puppet/lib/puppet/pops/functions/dispatcher.rb +71 -0
  729. data/vendored/puppet/lib/puppet/pops/functions/function.rb +135 -0
  730. data/vendored/puppet/lib/puppet/pops/issue_reporter.rb +115 -0
  731. data/vendored/puppet/lib/puppet/pops/issues.rb +888 -0
  732. data/vendored/puppet/lib/puppet/pops/label_provider.rb +90 -0
  733. data/vendored/puppet/lib/puppet/pops/loader/base_loader.rb +166 -0
  734. data/vendored/puppet/lib/puppet/pops/loader/dependency_loader.rb +92 -0
  735. data/vendored/puppet/lib/puppet/pops/loader/gem_support.rb +49 -0
  736. data/vendored/puppet/lib/puppet/pops/loader/loader.rb +204 -0
  737. data/vendored/puppet/lib/puppet/pops/loader/loader_paths.rb +296 -0
  738. data/vendored/puppet/lib/puppet/pops/loader/module_loaders.rb +452 -0
  739. data/vendored/puppet/lib/puppet/pops/loader/null_loader.rb +60 -0
  740. data/vendored/puppet/lib/puppet/pops/loader/predefined_loader.rb +24 -0
  741. data/vendored/puppet/lib/puppet/pops/loader/puppet_function_instantiator.rb +84 -0
  742. data/vendored/puppet/lib/puppet/pops/loader/puppet_plan_instantiator.rb +84 -0
  743. data/vendored/puppet/lib/puppet/pops/loader/puppet_resource_type_impl_instantiator.rb +79 -0
  744. data/vendored/puppet/lib/puppet/pops/loader/ruby_function_instantiator.rb +46 -0
  745. data/vendored/puppet/lib/puppet/pops/loader/runtime3_type_loader.rb +101 -0
  746. data/vendored/puppet/lib/puppet/pops/loader/simple_environment_loader.rb +20 -0
  747. data/vendored/puppet/lib/puppet/pops/loader/static_loader.rb +164 -0
  748. data/vendored/puppet/lib/puppet/pops/loader/task_instantiator.rb +117 -0
  749. data/vendored/puppet/lib/puppet/pops/loader/type_definition_instantiator.rb +97 -0
  750. data/vendored/puppet/lib/puppet/pops/loader/typed_name.rb +54 -0
  751. data/vendored/puppet/lib/puppet/pops/loader/uri_helper.rb +22 -0
  752. data/vendored/puppet/lib/puppet/pops/loaders.rb +517 -0
  753. data/vendored/puppet/lib/puppet/pops/lookup.rb +96 -0
  754. data/vendored/puppet/lib/puppet/pops/lookup/configured_data_provider.rb +93 -0
  755. data/vendored/puppet/lib/puppet/pops/lookup/context.rb +200 -0
  756. data/vendored/puppet/lib/puppet/pops/lookup/data_adapter.rb +27 -0
  757. data/vendored/puppet/lib/puppet/pops/lookup/data_dig_function_provider.rb +145 -0
  758. data/vendored/puppet/lib/puppet/pops/lookup/data_hash_function_provider.rb +126 -0
  759. data/vendored/puppet/lib/puppet/pops/lookup/data_provider.rb +92 -0
  760. data/vendored/puppet/lib/puppet/pops/lookup/environment_data_provider.rb +35 -0
  761. data/vendored/puppet/lib/puppet/pops/lookup/explainer.rb +594 -0
  762. data/vendored/puppet/lib/puppet/pops/lookup/function_provider.rb +110 -0
  763. data/vendored/puppet/lib/puppet/pops/lookup/global_data_provider.rb +75 -0
  764. data/vendored/puppet/lib/puppet/pops/lookup/hiera_config.rb +761 -0
  765. data/vendored/puppet/lib/puppet/pops/lookup/interpolation.rb +154 -0
  766. data/vendored/puppet/lib/puppet/pops/lookup/invocation.rb +261 -0
  767. data/vendored/puppet/lib/puppet/pops/lookup/location_resolver.rb +99 -0
  768. data/vendored/puppet/lib/puppet/pops/lookup/lookup_adapter.rb +472 -0
  769. data/vendored/puppet/lib/puppet/pops/lookup/lookup_key.rb +99 -0
  770. data/vendored/puppet/lib/puppet/pops/lookup/lookup_key_function_provider.rb +92 -0
  771. data/vendored/puppet/lib/puppet/pops/lookup/module_data_provider.rb +89 -0
  772. data/vendored/puppet/lib/puppet/pops/lookup/sub_lookup.rb +92 -0
  773. data/vendored/puppet/lib/puppet/pops/merge_strategy.rb +434 -0
  774. data/vendored/puppet/lib/puppet/pops/migration/migration_checker.rb +58 -0
  775. data/vendored/puppet/lib/puppet/pops/model/ast.pp +695 -0
  776. data/vendored/puppet/lib/puppet/pops/model/ast.rb +4870 -0
  777. data/vendored/puppet/lib/puppet/pops/model/ast_transformer.rb +131 -0
  778. data/vendored/puppet/lib/puppet/pops/model/factory.rb +1145 -0
  779. data/vendored/puppet/lib/puppet/pops/model/model_label_provider.rb +132 -0
  780. data/vendored/puppet/lib/puppet/pops/model/model_tree_dumper.rb +463 -0
  781. data/vendored/puppet/lib/puppet/pops/model/tree_dumper.rb +59 -0
  782. data/vendored/puppet/lib/puppet/pops/parser/code_merger.rb +29 -0
  783. data/vendored/puppet/lib/puppet/pops/parser/egrammar.ra +937 -0
  784. data/vendored/puppet/lib/puppet/pops/parser/eparser.rb +3347 -0
  785. data/vendored/puppet/lib/puppet/pops/parser/epp_parser.rb +51 -0
  786. data/vendored/puppet/lib/puppet/pops/parser/epp_support.rb +262 -0
  787. data/vendored/puppet/lib/puppet/pops/parser/evaluating_parser.rb +165 -0
  788. data/vendored/puppet/lib/puppet/pops/parser/heredoc_support.rb +143 -0
  789. data/vendored/puppet/lib/puppet/pops/parser/interpolation_support.rb +244 -0
  790. data/vendored/puppet/lib/puppet/pops/parser/lexer2.rb +796 -0
  791. data/vendored/puppet/lib/puppet/pops/parser/lexer_support.rb +220 -0
  792. data/vendored/puppet/lib/puppet/pops/parser/locatable.rb +23 -0
  793. data/vendored/puppet/lib/puppet/pops/parser/locator.rb +344 -0
  794. data/vendored/puppet/lib/puppet/pops/parser/parser_support.rb +247 -0
  795. data/vendored/puppet/lib/puppet/pops/parser/slurp_support.rb +120 -0
  796. data/vendored/puppet/lib/puppet/pops/patterns.rb +60 -0
  797. data/vendored/puppet/lib/puppet/pops/pcore.rb +107 -0
  798. data/vendored/puppet/lib/puppet/pops/puppet_stack.rb +43 -0
  799. data/vendored/puppet/lib/puppet/pops/resource/param.rb +55 -0
  800. data/vendored/puppet/lib/puppet/pops/resource/resource_type_impl.rb +314 -0
  801. data/vendored/puppet/lib/puppet/pops/resource/resource_type_set.pcore +22 -0
  802. data/vendored/puppet/lib/puppet/pops/semantic_error.rb +29 -0
  803. data/vendored/puppet/lib/puppet/pops/serialization.rb +41 -0
  804. data/vendored/puppet/lib/puppet/pops/serialization/abstract_reader.rb +176 -0
  805. data/vendored/puppet/lib/puppet/pops/serialization/abstract_writer.rb +215 -0
  806. data/vendored/puppet/lib/puppet/pops/serialization/deserializer.rb +80 -0
  807. data/vendored/puppet/lib/puppet/pops/serialization/extension.rb +157 -0
  808. data/vendored/puppet/lib/puppet/pops/serialization/from_data_converter.rb +169 -0
  809. data/vendored/puppet/lib/puppet/pops/serialization/instance_reader.rb +19 -0
  810. data/vendored/puppet/lib/puppet/pops/serialization/instance_writer.rb +14 -0
  811. data/vendored/puppet/lib/puppet/pops/serialization/json.rb +297 -0
  812. data/vendored/puppet/lib/puppet/pops/serialization/json_path.rb +126 -0
  813. data/vendored/puppet/lib/puppet/pops/serialization/object.rb +71 -0
  814. data/vendored/puppet/lib/puppet/pops/serialization/serializer.rb +139 -0
  815. data/vendored/puppet/lib/puppet/pops/serialization/time_factory.rb +67 -0
  816. data/vendored/puppet/lib/puppet/pops/serialization/to_data_converter.rb +301 -0
  817. data/vendored/puppet/lib/puppet/pops/time/timespan.rb +718 -0
  818. data/vendored/puppet/lib/puppet/pops/time/timestamp.rb +160 -0
  819. data/vendored/puppet/lib/puppet/pops/types/annotatable.rb +36 -0
  820. data/vendored/puppet/lib/puppet/pops/types/annotation.rb +71 -0
  821. data/vendored/puppet/lib/puppet/pops/types/class_loader.rb +129 -0
  822. data/vendored/puppet/lib/puppet/pops/types/enumeration.rb +16 -0
  823. data/vendored/puppet/lib/puppet/pops/types/execution_result.rb +126 -0
  824. data/vendored/puppet/lib/puppet/pops/types/implementation_registry.rb +141 -0
  825. data/vendored/puppet/lib/puppet/pops/types/iterable.rb +330 -0
  826. data/vendored/puppet/lib/puppet/pops/types/p_binary_type.rb +226 -0
  827. data/vendored/puppet/lib/puppet/pops/types/p_error_type.rb +146 -0
  828. data/vendored/puppet/lib/puppet/pops/types/p_init_type.rb +238 -0
  829. data/vendored/puppet/lib/puppet/pops/types/p_meta_type.rb +90 -0
  830. data/vendored/puppet/lib/puppet/pops/types/p_object_type.rb +976 -0
  831. data/vendored/puppet/lib/puppet/pops/types/p_runtime_type.rb +115 -0
  832. data/vendored/puppet/lib/puppet/pops/types/p_sem_ver_range_type.rb +191 -0
  833. data/vendored/puppet/lib/puppet/pops/types/p_sem_ver_type.rb +141 -0
  834. data/vendored/puppet/lib/puppet/pops/types/p_sensitive_type.rb +73 -0
  835. data/vendored/puppet/lib/puppet/pops/types/p_timespan_type.rb +192 -0
  836. data/vendored/puppet/lib/puppet/pops/types/p_timestamp_type.rb +73 -0
  837. data/vendored/puppet/lib/puppet/pops/types/p_type_set_type.rb +361 -0
  838. data/vendored/puppet/lib/puppet/pops/types/puppet_object.rb +30 -0
  839. data/vendored/puppet/lib/puppet/pops/types/recursion_guard.rb +136 -0
  840. data/vendored/puppet/lib/puppet/pops/types/ruby_generator.rb +432 -0
  841. data/vendored/puppet/lib/puppet/pops/types/ruby_method.rb +31 -0
  842. data/vendored/puppet/lib/puppet/pops/types/string_converter.rb +1102 -0
  843. data/vendored/puppet/lib/puppet/pops/types/task.rb +116 -0
  844. data/vendored/puppet/lib/puppet/pops/types/tree_iterators.rb +250 -0
  845. data/vendored/puppet/lib/puppet/pops/types/type_acceptor.rb +25 -0
  846. data/vendored/puppet/lib/puppet/pops/types/type_asserter.rb +47 -0
  847. data/vendored/puppet/lib/puppet/pops/types/type_assertion_error.rb +27 -0
  848. data/vendored/puppet/lib/puppet/pops/types/type_calculator.rb +799 -0
  849. data/vendored/puppet/lib/puppet/pops/types/type_conversion_error.rb +15 -0
  850. data/vendored/puppet/lib/puppet/pops/types/type_factory.rb +599 -0
  851. data/vendored/puppet/lib/puppet/pops/types/type_formatter.rb +769 -0
  852. data/vendored/puppet/lib/puppet/pops/types/type_mismatch_describer.rb +1062 -0
  853. data/vendored/puppet/lib/puppet/pops/types/type_parser.rb +602 -0
  854. data/vendored/puppet/lib/puppet/pops/types/type_set_reference.rb +59 -0
  855. data/vendored/puppet/lib/puppet/pops/types/types.rb +3519 -0
  856. data/vendored/puppet/lib/puppet/pops/utils.rb +119 -0
  857. data/vendored/puppet/lib/puppet/pops/validation.rb +464 -0
  858. data/vendored/puppet/lib/puppet/pops/validation/checker4_0.rb +996 -0
  859. data/vendored/puppet/lib/puppet/pops/validation/tasks_checker.rb +60 -0
  860. data/vendored/puppet/lib/puppet/pops/validation/validator_factory_4_0.rb +43 -0
  861. data/vendored/puppet/lib/puppet/pops/visitable.rb +6 -0
  862. data/vendored/puppet/lib/puppet/pops/visitor.rb +116 -0
  863. data/vendored/puppet/lib/puppet/property.rb +600 -0
  864. data/vendored/puppet/lib/puppet/property/boolean.rb +7 -0
  865. data/vendored/puppet/lib/puppet/property/ensure.rb +105 -0
  866. data/vendored/puppet/lib/puppet/property/keyvalue.rb +95 -0
  867. data/vendored/puppet/lib/puppet/property/list.rb +69 -0
  868. data/vendored/puppet/lib/puppet/property/ordered_list.rb +29 -0
  869. data/vendored/puppet/lib/puppet/provider.rb +603 -0
  870. data/vendored/puppet/lib/puppet/provider/aixobject.rb +392 -0
  871. data/vendored/puppet/lib/puppet/provider/augeas/augeas.rb +567 -0
  872. data/vendored/puppet/lib/puppet/provider/cisco.rb +9 -0
  873. data/vendored/puppet/lib/puppet/provider/command.rb +25 -0
  874. data/vendored/puppet/lib/puppet/provider/computer/computer.rb +20 -0
  875. data/vendored/puppet/lib/puppet/provider/confine.rb +6 -0
  876. data/vendored/puppet/lib/puppet/provider/cron/crontab.rb +297 -0
  877. data/vendored/puppet/lib/puppet/provider/exec.rb +98 -0
  878. data/vendored/puppet/lib/puppet/provider/exec/posix.rb +48 -0
  879. data/vendored/puppet/lib/puppet/provider/exec/shell.rb +25 -0
  880. data/vendored/puppet/lib/puppet/provider/exec/windows.rb +55 -0
  881. data/vendored/puppet/lib/puppet/provider/file/posix.rb +136 -0
  882. data/vendored/puppet/lib/puppet/provider/file/windows.rb +104 -0
  883. data/vendored/puppet/lib/puppet/provider/group/aix.rb +141 -0
  884. data/vendored/puppet/lib/puppet/provider/group/directoryservice.rb +22 -0
  885. data/vendored/puppet/lib/puppet/provider/group/groupadd.rb +85 -0
  886. data/vendored/puppet/lib/puppet/provider/group/ldap.rb +45 -0
  887. data/vendored/puppet/lib/puppet/provider/group/pw.rb +49 -0
  888. data/vendored/puppet/lib/puppet/provider/group/windows_adsi.rb +109 -0
  889. data/vendored/puppet/lib/puppet/provider/host/parsed.rb +46 -0
  890. data/vendored/puppet/lib/puppet/provider/interface/cisco.rb +27 -0
  891. data/vendored/puppet/lib/puppet/provider/ldap.rb +137 -0
  892. data/vendored/puppet/lib/puppet/provider/macauthorization/macauthorization.rb +298 -0
  893. data/vendored/puppet/lib/puppet/provider/mailalias/aliases.rb +50 -0
  894. data/vendored/puppet/lib/puppet/provider/maillist/mailman.rb +108 -0
  895. data/vendored/puppet/lib/puppet/provider/mcx/mcxcontent.rb +173 -0
  896. data/vendored/puppet/lib/puppet/provider/mount.rb +59 -0
  897. data/vendored/puppet/lib/puppet/provider/mount/parsed.rb +282 -0
  898. data/vendored/puppet/lib/puppet/provider/naginator.rb +63 -0
  899. data/vendored/puppet/lib/puppet/provider/nameservice.rb +317 -0
  900. data/vendored/puppet/lib/puppet/provider/nameservice/directoryservice.rb +507 -0
  901. data/vendored/puppet/lib/puppet/provider/nameservice/objectadd.rb +33 -0
  902. data/vendored/puppet/lib/puppet/provider/nameservice/pw.rb +21 -0
  903. data/vendored/puppet/lib/puppet/provider/network_device.rb +72 -0
  904. data/vendored/puppet/lib/puppet/provider/package.rb +56 -0
  905. data/vendored/puppet/lib/puppet/provider/package/aix.rb +152 -0
  906. data/vendored/puppet/lib/puppet/provider/package/appdmg.rb +110 -0
  907. data/vendored/puppet/lib/puppet/provider/package/apple.rb +47 -0
  908. data/vendored/puppet/lib/puppet/provider/package/apt.rb +116 -0
  909. data/vendored/puppet/lib/puppet/provider/package/aptitude.rb +29 -0
  910. data/vendored/puppet/lib/puppet/provider/package/aptrpm.rb +83 -0
  911. data/vendored/puppet/lib/puppet/provider/package/blastwave.rb +111 -0
  912. data/vendored/puppet/lib/puppet/provider/package/dnf.rb +46 -0
  913. data/vendored/puppet/lib/puppet/provider/package/dpkg.rb +165 -0
  914. data/vendored/puppet/lib/puppet/provider/package/fink.rb +79 -0
  915. data/vendored/puppet/lib/puppet/provider/package/freebsd.rb +47 -0
  916. data/vendored/puppet/lib/puppet/provider/package/gem.rb +175 -0
  917. data/vendored/puppet/lib/puppet/provider/package/hpux.rb +44 -0
  918. data/vendored/puppet/lib/puppet/provider/package/macports.rb +107 -0
  919. data/vendored/puppet/lib/puppet/provider/package/nim.rb +283 -0
  920. data/vendored/puppet/lib/puppet/provider/package/openbsd.rb +242 -0
  921. data/vendored/puppet/lib/puppet/provider/package/opkg.rb +81 -0
  922. data/vendored/puppet/lib/puppet/provider/package/pacman.rb +267 -0
  923. data/vendored/puppet/lib/puppet/provider/package/pip.rb +188 -0
  924. data/vendored/puppet/lib/puppet/provider/package/pip3.rb +20 -0
  925. data/vendored/puppet/lib/puppet/provider/package/pkg.rb +249 -0
  926. data/vendored/puppet/lib/puppet/provider/package/pkgdmg.rb +152 -0
  927. data/vendored/puppet/lib/puppet/provider/package/pkgin.rb +87 -0
  928. data/vendored/puppet/lib/puppet/provider/package/pkgng.rb +143 -0
  929. data/vendored/puppet/lib/puppet/provider/package/pkgutil.rb +186 -0
  930. data/vendored/puppet/lib/puppet/provider/package/portage.rb +301 -0
  931. data/vendored/puppet/lib/puppet/provider/package/ports.rb +91 -0
  932. data/vendored/puppet/lib/puppet/provider/package/portupgrade.rb +239 -0
  933. data/vendored/puppet/lib/puppet/provider/package/puppet_gem.rb +17 -0
  934. data/vendored/puppet/lib/puppet/provider/package/rpm.rb +405 -0
  935. data/vendored/puppet/lib/puppet/provider/package/rug.rb +51 -0
  936. data/vendored/puppet/lib/puppet/provider/package/sun.rb +133 -0
  937. data/vendored/puppet/lib/puppet/provider/package/sunfreeware.rb +9 -0
  938. data/vendored/puppet/lib/puppet/provider/package/tdnf.rb +28 -0
  939. data/vendored/puppet/lib/puppet/provider/package/up2date.rb +40 -0
  940. data/vendored/puppet/lib/puppet/provider/package/urpmi.rb +55 -0
  941. data/vendored/puppet/lib/puppet/provider/package/windows.rb +113 -0
  942. data/vendored/puppet/lib/puppet/provider/package/windows/exe_package.rb +71 -0
  943. data/vendored/puppet/lib/puppet/provider/package/windows/msi_package.rb +62 -0
  944. data/vendored/puppet/lib/puppet/provider/package/windows/package.rb +100 -0
  945. data/vendored/puppet/lib/puppet/provider/package/yum.rb +278 -0
  946. data/vendored/puppet/lib/puppet/provider/package/zypper.rb +145 -0
  947. data/vendored/puppet/lib/puppet/provider/parsedfile.rb +459 -0
  948. data/vendored/puppet/lib/puppet/provider/scheduled_task/win32_taskscheduler.rb +590 -0
  949. data/vendored/puppet/lib/puppet/provider/selboolean/getsetsebool.rb +47 -0
  950. data/vendored/puppet/lib/puppet/provider/selmodule/semodule.rb +138 -0
  951. data/vendored/puppet/lib/puppet/provider/service/base.rb +121 -0
  952. data/vendored/puppet/lib/puppet/provider/service/bsd.rb +51 -0
  953. data/vendored/puppet/lib/puppet/provider/service/daemontools.rb +194 -0
  954. data/vendored/puppet/lib/puppet/provider/service/debian.rb +74 -0
  955. data/vendored/puppet/lib/puppet/provider/service/freebsd.rb +143 -0
  956. data/vendored/puppet/lib/puppet/provider/service/gentoo.rb +45 -0
  957. data/vendored/puppet/lib/puppet/provider/service/init.rb +193 -0
  958. data/vendored/puppet/lib/puppet/provider/service/launchd.rb +346 -0
  959. data/vendored/puppet/lib/puppet/provider/service/openbsd.rb +100 -0
  960. data/vendored/puppet/lib/puppet/provider/service/openrc.rb +71 -0
  961. data/vendored/puppet/lib/puppet/provider/service/openwrt.rb +36 -0
  962. data/vendored/puppet/lib/puppet/provider/service/rcng.rb +51 -0
  963. data/vendored/puppet/lib/puppet/provider/service/redhat.rb +71 -0
  964. data/vendored/puppet/lib/puppet/provider/service/runit.rb +111 -0
  965. data/vendored/puppet/lib/puppet/provider/service/service.rb +42 -0
  966. data/vendored/puppet/lib/puppet/provider/service/smf.rb +167 -0
  967. data/vendored/puppet/lib/puppet/provider/service/src.rb +147 -0
  968. data/vendored/puppet/lib/puppet/provider/service/systemd.rb +186 -0
  969. data/vendored/puppet/lib/puppet/provider/service/upstart.rb +359 -0
  970. data/vendored/puppet/lib/puppet/provider/service/windows.rb +106 -0
  971. data/vendored/puppet/lib/puppet/provider/ssh_authorized_key/parsed.rb +105 -0
  972. data/vendored/puppet/lib/puppet/provider/sshkey/parsed.rb +50 -0
  973. data/vendored/puppet/lib/puppet/provider/user/aix.rb +375 -0
  974. data/vendored/puppet/lib/puppet/provider/user/directoryservice.rb +632 -0
  975. data/vendored/puppet/lib/puppet/provider/user/hpux.rb +95 -0
  976. data/vendored/puppet/lib/puppet/provider/user/ldap.rb +128 -0
  977. data/vendored/puppet/lib/puppet/provider/user/openbsd.rb +75 -0
  978. data/vendored/puppet/lib/puppet/provider/user/pw.rb +98 -0
  979. data/vendored/puppet/lib/puppet/provider/user/user_role_add.rb +227 -0
  980. data/vendored/puppet/lib/puppet/provider/user/useradd.rb +231 -0
  981. data/vendored/puppet/lib/puppet/provider/user/windows_adsi.rb +148 -0
  982. data/vendored/puppet/lib/puppet/provider/vlan/cisco.rb +28 -0
  983. data/vendored/puppet/lib/puppet/provider/yumrepo/inifile.rb +304 -0
  984. data/vendored/puppet/lib/puppet/provider/zfs/zfs.rb +84 -0
  985. data/vendored/puppet/lib/puppet/provider/zone/solaris.rb +364 -0
  986. data/vendored/puppet/lib/puppet/provider/zpool/zpool.rb +125 -0
  987. data/vendored/puppet/lib/puppet/reference/configuration.rb +82 -0
  988. data/vendored/puppet/lib/puppet/reference/function.rb +17 -0
  989. data/vendored/puppet/lib/puppet/reference/indirection.rb +71 -0
  990. data/vendored/puppet/lib/puppet/reference/metaparameter.rb +35 -0
  991. data/vendored/puppet/lib/puppet/reference/providers.rb +118 -0
  992. data/vendored/puppet/lib/puppet/reference/report.rb +20 -0
  993. data/vendored/puppet/lib/puppet/reference/type.rb +114 -0
  994. data/vendored/puppet/lib/puppet/relationship.rb +88 -0
  995. data/vendored/puppet/lib/puppet/reports.rb +93 -0
  996. data/vendored/puppet/lib/puppet/reports/http.rb +37 -0
  997. data/vendored/puppet/lib/puppet/reports/log.rb +14 -0
  998. data/vendored/puppet/lib/puppet/reports/store.rb +68 -0
  999. data/vendored/puppet/lib/puppet/resource.rb +669 -0
  1000. data/vendored/puppet/lib/puppet/resource/capability_finder.rb +147 -0
  1001. data/vendored/puppet/lib/puppet/resource/catalog.rb +667 -0
  1002. data/vendored/puppet/lib/puppet/resource/status.rb +221 -0
  1003. data/vendored/puppet/lib/puppet/resource/type.rb +524 -0
  1004. data/vendored/puppet/lib/puppet/resource/type_collection.rb +263 -0
  1005. data/vendored/puppet/lib/puppet/scheduler.rb +16 -0
  1006. data/vendored/puppet/lib/puppet/scheduler/job.rb +53 -0
  1007. data/vendored/puppet/lib/puppet/scheduler/scheduler.rb +44 -0
  1008. data/vendored/puppet/lib/puppet/scheduler/splay_job.rb +32 -0
  1009. data/vendored/puppet/lib/puppet/scheduler/timer.rb +13 -0
  1010. data/vendored/puppet/lib/puppet/settings.rb +1457 -0
  1011. data/vendored/puppet/lib/puppet/settings/array_setting.rb +17 -0
  1012. data/vendored/puppet/lib/puppet/settings/autosign_setting.rb +22 -0
  1013. data/vendored/puppet/lib/puppet/settings/base_setting.rb +177 -0
  1014. data/vendored/puppet/lib/puppet/settings/boolean_setting.rb +32 -0
  1015. data/vendored/puppet/lib/puppet/settings/certificate_revocation_setting.rb +21 -0
  1016. data/vendored/puppet/lib/puppet/settings/config_file.rb +143 -0
  1017. data/vendored/puppet/lib/puppet/settings/directory_setting.rb +18 -0
  1018. data/vendored/puppet/lib/puppet/settings/duration_setting.rb +32 -0
  1019. data/vendored/puppet/lib/puppet/settings/enum_setting.rb +16 -0
  1020. data/vendored/puppet/lib/puppet/settings/environment_conf.rb +204 -0
  1021. data/vendored/puppet/lib/puppet/settings/errors.rb +11 -0
  1022. data/vendored/puppet/lib/puppet/settings/file_or_directory_setting.rb +40 -0
  1023. data/vendored/puppet/lib/puppet/settings/file_setting.rb +245 -0
  1024. data/vendored/puppet/lib/puppet/settings/ini_file.rb +200 -0
  1025. data/vendored/puppet/lib/puppet/settings/path_setting.rb +8 -0
  1026. data/vendored/puppet/lib/puppet/settings/priority_setting.rb +42 -0
  1027. data/vendored/puppet/lib/puppet/settings/server_list_setting.rb +20 -0
  1028. data/vendored/puppet/lib/puppet/settings/string_setting.rb +9 -0
  1029. data/vendored/puppet/lib/puppet/settings/symbolic_enum_setting.rb +17 -0
  1030. data/vendored/puppet/lib/puppet/settings/terminus_setting.rb +14 -0
  1031. data/vendored/puppet/lib/puppet/settings/ttl_setting.rb +46 -0
  1032. data/vendored/puppet/lib/puppet/settings/value_translator.rb +15 -0
  1033. data/vendored/puppet/lib/puppet/ssl.rb +13 -0
  1034. data/vendored/puppet/lib/puppet/ssl/base.rb +153 -0
  1035. data/vendored/puppet/lib/puppet/ssl/certificate.rb +95 -0
  1036. data/vendored/puppet/lib/puppet/ssl/certificate_authority.rb +553 -0
  1037. data/vendored/puppet/lib/puppet/ssl/certificate_authority/autosign_command.rb +45 -0
  1038. data/vendored/puppet/lib/puppet/ssl/certificate_authority/interface.rb +324 -0
  1039. data/vendored/puppet/lib/puppet/ssl/certificate_factory.rb +219 -0
  1040. data/vendored/puppet/lib/puppet/ssl/certificate_request.rb +327 -0
  1041. data/vendored/puppet/lib/puppet/ssl/certificate_request_attributes.rb +37 -0
  1042. data/vendored/puppet/lib/puppet/ssl/certificate_revocation_list.rb +111 -0
  1043. data/vendored/puppet/lib/puppet/ssl/certificate_signer.rb +27 -0
  1044. data/vendored/puppet/lib/puppet/ssl/configuration.rb +61 -0
  1045. data/vendored/puppet/lib/puppet/ssl/digest.rb +20 -0
  1046. data/vendored/puppet/lib/puppet/ssl/host.rb +400 -0
  1047. data/vendored/puppet/lib/puppet/ssl/inventory.rb +55 -0
  1048. data/vendored/puppet/lib/puppet/ssl/key.rb +63 -0
  1049. data/vendored/puppet/lib/puppet/ssl/oids.rb +187 -0
  1050. data/vendored/puppet/lib/puppet/ssl/validator.rb +60 -0
  1051. data/vendored/puppet/lib/puppet/ssl/validator/default_validator.rb +173 -0
  1052. data/vendored/puppet/lib/puppet/ssl/validator/no_validator.rb +20 -0
  1053. data/vendored/puppet/lib/puppet/status.rb +40 -0
  1054. data/vendored/puppet/lib/puppet/syntax_checkers.rb +3 -0
  1055. data/vendored/puppet/lib/puppet/syntax_checkers/base64.rb +41 -0
  1056. data/vendored/puppet/lib/puppet/syntax_checkers/json.rb +35 -0
  1057. data/vendored/puppet/lib/puppet/test/test_helper.rb +252 -0
  1058. data/vendored/puppet/lib/puppet/transaction.rb +417 -0
  1059. data/vendored/puppet/lib/puppet/transaction/additional_resource_generator.rb +220 -0
  1060. data/vendored/puppet/lib/puppet/transaction/event.rb +144 -0
  1061. data/vendored/puppet/lib/puppet/transaction/event_manager.rb +167 -0
  1062. data/vendored/puppet/lib/puppet/transaction/persistence.rb +84 -0
  1063. data/vendored/puppet/lib/puppet/transaction/report.rb +460 -0
  1064. data/vendored/puppet/lib/puppet/transaction/resource_harness.rb +318 -0
  1065. data/vendored/puppet/lib/puppet/type.rb +2664 -0
  1066. data/vendored/puppet/lib/puppet/type/augeas.rb +211 -0
  1067. data/vendored/puppet/lib/puppet/type/component.rb +88 -0
  1068. data/vendored/puppet/lib/puppet/type/computer.rb +66 -0
  1069. data/vendored/puppet/lib/puppet/type/cron.rb +475 -0
  1070. data/vendored/puppet/lib/puppet/type/exec.rb +622 -0
  1071. data/vendored/puppet/lib/puppet/type/file.rb +1039 -0
  1072. data/vendored/puppet/lib/puppet/type/file/checksum.rb +44 -0
  1073. data/vendored/puppet/lib/puppet/type/file/checksum_value.rb +53 -0
  1074. data/vendored/puppet/lib/puppet/type/file/content.rb +160 -0
  1075. data/vendored/puppet/lib/puppet/type/file/ctime.rb +20 -0
  1076. data/vendored/puppet/lib/puppet/type/file/data_sync.rb +92 -0
  1077. data/vendored/puppet/lib/puppet/type/file/ensure.rb +192 -0
  1078. data/vendored/puppet/lib/puppet/type/file/group.rb +41 -0
  1079. data/vendored/puppet/lib/puppet/type/file/mode.rb +177 -0
  1080. data/vendored/puppet/lib/puppet/type/file/mtime.rb +18 -0
  1081. data/vendored/puppet/lib/puppet/type/file/owner.rb +44 -0
  1082. data/vendored/puppet/lib/puppet/type/file/selcontext.rb +141 -0
  1083. data/vendored/puppet/lib/puppet/type/file/source.rb +356 -0
  1084. data/vendored/puppet/lib/puppet/type/file/target.rb +87 -0
  1085. data/vendored/puppet/lib/puppet/type/file/type.rb +19 -0
  1086. data/vendored/puppet/lib/puppet/type/filebucket.rb +117 -0
  1087. data/vendored/puppet/lib/puppet/type/group.rb +206 -0
  1088. data/vendored/puppet/lib/puppet/type/host.rb +95 -0
  1089. data/vendored/puppet/lib/puppet/type/interface.rb +121 -0
  1090. data/vendored/puppet/lib/puppet/type/k5login.rb +88 -0
  1091. data/vendored/puppet/lib/puppet/type/macauthorization.rb +167 -0
  1092. data/vendored/puppet/lib/puppet/type/mailalias.rb +46 -0
  1093. data/vendored/puppet/lib/puppet/type/maillist.rb +62 -0
  1094. data/vendored/puppet/lib/puppet/type/mcx.rb +98 -0
  1095. data/vendored/puppet/lib/puppet/type/mount.rb +310 -0
  1096. data/vendored/puppet/lib/puppet/type/nagios_command.rb +3 -0
  1097. data/vendored/puppet/lib/puppet/type/nagios_contact.rb +3 -0
  1098. data/vendored/puppet/lib/puppet/type/nagios_contactgroup.rb +3 -0
  1099. data/vendored/puppet/lib/puppet/type/nagios_host.rb +3 -0
  1100. data/vendored/puppet/lib/puppet/type/nagios_hostdependency.rb +3 -0
  1101. data/vendored/puppet/lib/puppet/type/nagios_hostescalation.rb +3 -0
  1102. data/vendored/puppet/lib/puppet/type/nagios_hostextinfo.rb +3 -0
  1103. data/vendored/puppet/lib/puppet/type/nagios_hostgroup.rb +3 -0
  1104. data/vendored/puppet/lib/puppet/type/nagios_service.rb +3 -0
  1105. data/vendored/puppet/lib/puppet/type/nagios_servicedependency.rb +3 -0
  1106. data/vendored/puppet/lib/puppet/type/nagios_serviceescalation.rb +3 -0
  1107. data/vendored/puppet/lib/puppet/type/nagios_serviceextinfo.rb +3 -0
  1108. data/vendored/puppet/lib/puppet/type/nagios_servicegroup.rb +3 -0
  1109. data/vendored/puppet/lib/puppet/type/nagios_timeperiod.rb +3 -0
  1110. data/vendored/puppet/lib/puppet/type/notify.rb +46 -0
  1111. data/vendored/puppet/lib/puppet/type/package.rb +571 -0
  1112. data/vendored/puppet/lib/puppet/type/resources.rb +180 -0
  1113. data/vendored/puppet/lib/puppet/type/router.rb +17 -0
  1114. data/vendored/puppet/lib/puppet/type/schedule.rb +469 -0
  1115. data/vendored/puppet/lib/puppet/type/scheduled_task.rb +183 -0
  1116. data/vendored/puppet/lib/puppet/type/selboolean.rb +26 -0
  1117. data/vendored/puppet/lib/puppet/type/selmodule.rb +59 -0
  1118. data/vendored/puppet/lib/puppet/type/service.rb +258 -0
  1119. data/vendored/puppet/lib/puppet/type/ssh_authorized_key.rb +143 -0
  1120. data/vendored/puppet/lib/puppet/type/sshkey.rb +83 -0
  1121. data/vendored/puppet/lib/puppet/type/stage.rb +27 -0
  1122. data/vendored/puppet/lib/puppet/type/tidy.rb +336 -0
  1123. data/vendored/puppet/lib/puppet/type/user.rb +770 -0
  1124. data/vendored/puppet/lib/puppet/type/vlan.rb +26 -0
  1125. data/vendored/puppet/lib/puppet/type/whit.rb +34 -0
  1126. data/vendored/puppet/lib/puppet/type/yumrepo.rb +409 -0
  1127. data/vendored/puppet/lib/puppet/type/zfs.rb +150 -0
  1128. data/vendored/puppet/lib/puppet/type/zone.rb +382 -0
  1129. data/vendored/puppet/lib/puppet/type/zpool.rb +91 -0
  1130. data/vendored/puppet/lib/puppet/util.rb +705 -0
  1131. data/vendored/puppet/lib/puppet/util/at_fork.rb +35 -0
  1132. data/vendored/puppet/lib/puppet/util/at_fork/noop.rb +18 -0
  1133. data/vendored/puppet/lib/puppet/util/at_fork/solaris.rb +158 -0
  1134. data/vendored/puppet/lib/puppet/util/autoload.rb +226 -0
  1135. data/vendored/puppet/lib/puppet/util/backups.rb +86 -0
  1136. data/vendored/puppet/lib/puppet/util/character_encoding.rb +98 -0
  1137. data/vendored/puppet/lib/puppet/util/checksums.rb +282 -0
  1138. data/vendored/puppet/lib/puppet/util/classgen.rb +228 -0
  1139. data/vendored/puppet/lib/puppet/util/colors.rb +100 -0
  1140. data/vendored/puppet/lib/puppet/util/command_line.rb +185 -0
  1141. data/vendored/puppet/lib/puppet/util/command_line/puppet_option_parser.rb +87 -0
  1142. data/vendored/puppet/lib/puppet/util/command_line/trollop.rb +824 -0
  1143. data/vendored/puppet/lib/puppet/util/constant_inflector.rb +24 -0
  1144. data/vendored/puppet/lib/puppet/util/diff.rb +79 -0
  1145. data/vendored/puppet/lib/puppet/util/docs.rb +128 -0
  1146. data/vendored/puppet/lib/puppet/util/errors.rb +108 -0
  1147. data/vendored/puppet/lib/puppet/util/execution.rb +412 -0
  1148. data/vendored/puppet/lib/puppet/util/execution_stub.rb +26 -0
  1149. data/vendored/puppet/lib/puppet/util/feature.rb +95 -0
  1150. data/vendored/puppet/lib/puppet/util/file_watcher.rb +28 -0
  1151. data/vendored/puppet/lib/puppet/util/fileparsing.rb +377 -0
  1152. data/vendored/puppet/lib/puppet/util/filetype.rb +309 -0
  1153. data/vendored/puppet/lib/puppet/util/http_proxy.rb +197 -0
  1154. data/vendored/puppet/lib/puppet/util/inifile.rb +341 -0
  1155. data/vendored/puppet/lib/puppet/util/instance_loader.rb +81 -0
  1156. data/vendored/puppet/lib/puppet/util/json_lockfile.rb +44 -0
  1157. data/vendored/puppet/lib/puppet/util/ldap.rb +2 -0
  1158. data/vendored/puppet/lib/puppet/util/ldap/connection.rb +71 -0
  1159. data/vendored/puppet/lib/puppet/util/ldap/generator.rb +42 -0
  1160. data/vendored/puppet/lib/puppet/util/ldap/manager.rb +278 -0
  1161. data/vendored/puppet/lib/puppet/util/libuser.conf +15 -0
  1162. data/vendored/puppet/lib/puppet/util/libuser.rb +12 -0
  1163. data/vendored/puppet/lib/puppet/util/limits.rb +12 -0
  1164. data/vendored/puppet/lib/puppet/util/lockfile.rb +66 -0
  1165. data/vendored/puppet/lib/puppet/util/log.rb +423 -0
  1166. data/vendored/puppet/lib/puppet/util/log/destination.rb +49 -0
  1167. data/vendored/puppet/lib/puppet/util/log/destinations.rb +249 -0
  1168. data/vendored/puppet/lib/puppet/util/logging.rb +318 -0
  1169. data/vendored/puppet/lib/puppet/util/metaid.rb +21 -0
  1170. data/vendored/puppet/lib/puppet/util/methodhelper.rb +32 -0
  1171. data/vendored/puppet/lib/puppet/util/metric.rb +64 -0
  1172. data/vendored/puppet/lib/puppet/util/monkey_patches.rb +108 -0
  1173. data/vendored/puppet/lib/puppet/util/multi_match.rb +51 -0
  1174. data/vendored/puppet/lib/puppet/util/nagios_maker.rb +85 -0
  1175. data/vendored/puppet/lib/puppet/util/network_device.rb +17 -0
  1176. data/vendored/puppet/lib/puppet/util/network_device/base.rb +23 -0
  1177. data/vendored/puppet/lib/puppet/util/network_device/cisco.rb +4 -0
  1178. data/vendored/puppet/lib/puppet/util/network_device/cisco/device.rb +285 -0
  1179. data/vendored/puppet/lib/puppet/util/network_device/cisco/facts.rb +72 -0
  1180. data/vendored/puppet/lib/puppet/util/network_device/cisco/interface.rb +94 -0
  1181. data/vendored/puppet/lib/puppet/util/network_device/config.rb +98 -0
  1182. data/vendored/puppet/lib/puppet/util/network_device/ipcalc.rb +68 -0
  1183. data/vendored/puppet/lib/puppet/util/network_device/transport.rb +5 -0
  1184. data/vendored/puppet/lib/puppet/util/network_device/transport/base.rb +26 -0
  1185. data/vendored/puppet/lib/puppet/util/network_device/transport/ssh.rb +126 -0
  1186. data/vendored/puppet/lib/puppet/util/network_device/transport/telnet.rb +47 -0
  1187. data/vendored/puppet/lib/puppet/util/package.rb +31 -0
  1188. data/vendored/puppet/lib/puppet/util/pidlock.rb +62 -0
  1189. data/vendored/puppet/lib/puppet/util/platform.rb +22 -0
  1190. data/vendored/puppet/lib/puppet/util/plist.rb +153 -0
  1191. data/vendored/puppet/lib/puppet/util/posix.rb +137 -0
  1192. data/vendored/puppet/lib/puppet/util/profiler.rb +53 -0
  1193. data/vendored/puppet/lib/puppet/util/profiler/aggregate.rb +85 -0
  1194. data/vendored/puppet/lib/puppet/util/profiler/around_profiler.rb +67 -0
  1195. data/vendored/puppet/lib/puppet/util/profiler/logging.rb +48 -0
  1196. data/vendored/puppet/lib/puppet/util/profiler/object_counts.rb +17 -0
  1197. data/vendored/puppet/lib/puppet/util/profiler/wall_clock.rb +35 -0
  1198. data/vendored/puppet/lib/puppet/util/provider_features.rb +184 -0
  1199. data/vendored/puppet/lib/puppet/util/psych_support.rb +30 -0
  1200. data/vendored/puppet/lib/puppet/util/rdoc.rb +60 -0
  1201. data/vendored/puppet/lib/puppet/util/rdoc/code_objects.rb +294 -0
  1202. data/vendored/puppet/lib/puppet/util/rdoc/generators/puppet_generator.rb +910 -0
  1203. data/vendored/puppet/lib/puppet/util/rdoc/generators/template/puppet/puppet.rb +1085 -0
  1204. data/vendored/puppet/lib/puppet/util/rdoc/parser.rb +12 -0
  1205. data/vendored/puppet/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +259 -0
  1206. data/vendored/puppet/lib/puppet/util/rdoc/parser/puppet_parser_rdoc2.rb +14 -0
  1207. data/vendored/puppet/lib/puppet/util/reference.rb +126 -0
  1208. data/vendored/puppet/lib/puppet/util/resource_template.rb +61 -0
  1209. data/vendored/puppet/lib/puppet/util/retry_action.rb +46 -0
  1210. data/vendored/puppet/lib/puppet/util/rubygems.rb +75 -0
  1211. data/vendored/puppet/lib/puppet/util/run_mode.rb +110 -0
  1212. data/vendored/puppet/lib/puppet/util/selinux.rb +264 -0
  1213. data/vendored/puppet/lib/puppet/util/skip_tags.rb +9 -0
  1214. data/vendored/puppet/lib/puppet/util/splayer.rb +18 -0
  1215. data/vendored/puppet/lib/puppet/util/ssl.rb +53 -0
  1216. data/vendored/puppet/lib/puppet/util/storage.rb +89 -0
  1217. data/vendored/puppet/lib/puppet/util/suidmanager.rb +165 -0
  1218. data/vendored/puppet/lib/puppet/util/symbolic_file_mode.rb +144 -0
  1219. data/vendored/puppet/lib/puppet/util/tag_set.rb +27 -0
  1220. data/vendored/puppet/lib/puppet/util/tagging.rb +118 -0
  1221. data/vendored/puppet/lib/puppet/util/terminal.rb +16 -0
  1222. data/vendored/puppet/lib/puppet/util/user_attr.rb +21 -0
  1223. data/vendored/puppet/lib/puppet/util/warnings.rb +33 -0
  1224. data/vendored/puppet/lib/puppet/util/watched_file.rb +37 -0
  1225. data/vendored/puppet/lib/puppet/util/watcher.rb +17 -0
  1226. data/vendored/puppet/lib/puppet/util/watcher/change_watcher.rb +33 -0
  1227. data/vendored/puppet/lib/puppet/util/watcher/periodic_watcher.rb +37 -0
  1228. data/vendored/puppet/lib/puppet/util/watcher/timer.rb +19 -0
  1229. data/vendored/puppet/lib/puppet/util/windows.rb +35 -0
  1230. data/vendored/puppet/lib/puppet/util/windows/access_control_entry.rb +84 -0
  1231. data/vendored/puppet/lib/puppet/util/windows/access_control_list.rb +113 -0
  1232. data/vendored/puppet/lib/puppet/util/windows/adsi.rb +548 -0
  1233. data/vendored/puppet/lib/puppet/util/windows/api_types.rb +282 -0
  1234. data/vendored/puppet/lib/puppet/util/windows/com.rb +224 -0
  1235. data/vendored/puppet/lib/puppet/util/windows/error.rb +83 -0
  1236. data/vendored/puppet/lib/puppet/util/windows/eventlog.rb +192 -0
  1237. data/vendored/puppet/lib/puppet/util/windows/file.rb +488 -0
  1238. data/vendored/puppet/lib/puppet/util/windows/principal.rb +191 -0
  1239. data/vendored/puppet/lib/puppet/util/windows/process.rb +497 -0
  1240. data/vendored/puppet/lib/puppet/util/windows/registry.rb +374 -0
  1241. data/vendored/puppet/lib/puppet/util/windows/root_certs.rb +108 -0
  1242. data/vendored/puppet/lib/puppet/util/windows/security.rb +857 -0
  1243. data/vendored/puppet/lib/puppet/util/windows/security_descriptor.rb +62 -0
  1244. data/vendored/puppet/lib/puppet/util/windows/sid.rb +231 -0
  1245. data/vendored/puppet/lib/puppet/util/windows/string.rb +16 -0
  1246. data/vendored/puppet/lib/puppet/util/windows/taskscheduler.rb +1276 -0
  1247. data/vendored/puppet/lib/puppet/util/windows/user.rb +309 -0
  1248. data/vendored/puppet/lib/puppet/util/yaml.rb +36 -0
  1249. data/vendored/puppet/lib/puppet/vendor.rb +57 -0
  1250. data/vendored/puppet/lib/puppet/vendor/deep_merge/CHANGELOG +45 -0
  1251. data/vendored/puppet/lib/puppet/vendor/deep_merge/Gemfile +3 -0
  1252. data/vendored/puppet/lib/puppet/vendor/deep_merge/LICENSE +21 -0
  1253. data/vendored/puppet/lib/puppet/vendor/deep_merge/PUPPET_README.md +6 -0
  1254. data/vendored/puppet/lib/puppet/vendor/deep_merge/README.md +113 -0
  1255. data/vendored/puppet/lib/puppet/vendor/deep_merge/Rakefile +19 -0
  1256. data/vendored/puppet/lib/puppet/vendor/deep_merge/deep_merge.gemspec +35 -0
  1257. data/vendored/puppet/lib/puppet/vendor/deep_merge/lib/deep_merge.rb +2 -0
  1258. data/vendored/puppet/lib/puppet/vendor/deep_merge/lib/deep_merge/core.rb +210 -0
  1259. data/vendored/puppet/lib/puppet/vendor/deep_merge/lib/deep_merge/deep_merge_hash.rb +28 -0
  1260. data/vendored/puppet/lib/puppet/vendor/deep_merge/lib/deep_merge/rails_compat.rb +27 -0
  1261. data/vendored/puppet/lib/puppet/vendor/deep_merge/test/test_deep_merge.rb +608 -0
  1262. data/vendored/puppet/lib/puppet/vendor/load_deep_merge.rb +1 -0
  1263. data/vendored/puppet/lib/puppet/vendor/load_pathspec.rb +1 -0
  1264. data/vendored/puppet/lib/puppet/vendor/load_semantic.rb +1 -0
  1265. data/vendored/puppet/lib/puppet/vendor/load_semantic_puppet.rb +1 -0
  1266. data/vendored/puppet/lib/puppet/vendor/pathspec/CHANGELOG.md +2 -0
  1267. data/vendored/puppet/lib/puppet/vendor/pathspec/LICENSE +201 -0
  1268. data/vendored/puppet/lib/puppet/vendor/pathspec/PUPPET_README.md +6 -0
  1269. data/vendored/puppet/lib/puppet/vendor/pathspec/README.md +53 -0
  1270. data/vendored/puppet/lib/puppet/vendor/pathspec/lib/pathspec.rb +122 -0
  1271. data/vendored/puppet/lib/puppet/vendor/pathspec/lib/pathspec/gitignorespec.rb +275 -0
  1272. data/vendored/puppet/lib/puppet/vendor/pathspec/lib/pathspec/regexspec.rb +17 -0
  1273. data/vendored/puppet/lib/puppet/vendor/pathspec/lib/pathspec/spec.rb +14 -0
  1274. data/vendored/puppet/lib/puppet/vendor/require_vendored.rb +6 -0
  1275. data/vendored/puppet/lib/puppet/vendor/semantic/lib/semantic.rb +5 -0
  1276. data/vendored/puppet/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet.rb +7 -0
  1277. data/vendored/puppet/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/dependency.rb +181 -0
  1278. data/vendored/puppet/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/dependency/graph.rb +60 -0
  1279. data/vendored/puppet/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/dependency/graph_node.rb +117 -0
  1280. data/vendored/puppet/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/dependency/module_release.rb +58 -0
  1281. data/vendored/puppet/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/dependency/source.rb +25 -0
  1282. data/vendored/puppet/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/dependency/unsatisfiable_graph.rb +31 -0
  1283. data/vendored/puppet/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/gem_version.rb +3 -0
  1284. data/vendored/puppet/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/version.rb +203 -0
  1285. data/vendored/puppet/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/version_range.rb +758 -0
  1286. data/vendored/puppet/lib/puppet/vendor/semantic_puppet/locales/config.yaml +21 -0
  1287. data/vendored/puppet/lib/puppet/version.rb +93 -0
  1288. data/vendored/puppet/lib/puppet_pal.rb +290 -0
  1289. data/vendored/puppet/lib/puppet_x.rb +14 -0
  1290. data/vendored/require_vendored.rb +11 -0
  1291. metadata +1501 -9
@@ -0,0 +1,62 @@
1
+ # Windows Security Descriptor
2
+ #
3
+ # Represents a security descriptor that can be applied to any Windows securable
4
+ # object, e.g. file, registry key, service, etc. It consists of an owner, group,
5
+ # flags, DACL, and SACL. The SACL is not currently supported, though it has the
6
+ # same layout as a DACL.
7
+ #
8
+ # @see https://msdn.microsoft.com/en-us/library/windows/desktop/aa379563(v=vs.85).aspx
9
+ # @api private
10
+ class Puppet::Util::Windows::SecurityDescriptor
11
+ require 'puppet/util/windows/security'
12
+ include Puppet::Util::Windows::SID
13
+
14
+ attr_reader :owner, :group, :dacl
15
+ attr_accessor :protect
16
+
17
+ # Construct a security descriptor
18
+ #
19
+ # @param owner [String] The SID of the owner, e.g. 'S-1-5-18'
20
+ # @param group [String] The SID of the group
21
+ # @param dacl [AccessControlList] The ACL specifying the rights granted to
22
+ # each user for accessing the object that the security descriptor refers to.
23
+ # @param protect [Boolean] If true, then inheritable access control
24
+ # entries will be blocked, and not applied to the object.
25
+ def initialize(owner, group, dacl, protect = false)
26
+ @owner = owner
27
+ @group = group
28
+ @dacl = dacl
29
+ @protect = protect
30
+ end
31
+
32
+ # Set the owner. Non-inherited access control entries assigned to the
33
+ # current owner will be assigned to the new owner.
34
+ #
35
+ # @param new_owner [String] The SID of the new owner, e.g. 'S-1-5-18'
36
+ def owner=(new_owner)
37
+ if @owner != new_owner
38
+ @dacl.reassign!(@owner, new_owner)
39
+ @owner = new_owner
40
+ end
41
+ end
42
+
43
+ # Set the group. Non-inherited access control entries assigned to the
44
+ # current group will be assigned to the new group.
45
+ #
46
+ # @param new_group [String] The SID of the new group, e.g. 'S-1-0-0'
47
+ def group=(new_group)
48
+ if @group != new_group
49
+ @dacl.reassign!(@group, new_group)
50
+ @group = new_group
51
+ end
52
+ end
53
+
54
+ def inspect
55
+ str = sid_to_name(owner)
56
+ str << "\n"
57
+ str << sid_to_name(group)
58
+ str << "\n"
59
+ str << @dacl.inspect
60
+ str
61
+ end
62
+ end
@@ -0,0 +1,231 @@
1
+ require 'puppet/util/windows'
2
+
3
+ module Puppet::Util::Windows
4
+ module SID
5
+ require 'ffi'
6
+ extend FFI::Library
7
+
8
+ # missing from Windows::Error
9
+ ERROR_NONE_MAPPED = 1332
10
+ ERROR_INVALID_SID_STRUCTURE = 1337
11
+
12
+ # Well Known SIDs
13
+ Null = 'S-1-0'
14
+ Nobody = 'S-1-0-0'
15
+ World = 'S-1-1'
16
+ Everyone = 'S-1-1-0'
17
+ Local = 'S-1-2'
18
+ Creator = 'S-1-3'
19
+ CreatorOwner = 'S-1-3-0'
20
+ CreatorGroup = 'S-1-3-1'
21
+ CreatorOwnerServer = 'S-1-3-2'
22
+ CreatorGroupServer = 'S-1-3-3'
23
+ NonUnique = 'S-1-4'
24
+ Nt = 'S-1-5'
25
+ Dialup = 'S-1-5-1'
26
+ Network = 'S-1-5-2'
27
+ Batch = 'S-1-5-3'
28
+ Interactive = 'S-1-5-4'
29
+ Service = 'S-1-5-6'
30
+ Anonymous = 'S-1-5-7'
31
+ Proxy = 'S-1-5-8'
32
+ EnterpriseDomainControllers = 'S-1-5-9'
33
+ PrincipalSelf = 'S-1-5-10'
34
+ AuthenticatedUsers = 'S-1-5-11'
35
+ RestrictedCode = 'S-1-5-12'
36
+ TerminalServerUsers = 'S-1-5-13'
37
+ LocalSystem = 'S-1-5-18'
38
+ NtLocal = 'S-1-5-19'
39
+ NtNetwork = 'S-1-5-20'
40
+ BuiltinAdministrators = 'S-1-5-32-544'
41
+ BuiltinUsers = 'S-1-5-32-545'
42
+ Guests = 'S-1-5-32-546'
43
+ PowerUsers = 'S-1-5-32-547'
44
+ AccountOperators = 'S-1-5-32-548'
45
+ ServerOperators = 'S-1-5-32-549'
46
+ PrintOperators = 'S-1-5-32-550'
47
+ BackupOperators = 'S-1-5-32-551'
48
+ Replicators = 'S-1-5-32-552'
49
+
50
+ # Convert an account name, e.g. 'Administrators' into a SID string,
51
+ # e.g. 'S-1-5-32-544'. The name can be specified as 'Administrators',
52
+ # 'BUILTIN\Administrators', or 'S-1-5-32-544', and will return the
53
+ # SID. Returns nil if the account doesn't exist.
54
+ def name_to_sid(name)
55
+ sid = name_to_sid_object(name)
56
+
57
+ sid ? sid.sid : nil
58
+ end
59
+ module_function :name_to_sid
60
+
61
+ # Convert an account name, e.g. 'Administrators' into a SID object,
62
+ # e.g. 'S-1-5-32-544'. The name can be specified as 'Administrators',
63
+ # 'BUILTIN\Administrators', or 'S-1-5-32-544', and will return the
64
+ # SID object. Returns nil if the account doesn't exist.
65
+ # This method returns a SID::Principal with the account, domain, SID, etc
66
+ def name_to_sid_object(name)
67
+ # Apparently, we accept a symbol..
68
+ name = name.to_s.strip if name
69
+
70
+ # if name is a SID string, convert it to raw bytes for use with lookup_account_sid
71
+ raw_sid_bytes = nil
72
+ begin
73
+ string_to_sid_ptr(name) do |sid_ptr|
74
+ valid = ! sid_ptr.nil? && ! sid_ptr.null?
75
+ raw_sid_bytes = sid_ptr.read_array_of_uchar(get_length_sid(sid_ptr))
76
+ end
77
+ rescue
78
+ end
79
+
80
+ raw_sid_bytes ? Principal.lookup_account_sid(raw_sid_bytes) : Principal.lookup_account_name(name)
81
+ rescue
82
+ nil
83
+ end
84
+ module_function :name_to_sid_object
85
+
86
+ # Converts an octet string array of bytes to a SID object,
87
+ # e.g. [1, 1, 0, 0, 0, 0, 0, 5, 18, 0, 0, 0] is the representation for
88
+ # S-1-5-18, the local 'SYSTEM' account.
89
+ # Raises an Error for nil or non-array input.
90
+ # This method returns a SID::Principal with the account, domain, SID, etc
91
+ def octet_string_to_sid_object(bytes)
92
+ if !bytes || !bytes.respond_to?('pack') || bytes.empty?
93
+ raise Puppet::Util::Windows::Error.new(_("Octet string must be an array of bytes"))
94
+ end
95
+
96
+ Principal.lookup_account_sid(bytes)
97
+ end
98
+ module_function :octet_string_to_sid_object
99
+
100
+ # Convert a SID string, e.g. "S-1-5-32-544" to a name,
101
+ # e.g. 'BUILTIN\Administrators'. Returns nil if an account
102
+ # for that SID does not exist.
103
+ def sid_to_name(value)
104
+
105
+ sid_bytes = []
106
+ begin
107
+ string_to_sid_ptr(value) do |ptr|
108
+ valid = ! ptr.nil? && ! ptr.null?
109
+ sid_bytes = ptr.read_array_of_uchar(get_length_sid(ptr))
110
+ end
111
+ rescue Puppet::Util::Windows::Error => e
112
+ raise if e.code != ERROR_INVALID_SID_STRUCTURE
113
+ end
114
+
115
+ Principal.lookup_account_sid(sid_bytes).domain_account
116
+ rescue
117
+ nil
118
+ end
119
+ module_function :sid_to_name
120
+
121
+ # https://stackoverflow.com/a/1792930 - 68 bytes, 184 characters in a string
122
+ MAXIMUM_SID_STRING_LENGTH = 184
123
+
124
+ # Convert a SID pointer to a SID string, e.g. "S-1-5-32-544".
125
+ def sid_ptr_to_string(psid)
126
+ if ! psid.kind_of?(FFI::Pointer) || IsValidSid(psid) == FFI::WIN32_FALSE
127
+ raise Puppet::Util::Windows::Error.new(_("Invalid SID"))
128
+ end
129
+
130
+ sid_string = nil
131
+ FFI::MemoryPointer.new(:pointer, 1) do |buffer_ptr|
132
+ if ConvertSidToStringSidW(psid, buffer_ptr) == FFI::WIN32_FALSE
133
+ raise Puppet::Util::Windows::Error.new(_("Failed to convert binary SID"))
134
+ end
135
+
136
+ buffer_ptr.read_win32_local_pointer do |wide_string_ptr|
137
+ if wide_string_ptr.null?
138
+ raise Puppet::Error.new(_("ConvertSidToStringSidW failed to allocate buffer for sid"))
139
+ end
140
+
141
+ sid_string = wide_string_ptr.read_arbitrary_wide_string_up_to(MAXIMUM_SID_STRING_LENGTH)
142
+ end
143
+ end
144
+
145
+ sid_string
146
+ end
147
+ module_function :sid_ptr_to_string
148
+
149
+ # Convert a SID string, e.g. "S-1-5-32-544" to a pointer (containing the
150
+ # address of the binary SID structure). The returned value can be used in
151
+ # Win32 APIs that expect a PSID, e.g. IsValidSid. The account for this
152
+ # SID may or may not exist.
153
+ def string_to_sid_ptr(string_sid, &block)
154
+ FFI::MemoryPointer.from_string_to_wide_string(string_sid) do |lpcwstr|
155
+ FFI::MemoryPointer.new(:pointer, 1) do |sid_ptr_ptr|
156
+
157
+ if ConvertStringSidToSidW(lpcwstr, sid_ptr_ptr) == FFI::WIN32_FALSE
158
+ raise Puppet::Util::Windows::Error.new(_("Failed to convert string SID: %{string_sid}") % { string_sid: string_sid })
159
+ end
160
+
161
+ sid_ptr_ptr.read_win32_local_pointer do |sid_ptr|
162
+ yield sid_ptr
163
+ end
164
+ end
165
+ end
166
+
167
+ # yielded sid_ptr has already had LocalFree called, nothing to return
168
+ nil
169
+ end
170
+ module_function :string_to_sid_ptr
171
+
172
+ # Return true if the string is a valid SID, e.g. "S-1-5-32-544", false otherwise.
173
+ def valid_sid?(string_sid)
174
+ valid = false
175
+
176
+ begin
177
+ string_to_sid_ptr(string_sid) { |ptr| valid = ! ptr.nil? && ! ptr.null? }
178
+ rescue Puppet::Util::Windows::Error => e
179
+ raise if e.code != ERROR_INVALID_SID_STRUCTURE
180
+ end
181
+
182
+ valid
183
+ end
184
+ module_function :valid_sid?
185
+
186
+ def get_length_sid(sid_ptr)
187
+ # MSDN states IsValidSid should be called on pointer first
188
+ if ! sid_ptr.kind_of?(FFI::Pointer) || IsValidSid(sid_ptr) == FFI::WIN32_FALSE
189
+ raise Puppet::Util::Windows::Error.new(_("Invalid SID"))
190
+ end
191
+
192
+ GetLengthSid(sid_ptr)
193
+ end
194
+ module_function :get_length_sid
195
+
196
+ ffi_convention :stdcall
197
+
198
+ # https://msdn.microsoft.com/en-us/library/windows/desktop/aa379151(v=vs.85).aspx
199
+ # BOOL WINAPI IsValidSid(
200
+ # _In_ PSID pSid
201
+ # );
202
+ ffi_lib :advapi32
203
+ attach_function_private :IsValidSid,
204
+ [:pointer], :win32_bool
205
+
206
+ # https://msdn.microsoft.com/en-us/library/windows/desktop/aa376399(v=vs.85).aspx
207
+ # BOOL ConvertSidToStringSid(
208
+ # _In_ PSID Sid,
209
+ # _Out_ LPTSTR *StringSid
210
+ # );
211
+ ffi_lib :advapi32
212
+ attach_function_private :ConvertSidToStringSidW,
213
+ [:pointer, :pointer], :win32_bool
214
+
215
+ # https://msdn.microsoft.com/en-us/library/windows/desktop/aa376402(v=vs.85).aspx
216
+ # BOOL WINAPI ConvertStringSidToSid(
217
+ # _In_ LPCTSTR StringSid,
218
+ # _Out_ PSID *Sid
219
+ # );
220
+ ffi_lib :advapi32
221
+ attach_function_private :ConvertStringSidToSidW,
222
+ [:lpcwstr, :pointer], :win32_bool
223
+
224
+ # https://msdn.microsoft.com/en-us/library/windows/desktop/aa446642(v=vs.85).aspx
225
+ # DWORD WINAPI GetLengthSid(
226
+ # _In_ PSID pSid
227
+ # );
228
+ ffi_lib :advapi32
229
+ attach_function_private :GetLengthSid, [:pointer], :dword
230
+ end
231
+ end
@@ -0,0 +1,16 @@
1
+ require 'puppet/util/windows'
2
+
3
+ module Puppet::Util::Windows::String
4
+ def wide_string(str)
5
+ # if given a nil string, assume caller wants to pass a nil pointer to win32
6
+ return nil if str.nil?
7
+ # ruby (< 2.1) does not respect multibyte terminators, so it is possible
8
+ # for a string to contain a single trailing null byte, followed by garbage
9
+ # causing buffer overruns.
10
+ #
11
+ # See http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?revision=41920&view=revision
12
+ newstr = str + "\0".encode(str.encoding)
13
+ newstr.encode!('UTF-16LE')
14
+ end
15
+ module_function :wide_string
16
+ end
@@ -0,0 +1,1276 @@
1
+ require 'puppet/util/windows'
2
+
3
+ # The Win32 module serves as a namespace only
4
+ module Win32
5
+ # The TaskScheduler class encapsulates taskscheduler settings and behavior
6
+ class TaskScheduler
7
+ include Puppet::Util::Windows::String
8
+
9
+ require 'ffi'
10
+ extend FFI::Library
11
+
12
+ # The error class raised if any task scheduler specific calls fail.
13
+ class Error < Puppet::Util::Windows::Error; end
14
+
15
+ private
16
+
17
+ class << self
18
+ attr_accessor :com_initialized
19
+ end
20
+
21
+ # :stopdoc:
22
+ TASK_TIME_TRIGGER_ONCE = :TASK_TIME_TRIGGER_ONCE
23
+ TASK_TIME_TRIGGER_DAILY = :TASK_TIME_TRIGGER_DAILY
24
+ TASK_TIME_TRIGGER_WEEKLY = :TASK_TIME_TRIGGER_WEEKLY
25
+ TASK_TIME_TRIGGER_MONTHLYDATE = :TASK_TIME_TRIGGER_MONTHLYDATE
26
+ TASK_TIME_TRIGGER_MONTHLYDOW = :TASK_TIME_TRIGGER_MONTHLYDOW
27
+ TASK_EVENT_TRIGGER_ON_IDLE = :TASK_EVENT_TRIGGER_ON_IDLE
28
+ TASK_EVENT_TRIGGER_AT_SYSTEMSTART = :TASK_EVENT_TRIGGER_AT_SYSTEMSTART
29
+ TASK_EVENT_TRIGGER_AT_LOGON = :TASK_EVENT_TRIGGER_AT_LOGON
30
+
31
+ TASK_SUNDAY = 0x1
32
+ TASK_MONDAY = 0x2
33
+ TASK_TUESDAY = 0x4
34
+ TASK_WEDNESDAY = 0x8
35
+ TASK_THURSDAY = 0x10
36
+ TASK_FRIDAY = 0x20
37
+ TASK_SATURDAY = 0x40
38
+ TASK_FIRST_WEEK = 1
39
+ TASK_SECOND_WEEK = 2
40
+ TASK_THIRD_WEEK = 3
41
+ TASK_FOURTH_WEEK = 4
42
+ TASK_LAST_WEEK = 5
43
+ TASK_JANUARY = 0x1
44
+ TASK_FEBRUARY = 0x2
45
+ TASK_MARCH = 0x4
46
+ TASK_APRIL = 0x8
47
+ TASK_MAY = 0x10
48
+ TASK_JUNE = 0x20
49
+ TASK_JULY = 0x40
50
+ TASK_AUGUST = 0x80
51
+ TASK_SEPTEMBER = 0x100
52
+ TASK_OCTOBER = 0x200
53
+ TASK_NOVEMBER = 0x400
54
+ TASK_DECEMBER = 0x800
55
+
56
+ TASK_FLAG_INTERACTIVE = 0x1
57
+ TASK_FLAG_DELETE_WHEN_DONE = 0x2
58
+ TASK_FLAG_DISABLED = 0x4
59
+ TASK_FLAG_START_ONLY_IF_IDLE = 0x10
60
+ TASK_FLAG_KILL_ON_IDLE_END = 0x20
61
+ TASK_FLAG_DONT_START_IF_ON_BATTERIES = 0x40
62
+ TASK_FLAG_KILL_IF_GOING_ON_BATTERIES = 0x80
63
+ TASK_FLAG_RUN_ONLY_IF_DOCKED = 0x100
64
+ TASK_FLAG_HIDDEN = 0x200
65
+ TASK_FLAG_RUN_IF_CONNECTED_TO_INTERNET = 0x400
66
+ TASK_FLAG_RESTART_ON_IDLE_RESUME = 0x800
67
+ TASK_FLAG_SYSTEM_REQUIRED = 0x1000
68
+ TASK_FLAG_RUN_ONLY_IF_LOGGED_ON = 0x2000
69
+ TASK_TRIGGER_FLAG_HAS_END_DATE = 0x1
70
+ TASK_TRIGGER_FLAG_KILL_AT_DURATION_END = 0x2
71
+ TASK_TRIGGER_FLAG_DISABLED = 0x4
72
+
73
+ TASK_MAX_RUN_TIMES = 1440
74
+ TASKS_TO_RETRIEVE = 5
75
+
76
+ # COM
77
+
78
+ CLSID_CTask = FFI::WIN32::GUID['148BD520-A2AB-11CE-B11F-00AA00530503']
79
+ IID_ITask = FFI::WIN32::GUID['148BD524-A2AB-11CE-B11F-00AA00530503']
80
+ IID_IPersistFile = FFI::WIN32::GUID['0000010b-0000-0000-C000-000000000046']
81
+
82
+ SCHED_S_TASK_READY = 0x00041300
83
+ SCHED_S_TASK_RUNNING = 0x00041301
84
+ SCHED_S_TASK_HAS_NOT_RUN = 0x00041303
85
+ SCHED_S_TASK_NOT_SCHEDULED = 0x00041305
86
+ # HRESULT error codes
87
+ # https://blogs.msdn.com/b/eldar/archive/2007/04/03/a-lot-of-hresult-codes.aspx
88
+ # in Ruby, an 0x8XXXXXXX style HRESULT can be resolved to 2s complement
89
+ # by using "0x8XXXXXXX".to_i(16) - - 0x100000000
90
+ SCHED_E_ACCOUNT_INFORMATION_NOT_SET = -2147216625 # 0x8004130F
91
+ SCHED_E_NO_SECURITY_SERVICES = -2147216622 # 0x80041312
92
+ # No mapping between account names and security IDs was done.
93
+ ERROR_NONE_MAPPED = -2147023564 # 0x80070534 WIN32 Error CODE 1332 (0x534)
94
+
95
+ public
96
+
97
+ # :startdoc:
98
+
99
+ # Shorthand constants
100
+ IDLE = Puppet::Util::Windows::Process::IDLE_PRIORITY_CLASS
101
+ NORMAL = Puppet::Util::Windows::Process::NORMAL_PRIORITY_CLASS
102
+ HIGH = Puppet::Util::Windows::Process::HIGH_PRIORITY_CLASS
103
+ REALTIME = Puppet::Util::Windows::Process::REALTIME_PRIORITY_CLASS
104
+ BELOW_NORMAL = Puppet::Util::Windows::Process::BELOW_NORMAL_PRIORITY_CLASS
105
+ ABOVE_NORMAL = Puppet::Util::Windows::Process::ABOVE_NORMAL_PRIORITY_CLASS
106
+
107
+ ONCE = TASK_TIME_TRIGGER_ONCE
108
+ DAILY = TASK_TIME_TRIGGER_DAILY
109
+ WEEKLY = TASK_TIME_TRIGGER_WEEKLY
110
+ MONTHLYDATE = TASK_TIME_TRIGGER_MONTHLYDATE
111
+ MONTHLYDOW = TASK_TIME_TRIGGER_MONTHLYDOW
112
+
113
+ ON_IDLE = TASK_EVENT_TRIGGER_ON_IDLE
114
+ AT_SYSTEMSTART = TASK_EVENT_TRIGGER_AT_SYSTEMSTART
115
+ AT_LOGON = TASK_EVENT_TRIGGER_AT_LOGON
116
+ FIRST_WEEK = TASK_FIRST_WEEK
117
+ SECOND_WEEK = TASK_SECOND_WEEK
118
+ THIRD_WEEK = TASK_THIRD_WEEK
119
+ FOURTH_WEEK = TASK_FOURTH_WEEK
120
+ LAST_WEEK = TASK_LAST_WEEK
121
+ SUNDAY = TASK_SUNDAY
122
+ MONDAY = TASK_MONDAY
123
+ TUESDAY = TASK_TUESDAY
124
+ WEDNESDAY = TASK_WEDNESDAY
125
+ THURSDAY = TASK_THURSDAY
126
+ FRIDAY = TASK_FRIDAY
127
+ SATURDAY = TASK_SATURDAY
128
+ JANUARY = TASK_JANUARY
129
+ FEBRUARY = TASK_FEBRUARY
130
+ MARCH = TASK_MARCH
131
+ APRIL = TASK_APRIL
132
+ MAY = TASK_MAY
133
+ JUNE = TASK_JUNE
134
+ JULY = TASK_JULY
135
+ AUGUST = TASK_AUGUST
136
+ SEPTEMBER = TASK_SEPTEMBER
137
+ OCTOBER = TASK_OCTOBER
138
+ NOVEMBER = TASK_NOVEMBER
139
+ DECEMBER = TASK_DECEMBER
140
+
141
+ INTERACTIVE = TASK_FLAG_INTERACTIVE
142
+ DELETE_WHEN_DONE = TASK_FLAG_DELETE_WHEN_DONE
143
+ DISABLED = TASK_FLAG_DISABLED
144
+ START_ONLY_IF_IDLE = TASK_FLAG_START_ONLY_IF_IDLE
145
+ KILL_ON_IDLE_END = TASK_FLAG_KILL_ON_IDLE_END
146
+ DONT_START_IF_ON_BATTERIES = TASK_FLAG_DONT_START_IF_ON_BATTERIES
147
+ KILL_IF_GOING_ON_BATTERIES = TASK_FLAG_KILL_IF_GOING_ON_BATTERIES
148
+ RUN_ONLY_IF_DOCKED = TASK_FLAG_RUN_ONLY_IF_DOCKED
149
+ HIDDEN = TASK_FLAG_HIDDEN
150
+ RUN_IF_CONNECTED_TO_INTERNET = TASK_FLAG_RUN_IF_CONNECTED_TO_INTERNET
151
+ RESTART_ON_IDLE_RESUME = TASK_FLAG_RESTART_ON_IDLE_RESUME
152
+ SYSTEM_REQUIRED = TASK_FLAG_SYSTEM_REQUIRED
153
+ RUN_ONLY_IF_LOGGED_ON = TASK_FLAG_RUN_ONLY_IF_LOGGED_ON
154
+
155
+ FLAG_HAS_END_DATE = TASK_TRIGGER_FLAG_HAS_END_DATE
156
+ FLAG_KILL_AT_DURATION_END = TASK_TRIGGER_FLAG_KILL_AT_DURATION_END
157
+ FLAG_DISABLED = TASK_TRIGGER_FLAG_DISABLED
158
+
159
+ MAX_RUN_TIMES = TASK_MAX_RUN_TIMES
160
+
161
+ # unfortunately MSTask.h does not specify the limits for any settings
162
+ # so these were determined with some experimentation
163
+ # if values too large are written, its suspected there may be internal
164
+ # limits may be exceeded, corrupting the job
165
+ # used for max application name and path values
166
+ MAX_PATH = 260
167
+ # UNLEN from lmcons.h is 256
168
+ # https://technet.microsoft.com/it-it/library/bb726984(en-us).aspx specifies 104
169
+ MAX_ACCOUNT_LENGTH = 256
170
+ # command line max length is limited to 8191, choose something high but still enough that we don't blow out CLI
171
+ MAX_PARAMETERS_LENGTH = 4096
172
+ # in testing, this value could be set to a length of 99999, but saving / loading the task failed
173
+ MAX_COMMENT_LENGTH = 8192
174
+
175
+ # Returns a new TaskScheduler object. If a work_item (and possibly the
176
+ # the trigger) are passed as arguments then a new work item is created and
177
+ # associated with that trigger, although you can still activate other tasks
178
+ # with the same handle.
179
+ #
180
+ # This is really just a bit of convenience. Passing arguments to the
181
+ # constructor is the same as calling TaskScheduler.new plus
182
+ # TaskScheduler#new_work_item.
183
+ #
184
+ def initialize(work_item=nil, trigger=nil)
185
+ @pITS = nil
186
+ @pITask = nil
187
+
188
+ if ! self.class.com_initialized
189
+ Puppet::Util::Windows::COM.InitializeCom()
190
+ self.class.com_initialized = true
191
+ end
192
+
193
+ @pITS = COM::TaskScheduler.new
194
+ at_exit do
195
+ begin
196
+ @pITS.Release if @pITS && !@pITS.null?
197
+ @pITS = nil
198
+ rescue
199
+ end
200
+ end
201
+
202
+ if work_item
203
+ if trigger
204
+ raise TypeError unless trigger.is_a?(Hash)
205
+ new_work_item(work_item, trigger)
206
+ end
207
+ end
208
+ end
209
+
210
+ # Returns an array of scheduled task names.
211
+ #
212
+ def enum
213
+ raise Error.new(_('No current task scheduler. ITaskScheduler is NULL.')) if @pITS.nil?
214
+ array = []
215
+
216
+ @pITS.UseInstance(COM::EnumWorkItems, :Enum) do |pIEnum|
217
+ FFI::MemoryPointer.new(:pointer) do |names_array_ptr_ptr|
218
+ FFI::MemoryPointer.new(:win32_ulong) do |fetched_count_ptr|
219
+ # awkward usage, if number requested is available, returns S_OK (0), or if less were returned returns S_FALSE (1)
220
+ while (pIEnum.Next(TASKS_TO_RETRIEVE, names_array_ptr_ptr, fetched_count_ptr) >= Puppet::Util::Windows::COM::S_OK)
221
+ count = fetched_count_ptr.read_win32_ulong
222
+ break if count == 0
223
+
224
+ names_array_ptr_ptr.read_com_memory_pointer do |names_array_ptr|
225
+ # iterate over the array of pointers
226
+ name_ptr_ptr = FFI::Pointer.new(:pointer, names_array_ptr)
227
+ for i in 0 ... count
228
+ name_ptr_ptr[i].read_com_memory_pointer do |name_ptr|
229
+ array << name_ptr.read_arbitrary_wide_string_up_to(MAX_PATH)
230
+ end
231
+ end
232
+ end
233
+ end
234
+ end
235
+ end
236
+ end
237
+
238
+ array
239
+ end
240
+
241
+ alias :tasks :enum
242
+
243
+ # Activate the specified task.
244
+ #
245
+ def activate(task)
246
+ raise Error.new(_('No current task scheduler. ITaskScheduler is NULL.')) if @pITS.nil?
247
+ raise TypeError unless task.is_a?(String)
248
+
249
+ FFI::MemoryPointer.new(:pointer) do |ptr|
250
+ @pITS.Activate(wide_string(task), IID_ITask, ptr)
251
+
252
+ reset_current_task
253
+ @pITask = COM::Task.new(ptr.read_pointer)
254
+ end
255
+
256
+ @pITask
257
+ end
258
+
259
+ # Delete the specified task name.
260
+ #
261
+ def delete(task)
262
+ raise Error.new(_('No current task scheduler. ITaskScheduler is NULL.')) if @pITS.nil?
263
+ raise TypeError unless task.is_a?(String)
264
+
265
+ @pITS.Delete(wide_string(task))
266
+
267
+ true
268
+ end
269
+
270
+ # Execute the current task.
271
+ #
272
+ def run
273
+ raise Error.new(_('No currently active task. ITask is NULL.')) if @pITask.nil?
274
+
275
+ @pITask.Run
276
+ end
277
+
278
+ # Saves the current task. Tasks must be saved before they can be activated.
279
+ # The .job file itself is typically stored in the C:\WINDOWS\Tasks folder.
280
+ #
281
+ # If +file+ (an absolute path) is specified then the job is saved to that
282
+ # file instead. A '.job' extension is recommended but not enforced.
283
+ #
284
+ def save(file = nil)
285
+ raise Error.new(_('No currently active task. ITask is NULL.')) if @pITask.nil?
286
+ raise Error.new(_('Account information must be set on the current task to save it properly.')) if !@account_information_set
287
+
288
+ reset = true
289
+
290
+ begin
291
+ @pITask.QueryInstance(COM::PersistFile) do |pIPersistFile|
292
+ wide_file = wide_string(file)
293
+ pIPersistFile.Save(wide_file, 1)
294
+ pIPersistFile.SaveCompleted(wide_file)
295
+ end
296
+ rescue
297
+ reset = false
298
+ ensure
299
+ reset_current_task if reset
300
+ end
301
+ end
302
+
303
+ # Terminate the current task.
304
+ #
305
+ def terminate
306
+ raise Error.new(_('No currently active task. ITask is NULL.')) if @pITask.nil?
307
+
308
+ @pITask.Terminate
309
+ end
310
+
311
+ # Set the host on which the various TaskScheduler methods will execute.
312
+ #
313
+ def machine=(host)
314
+ raise Error.new(_('No current task scheduler. ITaskScheduler is NULL.')) if @pITS.nil?
315
+ raise TypeError unless host.is_a?(String)
316
+
317
+ @pITS.SetTargetComputer(wide_string(host))
318
+
319
+ host
320
+ end
321
+
322
+ alias :host= :machine=
323
+
324
+ # Sets the +user+ and +password+ for the given task. If the user and
325
+ # password are set properly then true is returned.
326
+ #
327
+ # In some cases the job may be created, but the account information was
328
+ # bad. In this case the task is created but a warning is generated and
329
+ # false is returned.
330
+ #
331
+ # Note that if intending to use SYSTEM, specify an empty user and nil password
332
+ #
333
+ # Calling task.set_account_information('SYSTEM', nil) will generally not
334
+ # work, except for one special case where flags are also set like:
335
+ # task.flags = Win32::TaskScheduler::TASK_FLAG_RUN_ONLY_IF_LOGGED_ON
336
+ #
337
+ # This must be done prior to the 1st save() call for the task to be
338
+ # properly registered and visible through the MMC snap-in / schtasks.exe
339
+ #
340
+ def set_account_information(user, password)
341
+ raise Error.new(_('No current task scheduler. ITaskScheduler is NULL.')) if @pITS.nil?
342
+ raise Error.new(_('No currently active task. ITask is NULL.')) if @pITask.nil?
343
+
344
+ bool = false
345
+
346
+ begin
347
+ if (user.nil? || user=="") && (password.nil? || password=="")
348
+ @pITask.SetAccountInformation(wide_string(""), FFI::Pointer::NULL)
349
+ else
350
+ if user.length > MAX_ACCOUNT_LENGTH
351
+ raise Error.new(_("User has exceeded maximum allowed length %{max}") % { max: MAX_ACCOUNT_LENGTH })
352
+ end
353
+ user = wide_string(user)
354
+ password = wide_string(password)
355
+ @pITask.SetAccountInformation(user, password)
356
+ end
357
+
358
+ @account_information_set = true
359
+ bool = true
360
+ rescue Puppet::Util::Windows::Error => e
361
+ raise e unless e.code == SCHED_E_ACCOUNT_INFORMATION_NOT_SET
362
+
363
+ warn _('job created, but password was invalid')
364
+ end
365
+
366
+ bool
367
+ end
368
+
369
+ # Returns the user associated with the task or nil if no user has yet
370
+ # been associated with the task.
371
+ #
372
+ def account_information
373
+ raise Error.new(_('No current task scheduler. ITaskScheduler is NULL.')) if @pITS.nil?
374
+ raise Error.new(_('No currently active task. ITask is NULL.')) if @pITask.nil?
375
+
376
+ # default under certain failures
377
+ user = nil
378
+
379
+ begin
380
+ FFI::MemoryPointer.new(:pointer) do |ptr|
381
+ @pITask.GetAccountInformation(ptr)
382
+ ptr.read_com_memory_pointer do |str_ptr|
383
+ user = str_ptr.read_arbitrary_wide_string_up_to(MAX_ACCOUNT_LENGTH) if ! str_ptr.null?
384
+ end
385
+ end
386
+ rescue Puppet::Util::Windows::Error => e
387
+ raise e unless e.code == SCHED_E_ACCOUNT_INFORMATION_NOT_SET ||
388
+ e.code == SCHED_E_NO_SECURITY_SERVICES ||
389
+ e.code == ERROR_NONE_MAPPED
390
+ end
391
+
392
+ user
393
+ end
394
+
395
+ # Returns the name of the application associated with the task.
396
+ #
397
+ def application_name
398
+ raise Error.new(_('No current task scheduler. ITaskScheduler is NULL.')) if @pITS.nil?
399
+ raise Error.new(_('No currently active task. ITask is NULL.')) if @pITask.nil?
400
+
401
+ app = nil
402
+
403
+ FFI::MemoryPointer.new(:pointer) do |ptr|
404
+ @pITask.GetApplicationName(ptr)
405
+
406
+ ptr.read_com_memory_pointer do |str_ptr|
407
+ app = str_ptr.read_arbitrary_wide_string_up_to(MAX_PATH) if ! str_ptr.null?
408
+ end
409
+ end
410
+
411
+ app
412
+ end
413
+
414
+ # Sets the application name associated with the task.
415
+ #
416
+ def application_name=(app)
417
+ raise Error.new(_('No current task scheduler. ITaskScheduler is NULL.')) if @pITS.nil?
418
+ raise Error.new(_('No currently active task. ITask is NULL.')) if @pITask.nil?
419
+ raise TypeError unless app.is_a?(String)
420
+
421
+ # the application name is written to a .job file on disk, so is subject to path limitations
422
+ if app.length > MAX_PATH
423
+ raise Error.new(_("Application name has exceeded maximum allowed length %{max}") % { max: MAX_PATH })
424
+ end
425
+ @pITask.SetApplicationName(wide_string(app))
426
+
427
+ app
428
+ end
429
+
430
+ # Returns the command line parameters for the task.
431
+ #
432
+ def parameters
433
+ raise Error.new(_('No current task scheduler. ITaskScheduler is NULL.')) if @pITS.nil?
434
+ raise Error.new(_('No currently active task. ITask is NULL.')) if @pITask.nil?
435
+
436
+ param = nil
437
+
438
+ FFI::MemoryPointer.new(:pointer) do |ptr|
439
+ @pITask.GetParameters(ptr)
440
+
441
+ ptr.read_com_memory_pointer do |str_ptr|
442
+ param = str_ptr.read_arbitrary_wide_string_up_to(MAX_PARAMETERS_LENGTH) if ! str_ptr.null?
443
+ end
444
+ end
445
+
446
+ param
447
+ end
448
+
449
+ # Sets the parameters for the task. These parameters are passed as command
450
+ # line arguments to the application the task will run. To clear the command
451
+ # line parameters set it to an empty string.
452
+ #
453
+ def parameters=(param)
454
+ raise Error.new(_('No current task scheduler. ITaskScheduler is NULL.')) if @pITS.nil?
455
+ raise Error.new(_('No currently active task. ITask is NULL.')) if @pITask.nil?
456
+ raise TypeError unless param.is_a?(String)
457
+
458
+ if param.length > MAX_PARAMETERS_LENGTH
459
+ raise Error.new(_("Parameters has exceeded maximum allowed length %{max}") % { max: MAX_PARAMETERS_LENGTH })
460
+ end
461
+
462
+ @pITask.SetParameters(wide_string(param))
463
+
464
+ param
465
+ end
466
+
467
+ # Returns the working directory for the task.
468
+ #
469
+ def working_directory
470
+ raise Error.new(_('No current task scheduler. ITaskScheduler is NULL.')) if @pITS.nil?
471
+ raise Error.new(_('No currently active task. ITask is NULL.')) if @pITask.nil?
472
+
473
+ dir = nil
474
+
475
+ FFI::MemoryPointer.new(:pointer) do |ptr|
476
+ @pITask.GetWorkingDirectory(ptr)
477
+
478
+ ptr.read_com_memory_pointer do |str_ptr|
479
+ dir = str_ptr.read_arbitrary_wide_string_up_to(MAX_PATH) if ! str_ptr.null?
480
+ end
481
+ end
482
+
483
+ dir
484
+ end
485
+
486
+ # Sets the working directory for the task.
487
+ #
488
+ def working_directory=(dir)
489
+ raise Error.new(_('No current task scheduler. ITaskScheduler is NULL.')) if @pITS.nil?
490
+ raise Error.new(_('No currently active task. ITask is NULL.')) if @pITask.nil?
491
+ raise TypeError unless dir.is_a?(String)
492
+
493
+ if dir.length > MAX_PATH
494
+ raise Error.new(_("Working directory has exceeded maximum allowed length %{max}") % { max: MAX_PATH })
495
+ end
496
+
497
+ @pITask.SetWorkingDirectory(wide_string(dir))
498
+
499
+ dir
500
+ end
501
+
502
+ # Returns the task's priority level. Possible values are 'idle',
503
+ # 'normal', 'high', 'realtime', 'below_normal', 'above_normal',
504
+ # and 'unknown'.
505
+ #
506
+ def priority
507
+ raise Error.new(_('No current task scheduler. ITaskScheduler is NULL.')) if @pITS.nil?
508
+ raise Error.new(_('No currently active task. ITask is NULL.')) if @pITask.nil?
509
+
510
+ priority_name = ''
511
+
512
+ FFI::MemoryPointer.new(:dword, 1) do |ptr|
513
+ @pITask.GetPriority(ptr)
514
+
515
+ pri = ptr.read_dword
516
+ if (pri & IDLE) != 0
517
+ priority_name = 'idle'
518
+ elsif (pri & NORMAL) != 0
519
+ priority_name = 'normal'
520
+ elsif (pri & HIGH) != 0
521
+ priority_name = 'high'
522
+ elsif (pri & REALTIME) != 0
523
+ priority_name = 'realtime'
524
+ elsif (pri & BELOW_NORMAL) != 0
525
+ priority_name = 'below_normal'
526
+ elsif (pri & ABOVE_NORMAL) != 0
527
+ priority_name = 'above_normal'
528
+ else
529
+ priority_name = 'unknown'
530
+ end
531
+ end
532
+
533
+ priority_name
534
+ end
535
+
536
+ # Sets the priority of the task. The +priority+ should be a numeric
537
+ # priority constant value.
538
+ #
539
+ def priority=(priority)
540
+ raise Error.new(_('No current task scheduler. ITaskScheduler is NULL.')) if @pITS.nil?
541
+ raise Error.new(_('No currently active task. ITask is NULL.')) if @pITask.nil?
542
+ raise TypeError unless priority.is_a?(Numeric)
543
+
544
+ @pITask.SetPriority(priority)
545
+
546
+ priority
547
+ end
548
+
549
+ # Creates a new work item (scheduled job) with the given +trigger+. The
550
+ # trigger variable is a hash of options that define when the scheduled
551
+ # job should run.
552
+ #
553
+ def new_work_item(task, trigger)
554
+ raise TypeError unless trigger.is_a?(Hash)
555
+ raise Error.new(_('No current task scheduler. ITaskScheduler is NULL.')) if @pITS.nil?
556
+
557
+ # I'm working around github issue #1 here.
558
+ enum.each{ |name|
559
+ if name.downcase == task.downcase + '.job'
560
+ raise Error.new(_("task '%{task}' already exists") % { task: task })
561
+ end
562
+ }
563
+
564
+ FFI::MemoryPointer.new(:pointer) do |ptr|
565
+ @pITS.NewWorkItem(wide_string(task), CLSID_CTask, IID_ITask, ptr)
566
+
567
+ reset_current_task
568
+ @pITask = COM::Task.new(ptr.read_pointer)
569
+
570
+ FFI::MemoryPointer.new(:word, 1) do |trigger_index_ptr|
571
+ # Without the 'enum.include?' check above the code segfaults here if the
572
+ # task already exists. This should probably be handled properly instead
573
+ # of simply avoiding the issue.
574
+
575
+ @pITask.UseInstance(COM::TaskTrigger, :CreateTrigger, trigger_index_ptr) do |pITaskTrigger|
576
+ populate_trigger(pITaskTrigger, trigger)
577
+ end
578
+ end
579
+ end
580
+
581
+ # preload task with the SYSTEM account
582
+ # empty string '' means 'SYSTEM' per MSDN, so default it
583
+ # given an account is necessary for creation of a task
584
+ # note that a user may set SYSTEM explicitly, but that has problems
585
+ # https://msdn.microsoft.com/en-us/library/windows/desktop/aa381276(v=vs.85).aspx
586
+ set_account_information('', nil)
587
+
588
+ @pITask
589
+ end
590
+
591
+ alias :new_task :new_work_item
592
+
593
+ # Returns the number of triggers associated with the active task.
594
+ #
595
+ def trigger_count
596
+ raise Error.new(_('No current task scheduler. ITaskScheduler is NULL.')) if @pITS.nil?
597
+ raise Error.new(_('No currently active task. ITask is NULL.')) if @pITask.nil?
598
+
599
+ count = 0
600
+
601
+ FFI::MemoryPointer.new(:word, 1) do |ptr|
602
+ @pITask.GetTriggerCount(ptr)
603
+ count = ptr.read_word
604
+ end
605
+
606
+ count
607
+ end
608
+
609
+ # Deletes the trigger at the specified index.
610
+ #
611
+ def delete_trigger(index)
612
+ raise Error.new(_('No current task scheduler. ITaskScheduler is NULL.')) if @pITS.nil?
613
+ raise Error.new(_('No currently active task. ITask is NULL.')) if @pITask.nil?
614
+
615
+ @pITask.DeleteTrigger(index)
616
+ index
617
+ end
618
+
619
+ # Returns a hash that describes the trigger at the given index for the
620
+ # current task.
621
+ #
622
+ def trigger(index)
623
+ raise Error.new(_('No current task scheduler. ITaskScheduler is NULL.')) if @pITS.nil?
624
+ raise Error.new(_('No currently active task. ITask is NULL.')) if @pITask.nil?
625
+
626
+ trigger = {}
627
+
628
+ @pITask.UseInstance(COM::TaskTrigger, :GetTrigger, index) do |pITaskTrigger|
629
+ FFI::MemoryPointer.new(COM::TASK_TRIGGER.size) do |task_trigger_ptr|
630
+ pITaskTrigger.GetTrigger(task_trigger_ptr)
631
+ trigger = populate_hash_from_trigger(COM::TASK_TRIGGER.new(task_trigger_ptr))
632
+ end
633
+ end
634
+
635
+ trigger
636
+ end
637
+
638
+ # Sets the trigger for the currently active task.
639
+ #
640
+ def trigger=(trigger)
641
+ raise Error.new(_('No current task scheduler. ITaskScheduler is NULL.')) if @pITS.nil?
642
+ raise Error.new(_('No currently active task. ITask is NULL.')) if @pITask.nil?
643
+ raise TypeError unless trigger.is_a?(Hash)
644
+
645
+ FFI::MemoryPointer.new(:word, 1) do |trigger_index_ptr|
646
+ # Without the 'enum.include?' check above the code segfaults here if the
647
+ # task already exists. This should probably be handled properly instead
648
+ # of simply avoiding the issue.
649
+
650
+ @pITask.UseInstance(COM::TaskTrigger, :CreateTrigger, trigger_index_ptr) do |pITaskTrigger|
651
+ populate_trigger(pITaskTrigger, trigger)
652
+ end
653
+ end
654
+
655
+ trigger
656
+ end
657
+
658
+ # Adds a trigger at the specified index.
659
+ #
660
+ def add_trigger(index, trigger)
661
+ raise Error.new(_('No current task scheduler. ITaskScheduler is NULL.')) if @pITS.nil?
662
+ raise Error.new(_('No currently active task. ITask is NULL.')) if @pITask.nil?
663
+ raise TypeError unless trigger.is_a?(Hash)
664
+
665
+ @pITask.UseInstance(COM::TaskTrigger, :GetTrigger, index) do |pITaskTrigger|
666
+ populate_trigger(pITaskTrigger, trigger)
667
+ end
668
+ end
669
+
670
+ # Returns the flags (integer) that modify the behavior of the work item. You
671
+ # must OR the return value to determine the flags yourself.
672
+ #
673
+ def flags
674
+ raise Error.new(_('No currently active task. ITask is NULL.')) if @pITask.nil?
675
+
676
+ flags = 0
677
+
678
+ FFI::MemoryPointer.new(:dword, 1) do |ptr|
679
+ @pITask.GetFlags(ptr)
680
+ flags = ptr.read_dword
681
+ end
682
+
683
+ flags
684
+ end
685
+
686
+ # Sets an OR'd value of flags that modify the behavior of the work item.
687
+ #
688
+ def flags=(flags)
689
+ raise Error.new(_('No current task scheduler. ITaskScheduler is NULL.')) if @pITS.nil?
690
+ raise Error.new(_('No currently active task. ITask is NULL.')) if @pITask.nil?
691
+
692
+ @pITask.SetFlags(flags)
693
+ flags
694
+ end
695
+
696
+ # Returns the status of the currently active task. Possible values are
697
+ # 'ready', 'running', 'not scheduled' or 'unknown'.
698
+ #
699
+ def status
700
+ raise Error.new(_('No currently active task. ITask is NULL.')) if @pITask.nil?
701
+
702
+ st = nil
703
+
704
+ FFI::MemoryPointer.new(:hresult, 1) do |ptr|
705
+ @pITask.GetStatus(ptr)
706
+ st = ptr.read_hresult
707
+ end
708
+
709
+ case st
710
+ when SCHED_S_TASK_READY
711
+ status = 'ready'
712
+ when SCHED_S_TASK_RUNNING
713
+ status = 'running'
714
+ when SCHED_S_TASK_NOT_SCHEDULED
715
+ status = 'not scheduled'
716
+ else
717
+ status = 'unknown'
718
+ end
719
+
720
+ status
721
+ end
722
+
723
+ # Returns the exit code from the last scheduled run.
724
+ #
725
+ def exit_code
726
+ raise Error.new(_('No currently active task. ITask is NULL.')) if @pITask.nil?
727
+
728
+ status = 0
729
+
730
+ begin
731
+ FFI::MemoryPointer.new(:dword, 1) do |ptr|
732
+ @pITask.GetExitCode(ptr)
733
+ status = ptr.read_dword
734
+ end
735
+ rescue Puppet::Util::Windows::Error => e
736
+ raise e unless e.code == SCHED_S_TASK_HAS_NOT_RUN
737
+ end
738
+
739
+ status
740
+ end
741
+
742
+ # Returns the comment associated with the task, if any.
743
+ #
744
+ def comment
745
+ raise Error.new(_('No currently active task. ITask is NULL.')) if @pITask.nil?
746
+
747
+ comment = nil
748
+
749
+ FFI::MemoryPointer.new(:pointer) do |ptr|
750
+ @pITask.GetComment(ptr)
751
+
752
+ ptr.read_com_memory_pointer do |str_ptr|
753
+ comment = str_ptr.read_arbitrary_wide_string_up_to(MAX_COMMENT_LENGTH) if ! str_ptr.null?
754
+ end
755
+ end
756
+
757
+ comment
758
+ end
759
+
760
+ # Sets the comment for the task.
761
+ #
762
+ def comment=(comment)
763
+ raise Error.new(_('No currently active task. ITask is NULL.')) if @pITask.nil?
764
+ raise TypeError unless comment.is_a?(String)
765
+
766
+ if comment.length > MAX_COMMENT_LENGTH
767
+ raise Error.new(_("Comment has exceeded maximum allowed length %{max}") % { max: MAX_COMMENT_LENGTH })
768
+ end
769
+
770
+ @pITask.SetComment(wide_string(comment))
771
+ comment
772
+ end
773
+
774
+ # Returns the name of the user who created the task.
775
+ #
776
+ def creator
777
+ raise Error.new(_('No currently active task. ITask is NULL.')) if @pITask.nil?
778
+
779
+ creator = nil
780
+
781
+ FFI::MemoryPointer.new(:pointer) do |ptr|
782
+ @pITask.GetCreator(ptr)
783
+
784
+ ptr.read_com_memory_pointer do |str_ptr|
785
+ creator = str_ptr.read_arbitrary_wide_string_up_to(MAX_ACCOUNT_LENGTH) if ! str_ptr.null?
786
+ end
787
+ end
788
+
789
+ creator
790
+ end
791
+
792
+ # Sets the creator for the task.
793
+ #
794
+ def creator=(creator)
795
+ raise Error.new(_('No currently active task. ITask is NULL.')) if @pITask.nil?
796
+ raise TypeError unless creator.is_a?(String)
797
+
798
+ if creator.length > MAX_ACCOUNT_LENGTH
799
+ raise Error.new(_("Creator has exceeded maximum allowed length %{max}") % { max: MAX_ACCOUNT_LENGTH })
800
+ end
801
+
802
+
803
+ @pITask.SetCreator(wide_string(creator))
804
+ creator
805
+ end
806
+
807
+ # Returns a Time object that indicates the next time the task will run.
808
+ #
809
+ def next_run_time
810
+ raise Error.new(_('No currently active task. ITask is NULL.')) if @pITask.nil?
811
+
812
+ time = nil
813
+
814
+ FFI::MemoryPointer.new(WIN32::SYSTEMTIME.size) do |ptr|
815
+ @pITask.GetNextRunTime(ptr)
816
+ time = WIN32::SYSTEMTIME.new(ptr).to_local_time
817
+ end
818
+
819
+ time
820
+ end
821
+
822
+ # Returns a Time object indicating the most recent time the task ran or
823
+ # nil if the task has never run.
824
+ #
825
+ def most_recent_run_time
826
+ raise Error.new(_('No currently active task. ITask is NULL.')) if @pITask.nil?
827
+
828
+ time = nil
829
+
830
+ begin
831
+ FFI::MemoryPointer.new(WIN32::SYSTEMTIME.size) do |ptr|
832
+ @pITask.GetMostRecentRunTime(ptr)
833
+ time = WIN32::SYSTEMTIME.new(ptr).to_local_time
834
+ end
835
+ rescue Puppet::Util::Windows::Error => e
836
+ raise e unless e.code == SCHED_S_TASK_HAS_NOT_RUN
837
+ end
838
+
839
+ time
840
+ end
841
+
842
+ # Returns the maximum length of time, in milliseconds, that the task
843
+ # will run before terminating.
844
+ #
845
+ def max_run_time
846
+ raise Error.new(_('No currently active task. ITask is NULL.')) if @pITask.nil?
847
+
848
+ max_run_time = nil
849
+
850
+ FFI::MemoryPointer.new(:dword, 1) do |ptr|
851
+ @pITask.GetMaxRunTime(ptr)
852
+ max_run_time = ptr.read_dword
853
+ end
854
+
855
+ max_run_time
856
+ end
857
+
858
+ # Sets the maximum length of time, in milliseconds, that the task can run
859
+ # before terminating. Returns the value you specified if successful.
860
+ #
861
+ def max_run_time=(max_run_time)
862
+ raise Error.new(_('No currently active task. ITask is NULL.')) if @pITask.nil?
863
+ raise TypeError unless max_run_time.is_a?(Numeric)
864
+
865
+ @pITask.SetMaxRunTime(max_run_time)
866
+ max_run_time
867
+ end
868
+
869
+ # Returns whether or not the scheduled task exists.
870
+ def exists?(job_name)
871
+ # task name comparison is case insensitive
872
+ tasks.any? { |name| name.casecmp(job_name + '.job') == 0 }
873
+ end
874
+
875
+ private
876
+
877
+ # :stopdoc:
878
+
879
+ # Used for the new_work_item method
880
+ ValidTriggerKeys = [
881
+ 'end_day',
882
+ 'end_month',
883
+ 'end_year',
884
+ 'flags',
885
+ 'minutes_duration',
886
+ 'minutes_interval',
887
+ 'random_minutes_interval',
888
+ 'start_day',
889
+ 'start_hour',
890
+ 'start_minute',
891
+ 'start_month',
892
+ 'start_year',
893
+ 'trigger_type',
894
+ 'type'
895
+ ]
896
+
897
+ ValidTypeKeys = [
898
+ 'days_interval',
899
+ 'weeks_interval',
900
+ 'days_of_week',
901
+ 'months',
902
+ 'days',
903
+ 'weeks'
904
+ ]
905
+
906
+ # Private method that validates keys, and converts all keys to lowercase
907
+ # strings.
908
+ #
909
+ def transform_and_validate(hash)
910
+ new_hash = {}
911
+
912
+ hash.each{ |key, value|
913
+ key = key.to_s.downcase
914
+ if key == 'type'
915
+ new_type_hash = {}
916
+ raise ArgumentError unless value.is_a?(Hash)
917
+ value.each{ |subkey, subvalue|
918
+ subkey = subkey.to_s.downcase
919
+ if ValidTypeKeys.include?(subkey)
920
+ new_type_hash[subkey] = subvalue
921
+ else
922
+ raise ArgumentError, "Invalid type key '#{subkey}'"
923
+ end
924
+ }
925
+ new_hash[key] = new_type_hash
926
+ else
927
+ if ValidTriggerKeys.include?(key)
928
+ new_hash[key] = value
929
+ else
930
+ raise ArgumentError, "Invalid key '#{key}'"
931
+ end
932
+ end
933
+ }
934
+
935
+ new_hash
936
+ end
937
+
938
+ private
939
+
940
+ def reset_current_task
941
+ # Ensure that COM reference is decremented properly
942
+ @pITask.Release if @pITask && ! @pITask.null?
943
+ @pITask = nil
944
+ @account_information_set = false
945
+ end
946
+
947
+ def populate_trigger(task_trigger, trigger)
948
+ raise TypeError unless task_trigger.is_a?(COM::TaskTrigger)
949
+ trigger = transform_and_validate(trigger)
950
+
951
+ FFI::MemoryPointer.new(COM::TASK_TRIGGER.size) do |trigger_ptr|
952
+ FFI::MemoryPointer.new(COM::TRIGGER_TYPE_UNION.size) do |trigger_type_union_ptr|
953
+ trigger_type_union = COM::TRIGGER_TYPE_UNION.new(trigger_type_union_ptr)
954
+
955
+ tmp = trigger['type'].is_a?(Hash) ? trigger['type'] : nil
956
+ case trigger['trigger_type']
957
+ when :TASK_TIME_TRIGGER_DAILY
958
+ if tmp && tmp['days_interval']
959
+ trigger_type_union[:Daily][:DaysInterval] = tmp['days_interval']
960
+ end
961
+ when :TASK_TIME_TRIGGER_WEEKLY
962
+ if tmp && tmp['weeks_interval'] && tmp['days_of_week']
963
+ trigger_type_union[:Weekly][:WeeksInterval] = tmp['weeks_interval']
964
+ trigger_type_union[:Weekly][:rgfDaysOfTheWeek] = tmp['days_of_week']
965
+ end
966
+ when :TASK_TIME_TRIGGER_MONTHLYDATE
967
+ if tmp && tmp['months'] && tmp['days']
968
+ trigger_type_union[:MonthlyDate][:rgfDays] = tmp['days']
969
+ trigger_type_union[:MonthlyDate][:rgfMonths] = tmp['months']
970
+ end
971
+ when :TASK_TIME_TRIGGER_MONTHLYDOW
972
+ if tmp && tmp['weeks'] && tmp['days_of_week'] && tmp['months']
973
+ trigger_type_union[:MonthlyDOW][:wWhichWeek] = tmp['weeks']
974
+ trigger_type_union[:MonthlyDOW][:rgfDaysOfTheWeek] = tmp['days_of_week']
975
+ trigger_type_union[:MonthlyDOW][:rgfMonths] = tmp['months']
976
+ end
977
+ when :TASK_TIME_TRIGGER_ONCE
978
+ # Do nothing. The Type member of the TASK_TRIGGER struct is ignored.
979
+ else
980
+ raise Error.new(_("Unknown trigger type %{type}") % { type: trigger['trigger_type'] })
981
+ end
982
+
983
+ trigger_struct = COM::TASK_TRIGGER.new(trigger_ptr)
984
+ trigger_struct[:cbTriggerSize] = COM::TASK_TRIGGER.size
985
+ now = Time.now
986
+ trigger_struct[:wBeginYear] = trigger['start_year'] || now.year
987
+ trigger_struct[:wBeginMonth] = trigger['start_month'] || now.month
988
+ trigger_struct[:wBeginDay] = trigger['start_day'] || now.day
989
+ trigger_struct[:wEndYear] = trigger['end_year'] || 0
990
+ trigger_struct[:wEndMonth] = trigger['end_month'] || 0
991
+ trigger_struct[:wEndDay] = trigger['end_day'] || 0
992
+ trigger_struct[:wStartHour] = trigger['start_hour'] || 0
993
+ trigger_struct[:wStartMinute] = trigger['start_minute'] || 0
994
+ trigger_struct[:MinutesDuration] = trigger['minutes_duration'] || 0
995
+ trigger_struct[:MinutesInterval] = trigger['minutes_interval'] || 0
996
+ trigger_struct[:rgFlags] = trigger['flags'] || 0
997
+ trigger_struct[:TriggerType] = trigger['trigger_type'] || :TASK_TIME_TRIGGER_ONCE
998
+ trigger_struct[:Type] = trigger_type_union
999
+ trigger_struct[:wRandomMinutesInterval] = trigger['random_minutes_interval'] || 0
1000
+
1001
+ task_trigger.SetTrigger(trigger_struct)
1002
+ end
1003
+ end
1004
+ end
1005
+
1006
+ def populate_hash_from_trigger(task_trigger)
1007
+ raise TypeError unless task_trigger.is_a?(COM::TASK_TRIGGER)
1008
+
1009
+ trigger = {
1010
+ 'start_year' => task_trigger[:wBeginYear],
1011
+ 'start_month' => task_trigger[:wBeginMonth],
1012
+ 'start_day' => task_trigger[:wBeginDay],
1013
+ 'end_year' => task_trigger[:wEndYear],
1014
+ 'end_month' => task_trigger[:wEndMonth],
1015
+ 'end_day' => task_trigger[:wEndDay],
1016
+ 'start_hour' => task_trigger[:wStartHour],
1017
+ 'start_minute' => task_trigger[:wStartMinute],
1018
+ 'minutes_duration' => task_trigger[:MinutesDuration],
1019
+ 'minutes_interval' => task_trigger[:MinutesInterval],
1020
+ 'flags' => task_trigger[:rgFlags],
1021
+ 'trigger_type' => task_trigger[:TriggerType],
1022
+ 'random_minutes_interval' => task_trigger[:wRandomMinutesInterval]
1023
+ }
1024
+
1025
+ case task_trigger[:TriggerType]
1026
+ when :TASK_TIME_TRIGGER_DAILY
1027
+ trigger['type'] = { 'days_interval' => task_trigger[:Type][:Daily][:DaysInterval] }
1028
+ when :TASK_TIME_TRIGGER_WEEKLY
1029
+ trigger['type'] = {
1030
+ 'weeks_interval' => task_trigger[:Type][:Weekly][:WeeksInterval],
1031
+ 'days_of_week' => task_trigger[:Type][:Weekly][:rgfDaysOfTheWeek]
1032
+ }
1033
+ when :TASK_TIME_TRIGGER_MONTHLYDATE
1034
+ trigger['type'] = {
1035
+ 'days' => task_trigger[:Type][:MonthlyDate][:rgfDays],
1036
+ 'months' => task_trigger[:Type][:MonthlyDate][:rgfMonths]
1037
+ }
1038
+ when :TASK_TIME_TRIGGER_MONTHLYDOW
1039
+ trigger['type'] = {
1040
+ 'weeks' => task_trigger[:Type][:MonthlyDOW][:wWhichWeek],
1041
+ 'days_of_week' => task_trigger[:Type][:MonthlyDOW][:rgfDaysOfTheWeek],
1042
+ 'months' => task_trigger[:Type][:MonthlyDOW][:rgfMonths]
1043
+ }
1044
+ when :TASK_TIME_TRIGGER_ONCE
1045
+ trigger['type'] = { 'once' => nil }
1046
+ else
1047
+ raise Error.new(_("Unknown trigger type %{type}") % { type: task_trigger[:TriggerType] })
1048
+ end
1049
+
1050
+ trigger
1051
+ end
1052
+
1053
+ module COM
1054
+ extend FFI::Library
1055
+ private
1056
+
1057
+ com = Puppet::Util::Windows::COM
1058
+
1059
+ public
1060
+
1061
+ # https://msdn.microsoft.com/en-us/library/windows/desktop/aa381811(v=vs.85).aspx
1062
+ ITaskScheduler = com::Interface[com::IUnknown,
1063
+ FFI::WIN32::GUID['148BD527-A2AB-11CE-B11F-00AA00530503'],
1064
+
1065
+ SetTargetComputer: [[:lpcwstr], :hresult],
1066
+ # LPWSTR *
1067
+ GetTargetComputer: [[:pointer], :hresult],
1068
+ # IEnumWorkItems **
1069
+ Enum: [[:pointer], :hresult],
1070
+ # LPCWSTR, REFIID, IUnknown **
1071
+ Activate: [[:lpcwstr, :pointer, :pointer], :hresult],
1072
+ Delete: [[:lpcwstr], :hresult],
1073
+ # LPCWSTR, REFCLSID, REFIID, IUnknown **
1074
+ NewWorkItem: [[:lpcwstr, :pointer, :pointer, :pointer], :hresult],
1075
+ # LPCWSTR, IScheduledWorkItem *
1076
+ AddWorkItem: [[:lpcwstr, :pointer], :hresult],
1077
+ # LPCWSTR, REFIID
1078
+ IsOfType: [[:lpcwstr, :pointer], :hresult]
1079
+ ]
1080
+
1081
+ TaskScheduler = com::Factory[ITaskScheduler,
1082
+ FFI::WIN32::GUID['148BD52A-A2AB-11CE-B11F-00AA00530503']]
1083
+
1084
+ # https://msdn.microsoft.com/en-us/library/windows/desktop/aa380706(v=vs.85).aspx
1085
+ IEnumWorkItems = com::Interface[com::IUnknown,
1086
+ FFI::WIN32::GUID['148BD528-A2AB-11CE-B11F-00AA00530503'],
1087
+
1088
+ # ULONG, LPWSTR **, ULONG *
1089
+ Next: [[:win32_ulong, :pointer, :pointer], :hresult],
1090
+ Skip: [[:win32_ulong], :hresult],
1091
+ Reset: [[], :hresult],
1092
+ # IEnumWorkItems ** ppEnumWorkItems
1093
+ Clone: [[:pointer], :hresult]
1094
+ ]
1095
+
1096
+ EnumWorkItems = com::Instance[IEnumWorkItems]
1097
+
1098
+ # https://msdn.microsoft.com/en-us/library/windows/desktop/aa381216(v=vs.85).aspx
1099
+ IScheduledWorkItem = com::Interface[com::IUnknown,
1100
+ FFI::WIN32::GUID['a6b952f0-a4b1-11d0-997d-00aa006887ec'],
1101
+
1102
+ # WORD *, ITaskTrigger **
1103
+ CreateTrigger: [[:pointer, :pointer], :hresult],
1104
+ DeleteTrigger: [[:word], :hresult],
1105
+ # WORD *
1106
+ GetTriggerCount: [[:pointer], :hresult],
1107
+ # WORD, ITaskTrigger **
1108
+ GetTrigger: [[:word, :pointer], :hresult],
1109
+ # WORD, LPWSTR *
1110
+ GetTriggerString: [[:word, :pointer], :hresult],
1111
+ # LPSYSTEMTIME, LPSYSTEMTIME, WORD *, LPSYSTEMTIME *
1112
+ GetRunTimes: [[:pointer, :pointer, :pointer, :pointer], :hresult],
1113
+ # SYSTEMTIME *
1114
+ GetNextRunTime: [[:pointer], :hresult],
1115
+ SetIdleWait: [[:word, :word], :hresult],
1116
+ # WORD *, WORD *
1117
+ GetIdleWait: [[:pointer, :pointer], :hresult],
1118
+ Run: [[], :hresult],
1119
+ Terminate: [[], :hresult],
1120
+ EditWorkItem: [[:hwnd, :dword], :hresult],
1121
+ # SYSTEMTIME *
1122
+ GetMostRecentRunTime: [[:pointer], :hresult],
1123
+ # HRESULT *
1124
+ GetStatus: [[:pointer], :hresult],
1125
+ GetExitCode: [[:pdword], :hresult],
1126
+ SetComment: [[:lpcwstr], :hresult],
1127
+ # LPWSTR *
1128
+ GetComment: [[:pointer], :hresult],
1129
+ SetCreator: [[:lpcwstr], :hresult],
1130
+ # LPWSTR *
1131
+ GetCreator: [[:pointer], :hresult],
1132
+ # WORD, BYTE[]
1133
+ SetWorkItemData: [[:word, :buffer_in], :hresult],
1134
+ # WORD *, BYTE **
1135
+ GetWorkItemData: [[:pointer, :pointer], :hresult],
1136
+ SetErrorRetryCount: [[:word], :hresult],
1137
+ # WORD *
1138
+ GetErrorRetryCount: [[:pointer], :hresult],
1139
+ SetErrorRetryInterval: [[:word], :hresult],
1140
+ # WORD *
1141
+ GetErrorRetryInterval: [[:pointer], :hresult],
1142
+ SetFlags: [[:dword], :hresult],
1143
+ # WORD *
1144
+ GetFlags: [[:pointer], :hresult],
1145
+ SetAccountInformation: [[:lpcwstr, :lpcwstr], :hresult],
1146
+ # LPWSTR *
1147
+ GetAccountInformation: [[:pointer], :hresult]
1148
+ ]
1149
+
1150
+ # https://msdn.microsoft.com/en-us/library/windows/desktop/aa381311(v=vs.85).aspx
1151
+ ITask = com::Interface[IScheduledWorkItem,
1152
+ FFI::WIN32::GUID['148BD524-A2AB-11CE-B11F-00AA00530503'],
1153
+
1154
+ SetApplicationName: [[:lpcwstr], :hresult],
1155
+ # LPWSTR *
1156
+ GetApplicationName: [[:pointer], :hresult],
1157
+ SetParameters: [[:lpcwstr], :hresult],
1158
+ # LPWSTR *
1159
+ GetParameters: [[:pointer], :hresult],
1160
+ SetWorkingDirectory: [[:lpcwstr], :hresult],
1161
+ # LPWSTR *
1162
+ GetWorkingDirectory: [[:pointer], :hresult],
1163
+ SetPriority: [[:dword], :hresult],
1164
+ # DWORD *
1165
+ GetPriority: [[:pointer], :hresult],
1166
+ SetTaskFlags: [[:dword], :hresult],
1167
+ # DWORD *
1168
+ GetTaskFlags: [[:pointer], :hresult],
1169
+ SetMaxRunTime: [[:dword], :hresult],
1170
+ # DWORD *
1171
+ GetMaxRunTime: [[:pointer], :hresult]
1172
+ ]
1173
+
1174
+ Task = com::Instance[ITask]
1175
+
1176
+ # https://msdn.microsoft.com/en-us/library/windows/desktop/ms688695(v=vs.85).aspx
1177
+ IPersist = com::Interface[com::IUnknown,
1178
+ FFI::WIN32::GUID['0000010c-0000-0000-c000-000000000046'],
1179
+ # CLSID *
1180
+ GetClassID: [[:pointer], :hresult]
1181
+ ]
1182
+
1183
+ # https://msdn.microsoft.com/en-us/library/windows/desktop/ms687223(v=vs.85).aspx
1184
+ IPersistFile = com::Interface[IPersist,
1185
+ FFI::WIN32::GUID['0000010b-0000-0000-C000-000000000046'],
1186
+
1187
+ IsDirty: [[], :hresult],
1188
+ Load: [[:lpcolestr, :dword], :hresult],
1189
+ Save: [[:lpcolestr, :win32_bool], :hresult],
1190
+ SaveCompleted: [[:lpcolestr], :hresult],
1191
+ # LPOLESTR *
1192
+ GetCurFile: [[:pointer], :hresult]
1193
+ ]
1194
+
1195
+ PersistFile = com::Instance[IPersistFile]
1196
+
1197
+ # https://msdn.microsoft.com/en-us/library/windows/desktop/aa381864(v=vs.85).aspx
1198
+ ITaskTrigger = com::Interface[com::IUnknown,
1199
+ FFI::WIN32::GUID['148BD52B-A2AB-11CE-B11F-00AA00530503'],
1200
+
1201
+ SetTrigger: [[:pointer], :hresult],
1202
+ GetTrigger: [[:pointer], :hresult],
1203
+ GetTriggerString: [[:pointer], :hresult]
1204
+ ]
1205
+
1206
+ TaskTrigger = com::Instance[ITaskTrigger]
1207
+
1208
+ # https://msdn.microsoft.com/en-us/library/windows/desktop/aa383620(v=vs.85).aspx
1209
+ # The TASK_TRIGGER_TYPE field of the TASK_TRIGGER structure determines
1210
+ # which member of the TRIGGER_TYPE_UNION field to use.
1211
+ TASK_TRIGGER_TYPE = enum(
1212
+ :TASK_TIME_TRIGGER_ONCE, 0, # Ignore the Type field
1213
+ :TASK_TIME_TRIGGER_DAILY, 1,
1214
+ :TASK_TIME_TRIGGER_WEEKLY, 2,
1215
+ :TASK_TIME_TRIGGER_MONTHLYDATE, 3,
1216
+ :TASK_TIME_TRIGGER_MONTHLYDOW, 4,
1217
+ :TASK_EVENT_TRIGGER_ON_IDLE, 5, # Ignore the Type field
1218
+ :TASK_EVENT_TRIGGER_AT_SYSTEMSTART, 6, # Ignore the Type field
1219
+ :TASK_EVENT_TRIGGER_AT_LOGON, 7 # Ignore the Type field
1220
+ )
1221
+
1222
+ # https://msdn.microsoft.com/en-us/library/windows/desktop/aa446857(v=vs.85).aspx
1223
+ class DAILY < FFI::Struct
1224
+ layout :DaysInterval, :word
1225
+ end
1226
+
1227
+ # https://msdn.microsoft.com/en-us/library/windows/desktop/aa384014(v=vs.85).aspx
1228
+ class WEEKLY < FFI::Struct
1229
+ layout :WeeksInterval, :word,
1230
+ :rgfDaysOfTheWeek, :word
1231
+ end
1232
+
1233
+ # https://msdn.microsoft.com/en-us/library/windows/desktop/aa381918(v=vs.85).aspx
1234
+ class MONTHLYDATE < FFI::Struct
1235
+ layout :rgfDays, :dword,
1236
+ :rgfMonths, :word
1237
+ end
1238
+
1239
+ # https://msdn.microsoft.com/en-us/library/windows/desktop/aa381918(v=vs.85).aspx
1240
+ class MONTHLYDOW < FFI::Struct
1241
+ layout :wWhichWeek, :word,
1242
+ :rgfDaysOfTheWeek, :word,
1243
+ :rgfMonths, :word
1244
+ end
1245
+
1246
+ # https://msdn.microsoft.com/en-us/library/windows/desktop/aa384002(v=vs.85).aspx
1247
+ class TRIGGER_TYPE_UNION < FFI::Union
1248
+ layout :Daily, DAILY,
1249
+ :Weekly, WEEKLY,
1250
+ :MonthlyDate, MONTHLYDATE,
1251
+ :MonthlyDOW, MONTHLYDOW
1252
+ end
1253
+
1254
+ # https://msdn.microsoft.com/en-us/library/windows/desktop/aa383618(v=vs.85).aspx
1255
+ class TASK_TRIGGER < FFI::Struct
1256
+ layout :cbTriggerSize, :word, # Structure size.
1257
+ :Reserved1, :word, # Reserved. Must be zero.
1258
+ :wBeginYear, :word, # Trigger beginning date year.
1259
+ :wBeginMonth, :word, # Trigger beginning date month.
1260
+ :wBeginDay, :word, # Trigger beginning date day.
1261
+ :wEndYear, :word, # Optional trigger ending date year.
1262
+ :wEndMonth, :word, # Optional trigger ending date month.
1263
+ :wEndDay, :word, # Optional trigger ending date day.
1264
+ :wStartHour, :word, # Run bracket start time hour.
1265
+ :wStartMinute, :word, # Run bracket start time minute.
1266
+ :MinutesDuration, :dword, # Duration of run bracket.
1267
+ :MinutesInterval, :dword, # Run bracket repetition interval.
1268
+ :rgFlags, :dword, # Trigger flags.
1269
+ :TriggerType, TASK_TRIGGER_TYPE, # Trigger type.
1270
+ :Type, TRIGGER_TYPE_UNION, # Trigger data.
1271
+ :Reserved2, :word, # Reserved. Must be zero.
1272
+ :wRandomMinutesInterval, :word # Maximum number of random minutes after start time
1273
+ end
1274
+ end
1275
+ end
1276
+ end