puppet 6.0.10-universal-darwin → 6.1.0-universal-darwin

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 (748) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -0
  3. data/Gemfile.lock +31 -27
  4. data/Guardfile.example +76 -0
  5. data/LICENSE +189 -4
  6. data/MAINTAINERS +47 -0
  7. data/README.md +3 -3
  8. data/lib/hiera/scope.rb +0 -7
  9. data/lib/puppet.rb +6 -5
  10. data/lib/puppet/application.rb +3 -3
  11. data/lib/puppet/application/cert.rb +2 -2
  12. data/lib/puppet/application/device.rb +83 -109
  13. data/lib/puppet/application/filebucket.rb +1 -10
  14. data/lib/puppet/application/ssl.rb +0 -2
  15. data/lib/puppet/configurer.rb +9 -10
  16. data/lib/puppet/confine/false.rb +1 -7
  17. data/lib/puppet/confine/true.rb +1 -7
  18. data/lib/puppet/defaults.rb +39 -51
  19. data/lib/puppet/forge.rb +1 -4
  20. data/lib/puppet/functions/abs.rb +1 -1
  21. data/lib/puppet/functions/call.rb +1 -2
  22. data/lib/puppet/functions/new.rb +1 -1
  23. data/lib/puppet/indirector/request.rb +15 -26
  24. data/lib/puppet/network/http/connection.rb +12 -32
  25. data/lib/puppet/network/http/factory.rb +0 -5
  26. data/lib/puppet/pal/catalog_compiler.rb +96 -0
  27. data/lib/puppet/pal/compiler.rb +221 -0
  28. data/lib/puppet/pal/function_signature.rb +52 -0
  29. data/lib/puppet/pal/json_catalog_encoder.rb +67 -0
  30. data/lib/puppet/pal/pal_api.rb +15 -0
  31. data/lib/puppet/pal/pal_impl.rb +523 -0
  32. data/lib/puppet/pal/plan_signature.rb +71 -0
  33. data/lib/puppet/pal/script_compiler.rb +71 -0
  34. data/lib/puppet/pal/task_signature.rb +58 -0
  35. data/lib/puppet/parser/functions/generate.rb +7 -6
  36. data/lib/puppet/plugins/configuration.rb +5 -1
  37. data/lib/puppet/pops/evaluator/evaluator_impl.rb +5 -1
  38. data/lib/puppet/pops/evaluator/external_syntax_support.rb +3 -3
  39. data/lib/puppet/pops/issues.rb +0 -4
  40. data/lib/puppet/pops/loader/ruby_legacy_function_instantiator.rb +4 -60
  41. data/lib/puppet/pops/model/factory.rb +4 -38
  42. data/lib/puppet/pops/model/pn_transformer.rb +0 -5
  43. data/lib/puppet/pops/parser/egrammar.ra +2 -2
  44. data/lib/puppet/pops/parser/heredoc_support.rb +7 -17
  45. data/lib/puppet/pops/parser/lexer2.rb +1 -6
  46. data/lib/puppet/pops/parser/locator.rb +86 -106
  47. data/lib/puppet/pops/parser/parser_support.rb +2 -11
  48. data/lib/puppet/pops/types/string_converter.rb +7 -2
  49. data/lib/puppet/pops/types/type_mismatch_describer.rb +1 -1
  50. data/lib/puppet/pops/types/types.rb +3 -5
  51. data/lib/puppet/pops/validation/checker4_0.rb +13 -0
  52. data/lib/puppet/provider.rb +2 -1
  53. data/lib/puppet/provider/exec.rb +6 -1
  54. data/lib/puppet/provider/file/windows.rb +1 -49
  55. data/lib/puppet/provider/group/windows_adsi.rb +1 -4
  56. data/lib/puppet/provider/package.rb +0 -2
  57. data/lib/puppet/provider/package/dpkg.rb +2 -15
  58. data/lib/puppet/provider/package/gem.rb +42 -102
  59. data/lib/puppet/provider/package/pip.rb +111 -135
  60. data/lib/puppet/provider/package/pip3.rb +1 -1
  61. data/lib/puppet/provider/package/pkgng.rb +37 -21
  62. data/lib/puppet/provider/package/puppet_gem.rb +1 -1
  63. data/lib/puppet/provider/package/rpm.rb +16 -27
  64. data/lib/puppet/provider/package/windows.rb +1 -5
  65. data/lib/puppet/provider/package/yum.rb +1 -2
  66. data/lib/puppet/provider/service/systemd.rb +17 -0
  67. data/lib/puppet/provider/service/upstart.rb +5 -17
  68. data/lib/puppet/provider/service/windows.rb +8 -3
  69. data/lib/puppet/provider/user/directoryservice.rb +4 -16
  70. data/lib/puppet/provider/user/useradd.rb +13 -16
  71. data/lib/puppet/resource.rb +3 -1
  72. data/lib/puppet/rest/client.rb +83 -0
  73. data/lib/puppet/rest/route.rb +1 -1
  74. data/lib/puppet/settings.rb +5 -10
  75. data/lib/puppet/settings/server_list_setting.rb +0 -9
  76. data/lib/puppet/ssl/host.rb +11 -0
  77. data/lib/puppet/ssl/validator/default_validator.rb +0 -31
  78. data/lib/puppet/syntax_checkers/epp.rb +34 -0
  79. data/lib/puppet/syntax_checkers/pp.rb +34 -0
  80. data/lib/puppet/transaction.rb +7 -12
  81. data/lib/puppet/transaction/event_manager.rb +5 -1
  82. data/lib/puppet/transaction/resource_harness.rb +0 -1
  83. data/lib/puppet/type.rb +6 -0
  84. data/lib/puppet/type/exec.rb +5 -27
  85. data/lib/puppet/type/file/mode.rb +1 -6
  86. data/lib/puppet/type/file/source.rb +1 -0
  87. data/lib/puppet/type/filebucket.rb +8 -12
  88. data/lib/puppet/type/package.rb +11 -44
  89. data/lib/puppet/type/schedule.rb +0 -4
  90. data/lib/puppet/type/service.rb +12 -0
  91. data/lib/puppet/type/user.rb +1 -1
  92. data/lib/puppet/util/command_line.rb +1 -5
  93. data/lib/puppet/util/connection.rb +6 -15
  94. data/lib/puppet/util/http_proxy.rb +2 -3
  95. data/lib/puppet/util/log.rb +2 -7
  96. data/lib/puppet/util/pidlock.rb +1 -15
  97. data/lib/puppet/util/windows/process.rb +5 -73
  98. data/lib/puppet/util/windows/registry.rb +1 -7
  99. data/lib/puppet/util/windows/security.rb +8 -29
  100. data/lib/puppet/util/windows/service.rb +33 -27
  101. data/lib/puppet/util/windows/user.rb +4 -14
  102. data/lib/puppet/version.rb +1 -1
  103. data/lib/puppet_pal.rb +5 -1132
  104. data/locales/ja/puppet.po +297 -363
  105. data/locales/puppet.pot +445 -517
  106. data/man/man5/puppet.conf.5 +12 -20
  107. data/man/man8/puppet-agent.8 +1 -1
  108. data/man/man8/puppet-apply.8 +1 -1
  109. data/man/man8/puppet-catalog.8 +1 -1
  110. data/man/man8/puppet-config.8 +1 -1
  111. data/man/man8/puppet-describe.8 +1 -1
  112. data/man/man8/puppet-device.8 +1 -1
  113. data/man/man8/puppet-doc.8 +1 -1
  114. data/man/man8/puppet-epp.8 +1 -1
  115. data/man/man8/puppet-facts.8 +1 -1
  116. data/man/man8/puppet-filebucket.8 +2 -6
  117. data/man/man8/puppet-generate.8 +1 -1
  118. data/man/man8/puppet-help.8 +1 -1
  119. data/man/man8/puppet-key.8 +1 -1
  120. data/man/man8/puppet-lookup.8 +1 -1
  121. data/man/man8/puppet-man.8 +1 -1
  122. data/man/man8/puppet-module.8 +1 -1
  123. data/man/man8/puppet-node.8 +1 -1
  124. data/man/man8/puppet-parser.8 +1 -1
  125. data/man/man8/puppet-plugin.8 +1 -1
  126. data/man/man8/puppet-report.8 +1 -1
  127. data/man/man8/puppet-resource.8 +1 -1
  128. data/man/man8/puppet-script.8 +1 -1
  129. data/man/man8/puppet-ssl.8 +1 -1
  130. data/man/man8/puppet-status.8 +1 -1
  131. data/man/man8/puppet.8 +2 -2
  132. data/spec/fixtures/unit/provider/package/pkgng/pkg.query +7 -1
  133. data/spec/fixtures/unit/provider/package/pkgng/pkg.query.zsh +1 -0
  134. data/spec/integration/agent/logging_spec.rb +7 -5
  135. data/spec/integration/application/apply_spec.rb +16 -18
  136. data/spec/integration/application/doc_spec.rb +2 -1
  137. data/spec/integration/application/lookup_spec.rb +5 -5
  138. data/spec/integration/configurer_spec.rb +6 -5
  139. data/spec/integration/defaults_spec.rb +6 -5
  140. data/spec/integration/directory_environments_spec.rb +1 -1
  141. data/spec/integration/faces/config_spec.rb +4 -3
  142. data/spec/integration/faces/documentation_spec.rb +1 -0
  143. data/spec/integration/faces/plugin_spec.rb +1 -1
  144. data/spec/integration/file_bucket/file_spec.rb +4 -2
  145. data/spec/integration/file_serving/content_spec.rb +1 -0
  146. data/spec/integration/file_serving/fileset_spec.rb +1 -0
  147. data/spec/integration/file_serving/metadata_spec.rb +1 -0
  148. data/spec/integration/file_serving/terminus_helper_spec.rb +1 -0
  149. data/spec/integration/indirector/catalog/compiler_spec.rb +11 -10
  150. data/spec/integration/indirector/direct_file_server_spec.rb +1 -1
  151. data/spec/integration/indirector/facts/facter_spec.rb +5 -4
  152. data/spec/integration/indirector/file_content/file_server_spec.rb +8 -7
  153. data/spec/integration/indirector/file_metadata/file_server_spec.rb +8 -7
  154. data/spec/integration/network/authconfig_spec.rb +24 -23
  155. data/spec/integration/network/formats_spec.rb +1 -0
  156. data/spec/integration/node/environment_spec.rb +1 -0
  157. data/spec/integration/node/facts_spec.rb +10 -9
  158. data/spec/integration/node_spec.rb +7 -6
  159. data/spec/integration/parser/catalog_spec.rb +5 -1
  160. data/spec/integration/parser/collection_spec.rb +2 -1
  161. data/spec/integration/parser/compiler_spec.rb +6 -6
  162. data/spec/integration/parser/scope_spec.rb +1 -1
  163. data/spec/integration/parser/undef_param_spec.rb +1 -1
  164. data/spec/integration/provider/service/init_spec.rb +5 -4
  165. data/spec/integration/provider/service/systemd_spec.rb +2 -0
  166. data/spec/integration/provider/service/windows_spec.rb +2 -1
  167. data/spec/integration/reference/providers_spec.rb +2 -1
  168. data/spec/integration/reports_spec.rb +2 -1
  169. data/spec/integration/resource/catalog_spec.rb +17 -14
  170. data/spec/integration/resource/type_collection_spec.rb +5 -4
  171. data/spec/integration/ssl/certificate_request_spec.rb +1 -0
  172. data/spec/integration/ssl/host_spec.rb +2 -1
  173. data/spec/integration/ssl/key_spec.rb +1 -0
  174. data/spec/integration/test/test_helper_spec.rb +1 -0
  175. data/spec/integration/transaction/report_spec.rb +11 -6
  176. data/spec/integration/transaction_spec.rb +19 -18
  177. data/spec/integration/type/exec_spec.rb +1 -0
  178. data/spec/integration/type/file_spec.rb +33 -13
  179. data/spec/integration/type/package_spec.rb +24 -20
  180. data/spec/integration/type/tidy_spec.rb +2 -1
  181. data/spec/integration/type_spec.rb +1 -0
  182. data/spec/integration/util/autoload_spec.rb +2 -1
  183. data/spec/integration/util/rdoc/parser_spec.rb +1 -0
  184. data/spec/integration/util/settings_spec.rb +1 -0
  185. data/spec/integration/util/windows/adsi_spec.rb +5 -3
  186. data/spec/integration/util/windows/principal_spec.rb +1 -0
  187. data/spec/integration/util/windows/process_spec.rb +6 -4
  188. data/spec/integration/util/windows/registry_spec.rb +51 -93
  189. data/spec/integration/util/windows/security_spec.rb +4 -2
  190. data/spec/integration/util/windows/user_spec.rb +20 -37
  191. data/spec/integration/util_spec.rb +7 -4
  192. data/spec/lib/puppet_spec/compiler.rb +1 -1
  193. data/spec/lib/puppet_spec/files.rb +1 -0
  194. data/spec/lib/puppet_spec/module_tool/shared_functions.rb +1 -1
  195. data/spec/lib/puppet_spec/scope.rb +2 -1
  196. data/spec/shared_behaviours/all_parsedfile_providers.rb +1 -1
  197. data/spec/shared_behaviours/file_server_terminus.rb +9 -8
  198. data/spec/shared_behaviours/file_serving.rb +8 -6
  199. data/spec/shared_behaviours/file_serving_model.rb +5 -3
  200. data/spec/shared_behaviours/hiera_indirections.rb +4 -3
  201. data/spec/shared_behaviours/iterative_functions.rb +1 -0
  202. data/spec/shared_behaviours/memory_terminus.rb +2 -2
  203. data/spec/shared_examples/rhel_package_provider.rb +70 -112
  204. data/spec/spec_helper.rb +2 -11
  205. data/spec/unit/agent/disabler_spec.rb +5 -4
  206. data/spec/unit/agent/locker_spec.rb +13 -12
  207. data/spec/unit/agent_spec.rb +85 -80
  208. data/spec/unit/application/agent_spec.rb +93 -88
  209. data/spec/unit/application/apply_spec.rb +83 -82
  210. data/spec/unit/application/config_spec.rb +1 -0
  211. data/spec/unit/application/describe_spec.rb +7 -6
  212. data/spec/unit/application/device_spec.rb +419 -395
  213. data/spec/unit/application/doc_spec.rb +46 -44
  214. data/spec/unit/application/face_base_spec.rb +62 -61
  215. data/spec/unit/application/facts_spec.rb +4 -3
  216. data/spec/unit/application/filebucket_spec.rb +74 -66
  217. data/spec/unit/application/indirection_base_spec.rb +6 -8
  218. data/spec/unit/application/lookup_spec.rb +26 -26
  219. data/spec/unit/application/resource_spec.rb +48 -42
  220. data/spec/unit/application/ssl_spec.rb +3 -8
  221. data/spec/unit/application_spec.rb +98 -86
  222. data/spec/unit/capability_spec.rb +6 -6
  223. data/spec/unit/certificate_factory_spec.rb +5 -3
  224. data/spec/unit/configurer/downloader_spec.rb +21 -20
  225. data/spec/unit/configurer/fact_handler_spec.rb +3 -2
  226. data/spec/unit/configurer/plugin_handler_spec.rb +8 -41
  227. data/spec/unit/configurer_spec.rb +198 -194
  228. data/spec/unit/confine/exists_spec.rb +15 -17
  229. data/spec/unit/confine/false_spec.rb +6 -32
  230. data/spec/unit/confine/feature_spec.rb +5 -7
  231. data/spec/unit/confine/true_spec.rb +6 -32
  232. data/spec/unit/confine/variable_spec.rb +15 -14
  233. data/spec/unit/confine_collection_spec.rb +29 -28
  234. data/spec/unit/confine_spec.rb +14 -13
  235. data/spec/unit/confiner_spec.rb +11 -10
  236. data/spec/unit/context/trusted_information_spec.rb +1 -1
  237. data/spec/unit/daemon_spec.rb +36 -35
  238. data/spec/unit/data_providers/function_data_provider_spec.rb +1 -0
  239. data/spec/unit/data_providers/hiera_data_provider_spec.rb +1 -0
  240. data/spec/unit/datatypes_spec.rb +4 -3
  241. data/spec/unit/defaults_spec.rb +27 -18
  242. data/spec/unit/environments_spec.rb +7 -7
  243. data/spec/unit/etc_spec.rb +32 -30
  244. data/spec/unit/external/pson_spec.rb +1 -0
  245. data/spec/unit/face/catalog_spec.rb +1 -0
  246. data/spec/unit/face/config_spec.rb +35 -31
  247. data/spec/unit/face/epp_face_spec.rb +4 -3
  248. data/spec/unit/face/facts_spec.rb +6 -5
  249. data/spec/unit/face/generate_spec.rb +5 -4
  250. data/spec/unit/face/help_spec.rb +8 -7
  251. data/spec/unit/face/key_spec.rb +1 -0
  252. data/spec/unit/face/man_spec.rb +2 -1
  253. data/spec/unit/face/module/install_spec.rb +5 -3
  254. data/spec/unit/face/module/list_spec.rb +12 -2
  255. data/spec/unit/face/module/search_spec.rb +9 -11
  256. data/spec/unit/face/module/uninstall_spec.rb +8 -4
  257. data/spec/unit/face/node_spec.rb +24 -23
  258. data/spec/unit/face/parser_spec.rb +18 -3
  259. data/spec/unit/face/plugin_spec.rb +9 -36
  260. data/spec/unit/face/status_spec.rb +1 -0
  261. data/spec/unit/file_bucket/dipper_spec.rb +20 -24
  262. data/spec/unit/file_bucket/file_spec.rb +2 -0
  263. data/spec/unit/file_serving/base_spec.rb +15 -14
  264. data/spec/unit/file_serving/configuration/parser_spec.rb +28 -27
  265. data/spec/unit/file_serving/configuration_spec.rb +66 -63
  266. data/spec/unit/file_serving/content_spec.rb +11 -10
  267. data/spec/unit/file_serving/fileset_spec.rb +58 -63
  268. data/spec/unit/file_serving/http_metadata_spec.rb +7 -8
  269. data/spec/unit/file_serving/metadata_spec.rb +36 -36
  270. data/spec/unit/file_serving/mount/file_spec.rb +32 -31
  271. data/spec/unit/file_serving/mount/locales_spec.rb +24 -23
  272. data/spec/unit/file_serving/mount/modules_spec.rb +15 -14
  273. data/spec/unit/file_serving/mount/pluginfacts_spec.rb +24 -23
  274. data/spec/unit/file_serving/mount/plugins_spec.rb +24 -23
  275. data/spec/unit/file_serving/mount/tasks_spec.rb +15 -14
  276. data/spec/unit/file_serving/mount_spec.rb +1 -0
  277. data/spec/unit/file_serving/terminus_helper_spec.rb +42 -37
  278. data/spec/unit/file_serving/terminus_selector_spec.rb +13 -12
  279. data/spec/unit/file_system/uniquefile_spec.rb +4 -4
  280. data/spec/unit/file_system_spec.rb +2 -2
  281. data/spec/unit/forge/errors_spec.rb +1 -1
  282. data/spec/unit/forge/forge_spec.rb +16 -17
  283. data/spec/unit/forge/module_release_spec.rb +18 -18
  284. data/spec/unit/forge/repository_spec.rb +30 -29
  285. data/spec/unit/forge_spec.rb +11 -15
  286. data/spec/unit/functions/binary_file_spec.rb +3 -3
  287. data/spec/unit/functions/contain_spec.rb +2 -0
  288. data/spec/unit/functions/defined_spec.rb +1 -0
  289. data/spec/unit/functions/epp_spec.rb +2 -2
  290. data/spec/unit/functions/find_file_spec.rb +7 -7
  291. data/spec/unit/functions/include_spec.rb +4 -0
  292. data/spec/unit/functions/lookup_fixture_spec.rb +1 -0
  293. data/spec/unit/functions/lookup_spec.rb +2 -1
  294. data/spec/unit/functions/module_directory_spec.rb +12 -12
  295. data/spec/unit/functions/new_spec.rb +0 -15
  296. data/spec/unit/functions/require_spec.rb +3 -0
  297. data/spec/unit/functions/shared.rb +8 -5
  298. data/spec/unit/functions/versioncmp_spec.rb +2 -1
  299. data/spec/unit/functions4_spec.rb +10 -9
  300. data/spec/unit/gettext/config_spec.rb +4 -4
  301. data/spec/unit/gettext/module_loading_spec.rb +7 -7
  302. data/spec/unit/graph/rb_tree_map_spec.rb +2 -0
  303. data/spec/unit/graph/relationship_graph_spec.rb +2 -1
  304. data/spec/unit/graph/simple_graph_spec.rb +10 -9
  305. data/spec/unit/hiera/scope_spec.rb +0 -7
  306. data/spec/unit/hiera_puppet_spec.rb +20 -20
  307. data/spec/unit/indirector/catalog/compiler_spec.rb +149 -147
  308. data/spec/unit/indirector/catalog/json_spec.rb +2 -1
  309. data/spec/unit/indirector/catalog/msgpack_spec.rb +1 -0
  310. data/spec/unit/indirector/catalog/rest_spec.rb +1 -0
  311. data/spec/unit/indirector/catalog/store_configs_spec.rb +1 -0
  312. data/spec/unit/indirector/catalog/yaml_spec.rb +1 -0
  313. data/spec/unit/indirector/certificate/file_spec.rb +1 -0
  314. data/spec/unit/indirector/certificate/rest_spec.rb +10 -8
  315. data/spec/unit/indirector/certificate_request/file_spec.rb +1 -0
  316. data/spec/unit/indirector/certificate_request/rest_spec.rb +1 -0
  317. data/spec/unit/indirector/direct_file_server_spec.rb +18 -17
  318. data/spec/unit/indirector/envelope_spec.rb +2 -1
  319. data/spec/unit/indirector/exec_spec.rb +5 -4
  320. data/spec/unit/indirector/face_spec.rb +9 -9
  321. data/spec/unit/indirector/facts/facter_spec.rb +43 -37
  322. data/spec/unit/indirector/facts/network_device_spec.rb +9 -8
  323. data/spec/unit/indirector/facts/rest_spec.rb +8 -7
  324. data/spec/unit/indirector/facts/store_configs_spec.rb +1 -0
  325. data/spec/unit/indirector/facts/yaml_spec.rb +1 -0
  326. data/spec/unit/indirector/file_bucket_file/file_spec.rb +4 -3
  327. data/spec/unit/indirector/file_bucket_file/rest_spec.rb +1 -0
  328. data/spec/unit/indirector/file_bucket_file/selector_spec.rb +5 -4
  329. data/spec/unit/indirector/file_content/file_server_spec.rb +1 -0
  330. data/spec/unit/indirector/file_content/file_spec.rb +1 -0
  331. data/spec/unit/indirector/file_content/rest_spec.rb +1 -0
  332. data/spec/unit/indirector/file_content/selector_spec.rb +1 -0
  333. data/spec/unit/indirector/file_metadata/file_server_spec.rb +1 -0
  334. data/spec/unit/indirector/file_metadata/file_spec.rb +13 -12
  335. data/spec/unit/indirector/file_metadata/rest_spec.rb +1 -0
  336. data/spec/unit/indirector/file_metadata/selector_spec.rb +1 -0
  337. data/spec/unit/indirector/file_server_spec.rb +87 -87
  338. data/spec/unit/indirector/indirection_spec.rb +226 -242
  339. data/spec/unit/indirector/json_spec.rb +9 -7
  340. data/spec/unit/indirector/key/file_spec.rb +22 -21
  341. data/spec/unit/indirector/memory_spec.rb +7 -6
  342. data/spec/unit/indirector/msgpack_spec.rb +9 -7
  343. data/spec/unit/indirector/node/exec_spec.rb +3 -2
  344. data/spec/unit/indirector/node/memory_spec.rb +4 -2
  345. data/spec/unit/indirector/node/msgpack_spec.rb +1 -0
  346. data/spec/unit/indirector/node/plain_spec.rb +4 -2
  347. data/spec/unit/indirector/node/rest_spec.rb +1 -0
  348. data/spec/unit/indirector/node/store_configs_spec.rb +1 -0
  349. data/spec/unit/indirector/node/yaml_spec.rb +1 -0
  350. data/spec/unit/indirector/none_spec.rb +5 -5
  351. data/spec/unit/indirector/plain_spec.rb +8 -7
  352. data/spec/unit/indirector/report/msgpack_spec.rb +1 -0
  353. data/spec/unit/indirector/report/processor_spec.rb +22 -21
  354. data/spec/unit/indirector/report/rest_spec.rb +12 -11
  355. data/spec/unit/indirector/report/yaml_spec.rb +1 -0
  356. data/spec/unit/indirector/request_spec.rb +12 -11
  357. data/spec/unit/indirector/resource/ral_spec.rb +54 -47
  358. data/spec/unit/indirector/resource/store_configs_spec.rb +1 -0
  359. data/spec/unit/indirector/rest_spec.rb +110 -113
  360. data/spec/unit/indirector/ssl_file_spec.rb +65 -64
  361. data/spec/unit/indirector/status/local_spec.rb +1 -0
  362. data/spec/unit/indirector/status/rest_spec.rb +1 -0
  363. data/spec/unit/indirector/store_configs_spec.rb +1 -0
  364. data/spec/unit/indirector/terminus_spec.rb +27 -27
  365. data/spec/unit/indirector/yaml_spec.rb +6 -5
  366. data/spec/unit/indirector_spec.rb +2 -1
  367. data/spec/unit/info_service_spec.rb +1 -1
  368. data/spec/unit/interface/action_builder_spec.rb +1 -0
  369. data/spec/unit/interface/action_manager_spec.rb +1 -0
  370. data/spec/unit/interface/action_spec.rb +3 -2
  371. data/spec/unit/interface/documentation_spec.rb +1 -0
  372. data/spec/unit/interface/face_collection_spec.rb +12 -19
  373. data/spec/unit/interface_spec.rb +3 -3
  374. data/spec/unit/man_spec.rb +4 -3
  375. data/spec/unit/module_spec.rb +51 -46
  376. data/spec/unit/module_tool/applications/installer_spec.rb +11 -10
  377. data/spec/unit/module_tool/applications/searcher_spec.rb +3 -3
  378. data/spec/unit/module_tool/applications/uninstaller_spec.rb +2 -1
  379. data/spec/unit/module_tool/applications/unpacker_spec.rb +13 -13
  380. data/spec/unit/module_tool/applications/upgrader_spec.rb +5 -5
  381. data/spec/unit/module_tool/install_directory_spec.rb +8 -8
  382. data/spec/unit/module_tool/installed_modules_spec.rb +3 -3
  383. data/spec/unit/module_tool/tar/gnu_spec.rb +6 -6
  384. data/spec/unit/module_tool/tar/mini_spec.rb +12 -12
  385. data/spec/unit/module_tool/tar_spec.rb +13 -12
  386. data/spec/unit/module_tool_spec.rb +12 -7
  387. data/spec/unit/network/auth_config_parser_spec.rb +13 -11
  388. data/spec/unit/network/authconfig_spec.rb +18 -17
  389. data/spec/unit/network/authorization_spec.rb +5 -4
  390. data/spec/unit/network/authstore_spec.rb +1 -0
  391. data/spec/unit/network/format_handler_spec.rb +1 -0
  392. data/spec/unit/network/format_spec.rb +10 -9
  393. data/spec/unit/network/format_support_spec.rb +29 -28
  394. data/spec/unit/network/formats_spec.rb +5 -4
  395. data/spec/unit/network/http/api/indirected_routes_spec.rb +29 -24
  396. data/spec/unit/network/http/api/master/v3/authorization_spec.rb +2 -2
  397. data/spec/unit/network/http/api/master/v3/environment_spec.rb +1 -1
  398. data/spec/unit/network/http/api/master/v3/environments_spec.rb +7 -6
  399. data/spec/unit/network/http/api_spec.rb +2 -0
  400. data/spec/unit/network/http/compression_spec.rb +22 -21
  401. data/spec/unit/network/http/connection_spec.rb +121 -30
  402. data/spec/unit/network/http/factory_spec.rb +6 -11
  403. data/spec/unit/network/http/handler_spec.rb +18 -9
  404. data/spec/unit/network/http/nocache_pool_spec.rb +7 -6
  405. data/spec/unit/network/http/pool_spec.rb +29 -28
  406. data/spec/unit/network/http/request_spec.rb +2 -0
  407. data/spec/unit/network/http/response_spec.rb +13 -11
  408. data/spec/unit/network/http/route_spec.rb +1 -0
  409. data/spec/unit/network/http/session_spec.rb +2 -1
  410. data/spec/unit/network/http/site_spec.rb +1 -0
  411. data/spec/unit/network/http_pool_spec.rb +9 -18
  412. data/spec/unit/network/http_spec.rb +1 -0
  413. data/spec/unit/network/resolver_spec.rb +26 -25
  414. data/spec/unit/network/rights_spec.rb +53 -52
  415. data/spec/unit/node/environment_spec.rb +15 -14
  416. data/spec/unit/node/facts_spec.rb +7 -5
  417. data/spec/unit/node_spec.rb +10 -4
  418. data/spec/unit/other/selinux_spec.rb +1 -0
  419. data/spec/unit/parameter/boolean_spec.rb +2 -1
  420. data/spec/unit/parameter/package_options_spec.rb +2 -1
  421. data/spec/unit/parameter/path_spec.rb +1 -0
  422. data/spec/unit/parameter/value_collection_spec.rb +1 -0
  423. data/spec/unit/parameter/value_spec.rb +1 -0
  424. data/spec/unit/parameter_spec.rb +9 -9
  425. data/spec/unit/parser/ast/block_expression_spec.rb +8 -6
  426. data/spec/unit/parser/ast/leaf_spec.rb +21 -20
  427. data/spec/unit/parser/compiler_spec.rb +96 -84
  428. data/spec/unit/parser/environment_compiler_spec.rb +8 -7
  429. data/spec/unit/parser/files_spec.rb +1 -0
  430. data/spec/unit/parser/functions/create_resources_spec.rb +1 -1
  431. data/spec/unit/parser/functions/digest_spec.rb +1 -0
  432. data/spec/unit/parser/functions/fail_spec.rb +2 -1
  433. data/spec/unit/parser/functions/file_spec.rb +14 -13
  434. data/spec/unit/parser/functions/fqdn_rand_spec.rb +6 -5
  435. data/spec/unit/parser/functions/generate_spec.rb +8 -7
  436. data/spec/unit/parser/functions/inline_template_spec.rb +1 -0
  437. data/spec/unit/parser/functions/regsubst_spec.rb +1 -0
  438. data/spec/unit/parser/functions/scanf_spec.rb +1 -0
  439. data/spec/unit/parser/functions/shellquote_spec.rb +1 -0
  440. data/spec/unit/parser/functions/split_spec.rb +1 -0
  441. data/spec/unit/parser/functions/sprintf_spec.rb +1 -0
  442. data/spec/unit/parser/functions/tag_spec.rb +2 -1
  443. data/spec/unit/parser/functions/tagged_spec.rb +3 -2
  444. data/spec/unit/parser/functions/template_spec.rb +13 -13
  445. data/spec/unit/parser/functions/versioncmp_spec.rb +2 -1
  446. data/spec/unit/parser/functions_spec.rb +7 -6
  447. data/spec/unit/parser/relationship_spec.rb +1 -0
  448. data/spec/unit/parser/resource_spec.rb +42 -42
  449. data/spec/unit/parser/scope_spec.rb +35 -39
  450. data/spec/unit/parser/templatewrapper_spec.rb +12 -11
  451. data/spec/unit/parser/type_loader_spec.rb +19 -17
  452. data/spec/unit/pops/adaptable_spec.rb +1 -0
  453. data/spec/unit/pops/benchmark_spec.rb +1 -0
  454. data/spec/unit/pops/evaluator/access_ops_spec.rb +1 -0
  455. data/spec/unit/pops/evaluator/arithmetic_ops_spec.rb +1 -0
  456. data/spec/unit/pops/evaluator/basic_expressions_spec.rb +1 -0
  457. data/spec/unit/pops/evaluator/collections_ops_spec.rb +1 -0
  458. data/spec/unit/pops/evaluator/comparison_ops_spec.rb +1 -0
  459. data/spec/unit/pops/evaluator/conditionals_spec.rb +1 -0
  460. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +47 -10
  461. data/spec/unit/pops/evaluator/logical_ops_spec.rb +1 -0
  462. data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +1 -0
  463. data/spec/unit/pops/evaluator/string_interpolation_spec.rb +1 -0
  464. data/spec/unit/pops/evaluator/variables_spec.rb +1 -0
  465. data/spec/unit/pops/factory_spec.rb +4 -3
  466. data/spec/unit/pops/issues_spec.rb +20 -19
  467. data/spec/unit/pops/loaders/loader_spec.rb +4 -8
  468. data/spec/unit/pops/loaders/loaders_spec.rb +31 -101
  469. data/spec/unit/pops/lookup/context_spec.rb +1 -0
  470. data/spec/unit/pops/lookup/interpolation_spec.rb +3 -2
  471. data/spec/unit/pops/merge_strategy_spec.rb +1 -0
  472. data/spec/unit/pops/migration_spec.rb +5 -3
  473. data/spec/unit/pops/model/model_spec.rb +1 -0
  474. data/spec/unit/pops/model/pn_transformer_spec.rb +1 -4
  475. data/spec/unit/pops/parser/locator_spec.rb +6 -48
  476. data/spec/unit/pops/parser/parse_application_spec.rb +1 -0
  477. data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +1 -0
  478. data/spec/unit/pops/parser/parse_calls_spec.rb +1 -0
  479. data/spec/unit/pops/parser/parse_capabilities_spec.rb +1 -0
  480. data/spec/unit/pops/parser/parse_conditionals_spec.rb +1 -0
  481. data/spec/unit/pops/parser/parse_containers_spec.rb +1 -0
  482. data/spec/unit/pops/parser/parse_heredoc_spec.rb +15 -111
  483. data/spec/unit/pops/parser/parse_plan_spec.rb +1 -0
  484. data/spec/unit/pops/parser/parse_resource_spec.rb +1 -0
  485. data/spec/unit/pops/parser/parse_site_spec.rb +1 -0
  486. data/spec/unit/pops/parser/pn_parser_spec.rb +1 -0
  487. data/spec/unit/pops/pn_spec.rb +1 -0
  488. data/spec/unit/pops/resource/resource_type_impl_spec.rb +1 -0
  489. data/spec/unit/pops/serialization/serialization_spec.rb +1 -1
  490. data/spec/unit/pops/serialization/to_from_hr_spec.rb +1 -1
  491. data/spec/unit/pops/types/recursion_guard_spec.rb +10 -10
  492. data/spec/unit/pops/types/ruby_generator_spec.rb +2 -2
  493. data/spec/unit/pops/types/string_converter_spec.rb +5 -1
  494. data/spec/unit/pops/types/type_asserter_spec.rb +2 -2
  495. data/spec/unit/pops/types/type_calculator_spec.rb +30 -30
  496. data/spec/unit/pops/types/type_mismatch_describer_spec.rb +0 -9
  497. data/spec/unit/pops/types/type_parser_spec.rb +13 -13
  498. data/spec/unit/pops/validator/validator_spec.rb +2 -1
  499. data/spec/unit/pops/visitor_spec.rb +1 -0
  500. data/spec/unit/property/boolean_spec.rb +1 -1
  501. data/spec/unit/property/ensure_spec.rb +1 -0
  502. data/spec/unit/property/keyvalue_spec.rb +34 -32
  503. data/spec/unit/property/list_spec.rb +27 -26
  504. data/spec/unit/property/ordered_list_spec.rb +14 -10
  505. data/spec/unit/property_spec.rb +43 -42
  506. data/spec/unit/provider/aix_object_spec.rb +45 -47
  507. data/spec/unit/provider/command_spec.rb +9 -9
  508. data/spec/unit/provider/exec/posix_spec.rb +31 -6
  509. data/spec/unit/provider/exec/shell_spec.rb +1 -0
  510. data/spec/unit/provider/exec/windows_spec.rb +4 -2
  511. data/spec/unit/provider/exec_spec.rb +1 -0
  512. data/spec/unit/provider/file/posix_spec.rb +24 -22
  513. data/spec/unit/provider/file/windows_spec.rb +17 -15
  514. data/spec/unit/provider/group/aix_spec.rb +2 -3
  515. data/spec/unit/provider/group/groupadd_spec.rb +26 -30
  516. data/spec/unit/provider/group/ldap_spec.rb +18 -18
  517. data/spec/unit/provider/group/pw_spec.rb +11 -11
  518. data/spec/unit/provider/group/windows_adsi_spec.rb +53 -59
  519. data/spec/unit/provider/ldap_spec.rb +62 -61
  520. data/spec/unit/provider/nameservice/directoryservice_spec.rb +36 -35
  521. data/spec/unit/provider/nameservice_spec.rb +40 -38
  522. data/spec/unit/provider/package/aix_spec.rb +15 -15
  523. data/spec/unit/provider/package/appdmg_spec.rb +13 -13
  524. data/spec/unit/provider/package/apt_spec.rb +27 -44
  525. data/spec/unit/provider/package/aptitude_spec.rb +7 -6
  526. data/spec/unit/provider/package/aptrpm_spec.rb +12 -7
  527. data/spec/unit/provider/package/base_spec.rb +4 -4
  528. data/spec/unit/provider/package/dnf_spec.rb +20 -18
  529. data/spec/unit/provider/package/dpkg_spec.rb +53 -70
  530. data/spec/unit/provider/package/freebsd_spec.rb +11 -11
  531. data/spec/unit/provider/package/gem_spec.rb +55 -132
  532. data/spec/unit/provider/package/hpux_spec.rb +8 -8
  533. data/spec/unit/provider/package/macports_spec.rb +42 -46
  534. data/spec/unit/provider/package/nim_spec.rb +39 -30
  535. data/spec/unit/provider/package/openbsd_spec.rb +39 -36
  536. data/spec/unit/provider/package/opkg_spec.rb +26 -23
  537. data/spec/unit/provider/package/pacman_spec.rb +118 -97
  538. data/spec/unit/provider/package/pip3_spec.rb +0 -17
  539. data/spec/unit/provider/package/pip_spec.rb +106 -95
  540. data/spec/unit/provider/package/pkg_spec.rb +109 -109
  541. data/spec/unit/provider/package/pkgdmg_spec.rb +63 -65
  542. data/spec/unit/provider/package/pkgin_spec.rb +8 -10
  543. data/spec/unit/provider/package/pkgng_spec.rb +31 -22
  544. data/spec/unit/provider/package/pkgutil_spec.rb +49 -45
  545. data/spec/unit/provider/package/portage_spec.rb +74 -70
  546. data/spec/unit/provider/package/puppet_gem_spec.rb +13 -37
  547. data/spec/unit/provider/package/rpm_spec.rb +76 -154
  548. data/spec/unit/provider/package/sun_spec.rb +18 -16
  549. data/spec/unit/provider/package/tdnf_spec.rb +2 -2
  550. data/spec/unit/provider/package/up2date_spec.rb +4 -2
  551. data/spec/unit/provider/package/urpmi_spec.rb +17 -15
  552. data/spec/unit/provider/package/windows/exe_package_spec.rb +15 -12
  553. data/spec/unit/provider/package/windows/msi_package_spec.rb +22 -19
  554. data/spec/unit/provider/package/windows/package_spec.rb +42 -37
  555. data/spec/unit/provider/package/windows_spec.rb +32 -47
  556. data/spec/unit/provider/package/yum_spec.rb +7 -7
  557. data/spec/unit/provider/package/zypper_spec.rb +87 -87
  558. data/spec/unit/provider/parsedfile_spec.rb +45 -44
  559. data/spec/unit/provider/service/base_spec.rb +5 -4
  560. data/spec/unit/provider/service/bsd_spec.rb +29 -27
  561. data/spec/unit/provider/service/daemontools_spec.rb +35 -35
  562. data/spec/unit/provider/service/debian_spec.rb +38 -38
  563. data/spec/unit/provider/service/freebsd_spec.rb +18 -18
  564. data/spec/unit/provider/service/gentoo_spec.rb +55 -50
  565. data/spec/unit/provider/service/init_spec.rb +52 -53
  566. data/spec/unit/provider/service/launchd_spec.rb +116 -138
  567. data/spec/unit/provider/service/openbsd_spec.rb +50 -50
  568. data/spec/unit/provider/service/openrc_spec.rb +45 -43
  569. data/spec/unit/provider/service/openwrt_spec.rb +31 -26
  570. data/spec/unit/provider/service/rcng_spec.rb +14 -14
  571. data/spec/unit/provider/service/redhat_spec.rb +43 -45
  572. data/spec/unit/provider/service/runit_spec.rb +27 -29
  573. data/spec/unit/provider/service/smf_spec.rb +66 -74
  574. data/spec/unit/provider/service/src_spec.rb +47 -46
  575. data/spec/unit/provider/service/systemd_spec.rb +136 -109
  576. data/spec/unit/provider/service/upstart_spec.rb +93 -77
  577. data/spec/unit/provider/service/windows_spec.rb +41 -33
  578. data/spec/unit/provider/user/aix_spec.rb +31 -31
  579. data/spec/unit/provider/user/directoryservice_spec.rb +114 -146
  580. data/spec/unit/provider/user/hpux_spec.rb +16 -16
  581. data/spec/unit/provider/user/ldap_spec.rb +57 -57
  582. data/spec/unit/provider/user/openbsd_spec.rb +12 -10
  583. data/spec/unit/provider/user/pw_spec.rb +35 -37
  584. data/spec/unit/provider/user/user_role_add_spec.rb +93 -93
  585. data/spec/unit/provider/user/useradd_spec.rb +92 -93
  586. data/spec/unit/provider/user/windows_adsi_spec.rb +60 -59
  587. data/spec/unit/provider_spec.rb +35 -35
  588. data/spec/unit/puppet_pal_2pec.rb +5 -4
  589. data/spec/unit/puppet_pal_spec.rb +1 -0
  590. data/spec/unit/puppet_spec.rb +7 -6
  591. data/spec/unit/relationship_spec.rb +1 -0
  592. data/spec/unit/reports/http_spec.rb +23 -21
  593. data/spec/unit/reports/store_spec.rb +4 -3
  594. data/spec/unit/reports_spec.rb +14 -12
  595. data/spec/unit/resource/capability_finder_spec.rb +17 -15
  596. data/spec/unit/resource/catalog_spec.rb +68 -72
  597. data/spec/unit/resource/status_spec.rb +8 -6
  598. data/spec/unit/resource/type_collection_spec.rb +18 -17
  599. data/spec/unit/resource/type_spec.rb +35 -34
  600. data/spec/unit/resource_spec.rb +63 -36
  601. data/spec/unit/rest/client_spec.rb +135 -0
  602. data/spec/unit/rest/route_spec.rb +6 -6
  603. data/spec/unit/scheduler/job_spec.rb +1 -0
  604. data/spec/unit/scheduler/scheduler_spec.rb +1 -0
  605. data/spec/unit/scheduler/splay_job_spec.rb +2 -1
  606. data/spec/unit/settings/array_setting_spec.rb +1 -1
  607. data/spec/unit/settings/autosign_setting_spec.rb +9 -9
  608. data/spec/unit/settings/certificate_revocation_setting_spec.rb +1 -1
  609. data/spec/unit/settings/config_file_spec.rb +1 -0
  610. data/spec/unit/settings/directory_setting_spec.rb +7 -2
  611. data/spec/unit/settings/duration_setting_spec.rb +2 -1
  612. data/spec/unit/settings/enum_setting_spec.rb +1 -1
  613. data/spec/unit/settings/environment_conf_spec.rb +6 -4
  614. data/spec/unit/settings/file_setting_spec.rb +46 -44
  615. data/spec/unit/settings/path_setting_spec.rb +2 -1
  616. data/spec/unit/settings/priority_setting_spec.rb +2 -1
  617. data/spec/unit/settings/string_setting_spec.rb +15 -14
  618. data/spec/unit/settings/terminus_setting_spec.rb +2 -1
  619. data/spec/unit/settings/value_translator_spec.rb +1 -0
  620. data/spec/unit/settings_spec.rb +224 -253
  621. data/spec/unit/ssl/base_spec.rb +15 -14
  622. data/spec/unit/ssl/certificate_request_spec.rb +58 -62
  623. data/spec/unit/ssl/certificate_spec.rb +25 -23
  624. data/spec/unit/ssl/digest_spec.rb +1 -0
  625. data/spec/unit/ssl/host_spec.rb +149 -166
  626. data/spec/unit/ssl/key_spec.rb +31 -30
  627. data/spec/unit/ssl/validator_spec.rb +39 -40
  628. data/spec/unit/task_spec.rb +45 -44
  629. data/spec/unit/transaction/additional_resource_generator_spec.rb +5 -3
  630. data/spec/unit/transaction/event_manager_spec.rb +88 -87
  631. data/spec/unit/transaction/event_spec.rb +15 -16
  632. data/spec/unit/transaction/persistence_spec.rb +17 -16
  633. data/spec/unit/transaction/report_spec.rb +12 -11
  634. data/spec/unit/transaction/resource_harness_spec.rb +31 -52
  635. data/spec/unit/transaction_spec.rb +87 -140
  636. data/spec/unit/type/component_spec.rb +1 -0
  637. data/spec/unit/type/exec_spec.rb +50 -101
  638. data/spec/unit/type/file/checksum_spec.rb +10 -9
  639. data/spec/unit/type/file/checksum_value_spec.rb +32 -31
  640. data/spec/unit/type/file/content_spec.rb +61 -58
  641. data/spec/unit/type/file/ctime_spec.rb +1 -0
  642. data/spec/unit/type/file/ensure_spec.rb +13 -12
  643. data/spec/unit/type/file/group_spec.rb +7 -5
  644. data/spec/unit/type/file/mode_spec.rb +6 -4
  645. data/spec/unit/type/file/mtime_spec.rb +1 -0
  646. data/spec/unit/type/file/owner_spec.rb +8 -6
  647. data/spec/unit/type/file/selinux_spec.rb +19 -17
  648. data/spec/unit/type/file/source_spec.rb +101 -104
  649. data/spec/unit/type/file/type_spec.rb +1 -0
  650. data/spec/unit/type/file_spec.rb +185 -195
  651. data/spec/unit/type/filebucket_spec.rb +10 -11
  652. data/spec/unit/type/group_spec.rb +8 -6
  653. data/spec/unit/type/noop_metaparam_spec.rb +2 -1
  654. data/spec/unit/type/package/package_settings_spec.rb +23 -44
  655. data/spec/unit/type/package_spec.rb +57 -56
  656. data/spec/unit/type/resources_spec.rb +74 -72
  657. data/spec/unit/type/schedule_spec.rb +26 -24
  658. data/spec/unit/type/service_spec.rb +75 -49
  659. data/spec/unit/type/stage_spec.rb +1 -0
  660. data/spec/unit/type/tidy_spec.rb +62 -61
  661. data/spec/unit/type/user_spec.rb +25 -24
  662. data/spec/unit/type/whit_spec.rb +1 -0
  663. data/spec/unit/type_spec.rb +54 -55
  664. data/spec/unit/util/at_fork_spec.rb +19 -18
  665. data/spec/unit/util/autoload_spec.rb +56 -55
  666. data/spec/unit/util/backups_spec.rb +35 -34
  667. data/spec/unit/util/character_encoding_spec.rb +5 -5
  668. data/spec/unit/util/checksums_spec.rb +39 -38
  669. data/spec/unit/util/colors_spec.rb +2 -1
  670. data/spec/unit/util/command_line_spec.rb +20 -40
  671. data/spec/unit/util/constant_inflector_spec.rb +1 -0
  672. data/spec/unit/util/diff_spec.rb +8 -7
  673. data/spec/unit/util/errors_spec.rb +1 -0
  674. data/spec/unit/util/execution_spec.rb +163 -187
  675. data/spec/unit/util/execution_stub_spec.rb +1 -0
  676. data/spec/unit/util/feature_spec.rb +14 -21
  677. data/spec/unit/util/filetype_spec.rb +49 -49
  678. data/spec/unit/util/http_proxy_spec.rb +12 -12
  679. data/spec/unit/util/inifile_spec.rb +31 -26
  680. data/spec/unit/util/json_lockfile_spec.rb +5 -3
  681. data/spec/unit/util/ldap/connection_spec.rb +25 -26
  682. data/spec/unit/util/ldap/generator_spec.rb +1 -0
  683. data/spec/unit/util/ldap/manager_spec.rb +101 -102
  684. data/spec/unit/util/lockfile_spec.rb +1 -0
  685. data/spec/unit/util/log/destinations_spec.rb +33 -30
  686. data/spec/unit/util/log_spec.rb +34 -48
  687. data/spec/unit/util/logging_spec.rb +72 -58
  688. data/spec/unit/util/metric_spec.rb +1 -0
  689. data/spec/unit/util/monkey_patches_spec.rb +9 -7
  690. data/spec/unit/util/multi_match_spec.rb +1 -0
  691. data/spec/unit/util/network_device/config_spec.rb +1 -0
  692. data/spec/unit/util/network_device/transport/base_spec.rb +6 -5
  693. data/spec/unit/util/network_device_spec.rb +9 -7
  694. data/spec/unit/util/package_spec.rb +1 -0
  695. data/spec/unit/util/pidlock_spec.rb +15 -60
  696. data/spec/unit/util/plist_spec.rb +33 -40
  697. data/spec/unit/util/posix_spec.rb +51 -54
  698. data/spec/unit/util/rdoc_spec.rb +10 -9
  699. data/spec/unit/util/reference_spec.rb +1 -0
  700. data/spec/unit/util/resource_template_spec.rb +20 -20
  701. data/spec/unit/util/retry_action_spec.rb +8 -7
  702. data/spec/unit/util/rubygems_spec.rb +8 -7
  703. data/spec/unit/util/run_mode_spec.rb +4 -3
  704. data/spec/unit/util/selinux_spec.rb +72 -79
  705. data/spec/unit/util/splayer_spec.rb +9 -8
  706. data/spec/unit/util/ssl_spec.rb +1 -0
  707. data/spec/unit/util/storage_spec.rb +23 -22
  708. data/spec/unit/util/suidmanager_spec.rb +54 -45
  709. data/spec/unit/util/symbolic_file_mode_spec.rb +1 -0
  710. data/spec/unit/util/tag_set_spec.rb +1 -0
  711. data/spec/unit/util/tagging_spec.rb +1 -0
  712. data/spec/unit/util/terminal_spec.rb +10 -9
  713. data/spec/unit/util/user_attr_spec.rb +2 -1
  714. data/spec/unit/util/warnings_spec.rb +4 -3
  715. data/spec/unit/util/watcher/periodic_watcher_spec.rb +2 -2
  716. data/spec/unit/util/watcher_spec.rb +21 -51
  717. data/spec/unit/util/windows/access_control_entry_spec.rb +1 -0
  718. data/spec/unit/util/windows/access_control_list_spec.rb +1 -0
  719. data/spec/unit/util/windows/adsi_spec.rb +138 -136
  720. data/spec/unit/util/windows/api_types_spec.rb +1 -0
  721. data/spec/unit/util/windows/eventlog_spec.rb +12 -9
  722. data/spec/unit/util/windows/file_spec.rb +1 -0
  723. data/spec/unit/util/windows/root_certs_spec.rb +1 -0
  724. data/spec/unit/util/windows/security_descriptor_spec.rb +2 -0
  725. data/spec/unit/util/windows/service_spec.rb +103 -100
  726. data/spec/unit/util/windows/sid_spec.rb +13 -11
  727. data/spec/unit/util/windows/string_spec.rb +1 -0
  728. data/spec/unit/util_spec.rb +57 -55
  729. data/spec/unit/version_spec.rb +6 -6
  730. metadata +20 -32
  731. data/CODEOWNERS +0 -30
  732. data/ext/autotest/Rakefile +0 -8
  733. data/ext/autotest/config +0 -43
  734. data/ext/autotest/readme.rst +0 -16
  735. data/lib/puppet/confine/boolean.rb +0 -45
  736. data/lib/puppet/provider/package_targetable.rb +0 -68
  737. data/spec/fixtures/unit/pops/loaders/loaders/mix_4x_and_3x_functions/usee/lib/puppet/parser/functions/bad_func_load2.rb +0 -11
  738. data/spec/fixtures/unit/pops/loaders/loaders/mix_4x_and_3x_functions/usee/lib/puppet/parser/functions/bad_func_load3.rb +0 -11
  739. data/spec/fixtures/unit/pops/loaders/loaders/mix_4x_and_3x_functions/usee/lib/puppet/parser/functions/bad_func_load4.rb +0 -11
  740. data/spec/fixtures/unit/pops/loaders/loaders/mix_4x_and_3x_functions/usee/lib/puppet/parser/functions/bad_func_load5.rb +0 -12
  741. data/spec/fixtures/unit/pops/loaders/loaders/mix_4x_and_3x_functions/usee/lib/puppet/parser/functions/good_func_load.rb +0 -9
  742. data/spec/fixtures/unit/provider/package/pkgng/pkg.info +0 -7
  743. data/spec/fixtures/unit/provider/package/pkgng/pkg.query_absent +0 -1
  744. data/spec/integration/network/http_pool_spec.rb +0 -120
  745. data/spec/integration/provider/file/windows_spec.rb +0 -162
  746. data/spec/lib/puppet_spec/https.rb +0 -166
  747. data/spec/unit/settings/server_list_setting_spec.rb +0 -21
  748. data/spec/watchr.rb +0 -137
