puppet 6.29.0 → 7.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 (811) hide show
  1. checksums.yaml +4 -4
  2. data/CODEOWNERS +16 -2
  3. data/CONTRIBUTING.md +5 -5
  4. data/Gemfile +5 -7
  5. data/Gemfile.lock +52 -143
  6. data/README.md +5 -5
  7. data/conf/fileserver.conf +5 -10
  8. data/ext/README.environment +8 -0
  9. data/ext/build_defaults.yaml +1 -1
  10. data/ext/dbfix.sql +132 -0
  11. data/ext/debian/README.Debian +8 -0
  12. data/ext/debian/README.source +2 -0
  13. data/ext/debian/TODO.Debian +1 -0
  14. data/ext/debian/changelog.erb +1122 -0
  15. data/ext/debian/compat +1 -0
  16. data/ext/debian/control +144 -0
  17. data/ext/debian/copyright +339 -0
  18. data/ext/debian/docs +1 -0
  19. data/ext/debian/fileserver.conf +41 -0
  20. data/ext/debian/puppet-common.dirs +13 -0
  21. data/ext/debian/puppet-common.install +3 -0
  22. data/ext/debian/puppet-common.lintian-overrides +5 -0
  23. data/ext/debian/puppet-common.manpages +28 -0
  24. data/ext/debian/puppet-common.postinst +35 -0
  25. data/ext/debian/puppet-common.postrm +33 -0
  26. data/ext/debian/puppet-el.dirs +1 -0
  27. data/ext/debian/puppet-el.emacsen-install +25 -0
  28. data/ext/debian/puppet-el.emacsen-remove +11 -0
  29. data/ext/debian/puppet-el.emacsen-startup +9 -0
  30. data/ext/debian/puppet-el.install +1 -0
  31. data/ext/debian/puppet-testsuite.install +2 -0
  32. data/ext/debian/puppet-testsuite.lintian-overrides +4 -0
  33. data/ext/debian/puppet.lintian-overrides +3 -0
  34. data/ext/debian/puppet.logrotate +20 -0
  35. data/ext/debian/puppet.postinst +20 -0
  36. data/ext/debian/puppet.postrm +20 -0
  37. data/ext/debian/puppet.preinst +20 -0
  38. data/ext/debian/puppetmaster-common.install +2 -0
  39. data/ext/debian/puppetmaster-common.manpages +2 -0
  40. data/ext/debian/puppetmaster-common.postinst +6 -0
  41. data/ext/debian/puppetmaster-passenger.dirs +4 -0
  42. data/ext/debian/puppetmaster-passenger.postinst +162 -0
  43. data/ext/debian/puppetmaster-passenger.postrm +61 -0
  44. data/ext/debian/puppetmaster.README.debian +17 -0
  45. data/ext/debian/puppetmaster.default +14 -0
  46. data/ext/debian/puppetmaster.init +137 -0
  47. data/ext/debian/puppetmaster.lintian-overrides +3 -0
  48. data/ext/debian/puppetmaster.postinst +20 -0
  49. data/ext/debian/puppetmaster.postrm +5 -0
  50. data/ext/debian/puppetmaster.preinst +22 -0
  51. data/ext/debian/rules +132 -0
  52. data/ext/debian/source/format +1 -0
  53. data/ext/debian/source/options +1 -0
  54. data/ext/debian/vim-puppet.README.Debian +13 -0
  55. data/ext/debian/vim-puppet.dirs +5 -0
  56. data/ext/debian/vim-puppet.yaml +7 -0
  57. data/ext/debian/watch +2 -0
  58. data/ext/freebsd/puppetd +26 -0
  59. data/ext/freebsd/puppetmasterd +26 -0
  60. data/ext/gentoo/conf.d/puppet +5 -0
  61. data/ext/gentoo/conf.d/puppetmaster +12 -0
  62. data/ext/gentoo/init.d/puppet +38 -0
  63. data/ext/gentoo/init.d/puppetmaster +51 -0
  64. data/ext/gentoo/puppet/fileserver.conf +41 -0
  65. data/ext/ips/puppet-agent +44 -0
  66. data/ext/ips/puppet-master +44 -0
  67. data/ext/ips/puppet.p5m.erb +12 -0
  68. data/ext/ips/puppetagent.xml +42 -0
  69. data/ext/ips/puppetmaster.xml +42 -0
  70. data/ext/ips/rules +19 -0
  71. data/ext/ips/transforms +34 -0
  72. data/ext/ldap/puppet.schema +24 -0
  73. data/ext/logcheck/puppet +23 -0
  74. data/{examples → ext}/nagios/check_puppet.rb +2 -2
  75. data/ext/osx/file_mapping.yaml +28 -0
  76. data/ext/osx/postflight.erb +109 -0
  77. data/ext/osx/preflight.erb +52 -0
  78. data/ext/osx/prototype.plist.erb +38 -0
  79. data/ext/osx/puppet.plist +0 -2
  80. data/ext/project_data.yaml +2 -16
  81. data/ext/redhat/fileserver.conf +41 -0
  82. data/ext/redhat/logrotate +21 -0
  83. data/ext/redhat/puppet.spec.erb +841 -0
  84. data/ext/redhat/server.init +128 -0
  85. data/ext/redhat/server.sysconfig +13 -0
  86. data/{examples/enc → ext}/regexp_nodes/classes/databases +0 -0
  87. data/{examples/enc → ext}/regexp_nodes/classes/webservers +0 -0
  88. data/{examples/enc → ext}/regexp_nodes/environment/development +0 -0
  89. data/{examples/enc → ext}/regexp_nodes/parameters/service/prod +0 -0
  90. data/{examples/enc → ext}/regexp_nodes/parameters/service/qa +0 -0
  91. data/{examples/enc → ext}/regexp_nodes/parameters/service/sandbox +0 -0
  92. data/{examples/enc → ext}/regexp_nodes/regexp_nodes.rb +0 -0
  93. data/ext/solaris/pkginfo +6 -0
  94. data/ext/solaris/smf/puppetd.xml +77 -0
  95. data/ext/solaris/smf/puppetmasterd.xml +77 -0
  96. data/ext/solaris/smf/svc-puppetd +71 -0
  97. data/ext/solaris/smf/svc-puppetmasterd +67 -0
  98. data/ext/suse/puppet.spec +310 -0
  99. data/ext/suse/server.init +173 -0
  100. data/ext/windows/service/daemon.rb +6 -5
  101. data/ext/yaml_nodes.rb +105 -0
  102. data/install.rb +21 -17
  103. data/lib/puppet/agent.rb +11 -47
  104. data/lib/puppet/application/agent.rb +16 -18
  105. data/lib/puppet/application/apply.rb +4 -24
  106. data/lib/puppet/application/device.rb +100 -106
  107. data/lib/puppet/application/filebucket.rb +13 -10
  108. data/lib/puppet/application/lookup.rb +24 -74
  109. data/lib/puppet/application/resource.rb +16 -32
  110. data/lib/puppet/application/script.rb +0 -2
  111. data/lib/puppet/application/ssl.rb +1 -13
  112. data/lib/puppet/application.rb +178 -108
  113. data/lib/puppet/application_support.rb +0 -7
  114. data/lib/puppet/concurrent/thread_local_singleton.rb +3 -6
  115. data/lib/puppet/configurer/downloader.rb +1 -2
  116. data/lib/puppet/configurer/plugin_handler.rb +21 -19
  117. data/lib/puppet/configurer.rb +86 -183
  118. data/lib/puppet/confine/variable.rb +1 -1
  119. data/lib/puppet/defaults.rb +130 -244
  120. data/lib/puppet/environments.rb +82 -146
  121. data/lib/puppet/face/facts.rb +5 -103
  122. data/lib/puppet/face/generate.rb +0 -2
  123. data/lib/puppet/face/help/action.erb +0 -1
  124. data/lib/puppet/face/help/face.erb +0 -1
  125. data/lib/puppet/face/help.rb +1 -1
  126. data/lib/puppet/face/node/clean.rb +0 -11
  127. data/lib/puppet/face/plugin.rb +5 -8
  128. data/lib/puppet/ffi/windows/api_types.rb +311 -0
  129. data/lib/puppet/ffi/windows/constants.rb +404 -0
  130. data/lib/puppet/ffi/windows/functions.rb +628 -0
  131. data/lib/puppet/ffi/windows/structs.rb +338 -0
  132. data/lib/puppet/ffi/windows.rb +12 -0
  133. data/lib/puppet/file_serving/configuration/parser.rb +3 -34
  134. data/lib/puppet/file_serving/configuration.rb +0 -8
  135. data/lib/puppet/file_serving/fileset.rb +2 -14
  136. data/lib/puppet/file_serving/http_metadata.rb +1 -1
  137. data/lib/puppet/file_serving/metadata.rb +0 -3
  138. data/lib/puppet/file_serving/mount/file.rb +4 -4
  139. data/lib/puppet/file_serving/mount.rb +1 -2
  140. data/lib/puppet/file_system/file_impl.rb +8 -10
  141. data/lib/puppet/file_system/jruby.rb +1 -1
  142. data/lib/puppet/file_system/memory_file.rb +1 -8
  143. data/lib/puppet/file_system/windows.rb +6 -8
  144. data/lib/puppet/file_system.rb +1 -1
  145. data/lib/puppet/forge/repository.rb +0 -1
  146. data/lib/puppet/forge.rb +4 -4
  147. data/lib/puppet/functions/all.rb +1 -1
  148. data/lib/puppet/functions/camelcase.rb +1 -1
  149. data/lib/puppet/functions/capitalize.rb +2 -2
  150. data/lib/puppet/functions/downcase.rb +2 -2
  151. data/lib/puppet/functions/empty.rb +0 -8
  152. data/lib/puppet/functions/find_template.rb +2 -2
  153. data/lib/puppet/functions/get.rb +5 -5
  154. data/lib/puppet/functions/group_by.rb +5 -13
  155. data/lib/puppet/functions/lest.rb +1 -1
  156. data/lib/puppet/functions/new.rb +100 -100
  157. data/lib/puppet/functions/next.rb +1 -18
  158. data/lib/puppet/functions/partition.rb +4 -12
  159. data/lib/puppet/functions/require.rb +5 -5
  160. data/lib/puppet/functions/sort.rb +3 -3
  161. data/lib/puppet/functions/strftime.rb +0 -1
  162. data/lib/puppet/functions/tree_each.rb +10 -7
  163. data/lib/puppet/functions/type.rb +4 -4
  164. data/lib/puppet/functions/unwrap.rb +2 -17
  165. data/lib/puppet/functions/upcase.rb +2 -2
  166. data/lib/puppet/functions/versioncmp.rb +2 -6
  167. data/lib/puppet/generate/models/type/type.rb +4 -1
  168. data/lib/puppet/generate/type.rb +0 -9
  169. data/lib/puppet/http/client.rb +167 -137
  170. data/lib/puppet/{network/resolver.rb → http/dns.rb} +2 -2
  171. data/lib/puppet/http/errors.rb +16 -0
  172. data/lib/puppet/http/external_client.rb +5 -7
  173. data/lib/puppet/{network/http → http}/factory.rb +8 -15
  174. data/lib/puppet/{network/http → http}/pool.rb +61 -26
  175. data/lib/puppet/{network/http/session.rb → http/pool_entry.rb} +2 -3
  176. data/lib/puppet/http/proxy.rb +137 -0
  177. data/lib/puppet/http/redirector.rb +4 -17
  178. data/lib/puppet/http/resolver/server_list.rb +10 -25
  179. data/lib/puppet/http/resolver/settings.rb +4 -7
  180. data/lib/puppet/http/resolver/srv.rb +7 -11
  181. data/lib/puppet/http/resolver.rb +5 -15
  182. data/lib/puppet/http/response.rb +36 -54
  183. data/lib/puppet/http/response_converter.rb +24 -0
  184. data/lib/puppet/http/response_net_http.rb +42 -0
  185. data/lib/puppet/http/retry_after_handler.rb +4 -13
  186. data/lib/puppet/http/service/ca.rb +11 -22
  187. data/lib/puppet/http/service/compiler.rb +23 -144
  188. data/lib/puppet/http/service/file_server.rb +19 -29
  189. data/lib/puppet/http/service/puppetserver.rb +26 -12
  190. data/lib/puppet/http/service/report.rb +8 -10
  191. data/lib/puppet/http/service.rb +12 -26
  192. data/lib/puppet/http/session.rb +11 -20
  193. data/lib/puppet/{network/http → http}/site.rb +1 -2
  194. data/lib/puppet/http.rb +22 -13
  195. data/lib/puppet/indirector/catalog/compiler.rb +6 -25
  196. data/lib/puppet/indirector/catalog/rest.rb +2 -5
  197. data/lib/puppet/indirector/facts/facter.rb +6 -6
  198. data/lib/puppet/indirector/facts/rest.rb +3 -22
  199. data/lib/puppet/indirector/file_bucket_file/rest.rb +3 -9
  200. data/lib/puppet/indirector/file_content/rest.rb +2 -6
  201. data/lib/puppet/indirector/file_metadata/rest.rb +3 -10
  202. data/lib/puppet/indirector/file_server.rb +1 -8
  203. data/lib/puppet/indirector/generic_http.rb +0 -11
  204. data/lib/puppet/indirector/indirection.rb +1 -1
  205. data/lib/puppet/indirector/node/rest.rb +2 -4
  206. data/lib/puppet/indirector/report/rest.rb +3 -8
  207. data/lib/puppet/indirector/request.rb +0 -101
  208. data/lib/puppet/indirector/resource/ral.rb +1 -6
  209. data/lib/puppet/indirector/rest.rb +12 -263
  210. data/lib/puppet/indirector/terminus.rb +0 -4
  211. data/lib/puppet/interface/documentation.rb +0 -1
  212. data/lib/puppet/module/plan.rb +1 -0
  213. data/lib/puppet/module/task.rb +1 -1
  214. data/lib/puppet/module.rb +0 -1
  215. data/lib/puppet/module_tool/applications/installer.rb +2 -56
  216. data/lib/puppet/module_tool/applications/uninstaller.rb +1 -1
  217. data/lib/puppet/module_tool/applications/upgrader.rb +1 -1
  218. data/lib/puppet/module_tool/applications.rb +0 -1
  219. data/lib/puppet/module_tool/errors/shared.rb +2 -34
  220. data/lib/puppet/network/authconfig.rb +2 -96
  221. data/lib/puppet/network/authorization.rb +13 -35
  222. data/lib/puppet/network/formats.rb +0 -67
  223. data/lib/puppet/network/http/api/indirected_routes.rb +3 -21
  224. data/lib/puppet/network/http/api/master/v3.rb +11 -13
  225. data/lib/puppet/network/http/connection.rb +247 -316
  226. data/lib/puppet/network/http/handler.rb +0 -1
  227. data/lib/puppet/network/http.rb +3 -3
  228. data/lib/puppet/network/http_pool.rb +16 -34
  229. data/lib/puppet/node/environment.rb +11 -10
  230. data/lib/puppet/node.rb +2 -31
  231. data/lib/puppet/pal/json_catalog_encoder.rb +4 -0
  232. data/lib/puppet/pal/pal_impl.rb +4 -2
  233. data/lib/puppet/parser/ast/leaf.rb +2 -3
  234. data/lib/puppet/parser/ast/pops_bridge.rb +0 -38
  235. data/lib/puppet/parser/compiler/catalog_validator/relationship_validator.rb +14 -39
  236. data/lib/puppet/parser/compiler.rb +0 -198
  237. data/lib/puppet/parser/functions/fqdn_rand.rb +6 -14
  238. data/lib/puppet/parser/resource.rb +1 -70
  239. data/lib/puppet/parser/scope.rb +0 -1
  240. data/lib/puppet/parser/templatewrapper.rb +1 -2
  241. data/lib/puppet/pops/evaluator/closure.rb +5 -7
  242. data/lib/puppet/pops/evaluator/deferred_resolver.rb +3 -5
  243. data/lib/puppet/pops/evaluator/evaluator_impl.rb +0 -5
  244. data/lib/puppet/pops/evaluator/runtime3_resource_support.rb +3 -4
  245. data/lib/puppet/pops/evaluator/runtime3_support.rb +1 -1
  246. data/lib/puppet/pops/issues.rb +0 -5
  247. data/lib/puppet/pops/loader/ruby_legacy_function_instantiator.rb +6 -8
  248. data/lib/puppet/pops/lookup/lookup_adapter.rb +2 -3
  249. data/lib/puppet/pops/model/ast.pp +0 -42
  250. data/lib/puppet/pops/model/ast.rb +0 -291
  251. data/lib/puppet/pops/model/ast_transformer.rb +1 -1
  252. data/lib/puppet/pops/model/factory.rb +1 -47
  253. data/lib/puppet/pops/model/model_label_provider.rb +0 -5
  254. data/lib/puppet/pops/model/model_tree_dumper.rb +0 -22
  255. data/lib/puppet/pops/model/pn_transformer.rb +0 -16
  256. data/lib/puppet/pops/parser/code_merger.rb +4 -4
  257. data/lib/puppet/pops/parser/egrammar.ra +0 -58
  258. data/lib/puppet/pops/parser/eparser.rb +1685 -1896
  259. data/lib/puppet/pops/parser/lexer2.rb +91 -92
  260. data/lib/puppet/pops/parser/parser_support.rb +0 -5
  261. data/lib/puppet/pops/parser/slurp_support.rb +0 -1
  262. data/lib/puppet/pops/resource/resource_type_impl.rb +2 -24
  263. data/lib/puppet/pops/serialization/to_stringified_converter.rb +1 -1
  264. data/lib/puppet/pops/types/p_sem_ver_type.rb +2 -8
  265. data/lib/puppet/pops/types/p_sensitive_type.rb +0 -10
  266. data/lib/puppet/pops/types/type_calculator.rb +0 -7
  267. data/lib/puppet/pops/types/type_formatter.rb +3 -4
  268. data/lib/puppet/pops/types/type_mismatch_describer.rb +1 -1
  269. data/lib/puppet/pops/types/type_parser.rb +0 -4
  270. data/lib/puppet/pops/types/types.rb +1 -2
  271. data/lib/puppet/pops/validation/checker4_0.rb +9 -37
  272. data/lib/puppet/pops/validation/tasks_checker.rb +0 -12
  273. data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -2
  274. data/lib/puppet/property/list.rb +1 -1
  275. data/lib/puppet/provider/aix_object.rb +1 -1
  276. data/lib/puppet/provider/exec/posix.rb +4 -16
  277. data/lib/puppet/provider/group/groupadd.rb +10 -18
  278. data/lib/puppet/provider/nameservice.rb +0 -18
  279. data/lib/puppet/provider/package/apt.rb +2 -34
  280. data/lib/puppet/provider/package/aptitude.rb +0 -6
  281. data/lib/puppet/provider/package/dnfmodule.rb +1 -1
  282. data/lib/puppet/provider/package/dpkg.rb +0 -10
  283. data/lib/puppet/provider/package/gem.rb +23 -3
  284. data/lib/puppet/provider/package/nim.rb +6 -11
  285. data/lib/puppet/provider/package/pip.rb +3 -16
  286. data/lib/puppet/provider/package/pkg.rb +2 -23
  287. data/lib/puppet/provider/package/portage.rb +1 -1
  288. data/lib/puppet/provider/package/puppet_gem.rb +1 -4
  289. data/lib/puppet/provider/package/puppetserver_gem.rb +17 -8
  290. data/lib/puppet/provider/package/windows/exe_package.rb +1 -30
  291. data/lib/puppet/provider/package/windows/package.rb +1 -2
  292. data/lib/puppet/provider/package/windows.rb +1 -14
  293. data/lib/puppet/provider/package/yum.rb +1 -1
  294. data/lib/puppet/provider/parsedfile.rb +0 -3
  295. data/lib/puppet/provider/service/base.rb +1 -1
  296. data/lib/puppet/provider/service/debian.rb +0 -2
  297. data/lib/puppet/provider/service/init.rb +9 -10
  298. data/lib/puppet/provider/service/launchd.rb +2 -2
  299. data/lib/puppet/provider/service/redhat.rb +1 -1
  300. data/lib/puppet/provider/service/smf.rb +194 -76
  301. data/lib/puppet/provider/service/systemd.rb +6 -16
  302. data/lib/puppet/provider/service/upstart.rb +5 -5
  303. data/lib/puppet/provider/service/windows.rb +0 -38
  304. data/lib/puppet/provider/user/aix.rb +3 -46
  305. data/lib/puppet/provider/user/directoryservice.rb +11 -39
  306. data/lib/puppet/provider/user/useradd.rb +24 -134
  307. data/lib/puppet/provider.rb +1 -14
  308. data/lib/puppet/reference/configuration.rb +8 -7
  309. data/lib/puppet/reference/indirection.rb +1 -1
  310. data/lib/puppet/reference/providers.rb +2 -2
  311. data/lib/puppet/resource/catalog.rb +2 -15
  312. data/lib/puppet/resource/type.rb +3 -119
  313. data/lib/puppet/resource/type_collection.rb +3 -49
  314. data/lib/puppet/resource.rb +6 -127
  315. data/lib/puppet/runtime.rb +2 -13
  316. data/lib/puppet/settings/environment_conf.rb +0 -1
  317. data/lib/puppet/settings/integer_setting.rb +17 -0
  318. data/lib/puppet/settings/port_setting.rb +15 -0
  319. data/lib/puppet/settings/priority_setting.rb +5 -4
  320. data/lib/puppet/settings.rb +82 -98
  321. data/lib/puppet/ssl/base.rb +3 -5
  322. data/lib/puppet/ssl/certificate.rb +0 -6
  323. data/lib/puppet/ssl/certificate_request.rb +1 -12
  324. data/lib/puppet/ssl/certificate_signer.rb +6 -0
  325. data/lib/puppet/ssl/oids.rb +3 -1
  326. data/lib/puppet/ssl/ssl_provider.rb +36 -75
  327. data/lib/puppet/ssl/state_machine.rb +20 -14
  328. data/lib/puppet/ssl/verifier.rb +2 -6
  329. data/lib/puppet/ssl.rb +10 -6
  330. data/lib/puppet/test/test_helper.rb +2 -7
  331. data/lib/puppet/transaction/additional_resource_generator.rb +1 -1
  332. data/lib/puppet/transaction/persistence.rb +1 -21
  333. data/lib/puppet/transaction/report.rb +3 -19
  334. data/lib/puppet/transaction.rb +1 -7
  335. data/lib/puppet/type/exec.rb +6 -36
  336. data/lib/puppet/type/file/checksum.rb +1 -1
  337. data/lib/puppet/type/file/data_sync.rb +1 -1
  338. data/lib/puppet/type/file/mode.rb +0 -6
  339. data/lib/puppet/type/file/selcontext.rb +1 -1
  340. data/lib/puppet/type/file/source.rb +1 -1
  341. data/lib/puppet/type/file.rb +12 -32
  342. data/lib/puppet/type/filebucket.rb +4 -4
  343. data/lib/puppet/type/group.rb +1 -0
  344. data/lib/puppet/type/package.rb +8 -16
  345. data/lib/puppet/type/resources.rb +1 -1
  346. data/lib/puppet/type/service.rb +41 -26
  347. data/lib/puppet/type/tidy.rb +3 -22
  348. data/lib/puppet/type/user.rb +13 -35
  349. data/lib/puppet/type.rb +1 -77
  350. data/lib/puppet/util/autoload.rb +8 -1
  351. data/lib/puppet/util/command_line.rb +1 -1
  352. data/lib/puppet/util/execution.rb +0 -11
  353. data/lib/puppet/util/filetype.rb +2 -2
  354. data/lib/puppet/util/http_proxy.rb +2 -215
  355. data/lib/puppet/util/json.rb +0 -20
  356. data/lib/puppet/util/log.rb +4 -8
  357. data/lib/puppet/util/logging.rb +25 -1
  358. data/lib/puppet/util/monkey_patches.rb +2 -59
  359. data/lib/puppet/util/package.rb +16 -25
  360. data/lib/puppet/util/pidlock.rb +1 -1
  361. data/lib/puppet/util/posix.rb +5 -54
  362. data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +1 -1
  363. data/lib/puppet/util/rdoc.rb +0 -7
  364. data/lib/puppet/util/retry_action.rb +1 -1
  365. data/lib/puppet/util/run_mode.rb +9 -1
  366. data/lib/puppet/util/selinux.rb +4 -30
  367. data/lib/puppet/util/suidmanager.rb +2 -1
  368. data/lib/puppet/util/symbolic_file_mode.rb +17 -29
  369. data/lib/puppet/util/tagging.rb +0 -1
  370. data/lib/puppet/util/windows/adsi.rb +0 -46
  371. data/lib/puppet/util/windows/daemon.rb +360 -0
  372. data/lib/puppet/util/windows/error.rb +1 -0
  373. data/lib/puppet/util/windows/eventlog.rb +4 -9
  374. data/lib/puppet/util/windows/file.rb +8 -242
  375. data/lib/puppet/util/windows/monkey_patches/process.rb +414 -0
  376. data/lib/puppet/util/windows/principal.rb +2 -9
  377. data/lib/puppet/util/windows/process.rb +4 -226
  378. data/lib/puppet/util/windows/service.rb +11 -457
  379. data/lib/puppet/util/windows/sid.rb +2 -6
  380. data/lib/puppet/util/windows/string.rb +12 -13
  381. data/lib/puppet/util/windows/user.rb +2 -0
  382. data/lib/puppet/util/windows.rb +3 -11
  383. data/lib/puppet/util/yaml.rb +1 -42
  384. data/lib/puppet/util.rb +5 -5
  385. data/lib/puppet/vendor/require_vendored.rb +0 -1
  386. data/lib/puppet/version.rb +1 -1
  387. data/lib/puppet/x509/cert_provider.rb +29 -1
  388. data/lib/puppet/x509.rb +5 -1
  389. data/lib/puppet.rb +34 -27
  390. data/locales/puppet.pot +9633 -5
  391. data/man/man5/puppet.conf.5 +286 -401
  392. data/man/man8/puppet-agent.8 +2 -5
  393. data/man/man8/puppet-apply.8 +2 -2
  394. data/man/man8/puppet-catalog.8 +9 -9
  395. data/man/man8/puppet-config.8 +1 -1
  396. data/man/man8/puppet-describe.8 +1 -1
  397. data/man/man8/puppet-device.8 +2 -2
  398. data/man/man8/puppet-doc.8 +1 -1
  399. data/man/man8/puppet-epp.8 +1 -1
  400. data/man/man8/puppet-facts.8 +8 -51
  401. data/man/man8/puppet-filebucket.8 +4 -4
  402. data/man/man8/puppet-generate.8 +1 -1
  403. data/man/man8/puppet-help.8 +1 -1
  404. data/man/man8/puppet-lookup.8 +6 -9
  405. data/man/man8/puppet-module.8 +3 -60
  406. data/man/man8/puppet-node.8 +5 -5
  407. data/man/man8/puppet-parser.8 +1 -1
  408. data/man/man8/puppet-plugin.8 +1 -1
  409. data/man/man8/puppet-report.8 +5 -5
  410. data/man/man8/puppet-resource.8 +1 -1
  411. data/man/man8/puppet-script.8 +2 -2
  412. data/man/man8/puppet-ssl.8 +1 -5
  413. data/man/man8/puppet.8 +2 -2
  414. data/spec/fixtures/ssl/127.0.0.1-key.pem +57 -107
  415. data/spec/fixtures/ssl/127.0.0.1.pem +31 -52
  416. data/spec/fixtures/ssl/bad-basic-constraints.pem +35 -57
  417. data/spec/fixtures/ssl/bad-int-basic-constraints.pem +35 -57
  418. data/spec/fixtures/ssl/ca.pem +35 -57
  419. data/spec/fixtures/ssl/crl.pem +18 -28
  420. data/spec/fixtures/ssl/ec-key.pem +11 -11
  421. data/spec/fixtures/ssl/ec.pem +24 -33
  422. data/spec/fixtures/ssl/encrypted-ec-key.pem +12 -12
  423. data/spec/fixtures/ssl/encrypted-key.pem +58 -108
  424. data/spec/fixtures/ssl/intermediate-agent-crl.pem +19 -28
  425. data/spec/fixtures/ssl/intermediate-agent.pem +36 -57
  426. data/spec/fixtures/ssl/intermediate-crl.pem +21 -31
  427. data/spec/fixtures/ssl/intermediate.pem +36 -57
  428. data/spec/fixtures/ssl/pluto-key.pem +57 -107
  429. data/spec/fixtures/ssl/pluto.pem +30 -52
  430. data/spec/fixtures/ssl/request-key.pem +57 -107
  431. data/spec/fixtures/ssl/request.pem +26 -47
  432. data/spec/fixtures/ssl/revoked-key.pem +57 -107
  433. data/spec/fixtures/ssl/revoked.pem +30 -52
  434. data/spec/fixtures/ssl/signed-key.pem +57 -107
  435. data/spec/fixtures/ssl/signed.pem +30 -52
  436. data/spec/fixtures/ssl/tampered-cert.pem +30 -52
  437. data/spec/fixtures/ssl/tampered-csr.pem +26 -47
  438. data/spec/fixtures/ssl/unknown-127.0.0.1-key.pem +57 -107
  439. data/spec/fixtures/ssl/unknown-127.0.0.1.pem +29 -50
  440. data/spec/fixtures/ssl/unknown-ca-key.pem +57 -107
  441. data/spec/fixtures/ssl/unknown-ca.pem +33 -55
  442. data/spec/fixtures/unit/forge/bacula.json +1 -1
  443. data/spec/fixtures/unit/provider/service/smf/{svcs.out → svcs_instances.out} +0 -0
  444. data/spec/fixtures/unit/provider/user/aix/aix_passwd_file.out +0 -4
  445. data/spec/integration/application/agent_spec.rb +50 -406
  446. data/spec/integration/application/apply_spec.rb +1 -20
  447. data/spec/integration/application/filebucket_spec.rb +16 -32
  448. data/spec/integration/application/help_spec.rb +2 -0
  449. data/spec/integration/application/lookup_spec.rb +50 -81
  450. data/spec/integration/application/module_spec.rb +0 -21
  451. data/spec/integration/application/plugin_spec.rb +24 -2
  452. data/spec/integration/configurer_spec.rb +2 -18
  453. data/spec/integration/defaults_spec.rb +14 -3
  454. data/spec/integration/environments/settings_interpolation_spec.rb +4 -0
  455. data/spec/integration/http/client_spec.rb +4 -63
  456. data/spec/integration/indirector/direct_file_server_spec.rb +3 -1
  457. data/spec/integration/indirector/facts/facter_spec.rb +39 -93
  458. data/spec/integration/network/http_pool_spec.rb +3 -21
  459. data/spec/integration/parser/catalog_spec.rb +0 -38
  460. data/spec/integration/parser/node_spec.rb +0 -9
  461. data/spec/integration/parser/pcore_resource_spec.rb +0 -47
  462. data/spec/integration/resource/type_collection_spec.rb +6 -2
  463. data/spec/integration/transaction/report_spec.rb +1 -1
  464. data/spec/integration/transaction_spec.rb +9 -4
  465. data/spec/integration/type/exec_spec.rb +45 -70
  466. data/spec/integration/type/file_spec.rb +7 -6
  467. data/spec/integration/type/package_spec.rb +6 -6
  468. data/spec/integration/util/rdoc/parser_spec.rb +1 -1
  469. data/spec/integration/util/windows/adsi_spec.rb +1 -21
  470. data/spec/integration/util/windows/monkey_patches/process_spec.rb +231 -0
  471. data/spec/integration/util/windows/principal_spec.rb +0 -21
  472. data/spec/integration/util/windows/process_spec.rb +9 -1
  473. data/spec/integration/util/windows/registry_spec.rb +10 -6
  474. data/spec/integration/util/windows/security_spec.rb +1 -1
  475. data/spec/lib/matchers/include.rb +27 -0
  476. data/spec/lib/matchers/include_spec.rb +32 -0
  477. data/spec/lib/puppet/test_ca.rb +2 -7
  478. data/spec/lib/puppet_spec/https.rb +1 -1
  479. data/spec/lib/puppet_spec/modules.rb +2 -13
  480. data/spec/lib/puppet_spec/puppetserver.rb +3 -55
  481. data/spec/lib/puppet_spec/settings.rb +1 -1
  482. data/spec/shared_behaviours/documentation_on_faces.rb +2 -0
  483. data/spec/spec_helper.rb +17 -13
  484. data/spec/unit/agent_spec.rb +8 -38
  485. data/spec/unit/application/agent_spec.rb +19 -33
  486. data/spec/unit/application/apply_spec.rb +56 -76
  487. data/spec/unit/application/facts_spec.rb +12 -456
  488. data/spec/unit/application/filebucket_spec.rb +43 -39
  489. data/spec/unit/application/lookup_spec.rb +10 -131
  490. data/spec/unit/application/resource_spec.rb +0 -29
  491. data/spec/unit/application/ssl_spec.rb +2 -25
  492. data/spec/unit/application_spec.rb +9 -51
  493. data/spec/unit/certificate_factory_spec.rb +1 -1
  494. data/spec/unit/configurer/downloader_spec.rb +6 -8
  495. data/spec/unit/configurer/plugin_handler_spec.rb +56 -18
  496. data/spec/unit/configurer_spec.rb +68 -327
  497. data/spec/unit/confine/feature_spec.rb +1 -1
  498. data/spec/unit/confine_spec.rb +2 -8
  499. data/spec/unit/context/trusted_information_spec.rb +2 -6
  500. data/spec/unit/daemon_spec.rb +11 -2
  501. data/spec/unit/defaults_spec.rb +68 -55
  502. data/spec/unit/environments_spec.rb +68 -408
  503. data/spec/unit/face/generate_spec.rb +0 -64
  504. data/spec/unit/face/node_spec.rb +11 -0
  505. data/spec/unit/face/plugin_spec.rb +73 -33
  506. data/spec/unit/file_bucket/dipper_spec.rb +2 -2
  507. data/spec/unit/file_bucket/file_spec.rb +1 -1
  508. data/spec/unit/file_serving/configuration/parser_spec.rb +15 -41
  509. data/spec/unit/file_serving/configuration_spec.rb +10 -26
  510. data/spec/unit/file_serving/fileset_spec.rb +0 -60
  511. data/spec/unit/file_serving/metadata_spec.rb +3 -3
  512. data/spec/unit/file_serving/terminus_helper_spec.rb +4 -11
  513. data/spec/unit/file_system_spec.rb +4 -56
  514. data/spec/unit/forge/module_release_spec.rb +10 -5
  515. data/spec/unit/functions/assert_type_spec.rb +1 -1
  516. data/spec/unit/functions/camelcase_spec.rb +1 -1
  517. data/spec/unit/functions/capitalize_spec.rb +1 -1
  518. data/spec/unit/functions/downcase_spec.rb +1 -1
  519. data/spec/unit/functions/empty_spec.rb +0 -10
  520. data/spec/unit/functions/logging_spec.rb +0 -1
  521. data/spec/unit/functions/lookup_spec.rb +0 -64
  522. data/spec/unit/functions/unwrap_spec.rb +0 -8
  523. data/spec/unit/functions/upcase_spec.rb +1 -1
  524. data/spec/unit/functions/versioncmp_spec.rb +4 -40
  525. data/spec/unit/functions4_spec.rb +2 -2
  526. data/spec/unit/gettext/config_spec.rb +0 -12
  527. data/spec/unit/http/client_spec.rb +8 -84
  528. data/spec/unit/{network/resolver_spec.rb → http/dns_spec.rb} +3 -3
  529. data/spec/unit/http/external_client_spec.rb +4 -4
  530. data/spec/unit/{network/http → http}/factory_spec.rb +5 -30
  531. data/spec/unit/{network/http/session_spec.rb → http/pool_entry_spec.rb} +3 -3
  532. data/spec/unit/{network/http → http}/pool_spec.rb +12 -17
  533. data/spec/unit/{util/http_proxy_spec.rb → http/proxy_spec.rb} +2 -69
  534. data/spec/unit/http/resolver_spec.rb +13 -13
  535. data/spec/unit/http/service/compiler_spec.rb +0 -193
  536. data/spec/unit/http/service/file_server_spec.rb +3 -3
  537. data/spec/unit/http/service/puppetserver_spec.rb +34 -4
  538. data/spec/unit/http/service_spec.rb +0 -1
  539. data/spec/unit/http/session_spec.rb +16 -14
  540. data/spec/unit/{network/http → http}/site_spec.rb +3 -3
  541. data/spec/unit/indirector/catalog/compiler_spec.rb +10 -101
  542. data/spec/unit/indirector/catalog/rest_spec.rb +0 -8
  543. data/spec/unit/indirector/face_spec.rb +1 -0
  544. data/spec/unit/indirector/facts/facter_spec.rb +3 -0
  545. data/spec/unit/indirector/file_bucket_file/file_spec.rb +5 -3
  546. data/spec/unit/indirector/file_bucket_file/selector_spec.rb +8 -26
  547. data/spec/unit/indirector/file_content/rest_spec.rb +0 -4
  548. data/spec/unit/indirector/file_metadata/rest_spec.rb +0 -4
  549. data/spec/unit/indirector/file_server_spec.rb +1 -15
  550. data/spec/unit/indirector/indirection_spec.rb +15 -18
  551. data/spec/unit/indirector/report/rest_spec.rb +2 -17
  552. data/spec/unit/indirector/request_spec.rb +0 -264
  553. data/spec/unit/indirector/resource/ral_spec.rb +75 -40
  554. data/spec/unit/indirector/rest_spec.rb +98 -752
  555. data/spec/unit/indirector/store_configs_spec.rb +7 -0
  556. data/spec/unit/indirector_spec.rb +2 -2
  557. data/spec/unit/interface/action_spec.rb +9 -0
  558. data/spec/unit/module_spec.rb +1 -15
  559. data/spec/unit/module_tool/applications/installer_spec.rb +0 -105
  560. data/spec/unit/network/authconfig_spec.rb +2 -129
  561. data/spec/unit/network/authorization_spec.rb +2 -55
  562. data/spec/unit/network/formats_spec.rb +4 -51
  563. data/spec/unit/network/http/api/indirected_routes_spec.rb +5 -92
  564. data/spec/unit/network/http/api/master/v3_spec.rb +28 -7
  565. data/spec/unit/network/http/api_spec.rb +10 -0
  566. data/spec/unit/network/http/connection_spec.rb +19 -41
  567. data/spec/unit/network/http/handler_spec.rb +0 -1
  568. data/spec/unit/network/http_pool_spec.rb +0 -4
  569. data/spec/unit/node/environment_spec.rb +33 -21
  570. data/spec/unit/node_spec.rb +2 -60
  571. data/spec/unit/parser/compiler_spec.rb +19 -3
  572. data/spec/unit/parser/functions/create_resources_spec.rb +2 -20
  573. data/spec/unit/parser/functions/fqdn_rand_spec.rb +1 -15
  574. data/spec/unit/parser/resource_spec.rb +8 -14
  575. data/spec/unit/parser/templatewrapper_spec.rb +5 -16
  576. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +4 -7
  577. data/spec/unit/pops/loaders/loaders_spec.rb +6 -21
  578. data/spec/unit/pops/parser/parse_application_spec.rb +4 -22
  579. data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +0 -1
  580. data/spec/unit/pops/parser/parse_capabilities_spec.rb +8 -21
  581. data/spec/unit/pops/parser/parse_containers_spec.rb +13 -2
  582. data/spec/unit/pops/parser/parse_site_spec.rb +20 -24
  583. data/spec/unit/pops/resource/resource_type_impl_spec.rb +0 -71
  584. data/spec/unit/pops/serialization/to_from_hr_spec.rb +1 -1
  585. data/spec/unit/pops/serialization/to_stringified_spec.rb +0 -5
  586. data/spec/unit/pops/types/p_sem_ver_type_spec.rb +0 -18
  587. data/spec/unit/pops/types/p_sensitive_type_spec.rb +0 -18
  588. data/spec/unit/pops/types/type_calculator_spec.rb +6 -12
  589. data/spec/unit/pops/types/type_factory_spec.rb +1 -1
  590. data/spec/unit/pops/validator/validator_spec.rb +61 -51
  591. data/spec/unit/pops/visitor_spec.rb +1 -1
  592. data/spec/unit/property_spec.rb +0 -1
  593. data/spec/unit/provider/group/groupadd_spec.rb +2 -5
  594. data/spec/unit/provider/nameservice_spec.rb +64 -122
  595. data/spec/unit/provider/package/apt_spec.rb +23 -28
  596. data/spec/unit/provider/package/aptitude_spec.rb +1 -1
  597. data/spec/unit/provider/package/base_spec.rb +5 -6
  598. data/spec/unit/provider/package/dnfmodule_spec.rb +1 -10
  599. data/spec/unit/provider/package/dpkg_spec.rb +0 -48
  600. data/spec/unit/provider/package/gem_spec.rb +33 -1
  601. data/spec/unit/provider/package/nim_spec.rb +0 -42
  602. data/spec/unit/provider/package/pacman_spec.rb +12 -18
  603. data/spec/unit/provider/package/pip2_spec.rb +1 -1
  604. data/spec/unit/provider/package/pip3_spec.rb +1 -1
  605. data/spec/unit/provider/package/pip_spec.rb +12 -44
  606. data/spec/unit/provider/package/pkg_spec.rb +4 -29
  607. data/spec/unit/provider/package/pkgdmg_spec.rb +4 -0
  608. data/spec/unit/provider/package/puppet_gem_spec.rb +4 -3
  609. data/spec/unit/provider/package/puppetserver_gem_spec.rb +3 -3
  610. data/spec/unit/provider/package/windows/exe_package_spec.rb +0 -17
  611. data/spec/unit/provider/parsedfile_spec.rb +0 -10
  612. data/spec/unit/provider/service/gentoo_spec.rb +5 -6
  613. data/spec/unit/provider/service/init_spec.rb +9 -16
  614. data/spec/unit/provider/service/launchd_spec.rb +0 -11
  615. data/spec/unit/provider/service/openwrt_spec.rb +29 -23
  616. data/spec/unit/provider/service/redhat_spec.rb +2 -3
  617. data/spec/unit/provider/service/smf_spec.rb +401 -165
  618. data/spec/unit/provider/service/systemd_spec.rb +9 -54
  619. data/spec/unit/provider/service/windows_spec.rb +0 -203
  620. data/spec/unit/provider/user/aix_spec.rb +0 -105
  621. data/spec/unit/provider/user/directoryservice_spec.rb +36 -68
  622. data/spec/unit/provider/user/hpux_spec.rb +1 -1
  623. data/spec/unit/provider/user/pw_spec.rb +0 -2
  624. data/spec/unit/provider/user/useradd_spec.rb +5 -114
  625. data/spec/unit/provider_spec.rb +12 -22
  626. data/spec/unit/puppet_spec.rb +4 -12
  627. data/spec/unit/resource/catalog_spec.rb +2 -15
  628. data/spec/unit/resource/type_collection_spec.rb +2 -22
  629. data/spec/unit/resource/type_spec.rb +1 -1
  630. data/spec/unit/resource_spec.rb +12 -125
  631. data/spec/unit/settings/http_extra_headers_spec.rb +2 -4
  632. data/spec/unit/settings/integer_setting_spec.rb +42 -0
  633. data/spec/unit/settings/port_setting_spec.rb +31 -0
  634. data/spec/unit/settings/priority_setting_spec.rb +4 -4
  635. data/spec/unit/settings_spec.rb +79 -110
  636. data/spec/unit/ssl/base_spec.rb +37 -3
  637. data/spec/unit/ssl/certificate_request_spec.rb +21 -45
  638. data/spec/unit/ssl/certificate_spec.rb +2 -11
  639. data/spec/unit/ssl/ssl_provider_spec.rb +3 -80
  640. data/spec/unit/ssl/state_machine_spec.rb +5 -21
  641. data/spec/unit/ssl/verifier_spec.rb +0 -21
  642. data/spec/unit/transaction/additional_resource_generator_spec.rb +9 -3
  643. data/spec/unit/transaction/event_manager_spec.rb +11 -14
  644. data/spec/unit/transaction/persistence_spec.rb +0 -51
  645. data/spec/unit/transaction/report_spec.rb +0 -2
  646. data/spec/unit/transaction/resource_harness_spec.rb +2 -2
  647. data/spec/unit/transaction_spec.rb +55 -96
  648. data/spec/unit/type/exec_spec.rb +29 -76
  649. data/spec/unit/type/file/checksum_spec.rb +6 -6
  650. data/spec/unit/type/file/content_spec.rb +2 -1
  651. data/spec/unit/type/file/ensure_spec.rb +1 -1
  652. data/spec/unit/type/file/mode_spec.rb +1 -1
  653. data/spec/unit/type/file/selinux_spec.rb +5 -3
  654. data/spec/unit/type/file/source_spec.rb +4 -5
  655. data/spec/unit/type/file_spec.rb +18 -6
  656. data/spec/unit/type/group_spec.rb +6 -13
  657. data/spec/unit/type/package_spec.rb +1 -1
  658. data/spec/unit/type/resources_spec.rb +7 -7
  659. data/spec/unit/type/service_spec.rb +189 -87
  660. data/spec/unit/type/tidy_spec.rb +8 -24
  661. data/spec/unit/type_spec.rb +24 -4
  662. data/spec/unit/util/at_fork_spec.rb +2 -2
  663. data/spec/unit/util/autoload_spec.rb +1 -5
  664. data/spec/unit/util/backups_spec.rb +2 -3
  665. data/spec/unit/util/execution_spec.rb +11 -44
  666. data/spec/unit/util/inifile_spec.rb +14 -6
  667. data/spec/unit/util/log_spec.rb +7 -8
  668. data/spec/unit/util/logging_spec.rb +3 -5
  669. data/spec/unit/util/monkey_patches_spec.rb +0 -6
  670. data/spec/unit/util/posix_spec.rb +15 -363
  671. data/spec/unit/util/run_mode_spec.rb +21 -121
  672. data/spec/unit/util/selinux_spec.rb +68 -163
  673. data/spec/unit/util/storage_spec.rb +1 -3
  674. data/spec/unit/util/suidmanager_spec.rb +41 -44
  675. data/spec/unit/util/windows/sid_spec.rb +0 -41
  676. data/spec/unit/util/windows/string_spec.rb +1 -3
  677. data/spec/unit/util/yaml_spec.rb +13 -92
  678. data/spec/unit/util_spec.rb +6 -31
  679. data/tasks/generate_cert_fixtures.rake +7 -17
  680. data/tasks/parallel.rake +3 -3
  681. metadata +138 -239
  682. data/conf/auth.conf +0 -150
  683. data/ext/README.md +0 -13
  684. data/lib/puppet/application/cert.rb +0 -76
  685. data/lib/puppet/application/key.rb +0 -4
  686. data/lib/puppet/application/man.rb +0 -4
  687. data/lib/puppet/application/status.rb +0 -4
  688. data/lib/puppet/face/key.rb +0 -16
  689. data/lib/puppet/face/man.rb +0 -145
  690. data/lib/puppet/face/module/build.rb +0 -14
  691. data/lib/puppet/face/module/generate.rb +0 -14
  692. data/lib/puppet/face/module/search.rb +0 -103
  693. data/lib/puppet/face/status.rb +0 -51
  694. data/lib/puppet/facter_impl.rb +0 -96
  695. data/lib/puppet/ffi/posix/constants.rb +0 -14
  696. data/lib/puppet/ffi/posix/functions.rb +0 -24
  697. data/lib/puppet/ffi/posix.rb +0 -10
  698. data/lib/puppet/file_serving/mount/scripts.rb +0 -24
  699. data/lib/puppet/indirector/certificate/file.rb +0 -9
  700. data/lib/puppet/indirector/certificate/rest.rb +0 -18
  701. data/lib/puppet/indirector/certificate_request/file.rb +0 -9
  702. data/lib/puppet/indirector/certificate_request/memory.rb +0 -7
  703. data/lib/puppet/indirector/certificate_request/rest.rb +0 -11
  704. data/lib/puppet/indirector/file_content/http.rb +0 -22
  705. data/lib/puppet/indirector/key/file.rb +0 -46
  706. data/lib/puppet/indirector/key/memory.rb +0 -7
  707. data/lib/puppet/indirector/ssl_file.rb +0 -162
  708. data/lib/puppet/indirector/status/local.rb +0 -12
  709. data/lib/puppet/indirector/status/rest.rb +0 -27
  710. data/lib/puppet/indirector/status.rb +0 -3
  711. data/lib/puppet/module_tool/applications/searcher.rb +0 -29
  712. data/lib/puppet/network/auth_config_parser.rb +0 -90
  713. data/lib/puppet/network/authstore.rb +0 -283
  714. data/lib/puppet/network/http/api/master/v3/authorization.rb +0 -18
  715. data/lib/puppet/network/http/api/master/v3/environment.rb +0 -88
  716. data/lib/puppet/network/http/base_pool.rb +0 -36
  717. data/lib/puppet/network/http/compression.rb +0 -127
  718. data/lib/puppet/network/http/connection_adapter.rb +0 -184
  719. data/lib/puppet/network/http/nocache_pool.rb +0 -28
  720. data/lib/puppet/network/rest_controller.rb +0 -2
  721. data/lib/puppet/network/rights.rb +0 -210
  722. data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +0 -66
  723. data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +0 -22
  724. data/lib/puppet/parser/environment_compiler.rb +0 -202
  725. data/lib/puppet/pops/types/enumeration.rb +0 -16
  726. data/lib/puppet/resource/capability_finder.rb +0 -154
  727. data/lib/puppet/rest/errors.rb +0 -15
  728. data/lib/puppet/rest/response.rb +0 -35
  729. data/lib/puppet/rest/route.rb +0 -85
  730. data/lib/puppet/rest/routes.rb +0 -135
  731. data/lib/puppet/settings/alias_setting.rb +0 -37
  732. data/lib/puppet/ssl/host.rb +0 -505
  733. data/lib/puppet/ssl/key.rb +0 -61
  734. data/lib/puppet/ssl/validator/default_validator.rb +0 -209
  735. data/lib/puppet/ssl/validator/no_validator.rb +0 -22
  736. data/lib/puppet/ssl/validator.rb +0 -61
  737. data/lib/puppet/ssl/verifier_adapter.rb +0 -58
  738. data/lib/puppet/status.rb +0 -40
  739. data/lib/puppet/util/connection.rb +0 -88
  740. data/lib/puppet/util/fact_dif.rb +0 -81
  741. data/lib/puppet/util/ssl.rb +0 -83
  742. data/lib/puppet/util/windows/api_types.rb +0 -309
  743. data/lib/puppet/util/windows/monkey_patches/dir.rb +0 -40
  744. data/lib/puppet/vendor/load_pathspec.rb +0 -1
  745. data/lib/puppet/vendor/pathspec/CHANGELOG.md +0 -2
  746. data/lib/puppet/vendor/pathspec/LICENSE +0 -201
  747. data/lib/puppet/vendor/pathspec/PUPPET_README.md +0 -6
  748. data/lib/puppet/vendor/pathspec/README.md +0 -53
  749. data/lib/puppet/vendor/pathspec/lib/pathspec/gitignorespec.rb +0 -275
  750. data/lib/puppet/vendor/pathspec/lib/pathspec/regexspec.rb +0 -17
  751. data/lib/puppet/vendor/pathspec/lib/pathspec/spec.rb +0 -14
  752. data/lib/puppet/vendor/pathspec/lib/pathspec.rb +0 -122
  753. data/man/man8/puppet-key.8 +0 -126
  754. data/man/man8/puppet-man.8 +0 -76
  755. data/man/man8/puppet-status.8 +0 -108
  756. data/spec/fixtures/integration/application/agent/cached_deferred_catalog.json +0 -92
  757. data/spec/fixtures/integration/application/agent/lib/facter/agent_spec_role.rb +0 -3
  758. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/Gemfile +0 -4
  759. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/Rakefile +0 -3
  760. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/lib/puppet/functions/l10n.rb +0 -8
  761. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/locales/config.yaml +0 -25
  762. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/locales/ja/puppet-l10n.po +0 -19
  763. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/locales/puppet-l10n.pot +0 -20
  764. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/metadata.json +0 -8
  765. data/spec/fixtures/ssl/oid-key.pem +0 -117
  766. data/spec/fixtures/ssl/oid.pem +0 -69
  767. data/spec/fixtures/ssl/trusted_oid_mapping.yaml +0 -5
  768. data/spec/fixtures/unit/provider/service/systemd/list_unit_files_services_vendor_preset +0 -9
  769. data/spec/integration/application/resource_spec.rb +0 -68
  770. data/spec/integration/application/ssl_spec.rb +0 -20
  771. data/spec/integration/l10n/compiler_spec.rb +0 -37
  772. data/spec/integration/network/authconfig_spec.rb +0 -256
  773. data/spec/integration/util/windows/monkey_patches/dir_spec.rb +0 -11
  774. data/spec/shared_contexts/l10n.rb +0 -32
  775. data/spec/unit/application/man_spec.rb +0 -52
  776. data/spec/unit/capability_spec.rb +0 -414
  777. data/spec/unit/concurrent/thread_local_singleton_spec.rb +0 -39
  778. data/spec/unit/face/key_spec.rb +0 -9
  779. data/spec/unit/face/module/search_spec.rb +0 -231
  780. data/spec/unit/face/status_spec.rb +0 -9
  781. data/spec/unit/facter_impl_spec.rb +0 -31
  782. data/spec/unit/file_serving/mount/scripts_spec.rb +0 -69
  783. data/spec/unit/indirector/certificate/file_spec.rb +0 -14
  784. data/spec/unit/indirector/certificate/rest_spec.rb +0 -61
  785. data/spec/unit/indirector/certificate_request/file_spec.rb +0 -14
  786. data/spec/unit/indirector/certificate_request/rest_spec.rb +0 -25
  787. data/spec/unit/indirector/key/file_spec.rb +0 -78
  788. data/spec/unit/indirector/ssl_file_spec.rb +0 -305
  789. data/spec/unit/indirector/status/local_spec.rb +0 -10
  790. data/spec/unit/indirector/status/rest_spec.rb +0 -50
  791. data/spec/unit/module_tool/applications/searcher_spec.rb +0 -38
  792. data/spec/unit/network/auth_config_parser_spec.rb +0 -115
  793. data/spec/unit/network/authstore_spec.rb +0 -407
  794. data/spec/unit/network/http/api/master/v3/authorization_spec.rb +0 -57
  795. data/spec/unit/network/http/api/master/v3/environment_spec.rb +0 -185
  796. data/spec/unit/network/http/compression_spec.rb +0 -240
  797. data/spec/unit/network/http/nocache_pool_spec.rb +0 -64
  798. data/spec/unit/network/http_spec.rb +0 -9
  799. data/spec/unit/network/rights_spec.rb +0 -439
  800. data/spec/unit/parser/environment_compiler_spec.rb +0 -730
  801. data/spec/unit/pops/evaluator/deferred_resolver_spec.rb +0 -20
  802. data/spec/unit/pops/types/enumeration_spec.rb +0 -51
  803. data/spec/unit/resource/capability_finder_spec.rb +0 -148
  804. data/spec/unit/rest/route_spec.rb +0 -132
  805. data/spec/unit/ssl/host_spec.rb +0 -645
  806. data/spec/unit/ssl/key_spec.rb +0 -173
  807. data/spec/unit/ssl/validator_spec.rb +0 -278
  808. data/spec/unit/status_spec.rb +0 -45
  809. data/spec/unit/util/json_spec.rb +0 -126
  810. data/spec/unit/util/ssl_spec.rb +0 -91
  811. data/spec/unit/util/windows_spec.rb +0 -23
