puppet 5.5.22 → 6.0.0

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

Potentially problematic release.


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

Files changed (1407) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +46 -72
  3. data/Gemfile.lock +86 -102
  4. data/MAINTAINERS +47 -0
  5. data/Rakefile +15 -19
  6. data/ext/build_defaults.yaml +0 -1
  7. data/ext/cert_inspector +3 -3
  8. data/ext/debian/copyright +0 -22
  9. data/ext/project_data.yaml +8 -10
  10. data/ext/puppet-test +2 -2
  11. data/ext/redhat/puppet.spec.erb +0 -4
  12. data/ext/regexp_nodes/regexp_nodes.rb +4 -4
  13. data/ext/solaris/smf/puppet.xml +0 -2
  14. data/ext/solaris/smf/svc-puppetd +1 -8
  15. data/ext/solaris/smf/svc-puppetmasterd +1 -8
  16. data/ext/windows/eventlog/Rakefile +32 -0
  17. data/ext/windows/eventlog/puppetres.dll +0 -0
  18. data/ext/windows/eventlog/puppetres.mc +18 -0
  19. data/ext/windows/service/daemon.rb +8 -54
  20. data/install.rb +24 -6
  21. data/lib/hiera/scope.rb +0 -7
  22. data/lib/puppet.rb +10 -21
  23. data/lib/puppet/agent.rb +13 -5
  24. data/lib/puppet/application.rb +10 -8
  25. data/lib/puppet/application/agent.rb +3 -21
  26. data/lib/puppet/application/apply.rb +22 -12
  27. data/lib/puppet/application/cert.rb +25 -180
  28. data/lib/puppet/application/describe.rb +9 -3
  29. data/lib/puppet/application/device.rb +41 -74
  30. data/lib/puppet/application/doc.rb +5 -3
  31. data/lib/puppet/application/filebucket.rb +1 -23
  32. data/lib/puppet/application/lookup.rb +2 -2
  33. data/lib/puppet/application/resource.rb +4 -4
  34. data/lib/puppet/application/script.rb +3 -3
  35. data/lib/puppet/application/ssl.rb +133 -0
  36. data/lib/puppet/application_support.rb +1 -2
  37. data/lib/puppet/configurer.rb +62 -127
  38. data/lib/puppet/configurer/downloader.rb +17 -34
  39. data/lib/puppet/configurer/fact_handler.rb +5 -1
  40. data/lib/puppet/configurer/plugin_handler.rb +2 -3
  41. data/lib/puppet/confine/false.rb +1 -7
  42. data/lib/puppet/confine/true.rb +1 -7
  43. data/lib/puppet/daemon.rb +2 -2
  44. data/lib/puppet/datatypes.rb +1 -1
  45. data/lib/puppet/defaults.rb +126 -286
  46. data/lib/puppet/environments.rb +2 -7
  47. data/lib/puppet/error.rb +14 -10
  48. data/lib/puppet/etc.rb +4 -25
  49. data/lib/puppet/external/dot.rb +23 -17
  50. data/lib/puppet/face/config.rb +50 -12
  51. data/lib/puppet/face/epp.rb +2 -2
  52. data/lib/puppet/face/facts.rb +1 -1
  53. data/lib/puppet/face/help.rb +21 -7
  54. data/lib/puppet/face/help/global.erb +2 -2
  55. data/lib/puppet/face/module/build.rb +4 -59
  56. data/lib/puppet/face/module/generate.rb +5 -247
  57. data/lib/puppet/face/module/install.rb +0 -4
  58. data/lib/puppet/face/module/list.rb +5 -10
  59. data/lib/puppet/face/module/search.rb +2 -2
  60. data/lib/puppet/face/module/uninstall.rb +1 -5
  61. data/lib/puppet/face/module/upgrade.rb +1 -5
  62. data/lib/puppet/face/node/clean.rb +14 -10
  63. data/lib/puppet/face/plugin.rb +2 -9
  64. data/lib/puppet/feature/base.rb +7 -26
  65. data/lib/puppet/feature/eventlog.rb +1 -1
  66. data/lib/puppet/file_bucket/dipper.rb +1 -1
  67. data/lib/puppet/file_serving/base.rb +7 -7
  68. data/lib/puppet/file_serving/fileset.rb +2 -2
  69. data/lib/puppet/file_serving/http_metadata.rb +1 -1
  70. data/lib/puppet/file_serving/metadata.rb +4 -3
  71. data/lib/puppet/file_serving/mount/locales.rb +2 -1
  72. data/lib/puppet/file_serving/mount/pluginfacts.rb +2 -1
  73. data/lib/puppet/file_serving/mount/plugins.rb +2 -1
  74. data/lib/puppet/file_system.rb +8 -0
  75. data/lib/puppet/file_system/memory_file.rb +1 -1
  76. data/lib/puppet/file_system/posix.rb +2 -3
  77. data/lib/puppet/file_system/uniquefile.rb +0 -4
  78. data/lib/puppet/forge.rb +8 -12
  79. data/lib/puppet/functions.rb +138 -0
  80. data/lib/puppet/functions/abs.rb +61 -0
  81. data/lib/puppet/functions/call.rb +38 -2
  82. data/lib/puppet/functions/camelcase.rb +62 -0
  83. data/lib/puppet/functions/capitalize.rb +61 -0
  84. data/lib/puppet/functions/ceiling.rb +37 -0
  85. data/lib/puppet/functions/chomp.rb +57 -0
  86. data/lib/puppet/functions/chop.rb +67 -0
  87. data/lib/puppet/functions/compare.rb +125 -0
  88. data/lib/puppet/functions/convert_to.rb +3 -2
  89. data/lib/puppet/functions/dig.rb +21 -1
  90. data/lib/puppet/functions/downcase.rb +89 -0
  91. data/lib/puppet/functions/epp.rb +4 -4
  92. data/lib/puppet/functions/eyaml_lookup_key.rb +4 -5
  93. data/lib/puppet/functions/filter.rb +7 -6
  94. data/lib/puppet/functions/floor.rb +37 -0
  95. data/lib/puppet/functions/get.rb +150 -0
  96. data/lib/puppet/functions/getvar.rb +87 -0
  97. data/lib/puppet/functions/inline_epp.rb +5 -5
  98. data/lib/puppet/functions/lstrip.rb +58 -0
  99. data/lib/puppet/functions/max.rb +183 -0
  100. data/lib/puppet/functions/min.rb +182 -0
  101. data/lib/puppet/functions/new.rb +3 -8
  102. data/lib/puppet/functions/reduce.rb +4 -2
  103. data/lib/puppet/functions/reverse_each.rb +1 -1
  104. data/lib/puppet/functions/round.rb +24 -0
  105. data/lib/puppet/functions/rstrip.rb +58 -0
  106. data/lib/puppet/functions/size.rb +15 -0
  107. data/lib/puppet/functions/sort.rb +74 -0
  108. data/lib/puppet/functions/step.rb +1 -1
  109. data/lib/puppet/functions/strip.rb +58 -0
  110. data/lib/puppet/functions/upcase.rb +89 -0
  111. data/lib/puppet/functions/yaml_data.rb +4 -5
  112. data/lib/puppet/gettext/config.rb +1 -1
  113. data/lib/puppet/gettext/module_translations.rb +1 -1
  114. data/lib/puppet/graph.rb +0 -2
  115. data/lib/puppet/graph/rb_tree_map.rb +2 -2
  116. data/lib/puppet/graph/simple_graph.rb +10 -7
  117. data/lib/puppet/indirector/catalog/compiler.rb +0 -8
  118. data/lib/puppet/indirector/catalog/json.rb +14 -3
  119. data/lib/puppet/indirector/catalog/yaml.rb +0 -16
  120. data/lib/puppet/indirector/certificate/file.rb +0 -1
  121. data/lib/puppet/indirector/facts/yaml.rb +4 -2
  122. data/lib/puppet/indirector/file_bucket_file/file.rb +1 -1
  123. data/lib/puppet/indirector/hiera.rb +0 -6
  124. data/lib/puppet/indirector/indirection.rb +8 -12
  125. data/lib/puppet/indirector/key/file.rb +1 -6
  126. data/lib/puppet/indirector/node/exec.rb +1 -3
  127. data/lib/puppet/indirector/node/yaml.rb +0 -6
  128. data/lib/puppet/indirector/request.rb +20 -27
  129. data/lib/puppet/indirector/resource/ral.rb +3 -1
  130. data/lib/puppet/indirector/resource/validator.rb +1 -1
  131. data/lib/puppet/indirector/rest.rb +7 -65
  132. data/lib/puppet/indirector/ssl_file.rb +3 -44
  133. data/lib/puppet/indirector/terminus.rb +1 -1
  134. data/lib/puppet/indirector/yaml.rb +4 -4
  135. data/lib/puppet/info_service/task_information_service.rb +7 -3
  136. data/lib/puppet/interface.rb +2 -3
  137. data/lib/puppet/interface/action.rb +2 -5
  138. data/lib/puppet/interface/face_collection.rb +3 -1
  139. data/lib/puppet/loaders.rb +2 -0
  140. data/lib/puppet/metatype/manager.rb +3 -5
  141. data/lib/puppet/module.rb +5 -31
  142. data/lib/puppet/module/task.rb +208 -30
  143. data/lib/puppet/module_tool.rb +2 -5
  144. data/lib/puppet/module_tool/applications.rb +0 -1
  145. data/lib/puppet/module_tool/applications/application.rb +1 -1
  146. data/lib/puppet/module_tool/applications/installer.rb +7 -8
  147. data/lib/puppet/module_tool/applications/uninstaller.rb +4 -5
  148. data/lib/puppet/module_tool/applications/unpacker.rb +1 -1
  149. data/lib/puppet/module_tool/applications/upgrader.rb +5 -6
  150. data/lib/puppet/module_tool/installed_modules.rb +2 -2
  151. data/lib/puppet/module_tool/local_tarball.rb +3 -3
  152. data/lib/puppet/module_tool/metadata.rb +1 -2
  153. data/lib/puppet/module_tool/shared_behaviors.rb +6 -6
  154. data/lib/puppet/module_tool/tar/mini.rb +2 -12
  155. data/lib/puppet/network/authconfig.rb +0 -13
  156. data/lib/puppet/network/format_support.rb +13 -8
  157. data/lib/puppet/network/formats.rb +93 -2
  158. data/lib/puppet/network/http.rb +0 -2
  159. data/lib/puppet/network/http/api.rb +1 -10
  160. data/lib/puppet/network/http/api/indirected_routes.rb +22 -16
  161. data/lib/puppet/network/http/api/master/v3/environment.rb +0 -3
  162. data/lib/puppet/network/http/connection.rb +14 -57
  163. data/lib/puppet/network/http/factory.rb +13 -7
  164. data/lib/puppet/network/http/handler.rb +59 -27
  165. data/lib/puppet/network/http/pool.rb +1 -7
  166. data/lib/puppet/network/http/site.rb +1 -1
  167. data/lib/puppet/network/resolver.rb +140 -67
  168. data/lib/puppet/node.rb +1 -2
  169. data/lib/puppet/node/environment.rb +5 -30
  170. data/lib/puppet/node/facts.rb +11 -1
  171. data/lib/puppet/parameter.rb +4 -7
  172. data/lib/puppet/parser/ast.rb +5 -9
  173. data/lib/puppet/parser/ast/branch.rb +3 -3
  174. data/lib/puppet/parser/ast/leaf.rb +5 -0
  175. data/lib/puppet/parser/ast/resourceparam.rb +1 -1
  176. data/lib/puppet/parser/catalog_compiler.rb +32 -0
  177. data/lib/puppet/parser/compiler.rb +2 -3
  178. data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +0 -2
  179. data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +0 -2
  180. data/lib/puppet/parser/environment_compiler.rb +0 -3
  181. data/lib/puppet/parser/functions.rb +48 -18
  182. data/lib/puppet/parser/functions/epp.rb +3 -3
  183. data/lib/puppet/parser/functions/filter.rb +1 -1
  184. data/lib/puppet/parser/functions/generate.rb +1 -1
  185. data/lib/puppet/parser/functions/inline_epp.rb +5 -5
  186. data/lib/puppet/parser/resource.rb +2 -4
  187. data/lib/puppet/parser/resource/param.rb +12 -11
  188. data/lib/puppet/parser/scope.rb +6 -8
  189. data/lib/puppet/parser/script_compiler.rb +7 -2
  190. data/lib/puppet/pops.rb +1 -0
  191. data/lib/puppet/pops/adaptable.rb +13 -7
  192. data/lib/puppet/pops/adapters.rb +18 -8
  193. data/lib/puppet/pops/evaluator/access_operator.rb +2 -2
  194. data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +4 -4
  195. data/lib/puppet/pops/evaluator/collectors/catalog_collector.rb +1 -1
  196. data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +1 -1
  197. data/lib/puppet/pops/evaluator/compare_operator.rb +3 -1
  198. data/lib/puppet/pops/evaluator/deferred_resolver.rb +127 -0
  199. data/lib/puppet/pops/evaluator/evaluator_impl.rb +17 -2
  200. data/lib/puppet/pops/evaluator/external_syntax_support.rb +2 -3
  201. data/lib/puppet/pops/evaluator/runtime3_converter.rb +23 -4
  202. data/lib/puppet/pops/evaluator/runtime3_support.rb +7 -8
  203. data/lib/puppet/pops/functions/dispatch.rb +6 -0
  204. data/lib/puppet/pops/issues.rb +9 -10
  205. data/lib/puppet/pops/loader/loader.rb +1 -1
  206. data/lib/puppet/pops/loader/loader_paths.rb +5 -3
  207. data/lib/puppet/pops/loader/module_loaders.rb +47 -21
  208. data/lib/puppet/pops/loader/null_loader.rb +60 -0
  209. data/lib/puppet/pops/loader/ruby_legacy_function_instantiator.rb +54 -0
  210. data/lib/puppet/pops/loader/static_loader.rb +0 -36
  211. data/lib/puppet/pops/loader/task_instantiator.rb +72 -44
  212. data/lib/puppet/pops/loaders.rb +21 -33
  213. data/lib/puppet/pops/lookup/hiera_config.rb +1 -2
  214. data/lib/puppet/pops/lookup/sub_lookup.rb +1 -1
  215. data/lib/puppet/pops/merge_strategy.rb +18 -22
  216. data/lib/puppet/pops/model/ast.pp +16 -0
  217. data/lib/puppet/pops/model/ast.rb +94 -0
  218. data/lib/puppet/pops/model/factory.rb +17 -38
  219. data/lib/puppet/pops/model/model_label_provider.rb +8 -1
  220. data/lib/puppet/pops/parser/egrammar.ra +14 -3
  221. data/lib/puppet/pops/parser/eparser.rb +1537 -1492
  222. data/lib/puppet/pops/parser/epp_support.rb +6 -2
  223. data/lib/puppet/pops/parser/heredoc_support.rb +8 -17
  224. data/lib/puppet/pops/parser/interpolation_support.rb +4 -4
  225. data/lib/puppet/pops/parser/lexer2.rb +2 -7
  226. data/lib/puppet/pops/parser/locator.rb +87 -107
  227. data/lib/puppet/pops/parser/parser_support.rb +2 -11
  228. data/lib/puppet/pops/parser/pn_parser.rb +16 -17
  229. data/lib/puppet/pops/pcore.rb +19 -8
  230. data/lib/puppet/pops/puppet_stack.rb +48 -51
  231. data/lib/puppet/pops/resource/resource_type_impl.rb +0 -2
  232. data/lib/puppet/pops/serialization.rb +3 -2
  233. data/lib/puppet/pops/serialization/from_data_converter.rb +4 -3
  234. data/lib/puppet/pops/serialization/to_data_converter.rb +3 -3
  235. data/lib/puppet/pops/serialization/to_stringified_converter.rb +226 -0
  236. data/lib/puppet/pops/types/iterable.rb +8 -34
  237. data/lib/puppet/pops/types/p_binary_type.rb +1 -2
  238. data/lib/puppet/pops/types/p_meta_type.rb +1 -1
  239. data/lib/puppet/pops/types/p_object_type.rb +3 -0
  240. data/lib/puppet/pops/types/p_sensitive_type.rb +1 -1
  241. data/lib/puppet/pops/types/p_timespan_type.rb +2 -2
  242. data/lib/puppet/pops/types/p_type_set_type.rb +0 -4
  243. data/lib/puppet/pops/types/string_converter.rb +12 -21
  244. data/lib/puppet/pops/types/type_calculator.rb +0 -24
  245. data/lib/puppet/pops/types/type_factory.rb +17 -0
  246. data/lib/puppet/pops/types/type_mismatch_describer.rb +1 -1
  247. data/lib/puppet/pops/types/types.rb +7 -32
  248. data/lib/puppet/pops/validation/checker4_0.rb +23 -33
  249. data/lib/puppet/pops/validation/tasks_checker.rb +47 -6
  250. data/lib/puppet/pops/validation/validator_factory_4_0.rb +7 -10
  251. data/lib/puppet/property.rb +1 -1
  252. data/lib/puppet/property/ensure.rb +1 -1
  253. data/lib/puppet/provider.rb +14 -2
  254. data/lib/puppet/provider/exec.rb +58 -59
  255. data/lib/puppet/provider/file/posix.rb +0 -5
  256. data/lib/puppet/provider/file/windows.rb +2 -50
  257. data/lib/puppet/provider/group/aix.rb +2 -18
  258. data/lib/puppet/provider/group/groupadd.rb +19 -19
  259. data/lib/puppet/provider/group/windows_adsi.rb +4 -11
  260. data/lib/puppet/provider/nameservice.rb +28 -11
  261. data/lib/puppet/provider/nameservice/directoryservice.rb +1 -1
  262. data/lib/puppet/provider/nameservice/pw.rb +2 -2
  263. data/lib/puppet/provider/package.rb +0 -2
  264. data/lib/puppet/provider/package/aix.rb +2 -17
  265. data/lib/puppet/provider/package/apt.rb +3 -14
  266. data/lib/puppet/provider/package/dnf.rb +3 -3
  267. data/lib/puppet/provider/package/dpkg.rb +7 -18
  268. data/lib/puppet/provider/package/fink.rb +3 -20
  269. data/lib/puppet/provider/package/gem.rb +43 -105
  270. data/lib/puppet/provider/package/openbsd.rb +2 -14
  271. data/lib/puppet/provider/package/pip.rb +108 -160
  272. data/lib/puppet/provider/package/pip3.rb +1 -1
  273. data/lib/puppet/provider/package/pkg.rb +5 -18
  274. data/lib/puppet/provider/package/pkgdmg.rb +1 -1
  275. data/lib/puppet/provider/package/pkgng.rb +4 -16
  276. data/lib/puppet/provider/package/portage.rb +6 -6
  277. data/lib/puppet/provider/package/puppet_gem.rb +2 -7
  278. data/lib/puppet/provider/package/rpm.rb +33 -82
  279. data/lib/puppet/provider/package/windows.rb +2 -6
  280. data/lib/puppet/provider/package/windows/exe_package.rb +10 -16
  281. data/lib/puppet/provider/package/windows/msi_package.rb +0 -8
  282. data/lib/puppet/provider/package/windows/package.rb +2 -10
  283. data/lib/puppet/provider/package/yum.rb +25 -37
  284. data/lib/puppet/provider/package/zypper.rb +0 -1
  285. data/lib/puppet/provider/parsedfile.rb +5 -26
  286. data/lib/puppet/provider/service/base.rb +1 -1
  287. data/lib/puppet/provider/service/daemontools.rb +9 -9
  288. data/lib/puppet/provider/service/debian.rb +1 -0
  289. data/lib/puppet/provider/service/launchd.rb +8 -39
  290. data/lib/puppet/provider/service/openbsd.rb +1 -1
  291. data/lib/puppet/provider/service/rcng.rb +2 -2
  292. data/lib/puppet/provider/service/runit.rb +8 -2
  293. data/lib/puppet/provider/service/smf.rb +0 -54
  294. data/lib/puppet/provider/service/systemd.rb +24 -35
  295. data/lib/puppet/provider/service/upstart.rb +1 -3
  296. data/lib/puppet/provider/service/windows.rb +3 -23
  297. data/lib/puppet/provider/user/aix.rb +2 -48
  298. data/lib/puppet/provider/user/directoryservice.rb +8 -45
  299. data/lib/puppet/provider/user/hpux.rb +1 -1
  300. data/lib/puppet/provider/user/pw.rb +3 -12
  301. data/lib/puppet/provider/user/user_role_add.rb +1 -5
  302. data/lib/puppet/provider/user/useradd.rb +44 -74
  303. data/lib/puppet/provider/user/windows_adsi.rb +0 -7
  304. data/lib/puppet/reference/indirection.rb +2 -2
  305. data/lib/puppet/reference/metaparameter.rb +3 -1
  306. data/lib/puppet/reference/providers.rb +1 -1
  307. data/lib/puppet/reference/type.rb +9 -3
  308. data/lib/puppet/reports.rb +3 -3
  309. data/lib/puppet/resource.rb +22 -22
  310. data/lib/puppet/resource/catalog.rb +8 -14
  311. data/lib/puppet/resource/type.rb +1 -10
  312. data/lib/puppet/rest/client.rb +83 -0
  313. data/lib/puppet/rest/errors.rb +14 -0
  314. data/lib/puppet/rest/response.rb +34 -0
  315. data/lib/puppet/rest/route.rb +84 -0
  316. data/lib/puppet/rest/routes.rb +154 -0
  317. data/lib/puppet/rest/ssl_context.rb +13 -0
  318. data/lib/puppet/settings.rb +9 -54
  319. data/lib/puppet/settings/config_file.rb +1 -2
  320. data/lib/puppet/settings/environment_conf.rb +0 -1
  321. data/lib/puppet/settings/file_setting.rb +1 -1
  322. data/lib/puppet/settings/server_list_setting.rb +0 -9
  323. data/lib/puppet/ssl.rb +0 -1
  324. data/lib/puppet/ssl/base.rb +1 -9
  325. data/lib/puppet/ssl/certificate.rb +7 -4
  326. data/lib/puppet/ssl/certificate_request.rb +6 -14
  327. data/lib/puppet/ssl/certificate_request_attributes.rb +1 -1
  328. data/lib/puppet/ssl/host.rb +400 -174
  329. data/lib/puppet/ssl/key.rb +1 -5
  330. data/lib/puppet/ssl/oids.rb +3 -3
  331. data/lib/puppet/ssl/validator/default_validator.rb +33 -49
  332. data/lib/puppet/test/test_helper.rb +12 -18
  333. data/lib/puppet/transaction.rb +7 -12
  334. data/lib/puppet/transaction/event.rb +37 -14
  335. data/lib/puppet/transaction/event_manager.rb +3 -11
  336. data/lib/puppet/transaction/persistence.rb +1 -1
  337. data/lib/puppet/transaction/report.rb +1 -1
  338. data/lib/puppet/transaction/resource_harness.rb +2 -5
  339. data/lib/puppet/type.rb +7 -10
  340. data/lib/puppet/type/exec.rb +16 -50
  341. data/lib/puppet/type/file.rb +7 -16
  342. data/lib/puppet/type/file/content.rb +2 -3
  343. data/lib/puppet/type/file/data_sync.rb +1 -5
  344. data/lib/puppet/type/file/mode.rb +2 -7
  345. data/lib/puppet/type/file/source.rb +2 -1
  346. data/lib/puppet/type/filebucket.rb +8 -12
  347. data/lib/puppet/type/group.rb +3 -33
  348. data/lib/puppet/type/notify.rb +2 -3
  349. data/lib/puppet/type/package.rb +18 -154
  350. data/lib/puppet/type/resources.rb +2 -12
  351. data/lib/puppet/type/schedule.rb +34 -96
  352. data/lib/puppet/type/service.rb +10 -9
  353. data/lib/puppet/type/tidy.rb +1 -1
  354. data/lib/puppet/type/user.rb +30 -14
  355. data/lib/puppet/util.rb +28 -52
  356. data/lib/puppet/util/autoload.rb +62 -56
  357. data/lib/puppet/util/character_encoding.rb +0 -22
  358. data/lib/puppet/util/classgen.rb +0 -6
  359. data/lib/puppet/util/command_line.rb +4 -7
  360. data/lib/puppet/util/command_line/trollop.rb +1 -1
  361. data/lib/puppet/util/connection.rb +74 -0
  362. data/lib/puppet/util/execution.rb +7 -22
  363. data/lib/puppet/util/feature.rb +63 -41
  364. data/lib/puppet/util/fileparsing.rb +27 -5
  365. data/lib/puppet/util/filetype.rb +8 -56
  366. data/lib/puppet/util/http_proxy.rb +18 -27
  367. data/lib/puppet/util/instance_loader.rb +3 -21
  368. data/lib/puppet/util/json.rb +0 -8
  369. data/lib/puppet/util/ldap/connection.rb +7 -7
  370. data/lib/puppet/util/log.rb +3 -8
  371. data/lib/puppet/util/log/destinations.rb +13 -5
  372. data/lib/puppet/util/logging.rb +19 -31
  373. data/lib/puppet/util/metric.rb +2 -2
  374. data/lib/puppet/util/monkey_patches.rb +1 -1
  375. data/lib/puppet/util/network_device/base.rb +1 -1
  376. data/lib/puppet/util/pidlock.rb +3 -23
  377. data/lib/puppet/util/platform.rb +3 -0
  378. data/lib/puppet/util/plist.rb +0 -6
  379. data/lib/puppet/util/posix.rb +0 -15
  380. data/lib/puppet/util/provider_features.rb +6 -7
  381. data/lib/puppet/util/rdoc.rb +2 -2
  382. data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +1 -1
  383. data/lib/puppet/util/reference.rb +8 -7
  384. data/lib/puppet/util/resource_template.rb +1 -1
  385. data/lib/puppet/util/rubygems.rb +1 -13
  386. data/lib/puppet/util/run_mode.rb +1 -1
  387. data/lib/puppet/util/selinux.rb +3 -9
  388. data/lib/puppet/util/ssl.rb +40 -1
  389. data/lib/puppet/util/storage.rb +1 -13
  390. data/lib/puppet/util/suidmanager.rb +7 -5
  391. data/lib/puppet/util/tag_set.rb +1 -1
  392. data/lib/puppet/util/tagging.rb +1 -1
  393. data/lib/puppet/util/windows.rb +15 -0
  394. data/lib/puppet/util/windows/adsi.rb +7 -116
  395. data/lib/puppet/util/windows/api_types.rb +33 -46
  396. data/lib/puppet/util/windows/eventlog.rb +6 -1
  397. data/lib/puppet/util/windows/principal.rb +6 -8
  398. data/lib/puppet/util/windows/process.rb +3 -94
  399. data/lib/puppet/util/windows/registry.rb +14 -46
  400. data/lib/puppet/util/windows/security.rb +2 -40
  401. data/lib/puppet/util/windows/service.rb +72 -431
  402. data/lib/puppet/util/windows/sid.rb +3 -4
  403. data/lib/puppet/util/windows/user.rb +9 -17
  404. data/lib/puppet/util/yaml.rb +41 -5
  405. data/lib/puppet/vendor.rb +1 -1
  406. data/lib/puppet/version.rb +1 -1
  407. data/lib/puppet_pal.rb +246 -23
  408. data/locales/ja/puppet.po +11128 -0
  409. data/locales/puppet.pot +1321 -2527
  410. data/man/man5/puppet.conf.5 +31 -191
  411. data/man/man8/puppet-agent.8 +2 -2
  412. data/man/man8/puppet-apply.8 +1 -1
  413. data/man/man8/puppet-catalog.8 +1 -1
  414. data/man/man8/puppet-config.8 +3 -3
  415. data/man/man8/puppet-describe.8 +1 -1
  416. data/man/man8/puppet-device.8 +19 -23
  417. data/man/man8/puppet-doc.8 +1 -1
  418. data/man/man8/puppet-epp.8 +1 -1
  419. data/man/man8/puppet-facts.8 +1 -1
  420. data/man/man8/puppet-filebucket.8 +2 -21
  421. data/man/man8/puppet-generate.8 +1 -1
  422. data/man/man8/puppet-help.8 +1 -1
  423. data/man/man8/puppet-key.8 +1 -7
  424. data/man/man8/puppet-lookup.8 +1 -1
  425. data/man/man8/puppet-man.8 +1 -1
  426. data/man/man8/puppet-module.8 +10 -100
  427. data/man/man8/puppet-node.8 +4 -7
  428. data/man/man8/puppet-parser.8 +1 -1
  429. data/man/man8/puppet-plugin.8 +1 -1
  430. data/man/man8/puppet-report.8 +1 -1
  431. data/man/man8/puppet-resource.8 +1 -1
  432. data/man/man8/puppet-script.8 +1 -1
  433. data/man/man8/puppet-ssl.8 +28 -0
  434. data/man/man8/puppet-status.8 +1 -1
  435. data/man/man8/puppet.8 +12 -3
  436. data/spec/fixtures/unit/functions/hiera/hiera/backend/hieraspec_backend.rb +22 -0
  437. data/spec/fixtures/unit/functions/lookup/hiera/backend/custom_backend.rb +18 -0
  438. data/spec/fixtures/unit/functions/lookup/hiera/backend/other_backend.rb +7 -0
  439. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/manifests/init.pp +6 -6
  440. data/spec/fixtures/unit/provider/package/pkgng/pkg.info +0 -1
  441. data/spec/fixtures/unit/provider/package/pkgng/pkg.version +0 -2
  442. data/spec/fixtures/unit/provider/service/systemd/list_unit_files_services +0 -9
  443. data/spec/integration/agent/logging_spec.rb +9 -7
  444. data/spec/integration/application/apply_spec.rb +31 -26
  445. data/spec/integration/application/doc_spec.rb +2 -1
  446. data/spec/integration/application/lookup_spec.rb +5 -5
  447. data/spec/integration/configurer_spec.rb +8 -76
  448. data/spec/integration/data_binding_spec.rb +1 -1
  449. data/spec/integration/defaults_spec.rb +13 -16
  450. data/spec/integration/directory_environments_spec.rb +1 -1
  451. data/spec/integration/faces/config_spec.rb +4 -3
  452. data/spec/integration/faces/documentation_spec.rb +1 -0
  453. data/spec/integration/faces/plugin_spec.rb +49 -29
  454. data/spec/integration/file_bucket/file_spec.rb +4 -19
  455. data/spec/integration/file_serving/content_spec.rb +1 -0
  456. data/spec/integration/file_serving/fileset_spec.rb +1 -0
  457. data/spec/integration/file_serving/metadata_spec.rb +1 -0
  458. data/spec/integration/file_serving/terminus_helper_spec.rb +1 -0
  459. data/spec/integration/file_system/uniquefile_spec.rb +26 -29
  460. data/spec/integration/indirector/catalog/compiler_spec.rb +11 -10
  461. data/spec/integration/indirector/direct_file_server_spec.rb +1 -1
  462. data/spec/integration/indirector/facts/facter_spec.rb +8 -22
  463. data/spec/integration/indirector/file_content/file_server_spec.rb +8 -7
  464. data/spec/integration/indirector/file_metadata/file_server_spec.rb +8 -7
  465. data/spec/integration/network/authconfig_spec.rb +24 -23
  466. data/spec/integration/network/formats_spec.rb +1 -0
  467. data/spec/integration/network/http/api/indirected_routes_spec.rb +6 -34
  468. data/spec/integration/node/environment_spec.rb +2 -1
  469. data/spec/integration/node/facts_spec.rb +10 -9
  470. data/spec/integration/node_spec.rb +7 -10
  471. data/spec/integration/parser/catalog_spec.rb +8 -6
  472. data/spec/integration/parser/collection_spec.rb +9 -4
  473. data/spec/integration/parser/compiler_spec.rb +7 -25
  474. data/spec/integration/parser/scope_spec.rb +1 -1
  475. data/spec/integration/parser/undef_param_spec.rb +1 -1
  476. data/spec/integration/provider/service/init_spec.rb +9 -6
  477. data/spec/integration/provider/service/systemd_spec.rb +14 -11
  478. data/spec/integration/provider/service/windows_spec.rb +11 -8
  479. data/spec/integration/reference/providers_spec.rb +7 -0
  480. data/spec/integration/reports_spec.rb +2 -1
  481. data/spec/integration/resource/catalog_spec.rb +17 -14
  482. data/spec/integration/resource/type_collection_spec.rb +5 -4
  483. data/spec/integration/ssl/certificate_request_spec.rb +1 -2
  484. data/spec/integration/ssl/host_spec.rb +17 -24
  485. data/spec/integration/ssl/key_spec.rb +7 -2
  486. data/spec/integration/test/test_helper_spec.rb +32 -0
  487. data/spec/integration/transaction/report_spec.rb +14 -9
  488. data/spec/integration/type/exec_spec.rb +2 -1
  489. data/spec/integration/type/file_spec.rb +38 -46
  490. data/spec/integration/type/package_spec.rb +25 -21
  491. data/spec/integration/type/tidy_spec.rb +2 -1
  492. data/spec/integration/type_spec.rb +1 -0
  493. data/spec/integration/util/autoload_spec.rb +11 -7
  494. data/spec/integration/util/execution_spec.rb +5 -32
  495. data/spec/integration/util/rdoc/parser_spec.rb +14 -23
  496. data/spec/integration/util/settings_spec.rb +2 -1
  497. data/spec/integration/util/windows/adsi_spec.rb +8 -11
  498. data/spec/integration/util/windows/principal_spec.rb +2 -1
  499. data/spec/integration/util/windows/process_spec.rb +9 -7
  500. data/spec/integration/util/windows/registry_spec.rb +46 -127
  501. data/spec/integration/util/windows/security_spec.rb +15 -16
  502. data/spec/integration/util/windows/user_spec.rb +29 -66
  503. data/spec/integration/util_spec.rb +10 -7
  504. data/spec/lib/matchers/json.rb +12 -18
  505. data/{lib/puppet/ssl → spec/lib/puppet}/certificate_factory.rb +5 -6
  506. data/spec/lib/puppet/test_ca.rb +109 -0
  507. data/spec/lib/puppet_spec/compiler.rb +28 -1
  508. data/spec/lib/puppet_spec/files.rb +29 -23
  509. data/spec/lib/puppet_spec/module_tool/shared_functions.rb +1 -1
  510. data/spec/lib/puppet_spec/modules.rb +11 -1
  511. data/spec/lib/puppet_spec/scope.rb +2 -1
  512. data/spec/lib/puppet_spec/ssl.rb +265 -0
  513. data/spec/lib/puppet_spec/validators.rb +37 -0
  514. data/spec/shared_behaviours/all_parsedfile_providers.rb +1 -1
  515. data/spec/shared_behaviours/file_server_terminus.rb +9 -8
  516. data/spec/shared_behaviours/file_serving.rb +8 -6
  517. data/spec/shared_behaviours/file_serving_model.rb +5 -22
  518. data/spec/shared_behaviours/hiera_indirections.rb +4 -3
  519. data/spec/shared_behaviours/iterative_functions.rb +1 -0
  520. data/spec/shared_behaviours/memory_terminus.rb +2 -2
  521. data/spec/shared_behaviours/path_parameters.rb +1 -1
  522. data/spec/shared_contexts/types_setup.rb +0 -2
  523. data/spec/shared_examples/rhel_package_provider.rb +70 -112
  524. data/spec/spec_helper.rb +1 -15
  525. data/spec/unit/agent/disabler_spec.rb +5 -4
  526. data/spec/unit/agent/locker_spec.rb +13 -12
  527. data/spec/unit/agent_spec.rb +102 -105
  528. data/spec/unit/application/agent_spec.rb +95 -114
  529. data/spec/unit/application/apply_spec.rb +92 -119
  530. data/spec/unit/application/config_spec.rb +1 -0
  531. data/spec/unit/application/describe_spec.rb +7 -6
  532. data/spec/unit/application/device_spec.rb +180 -181
  533. data/spec/unit/application/doc_spec.rb +46 -44
  534. data/spec/unit/application/face_base_spec.rb +62 -61
  535. data/spec/unit/application/facts_spec.rb +4 -3
  536. data/spec/unit/application/filebucket_spec.rb +74 -66
  537. data/spec/unit/application/indirection_base_spec.rb +6 -8
  538. data/spec/unit/application/lookup_spec.rb +44 -37
  539. data/spec/unit/application/resource_spec.rb +48 -42
  540. data/spec/unit/application/ssl_spec.rb +322 -0
  541. data/spec/unit/application_spec.rb +108 -90
  542. data/spec/unit/capability_spec.rb +15 -16
  543. data/spec/unit/{ssl/certificate_factory_spec.rb → certificate_factory_spec.rb} +13 -20
  544. data/spec/unit/configurer/downloader_spec.rb +22 -31
  545. data/spec/unit/configurer/fact_handler_spec.rb +7 -2
  546. data/spec/unit/configurer/plugin_handler_spec.rb +8 -41
  547. data/spec/unit/configurer_spec.rb +475 -520
  548. data/spec/unit/confine/exists_spec.rb +15 -17
  549. data/spec/unit/confine/false_spec.rb +6 -32
  550. data/spec/unit/confine/feature_spec.rb +5 -7
  551. data/spec/unit/confine/true_spec.rb +6 -32
  552. data/spec/unit/confine/variable_spec.rb +15 -14
  553. data/spec/unit/confine_collection_spec.rb +29 -28
  554. data/spec/unit/confine_spec.rb +14 -13
  555. data/spec/unit/confiner_spec.rb +11 -10
  556. data/spec/unit/context/trusted_information_spec.rb +4 -3
  557. data/spec/unit/daemon_spec.rb +38 -35
  558. data/spec/unit/data_providers/function_data_provider_spec.rb +1 -0
  559. data/spec/unit/data_providers/hiera_data_provider_spec.rb +1 -0
  560. data/spec/unit/datatypes_spec.rb +4 -3
  561. data/spec/unit/defaults_spec.rb +61 -32
  562. data/spec/unit/environments_spec.rb +7 -7
  563. data/spec/unit/etc_spec.rb +29 -52
  564. data/spec/unit/external/pson_spec.rb +1 -0
  565. data/spec/unit/face/catalog_spec.rb +1 -0
  566. data/spec/unit/face/config_spec.rb +35 -31
  567. data/spec/unit/face/epp_face_spec.rb +4 -3
  568. data/spec/unit/face/facts_spec.rb +6 -14
  569. data/spec/unit/face/generate_spec.rb +5 -4
  570. data/spec/unit/face/help_spec.rb +8 -7
  571. data/spec/unit/face/key_spec.rb +1 -0
  572. data/spec/unit/face/man_spec.rb +2 -1
  573. data/spec/unit/face/module/install_spec.rb +5 -3
  574. data/spec/unit/face/module/list_spec.rb +12 -62
  575. data/spec/unit/face/module/search_spec.rb +9 -11
  576. data/spec/unit/face/module/uninstall_spec.rb +8 -4
  577. data/spec/unit/face/node_spec.rb +30 -52
  578. data/spec/unit/face/parser_spec.rb +3 -3
  579. data/spec/unit/face/plugin_spec.rb +9 -44
  580. data/spec/unit/face/status_spec.rb +1 -0
  581. data/spec/unit/file_bucket/dipper_spec.rb +24 -28
  582. data/spec/unit/file_bucket/file_spec.rb +2 -0
  583. data/spec/unit/file_serving/base_spec.rb +18 -20
  584. data/spec/unit/file_serving/configuration/parser_spec.rb +28 -27
  585. data/spec/unit/file_serving/configuration_spec.rb +66 -63
  586. data/spec/unit/file_serving/content_spec.rb +11 -10
  587. data/spec/unit/file_serving/fileset_spec.rb +58 -63
  588. data/spec/unit/file_serving/http_metadata_spec.rb +7 -8
  589. data/spec/unit/file_serving/metadata_spec.rb +40 -40
  590. data/spec/unit/file_serving/mount/file_spec.rb +32 -31
  591. data/spec/unit/file_serving/mount/locales_spec.rb +26 -25
  592. data/spec/unit/file_serving/mount/modules_spec.rb +15 -14
  593. data/spec/unit/file_serving/mount/pluginfacts_spec.rb +26 -25
  594. data/spec/unit/file_serving/mount/plugins_spec.rb +26 -25
  595. data/spec/unit/file_serving/mount/tasks_spec.rb +15 -14
  596. data/spec/unit/file_serving/mount_spec.rb +1 -0
  597. data/spec/unit/file_serving/terminus_helper_spec.rb +42 -37
  598. data/spec/unit/file_serving/terminus_selector_spec.rb +13 -12
  599. data/spec/unit/file_system/path_pattern_spec.rb +1 -1
  600. data/spec/unit/file_system/uniquefile_spec.rb +6 -17
  601. data/spec/unit/file_system_spec.rb +9 -6
  602. data/spec/unit/forge/errors_spec.rb +1 -1
  603. data/spec/unit/forge/forge_spec.rb +16 -15
  604. data/spec/unit/forge/module_release_spec.rb +18 -18
  605. data/spec/unit/forge/repository_spec.rb +30 -27
  606. data/spec/unit/forge_spec.rb +11 -15
  607. data/spec/unit/functions/abs_spec.rb +70 -0
  608. data/spec/unit/functions/binary_file_spec.rb +3 -3
  609. data/spec/unit/functions/call_spec.rb +59 -5
  610. data/spec/unit/functions/camelcase_spec.rb +34 -0
  611. data/spec/unit/functions/capitalize_spec.rb +34 -0
  612. data/spec/unit/functions/ceiling_spec.rb +65 -0
  613. data/spec/unit/functions/chomp_spec.rb +46 -0
  614. data/spec/unit/functions/chop_spec.rb +38 -0
  615. data/spec/unit/functions/compare_spec.rb +147 -0
  616. data/spec/unit/functions/contain_spec.rb +2 -0
  617. data/spec/unit/functions/convert_to_spec.rb +3 -0
  618. data/spec/unit/functions/defined_spec.rb +1 -0
  619. data/spec/unit/functions/downcase_spec.rb +34 -0
  620. data/spec/unit/functions/epp_spec.rb +2 -2
  621. data/spec/unit/functions/filter_spec.rb +4 -4
  622. data/spec/unit/functions/find_file_spec.rb +7 -7
  623. data/spec/unit/functions/floor_spec.rb +65 -0
  624. data/spec/unit/functions/get_spec.rb +135 -0
  625. data/spec/unit/functions/getvar_spec.rb +121 -0
  626. data/spec/unit/functions/hiera_spec.rb +14 -48
  627. data/spec/unit/functions/include_spec.rb +4 -0
  628. data/spec/unit/functions/lookup_fixture_spec.rb +1 -0
  629. data/spec/unit/functions/lookup_spec.rb +37 -62
  630. data/spec/unit/functions/lstrip_spec.rb +30 -0
  631. data/spec/unit/functions/match_spec.rb +3 -4
  632. data/spec/unit/functions/max_spec.rb +129 -0
  633. data/spec/unit/functions/min_spec.rb +129 -0
  634. data/spec/unit/functions/module_directory_spec.rb +12 -12
  635. data/spec/unit/functions/new_spec.rb +0 -15
  636. data/spec/unit/functions/regsubst_spec.rb +3 -4
  637. data/spec/unit/functions/require_spec.rb +3 -0
  638. data/spec/unit/functions/round_spec.rb +41 -0
  639. data/spec/unit/functions/rstrip_spec.rb +30 -0
  640. data/spec/unit/functions/shared.rb +8 -5
  641. data/spec/unit/functions/size_spec.rb +50 -0
  642. data/spec/unit/functions/sort_spec.rb +79 -0
  643. data/spec/unit/functions/split_spec.rb +3 -4
  644. data/spec/unit/functions/strip_spec.rb +30 -0
  645. data/spec/unit/functions/upcase_spec.rb +34 -0
  646. data/spec/unit/functions/versioncmp_spec.rb +4 -4
  647. data/spec/unit/functions4_spec.rb +78 -51
  648. data/spec/unit/gettext/config_spec.rb +4 -4
  649. data/spec/unit/gettext/module_loading_spec.rb +7 -7
  650. data/spec/unit/graph/rb_tree_map_spec.rb +2 -0
  651. data/spec/unit/graph/relationship_graph_spec.rb +2 -1
  652. data/spec/unit/graph/simple_graph_spec.rb +52 -11
  653. data/spec/unit/hiera/scope_spec.rb +0 -7
  654. data/spec/unit/hiera_puppet_spec.rb +20 -20
  655. data/spec/unit/indirector/catalog/compiler_spec.rb +166 -183
  656. data/spec/unit/indirector/catalog/json_spec.rb +2 -1
  657. data/spec/unit/indirector/catalog/msgpack_spec.rb +1 -0
  658. data/spec/unit/indirector/catalog/rest_spec.rb +1 -0
  659. data/spec/unit/indirector/catalog/store_configs_spec.rb +1 -0
  660. data/spec/unit/indirector/catalog/yaml_spec.rb +1 -0
  661. data/spec/unit/indirector/certificate/file_spec.rb +1 -8
  662. data/spec/unit/indirector/certificate/rest_spec.rb +10 -8
  663. data/spec/unit/indirector/certificate_request/file_spec.rb +1 -0
  664. data/spec/unit/indirector/certificate_request/rest_spec.rb +1 -0
  665. data/spec/unit/indirector/direct_file_server_spec.rb +49 -57
  666. data/spec/unit/indirector/envelope_spec.rb +2 -1
  667. data/spec/unit/indirector/exec_spec.rb +31 -26
  668. data/spec/unit/indirector/face_spec.rb +9 -9
  669. data/spec/unit/indirector/facts/facter_spec.rb +43 -37
  670. data/spec/unit/indirector/facts/network_device_spec.rb +9 -8
  671. data/spec/unit/indirector/facts/rest_spec.rb +8 -7
  672. data/spec/unit/indirector/facts/store_configs_spec.rb +1 -0
  673. data/spec/unit/indirector/facts/yaml_spec.rb +90 -77
  674. data/spec/unit/indirector/file_bucket_file/file_spec.rb +13 -9
  675. data/spec/unit/indirector/file_bucket_file/rest_spec.rb +1 -0
  676. data/spec/unit/indirector/file_bucket_file/selector_spec.rb +5 -4
  677. data/spec/unit/indirector/file_content/file_server_spec.rb +1 -0
  678. data/spec/unit/indirector/file_content/file_spec.rb +1 -0
  679. data/spec/unit/indirector/file_content/rest_spec.rb +1 -0
  680. data/spec/unit/indirector/file_content/selector_spec.rb +1 -0
  681. data/spec/unit/indirector/file_metadata/file_server_spec.rb +1 -0
  682. data/spec/unit/indirector/file_metadata/file_spec.rb +13 -12
  683. data/spec/unit/indirector/file_metadata/rest_spec.rb +1 -0
  684. data/spec/unit/indirector/file_metadata/selector_spec.rb +1 -0
  685. data/spec/unit/indirector/file_server_spec.rb +145 -145
  686. data/spec/unit/indirector/indirection_spec.rb +226 -249
  687. data/spec/unit/indirector/json_spec.rb +9 -7
  688. data/spec/unit/indirector/key/file_spec.rb +22 -38
  689. data/spec/unit/indirector/memory_spec.rb +7 -6
  690. data/spec/unit/indirector/msgpack_spec.rb +9 -7
  691. data/spec/unit/indirector/node/exec_spec.rb +43 -22
  692. data/spec/unit/indirector/node/memory_spec.rb +4 -2
  693. data/spec/unit/indirector/node/msgpack_spec.rb +1 -0
  694. data/spec/unit/indirector/node/plain_spec.rb +4 -2
  695. data/spec/unit/indirector/node/rest_spec.rb +1 -0
  696. data/spec/unit/indirector/node/store_configs_spec.rb +1 -0
  697. data/spec/unit/indirector/node/yaml_spec.rb +1 -0
  698. data/spec/unit/indirector/none_spec.rb +5 -5
  699. data/spec/unit/indirector/plain_spec.rb +8 -7
  700. data/spec/unit/indirector/report/msgpack_spec.rb +1 -0
  701. data/spec/unit/indirector/report/processor_spec.rb +22 -21
  702. data/spec/unit/indirector/report/rest_spec.rb +12 -11
  703. data/spec/unit/indirector/report/yaml_spec.rb +1 -0
  704. data/spec/unit/indirector/request_spec.rb +18 -15
  705. data/spec/unit/indirector/resource/ral_spec.rb +55 -47
  706. data/spec/unit/indirector/resource/store_configs_spec.rb +1 -0
  707. data/spec/unit/indirector/rest_spec.rb +110 -113
  708. data/spec/unit/indirector/ssl_file_spec.rb +100 -119
  709. data/spec/unit/indirector/status/local_spec.rb +1 -0
  710. data/spec/unit/indirector/status/rest_spec.rb +1 -0
  711. data/spec/unit/indirector/store_configs_spec.rb +1 -0
  712. data/spec/unit/indirector/terminus_spec.rb +30 -32
  713. data/spec/unit/indirector/yaml_spec.rb +90 -68
  714. data/spec/unit/indirector_spec.rb +2 -1
  715. data/spec/unit/info_service_spec.rb +144 -10
  716. data/spec/unit/interface/action_builder_spec.rb +1 -0
  717. data/spec/unit/interface/action_manager_spec.rb +1 -0
  718. data/spec/unit/interface/action_spec.rb +3 -2
  719. data/spec/unit/interface/documentation_spec.rb +1 -0
  720. data/spec/unit/interface/face_collection_spec.rb +12 -19
  721. data/spec/unit/interface_spec.rb +3 -3
  722. data/spec/unit/man_spec.rb +4 -3
  723. data/spec/unit/module_spec.rb +52 -102
  724. data/spec/unit/module_tool/applications/installer_spec.rb +13 -12
  725. data/spec/unit/module_tool/applications/searcher_spec.rb +3 -3
  726. data/spec/unit/module_tool/applications/uninstaller_spec.rb +2 -1
  727. data/spec/unit/module_tool/applications/unpacker_spec.rb +13 -13
  728. data/spec/unit/module_tool/applications/upgrader_spec.rb +6 -6
  729. data/spec/unit/module_tool/install_directory_spec.rb +8 -8
  730. data/spec/unit/module_tool/installed_modules_spec.rb +3 -3
  731. data/spec/unit/module_tool/tar/gnu_spec.rb +6 -6
  732. data/spec/unit/module_tool/tar/mini_spec.rb +12 -12
  733. data/spec/unit/module_tool/tar_spec.rb +13 -12
  734. data/spec/unit/module_tool_spec.rb +12 -29
  735. data/spec/unit/network/auth_config_parser_spec.rb +13 -11
  736. data/spec/unit/network/authconfig_spec.rb +18 -17
  737. data/spec/unit/network/authorization_spec.rb +5 -4
  738. data/spec/unit/network/authstore_spec.rb +1 -0
  739. data/spec/unit/network/format_handler_spec.rb +1 -0
  740. data/spec/unit/network/format_spec.rb +10 -9
  741. data/spec/unit/network/format_support_spec.rb +29 -28
  742. data/spec/unit/network/formats_spec.rb +31 -4
  743. data/spec/unit/network/http/api/indirected_routes_spec.rb +41 -51
  744. data/spec/unit/network/http/api/master/v3/authorization_spec.rb +7 -9
  745. data/spec/unit/network/http/api/master/v3/environment_spec.rb +1 -2
  746. data/spec/unit/network/http/api/master/v3/environments_spec.rb +7 -6
  747. data/spec/unit/network/http/api_spec.rb +2 -26
  748. data/spec/unit/network/http/compression_spec.rb +28 -24
  749. data/spec/unit/network/http/connection_spec.rb +122 -72
  750. data/spec/unit/network/http/factory_spec.rb +11 -40
  751. data/spec/unit/network/http/handler_spec.rb +18 -9
  752. data/spec/unit/network/http/nocache_pool_spec.rb +7 -6
  753. data/spec/unit/network/http/pool_spec.rb +29 -60
  754. data/spec/unit/network/http/request_spec.rb +2 -0
  755. data/spec/unit/network/http/response_spec.rb +13 -11
  756. data/spec/unit/network/http/route_spec.rb +1 -0
  757. data/spec/unit/network/http/session_spec.rb +2 -1
  758. data/spec/unit/network/http/site_spec.rb +1 -0
  759. data/spec/unit/network/http_pool_spec.rb +9 -18
  760. data/spec/unit/network/http_spec.rb +1 -0
  761. data/spec/unit/network/resolver_spec.rb +104 -28
  762. data/spec/unit/network/rights_spec.rb +53 -52
  763. data/spec/unit/node/environment_spec.rb +17 -18
  764. data/spec/unit/node/facts_spec.rb +21 -6
  765. data/spec/unit/node_spec.rb +23 -17
  766. data/spec/unit/other/selinux_spec.rb +1 -71
  767. data/spec/unit/parameter/boolean_spec.rb +2 -1
  768. data/spec/unit/parameter/package_options_spec.rb +2 -1
  769. data/spec/unit/parameter/path_spec.rb +1 -0
  770. data/spec/unit/parameter/value_collection_spec.rb +1 -0
  771. data/spec/unit/parameter/value_spec.rb +1 -0
  772. data/spec/unit/parameter_spec.rb +9 -9
  773. data/spec/unit/parser/ast/block_expression_spec.rb +8 -6
  774. data/spec/unit/parser/ast/leaf_spec.rb +21 -20
  775. data/spec/unit/parser/compiler_spec.rb +96 -84
  776. data/spec/unit/parser/environment_compiler_spec.rb +16 -23
  777. data/spec/unit/parser/files_spec.rb +1 -0
  778. data/spec/unit/parser/functions/create_resources_spec.rb +1 -1
  779. data/spec/unit/parser/functions/digest_spec.rb +1 -4
  780. data/spec/unit/parser/functions/fail_spec.rb +2 -5
  781. data/spec/unit/parser/functions/file_spec.rb +14 -17
  782. data/spec/unit/parser/functions/fqdn_rand_spec.rb +6 -5
  783. data/spec/unit/parser/functions/generate_spec.rb +37 -38
  784. data/spec/unit/parser/functions/inline_template_spec.rb +1 -4
  785. data/spec/unit/parser/functions/regsubst_spec.rb +1 -4
  786. data/spec/unit/parser/functions/scanf_spec.rb +1 -4
  787. data/spec/unit/parser/functions/shellquote_spec.rb +1 -0
  788. data/spec/unit/parser/functions/split_spec.rb +1 -4
  789. data/spec/unit/parser/functions/sprintf_spec.rb +1 -4
  790. data/spec/unit/parser/functions/tag_spec.rb +2 -5
  791. data/spec/unit/parser/functions/tagged_spec.rb +3 -6
  792. data/spec/unit/parser/functions/template_spec.rb +13 -17
  793. data/spec/unit/parser/functions/versioncmp_spec.rb +2 -5
  794. data/spec/unit/parser/functions_spec.rb +29 -3
  795. data/spec/unit/parser/relationship_spec.rb +1 -0
  796. data/spec/unit/parser/resource/param_spec.rb +1 -1
  797. data/spec/unit/parser/resource_spec.rb +42 -42
  798. data/spec/unit/parser/scope_spec.rb +35 -39
  799. data/spec/unit/parser/templatewrapper_spec.rb +12 -11
  800. data/spec/unit/parser/type_loader_spec.rb +19 -17
  801. data/spec/unit/pops/adaptable_spec.rb +1 -0
  802. data/spec/unit/pops/benchmark_spec.rb +1 -0
  803. data/spec/unit/pops/evaluator/access_ops_spec.rb +1 -0
  804. data/spec/unit/pops/evaluator/arithmetic_ops_spec.rb +11 -0
  805. data/spec/unit/pops/evaluator/basic_expressions_spec.rb +1 -0
  806. data/spec/unit/pops/evaluator/collections_ops_spec.rb +1 -0
  807. data/spec/unit/pops/evaluator/comparison_ops_spec.rb +1 -0
  808. data/spec/unit/pops/evaluator/conditionals_spec.rb +1 -0
  809. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +78 -18
  810. data/spec/unit/pops/evaluator/logical_ops_spec.rb +1 -0
  811. data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +5 -4
  812. data/spec/unit/pops/evaluator/string_interpolation_spec.rb +1 -0
  813. data/spec/unit/pops/evaluator/variables_spec.rb +1 -0
  814. data/spec/unit/pops/factory_spec.rb +4 -3
  815. data/spec/unit/pops/issues_spec.rb +20 -19
  816. data/spec/unit/pops/loaders/dependency_loader_spec.rb +2 -2
  817. data/spec/unit/pops/loaders/loader_spec.rb +12 -36
  818. data/spec/unit/pops/loaders/loaders_spec.rb +57 -54
  819. data/spec/unit/pops/loaders/module_loaders_spec.rb +35 -3
  820. data/spec/unit/pops/loaders/static_loader_spec.rb +0 -36
  821. data/spec/unit/pops/lookup/context_spec.rb +1 -0
  822. data/spec/unit/pops/lookup/interpolation_spec.rb +3 -2
  823. data/spec/unit/pops/merge_strategy_spec.rb +1 -0
  824. data/spec/unit/pops/migration_spec.rb +5 -3
  825. data/spec/unit/pops/model/model_spec.rb +1 -0
  826. data/spec/unit/pops/model/pn_transformer_spec.rb +1 -0
  827. data/spec/unit/pops/parser/lexer2_spec.rb +60 -21
  828. data/spec/unit/pops/parser/locator_spec.rb +6 -48
  829. data/spec/unit/pops/parser/parse_application_spec.rb +1 -0
  830. data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +1 -0
  831. data/spec/unit/pops/parser/parse_calls_spec.rb +1 -0
  832. data/spec/unit/pops/parser/parse_capabilities_spec.rb +1 -0
  833. data/spec/unit/pops/parser/parse_conditionals_spec.rb +1 -0
  834. data/spec/unit/pops/parser/parse_containers_spec.rb +1 -0
  835. data/spec/unit/pops/parser/parse_heredoc_spec.rb +12 -124
  836. data/spec/unit/pops/parser/parse_plan_spec.rb +1 -0
  837. data/spec/unit/pops/parser/parse_resource_spec.rb +1 -0
  838. data/spec/unit/pops/parser/parse_site_spec.rb +1 -0
  839. data/spec/unit/pops/parser/pn_parser_spec.rb +1 -0
  840. data/spec/unit/pops/pn_spec.rb +1 -0
  841. data/spec/unit/pops/resource/resource_type_impl_spec.rb +1 -0
  842. data/spec/unit/pops/serialization/serialization_spec.rb +7 -5
  843. data/spec/unit/pops/serialization/to_from_hr_spec.rb +29 -4
  844. data/spec/unit/pops/serialization/to_stringified_spec.rb +157 -0
  845. data/spec/unit/pops/types/deferred_spec.rb +87 -0
  846. data/spec/unit/pops/types/p_object_type_spec.rb +20 -0
  847. data/spec/unit/pops/types/p_timespan_type_spec.rb +0 -22
  848. data/spec/unit/pops/types/p_timestamp_type_spec.rb +0 -19
  849. data/spec/unit/pops/types/recursion_guard_spec.rb +10 -10
  850. data/spec/unit/pops/types/ruby_generator_spec.rb +2 -2
  851. data/spec/unit/pops/types/string_converter_spec.rb +11 -22
  852. data/spec/unit/pops/types/task_spec.rb +148 -16
  853. data/spec/unit/pops/types/type_asserter_spec.rb +2 -2
  854. data/spec/unit/pops/types/type_calculator_spec.rb +36 -36
  855. data/spec/unit/pops/types/type_mismatch_describer_spec.rb +0 -9
  856. data/spec/unit/pops/types/type_parser_spec.rb +13 -13
  857. data/spec/unit/pops/types/types_spec.rb +12 -6
  858. data/spec/unit/pops/validator/validator_spec.rb +162 -82
  859. data/spec/unit/pops/visitor_spec.rb +1 -0
  860. data/spec/unit/property/boolean_spec.rb +1 -1
  861. data/spec/unit/property/ensure_spec.rb +1 -0
  862. data/spec/unit/property/keyvalue_spec.rb +34 -32
  863. data/spec/unit/property/list_spec.rb +27 -26
  864. data/spec/unit/property/ordered_list_spec.rb +14 -10
  865. data/spec/unit/property_spec.rb +53 -43
  866. data/spec/unit/provider/aix_object_spec.rb +45 -47
  867. data/spec/unit/provider/command_spec.rb +9 -9
  868. data/spec/unit/provider/exec/posix_spec.rb +9 -8
  869. data/spec/unit/provider/exec/shell_spec.rb +3 -1
  870. data/spec/unit/provider/exec/windows_spec.rb +6 -4
  871. data/spec/unit/provider/exec_spec.rb +1 -209
  872. data/spec/unit/provider/file/posix_spec.rb +24 -22
  873. data/spec/unit/provider/file/windows_spec.rb +19 -17
  874. data/spec/unit/provider/group/aix_spec.rb +7 -22
  875. data/spec/unit/provider/group/groupadd_spec.rb +27 -60
  876. data/spec/unit/provider/group/ldap_spec.rb +36 -33
  877. data/spec/unit/provider/group/pw_spec.rb +18 -15
  878. data/spec/unit/provider/group/windows_adsi_spec.rb +80 -128
  879. data/spec/unit/provider/ldap_spec.rb +62 -61
  880. data/spec/unit/provider/nameservice/directoryservice_spec.rb +109 -102
  881. data/spec/unit/provider/nameservice_spec.rb +41 -39
  882. data/spec/unit/provider/package/aix_spec.rb +22 -48
  883. data/spec/unit/provider/package/appdmg_spec.rb +13 -13
  884. data/spec/unit/provider/package/apt_spec.rb +35 -60
  885. data/spec/unit/provider/package/aptitude_spec.rb +7 -7
  886. data/spec/unit/provider/package/aptrpm_spec.rb +13 -8
  887. data/spec/unit/provider/package/base_spec.rb +4 -4
  888. data/spec/unit/provider/package/dnf_spec.rb +23 -34
  889. data/spec/unit/provider/package/dpkg_spec.rb +72 -114
  890. data/spec/unit/provider/package/freebsd_spec.rb +18 -15
  891. data/spec/unit/provider/package/gem_spec.rb +86 -163
  892. data/spec/unit/provider/package/hpux_spec.rb +18 -15
  893. data/spec/unit/provider/package/macports_spec.rb +54 -56
  894. data/spec/unit/provider/package/nim_spec.rb +49 -33
  895. data/spec/unit/provider/package/openbsd_spec.rb +49 -60
  896. data/spec/unit/provider/package/opkg_spec.rb +26 -23
  897. data/spec/unit/provider/package/pacman_spec.rb +118 -97
  898. data/spec/unit/provider/package/pip3_spec.rb +6 -20
  899. data/spec/unit/provider/package/pip_spec.rb +129 -185
  900. data/spec/unit/provider/package/pkg_spec.rb +119 -129
  901. data/spec/unit/provider/package/pkgdmg_spec.rb +63 -65
  902. data/spec/unit/provider/package/pkgin_spec.rb +23 -20
  903. data/spec/unit/provider/package/pkgng_spec.rb +35 -67
  904. data/spec/unit/provider/package/pkgutil_spec.rb +49 -45
  905. data/spec/unit/provider/package/portage_spec.rb +76 -72
  906. data/spec/unit/provider/package/puppet_gem_spec.rb +21 -45
  907. data/spec/unit/provider/package/rpm_spec.rb +79 -291
  908. data/spec/unit/provider/package/sun_spec.rb +18 -16
  909. data/spec/unit/provider/package/tdnf_spec.rb +12 -9
  910. data/spec/unit/provider/package/up2date_spec.rb +4 -2
  911. data/spec/unit/provider/package/urpmi_spec.rb +17 -15
  912. data/spec/unit/provider/package/windows/exe_package_spec.rb +18 -15
  913. data/spec/unit/provider/package/windows/msi_package_spec.rb +23 -20
  914. data/spec/unit/provider/package/windows/package_spec.rb +43 -38
  915. data/spec/unit/provider/package/windows_spec.rb +36 -51
  916. data/spec/unit/provider/package/yum_spec.rb +24 -128
  917. data/spec/unit/provider/package/zypper_spec.rb +106 -117
  918. data/spec/unit/provider/parsedfile_spec.rb +45 -44
  919. data/spec/unit/provider/service/base_spec.rb +6 -5
  920. data/spec/unit/provider/service/bsd_spec.rb +54 -47
  921. data/spec/unit/provider/service/daemontools_spec.rb +53 -70
  922. data/spec/unit/provider/service/debian_spec.rb +58 -46
  923. data/spec/unit/provider/service/freebsd_spec.rb +23 -20
  924. data/spec/unit/provider/service/gentoo_spec.rb +81 -74
  925. data/spec/unit/provider/service/init_spec.rb +66 -65
  926. data/spec/unit/provider/service/launchd_spec.rb +114 -181
  927. data/spec/unit/provider/service/openbsd_spec.rb +94 -87
  928. data/spec/unit/provider/service/openrc_spec.rb +74 -70
  929. data/spec/unit/provider/service/openwrt_spec.rb +38 -30
  930. data/spec/unit/provider/service/rcng_spec.rb +24 -19
  931. data/spec/unit/provider/service/redhat_spec.rb +60 -60
  932. data/spec/unit/provider/service/runit_spec.rb +44 -61
  933. data/spec/unit/provider/service/smf_spec.rb +74 -143
  934. data/spec/unit/provider/service/src_spec.rb +69 -60
  935. data/spec/unit/provider/service/systemd_spec.rb +160 -222
  936. data/spec/unit/provider/service/upstart_spec.rb +99 -83
  937. data/spec/unit/provider/service/windows_spec.rb +42 -84
  938. data/spec/unit/provider/user/aix_spec.rb +24 -65
  939. data/spec/unit/provider/user/directoryservice_spec.rb +114 -187
  940. data/spec/unit/provider/user/hpux_spec.rb +21 -17
  941. data/spec/unit/provider/user/ldap_spec.rb +83 -80
  942. data/spec/unit/provider/user/openbsd_spec.rb +12 -11
  943. data/spec/unit/provider/user/pw_spec.rb +44 -80
  944. data/spec/unit/provider/user/user_role_add_spec.rb +94 -94
  945. data/spec/unit/provider/user/useradd_spec.rb +100 -208
  946. data/spec/unit/provider/user/windows_adsi_spec.rb +63 -62
  947. data/spec/unit/provider_spec.rb +189 -41
  948. data/spec/unit/puppet_pal_2pec.rb +26 -12
  949. data/spec/unit/puppet_pal_catalog_spec.rb +801 -0
  950. data/spec/unit/puppet_pal_spec.rb +2 -8
  951. data/spec/unit/puppet_spec.rb +7 -27
  952. data/spec/unit/relationship_spec.rb +1 -0
  953. data/spec/unit/reports/http_spec.rb +23 -21
  954. data/spec/unit/reports/store_spec.rb +4 -3
  955. data/spec/unit/reports_spec.rb +14 -12
  956. data/spec/unit/resource/capability_finder_spec.rb +26 -29
  957. data/spec/unit/resource/catalog_spec.rb +77 -81
  958. data/spec/unit/resource/status_spec.rb +8 -6
  959. data/spec/unit/resource/type_collection_spec.rb +18 -17
  960. data/spec/unit/resource/type_spec.rb +35 -34
  961. data/spec/unit/resource_spec.rb +79 -67
  962. data/spec/unit/rest/client_spec.rb +135 -0
  963. data/spec/unit/rest/route_spec.rb +132 -0
  964. data/spec/unit/scheduler/job_spec.rb +1 -0
  965. data/spec/unit/scheduler/scheduler_spec.rb +1 -0
  966. data/spec/unit/scheduler/splay_job_spec.rb +2 -1
  967. data/spec/unit/settings/array_setting_spec.rb +1 -1
  968. data/spec/unit/settings/autosign_setting_spec.rb +9 -9
  969. data/spec/unit/settings/certificate_revocation_setting_spec.rb +1 -1
  970. data/spec/unit/settings/config_file_spec.rb +10 -0
  971. data/spec/unit/settings/directory_setting_spec.rb +7 -2
  972. data/spec/unit/settings/duration_setting_spec.rb +2 -1
  973. data/spec/unit/settings/enum_setting_spec.rb +1 -1
  974. data/spec/unit/settings/environment_conf_spec.rb +6 -4
  975. data/spec/unit/settings/file_setting_spec.rb +50 -46
  976. data/spec/unit/settings/ini_file_spec.rb +2 -4
  977. data/spec/unit/settings/path_setting_spec.rb +3 -2
  978. data/spec/unit/settings/priority_setting_spec.rb +2 -1
  979. data/spec/unit/settings/string_setting_spec.rb +15 -14
  980. data/spec/unit/settings/terminus_setting_spec.rb +2 -1
  981. data/spec/unit/settings/value_translator_spec.rb +1 -0
  982. data/spec/unit/settings_spec.rb +226 -253
  983. data/spec/unit/ssl/base_spec.rb +15 -14
  984. data/spec/unit/ssl/certificate_request_attributes_spec.rb +22 -8
  985. data/spec/unit/ssl/certificate_request_spec.rb +63 -92
  986. data/spec/unit/ssl/certificate_spec.rb +29 -37
  987. data/spec/unit/ssl/digest_spec.rb +1 -0
  988. data/spec/unit/ssl/host_spec.rb +305 -685
  989. data/spec/unit/ssl/key_spec.rb +34 -46
  990. data/spec/unit/ssl/validator_spec.rb +70 -203
  991. data/spec/unit/task_spec.rb +172 -26
  992. data/spec/unit/transaction/additional_resource_generator_spec.rb +68 -67
  993. data/spec/unit/transaction/event_manager_spec.rb +84 -95
  994. data/spec/unit/transaction/event_spec.rb +15 -16
  995. data/spec/unit/transaction/persistence_spec.rb +18 -17
  996. data/spec/unit/transaction/report_spec.rb +24 -18
  997. data/spec/unit/transaction/resource_harness_spec.rb +33 -72
  998. data/spec/unit/transaction_spec.rb +106 -176
  999. data/spec/unit/type/component_spec.rb +1 -0
  1000. data/spec/unit/type/exec_spec.rb +66 -120
  1001. data/spec/unit/type/file/checksum_spec.rb +11 -10
  1002. data/spec/unit/type/file/checksum_value_spec.rb +32 -31
  1003. data/spec/unit/type/file/content_spec.rb +62 -65
  1004. data/spec/unit/type/file/ctime_spec.rb +1 -0
  1005. data/spec/unit/type/file/ensure_spec.rb +13 -12
  1006. data/spec/unit/type/file/group_spec.rb +7 -5
  1007. data/spec/unit/type/file/mode_spec.rb +6 -4
  1008. data/spec/unit/type/file/mtime_spec.rb +1 -0
  1009. data/spec/unit/type/file/owner_spec.rb +8 -6
  1010. data/spec/unit/type/file/selinux_spec.rb +19 -17
  1011. data/spec/unit/type/file/source_spec.rb +110 -113
  1012. data/spec/unit/type/file/type_spec.rb +1 -0
  1013. data/spec/unit/type/file_spec.rb +190 -204
  1014. data/spec/unit/type/filebucket_spec.rb +10 -11
  1015. data/spec/unit/type/group_spec.rb +9 -15
  1016. data/spec/unit/type/noop_metaparam_spec.rb +2 -1
  1017. data/spec/unit/type/package/package_settings_spec.rb +23 -44
  1018. data/spec/unit/type/package_spec.rb +64 -61
  1019. data/spec/unit/type/resources_spec.rb +101 -103
  1020. data/spec/unit/type/schedule_spec.rb +28 -28
  1021. data/spec/unit/type/service_spec.rb +85 -76
  1022. data/spec/unit/type/stage_spec.rb +1 -0
  1023. data/spec/unit/type/tidy_spec.rb +63 -62
  1024. data/spec/unit/type/user_spec.rb +26 -147
  1025. data/spec/unit/type/whit_spec.rb +1 -0
  1026. data/spec/unit/type_spec.rb +164 -125
  1027. data/spec/unit/util/at_fork_spec.rb +19 -18
  1028. data/spec/unit/util/autoload_spec.rb +122 -93
  1029. data/spec/unit/util/backups_spec.rb +35 -34
  1030. data/spec/unit/util/character_encoding_spec.rb +5 -48
  1031. data/spec/unit/util/checksums_spec.rb +39 -38
  1032. data/spec/unit/util/colors_spec.rb +2 -1
  1033. data/spec/unit/util/command_line_spec.rb +20 -40
  1034. data/spec/unit/util/constant_inflector_spec.rb +1 -0
  1035. data/spec/unit/util/diff_spec.rb +8 -7
  1036. data/spec/unit/util/errors_spec.rb +1 -0
  1037. data/spec/unit/util/execution_spec.rb +167 -285
  1038. data/spec/unit/util/execution_stub_spec.rb +3 -2
  1039. data/spec/unit/util/feature_spec.rb +46 -28
  1040. data/spec/unit/util/filetype_spec.rb +53 -61
  1041. data/spec/unit/util/http_proxy_spec.rb +13 -133
  1042. data/spec/unit/util/inifile_spec.rb +31 -26
  1043. data/spec/unit/util/json_lockfile_spec.rb +5 -3
  1044. data/spec/unit/util/ldap/connection_spec.rb +25 -26
  1045. data/spec/unit/util/ldap/generator_spec.rb +1 -0
  1046. data/spec/unit/util/ldap/manager_spec.rb +102 -118
  1047. data/spec/unit/util/lockfile_spec.rb +2 -1
  1048. data/spec/unit/util/log/destinations_spec.rb +40 -23
  1049. data/spec/unit/util/log_spec.rb +146 -48
  1050. data/spec/unit/util/logging_spec.rb +114 -252
  1051. data/spec/unit/util/metric_spec.rb +1 -0
  1052. data/spec/unit/util/monkey_patches_spec.rb +12 -24
  1053. data/spec/unit/util/multi_match_spec.rb +1 -0
  1054. data/spec/unit/util/network_device/config_spec.rb +1 -0
  1055. data/spec/unit/util/network_device/transport/base_spec.rb +6 -5
  1056. data/spec/unit/util/network_device_spec.rb +9 -7
  1057. data/spec/unit/util/package_spec.rb +1 -0
  1058. data/spec/unit/util/pidlock_spec.rb +14 -86
  1059. data/spec/unit/util/plist_spec.rb +33 -60
  1060. data/spec/unit/util/posix_spec.rb +47 -78
  1061. data/spec/unit/util/profiler/object_counts_spec.rb +2 -1
  1062. data/spec/unit/util/rdoc_spec.rb +10 -9
  1063. data/spec/unit/util/reference_spec.rb +1 -0
  1064. data/spec/unit/util/resource_template_spec.rb +20 -20
  1065. data/spec/unit/util/retry_action_spec.rb +8 -7
  1066. data/spec/unit/util/rubygems_spec.rb +7 -41
  1067. data/spec/unit/util/run_mode_spec.rb +11 -10
  1068. data/spec/unit/util/selinux_spec.rb +73 -84
  1069. data/spec/unit/util/splayer_spec.rb +9 -8
  1070. data/spec/unit/util/ssl_spec.rb +1 -0
  1071. data/spec/unit/util/storage_spec.rb +17 -111
  1072. data/spec/unit/util/suidmanager_spec.rb +58 -47
  1073. data/spec/unit/util/symbolic_file_mode_spec.rb +1 -0
  1074. data/spec/unit/util/tag_set_spec.rb +9 -1
  1075. data/spec/unit/util/tagging_spec.rb +12 -0
  1076. data/spec/unit/util/terminal_spec.rb +10 -9
  1077. data/spec/unit/util/user_attr_spec.rb +2 -1
  1078. data/spec/unit/util/warnings_spec.rb +4 -3
  1079. data/spec/unit/util/watcher/periodic_watcher_spec.rb +2 -2
  1080. data/spec/unit/util/watcher_spec.rb +21 -51
  1081. data/spec/unit/util/windows/access_control_entry_spec.rb +2 -1
  1082. data/spec/unit/util/windows/access_control_list_spec.rb +2 -1
  1083. data/spec/unit/util/windows/adsi_spec.rb +134 -278
  1084. data/spec/unit/util/windows/api_types_spec.rb +42 -105
  1085. data/spec/unit/util/windows/eventlog_spec.rb +13 -10
  1086. data/spec/unit/util/windows/file_spec.rb +1 -0
  1087. data/spec/unit/util/windows/root_certs_spec.rb +1 -0
  1088. data/spec/unit/util/windows/security_descriptor_spec.rb +3 -1
  1089. data/spec/unit/util/windows/service_spec.rb +180 -432
  1090. data/spec/unit/util/windows/sid_spec.rb +17 -15
  1091. data/spec/unit/util/windows/string_spec.rb +2 -1
  1092. data/spec/unit/util/yaml_spec.rb +162 -28
  1093. data/spec/unit/util_spec.rb +74 -119
  1094. data/spec/unit/version_spec.rb +6 -6
  1095. data/tasks/benchmark.rake +5 -1
  1096. data/tasks/ci.rake +0 -5
  1097. data/tasks/manpages.rake +9 -2
  1098. data/tasks/parser.rake +11 -3
  1099. metadata +156 -473
  1100. data/CODEOWNERS +0 -30
  1101. data/ext/rack/config.ru +0 -44
  1102. data/ext/rack/example-passenger-vhost.conf +0 -57
  1103. data/lib/puppet/application/ca.rb +0 -11
  1104. data/lib/puppet/application/certificate.rb +0 -17
  1105. data/lib/puppet/application/certificate_request.rb +0 -7
  1106. data/lib/puppet/application/certificate_revocation_list.rb +0 -7
  1107. data/lib/puppet/application/master.rb +0 -319
  1108. data/lib/puppet/confine/boolean.rb +0 -45
  1109. data/lib/puppet/external/nagios.rb +0 -46
  1110. data/lib/puppet/external/nagios/base.rb +0 -472
  1111. data/lib/puppet/external/nagios/grammar.ry +0 -248
  1112. data/lib/puppet/external/nagios/makefile +0 -9
  1113. data/lib/puppet/external/nagios/parser.rb +0 -400
  1114. data/lib/puppet/face/ca.rb +0 -266
  1115. data/lib/puppet/face/certificate.rb +0 -167
  1116. data/lib/puppet/face/certificate_request.rb +0 -56
  1117. data/lib/puppet/face/certificate_revocation_list.rb +0 -56
  1118. data/lib/puppet/feature/rack.rb +0 -19
  1119. data/lib/puppet/graph/random_prioritizer.rb +0 -16
  1120. data/lib/puppet/graph/title_hash_prioritizer.rb +0 -16
  1121. data/lib/puppet/indirector/certificate/ca.rb +0 -9
  1122. data/lib/puppet/indirector/certificate/disabled_ca.rb +0 -22
  1123. data/lib/puppet/indirector/certificate_request/ca.rb +0 -22
  1124. data/lib/puppet/indirector/certificate_request/disabled_ca.rb +0 -22
  1125. data/lib/puppet/indirector/certificate_revocation_list/ca.rb +0 -8
  1126. data/lib/puppet/indirector/certificate_revocation_list/disabled_ca.rb +0 -22
  1127. data/lib/puppet/indirector/certificate_revocation_list/file.rb +0 -8
  1128. data/lib/puppet/indirector/certificate_revocation_list/rest.rb +0 -22
  1129. data/lib/puppet/indirector/certificate_status.rb +0 -4
  1130. data/lib/puppet/indirector/certificate_status/file.rb +0 -91
  1131. data/lib/puppet/indirector/certificate_status/rest.rb +0 -11
  1132. data/lib/puppet/indirector/key/ca.rb +0 -16
  1133. data/lib/puppet/indirector/key/disabled_ca.rb +0 -22
  1134. data/lib/puppet/indirector/ldap.rb +0 -86
  1135. data/lib/puppet/indirector/node/ldap.rb +0 -275
  1136. data/lib/puppet/indirector/node/write_only_yaml.rb +0 -39
  1137. data/lib/puppet/module_tool/applications/builder.rb +0 -152
  1138. data/lib/puppet/module_tool/skeleton/templates/generator/Gemfile +0 -18
  1139. data/lib/puppet/module_tool/skeleton/templates/generator/README.md.erb +0 -89
  1140. data/lib/puppet/module_tool/skeleton/templates/generator/Rakefile +0 -32
  1141. data/lib/puppet/module_tool/skeleton/templates/generator/examples/init.pp.erb +0 -12
  1142. data/lib/puppet/module_tool/skeleton/templates/generator/manifests/init.pp.erb +0 -48
  1143. data/lib/puppet/module_tool/skeleton/templates/generator/metadata.json.erb +0 -1
  1144. data/lib/puppet/module_tool/skeleton/templates/generator/spec/classes/init_spec.rb.erb +0 -6
  1145. data/lib/puppet/module_tool/skeleton/templates/generator/spec/spec_helper.rb +0 -1
  1146. data/lib/puppet/network/http/api/ca.rb +0 -2
  1147. data/lib/puppet/network/http/api/ca/v1.rb +0 -11
  1148. data/lib/puppet/network/http/rack.rb +0 -33
  1149. data/lib/puppet/network/http/rack/rest.rb +0 -162
  1150. data/lib/puppet/network/http/webrick.rb +0 -124
  1151. data/lib/puppet/network/http/webrick/rest.rb +0 -114
  1152. data/lib/puppet/network/server.rb +0 -39
  1153. data/lib/puppet/provider/augeas/augeas.rb +0 -767
  1154. data/lib/puppet/provider/cisco.rb +0 -9
  1155. data/lib/puppet/provider/computer/computer.rb +0 -20
  1156. data/lib/puppet/provider/cron/crontab.rb +0 -297
  1157. data/lib/puppet/provider/host/parsed.rb +0 -46
  1158. data/lib/puppet/provider/interface/cisco.rb +0 -27
  1159. data/lib/puppet/provider/macauthorization/macauthorization.rb +0 -298
  1160. data/lib/puppet/provider/mailalias/aliases.rb +0 -50
  1161. data/lib/puppet/provider/maillist/mailman.rb +0 -108
  1162. data/lib/puppet/provider/mcx/mcxcontent.rb +0 -173
  1163. data/lib/puppet/provider/mount.rb +0 -76
  1164. data/lib/puppet/provider/mount/parsed.rb +0 -285
  1165. data/lib/puppet/provider/naginator.rb +0 -63
  1166. data/lib/puppet/provider/package/dnfmodule.rb +0 -141
  1167. data/lib/puppet/provider/package_targetable.rb +0 -69
  1168. data/lib/puppet/provider/scheduled_task/win32_taskscheduler.rb +0 -590
  1169. data/lib/puppet/provider/selboolean/getsetsebool.rb +0 -47
  1170. data/lib/puppet/provider/selmodule/semodule.rb +0 -157
  1171. data/lib/puppet/provider/ssh_authorized_key/parsed.rb +0 -105
  1172. data/lib/puppet/provider/sshkey/parsed.rb +0 -50
  1173. data/lib/puppet/provider/vlan/cisco.rb +0 -28
  1174. data/lib/puppet/provider/yumrepo/inifile.rb +0 -315
  1175. data/lib/puppet/provider/zfs/zfs.rb +0 -108
  1176. data/lib/puppet/provider/zone/solaris.rb +0 -364
  1177. data/lib/puppet/provider/zpool/zpool.rb +0 -125
  1178. data/lib/puppet/ssl/certificate_authority.rb +0 -554
  1179. data/lib/puppet/ssl/certificate_authority/autosign_command.rb +0 -45
  1180. data/lib/puppet/ssl/certificate_authority/interface.rb +0 -324
  1181. data/lib/puppet/ssl/certificate_revocation_list.rb +0 -111
  1182. data/lib/puppet/ssl/configuration.rb +0 -61
  1183. data/lib/puppet/ssl/inventory.rb +0 -55
  1184. data/lib/puppet/type/augeas.rb +0 -211
  1185. data/lib/puppet/type/computer.rb +0 -66
  1186. data/lib/puppet/type/cron.rb +0 -480
  1187. data/lib/puppet/type/host.rb +0 -95
  1188. data/lib/puppet/type/interface.rb +0 -121
  1189. data/lib/puppet/type/k5login.rb +0 -165
  1190. data/lib/puppet/type/macauthorization.rb +0 -167
  1191. data/lib/puppet/type/mailalias.rb +0 -46
  1192. data/lib/puppet/type/maillist.rb +0 -62
  1193. data/lib/puppet/type/mcx.rb +0 -98
  1194. data/lib/puppet/type/mount.rb +0 -314
  1195. data/lib/puppet/type/nagios_command.rb +0 -3
  1196. data/lib/puppet/type/nagios_contact.rb +0 -3
  1197. data/lib/puppet/type/nagios_contactgroup.rb +0 -3
  1198. data/lib/puppet/type/nagios_host.rb +0 -3
  1199. data/lib/puppet/type/nagios_hostdependency.rb +0 -3
  1200. data/lib/puppet/type/nagios_hostescalation.rb +0 -3
  1201. data/lib/puppet/type/nagios_hostextinfo.rb +0 -3
  1202. data/lib/puppet/type/nagios_hostgroup.rb +0 -3
  1203. data/lib/puppet/type/nagios_service.rb +0 -3
  1204. data/lib/puppet/type/nagios_servicedependency.rb +0 -3
  1205. data/lib/puppet/type/nagios_serviceescalation.rb +0 -3
  1206. data/lib/puppet/type/nagios_serviceextinfo.rb +0 -3
  1207. data/lib/puppet/type/nagios_servicegroup.rb +0 -3
  1208. data/lib/puppet/type/nagios_timeperiod.rb +0 -3
  1209. data/lib/puppet/type/router.rb +0 -17
  1210. data/lib/puppet/type/scheduled_task.rb +0 -183
  1211. data/lib/puppet/type/selboolean.rb +0 -40
  1212. data/lib/puppet/type/selmodule.rb +0 -58
  1213. data/lib/puppet/type/ssh_authorized_key.rb +0 -143
  1214. data/lib/puppet/type/sshkey.rb +0 -83
  1215. data/lib/puppet/type/vlan.rb +0 -26
  1216. data/lib/puppet/type/yumrepo.rb +0 -430
  1217. data/lib/puppet/type/zfs.rb +0 -154
  1218. data/lib/puppet/type/zone.rb +0 -382
  1219. data/lib/puppet/type/zpool.rb +0 -91
  1220. data/lib/puppet/util/methodhelper.rb +0 -32
  1221. data/lib/puppet/util/nagios_maker.rb +0 -85
  1222. data/lib/puppet/util/network_device/cisco.rb +0 -4
  1223. data/lib/puppet/util/network_device/cisco/device.rb +0 -285
  1224. data/lib/puppet/util/network_device/cisco/facts.rb +0 -72
  1225. data/lib/puppet/util/network_device/cisco/interface.rb +0 -94
  1226. data/lib/puppet/util/network_device/ipcalc.rb +0 -68
  1227. data/lib/puppet/util/network_device/transport/ssh.rb +0 -126
  1228. data/lib/puppet/util/network_device/transport/telnet.rb +0 -47
  1229. data/lib/puppet/util/windows/taskscheduler.rb +0 -1267
  1230. data/lib/puppet/vendor/load_semantic.rb +0 -1
  1231. data/lib/puppet/vendor/load_semantic_puppet.rb +0 -1
  1232. data/lib/puppet/vendor/semantic/lib/semantic.rb +0 -5
  1233. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet.rb +0 -11
  1234. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/dependency.rb +0 -181
  1235. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/dependency/graph.rb +0 -60
  1236. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/dependency/graph_node.rb +0 -117
  1237. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/dependency/module_release.rb +0 -58
  1238. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/dependency/source.rb +0 -25
  1239. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/dependency/unsatisfiable_graph.rb +0 -31
  1240. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/gem_version.rb +0 -3
  1241. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/version.rb +0 -203
  1242. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/version_range.rb +0 -758
  1243. data/lib/puppet/vendor/semantic_puppet/locales/config.yaml +0 -21
  1244. data/man/man8/puppet-ca.8 +0 -196
  1245. data/man/man8/puppet-cert.8 +0 -118
  1246. data/man/man8/puppet-certificate.8 +0 -240
  1247. data/man/man8/puppet-certificate_request.8 +0 -161
  1248. data/man/man8/puppet-certificate_revocation_list.8 +0 -139
  1249. data/man/man8/puppet-master.8 +0 -85
  1250. data/spec/fixtures/integration/provider/cron/crontab/create_normal_entry +0 -19
  1251. data/spec/fixtures/integration/provider/cron/crontab/create_special_entry +0 -18
  1252. data/spec/fixtures/integration/provider/cron/crontab/crontab_user1 +0 -15
  1253. data/spec/fixtures/integration/provider/cron/crontab/crontab_user2 +0 -4
  1254. data/spec/fixtures/integration/provider/cron/crontab/modify_entry +0 -13
  1255. data/spec/fixtures/integration/provider/cron/crontab/moved_cronjob_input1 +0 -15
  1256. data/spec/fixtures/integration/provider/cron/crontab/moved_cronjob_input2 +0 -6
  1257. data/spec/fixtures/integration/provider/cron/crontab/purged +0 -8
  1258. data/spec/fixtures/integration/provider/cron/crontab/remove_named_resource +0 -12
  1259. data/spec/fixtures/integration/provider/cron/crontab/remove_unnamed_resource +0 -14
  1260. data/spec/fixtures/integration/provider/cron/crontab/unspecialized +0 -15
  1261. data/spec/fixtures/integration/provider/mailalias/aliases/test1 +0 -32
  1262. data/spec/fixtures/integration/provider/sshkey/sample +0 -21
  1263. data/spec/fixtures/unit/provider/augeas/augeas/augeas/lenses/test.aug +0 -13
  1264. data/spec/fixtures/unit/provider/augeas/augeas/etc/fstab +0 -10
  1265. data/spec/fixtures/unit/provider/augeas/augeas/etc/hosts +0 -6
  1266. data/spec/fixtures/unit/provider/augeas/augeas/etc/test +0 -3
  1267. data/spec/fixtures/unit/provider/augeas/augeas/test.aug +0 -13
  1268. data/spec/fixtures/unit/provider/host/parsed/valid_hosts +0 -19
  1269. data/spec/fixtures/unit/provider/mount/mount-output.aix.txt +0 -7
  1270. data/spec/fixtures/unit/provider/mount/parsed/aix.filesystems +0 -152
  1271. data/spec/fixtures/unit/provider/mount/parsed/aix.mount +0 -11
  1272. data/spec/fixtures/unit/provider/mount/parsed/darwin.mount +0 -6
  1273. data/spec/fixtures/unit/provider/mount/parsed/freebsd.fstab +0 -9
  1274. data/spec/fixtures/unit/provider/mount/parsed/freebsd.mount +0 -4
  1275. data/spec/fixtures/unit/provider/mount/parsed/hpux.mount +0 -17
  1276. data/spec/fixtures/unit/provider/mount/parsed/linux.fstab +0 -12
  1277. data/spec/fixtures/unit/provider/mount/parsed/linux.mount +0 -6
  1278. data/spec/fixtures/unit/provider/mount/parsed/netbsd.fstab +0 -10
  1279. data/spec/fixtures/unit/provider/mount/parsed/netbsd.mount +0 -9
  1280. data/spec/fixtures/unit/provider/mount/parsed/openbsd.fstab +0 -5
  1281. data/spec/fixtures/unit/provider/mount/parsed/openbsd.mount +0 -5
  1282. data/spec/fixtures/unit/provider/mount/parsed/solaris.fstab +0 -11
  1283. data/spec/fixtures/unit/provider/mount/parsed/solaris.mount +0 -6
  1284. data/spec/fixtures/unit/provider/naginator/define_empty_param +0 -6
  1285. data/spec/fixtures/unit/provider/package/dnfmodule/dnf-module-list.txt +0 -19
  1286. data/spec/fixtures/unit/provider/package/yum/yum-check-update-subscription-manager.txt +0 -9
  1287. data/spec/fixtures/unit/provider/service/smf/svcs_fmri.out +0 -6
  1288. data/spec/fixtures/unit/provider/service/smf/svcs_multiple_fmris.out +0 -13
  1289. data/spec/fixtures/unit/provider/ssh_authorized_key/parsed/authorized_keys +0 -7
  1290. data/spec/fixtures/unit/provider/ssh_authorized_key/parsed/authorized_keys1 +0 -3
  1291. data/spec/fixtures/unit/provider/ssh_authorized_key/parsed/authorized_keys2 +0 -1
  1292. data/spec/fixtures/unit/provider/sshkey/parsed/sample +0 -21
  1293. data/spec/fixtures/unit/provider/sshkey/parsed/sample_with_blank_lines +0 -8
  1294. data/spec/fixtures/unit/provider/zfs/zfs/zfs-list.out +0 -2
  1295. data/spec/fixtures/unit/provider/zpool/zpool/zpool-list.out +0 -2
  1296. data/spec/integration/faces/ca_spec.rb +0 -353
  1297. data/spec/integration/indirector/node/ldap_spec.rb +0 -13
  1298. data/spec/integration/network/http_pool_spec.rb +0 -120
  1299. data/spec/integration/provider/cron/crontab_spec.rb +0 -240
  1300. data/spec/integration/provider/file/windows_spec.rb +0 -162
  1301. data/spec/integration/provider/mailalias/aliases_spec.rb +0 -9
  1302. data/spec/integration/provider/mount_spec.rb +0 -163
  1303. data/spec/integration/provider/ssh_authorized_key_spec.rb +0 -217
  1304. data/spec/integration/provider/sshkey_spec.rb +0 -153
  1305. data/spec/integration/provider/yumrepo_spec.rb +0 -126
  1306. data/spec/integration/ssl/autosign_spec.rb +0 -145
  1307. data/spec/integration/ssl/certificate_authority_spec.rb +0 -161
  1308. data/spec/integration/ssl/certificate_revocation_list_spec.rb +0 -33
  1309. data/spec/integration/transaction_spec.rb +0 -553
  1310. data/spec/integration/type/nagios_spec.rb +0 -69
  1311. data/spec/integration/type/notify_spec.rb +0 -46
  1312. data/spec/integration/type/user_spec.rb +0 -63
  1313. data/spec/lib/puppet_spec/https.rb +0 -166
  1314. data/spec/unit/application/cert_spec.rb +0 -272
  1315. data/spec/unit/application/certificate_spec.rb +0 -21
  1316. data/spec/unit/application/master_spec.rb +0 -414
  1317. data/spec/unit/face/ca_spec.rb +0 -9
  1318. data/spec/unit/face/certificate_request_spec.rb +0 -9
  1319. data/spec/unit/face/certificate_revocation_list_spec.rb +0 -9
  1320. data/spec/unit/face/certificate_spec.rb +0 -228
  1321. data/spec/unit/face/module/build_spec.rb +0 -69
  1322. data/spec/unit/graph/title_hash_prioritizer_spec.rb +0 -50
  1323. data/spec/unit/indirector/certificate/ca_spec.rb +0 -21
  1324. data/spec/unit/indirector/certificate/disabled_ca_spec.rb +0 -32
  1325. data/spec/unit/indirector/certificate_request/ca_spec.rb +0 -56
  1326. data/spec/unit/indirector/certificate_request/disabled_ca_spec.rb +0 -32
  1327. data/spec/unit/indirector/certificate_revocation_list/ca_spec.rb +0 -15
  1328. data/spec/unit/indirector/certificate_revocation_list/disabled_ca_spec.rb +0 -32
  1329. data/spec/unit/indirector/certificate_revocation_list/file_spec.rb +0 -16
  1330. data/spec/unit/indirector/certificate_revocation_list/rest_spec.rb +0 -33
  1331. data/spec/unit/indirector/certificate_status/file_spec.rb +0 -190
  1332. data/spec/unit/indirector/certificate_status/rest_spec.rb +0 -17
  1333. data/spec/unit/indirector/code_spec.rb +0 -30
  1334. data/spec/unit/indirector/key/ca_spec.rb +0 -22
  1335. data/spec/unit/indirector/key/disabled_ca_spec.rb +0 -32
  1336. data/spec/unit/indirector/ldap_spec.rb +0 -151
  1337. data/spec/unit/indirector/node/ldap_spec.rb +0 -463
  1338. data/spec/unit/indirector/node/write_only_yaml_spec.rb +0 -11
  1339. data/spec/unit/module_tool/applications/builder_spec.rb +0 -439
  1340. data/spec/unit/network/http/api/ca/v1_spec.rb +0 -26
  1341. data/spec/unit/network/http/rack/rest_spec.rb +0 -322
  1342. data/spec/unit/network/http/rack_spec.rb +0 -42
  1343. data/spec/unit/network/http/webrick/rest_spec.rb +0 -230
  1344. data/spec/unit/network/http/webrick_spec.rb +0 -277
  1345. data/spec/unit/network/server_spec.rb +0 -94
  1346. data/spec/unit/provider/augeas/augeas_spec.rb +0 -1096
  1347. data/spec/unit/provider/cisco_spec.rb +0 -14
  1348. data/spec/unit/provider/cron/crontab_spec.rb +0 -206
  1349. data/spec/unit/provider/cron/parsed_spec.rb +0 -355
  1350. data/spec/unit/provider/host/parsed_spec.rb +0 -219
  1351. data/spec/unit/provider/interface/cisco_spec.rb +0 -53
  1352. data/spec/unit/provider/macauthorization_spec.rb +0 -134
  1353. data/spec/unit/provider/mcx/mcxcontent_spec.rb +0 -190
  1354. data/spec/unit/provider/mount/parsed_spec.rb +0 -318
  1355. data/spec/unit/provider/mount_spec.rb +0 -169
  1356. data/spec/unit/provider/naginator_spec.rb +0 -78
  1357. data/spec/unit/provider/network_device_spec.rb +0 -152
  1358. data/spec/unit/provider/package/dnfmodule_spec.rb +0 -247
  1359. data/spec/unit/provider/package_targetable_spec.rb +0 -60
  1360. data/spec/unit/provider/scheduled_task/win32_taskscheduler_spec.rb +0 -2050
  1361. data/spec/unit/provider/selboolean_spec.rb +0 -34
  1362. data/spec/unit/provider/selmodule-example.pp +0 -0
  1363. data/spec/unit/provider/selmodule_spec.rb +0 -154
  1364. data/spec/unit/provider/ssh_authorized_key/parsed_spec.rb +0 -259
  1365. data/spec/unit/provider/sshkey/parsed_spec.rb +0 -92
  1366. data/spec/unit/provider/vlan/cisco_spec.rb +0 -53
  1367. data/spec/unit/provider/yumrepo/inifile_spec.rb +0 -413
  1368. data/spec/unit/provider/zfs/zfs_spec.rb +0 -171
  1369. data/spec/unit/provider/zone/solaris_spec.rb +0 -261
  1370. data/spec/unit/provider/zpool/zpool_spec.rb +0 -250
  1371. data/spec/unit/settings/server_list_setting_spec.rb +0 -21
  1372. data/spec/unit/ssl/certificate_authority/autosign_command_spec.rb +0 -29
  1373. data/spec/unit/ssl/certificate_authority/interface_spec.rb +0 -563
  1374. data/spec/unit/ssl/certificate_authority_spec.rb +0 -1165
  1375. data/spec/unit/ssl/certificate_revocation_list_spec.rb +0 -196
  1376. data/spec/unit/ssl/configuration_spec.rb +0 -138
  1377. data/spec/unit/ssl/inventory_spec.rb +0 -155
  1378. data/spec/unit/test/test_helper_spec.rb +0 -17
  1379. data/spec/unit/type/augeas_spec.rb +0 -120
  1380. data/spec/unit/type/computer_spec.rb +0 -77
  1381. data/spec/unit/type/cron_spec.rb +0 -539
  1382. data/spec/unit/type/host_spec.rb +0 -680
  1383. data/spec/unit/type/interface_spec.rb +0 -128
  1384. data/spec/unit/type/k5login_spec.rb +0 -204
  1385. data/spec/unit/type/macauthorization_spec.rb +0 -111
  1386. data/spec/unit/type/mailalias_spec.rb +0 -48
  1387. data/spec/unit/type/maillist_spec.rb +0 -38
  1388. data/spec/unit/type/mcx_spec.rb +0 -75
  1389. data/spec/unit/type/mount_spec.rb +0 -622
  1390. data/spec/unit/type/nagios_spec.rb +0 -312
  1391. data/spec/unit/type/scheduled_task_spec.rb +0 -117
  1392. data/spec/unit/type/selboolean_spec.rb +0 -41
  1393. data/spec/unit/type/selmodule_spec.rb +0 -16
  1394. data/spec/unit/type/ssh_authorized_key_spec.rb +0 -228
  1395. data/spec/unit/type/sshkey_spec.rb +0 -75
  1396. data/spec/unit/type/vlan_spec.rb +0 -42
  1397. data/spec/unit/type/yumrepo_spec.rb +0 -476
  1398. data/spec/unit/type/zfs_spec.rb +0 -45
  1399. data/spec/unit/type/zone_spec.rb +0 -182
  1400. data/spec/unit/type/zpool_spec.rb +0 -108
  1401. data/spec/unit/util/nagios_maker_spec.rb +0 -121
  1402. data/spec/unit/util/network_device/cisco/device_spec.rb +0 -491
  1403. data/spec/unit/util/network_device/cisco/facts_spec.rb +0 -63
  1404. data/spec/unit/util/network_device/cisco/interface_spec.rb +0 -97
  1405. data/spec/unit/util/network_device/ipcalc_spec.rb +0 -61
  1406. data/spec/unit/util/network_device/transport/ssh_spec.rb +0 -252
  1407. data/spec/unit/util/network_device/transport/telnet_spec.rb +0 -90