@@ -15,7 +15,7 @@ class Puppet::Provider::Exec < Puppet::Provider
15
15
 
16
16
  envlist = [envlist] unless envlist.is_a? Array
17
17
  envlist.each do |setting|
18
- unless (match = /^(\w+)=((.|\n)+)$/.match(setting))
18
+ unless (match = /^(\w+)=((.|\n)*)$/.match(setting))
19
19
  warning _("Cannot understand environment setting %{setting}") % { setting: setting.inspect }
20
20
  next
21
21
  end
@@ -26,6 +26,11 @@ class Puppet::Provider::Exec < Puppet::Provider
26
26
  warning _("Overriding environment setting '%{var}' with '%{value}'") % { var: var, value: value }
27
27
  end
28
28
 
29
+ if value.nil? || value.empty?
30
+ msg = _("Empty environment setting '%{var}'") % {var: var}
31
+ Puppet.warn_once('undefined_variables', "empty_env_var_#{var}", msg, resource.file, resource.line)
32
+ end
33
+
29
34
  env[var] = value
30
35
  end
31
36
 
@@ -71,9 +71,7 @@ Puppet::Type.type(:file).provide :windows do
71
71
 
72
72
  def mode=(value)
73
73
  begin
74
- managing_owner = !resource[:owner].nil?
75
- managing_group = !resource[:group].nil?
76
- set_mode(value.to_i(8), resource[:path], true, managing_owner, managing_group)
74
+ set_mode(value.to_i(8), resource[:path])
77
75
  rescue => detail