@@ -1,803 +1,149 @@
1
1
  require 'spec_helper'
2
- require 'puppet/util/json'
3
- require 'puppet/indirector'
4
- require 'puppet/indirector/errors'
5
2
  require 'puppet/indirector/rest'
6
- require 'puppet/util/psych_support'
7
3
 
8
- HTTP_ERROR_CODES = [300, 400, 500]
9
-
10
- # Just one from each category since the code makes no real distinctions
11
- shared_examples_for "a REST terminus method" do |terminus_method|
12
-
13
- describe "when handling the response" do
14
- let(:response) do
15
- mock_response(200, 'OK')
16
- end
17
-
18
- it "falls back to pson for future requests" do
19
- allow(response).to receive(:[]).with(Puppet::Network::HTTP::HEADER_PUPPET_VERSION).and_return("4.10.1")
20
- terminus.send(terminus_method, request)
21
-
22
- expect(Puppet[:preferred_serialization_format]).to eq("pson")
23
- end
24
-
25
- it "doesn't change the serialization format if the X-Puppet-Version header is missing" do
26
- allow(response).to receive(:[]).with(Puppet::Network::HTTP::HEADER_PUPPET_VERSION).and_return(nil)
27
-
28
- terminus.send(terminus_method, request)
29
-
30
- expect(Puppet[:preferred_serialization_format]).to eq("json")
31
- end
32
-
33
- it "doesn't change the serialization format if the server major version is 5" do
34
- allow(response).to receive(:[]).with(Puppet::Network::HTTP::HEADER_PUPPET_VERSION).and_return("5.0.3")
35
-
36
- terminus.send(terminus_method, request)
37
-
38
- expect(Puppet[:preferred_serialization_format]).to eq("json")
39
- end
40
-
41
- it "doesn't change the serialization format if the current format is already pson" do
42
- allow(response).to receive(:[]).with(Puppet::Network::HTTP::HEADER_PUPPET_VERSION).and_return("4.10.1")
43
- Puppet[:preferred_serialization_format] = "pson"
44
- terminus.send(terminus_method, request)
45
-
46
- expect(Puppet[:preferred_serialization_format]).to eq("pson")
47
- end
48
-
49
- it "logs a deprecation warning" do
50
- terminus.send(terminus_method, request)
51
-
52
- expect(@logs).to include(an_object_having_attributes(level: :warning, message: /Puppet::Indirector::Rest##{terminus_method} is deprecated. Use Puppet::HTTP::Client instead./))
53
- end
54
-
55
- it "omits the warning when deprecations are disabled" do
56
- Puppet[:disable_warnings] = 'deprecations'
57
- terminus.send(terminus_method, request)
58
-
59
- expect(@logs).to eq([])
60
- end
61
- end
62
-
63
- HTTP_ERROR_CODES.each do |code|
64
- describe "when the response code is #{code}" do
65
- let(:message) { 'error messaged!!!' }
66
- let(:body) do
67
- Puppet::Util::Json.dump({
68
- :issue_kind => 'server-error',
69
- :message => message
70
- })
71
- end
72
- let(:response) { mock_response(code, body, 'application/json') }
73
-
74
- describe "when the response is plain text" do
75
- let(:response) { mock_response(code, message) }
76
-
77
- it "raises an http error with the body of the response when plain text" do
78
-
79
- expect {
80
- terminus.send(terminus_method, request)
81
- }.to raise_error(Net::HTTPError, "Error #{code} on SERVER: #{message}")
82
- end
83
- end
84
-
85
- it "raises an http error with the body's message field when json" do
86
- expect {
87
- terminus.send(terminus_method, request)
88
- }.to raise_error(Net::HTTPError, "Error #{code} on SERVER: #{message}")
89
- end
90
-
91
- it "does not attempt to deserialize the response into a model" do
92
- expect(model).not_to receive(:convert_from)
93
-
94
- expect {
95
- terminus.send(terminus_method, request)
96
- }.to raise_error(Net::HTTPError)
97
- end
98
-
99
- # I'm not sure what this means or if it's used
100
- it "if the body is empty raises an http error with the response header" do
101
- allow(response).to receive(:body).and_return("")
102
- allow(response).to receive(:message).and_return("fhqwhgads")
103
-
104
- expect {
105
- terminus.send(terminus_method, request)
106
- }.to raise_error(Net::HTTPError, "Error #{code} on SERVER: #{response.message}")
107
- end
108
-
109
- describe "and the body is compressed" do
110
- it "raises an http error with the decompressed body of the response" do
111
- compressed_body = Zlib::Deflate.deflate(body)
4
+ class Puppet::TestModel
5
+ extend Puppet::Indirector
6
+ indirects :test_model
7
+ end
112
8
 
113
- compressed_response = mock_response(code, compressed_body, 'application/json', 'deflate')
114
- expect(connection).to receive(http_method).and_return(compressed_response)
9
+ # The subclass must not be all caps even though the superclass is
10
+ class Puppet::TestModel::Rest < Puppet::Indirector::REST
11
+ end
115
12
 
116
- expect {
117
- terminus.send(terminus_method, request)
118
- }.to raise_error(Net::HTTPError, "Error #{code} on SERVER: #{message}")
119
- end
120
- end
121
- end
122
- end
13
+ class Puppet::FailingTestModel
14
+ extend Puppet::Indirector
15
+ indirects :failing_test_model
123
16
  end
124
17
 
125
- shared_examples_for "a deserializing terminus method" do |terminus_method|
126
- describe "when the response has no content-type" do
127
- let(:response) { mock_response(200, "body", nil, nil) }
128
- it "raises an error" do
129
- expect {
130
- terminus.send(terminus_method, request)
131
- }.to raise_error(RuntimeError, "No content type in http response; cannot parse")
132
- end
133
- end
18
+ # The subclass must not be all caps even though the superclass is
19
+ class Puppet::FailingTestModel::Rest < Puppet::Indirector::REST
20
+ def find(request)
21
+ http = Puppet.runtime[:http]
22
+ response = http.get(URI('http://puppet.example.com:8140/puppet/v3/failing_test_model'))
134
23
 
135
- it "doesn't catch errors in deserialization" do
136
- expect(model).to receive(:convert_from).and_raise(Puppet::Error, "Whoa there")
24
+ if response.code == 404
25
+ return nil unless request.options[:fail_on_404]
137
26
 
138
- expect { terminus.send(terminus_method, request) }.to raise_error(Puppet::Error, "Whoa there")
27
+ _, body = parse_response(response)
28
+ msg = _("Find %{uri} resulted in 404 with the message: %{body}") % { uri: elide(response.url.path, 100), body: body }
29
+ raise Puppet::Error, msg
30
+ else
31
+ raise convert_to_http_error(response)
32
+ end
139
33
  end
140
34
  end
141
35
 
142
36
  describe Puppet::Indirector::REST do
143
- before :all do
144
- class Puppet::TestModel
145
- include Puppet::Util::PsychSupport
146
- extend Puppet::Indirector
147
- indirects :test_model
148
- attr_accessor :name, :data
149
- def initialize(name = "name", data = '')
150
- @name = name
151
- @data = data
152
- end
153
-
154
- def self.convert_from(format, string)
155
- new('', string)
156
- end
157
-
158
- def self.convert_from_multiple(format, string)
159
- string.split(',').collect { |s| convert_from(format, s) }
160
- end
161
-
162
- def to_data_hash
163
- { 'name' => @name, 'data' => @data }
164
- end
165
-
166
- def ==(other)
167
- other.is_a? Puppet::TestModel and other.name == name and other.data == data
168
- end
169
- end
170
-
171
- # The subclass must not be all caps even though the superclass is
172
- class Puppet::TestModel::Rest < Puppet::Indirector::REST
173
- end
174
-
37
+ before :each do
175
38
  Puppet::TestModel.indirection.terminus_class = :rest
176
39
  end
177
40
 
178
- after :all do
179
- Puppet::TestModel.indirection.delete
180
- # Remove the class, unlinking it from the rest of the system.
181
- Puppet.send(:remove_const, :TestModel)
182
- end
183
-
184
- let(:terminus_class) { Puppet::TestModel::Rest }
185
- let(:terminus) { Puppet::TestModel.indirection.terminus(:rest) }
186
- let(:indirection) { Puppet::TestModel.indirection }
187
- let(:model) { Puppet::TestModel }
188
- let(:url_prefix) { "#{Puppet::Network::HTTP::MASTER_URL_PREFIX}/v3"}
189
-
190
- around(:each) do |example|
191
- Puppet.override(:current_environment => Puppet::Node::Environment.create(:production, [])) do
192
- example.run
193
- end
194
- end
195
-
196
- def mock_response(code, body, content_type='text/plain', encoding=nil)
197
- obj = double('http 200 ok', :code => code.to_s, :body => body)
198
- allow(obj).to receive(:[]).with('content-type').and_return(content_type)
199
- allow(obj).to receive(:[]).with('content-encoding').and_return(encoding)
200
- allow(obj).to receive(:[]).with(Puppet::Network::HTTP::HEADER_PUPPET_VERSION).and_return(Puppet.version)
201
- obj
202
- end
203
-
204
- def find_request(key, options={})
205
- Puppet::Indirector::Request.new(:test_model, :find, key, nil, options)
206
- end
207
-
208
- def head_request(key, options={})
209
- Puppet::Indirector::Request.new(:test_model, :head, key, nil, options)
210
- end
211
-
212
- def search_request(key, options={})
213
- Puppet::Indirector::Request.new(:test_model, :search, key, nil, options)
214
- end
215
-
216
- def delete_request(key, options={})
217
- Puppet::Indirector::Request.new(:test_model, :destroy, key, nil, options)
218
- end
219
-
220
- def save_request(key, instance, options={})
221
- Puppet::Indirector::Request.new(:test_model, :save, key, instance, options)
222
- end
223
-
224
- it "should have a method for specifying what setting a subclass should use to retrieve its server" do
225
- expect(terminus_class).to respond_to(:use_server_setting)
41
+ it "raises when find is called" do
42
+ expect {
43
+ Puppet::TestModel.indirection.find('foo')
44
+ }.to raise_error(NotImplementedError)
226
45
  end
227
46
 
228
- it "should use any specified setting to pick the server" do
229
- expect(terminus_class).to receive(:server_setting).and_return(:ca_server)
230
- Puppet[:ca_server] = "myserver"
231
- expect(terminus_class.server).to eq("myserver")
232
- end
233
-
234
- it "should default to :server for the server setting" do
235
- expect(terminus_class).to receive(:server_setting).and_return(nil)
236
- Puppet[:server] = "myserver"
237
- expect(terminus_class.server).to eq("myserver")
238
- end
239
-
240
- it "should have a method for specifying what setting a subclass should use to retrieve its port" do
241
- expect(terminus_class).to respond_to(:use_port_setting)
242
- end
243
-
244
- it "should use any specified setting to pick the port" do
245
- expect(terminus_class).to receive(:port_setting).and_return(:ca_port)
246
- Puppet[:ca_port] = "321"
247
- expect(terminus_class.port).to eq(321)
248
- end
249
-
250
- it "should default to :port for the port setting" do
251
- expect(terminus_class).to receive(:port_setting).and_return(nil)
252
- Puppet[:serverport] = "543"
253
- expect(terminus_class.port).to eq(543)
254
- end
255
-
256
- it "should use a failover-selected server if set" do
257
- expect(terminus_class).to receive(:server_setting).and_return(nil)
258
- Puppet.override(:server => "myserver") do
259
- expect(terminus_class.server).to eq("myserver")
260
- end
261
- end
262
-
263
- it "should use a failover-selected port if set" do
264
- expect(terminus_class).to receive(:port_setting).and_return(nil)
265
- Puppet.override(:serverport => 321) do
266
- expect(terminus_class.port).to eq(321)
267
- end
268
- end
269
-
270
- it "should use server_list for server when available" do
271
- expect(terminus_class).to receive(:server_setting).and_return(nil)
272
- Puppet[:server_list] = [["foo", "123"]]
273
- expect(terminus_class.server).to eq("foo")
274
- end
275
-
276
- it "should prefer failover-selected server from server list" do
277
- expect(terminus_class).to receive(:server_setting).and_return(nil)
278
- Puppet[:server_list] = [["foo", "123"],["bar", "321"]]
279
- Puppet.override(:server => "bar") do
280
- expect(terminus_class.server).to eq("bar")
281
- end
282
- end
283
-
284
- it "should use server_list for port when available" do
285
- expect(terminus_class).to receive(:port_setting).and_return(nil)
286
- Puppet[:server_list] = [["foo", "123"]]
287
- expect(terminus_class.port).to eq(123)
288
- end
289
-
290
- it "should prefer failover-selected port from server list" do
291
- expect(terminus_class).to receive(:port_setting).and_return(nil)
292
- Puppet[:server_list] = [["foo", "123"],["bar", "321"]]
293
- Puppet.override(:serverport => "321") do
294
- expect(terminus_class.port).to eq(321)
295
- end
296
- end
297
-
298
- it "should use an explicitly specified more-speciic server when failover is active" do
299
- expect(terminus_class).to receive(:server_setting).and_return(:ca_server)
300
- Puppet[:ca_server] = "myserver"
301
- Puppet.override(:server => "anotherserver") do
302
- expect(terminus_class.server).to eq("myserver")
303
- end
304
- end
305
-
306
- it "should use an explicitly specified more-specific port when failover is active" do
307
- expect(terminus_class).to receive(:port_setting).and_return(:ca_port)
308
- Puppet[:ca_port] = 321
309
- Puppet.override(:serverport => 543) do
310
- expect(terminus_class.port).to eq(321)
311
- end
312
- end
313
-
314
- it "should use a default port when a more-specific server is set" do
315
- expect(terminus_class).to receive(:server_setting).and_return(:ca_server)
316
- expect(terminus_class).to receive(:port_setting).and_return(:ca_port)
317
- Puppet[:ca_server] = "myserver"
318
- Puppet.override(:server => "anotherserver", :port => 666) do
319
- expect(terminus_class.port).to eq(8140)
320
- end
321
- end
322
-
323
- it 'should default to :puppet for the srv_service' do
324
- expect(Puppet::Indirector::REST.srv_service).to eq(:puppet)
325
- end
326
-
327
- it 'excludes yaml from the Accept header' do
328
- expect(model).to receive(:supported_formats).and_return([:json, :pson, :yaml, :binary])
329
-
330
- expect(terminus.headers['Accept']).to eq('application/json, text/pson, application/octet-stream')
331
- end
332
-
333
- it 'excludes b64_zlib_yaml from the Accept header' do
334
- expect(model).to receive(:supported_formats).and_return([:json, :pson, :b64_zlib_yaml])
335
-
336
- expect(terminus.headers['Accept']).to eq('application/json, text/pson')
337
- end
338
-
339
- it 'excludes dot from the Accept header' do
340
- expect(model).to receive(:supported_formats).and_return([:json, :dot])
341
-
342
- expect(terminus.headers['Accept']).to eq('application/json')
343
- end
344
-
345
- describe "when creating an HTTP client" do
346
- it "should use the class's server and port if the indirection request provides neither" do
347
- @request = double('request', :key => "foo", :server => nil, :port => nil)
348
- expect(terminus.class).to receive(:port).and_return(321)
349
- expect(terminus.class).to receive(:server).and_return("myserver")
350
- expect(Puppet::Network::HttpPool).to receive(:connection).with('myserver', 321, anything).and_return("myconn")
351
- expect(terminus.network(@request)).to eq("myconn")
352
- end
353
-
354
- it "should use the server from the indirection request if one is present" do
355
- @request = double('request', :key => "foo", :server => "myserver", :port => nil)
356
- allow(terminus.class).to receive(:port).and_return(321)
357
- expect(Puppet::Network::HttpPool).to receive(:connection).with('myserver', 321, anything).and_return("myconn")
358
- expect(terminus.network(@request)).to eq("myconn")
359
- end
360
-
361
- it "should use the port from the indirection request if one is present" do
362
- @request = double('request', :key => "foo", :server => nil, :port => 321)
363
- allow(terminus.class).to receive(:server).and_return("myserver")
364
- expect(Puppet::Network::HttpPool).to receive(:connection).with('myserver', 321, anything).and_return("myconn")
365
- expect(terminus.network(@request)).to eq("myconn")
366
- end
367
- end
368
-
369
- describe "#find" do
370
- let(:http_method) { :get }
371
- let(:response) { mock_response(200, 'body') }
372
- let(:connection) { double('mock http connection', :get => response, :verify_callback= => nil) }
373
- let(:request) { find_request('foo') }
374
-
375
- before :each do
376
- allow(terminus).to receive(:network).and_return(connection)
377
- end
378
-
379
- it_behaves_like 'a REST terminus method', :find
380
- it_behaves_like 'a deserializing terminus method', :find
381
-
382
- describe "with a long set of parameters" do
383
- it "calls post on the connection with the query params in the body" do
384
- params = {}
385
- 'aa'.upto('zz') do |s|
386
- params[s] = 'foo'
387
- end
388
-
389
- # The request special-cases this parameter, and it
390
- # won't be passed on to the server, so we remove it here
391
- # to avoid a failure.
392
- params.delete('ip')
393
-
394
- params["environment"] = "production"
395
-
396
- request = find_request('whoa', params)
397
-
398
- expect(connection).to receive(:post) do |_,req,_|
399
- expect(req.split("&").flatten).to match_array(params.map {|key,value| "#{key}=#{value}"})
400
-
401
- mock_response(200, 'body')
402
- end
403
-
404
- terminus.find(request)
405
- end
406
- end
407
-
408
- describe "with no parameters" do
409
- it "calls get on the connection" do
410
- request = find_request('foo bar')
411
-
412
- expect(connection).to receive(:get).with("#{url_prefix}/test_model/foo%20bar?environment=production&", anything).and_return(mock_response('200', 'response body'))
413
-
414
- expect(terminus.find(request)).to eq(model.new('foo bar', 'response body'))
415
- end
416
- end
417
-
418
- it "returns nil on 404" do
419
- response = mock_response('404', nil)
420
-
421
- expect(connection).to receive(:get).and_return(response)
422
-
423
- expect(terminus.find(request)).to eq(nil)
424
- end
425
-
426
- it 'raises no warning for a 404 (when not asked to do so)' do
427
- response = mock_response('404', 'this is the notfound you are looking for')
428
- expect(connection).to receive(:get).and_return(response)
429
- expect{terminus.find(request)}.to_not raise_error()
430
- end
431
-
432
- context 'when fail_on_404 is used in request' do
433
- it 'raises an error for a 404 when asked to do so' do
434
- request = find_request('foo', :fail_on_404 => true)
435
- response = mock_response('404', 'this is the notfound you are looking for')
436
- expect(connection).to receive(:get).and_return(response)
437
-
438
- expect do
439
- terminus.find(request)
440
- end.to raise_error(
441
- Puppet::Error,
442
- "Find #{url_prefix}/test_model/foo?environment=production&fail_on_404=true resulted in 404 with the message: this is the notfound you are looking for")
443
- end
444
-
445
- it 'truncates the URI when it is very long' do
446
- request = find_request('foo', :fail_on_404 => true, :long_param => ('A' * 100) + 'B')
447
- response = mock_response('404', 'this is the notfound you are looking for')
448
- expect(connection).to receive(:get).and_return(response)
449
-
450
- expect do
451
- terminus.find(request)
452
- end.to raise_error(
453
- Puppet::Error,
454
- /\/test_model\/foo.*\?environment=production&.*long_param=A+\.\.\..*resulted in 404 with the message/)
455
- end
456
-
457
- it 'does not truncate the URI when logging debug information' do
458
- Puppet.debug = true
459
- request = find_request('foo', :fail_on_404 => true, :long_param => ('A' * 100) + 'B')
460
- response = mock_response('404', 'this is the notfound you are looking for')
461
- expect(connection).to receive(:get).and_return(response)
462
-
463
- expect do
464
- terminus.find(request)
465
- end.to raise_error(
466
- Puppet::Error,
467
- /\/test_model\/foo.*\?environment=production&.*long_param=A+B.*resulted in 404 with the message/)
468
- end
469
- end
470
-
471
- it "asks the model to deserialize the response body and sets the name on the resulting object to the find key" do
472
- expect(connection).to receive(:get).and_return(response)
473
-
474
- expect(model).to receive(:convert_from).with(response['content-type'], response.body).and_return(
475
- model.new('overwritten', 'decoded body')
476
- )
477
-
478
- expect(terminus.find(request)).to eq(model.new('foo', 'decoded body'))
479
- end
480
-
481
- it "doesn't require the model to support name=" do
482
- class Puppet::TestModel2 < Puppet::TestModel
483
- undef_method :name=
484
- end
485
-
486
- expect(connection).to receive(:get).and_return(response)
487
- instance = Puppet::TestModel2.new('name', 'decoded body')
488
-
489
- expect(model).to receive(:convert_from).with(response['content-type'], response.body).and_return(instance)
490
-
491
- expect(terminus.find(request)).to eq(model.new('name', 'decoded body'))
492
- end
493
-
494
- it "provides an Accept header containing the list of supported mime types joined with commas" do
495
- expect(connection).to receive(:get).with(anything, hash_including("Accept" => "application/json, text/pson")).and_return(response)
496
-
497
- expect(terminus.model).to receive(:supported_formats).and_return([:json, :pson])
498
- terminus.find(request)
499
- end
500
-
501
- it "provides a version header with the current puppet version" do
502
- expect(connection).to receive(:get).with(anything, hash_including(Puppet::Network::HTTP::HEADER_PUPPET_VERSION => Puppet.version)).and_return(response)
503
-
504
- terminus.find(request)
505
- end
506
-
507
- it "adds an Accept-Encoding header" do
508
- expect(terminus).to receive(:add_accept_encoding).and_return({"accept-encoding" => "gzip"})
509
-
510
- expect(connection).to receive(:get).with(anything, hash_including("accept-encoding" => "gzip")).and_return(response)
511
-
512
- terminus.find(request)
513
- end
514
-
515
- it "uses only the mime-type from the content-type header when asking the model to deserialize" do
516
- response = mock_response('200', 'mydata', "text/plain; charset=utf-8")
517
- expect(connection).to receive(:get).and_return(response)
518
-
519
- expect(model).to receive(:convert_from).with("text/plain", "mydata").and_return("myobject")
520
-
521
- expect(terminus.find(request)).to eq("myobject")
522
- end
523
-
524
- it "decompresses the body before passing it to the model for deserialization" do
525
- uncompressed_body = "Why hello there"
526
- compressed_body = Zlib::Deflate.deflate(uncompressed_body)
527
-
528
- response = mock_response('200', compressed_body, 'text/plain', 'deflate')
529
- expect(connection).to receive(:get).and_return(response)
530
-
531
- expect(model).to receive(:convert_from).with("text/plain", uncompressed_body).and_return("myobject")
532
-
533
- expect(terminus.find(request)).to eq("myobject")
534
- end
47
+ it "raises when head is called" do
48
+ expect {
49
+ Puppet::TestModel.indirection.head('foo')
50
+ }.to raise_error(NotImplementedError)
535
51
  end
536
52
 
537
- describe "#head" do
538
- let(:http_method) { :head }
539
- let(:response) { mock_response(200, nil) }
540
- let(:connection) { double('mock http connection', :head => response, :verify_callback= => nil) }
541
- let(:request) { head_request('foo') }
542
-
543
- before :each do
544
- allow(terminus).to receive(:network).and_return(connection)
545
- end
546
-
547
- it_behaves_like 'a REST terminus method', :head
548
-
549
- it "returns true if there was a successful http response" do
550
- expect(connection).to receive(:head).and_return(mock_response('200', nil))
551
-
552
- expect(terminus.head(request)).to eq(true)
553
- end
554
-
555
- it "returns false on a 404 response" do
556
- expect(connection).to receive(:head).and_return(mock_response('404', nil))
557
-
558
- expect(terminus.head(request)).to eq(false)
559
- end
560
-
561
- it "provides a version header with the current puppet version" do
562
- expect(connection).to receive(:head).with(anything, hash_including(Puppet::Network::HTTP::HEADER_PUPPET_VERSION => Puppet.version)).and_return(response)
563
-
564
- terminus.head(request)
565
- end
53
+ it "raises when search is called" do
54
+ expect {
55
+ Puppet::TestModel.indirection.search('foo')
56
+ }.to raise_error(NotImplementedError)
566
57
  end
567
58
 
568
- describe "#search" do
569
- let(:http_method) { :get }
570
- let(:response) { mock_response(200, 'data1,data2,data3') }
571
- let(:connection) { double('mock http connection', :get => response, :verify_callback= => nil) }
572
- let(:request) { search_request('foo') }
573
-
574
- before :each do
575
- allow(terminus).to receive(:network).and_return(connection)
576
- end
577
-
578
- it_behaves_like 'a REST terminus method', :search
579
- it_behaves_like 'a deserializing terminus method', :search
580
-
581
- it "should call the GET http method on a network connection" do
582
- expect(connection).to receive(:get).with("#{url_prefix}/test_models/foo?environment=production&", hash_including('Accept' => anything)).and_return(mock_response(200, 'data3, data4'))
583
-
584
- terminus.search(request)
585
- end
586
-
587
- it "returns an empty list on 404" do
588
- response = mock_response('404', nil)
589
-
590
- expect(connection).to receive(:get).and_return(response)
591
-
592
- expect(terminus.search(request)).to eq([])
593
- end
594
-
595
- it "asks the model to deserialize the response body into multiple instances" do
596
- expect(terminus.search(request)).to eq([model.new('', 'data1'), model.new('', 'data2'), model.new('', 'data3')])
597
- end
598
-
599
- it "should provide an Accept header containing the list of supported formats joined with commas" do
600
- expect(connection).to receive(:get).with(anything, hash_including("Accept" => "application/json, text/pson")).and_return(mock_response(200, ''))
601
-
602
- expect(terminus.model).to receive(:supported_formats).and_return([:json, :pson])
603
- terminus.search(request)
604
- end
605
-
606
- it "provides a version header with the current puppet version" do
607
- expect(connection).to receive(:get).with(anything, hash_including(Puppet::Network::HTTP::HEADER_PUPPET_VERSION => Puppet.version)).and_return(mock_response(200, ''))
608
-
609
- terminus.search(request)
610
- end
611
-
612
- it "should return an empty array if serialization returns nil" do
613
- allow(model).to receive(:convert_from_multiple).and_return(nil)
614
-
615
- expect(terminus.search(request)).to eq([])
616
- end
59
+ it "raises when save is called" do
60
+ expect {
61
+ Puppet::TestModel.indirection.save(Puppet::TestModel.new, 'foo')
62
+ }.to raise_error(NotImplementedError)
617
63
  end
618
64
 
619
- describe "#destroy" do
620
- let(:http_method) { :delete }
621
- let(:response) { mock_response(200, 'body') }
622
- let(:connection) { double('mock http connection', :delete => response, :verify_callback= => nil) }
623
- let(:request) { delete_request('foo') }
624
-
625
- before :each do
626
- allow(terminus).to receive(:network).and_return(connection)
627
- end
628
-
629
- it_behaves_like 'a REST terminus method', :destroy
630
- it_behaves_like 'a deserializing terminus method', :destroy
631
-
632
- it "should call the DELETE http method on a network connection" do
633
- expect(connection).to receive(:delete).with("#{url_prefix}/test_model/foo?environment=production&", hash_including('Accept' => anything)).and_return(response)
634
-
635
- terminus.destroy(request)
636
- end
637
-
638
- it "should fail if any options are provided, since DELETE apparently does not support query options" do
639
- request = delete_request('foo', :one => "two", :three => "four")
640
-
641
- expect { terminus.destroy(request) }.to raise_error(ArgumentError)
642
- end
643
-
644
- it "should deserialize and return the http response" do
645
- expect(connection).to receive(:delete).and_return(response)
646
-
647
- expect(terminus.destroy(request)).to eq(model.new('', 'body'))
648
- end
649
-
650
- it "returns nil on 404" do
651
- response = mock_response('404', nil)
652
-
653
- expect(connection).to receive(:delete).and_return(response)
654
-
655
- expect(terminus.destroy(request)).to eq(nil)
656
- end
657
-
658
- it "should provide an Accept header containing the list of supported formats joined with commas" do
659
- expect(connection).to receive(:delete).with(anything, hash_including("Accept" => "application/json, text/pson")).and_return(response)
660
-
661
- expect(terminus.model).to receive(:supported_formats).and_return([:json, :pson])
662
- terminus.destroy(request)
663
- end
664
-
665
- it "provides a version header with the current puppet version" do
666
- expect(connection).to receive(:delete).with(anything, hash_including(Puppet::Network::HTTP::HEADER_PUPPET_VERSION => Puppet.version)).and_return(response)
667
-
668
- terminus.destroy(request)
669
- end
65
+ it "raises when destroy is called" do
66
+ expect {
67
+ Puppet::TestModel.indirection.destroy('foo')
68
+ }.to raise_error(NotImplementedError)
670
69
  end
671
70
 
672
- describe "#save" do
673
- let(:http_method) { :put }
674
- let(:response) { mock_response(200, 'body') }
675
- let(:connection) { double('mock http connection', :put => response, :verify_callback= => nil) }
676
- let(:instance) { model.new('the thing', 'some contents') }
677
- let(:request) { save_request(instance.name, instance) }
678
-
71
+ context 'when parsing the response error' do
679
72
  before :each do
680
- allow(terminus).to receive(:network).and_return(connection)
681
- end
682
-
683
- it_behaves_like 'a REST terminus method', :save
684
-
685
- it "should call the PUT http method on a network connection" do
686
- expect(connection).to receive(:put).with("#{url_prefix}/test_model/the%20thing?environment=production&", anything, hash_including("Content-Type")).and_return(response)
687
-
688
- terminus.save(request)
689
- end
690
-
691
- it "should fail if any options are provided, since PUT apparently does not support query options" do
692
- request = save_request(instance.name, instance, :one => "two", :three => "four")
693
-
694
- expect { terminus.save(request) }.to raise_error(ArgumentError)
695
- end
696
-
697
- it "should serialize the instance using the default format and pass the result as the body of the request" do
698
- expect(instance).to receive(:render).and_return("serial_instance")
699
- expect(connection).to receive(:put).with(anything, "serial_instance", anything).and_return(response)
700
-
701
- terminus.save(request)
702
- end
703
-
704
- it "returns nil on 404" do
705
- response = mock_response('404', nil)
706
-
707
- expect(connection).to receive(:put).and_return(response)
708
-
709
- expect(terminus.save(request)).to eq(nil)
710
- end
711
-
712
- it "returns nil" do
713
- expect(connection).to receive(:put).and_return(response)
714
-
715
- expect(terminus.save(request)).to be_nil
716
- end
717
-
718
- it "should provide an Accept header containing the list of supported formats joined with commas" do
719
- expect(connection).to receive(:put).with(anything, anything, hash_including("Accept" => "application/json, text/pson")).and_return(response)
720
-
721
- expect(instance).to receive(:render).and_return('')
722
- expect(model).to receive(:supported_formats).and_return([:json, :pson])
723
- expect(instance).to receive(:mime).and_return("supported")
724
-
725
- terminus.save(request)
73
+ Puppet::FailingTestModel.indirection.terminus_class = :rest
726
74
  end
727
75
 
728
- it "provides a version header with the current puppet version" do
729
- expect(connection).to receive(:put).with(anything, anything, hash_including(Puppet::Network::HTTP::HEADER_PUPPET_VERSION => Puppet.version)).and_return(response)
76
+ it 'returns nil if 404 is returned and fail_on_404 is omitted' do
77
+ stub_request(:get, 'http://puppet.example.com:8140/puppet/v3/failing_test_model').to_return(status: 404)
730
78
 
731
- terminus.save(request)
79
+ expect(Puppet::FailingTestModel.indirection.find('foo')).to be_nil
732
80
  end
733
81
 
734
- it "should provide a Content-Type header containing the mime-type of the sent object" do
735
- expect(instance).to receive(:mime).and_return("mime")
736
- expect(connection).to receive(:put).with(anything, anything, hash_including('Content-Type' => "mime")).and_return(response)
82
+ it 'raises if 404 is returned and fail_on_404 is true' do
83
+ stub_request(
84
+ :get, 'http://puppet.example.com:8140/puppet/v3/failing_test_model',
85
+ ).to_return(status: 404,
86
+ headers: { 'Content-Type' => 'text/plain' },
87
+ body: 'plaintext')
737
88
 
738
- terminus.save(request)
89
+ expect {
90
+ Puppet::FailingTestModel.indirection.find('foo', fail_on_404: true)
91
+ }.to raise_error(Puppet::Error, 'Find /puppet/v3/failing_test_model resulted in 404 with the message: plaintext')
739
92
  end
740
- end
741
93
 
742
- describe '#handle_response' do
743
- # There are multiple request types to choose from, this may not be the one I want for this situation
744
- let(:response) { mock_response(200, 'body') }
745
- let(:connection) { double('mock http connection', :put => response, :verify_callback= => nil) }
746
- let(:instance) { model.new('the thing', 'some contents') }
747
- let(:request) { save_request(instance.name, instance) }
94
+ it 'returns the HTTP reason if the response body is empty' do
95
+ stub_request(:get, 'http://puppet.example.com:8140/puppet/v3/failing_test_model').to_return(status: [500, 'Internal Server Error'])
748
96
 
749
- before :each do
750
- allow(terminus).to receive(:network).and_return(connection)
97
+ expect {
98
+ Puppet::FailingTestModel.indirection.find('foo')
99
+ }.to raise_error(Net::HTTPError, 'Error 500 on SERVER: Internal Server Error')
751
100
  end
752
101
 
753
- it 'adds server_agent_version to the context if not already set' do
754
- expect(Puppet).to receive(:push_context).with(:server_agent_version => Puppet.version)
755
- terminus.handle_response(request, response)
756
- end
102
+ it 'parses the response body as text' do
103
+ stub_request(
104
+ :get, 'http://puppet.example.com:8140/puppet/v3/failing_test_model'
105
+ ).to_return(status: [500, 'Internal Server Error'],
106
+ headers: { 'Content-Type' => 'text/plain' },
107
+ body: 'plaintext')
757
108
 
758
- it 'does not add server_agent_version to the context if it is already set' do
759
- Puppet.override(:server_agent_version => "5.3.4") do
760
- expect(Puppet).not_to receive(:push_context)
761
- terminus.handle_response(request, response)
762
- end
109
+ expect {
110
+ Puppet::FailingTestModel.indirection.find('foo')
111
+ }.to raise_error(Net::HTTPError, 'Error 500 on SERVER: plaintext')
763
112
  end
764
113
 
765
- it 'downgrades to pson and emits a warning' do
766
- allow(response).to receive(:[]).with(Puppet::Network::HTTP::HEADER_PUPPET_VERSION).and_return('4.2.8')
767
- Puppet[:preferred_serialization_format] = 'other'
114
+ it 'parses the response body as json and returns the "message"' do
115
+ stub_request(
116
+ :get, 'http://puppet.example.com:8140/puppet/v3/failing_test_model'
117
+ ).to_return(status: [500, 'Internal Server Error'],
118
+ headers: { 'Content-Type' => 'application/json' },
119
+ body: JSON.dump({'status' => false, 'message' => 'json error'}))
768
120
 
769
- expect(Puppet).to receive(:warning).with('Downgrading to PSON for future requests')
770
-
771
- terminus.handle_response(request, response)
772
-
773
- expect(Puppet[:preferred_serialization_format]).to eq('pson')
121
+ expect {
122
+ Puppet::FailingTestModel.indirection.find('foo')
123
+ }.to raise_error(Net::HTTPError, 'Error 500 on SERVER: json error')
774
124
  end
775
125
 
776
- it 'preserves the set serialization format' do
777
- Puppet[:preferred_serialization_format] = 'other'
778
-
779
- expect(Puppet[:preferred_serialization_format]).to eq('other')
126
+ it 'parses the response body as pson and returns the "message"' do
127
+ stub_request(
128
+ :get, 'http://puppet.example.com:8140/puppet/v3/failing_test_model'
129
+ ).to_return(status: [500, 'Internal Server Error'],
130
+ headers: { 'Content-Type' => 'application/pson' },
131
+ body: PSON.dump({'status' => false, 'message' => 'pson error'}))
780
132
 
781
- terminus.handle_response(request, response)
133
+ expect {
134
+ Puppet::FailingTestModel.indirection.find('foo')
135
+ }.to raise_error(Net::HTTPError, 'Error 500 on SERVER: pson error')
782
136
  end
783
- end
784
137
 
785
- context 'dealing with SRV settings' do
786
- [
787
- :destroy,
788
- :find,
789
- :head,
790
- :save,
791
- :search
792
- ].each do |method|
793
- it "##{method} passes the SRV service, and fall-back server & port to the request's do_request method" do
794
- request = Puppet::Indirector::Request.new(:indirection, method, 'key', nil)
795
- stub_response = mock_response('200', 'body')
138
+ it 'returns the response body if no content-type given' do
139
+ stub_request(
140
+ :get, 'http://puppet.example.com:8140/puppet/v3/failing_test_model'
141
+ ).to_return(status: [500, 'Internal Server Error'],
142
+ body: 'unknown text')
796
143
 
797
- expect(request).to receive(:do_request).with(terminus.class.srv_service, terminus.class.server, terminus.class.port).and_return(stub_response)
798
-
799
- terminus.send(method, request)
800
- end
144
+ expect {
145
+ Puppet::FailingTestModel.indirection.find('foo')
146
+ }.to raise_error(Net::HTTPError, 'Error 500 on SERVER: unknown text')
801
147
  end
802
148
  end
803
149
  end