@@ -1,72 +0,0 @@
1
-
2
- require 'puppet/util/network_device/cisco'
3
- require 'puppet/util/network_device/ipcalc'
4
-
5
- # this retrieves facts from a cisco device
6
- class Puppet::Util::NetworkDevice::Cisco::Facts
7
-
8
- attr_reader :transport
9
-
10
- def initialize(transport)
11
- @transport = transport
12
- end
13
-
14
- def retrieve
15
- facts = {}
16
- facts.merge(parse_show_ver)
17
- end
18
-
19
- def parse_show_ver
20
- facts = {}
21
- out = @transport.command("sh ver")
22
- lines = out.split("\n")
23
- lines.shift; lines.pop
24
- lines.each do |l|
25
- case l
26
- # cisco WS-C2924C-XL (PowerPC403GA) processor (revision 0x11) with 8192K/1024K bytes of memory.
27
- # Cisco 1841 (revision 5.0) with 355328K/37888K bytes of memory.
28
- # Cisco 877 (MPC8272) processor (revision 0x200) with 118784K/12288K bytes of memory.
29
- # cisco WS-C2960G-48TC-L (PowerPC405) processor (revision C0) with 61440K/4088K bytes of memory.
30
- # cisco WS-C2950T-24 (RC32300) processor (revision R0) with 19959K bytes of memory.
31
- when /[cC]isco ([\w-]+) (?:\(([\w-]+)\) processor )?\(revision (.+)\) with (\d+[KMG])(?:\/(\d+[KMG]))? bytes of memory\./
32
- facts[:hardwaremodel] = $1
33
- facts[:processor] = $2 if $2
34
- facts[:hardwarerevision] = $3
35
- facts[:memorysize] = $4
36
- # uptime
37
- # Switch uptime is 1 year, 12 weeks, 6 days, 22 hours, 32 minutes
38
- # c2950 uptime is 3 weeks, 1 day, 23 hours, 36 minutes
39
- # c2960 uptime is 2 years, 27 weeks, 5 days, 21 hours, 30 minutes
40
- # router uptime is 5 weeks, 1 day, 3 hours, 30 minutes
41
- when /^\s*([\w-]+)\s+uptime is (.*?)$/
42
- facts[:hostname] = $1
43
- facts[:uptime] = $2
44
- facts[:uptime_seconds] = uptime_to_seconds($2)
45
- facts[:uptime_days] = facts[:uptime_seconds] / 86400
46
- # "IOS (tm) C2900XL Software (C2900XL-C3H2S-M), Version 12.0(5)WC10, RELEASE SOFTWARE (fc1)"=> { :operatingsystem => "IOS", :operatingsystemrelease => "12.0(5)WC10", :operatingsystemmajrelease => "12.0", :operatingsystemfeature => "C3H2S"},
47
- # "IOS (tm) C2950 Software (C2950-I6K2L2Q4-M), Version 12.1(22)EA8a, RELEASE SOFTWARE (fc1)"=> { :operatingsystem => "IOS", :operatingsystemrelease => "12.1(22)EA8a", :operatingsystemmajrelease => "12.1", :operatingsystemfeature => "I6K2L2Q4"},
48
- # "Cisco IOS Software, C2960 Software (C2960-LANBASEK9-M), Version 12.2(44)SE, RELEASE SOFTWARE (fc1)"=>{ :operatingsystem => "IOS", :operatingsystemrelease => "12.2(44)SE", :operatingsystemmajrelease => "12.2", :operatingsystemfeature => "LANBASEK9"},
49
- # "Cisco IOS Software, C870 Software (C870-ADVIPSERVICESK9-M), Version 12.4(11)XJ4, RELEASE SOFTWARE (fc2)"=>{ :operatingsystem => "IOS", :operatingsystemrelease => "12.4(11)XJ40", :operatingsystemmajrelease => "12.4XJ", :operatingsystemfeature => "ADVIPSERVICESK9"},
50
- # "Cisco IOS Software, 1841 Software (C1841-ADVSECURITYK9-M), Version 12.4(24)T4, RELEASE SOFTWARE (fc2)" =>{ :operatingsystem => "IOS", :operatingsystemrelease => "12.4(24)T4", :operatingsystemmajrelease => "12.4T", :operatingsystemfeature => "ADVSECURITYK9"},
51
- when /(?:Cisco )?(IOS)\s*(?:\(tm\) |Software, )?(?:\w+)\s+Software\s+\(\w+-(\w+)-\w+\), Version ([0-9.()A-Za-z]+),/
52
- facts[:operatingsystem] = $1
53
- facts[:operatingsystemrelease] = $3
54
- facts[:operatingsystemmajrelease] = ios_major_version(facts[:operatingsystemrelease])
55
- facts[:operatingsystemfeature] = $2
56
- end
57
- end
58
- facts
59
- end
60
-
61
- def ios_major_version(version)
62
- version.gsub(/^(\d+)\.(\d+)\(.+\)([A-Z]+)([\da-z]+)?/, '\1.\2\3')
63
- end
64
-
65
- def uptime_to_seconds(uptime)
66
- captures = (uptime.match(/^(?:(\d+) years?,)?\s*(?:(\d+) weeks?,)?\s*(?:(\d+) days?,)?\s*(?:(\d+) hours?,)?\s*(\d+) minutes?$/)).captures
67
- captures.zip([31536000, 604800, 86400, 3600, 60]).inject(0) do |total, (x,y)|
68
- total + (x.nil? ? 0 : x.to_i * y)
69
- end
70
- end
71
-
72
- end
@@ -1,94 +0,0 @@
1
- require 'puppet/util/network_device/cisco'
2
- require 'puppet/util/network_device/ipcalc'
3
-
4
- # this manages setting properties to an interface in a cisco switch or router
5
- class Puppet::Util::NetworkDevice::Cisco::Interface
6
-
7
- include Puppet::Util::NetworkDevice::IPCalc
8
- extend Puppet::Util::NetworkDevice::IPCalc
9
-
10
- attr_reader :transport, :name
11
-
12
- def initialize(name, transport)
13
- @name = name
14
- @transport = transport
15
- end
16
-
17
- COMMANDS = {
18
- # property => order, ios command/block/array
19
- :description => [1, "description %s"],
20
- :speed => [2, "speed %s"],
21
- :duplex => [3, "duplex %s"],
22
- :encapsulation => [4, "switchport trunk encapsulation %s"],
23
- :mode => [5, "switchport mode %s"],
24
- :access_vlan => [6, "switchport access vlan %s"],
25
- :native_vlan => [7, "switchport trunk native vlan %s"],
26
- :allowed_trunk_vlans => [8, "switchport trunk allowed vlan %s"],
27
- :etherchannel => [9, ["channel-group %s", "port group %s"]],
28
- :ipaddress => [10,
29
- lambda do |prefix,ip,option|
30
- ip.ipv6? ? "ipv6 address #{ip}/#{prefix} #{option}" :
31
- "ip address #{ip} #{netmask(Socket::AF_INET,prefix)}"
32
- end],
33
- :ensure => [11, lambda { |value| value == :present ? "no shutdown" : "shutdown" } ]
34
- }
35
-
36
- def update(is={}, should={})
37
- Puppet.debug("Updating interface #{name}")
38
- command("conf t")
39
- command("interface #{name}")
40
-
41
- # apply changes in a defined order for cisco IOS devices
42
- [is.keys, should.keys].flatten.uniq.sort {|a,b| COMMANDS[a][0] <=> COMMANDS[b][0] }.each do |property|
43
- # Work around for old documentation which shows :native_vlan used for access vlan
44
- if property == :access_vlan and should[:mode] != :trunk and should[:access_vlan].nil?
45
- should[:access_vlan] = should[:native_vlan]
46
- end
47
-
48
- Puppet.debug("comparing #{property}: #{is[property]} == #{should[property]}")
49
-
50
- # They're equal, so do nothing.
51
- next if is[property] == should[property]
52
-
53
- # We're deleting it
54
- if should[property] == :absent or should[property].nil?
55
- execute(property, is[property], "no ")
56
- next
57
- end
58
-
59
- # We're replacing an existing value or creating a new one
60
- execute(property, should[property])
61
- end
62
-
63
- command("exit")
64
- command("exit")
65
- end
66
-
67
- def execute(property, value, prefix='')
68
- case COMMANDS[property][1]
69
- when Array
70
- COMMANDS[property][1].each do |command|
71
- transport.command(prefix + command % value) do |out|
72
- break unless out =~ /^%/
73
- end
74
- end
75
- when String
76
- command(prefix + COMMANDS[property][1] % value)
77
- when Proc
78
- value = [value] unless value.is_a?(Array)
79
- value.each do |v|
80
- command(prefix + COMMANDS[property][1].call(*v))
81
- end
82
- end
83
- end
84
-
85
- def command(command)
86
- transport.command(command) do |out|
87
- if out =~ /^%/mo or out =~ /^Command rejected:/mo
88
- # strip off the command just sent
89
- error = out.sub(command,'')
90
- Puppet.err _("Error while executing '%{command}', device returned: %{error}") % { command: command, error: error }
91
- end
92
- end
93
- end
94
- end
@@ -1,68 +0,0 @@
1
- require 'puppet/util/network_device'
2
-
3
- module Puppet::Util::NetworkDevice::IPCalc
4
-
5
- # This is a rip-off of authstore
6
- Octet = '(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])'
7
- IPv4 = "#{Octet}\.#{Octet}\.#{Octet}\.#{Octet}"
8
- IPv6_full = "_:_:_:_:_:_:_:_|_:_:_:_:_:_::_?|_:_:_:_:_::((_:)?_)?|_:_:_:_::((_:){0,2}_)?|_:_:_::((_:){0,3}_)?|_:_::((_:){0,4}_)?|_::((_:){0,5}_)?|::((_:){0,6}_)?"
9
- IPv6_partial = "_:_:_:_:_:_:|_:_:_:_::(_:)?|_:_::(_:){0,2}|_::(_:){0,3}"
10
- IP = "#{IPv4}|#{IPv6_full}".gsub(/_/,'([0-9a-fA-F]{1,4})').gsub(/\(/,'(?:')
11
-
12
- def parse(value)
13
- case value
14
- when /^(#{IP})\/(\d+)$/ # 12.34.56.78/24, a001:b002::efff/120, c444:1000:2000::9:192.168.0.1/112
15
- [$2.to_i,IPAddr.new($1)]
16
- when /^(#{IP})$/ # 10.20.30.40,
17
- value = IPAddr.new(value)
18
- [bits(value.family),value]
19
- end
20
- end
21
-
22
- def bits(family)
23
- family == Socket::AF_INET6 ? 128 : 32
24
- end
25
-
26
- def fullmask(family)
27
- (1 << bits(family)) - 1
28
- end
29
-
30
- def mask(family, length)
31
- (1 << (bits(family) - length)) - 1
32
- end
33
-
34
- # returns ip address netmask from prefix length
35
- def netmask(family, length)
36
- IPAddr.new(fullmask(family) & ~mask(family, length) , family)
37
- end
38
-
39
- # returns an IOS wildmask
40
- def wildmask(family, length)
41
- IPAddr.new(mask(family, length) , family)
42
- end
43
-
44
- # returns ip address prefix length from netmask
45
- def prefix_length(netmask)
46
- mask_addr = netmask.to_i
47
- return 0 if mask_addr == 0
48
- length=32
49
- if (netmask.ipv6?)
50
- length=128
51
- end
52
-
53
- mask = mask_addr < 2**length ? length : 128
54
-
55
- mask.times do
56
- if ((mask_addr & 1) == 1)
57
- break
58
- end
59
- mask_addr = mask_addr >> 1
60
- mask = mask - 1
61
- end
62
- mask
63
- end
64
-
65
- def linklocal?(ip)
66
- end
67
-
68
- end
@@ -1,126 +0,0 @@
1
-
2
- require 'puppet/util/network_device'
3
- require 'puppet/util/network_device/transport'
4
- require 'puppet/util/network_device/transport/base'
5
-
6
- # This is an adaptation/simplification of gem net-ssh-telnet, which aims to have
7
- # a sane interface to Net::SSH. Credits goes to net-ssh-telnet authors
8
- class Puppet::Util::NetworkDevice::Transport::Ssh < Puppet::Util::NetworkDevice::Transport::Base
9
-
10
- attr_accessor :buf, :ssh, :channel
11
-
12
- def initialize(verbose = false)
13
- super()
14
- @verbose = verbose
15
- unless Puppet.features.ssh?
16
- raise _('Connecting with ssh to a network device requires the \'net/ssh\' ruby library')
17
- end
18
- end
19
-
20
- def handles_login?
21
- true
22
- end
23
-
24
- def eof?
25
- !! @eof
26
- end
27
-
28
- def connect(&block)
29
- @output = []
30
- @channel_data = ""
31
-
32
- begin
33
- Puppet.debug("connecting to #{host} as #{user}")
34
- @ssh = Net::SSH.start(host, user, :port => port, :password => password, :timeout => timeout)
35
- rescue TimeoutError
36
- raise TimeoutError, _("timed out while opening an ssh connection to the host"), $!.backtrace
37
- rescue Net::SSH::AuthenticationFailed
38
- raise Puppet::Error, _("SSH authentication failure connecting to %{host} as %{user}") % { host: host, user: user }, $!.backtrace
39
- rescue Net::SSH::Exception
40
- raise Puppet::Error, _("SSH connection failure to %{host}") % { host: host }, $!.backtrace
41
- end
42
-
43
- @buf = ""
44
- @eof = false
45
- @channel = nil
46
- @ssh.open_channel do |channel|
47
- channel.request_pty { |ch,success| raise _("failed to open pty") unless success }
48
-
49
- channel.send_channel_request("shell") do |ch, success|
50
- raise _("failed to open ssh shell channel") unless success
51
-
52
- ch.on_data { |_,data| @buf << data }
53
- ch.on_extended_data { |_,type,data| @buf << data if type == 1 }
54
- ch.on_close { @eof = true }
55
-
56
- @channel = ch
57
- expect(default_prompt, &block)
58
- # this is a little bit unorthodox, we're trying to escape
59
- # the ssh loop there while still having the ssh connection up
60
- # otherwise we wouldn't be able to return ssh stdout/stderr
61
- # for a given call of command.
62
- return # rubocop:disable Lint/NonLocalExitFromIterator
63
- end
64
-
65
- end
66
- @ssh.loop
67
-
68
- end
69
-
70
- def close
71
- begin
72
- @channel.close if @channel
73
- @channel = nil
74
- @ssh.close if @ssh
75
- rescue IOError
76
- Puppet.debug "device terminated ssh session impolitely"
77
- end
78
- end
79
-
80
- def expect(prompt)
81
- line = ''
82
- sock = @ssh.transport.socket
83
-
84
- while not @eof
85
- break if line =~ prompt and @buf == ''
86
- break if sock.closed?
87
-
88
- IO::select([sock], [sock], nil, nil)
89
-
90
- process_ssh
91
-
92
- # at this point we have accumulated some data in @buf
93
- # or the channel has been closed
94
- if @buf != ""
95
- line += @buf.gsub(/\r\n/no, "\n")
96
- @buf = ''
97
- yield line if block_given?
98
- elsif @eof
99
- # channel has been closed
100
- break if line =~ prompt
101
- if line == ''
102
- line = nil
103
- yield nil if block_given?
104
- end
105
- break
106
- end
107
- end
108
- Puppet.debug("ssh: expected #{line}") if @verbose
109
- line
110
- end
111
-
112
- def send(line)
113
- Puppet.debug("ssh: send #{line}") if @verbose
114
- @channel.send_data(line + "\n")
115
- end
116
-
117
- def process_ssh
118
- while @buf == "" and not eof?
119
- begin
120
- @channel.connection.process(0.1)
121
- rescue IOError
122
- @eof = true
123
- end
124
- end
125
- end
126
- end
@@ -1,47 +0,0 @@
1
- require 'puppet/util/network_device'
2
- require 'puppet/util/network_device/transport'
3
- require 'puppet/util/network_device/transport/base'
4
-
5
- if Puppet.features.telnet?
6
- require 'net/telnet'
7
-
8
- class Puppet::Util::NetworkDevice::Transport::Telnet < Puppet::Util::NetworkDevice::Transport::Base
9
- def initialize(verbose = false)
10
- super()
11
- @verbose = verbose
12
- end
13
-
14
- def handles_login?
15
- false
16
- end
17
-
18
- def connect
19
- @telnet = Net::Telnet::new("Host" => host, "Port" => port || 23,
20
- "Timeout" => 10,
21
- "Prompt" => default_prompt)
22
- end
23
-
24
- def close
25
- @telnet.close if @telnet
26
- @telnet = nil
27
- end
28
-
29
- def expect(prompt)
30
- @telnet.waitfor(prompt) do |out|
31
- yield out if block_given?
32
- end
33
- end
34
-
35
- def command(cmd, options = {})
36
- send(cmd)
37
- expect(options[:prompt] || default_prompt) do |output|
38
- yield output if block_given?
39
- end
40
- end
41
-
42
- def send(line)
43
- Puppet.debug("telnet: send #{line}") if @verbose
44
- @telnet.puts(line)
45
- end
46
- end
47
- end
@@ -1,1267 +0,0 @@
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
- class << self
16
- attr_accessor :com_initialized
17
- end
18
-
19
- # :stopdoc:
20
- TASK_TIME_TRIGGER_ONCE = :TASK_TIME_TRIGGER_ONCE
21
- TASK_TIME_TRIGGER_DAILY = :TASK_TIME_TRIGGER_DAILY
22
- TASK_TIME_TRIGGER_WEEKLY = :TASK_TIME_TRIGGER_WEEKLY
23
- TASK_TIME_TRIGGER_MONTHLYDATE = :TASK_TIME_TRIGGER_MONTHLYDATE
24
- TASK_TIME_TRIGGER_MONTHLYDOW = :TASK_TIME_TRIGGER_MONTHLYDOW
25
- TASK_EVENT_TRIGGER_ON_IDLE = :TASK_EVENT_TRIGGER_ON_IDLE
26
- TASK_EVENT_TRIGGER_AT_SYSTEMSTART = :TASK_EVENT_TRIGGER_AT_SYSTEMSTART
27
- TASK_EVENT_TRIGGER_AT_LOGON = :TASK_EVENT_TRIGGER_AT_LOGON
28
-
29
- TASK_SUNDAY = 0x1
30
- TASK_MONDAY = 0x2
31
- TASK_TUESDAY = 0x4
32
- TASK_WEDNESDAY = 0x8
33
- TASK_THURSDAY = 0x10
34
- TASK_FRIDAY = 0x20
35
- TASK_SATURDAY = 0x40
36
- TASK_FIRST_WEEK = 1
37
- TASK_SECOND_WEEK = 2
38
- TASK_THIRD_WEEK = 3
39
- TASK_FOURTH_WEEK = 4
40
- TASK_LAST_WEEK = 5
41
- TASK_JANUARY = 0x1
42
- TASK_FEBRUARY = 0x2
43
- TASK_MARCH = 0x4
44
- TASK_APRIL = 0x8
45
- TASK_MAY = 0x10
46
- TASK_JUNE = 0x20
47
- TASK_JULY = 0x40
48
- TASK_AUGUST = 0x80
49
- TASK_SEPTEMBER = 0x100
50
- TASK_OCTOBER = 0x200
51
- TASK_NOVEMBER = 0x400
52
- TASK_DECEMBER = 0x800
53
-
54
- TASK_FLAG_INTERACTIVE = 0x1
55
- TASK_FLAG_DELETE_WHEN_DONE = 0x2
56
- TASK_FLAG_DISABLED = 0x4
57
- TASK_FLAG_START_ONLY_IF_IDLE = 0x10
58
- TASK_FLAG_KILL_ON_IDLE_END = 0x20
59
- TASK_FLAG_DONT_START_IF_ON_BATTERIES = 0x40
60
- TASK_FLAG_KILL_IF_GOING_ON_BATTERIES = 0x80
61
- TASK_FLAG_RUN_ONLY_IF_DOCKED = 0x100
62
- TASK_FLAG_HIDDEN = 0x200
63
- TASK_FLAG_RUN_IF_CONNECTED_TO_INTERNET = 0x400
64
- TASK_FLAG_RESTART_ON_IDLE_RESUME = 0x800
65
- TASK_FLAG_SYSTEM_REQUIRED = 0x1000
66
- TASK_FLAG_RUN_ONLY_IF_LOGGED_ON = 0x2000
67
- TASK_TRIGGER_FLAG_HAS_END_DATE = 0x1
68
- TASK_TRIGGER_FLAG_KILL_AT_DURATION_END = 0x2
69
- TASK_TRIGGER_FLAG_DISABLED = 0x4
70
-
71
- TASK_MAX_RUN_TIMES = 1440
72
- TASKS_TO_RETRIEVE = 5
73
-
74
- # COM
75
-
76
- CLSID_CTask = FFI::WIN32::GUID['148BD520-A2AB-11CE-B11F-00AA00530503']
77
- IID_ITask = FFI::WIN32::GUID['148BD524-A2AB-11CE-B11F-00AA00530503']
78
- IID_IPersistFile = FFI::WIN32::GUID['0000010b-0000-0000-C000-000000000046']
79
-
80
- SCHED_S_TASK_READY = 0x00041300
81
- SCHED_S_TASK_RUNNING = 0x00041301
82
- SCHED_S_TASK_HAS_NOT_RUN = 0x00041303
83
- SCHED_S_TASK_NOT_SCHEDULED = 0x00041305
84
- # HRESULT error codes
85
- # https://blogs.msdn.com/b/eldar/archive/2007/04/03/a-lot-of-hresult-codes.aspx
86
- # in Ruby, an 0x8XXXXXXX style HRESULT can be resolved to 2s complement
87
- # by using "0x8XXXXXXX".to_i(16) - - 0x100000000
88
- SCHED_E_ACCOUNT_INFORMATION_NOT_SET = -2147216625 # 0x8004130F
89
- SCHED_E_NO_SECURITY_SERVICES = -2147216622 # 0x80041312
90
- # No mapping between account names and security IDs was done.
91
- ERROR_NONE_MAPPED = -2147023564 # 0x80070534 WIN32 Error CODE 1332 (0x534)
92
-
93
- # :startdoc:
94
-
95
- # Shorthand constants
96
- IDLE = Puppet::Util::Windows::Process::IDLE_PRIORITY_CLASS
97
- NORMAL = Puppet::Util::Windows::Process::NORMAL_PRIORITY_CLASS
98
- HIGH = Puppet::Util::Windows::Process::HIGH_PRIORITY_CLASS
99
- REALTIME = Puppet::Util::Windows::Process::REALTIME_PRIORITY_CLASS
100
- BELOW_NORMAL = Puppet::Util::Windows::Process::BELOW_NORMAL_PRIORITY_CLASS
101
- ABOVE_NORMAL = Puppet::Util::Windows::Process::ABOVE_NORMAL_PRIORITY_CLASS
102
-
103
- ONCE = TASK_TIME_TRIGGER_ONCE
104
- DAILY = TASK_TIME_TRIGGER_DAILY
105
- WEEKLY = TASK_TIME_TRIGGER_WEEKLY
106
- MONTHLYDATE = TASK_TIME_TRIGGER_MONTHLYDATE
107
- MONTHLYDOW = TASK_TIME_TRIGGER_MONTHLYDOW
108
-
109
- ON_IDLE = TASK_EVENT_TRIGGER_ON_IDLE
110
- AT_SYSTEMSTART = TASK_EVENT_TRIGGER_AT_SYSTEMSTART
111
- AT_LOGON = TASK_EVENT_TRIGGER_AT_LOGON
112
- FIRST_WEEK = TASK_FIRST_WEEK
113
- SECOND_WEEK = TASK_SECOND_WEEK
114
- THIRD_WEEK = TASK_THIRD_WEEK
115
- FOURTH_WEEK = TASK_FOURTH_WEEK
116
- LAST_WEEK = TASK_LAST_WEEK
117
- SUNDAY = TASK_SUNDAY
118
- MONDAY = TASK_MONDAY
119
- TUESDAY = TASK_TUESDAY
120
- WEDNESDAY = TASK_WEDNESDAY
121
- THURSDAY = TASK_THURSDAY
122
- FRIDAY = TASK_FRIDAY
123
- SATURDAY = TASK_SATURDAY
124
- JANUARY = TASK_JANUARY
125
- FEBRUARY = TASK_FEBRUARY
126
- MARCH = TASK_MARCH
127
- APRIL = TASK_APRIL
128
- MAY = TASK_MAY
129
- JUNE = TASK_JUNE
130
- JULY = TASK_JULY
131
- AUGUST = TASK_AUGUST
132
- SEPTEMBER = TASK_SEPTEMBER
133
- OCTOBER = TASK_OCTOBER
134
- NOVEMBER = TASK_NOVEMBER
135
- DECEMBER = TASK_DECEMBER
136
-
137
- INTERACTIVE = TASK_FLAG_INTERACTIVE
138
- DELETE_WHEN_DONE = TASK_FLAG_DELETE_WHEN_DONE
139
- DISABLED = TASK_FLAG_DISABLED
140
- START_ONLY_IF_IDLE = TASK_FLAG_START_ONLY_IF_IDLE
141
- KILL_ON_IDLE_END = TASK_FLAG_KILL_ON_IDLE_END
142
- DONT_START_IF_ON_BATTERIES = TASK_FLAG_DONT_START_IF_ON_BATTERIES
143
- KILL_IF_GOING_ON_BATTERIES = TASK_FLAG_KILL_IF_GOING_ON_BATTERIES
144
- RUN_ONLY_IF_DOCKED = TASK_FLAG_RUN_ONLY_IF_DOCKED
145
- HIDDEN = TASK_FLAG_HIDDEN
146
- RUN_IF_CONNECTED_TO_INTERNET = TASK_FLAG_RUN_IF_CONNECTED_TO_INTERNET
147
- RESTART_ON_IDLE_RESUME = TASK_FLAG_RESTART_ON_IDLE_RESUME
148
- SYSTEM_REQUIRED = TASK_FLAG_SYSTEM_REQUIRED
149
- RUN_ONLY_IF_LOGGED_ON = TASK_FLAG_RUN_ONLY_IF_LOGGED_ON
150
-
151
- FLAG_HAS_END_DATE = TASK_TRIGGER_FLAG_HAS_END_DATE
152
- FLAG_KILL_AT_DURATION_END = TASK_TRIGGER_FLAG_KILL_AT_DURATION_END
153
- FLAG_DISABLED = TASK_TRIGGER_FLAG_DISABLED
154
-
155
- MAX_RUN_TIMES = TASK_MAX_RUN_TIMES
156
-
157
- # unfortunately MSTask.h does not specify the limits for any settings
158
- # so these were determined with some experimentation
159
- # if values too large are written, its suspected there may be internal
160
- # limits may be exceeded, corrupting the job
161
- # used for max application name and path values
162
- MAX_PATH = 260
163
- # UNLEN from lmcons.h is 256
164
- # https://technet.microsoft.com/it-it/library/bb726984(en-us).aspx specifies 104
165
- MAX_ACCOUNT_LENGTH = 256
166
- # command line max length is limited to 8191, choose something high but still enough that we don't blow out CLI
167
- MAX_PARAMETERS_LENGTH = 4096
168
- # in testing, this value could be set to a length of 99999, but saving / loading the task failed
169
- MAX_COMMENT_LENGTH = 8192
170
-
171
- # Returns a new TaskScheduler object. If a work_item (and possibly the
172
- # the trigger) are passed as arguments then a new work item is created and
173
- # associated with that trigger, although you can still activate other tasks
174
- # with the same handle.
175
- #
176
- # This is really just a bit of convenience. Passing arguments to the
177
- # constructor is the same as calling TaskScheduler.new plus
178
- # TaskScheduler#new_work_item.
179
- #
180
- def initialize(work_item=nil, trigger=nil)
181
- @pITS = nil
182
- @pITask = nil
183
-
184
- if ! self.class.com_initialized
185
- Puppet::Util::Windows::COM.InitializeCom()
186
- self.class.com_initialized = true
187
- end
188
-
189
- @pITS = COM::TaskScheduler.new
190
- at_exit do
191
- begin
192
- @pITS.Release if @pITS && !@pITS.null?
193
- @pITS = nil
194
- rescue
195
- end
196
- end
197
-
198
- if work_item
199
- if trigger
200
- raise TypeError unless trigger.is_a?(Hash)
201
- new_work_item(work_item, trigger)
202
- end
203
- end
204
- end
205
-
206
- # Returns an array of scheduled task names.
207
- #
208
- def enum
209
- raise Error.new(_('No current task scheduler. ITaskScheduler is NULL.')) if @pITS.nil?
210
- array = []
211
-
212
- @pITS.UseInstance(COM::EnumWorkItems, :Enum) do |pIEnum|
213
- FFI::MemoryPointer.new(:pointer) do |names_array_ptr_ptr|
214
- FFI::MemoryPointer.new(:win32_ulong) do |fetched_count_ptr|
215
- # awkward usage, if number requested is available, returns S_OK (0), or if less were returned returns S_FALSE (1)
216
- while (pIEnum.Next(TASKS_TO_RETRIEVE, names_array_ptr_ptr, fetched_count_ptr) >= Puppet::Util::Windows::COM::S_OK)
217
- count = fetched_count_ptr.read_win32_ulong
218
- break if count == 0
219
-
220
- names_array_ptr_ptr.read_com_memory_pointer do |names_array_ptr|
221
- # iterate over the array of pointers
222
- name_ptr_ptr = FFI::Pointer.new(:pointer, names_array_ptr)
223
- for i in 0 ... count
224
- name_ptr_ptr[i].read_com_memory_pointer do |name_ptr|
225
- array << name_ptr.read_arbitrary_wide_string_up_to(MAX_PATH)
226
- end
227
- end
228
- end
229
- end
230
- end
231
- end
232
- end
233
-
234
- array
235
- end
236
-
237
- alias :tasks :enum
238
-
239
- # Activate the specified task.
240
- #
241
- def activate(task)
242
- raise Error.new(_('No current task scheduler. ITaskScheduler is NULL.')) if @pITS.nil?
243
- raise TypeError unless task.is_a?(String)
244
-
245
- FFI::MemoryPointer.new(:pointer) do |ptr|
246
- @pITS.Activate(wide_string(task), IID_ITask, ptr)
247
-
248
- reset_current_task
249
- @pITask = COM::Task.new(ptr.read_pointer)
250
- end
251
-
252
- @pITask
253
- end
254
-
255
- # Delete the specified task name.
256
- #
257
- def delete(task)
258
- raise Error.new(_('No current task scheduler. ITaskScheduler is NULL.')) if @pITS.nil?
259
- raise TypeError unless task.is_a?(String)
260
-
261
- @pITS.Delete(wide_string(task))
262
-
263
- true
264
- end
265
-
266
- # Execute the current task.
267
- #
268
- def run
269
- raise Error.new(_('No currently active task. ITask is NULL.')) if @pITask.nil?
270
-
271
- @pITask.Run
272
- end
273
-
274
- # Saves the current task. Tasks must be saved before they can be activated.
275
- # The .job file itself is typically stored in the C:\WINDOWS\Tasks folder.
276
- #
277
- # If +file+ (an absolute path) is specified then the job is saved to that
278
- # file instead. A '.job' extension is recommended but not enforced.
279
- #
280
- def save(file = nil)
281
- raise Error.new(_('No currently active task. ITask is NULL.')) if @pITask.nil?
282
- raise Error.new(_('Account information must be set on the current task to save it properly.')) if !@account_information_set
283
-
284
- reset = true
285
-
286
- begin
287
- @pITask.QueryInstance(COM::PersistFile) do |pIPersistFile|
288
- wide_file = wide_string(file)
289
- pIPersistFile.Save(wide_file, 1)
290
- pIPersistFile.SaveCompleted(wide_file)
291
- end
292
- rescue
293
- reset = false
294
- ensure
295
- reset_current_task if reset
296
- end
297
- end
298
-
299
- # Terminate the current task.
300
- #
301
- def terminate
302
- raise Error.new(_('No currently active task. ITask is NULL.')) if @pITask.nil?
303
-
304
- @pITask.Terminate
305
- end
306
-
307
- # Set the host on which the various TaskScheduler methods will execute.
308
- #
309
- def machine=(host)
310
- raise Error.new(_('No current task scheduler. ITaskScheduler is NULL.')) if @pITS.nil?
311
- raise TypeError unless host.is_a?(String)
312
-
313
- @pITS.SetTargetComputer(wide_string(host))
314
-
315
- host
316
- end
317
-
318
- alias :host= :machine=
319
-
320
- # Sets the +user+ and +password+ for the given task. If the user and
321
- # password are set properly then true is returned.
322
- #
323
- # In some cases the job may be created, but the account information was
324
- # bad. In this case the task is created but a warning is generated and
325
- # false is returned.
326
- #
327
- # Note that if intending to use SYSTEM, specify an empty user and nil password
328
- #
329
- # Calling task.set_account_information('SYSTEM', nil) will generally not
330
- # work, except for one special case where flags are also set like:
331
- # task.flags = Win32::TaskScheduler::TASK_FLAG_RUN_ONLY_IF_LOGGED_ON
332
- #
333
- # This must be done prior to the 1st save() call for the task to be
334
- # properly registered and visible through the MMC snap-in / schtasks.exe
335
- #
336
- def set_account_information(user, password)
337
- raise Error.new(_('No current task scheduler. ITaskScheduler is NULL.')) if @pITS.nil?
338
- raise Error.new(_('No currently active task. ITask is NULL.')) if @pITask.nil?
339
-
340
- bool = false
341
-
342
- begin
343
- if (user.nil? || user=="") && (password.nil? || password=="")
344
- @pITask.SetAccountInformation(wide_string(""), FFI::Pointer::NULL)
345
- else
346
- if user.length > MAX_ACCOUNT_LENGTH
347
- raise Error.new(_("User has exceeded maximum allowed length %{max}") % { max: MAX_ACCOUNT_LENGTH })
348
- end
349
- user = wide_string(user)
350
- password = wide_string(password)
351
- @pITask.SetAccountInformation(user, password)
352
- end
353
-
354
- @account_information_set = true
355
- bool = true
356
- rescue Puppet::Util::Windows::Error => e
357
- raise e unless e.code == SCHED_E_ACCOUNT_INFORMATION_NOT_SET
358
-
359
- warn _('job created, but password was invalid')
360
- end
361
-
362
- bool
363
- end
364
-
365
- # Returns the user associated with the task or nil if no user has yet
366
- # been associated with the task.
367
- #
368
- def account_information
369
- raise Error.new(_('No current task scheduler. ITaskScheduler is NULL.')) if @pITS.nil?
370
- raise Error.new(_('No currently active task. ITask is NULL.')) if @pITask.nil?
371
-
372
- # default under certain failures
373
- user = nil
374
-
375
- begin
376
- FFI::MemoryPointer.new(:pointer) do |ptr|
377
- @pITask.GetAccountInformation(ptr)
378
- ptr.read_com_memory_pointer do |str_ptr|
379
- user = str_ptr.read_arbitrary_wide_string_up_to(MAX_ACCOUNT_LENGTH) if ! str_ptr.null?
380
- end
381
- end
382
- rescue Puppet::Util::Windows::Error => e
383
- raise e unless e.code == SCHED_E_ACCOUNT_INFORMATION_NOT_SET ||
384
- e.code == SCHED_E_NO_SECURITY_SERVICES ||
385
- e.code == ERROR_NONE_MAPPED
386
- end
387
-
388
- user
389
- end
390
-
391
- # Returns the name of the application associated with the task.
392
- #
393
- def application_name
394
- raise Error.new(_('No current task scheduler. ITaskScheduler is NULL.')) if @pITS.nil?
395
- raise Error.new(_('No currently active task. ITask is NULL.')) if @pITask.nil?
396
-
397
- app = nil
398
-
399
- FFI::MemoryPointer.new(:pointer) do |ptr|
400
- @pITask.GetApplicationName(ptr)
401
-
402
- ptr.read_com_memory_pointer do |str_ptr|
403
- app = str_ptr.read_arbitrary_wide_string_up_to(MAX_PATH) if ! str_ptr.null?
404
- end
405
- end
406
-
407
- app
408
- end
409
-
410
- # Sets the application name associated with the task.
411
- #
412
- def application_name=(app)
413
- raise Error.new(_('No current task scheduler. ITaskScheduler is NULL.')) if @pITS.nil?
414
- raise Error.new(_('No currently active task. ITask is NULL.')) if @pITask.nil?
415
- raise TypeError unless app.is_a?(String)
416
-
417
- # the application name is written to a .job file on disk, so is subject to path limitations
418
- if app.length > MAX_PATH
419
- raise Error.new(_("Application name has exceeded maximum allowed length %{max}") % { max: MAX_PATH })
420
- end
421
- @pITask.SetApplicationName(wide_string(app))
422
-
423
- app
424
- end
425
-
426
- # Returns the command line parameters for the task.
427
- #
428
- def parameters
429
- raise Error.new(_('No current task scheduler. ITaskScheduler is NULL.')) if @pITS.nil?
430
- raise Error.new(_('No currently active task. ITask is NULL.')) if @pITask.nil?
431
-
432
- param = nil
433
-
434
- FFI::MemoryPointer.new(:pointer) do |ptr|
435
- @pITask.GetParameters(ptr)
436
-
437
- ptr.read_com_memory_pointer do |str_ptr|
438
- param = str_ptr.read_arbitrary_wide_string_up_to(MAX_PARAMETERS_LENGTH) if ! str_ptr.null?
439
- end
440
- end
441
-
442
- param
443
- end
444
-
445
- # Sets the parameters for the task. These parameters are passed as command
446
- # line arguments to the application the task will run. To clear the command
447
- # line parameters set it to an empty string.
448
- #
449
- def parameters=(param)
450
- raise Error.new(_('No current task scheduler. ITaskScheduler is NULL.')) if @pITS.nil?
451
- raise Error.new(_('No currently active task. ITask is NULL.')) if @pITask.nil?
452
- raise TypeError unless param.is_a?(String)
453
-
454
- if param.length > MAX_PARAMETERS_LENGTH
455
- raise Error.new(_("Parameters has exceeded maximum allowed length %{max}") % { max: MAX_PARAMETERS_LENGTH })
456
- end
457
-
458
- @pITask.SetParameters(wide_string(param))
459
-
460
- param
461
- end
462
-
463
- # Returns the working directory for the task.
464
- #
465
- def working_directory
466
- raise Error.new(_('No current task scheduler. ITaskScheduler is NULL.')) if @pITS.nil?
467
- raise Error.new(_('No currently active task. ITask is NULL.')) if @pITask.nil?
468
-
469
- dir = nil
470
-
471
- FFI::MemoryPointer.new(:pointer) do |ptr|
472
- @pITask.GetWorkingDirectory(ptr)
473
-
474
- ptr.read_com_memory_pointer do |str_ptr|
475
- dir = str_ptr.read_arbitrary_wide_string_up_to(MAX_PATH) if ! str_ptr.null?
476
- end
477
- end
478
-
479
- dir
480
- end
481
-
482
- # Sets the working directory for the task.
483
- #
484
- def working_directory=(dir)
485
- raise Error.new(_('No current task scheduler. ITaskScheduler is NULL.')) if @pITS.nil?
486
- raise Error.new(_('No currently active task. ITask is NULL.')) if @pITask.nil?
487
- raise TypeError unless dir.is_a?(String)
488
-
489
- if dir.length > MAX_PATH
490
- raise Error.new(_("Working directory has exceeded maximum allowed length %{max}") % { max: MAX_PATH })
491
- end
492
-
493
- @pITask.SetWorkingDirectory(wide_string(dir))
494
-
495
- dir
496
- end
497
-
498
- # Returns the task's priority level. Possible values are 'idle',
499
- # 'normal', 'high', 'realtime', 'below_normal', 'above_normal',
500
- # and 'unknown'.
501
- #
502
- def priority
503
- raise Error.new(_('No current task scheduler. ITaskScheduler is NULL.')) if @pITS.nil?
504
- raise Error.new(_('No currently active task. ITask is NULL.')) if @pITask.nil?
505
-
506
- priority_name = ''
507
-
508
- FFI::MemoryPointer.new(:dword, 1) do |ptr|
509
- @pITask.GetPriority(ptr)
510
-
511
- pri = ptr.read_dword
512
- if (pri & IDLE) != 0
513
- priority_name = 'idle'
514
- elsif (pri & NORMAL) != 0
515
- priority_name = 'normal'
516
- elsif (pri & HIGH) != 0
517
- priority_name = 'high'
518
- elsif (pri & REALTIME) != 0
519
- priority_name = 'realtime'
520
- elsif (pri & BELOW_NORMAL) != 0
521
- priority_name = 'below_normal'
522
- elsif (pri & ABOVE_NORMAL) != 0
523
- priority_name = 'above_normal'
524
- else
525
- priority_name = 'unknown'
526
- end
527
- end
528
-
529
- priority_name
530
- end
531
-
532
- # Sets the priority of the task. The +priority+ should be a numeric
533
- # priority constant value.
534
- #
535
- def priority=(priority)
536
- raise Error.new(_('No current task scheduler. ITaskScheduler is NULL.')) if @pITS.nil?
537
- raise Error.new(_('No currently active task. ITask is NULL.')) if @pITask.nil?
538
- raise TypeError unless priority.is_a?(Numeric)
539
-
540
- @pITask.SetPriority(priority)
541
-
542
- priority
543
- end
544
-
545
- # Creates a new work item (scheduled job) with the given +trigger+. The
546
- # trigger variable is a hash of options that define when the scheduled
547
- # job should run.
548
- #
549
- def new_work_item(task, trigger)
550
- raise TypeError unless trigger.is_a?(Hash)
551
- raise Error.new(_('No current task scheduler. ITaskScheduler is NULL.')) if @pITS.nil?
552
-
553
- # I'm working around github issue #1 here.
554
- enum.each{ |name|
555
- if name.downcase == task.downcase + '.job'
556
- raise Error.new(_("task '%{task}' already exists") % { task: task })
557
- end
558
- }
559
-
560
- FFI::MemoryPointer.new(:pointer) do |ptr|
561
- @pITS.NewWorkItem(wide_string(task), CLSID_CTask, IID_ITask, ptr)
562
-
563
- reset_current_task
564
- @pITask = COM::Task.new(ptr.read_pointer)
565
-
566
- FFI::MemoryPointer.new(:word, 1) do |trigger_index_ptr|
567
- # Without the 'enum.include?' check above the code segfaults here if the
568
- # task already exists. This should probably be handled properly instead
569
- # of simply avoiding the issue.
570
-
571
- @pITask.UseInstance(COM::TaskTrigger, :CreateTrigger, trigger_index_ptr) do |pITaskTrigger|
572
- populate_trigger(pITaskTrigger, trigger)
573
- end
574
- end
575
- end
576
-
577
- # preload task with the SYSTEM account
578
- # empty string '' means 'SYSTEM' per MSDN, so default it
579
- # given an account is necessary for creation of a task
580
- # note that a user may set SYSTEM explicitly, but that has problems
581
- # https://msdn.microsoft.com/en-us/library/windows/desktop/aa381276(v=vs.85).aspx
582
- set_account_information('', nil)
583
-
584
- @pITask
585
- end
586
-
587
- alias :new_task :new_work_item
588
-
589
- # Returns the number of triggers associated with the active task.
590
- #
591
- def trigger_count
592
- raise Error.new(_('No current task scheduler. ITaskScheduler is NULL.')) if @pITS.nil?
593
- raise Error.new(_('No currently active task. ITask is NULL.')) if @pITask.nil?
594
-
595
- count = 0
596
-
597
- FFI::MemoryPointer.new(:word, 1) do |ptr|
598
- @pITask.GetTriggerCount(ptr)
599
- count = ptr.read_word
600
- end
601
-
602
- count
603
- end
604
-
605
- # Deletes the trigger at the specified index.
606
- #
607
- def delete_trigger(index)
608
- raise Error.new(_('No current task scheduler. ITaskScheduler is NULL.')) if @pITS.nil?
609
- raise Error.new(_('No currently active task. ITask is NULL.')) if @pITask.nil?
610
-
611
- @pITask.DeleteTrigger(index)
612
- index
613
- end
614
-
615
- # Returns a hash that describes the trigger at the given index for the
616
- # current task.
617
- #
618
- def trigger(index)
619
- raise Error.new(_('No current task scheduler. ITaskScheduler is NULL.')) if @pITS.nil?
620
- raise Error.new(_('No currently active task. ITask is NULL.')) if @pITask.nil?
621
-
622
- trigger = {}
623
-
624
- @pITask.UseInstance(COM::TaskTrigger, :GetTrigger, index) do |pITaskTrigger|
625
- FFI::MemoryPointer.new(COM::TASK_TRIGGER.size) do |task_trigger_ptr|
626
- pITaskTrigger.GetTrigger(task_trigger_ptr)
627
- trigger = populate_hash_from_trigger(COM::TASK_TRIGGER.new(task_trigger_ptr))
628
- end
629
- end
630
-
631
- trigger
632
- end
633
-
634
- # Sets the trigger for the currently active task.
635
- #
636
- def trigger=(trigger)
637
- raise Error.new(_('No current task scheduler. ITaskScheduler is NULL.')) if @pITS.nil?
638
- raise Error.new(_('No currently active task. ITask is NULL.')) if @pITask.nil?
639
- raise TypeError unless trigger.is_a?(Hash)
640
-
641
- FFI::MemoryPointer.new(:word, 1) do |trigger_index_ptr|
642
- # Without the 'enum.include?' check above the code segfaults here if the
643
- # task already exists. This should probably be handled properly instead
644
- # of simply avoiding the issue.
645
-
646
- @pITask.UseInstance(COM::TaskTrigger, :CreateTrigger, trigger_index_ptr) do |pITaskTrigger|
647
- populate_trigger(pITaskTrigger, trigger)
648
- end
649
- end
650
-
651
- trigger
652
- end
653
-
654
- # Adds a trigger at the specified index.
655
- #
656
- def add_trigger(index, trigger)
657
- raise Error.new(_('No current task scheduler. ITaskScheduler is NULL.')) if @pITS.nil?
658
- raise Error.new(_('No currently active task. ITask is NULL.')) if @pITask.nil?
659
- raise TypeError unless trigger.is_a?(Hash)
660
-
661
- @pITask.UseInstance(COM::TaskTrigger, :GetTrigger, index) do |pITaskTrigger|
662
- populate_trigger(pITaskTrigger, trigger)
663
- end
664
- end
665
-
666
- # Returns the flags (integer) that modify the behavior of the work item. You
667
- # must OR the return value to determine the flags yourself.
668
- #
669
- def flags
670
- raise Error.new(_('No currently active task. ITask is NULL.')) if @pITask.nil?
671
-
672
- flags = 0
673
-
674
- FFI::MemoryPointer.new(:dword, 1) do |ptr|
675
- @pITask.GetFlags(ptr)
676
- flags = ptr.read_dword
677
- end
678
-
679
- flags
680
- end
681
-
682
- # Sets an OR'd value of flags that modify the behavior of the work item.
683
- #
684
- def flags=(flags)
685
- raise Error.new(_('No current task scheduler. ITaskScheduler is NULL.')) if @pITS.nil?
686
- raise Error.new(_('No currently active task. ITask is NULL.')) if @pITask.nil?
687
-
688
- @pITask.SetFlags(flags)
689
- flags
690
- end
691
-
692
- # Returns the status of the currently active task. Possible values are
693
- # 'ready', 'running', 'not scheduled' or 'unknown'.
694
- #
695
- def status
696
- raise Error.new(_('No currently active task. ITask is NULL.')) if @pITask.nil?
697
-
698
- st = nil
699
-
700
- FFI::MemoryPointer.new(:hresult, 1) do |ptr|
701
- @pITask.GetStatus(ptr)
702
- st = ptr.read_hresult
703
- end
704
-
705
- case st
706
- when SCHED_S_TASK_READY
707
- status = 'ready'
708
- when SCHED_S_TASK_RUNNING
709
- status = 'running'
710
- when SCHED_S_TASK_NOT_SCHEDULED
711
- status = 'not scheduled'
712
- else
713
- status = 'unknown'
714
- end
715
-
716
- status
717
- end
718
-
719
- # Returns the exit code from the last scheduled run.
720
- #
721
- def exit_code
722
- raise Error.new(_('No currently active task. ITask is NULL.')) if @pITask.nil?
723
-
724
- status = 0
725
-
726
- begin
727
- FFI::MemoryPointer.new(:dword, 1) do |ptr|
728
- @pITask.GetExitCode(ptr)
729
- status = ptr.read_dword
730
- end
731
- rescue Puppet::Util::Windows::Error => e
732
- raise e unless e.code == SCHED_S_TASK_HAS_NOT_RUN
733
- end
734
-
735
- status
736
- end
737
-
738
- # Returns the comment associated with the task, if any.
739
- #
740
- def comment
741
- raise Error.new(_('No currently active task. ITask is NULL.')) if @pITask.nil?
742
-
743
- comment = nil
744
-
745
- FFI::MemoryPointer.new(:pointer) do |ptr|
746
- @pITask.GetComment(ptr)
747
-
748
- ptr.read_com_memory_pointer do |str_ptr|
749
- comment = str_ptr.read_arbitrary_wide_string_up_to(MAX_COMMENT_LENGTH) if ! str_ptr.null?
750
- end
751
- end
752
-
753
- comment
754
- end
755
-
756
- # Sets the comment for the task.
757
- #
758
- def comment=(comment)
759
- raise Error.new(_('No currently active task. ITask is NULL.')) if @pITask.nil?
760
- raise TypeError unless comment.is_a?(String)
761
-
762
- if comment.length > MAX_COMMENT_LENGTH
763
- raise Error.new(_("Comment has exceeded maximum allowed length %{max}") % { max: MAX_COMMENT_LENGTH })
764
- end
765
-
766
- @pITask.SetComment(wide_string(comment))
767
- comment
768
- end
769
-
770
- # Returns the name of the user who created the task.
771
- #
772
- def creator
773
- raise Error.new(_('No currently active task. ITask is NULL.')) if @pITask.nil?
774
-
775
- creator = nil
776
-
777
- FFI::MemoryPointer.new(:pointer) do |ptr|
778
- @pITask.GetCreator(ptr)
779
-
780
- ptr.read_com_memory_pointer do |str_ptr|
781
- creator = str_ptr.read_arbitrary_wide_string_up_to(MAX_ACCOUNT_LENGTH) if ! str_ptr.null?
782
- end
783
- end
784
-
785
- creator
786
- end
787
-
788
- # Sets the creator for the task.
789
- #
790
- def creator=(creator)
791
- raise Error.new(_('No currently active task. ITask is NULL.')) if @pITask.nil?
792
- raise TypeError unless creator.is_a?(String)
793
-
794
- if creator.length > MAX_ACCOUNT_LENGTH
795
- raise Error.new(_("Creator has exceeded maximum allowed length %{max}") % { max: MAX_ACCOUNT_LENGTH })
796
- end
797
-
798
-
799
- @pITask.SetCreator(wide_string(creator))
800
- creator
801
- end
802
-
803
- # Returns a Time object that indicates the next time the task will run.
804
- #
805
- def next_run_time
806
- raise Error.new(_('No currently active task. ITask is NULL.')) if @pITask.nil?
807
-
808
- time = nil
809
-
810
- FFI::MemoryPointer.new(WIN32::SYSTEMTIME.size) do |ptr|
811
- @pITask.GetNextRunTime(ptr)
812
- time = WIN32::SYSTEMTIME.new(ptr).to_local_time
813
- end
814
-
815
- time
816
- end
817
-
818
- # Returns a Time object indicating the most recent time the task ran or
819
- # nil if the task has never run.
820
- #
821
- def most_recent_run_time
822
- raise Error.new(_('No currently active task. ITask is NULL.')) if @pITask.nil?
823
-
824
- time = nil
825
-
826
- begin
827
- FFI::MemoryPointer.new(WIN32::SYSTEMTIME.size) do |ptr|
828
- @pITask.GetMostRecentRunTime(ptr)
829
- time = WIN32::SYSTEMTIME.new(ptr).to_local_time
830
- end
831
- rescue Puppet::Util::Windows::Error => e
832
- raise e unless e.code == SCHED_S_TASK_HAS_NOT_RUN
833
- end
834
-
835
- time
836
- end
837
-
838
- # Returns the maximum length of time, in milliseconds, that the task
839
- # will run before terminating.
840
- #
841
- def max_run_time
842
- raise Error.new(_('No currently active task. ITask is NULL.')) if @pITask.nil?
843
-
844
- max_run_time = nil
845
-
846
- FFI::MemoryPointer.new(:dword, 1) do |ptr|
847
- @pITask.GetMaxRunTime(ptr)
848
- max_run_time = ptr.read_dword
849
- end
850
-
851
- max_run_time
852
- end
853
-
854
- # Sets the maximum length of time, in milliseconds, that the task can run
855
- # before terminating. Returns the value you specified if successful.
856
- #
857
- def max_run_time=(max_run_time)
858
- raise Error.new(_('No currently active task. ITask is NULL.')) if @pITask.nil?
859
- raise TypeError unless max_run_time.is_a?(Numeric)
860
-
861
- @pITask.SetMaxRunTime(max_run_time)
862
- max_run_time
863
- end
864
-
865
- # Returns whether or not the scheduled task exists.
866
- def exists?(job_name)
867
- # task name comparison is case insensitive
868
- tasks.any? { |name| name.casecmp(job_name + '.job') == 0 }
869
- end
870
-
871
- private
872
-
873
- # :stopdoc:
874
-
875
- # Used for the new_work_item method
876
- ValidTriggerKeys = [
877
- 'end_day',
878
- 'end_month',
879
- 'end_year',
880
- 'flags',
881
- 'minutes_duration',
882
- 'minutes_interval',
883
- 'random_minutes_interval',
884
- 'start_day',
885
- 'start_hour',
886
- 'start_minute',
887
- 'start_month',
888
- 'start_year',
889
- 'trigger_type',
890
- 'type'
891
- ]
892
-
893
- ValidTypeKeys = [
894
- 'days_interval',
895
- 'weeks_interval',
896
- 'days_of_week',
897
- 'months',
898
- 'days',
899
- 'weeks'
900
- ]
901
-
902
- # Private method that validates keys, and converts all keys to lowercase
903
- # strings.
904
- #
905
- def transform_and_validate(hash)
906
- new_hash = {}
907
-
908
- hash.each{ |key, value|
909
- key = key.to_s.downcase
910
- if key == 'type'
911
- new_type_hash = {}
912
- raise ArgumentError unless value.is_a?(Hash)
913
- value.each{ |subkey, subvalue|
914
- subkey = subkey.to_s.downcase
915
- if ValidTypeKeys.include?(subkey)
916
- new_type_hash[subkey] = subvalue
917
- else
918
- raise ArgumentError, _("Invalid type key '%{key}'") % { key: subkey }
919
- end
920
- }
921
- new_hash[key] = new_type_hash
922
- else
923
- if ValidTriggerKeys.include?(key)
924
- new_hash[key] = value
925
- else
926
- raise ArgumentError, _("Invalid key '%{key}'") % { key: key }
927
- end
928
- end
929
- }
930
-
931
- new_hash
932
- end
933
-
934
- def reset_current_task
935
- # Ensure that COM reference is decremented properly
936
- @pITask.Release if @pITask && ! @pITask.null?
937
- @pITask = nil
938
- @account_information_set = false
939
- end
940
-
941
- def populate_trigger(task_trigger, trigger)
942
- raise TypeError unless task_trigger.is_a?(COM::TaskTrigger)
943
- trigger = transform_and_validate(trigger)
944
-
945
- FFI::MemoryPointer.new(COM::TASK_TRIGGER.size) do |trigger_ptr|
946
- FFI::MemoryPointer.new(COM::TRIGGER_TYPE_UNION.size) do |trigger_type_union_ptr|
947
- trigger_type_union = COM::TRIGGER_TYPE_UNION.new(trigger_type_union_ptr)
948
-
949
- tmp = trigger['type'].is_a?(Hash) ? trigger['type'] : nil
950
- case trigger['trigger_type']
951
- when :TASK_TIME_TRIGGER_DAILY
952
- if tmp && tmp['days_interval']
953
- trigger_type_union[:Daily][:DaysInterval] = tmp['days_interval']
954
- end
955
- when :TASK_TIME_TRIGGER_WEEKLY
956
- if tmp && tmp['weeks_interval'] && tmp['days_of_week']
957
- trigger_type_union[:Weekly][:WeeksInterval] = tmp['weeks_interval']
958
- trigger_type_union[:Weekly][:rgfDaysOfTheWeek] = tmp['days_of_week']
959
- end
960
- when :TASK_TIME_TRIGGER_MONTHLYDATE
961
- if tmp && tmp['months'] && tmp['days']
962
- trigger_type_union[:MonthlyDate][:rgfDays] = tmp['days']
963
- trigger_type_union[:MonthlyDate][:rgfMonths] = tmp['months']
964
- end
965
- when :TASK_TIME_TRIGGER_MONTHLYDOW
966
- if tmp && tmp['weeks'] && tmp['days_of_week'] && tmp['months']
967
- trigger_type_union[:MonthlyDOW][:wWhichWeek] = tmp['weeks']
968
- trigger_type_union[:MonthlyDOW][:rgfDaysOfTheWeek] = tmp['days_of_week']
969
- trigger_type_union[:MonthlyDOW][:rgfMonths] = tmp['months']
970
- end
971
- when :TASK_TIME_TRIGGER_ONCE
972
- # Do nothing. The Type member of the TASK_TRIGGER struct is ignored.
973
- else
974
- raise Error.new(_("Unknown trigger type %{type}") % { type: trigger['trigger_type'] })
975
- end
976
-
977
- trigger_struct = COM::TASK_TRIGGER.new(trigger_ptr)
978
- trigger_struct[:cbTriggerSize] = COM::TASK_TRIGGER.size
979
- now = Time.now
980
- trigger_struct[:wBeginYear] = trigger['start_year'] || now.year
981
- trigger_struct[:wBeginMonth] = trigger['start_month'] || now.month
982
- trigger_struct[:wBeginDay] = trigger['start_day'] || now.day
983
- trigger_struct[:wEndYear] = trigger['end_year'] || 0
984
- trigger_struct[:wEndMonth] = trigger['end_month'] || 0
985
- trigger_struct[:wEndDay] = trigger['end_day'] || 0
986
- trigger_struct[:wStartHour] = trigger['start_hour'] || 0
987
- trigger_struct[:wStartMinute] = trigger['start_minute'] || 0
988
- trigger_struct[:MinutesDuration] = trigger['minutes_duration'] || 0
989
- trigger_struct[:MinutesInterval] = trigger['minutes_interval'] || 0
990
- trigger_struct[:rgFlags] = trigger['flags'] || 0
991
- trigger_struct[:TriggerType] = trigger['trigger_type'] || :TASK_TIME_TRIGGER_ONCE
992
- trigger_struct[:Type] = trigger_type_union
993
- trigger_struct[:wRandomMinutesInterval] = trigger['random_minutes_interval'] || 0
994
-
995
- task_trigger.SetTrigger(trigger_struct)
996
- end
997
- end
998
- end
999
-
1000
- def populate_hash_from_trigger(task_trigger)
1001
- raise TypeError unless task_trigger.is_a?(COM::TASK_TRIGGER)
1002
-
1003
- trigger = {
1004
- 'start_year' => task_trigger[:wBeginYear],
1005
- 'start_month' => task_trigger[:wBeginMonth],
1006
- 'start_day' => task_trigger[:wBeginDay],
1007
- 'end_year' => task_trigger[:wEndYear],
1008
- 'end_month' => task_trigger[:wEndMonth],
1009
- 'end_day' => task_trigger[:wEndDay],
1010
- 'start_hour' => task_trigger[:wStartHour],
1011
- 'start_minute' => task_trigger[:wStartMinute],
1012
- 'minutes_duration' => task_trigger[:MinutesDuration],
1013
- 'minutes_interval' => task_trigger[:MinutesInterval],
1014
- 'flags' => task_trigger[:rgFlags],
1015
- 'trigger_type' => task_trigger[:TriggerType],
1016
- 'random_minutes_interval' => task_trigger[:wRandomMinutesInterval]
1017
- }
1018
-
1019
- case task_trigger[:TriggerType]
1020
- when :TASK_TIME_TRIGGER_DAILY
1021
- trigger['type'] = { 'days_interval' => task_trigger[:Type][:Daily][:DaysInterval] }
1022
- when :TASK_TIME_TRIGGER_WEEKLY
1023
- trigger['type'] = {
1024
- 'weeks_interval' => task_trigger[:Type][:Weekly][:WeeksInterval],
1025
- 'days_of_week' => task_trigger[:Type][:Weekly][:rgfDaysOfTheWeek]
1026
- }
1027
- when :TASK_TIME_TRIGGER_MONTHLYDATE
1028
- trigger['type'] = {
1029
- 'days' => task_trigger[:Type][:MonthlyDate][:rgfDays],
1030
- 'months' => task_trigger[:Type][:MonthlyDate][:rgfMonths]
1031
- }
1032
- when :TASK_TIME_TRIGGER_MONTHLYDOW
1033
- trigger['type'] = {
1034
- 'weeks' => task_trigger[:Type][:MonthlyDOW][:wWhichWeek],
1035
- 'days_of_week' => task_trigger[:Type][:MonthlyDOW][:rgfDaysOfTheWeek],
1036
- 'months' => task_trigger[:Type][:MonthlyDOW][:rgfMonths]
1037
- }
1038
- when :TASK_TIME_TRIGGER_ONCE
1039
- trigger['type'] = { 'once' => nil }
1040
- else
1041
- raise Error.new(_("Unknown trigger type %{type}") % { type: task_trigger[:TriggerType] })
1042
- end
1043
-
1044
- trigger
1045
- end
1046
-
1047
- module COM
1048
- extend FFI::Library
1049
-
1050
- com = Puppet::Util::Windows::COM
1051
-
1052
- # https://msdn.microsoft.com/en-us/library/windows/desktop/aa381811(v=vs.85).aspx
1053
- ITaskScheduler = com::Interface[com::IUnknown,
1054
- FFI::WIN32::GUID['148BD527-A2AB-11CE-B11F-00AA00530503'],
1055
-
1056
- SetTargetComputer: [[:lpcwstr], :hresult],
1057
- # LPWSTR *
1058
- GetTargetComputer: [[:pointer], :hresult],
1059
- # IEnumWorkItems **
1060
- Enum: [[:pointer], :hresult],
1061
- # LPCWSTR, REFIID, IUnknown **
1062
- Activate: [[:lpcwstr, :pointer, :pointer], :hresult],
1063
- Delete: [[:lpcwstr], :hresult],
1064
- # LPCWSTR, REFCLSID, REFIID, IUnknown **
1065
- NewWorkItem: [[:lpcwstr, :pointer, :pointer, :pointer], :hresult],
1066
- # LPCWSTR, IScheduledWorkItem *
1067
- AddWorkItem: [[:lpcwstr, :pointer], :hresult],
1068
- # LPCWSTR, REFIID
1069
- IsOfType: [[:lpcwstr, :pointer], :hresult]
1070
- ]
1071
-
1072
- TaskScheduler = com::Factory[ITaskScheduler,
1073
- FFI::WIN32::GUID['148BD52A-A2AB-11CE-B11F-00AA00530503']]
1074
-
1075
- # https://msdn.microsoft.com/en-us/library/windows/desktop/aa380706(v=vs.85).aspx
1076
- IEnumWorkItems = com::Interface[com::IUnknown,
1077
- FFI::WIN32::GUID['148BD528-A2AB-11CE-B11F-00AA00530503'],
1078
-
1079
- # ULONG, LPWSTR **, ULONG *
1080
- Next: [[:win32_ulong, :pointer, :pointer], :hresult],
1081
- Skip: [[:win32_ulong], :hresult],
1082
- Reset: [[], :hresult],
1083
- # IEnumWorkItems ** ppEnumWorkItems
1084
- Clone: [[:pointer], :hresult]
1085
- ]
1086
-
1087
- EnumWorkItems = com::Instance[IEnumWorkItems]
1088
-
1089
- # https://msdn.microsoft.com/en-us/library/windows/desktop/aa381216(v=vs.85).aspx
1090
- IScheduledWorkItem = com::Interface[com::IUnknown,
1091
- FFI::WIN32::GUID['a6b952f0-a4b1-11d0-997d-00aa006887ec'],
1092
-
1093
- # WORD *, ITaskTrigger **
1094
- CreateTrigger: [[:pointer, :pointer], :hresult],
1095
- DeleteTrigger: [[:word], :hresult],
1096
- # WORD *
1097
- GetTriggerCount: [[:pointer], :hresult],
1098
- # WORD, ITaskTrigger **
1099
- GetTrigger: [[:word, :pointer], :hresult],
1100
- # WORD, LPWSTR *
1101
- GetTriggerString: [[:word, :pointer], :hresult],
1102
- # LPSYSTEMTIME, LPSYSTEMTIME, WORD *, LPSYSTEMTIME *
1103
- GetRunTimes: [[:pointer, :pointer, :pointer, :pointer], :hresult],
1104
- # SYSTEMTIME *
1105
- GetNextRunTime: [[:pointer], :hresult],
1106
- SetIdleWait: [[:word, :word], :hresult],
1107
- # WORD *, WORD *
1108
- GetIdleWait: [[:pointer, :pointer], :hresult],
1109
- Run: [[], :hresult],
1110
- Terminate: [[], :hresult],
1111
- EditWorkItem: [[:hwnd, :dword], :hresult],
1112
- # SYSTEMTIME *
1113
- GetMostRecentRunTime: [[:pointer], :hresult],
1114
- # HRESULT *
1115
- GetStatus: [[:pointer], :hresult],
1116
- GetExitCode: [[:pdword], :hresult],
1117
- SetComment: [[:lpcwstr], :hresult],
1118
- # LPWSTR *
1119
- GetComment: [[:pointer], :hresult],
1120
- SetCreator: [[:lpcwstr], :hresult],
1121
- # LPWSTR *
1122
- GetCreator: [[:pointer], :hresult],
1123
- # WORD, BYTE[]
1124
- SetWorkItemData: [[:word, :buffer_in], :hresult],
1125
- # WORD *, BYTE **
1126
- GetWorkItemData: [[:pointer, :pointer], :hresult],
1127
- SetErrorRetryCount: [[:word], :hresult],
1128
- # WORD *
1129
- GetErrorRetryCount: [[:pointer], :hresult],
1130
- SetErrorRetryInterval: [[:word], :hresult],
1131
- # WORD *
1132
- GetErrorRetryInterval: [[:pointer], :hresult],
1133
- SetFlags: [[:dword], :hresult],
1134
- # WORD *
1135
- GetFlags: [[:pointer], :hresult],
1136
- SetAccountInformation: [[:lpcwstr, :lpcwstr], :hresult],
1137
- # LPWSTR *
1138
- GetAccountInformation: [[:pointer], :hresult]
1139
- ]
1140
-
1141
- # https://msdn.microsoft.com/en-us/library/windows/desktop/aa381311(v=vs.85).aspx
1142
- ITask = com::Interface[IScheduledWorkItem,
1143
- FFI::WIN32::GUID['148BD524-A2AB-11CE-B11F-00AA00530503'],
1144
-
1145
- SetApplicationName: [[:lpcwstr], :hresult],
1146
- # LPWSTR *
1147
- GetApplicationName: [[:pointer], :hresult],
1148
- SetParameters: [[:lpcwstr], :hresult],
1149
- # LPWSTR *
1150
- GetParameters: [[:pointer], :hresult],
1151
- SetWorkingDirectory: [[:lpcwstr], :hresult],
1152
- # LPWSTR *
1153
- GetWorkingDirectory: [[:pointer], :hresult],
1154
- SetPriority: [[:dword], :hresult],
1155
- # DWORD *
1156
- GetPriority: [[:pointer], :hresult],
1157
- SetTaskFlags: [[:dword], :hresult],
1158
- # DWORD *
1159
- GetTaskFlags: [[:pointer], :hresult],
1160
- SetMaxRunTime: [[:dword], :hresult],
1161
- # DWORD *
1162
- GetMaxRunTime: [[:pointer], :hresult]
1163
- ]
1164
-
1165
- Task = com::Instance[ITask]
1166
-
1167
- # https://msdn.microsoft.com/en-us/library/windows/desktop/ms688695(v=vs.85).aspx
1168
- IPersist = com::Interface[com::IUnknown,
1169
- FFI::WIN32::GUID['0000010c-0000-0000-c000-000000000046'],
1170
- # CLSID *
1171
- GetClassID: [[:pointer], :hresult]
1172
- ]
1173
-
1174
- # https://msdn.microsoft.com/en-us/library/windows/desktop/ms687223(v=vs.85).aspx
1175
- IPersistFile = com::Interface[IPersist,
1176
- FFI::WIN32::GUID['0000010b-0000-0000-C000-000000000046'],
1177
-
1178
- IsDirty: [[], :hresult],
1179
- Load: [[:lpcolestr, :dword], :hresult],
1180
- Save: [[:lpcolestr, :win32_bool], :hresult],
1181
- SaveCompleted: [[:lpcolestr], :hresult],
1182
- # LPOLESTR *
1183
- GetCurFile: [[:pointer], :hresult]
1184
- ]
1185
-
1186
- PersistFile = com::Instance[IPersistFile]
1187
-
1188
- # https://msdn.microsoft.com/en-us/library/windows/desktop/aa381864(v=vs.85).aspx
1189
- ITaskTrigger = com::Interface[com::IUnknown,
1190
- FFI::WIN32::GUID['148BD52B-A2AB-11CE-B11F-00AA00530503'],
1191
-
1192
- SetTrigger: [[:pointer], :hresult],
1193
- GetTrigger: [[:pointer], :hresult],
1194
- GetTriggerString: [[:pointer], :hresult]
1195
- ]
1196
-
1197
- TaskTrigger = com::Instance[ITaskTrigger]
1198
-
1199
- # https://msdn.microsoft.com/en-us/library/windows/desktop/aa383620(v=vs.85).aspx
1200
- # The TASK_TRIGGER_TYPE field of the TASK_TRIGGER structure determines
1201
- # which member of the TRIGGER_TYPE_UNION field to use.
1202
- TASK_TRIGGER_TYPE = enum(
1203
- :TASK_TIME_TRIGGER_ONCE, 0, # Ignore the Type field
1204
- :TASK_TIME_TRIGGER_DAILY, 1,
1205
- :TASK_TIME_TRIGGER_WEEKLY, 2,
1206
- :TASK_TIME_TRIGGER_MONTHLYDATE, 3,
1207
- :TASK_TIME_TRIGGER_MONTHLYDOW, 4,
1208
- :TASK_EVENT_TRIGGER_ON_IDLE, 5, # Ignore the Type field
1209
- :TASK_EVENT_TRIGGER_AT_SYSTEMSTART, 6, # Ignore the Type field
1210
- :TASK_EVENT_TRIGGER_AT_LOGON, 7 # Ignore the Type field
1211
- )
1212
-
1213
- # https://msdn.microsoft.com/en-us/library/windows/desktop/aa446857(v=vs.85).aspx
1214
- class DAILY < FFI::Struct
1215
- layout :DaysInterval, :word
1216
- end
1217
-
1218
- # https://msdn.microsoft.com/en-us/library/windows/desktop/aa384014(v=vs.85).aspx
1219
- class WEEKLY < FFI::Struct
1220
- layout :WeeksInterval, :word,
1221
- :rgfDaysOfTheWeek, :word
1222
- end
1223
-
1224
- # https://msdn.microsoft.com/en-us/library/windows/desktop/aa381918(v=vs.85).aspx
1225
- class MONTHLYDATE < FFI::Struct
1226
- layout :rgfDays, :dword,
1227
- :rgfMonths, :word
1228
- end
1229
-
1230
- # https://msdn.microsoft.com/en-us/library/windows/desktop/aa381918(v=vs.85).aspx
1231
- class MONTHLYDOW < FFI::Struct
1232
- layout :wWhichWeek, :word,
1233
- :rgfDaysOfTheWeek, :word,
1234
- :rgfMonths, :word
1235
- end
1236
-
1237
- # https://msdn.microsoft.com/en-us/library/windows/desktop/aa384002(v=vs.85).aspx
1238
- class TRIGGER_TYPE_UNION < FFI::Union
1239
- layout :Daily, DAILY,
1240
- :Weekly, WEEKLY,
1241
- :MonthlyDate, MONTHLYDATE,
1242
- :MonthlyDOW, MONTHLYDOW
1243
- end
1244
-
1245
- # https://msdn.microsoft.com/en-us/library/windows/desktop/aa383618(v=vs.85).aspx
1246
- class TASK_TRIGGER < FFI::Struct
1247
- layout :cbTriggerSize, :word, # Structure size.
1248
- :Reserved1, :word, # Reserved. Must be zero.
1249
- :wBeginYear, :word, # Trigger beginning date year.
1250
- :wBeginMonth, :word, # Trigger beginning date month.
1251
- :wBeginDay, :word, # Trigger beginning date day.
1252
- :wEndYear, :word, # Optional trigger ending date year.
1253
- :wEndMonth, :word, # Optional trigger ending date month.
1254
- :wEndDay, :word, # Optional trigger ending date day.
1255
- :wStartHour, :word, # Run bracket start time hour.
1256
- :wStartMinute, :word, # Run bracket start time minute.
1257
- :MinutesDuration, :dword, # Duration of run bracket.
1258
- :MinutesInterval, :dword, # Run bracket repetition interval.
1259
- :rgFlags, :dword, # Trigger flags.
1260
- :TriggerType, TASK_TRIGGER_TYPE, # Trigger type.
1261
- :Type, TRIGGER_TYPE_UNION, # Trigger data.
1262
- :Reserved2, :word, # Reserved. Must be zero.
1263
- :wRandomMinutesInterval, :word # Maximum number of random minutes after start time
1264
- end
1265
- end
1266
- end
1267
- end