78
76
  error = Puppet::Error.new(_("failed to set mode %{mode} on %{path}: %{message}") % { mode: mode, path: resource[:path], message: detail.message })
79
77
  error.set_backtrace detail.backtrace
@@ -88,52 +86,6 @@ Puppet::Type.type(:file).provide :windows do
88
86
  end
89
87
  end
90
88
 
91
- # munge the windows group permissions if the user or group are set to SYSTEM
92
- #
93
- # when SYSTEM user is the group or user and the resoure is not managing them then treat
94
- # the resource as insync if System has FullControl access.
95
- #
96
- # @param [String] current - the current mode returned by the resource
97
- # @param [String] should - what the mode should be
98
- #
99
- # @return [String, nil] munged mode or nil if the resource should be out of sync
100
- def munge_windows_system_group(current, should)
101
- [
102
- {
103
- 'type' => 'group',
104
- 'resource' => resource[:group],
105
- 'set_to_user' => group,
106
- 'fullcontrol' => "070".to_i(8),
107
- 'remove_mask' => "707".to_i(8),
108
- 'should_mask' => (should[0].to_i(8) & "070".to_i(8)),
109
- },
110
- {
111
- 'type' => 'owner',
112
- 'resource' => resource[:owner],
113
- 'set_to_user' => owner,
114
- 'fullcontrol' => "700".to_i(8),
115
- 'remove_mask' => "077".to_i(8),
116
- 'should_mask' => (should[0].to_i(8) & "700".to_i(8)),
117
- }
118
- ].each do |mode_part|
119
- if mode_part['resource'].nil? && (mode_part['set_to_user'] == Puppet::Util::Windows::SID::LocalSystem)
120
- if (current.to_i(8) & mode_part['fullcontrol']) == mode_part['fullcontrol']
121
- # Since the group is LocalSystem, and the permissions are FullControl,
122
- # replace the value returned with the value expected. This will treat
123
- # this specific situation as "insync"
124
- current = ( (current.to_i(8) & mode_part['remove_mask']) | mode_part['should_mask'] ).to_s(8).rjust(4, '0')
125
- else
126
- # If the SYSTEM account does _not_ have FullControl in this scenario, we should
127
- # force the resource out of sync no matter what.
128
- #TRANSLATORS 'SYSTEM' is a Windows name and should not be translated
129
- Puppet.debug _("%{resource_name}: %{mode_part_type} set to SYSTEM. SYSTEM permissions cannot be set below FullControl ('7')") % { resource_name: resource[:name], mode_part_type: mode_part['type']}
130
- return nil
131
- end
132
- end
133
- end
134
- current
135
- end
136
-
137
89
  attr_reader :file
138
90
  private
139
91
  def file
@@ -67,10 +67,7 @@ Puppet::Type.type(:group).provide :windows_adsi do
67
67
 
68
68
  def members
69
69
  @members ||= Puppet::Util::Windows::ADSI::Group.name_sid_hash(group.members)
70
-
71
- # @members.keys returns an array of SIDs. We need to convert those SIDs into
72
- # names so that `puppet resource` prints the right output.
73
- members_to_s(@members.keys).split(',')
70
+ @members.keys
74
71
  end
75
72
 
76
73
  def members=(members)
@@ -1,5 +1,3 @@
1
- require 'puppet/provider'
2
-
3
1
  class Puppet::Provider::Package < Puppet::Provider
4
2
  # Prefetch our package list, yo.
5
3
  def self.prefetch(packages)
@@ -81,6 +81,7 @@ Puppet::Type.type(:package).provide :dpkg, :parent => Puppet::Provider::Package
81
81
  unless file = @resource[:source]
82
82
  raise ArgumentError, _("You cannot install dpkg packages without a source")
83
83
  end
84
+
84
85
  args = []
85
86
 
86
87
  # We always unhold when installing to remove any prior hold.
@@ -145,9 +146,7 @@ Puppet::Type.type(:package).provide :dpkg, :parent => Puppet::Provider::Package
145
146
  end
146
147
 
147
148
  def hold
148
- if package_not_installed?(@resource[:name])
149
- self.install
150
- end
149
+ self.install
151
150
  Tempfile.open('puppet_dpkg_set_selection') do |tmpfile|
152
151
  tmpfile.write("#{@resource[:name]} hold\n")
153
152
  tmpfile.flush
@@ -163,16 +162,4 @@ Puppet::Type.type(:package).provide :dpkg, :parent => Puppet::Provider::Package
163
162
  end
164
163
  end
165
164
 
166
- def package_not_installed?(name)
167
- if !name.nil? && !name.empty?
168
- begin
169
- dpkgquery("-W", "--showformat", self.class::DPKG_QUERY_FORMAT_STRING, name)
170
- rescue Puppet::ExecutionFailure
171
- # return true if exception is generated because package is not found
172
- return true
173
- end
174
- return false
175
- end
176
- raise ArgumentError.new("Package name is nil or empty")
177
- end
178
165
  end
@@ -1,8 +1,8 @@
1
- require 'puppet/provider/package_targetable'
1
+ require 'puppet/provider/package'
2
2
  require 'uri'
3
3
 
4
4
  # Ruby gems support.
5
- Puppet::Type.type(:package).provide :gem, :parent => Puppet::Provider::Package::Targetable do
5
+ Puppet::Type.type(:package).provide :gem, :parent => Puppet::Provider::Package do
6
6
  desc "Ruby Gem support. If a URL is passed via `source`, then that URL is
7
7
  appended to the list of remote gem repositories; to ensure that only the
8
8
  specified source is used, also pass `--clear-sources` via `install_options`.
@@ -15,79 +15,27 @@ Puppet::Type.type(:package).provide :gem, :parent => Puppet::Provider::Package::
15
15
  These options should be specified as a string (e.g. '--flag'), a hash (e.g. {'--flag' => 'value'}),
16
16
  or an array where each element is either a string or a hash."
17
17
 
18
- has_feature :versionable, :install_options, :uninstall_options, :targetable
18
+ has_feature :versionable, :install_options, :uninstall_options
19
19
 
20
- # Override the specificity method to return 1 if gem is not set as default provider
21
- def self.specificity
22
- match = default_match
23
- length = match ? match.length : 0
24
-
25
- return 1 if length == 0
26
-
27
- super
28
- end
29
-
30
- # Define the default provider package command name when the provider is targetable.
31
- # Required by Puppet::Provider::Package::Targetable::resource_or_provider_command
32
-
33
- def self.provider_command
34
- command(:gemcmd)
35
- end
36
-
37
- # Define the default provider package command as optional when the provider is targetable.
38
- # Doing do defers the evaluation of provider suitability until all commands are evaluated.
39
-
40
- has_command(:gemcmd, 'gem') do
41
- is_optional
42
- end
43
-
44
- # CommandDefiner in provider.rb creates convenience execution methods that set failonfail, combine, and optionally, environment.
45
- # And when a child provider defines its own command via commands() or has_command(), the provider-specific path is always returned by command().
46
- # But when the convenience execution method is invoked, the last convenience method to be defined is executed.
47
- # This makes invoking those convenience execution methods unsuitable for inherited providers.
48
- #
49
- # In this case, causing the puppet_gem provider to inherit the parent gem provider's convenience gemcmd() methods, with the wrong path.
50
-
51
- def self.execute_gem_command(command, command_options)
52
- validate_command(command)
53
- cmd = [command] << command_options
54
-
55
- execute(cmd, {:failonfail => true, :combine => true, :custom_environment => {"HOME"=>ENV["HOME"]}})
56
- end
57
-
58
- def self.instances(target_command = nil)
59
- if target_command
60
- command = target_command
61
- else
62
- command = provider_command
63
- # The default provider package command is optional.
64
- return [] unless command
65
- end
66
-
67
- gemlist(:command => command, :local => true).collect do |pkg|
68
- # Track the command when the provider is targetable.
69
- pkg[:command] = command
70
- new(pkg)
71
- end
72
- end
20
+ commands :gemcmd => "gem"
73
21
 
74
22
  def self.gemlist(options)
75
- command_options = ["list"]
23
+ gem_list_command = [command(:gemcmd), "list"]
76
24
 
77
25
  if options[:local]
78
- command_options << "--local"
26
+ gem_list_command << "--local"
79
27
  else
80
- command_options << "--remote"
28
+ gem_list_command << "--remote"
81
29
  end
82
30
  if options[:source]
83
- command_options << "--source" << options[:source]
31
+ gem_list_command << "--source" << options[:source]
84
32
  end
85
33
  if name = options[:justme]
86
- command_options << '\A' + name + '\z'
34
+ gem_list_command << '\A' + name + '\z'
87
35
  end
88
36
 
89
37
  begin
90
- list = execute_gem_command(options[:command], command_options).lines.
38
+ list = execute(gem_list_command, {:failonfail => true, :combine => true, :custom_environment => {"HOME"=>ENV["HOME"]}}).lines.
91
39
  map {|set| gemsplit(set) }.
92
40
  reject {|x| x.nil? }
93
41
  rescue Puppet::ExecutionFailure => detail
@@ -122,6 +70,12 @@ Puppet::Type.type(:package).provide :gem, :parent => Puppet::Provider::Package::
122
70
  end
123
71
  end
124
72
 
73
+ def self.instances(justme = false)
74
+ gemlist(:local => true).collect do |hash|
75
+ new(hash)
76
+ end
77
+ end
78
+
125
79
  def insync?(is)
126
80
  return false unless is && is != :absent
127
81
 
@@ -138,27 +92,14 @@ Puppet::Type.type(:package).provide :gem, :parent => Puppet::Provider::Package::
138
92
  is.any? { |version| dependency.match?('', version) }
139
93
  end
140
94
 
141
- def rubygem_version(command)
142
- command_options = ["--version"]
143
- self.class.execute_gem_command(command, command_options)
144
- end
145
-
146
95
  def install(useversion = true)
147
- command = resource_or_provider_command
148
- command_options = ["install"]
149
- command_options += install_options if resource[:install_options]
150
-
96
+ command = [command(:gemcmd), "install"]
97
+ command += install_options if resource[:install_options]
151
98
  if Puppet::Util::Platform.windows?
152
99
  version = resource[:ensure]
153
- command_options << "-v" << %Q["#{version}"] if (! resource[:ensure].is_a? Symbol) and useversion
154
- else
155
- command_options << "-v" << resource[:ensure] if (! resource[:ensure].is_a? Symbol) and useversion
156
- end
157
-
158
- if Puppet::Util::Package.versioncmp(rubygem_version(command), '2.0.0') == -1
159
- command_options << "--no-rdoc" << "--no-ri"
100
+ command << "-v" << %Q["#{version}"] if (! resource[:ensure].is_a? Symbol) and useversion
160
101
  else
161
- command_options << "--no-document"
102
+ command << "-v" << resource[:ensure] if (! resource[:ensure].is_a? Symbol) and useversion
162
103
  end
163
104
 
164
105
  if source = resource[:source]
@@ -171,53 +112,52 @@ Puppet::Type.type(:package).provide :gem, :parent => Puppet::Provider::Package::
171
112
  case uri.scheme
172
113
  when nil
173
114
  # no URI scheme => interpret the source as a local file
174
- command_options << source
115
+ command << source
175
116
  when /file/i
176
- command_options << uri.path
117
+ command << uri.path
177
118
  when 'puppet'
178
119
  # we don't support puppet:// URLs (yet)
179
120
  raise Puppet::Error.new(_("puppet:// URLs are not supported as gem sources"))
180
121
  else
181
122
  # check whether it's an absolute file path to help Windows out
182
123
  if Puppet::Util.absolute_path?(source)
183
- command_options << source
124
+ command << source
184
125
  else
185
126
  # interpret it as a gem repository
186
- command_options << "--source" << "#{source}" << resource[:name]
127
+ command << "--source" << "#{source}" << resource[:name]
187
128
  end
188
129
  end
189
130
  else
190
- command_options << resource[:name]
131
+ command << "--no-rdoc" << "--no-ri" << resource[:name]
191
132
  end
192
133
 
193
- output = self.class.execute_gem_command(command, command_options)
194
- # Apparently some gem versions don't exit non-0 on failure.
134
+ output = execute(command, {:failonfail => true, :combine => true, :custom_environment => {"HOME"=>ENV["HOME"]}})
135
+ # Apparently some stupid gem versions don't exit non-0 on failure
195
136
  self.fail _("Could not install: %{output}") % { output: output.chomp } if output.include?("ERROR")
196
137
  end
197
138
 
198
139
  def latest
199
- command = resource_or_provider_command
200
- options = { :command => command, :justme => resource[:name] }
201
- options[:source] = resource[:source] unless resource[:source].nil?
202
- pkg = self.class.gemlist(options)
203
- pkg[:ensure][0]
140
+ # This always gets the latest version available.
141
+ gemlist_options = {:justme => resource[:name]}
142
+ gemlist_options.merge!({:source => resource[:source]}) unless resource[:source].nil?
143
+ hash = self.class.gemlist(gemlist_options)
144
+
145
+ hash[:ensure][0]
204
146
  end
205
147
 
206
148
  def query
207
- command = resource_or_provider_command
208
- options = { :command => command, :justme => resource[:name], :local => true }
209
- pkg = self.class.gemlist(options)
210
- pkg[:command] = command unless pkg.nil?
211
- pkg
149
+ self.class.gemlist(:justme => resource[:name], :local => true)
212
150
  end
213
151
 
214
152
  def uninstall
215
- command = resource_or_provider_command
216
- command_options = ["uninstall"]
217
- command_options << "--executables" << "--all" << resource[:name]
218
- command_options += uninstall_options if resource[:uninstall_options]
219
- output = self.class.execute_gem_command(command, command_options)
220
- # Apparently some gem versions don't exit non-0 on failure.
153
+ command = [command(:gemcmd), "uninstall"]
154
+ command << "--executables" << "--all" << resource[:name]
155
+
156
+ command += uninstall_options if resource[:uninstall_options]
157
+
158
+ output = execute(command, {:failonfail => true, :combine => true, :custom_environment => {"HOME"=>ENV["HOME"]}})
159
+
160
+ # Apparently some stupid gem versions don't exit non-0 on failure
221
161
  self.fail _("Could not uninstall: %{output}") % { output: output.chomp } if output.include?("ERROR")
222
162
  end
223
163
 
@@ -1,10 +1,11 @@
1
1
  # Puppet package provider for Python's `pip` package management frontend.
2
2
  # <http://pip.pypa.io/>
3
3
 
4
- require 'puppet/provider/package_targetable'
4
+ require 'puppet/provider/package'
5
5
  require 'puppet/util/http_proxy'
6
6
 
7
- Puppet::Type.type(:package).provide :pip, :parent => ::Puppet::Provider::Package::Targetable do
7
+ Puppet::Type.type(:package).provide :pip,
8
+ :parent => ::Puppet::Provider::Package do
8
9
 
9
10
  desc "Python packages via `pip`.
10
11
 
@@ -12,24 +13,43 @@ Puppet::Type.type(:package).provide :pip, :parent => ::Puppet::Provider::Package
12
13
  These options should be specified as a string (e.g. '--flag'), a hash (e.g. {'--flag' => 'value'}),
13
14
  or an array where each element is either a string or a hash."
14
15
 
15
- has_feature :installable, :uninstallable, :upgradeable, :versionable, :install_options, :targetable
16
+ has_feature :installable, :uninstallable, :upgradeable, :versionable, :install_options
16
17
 
17
- # Override the specificity method to return 1 if pip is not set as default provider
18
- def self.specificity
19
- match = default_match
20
- length = match ? match.length : 0
21
-
22
- return 1 if length == 0
23
-
24
- super
18
+ # Parse lines of output from `pip freeze`, which are structured as
19
+ # _package_==_version_.
20
+ def self.parse(line)
21
+ if line.chomp =~ /^([^=]+)==([^=]+)$/
22
+ {:ensure => $2, :name => $1, :provider => name}
23
+ else
24
+ nil
25
+ end
25
26
  end
26
27
 
27
- # Define the default provider package command name when the provider is targetable.
28
- # Required by Puppet::Provider::Package::Targetable::resource_or_provider_command
28
+ # Return an array of structured information about every installed package
29
+ # that's managed by `pip` or an empty array if `pip` is not available.
30
+ def self.instances
31
+ packages = []
32
+ pip_cmd = self.pip_cmd
33
+ return [] unless pip_cmd
34
+ command = [pip_cmd, 'freeze']
35
+ if Puppet::Util::Package.versioncmp(self.pip_version, '8.1.0') >= 0 # a >= b
36
+ command << '--all'
37
+ end
38
+ execpipe command do |process|
39
+ process.collect do |line|
40
+ next unless options = parse(line)
41
+ packages << new(options)
42
+ end
43
+ end
29
44
 
30
- def self.provider_command
31
- # Ensure pip can upgrade pip, which usually puts pip into a new path /usr/local/bin/pip (compared to /usr/bin/pip)
32
- self.cmd.map { |c| which(c) }.find { |c| c != nil }
45
+ # Pip can also upgrade pip, but it's not listed in freeze so need to special case it
46
+ # Pip list would also show pip installed version, but "pip list" doesn't exist for older versions of pip (E.G v1.0)
47
+ # Not needed when "pip freeze --all" is available
48
+ if Puppet::Util::Package.versioncmp(self.pip_version, '8.1.0') == -1 && version = self.pip_version
49
+ packages << new({:ensure => version, :name => File.basename(pip_cmd), :provider => name})
50
+ end
51
+
52
+ packages
33
53
  end
34
54
 
35
55
  def self.cmd
@@ -40,94 +60,104 @@ Puppet::Type.type(:package).provide :pip, :parent => ::Puppet::Provider::Package
40
60
  end
41
61
  end
42
62
 
43
- def self.pip_version(command)
44
- execpipe [command, '--version'] do |process|
45
- process.collect do |line|
46
- return line.strip.match(/^pip (\d+\.\d+\.?\d*).*$/)[1]
47
- end
48
- end
63
+ def self.pip_cmd
64
+ self.cmd.map { |c| which(c) }.find { |c| c != nil }
49
65
  end
50
66
 
51
- # Return an array of structured information about every installed package
52
- # that's managed by `pip` or an empty array if `pip` is not available.
67
+ def self.pip_version
68
+ pip_cmd = self.pip_cmd
69
+ return nil unless pip_cmd
53
70
 
54
- def self.instances(target_command = nil)
55
- if target_command
56
- command = target_command
57
- self.validate_command(command)
58
- else
59
- command = provider_command
60
- end
61
-
62
- packages = []
63
- return packages unless command
64
-
65
- command_options = ['freeze']
66
- command_version = self.pip_version(command)
67
- if Puppet::Util::Package.versioncmp(command_version, '8.1.0') >= 0
68
- command_options << '--all'
69
- end
70
-
71
- execpipe [command, command_options] do |process|
71
+ execpipe [pip_cmd, '--version'] do |process|
72
72
  process.collect do |line|
73
- next unless pkg = parse(line)
74
- pkg[:command] = command
75
- packages << new(pkg)
73
+ return line.strip.match(/^pip (\d+\.\d+\.?\d*).*$/)[1]
76
74
  end
77
75
  end
76
+ end
78
77
 
79
- # Pip can also upgrade pip, but it's not listed in freeze so need to special case it
80
- # Pip list would also show pip installed version, but "pip list" doesn't exist for older versions of pip (E.G v1.0)
81
- # Not needed when "pip freeze --all" is available.
82
- if Puppet::Util::Package.versioncmp(command_version, '8.1.0') == -1
83
- packages << new({:ensure => command_version, :name => File.basename(command), :provider => name, :command => command})
78
+ # Return structured information about a particular package or `nil` if
79
+ # it is not installed or `pip` itself is not available.
80
+ def query
81
+ self.class.instances.each do |provider_pip|
82
+ return provider_pip.properties if @resource[:name].downcase == provider_pip.name.downcase
84
83
  end
85
-
86
- packages
84
+ return nil
87
85
  end
88
86
 
89
- # Parse lines of output from `pip freeze`, which are structured as:
90
- # _package_==_version_
91
- def self.parse(line)
92
- if line.chomp =~ /^([^=]+)==([^=]+)$/
93
- {:ensure => $2, :name => $1, :provider => name}
87
+ # Use pip CLI to look up versions from PyPI repositories, honoring local pip config such as custom repositories
88
+ def latest
89
+ return nil unless self.class.pip_cmd
90
+ if Puppet::Util::Package.versioncmp(self.class.pip_version, '1.5.4') == -1 # a < b
91
+ return latest_with_old_pip
94
92
  end
93
+ latest_with_new_pip
95
94
  end
96
95
 
97
- # Return structured information about a particular package or `nil`
98
- # if the package is not installed or `pip` itself is not available.
99
-
100
- def query
101
- command = resource_or_provider_command
102
- self.class.validate_command(command)
103
-
104
- self.class.instances(command).each do |pkg|
105
- return pkg.properties if @resource[:name].downcase == pkg.name.downcase
96
+ # Install a package. The ensure parameter may specify installed,
97
+ # latest, a version number, or, in conjunction with the source
98
+ # parameter, an SCM revision. In that case, the source parameter
99
+ # gives the fully-qualified URL to the repository.
100
+ def install
101
+ args = %w{install -q}
102
+ args += install_options if @resource[:install_options]
103
+ if @resource[:source]
104
+ if String === @resource[:ensure]
105
+ args << "#{@resource[:source]}@#{@resource[:ensure]}#egg=#{
106
+ @resource[:name]}"
107
+ else
108
+ args << "#{@resource[:source]}#egg=#{@resource[:name]}"
109
+ end
110
+ else
111
+ case @resource[:ensure]
112
+ when String
113
+ args << "#{@resource[:name]}==#{@resource[:ensure]}"
114
+ when :latest
115
+ args << "--upgrade" << @resource[:name]
116
+ else
117
+ args << @resource[:name]
118
+ end
106
119
  end
107
- return nil
120
+ lazy_pip(*args)
108
121
  end
109
122
 
110
- # Use pip CLI to look up versions from PyPI repositories,
111
- # honoring local pip config such as custom repositories.
123
+ # Uninstall a package. Uninstall won't work reliably on Debian/Ubuntu
124
+ # unless this issue gets fixed.
125
+ # <http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=562544>
126
+ def uninstall
127
+ lazy_pip "uninstall", "-y", "-q", @resource[:name]
128
+ end
112
129
 
113
- def latest
114
- command = resource_or_provider_command
115
- self.class.validate_command(command)
130
+ def update
131
+ install
132
+ end
116
133
 
117
- command_version = self.class.pip_version(command)
118
- if Puppet::Util::Package.versioncmp(command_version, '1.5.4') == -1
119
- latest_with_old_pip
134
+ # Execute a `pip` command. If Puppet doesn't yet know how to do so,
135
+ # try to teach it and if even that fails, raise the error.
136
+ private
137
+ def lazy_pip(*args)
138
+ pip(*args)
139
+ rescue NoMethodError => e
140
+ # Ensure pip can upgrade pip, which usually puts pip into a new path /usr/local/bin/pip (compared to /usr/bin/pip)
141
+ # The path to pip needs to be looked up again in the subsequent request. Using the preferred approach as noted
142
+ # in provider.rb ensures this (copied below for reference)
143
+ #
144
+ # @note From provider.rb; It is preferred if the commands are not entered with absolute paths as this allows puppet
145
+ # to search for them using the PATH variable.
146
+ if pathname = self.class.cmd.map { |c| which(c) }.find { |c| c != nil }
147
+ self.class.commands :pip => File.basename(pathname)
148
+ pip(*args)
120
149
  else
121
- latest_with_new_pip
150
+ raise e, "Could not locate command #{self.class.cmd.join(' and ')}.", e.backtrace
122
151
  end
123
152
  end
124
153
 
125
- def latest_with_new_pip
126
- command = resource_or_provider_command
127
- self.class.validate_command(command)
154
+ def install_options
155
+ join_options(@resource[:install_options])
156
+ end
128
157
 
158
+ def latest_with_new_pip
129
159
  # Less resource intensive approach for pip version 1.5.4 and above
130
- execpipe [command, "install", "#{@resource[:name]}==versionplease"] do |process|
160
+ execpipe ["#{self.class.pip_cmd}", "install", "#{@resource[:name]}==versionplease"] do |process|
131
161
  process.collect do |line|
132
162
  # PIP OUTPUT: Could not find a version that satisfies the requirement Django==versionplease (from versions: 1.1.3, 1.8rc1)
133
163
  if line =~ /from versions: /
@@ -143,11 +173,8 @@ Puppet::Type.type(:package).provide :pip, :parent => ::Puppet::Provider::Package
143
173
  end
144
174
 
145
175
  def latest_with_old_pip
146
- command = resource_or_provider_command
147
- self.class.validate_command(command)
148
-
149
176
  Dir.mktmpdir("puppet_pip") do |dir|
150
- execpipe [command, "install", "#{@resource[:name]}", "-d", "#{dir}", "-v"] do |process|
177
+ execpipe ["#{self.class.pip_cmd}", "install", "#{@resource[:name]}", "-d", "#{dir}", "-v"] do |process|
151
178
  process.collect do |line|
152
179
  # PIP OUTPUT: Using version 0.10.1 (newest of versions: 0.10.1, 0.10, 0.9, 0.8.1, 0.8, 0.7.2, 0.7.1, 0.7, 0.6.1, 0.6, 0.5.2, 0.5.1, 0.5, 0.4, 0.3.1, 0.3, 0.2, 0.1)
153
180
  if line =~ /Using version (.+?) \(newest of versions/
@@ -158,55 +185,4 @@ Puppet::Type.type(:package).provide :pip, :parent => ::Puppet::Provider::Package
158
185
  end
159
186
  end
160
187
  end
161
-
162
- # Install a package. The ensure parameter may specify installed,
163
- # latest, a version number, or, in conjunction with the source
164
- # parameter, an SCM revision. In that case, the source parameter
165
- # gives the fully-qualified URL to the repository.
166
-
167
- def install
168
- command = resource_or_provider_command
169
- self.class.validate_command(command)
170
-
171
- command_options = %w{install -q}
172
- command_options += install_options if @resource[:install_options]
173
- if @resource[:source]
174
- if String === @resource[:ensure]
175
- command_options << "#{@resource[:source]}@#{@resource[:ensure]}#egg=#{@resource[:name]}"
176
- else
177
- command_options << "#{@resource[:source]}#egg=#{@resource[:name]}"
178
- end
179
- else
180
- case @resource[:ensure]
181
- when String
182
- command_options << "#{@resource[:name]}==#{@resource[:ensure]}"
183
- when :latest
184
- command_options << "--upgrade" << @resource[:name]
185
- else
186
- command_options << @resource[:name]
187
- end
188
- end
189
-
190
- execute([command, command_options])
191
- end
192
-
193
- # Uninstall a package. Uninstall won't work reliably on Debian/Ubuntu unless this issue gets fixed.
194
- # http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=562544
195
-
196
- def uninstall
197
- command = resource_or_provider_command
198
- self.class.validate_command(command)
199
-
200
- command_options = ["uninstall", "-y", "-q", @resource[:name]]
201
-
202
- execute([command, command_options])
203
- end
204
-
205
- def update
206
- install
207
- end
208
-
209
- def install_options
210
- join_options(@resource[:install_options])
211
- end
212
188
  end