puppet 5.3.4 → 6.29.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 (2105) hide show
  1. checksums.yaml +7 -0
  2. data/CODEOWNERS +11 -0
  3. data/CODE_OF_CONDUCT.md +70 -0
  4. data/CONTRIBUTING.md +59 -55
  5. data/Gemfile +52 -70
  6. data/Gemfile.lock +251 -0
  7. data/Guardfile.example +76 -0
  8. data/LICENSE +189 -4
  9. data/README.md +31 -37
  10. data/Rakefile +53 -52
  11. data/conf/auth.conf +7 -2
  12. data/conf/environment.conf +1 -1
  13. data/conf/fileserver.conf +1 -1
  14. data/conf/puppet.conf +4 -4
  15. data/{ext → examples/enc}/regexp_nodes/classes/databases +0 -0
  16. data/{ext → examples/enc}/regexp_nodes/classes/webservers +0 -0
  17. data/{ext → examples/enc}/regexp_nodes/environment/development +0 -0
  18. data/{ext → examples/enc}/regexp_nodes/parameters/service/prod +0 -0
  19. data/{ext → examples/enc}/regexp_nodes/parameters/service/qa +0 -0
  20. data/{ext → examples/enc}/regexp_nodes/parameters/service/sandbox +0 -0
  21. data/{ext → examples/enc}/regexp_nodes/regexp_nodes.rb +19 -20
  22. data/{ext → examples}/nagios/check_puppet.rb +2 -2
  23. data/ext/README.md +13 -0
  24. data/ext/build_defaults.yaml +1 -2
  25. data/ext/hiera/hiera.yaml +1 -1
  26. data/ext/osx/puppet.plist +2 -0
  27. data/ext/project_data.yaml +16 -12
  28. data/ext/redhat/client.init +2 -2
  29. data/ext/solaris/smf/puppet +11 -11
  30. data/ext/solaris/smf/puppet.xml +2 -0
  31. data/ext/windows/service/daemon.rb +40 -10
  32. data/install.rb +8 -27
  33. data/lib/hiera/puppet_function.rb +1 -1
  34. data/lib/hiera/scope.rb +31 -2
  35. data/lib/hiera_puppet.rb +2 -1
  36. data/lib/puppet/agent/locker.rb +0 -7
  37. data/lib/puppet/agent.rb +68 -26
  38. data/lib/puppet/application/agent.rb +107 -59
  39. data/lib/puppet/application/apply.rb +144 -74
  40. data/lib/puppet/application/cert.rb +27 -285
  41. data/lib/puppet/application/describe.rb +10 -15
  42. data/lib/puppet/application/device.rb +241 -89
  43. data/lib/puppet/application/doc.rb +8 -5
  44. data/lib/puppet/application/face_base.rb +23 -16
  45. data/lib/puppet/application/facts.rb +5 -0
  46. data/lib/puppet/application/filebucket.rb +51 -16
  47. data/lib/puppet/application/lookup.rb +92 -20
  48. data/lib/puppet/application/plugin.rb +1 -0
  49. data/lib/puppet/application/resource.rb +39 -23
  50. data/lib/puppet/application/script.rb +264 -0
  51. data/lib/puppet/application/ssl.rb +288 -0
  52. data/lib/puppet/application.rb +25 -9
  53. data/lib/puppet/application_support.rb +9 -3
  54. data/lib/puppet/concurrent/lock.rb +16 -0
  55. data/lib/puppet/concurrent/synchronized.rb +15 -0
  56. data/lib/puppet/concurrent/thread_local_singleton.rb +17 -0
  57. data/lib/puppet/concurrent.rb +2 -0
  58. data/lib/puppet/configurer/downloader.rb +36 -18
  59. data/lib/puppet/configurer/fact_handler.rb +5 -1
  60. data/lib/puppet/configurer/plugin_handler.rb +36 -11
  61. data/lib/puppet/configurer.rb +367 -152
  62. data/lib/puppet/confine/any.rb +1 -1
  63. data/lib/puppet/confine/boolean.rb +45 -0
  64. data/lib/puppet/confine/false.rb +7 -1
  65. data/lib/puppet/confine/true.rb +7 -1
  66. data/lib/puppet/confine/variable.rb +1 -1
  67. data/lib/puppet/confine.rb +6 -3
  68. data/lib/puppet/confine_collection.rb +2 -1
  69. data/lib/puppet/context/trusted_information.rb +48 -4
  70. data/lib/puppet/context.rb +120 -48
  71. data/lib/puppet/daemon.rb +17 -30
  72. data/lib/puppet/datatypes/error.rb +21 -0
  73. data/lib/puppet/datatypes/impl/error.rb +40 -0
  74. data/lib/puppet/datatypes.rb +213 -0
  75. data/lib/puppet/defaults.rb +651 -371
  76. data/lib/puppet/environments.rb +218 -105
  77. data/lib/puppet/error.rb +52 -4
  78. data/lib/puppet/etc.rb +26 -7
  79. data/lib/puppet/external/dot.rb +23 -24
  80. data/lib/puppet/external/pson/pure/generator.rb +1 -1
  81. data/lib/puppet/external/pson/pure/parser.rb +3 -2
  82. data/lib/puppet/face/catalog.rb +20 -1
  83. data/lib/puppet/face/config.rb +167 -32
  84. data/lib/puppet/face/epp.rb +52 -15
  85. data/lib/puppet/face/facts.rb +210 -0
  86. data/lib/puppet/face/generate.rb +2 -0
  87. data/lib/puppet/face/help/action.erb +5 -1
  88. data/lib/puppet/face/help/face.erb +2 -1
  89. data/lib/puppet/face/help/global.erb +2 -2
  90. data/lib/puppet/face/help/man.erb +1 -1
  91. data/lib/puppet/face/help.rb +80 -41
  92. data/lib/puppet/face/key.rb +1 -1
  93. data/lib/puppet/face/man.rb +55 -12
  94. data/lib/puppet/face/module/build.rb +5 -54
  95. data/lib/puppet/face/module/changes.rb +2 -1
  96. data/lib/puppet/face/module/generate.rb +6 -243
  97. data/lib/puppet/face/module/install.rb +1 -4
  98. data/lib/puppet/face/module/list.rb +5 -10
  99. data/lib/puppet/face/module/search.rb +13 -4
  100. data/lib/puppet/face/module/uninstall.rb +2 -5
  101. data/lib/puppet/face/module/upgrade.rb +2 -5
  102. data/lib/puppet/face/node/clean.rb +26 -12
  103. data/lib/puppet/face/node.rb +3 -3
  104. data/lib/puppet/face/parser.rb +78 -12
  105. data/lib/puppet/face/plugin.rb +9 -4
  106. data/lib/puppet/face/status.rb +3 -3
  107. data/lib/puppet/facter_impl.rb +96 -0
  108. data/lib/puppet/feature/base.rb +9 -28
  109. data/lib/puppet/feature/bolt.rb +3 -0
  110. data/lib/puppet/feature/eventlog.rb +1 -1
  111. data/lib/puppet/ffi/posix/constants.rb +14 -0
  112. data/lib/puppet/ffi/posix/functions.rb +24 -0
  113. data/lib/puppet/ffi/posix.rb +10 -0
  114. data/lib/puppet/file_bucket/dipper.rb +5 -5
  115. data/lib/puppet/file_bucket/file.rb +0 -2
  116. data/lib/puppet/file_serving/base.rb +16 -16
  117. data/lib/puppet/file_serving/configuration/parser.rb +2 -0
  118. data/lib/puppet/file_serving/configuration.rb +5 -1
  119. data/lib/puppet/file_serving/fileset.rb +17 -5
  120. data/lib/puppet/file_serving/http_metadata.rb +19 -5
  121. data/lib/puppet/file_serving/metadata.rb +12 -4
  122. data/lib/puppet/file_serving/mount/file.rb +6 -5
  123. data/lib/puppet/file_serving/mount/locales.rb +3 -3
  124. data/lib/puppet/file_serving/mount/modules.rb +4 -2
  125. data/lib/puppet/file_serving/mount/pluginfacts.rb +3 -3
  126. data/lib/puppet/file_serving/mount/plugins.rb +3 -3
  127. data/lib/puppet/file_serving/mount/scripts.rb +24 -0
  128. data/lib/puppet/file_serving/mount/tasks.rb +4 -2
  129. data/lib/puppet/file_serving/terminus_selector.rb +7 -8
  130. data/lib/puppet/file_system/file_impl.rb +45 -11
  131. data/lib/puppet/file_system/jruby.rb +23 -0
  132. data/lib/puppet/file_system/memory_file.rb +15 -2
  133. data/lib/puppet/file_system/memory_impl.rb +13 -0
  134. data/lib/puppet/file_system/posix.rb +3 -2
  135. data/lib/puppet/file_system/uniquefile.rb +15 -17
  136. data/lib/puppet/file_system/windows.rb +85 -2
  137. data/lib/puppet/file_system.rb +29 -15
  138. data/lib/puppet/forge/cache.rb +1 -1
  139. data/lib/puppet/forge/errors.rb +5 -5
  140. data/lib/puppet/forge/repository.rb +28 -87
  141. data/lib/puppet/forge.rb +45 -22
  142. data/lib/puppet/functions/abs.rb +61 -0
  143. data/lib/puppet/functions/alert.rb +1 -1
  144. data/lib/puppet/functions/all.rb +15 -11
  145. data/lib/puppet/functions/annotate.rb +11 -11
  146. data/lib/puppet/functions/any.rb +15 -11
  147. data/lib/puppet/functions/assert_type.rb +7 -7
  148. data/lib/puppet/functions/binary_file.rb +14 -2
  149. data/lib/puppet/functions/break.rb +34 -9
  150. data/lib/puppet/functions/call.rb +43 -5
  151. data/lib/puppet/functions/camelcase.rb +62 -0
  152. data/lib/puppet/functions/capitalize.rb +61 -0
  153. data/lib/puppet/functions/ceiling.rb +37 -0
  154. data/lib/puppet/functions/chomp.rb +57 -0
  155. data/lib/puppet/functions/chop.rb +67 -0
  156. data/lib/puppet/functions/compare.rb +125 -0
  157. data/lib/puppet/functions/contain.rb +25 -3
  158. data/lib/puppet/functions/convert_to.rb +34 -0
  159. data/lib/puppet/functions/crit.rb +1 -1
  160. data/lib/puppet/functions/debug.rb +1 -1
  161. data/lib/puppet/functions/defined.rb +11 -12
  162. data/lib/puppet/functions/dig.rb +47 -3
  163. data/lib/puppet/functions/downcase.rb +89 -0
  164. data/lib/puppet/functions/each.rb +20 -16
  165. data/lib/puppet/functions/emerg.rb +1 -1
  166. data/lib/puppet/functions/empty.rb +85 -0
  167. data/lib/puppet/functions/epp.rb +5 -4
  168. data/lib/puppet/functions/err.rb +1 -1
  169. data/lib/puppet/functions/eyaml_lookup_key.rb +21 -15
  170. data/lib/puppet/functions/filter.rb +31 -23
  171. data/lib/puppet/functions/find_file.rb +15 -2
  172. data/lib/puppet/functions/find_template.rb +63 -0
  173. data/lib/puppet/functions/flatten.rb +64 -0
  174. data/lib/puppet/functions/floor.rb +37 -0
  175. data/lib/puppet/functions/get.rb +150 -0
  176. data/lib/puppet/functions/getvar.rb +87 -0
  177. data/lib/puppet/functions/group_by.rb +62 -0
  178. data/lib/puppet/functions/hiera.rb +11 -11
  179. data/lib/puppet/functions/hiera_array.rb +11 -11
  180. data/lib/puppet/functions/hiera_hash.rb +12 -12
  181. data/lib/puppet/functions/hiera_include.rb +15 -15
  182. data/lib/puppet/functions/hocon_data.rb +1 -1
  183. data/lib/puppet/functions/include.rb +34 -2
  184. data/lib/puppet/functions/index.rb +167 -0
  185. data/lib/puppet/functions/info.rb +1 -1
  186. data/lib/puppet/functions/inline_epp.rb +8 -7
  187. data/lib/puppet/functions/join.rb +56 -0
  188. data/lib/puppet/functions/json_data.rb +3 -3
  189. data/lib/puppet/functions/keys.rb +25 -0
  190. data/lib/puppet/functions/length.rb +44 -0
  191. data/lib/puppet/functions/lest.rb +39 -1
  192. data/lib/puppet/functions/lookup.rb +3 -2
  193. data/lib/puppet/functions/lstrip.rb +58 -0
  194. data/lib/puppet/functions/map.rb +22 -18
  195. data/lib/puppet/functions/match.rb +19 -9
  196. data/lib/puppet/functions/max.rb +183 -0
  197. data/lib/puppet/functions/min.rb +182 -0
  198. data/lib/puppet/functions/module_directory.rb +41 -0
  199. data/lib/puppet/functions/new.rb +987 -8
  200. data/lib/puppet/functions/next.rb +20 -10
  201. data/lib/puppet/functions/notice.rb +1 -1
  202. data/lib/puppet/functions/partition.rb +62 -0
  203. data/lib/puppet/functions/reduce.rb +9 -11
  204. data/lib/puppet/functions/regsubst.rb +60 -35
  205. data/lib/puppet/functions/require.rb +42 -2
  206. data/lib/puppet/functions/return.rb +2 -9
  207. data/lib/puppet/functions/reverse_each.rb +72 -3
  208. data/lib/puppet/functions/round.rb +24 -0
  209. data/lib/puppet/functions/rstrip.rb +58 -0
  210. data/lib/puppet/functions/size.rb +15 -0
  211. data/lib/puppet/functions/slice.rb +23 -9
  212. data/lib/puppet/functions/sort.rb +74 -0
  213. data/lib/puppet/functions/split.rb +12 -10
  214. data/lib/puppet/functions/step.rb +74 -2
  215. data/lib/puppet/functions/strftime.rb +179 -10
  216. data/lib/puppet/functions/strip.rb +58 -0
  217. data/lib/puppet/functions/then.rb +65 -2
  218. data/lib/puppet/functions/tree_each.rb +32 -35
  219. data/lib/puppet/functions/type.rb +42 -1
  220. data/lib/puppet/functions/unique.rb +13 -13
  221. data/lib/puppet/functions/unwrap.rb +25 -6
  222. data/lib/puppet/functions/upcase.rb +89 -0
  223. data/lib/puppet/functions/values.rb +25 -0
  224. data/lib/puppet/functions/versioncmp.rb +7 -3
  225. data/lib/puppet/functions/warning.rb +1 -1
  226. data/lib/puppet/functions/with.rb +9 -7
  227. data/lib/puppet/functions/yaml_data.rb +11 -9
  228. data/lib/puppet/functions.rb +208 -91
  229. data/lib/puppet/generate/type.rb +12 -2
  230. data/lib/puppet/gettext/config.rb +31 -8
  231. data/lib/puppet/gettext/module_translations.rb +5 -5
  232. data/lib/puppet/gettext/stubs.rb +1 -1
  233. data/lib/puppet/graph/rb_tree_map.rb +2 -2
  234. data/lib/puppet/graph/relationship_graph.rb +2 -1
  235. data/lib/puppet/graph/simple_graph.rb +16 -10
  236. data/lib/puppet/graph.rb +0 -2
  237. data/lib/puppet/http/client.rb +468 -0
  238. data/lib/puppet/http/errors.rb +32 -0
  239. data/lib/puppet/http/external_client.rb +90 -0
  240. data/lib/puppet/http/redirector.rb +89 -0
  241. data/lib/puppet/http/resolver/server_list.rb +91 -0
  242. data/lib/puppet/http/resolver/settings.rb +26 -0
  243. data/lib/puppet/http/resolver/srv.rb +45 -0
  244. data/lib/puppet/http/resolver.rb +58 -0
  245. data/lib/puppet/http/response.rb +120 -0
  246. data/lib/puppet/http/retry_after_handler.rb +86 -0
  247. data/lib/puppet/http/service/ca.rb +112 -0
  248. data/lib/puppet/http/service/compiler.rb +393 -0
  249. data/lib/puppet/http/service/file_server.rb +207 -0
  250. data/lib/puppet/http/service/puppetserver.rb +39 -0
  251. data/lib/puppet/http/service/report.rb +66 -0
  252. data/lib/puppet/http/service.rb +196 -0
  253. data/lib/puppet/http/session.rb +131 -0
  254. data/lib/puppet/http.rb +37 -0
  255. data/lib/puppet/indirector/catalog/compiler.rb +60 -22
  256. data/lib/puppet/indirector/catalog/json.rb +14 -3
  257. data/lib/puppet/indirector/catalog/rest.rb +35 -0
  258. data/lib/puppet/indirector/catalog/yaml.rb +0 -16
  259. data/lib/puppet/indirector/certificate/file.rb +1 -1
  260. data/lib/puppet/indirector/certificate/rest.rb +3 -1
  261. data/lib/puppet/indirector/certificate_request/file.rb +1 -0
  262. data/lib/puppet/indirector/certificate_request/memory.rb +1 -0
  263. data/lib/puppet/indirector/certificate_request/rest.rb +1 -0
  264. data/lib/puppet/indirector/exec.rb +1 -1
  265. data/lib/puppet/indirector/face.rb +2 -2
  266. data/lib/puppet/indirector/fact_search.rb +60 -0
  267. data/lib/puppet/indirector/facts/facter.rb +31 -12
  268. data/lib/puppet/indirector/facts/json.rb +27 -0
  269. data/lib/puppet/indirector/facts/rest.rb +63 -0
  270. data/lib/puppet/indirector/facts/yaml.rb +7 -64
  271. data/lib/puppet/indirector/file_bucket_file/file.rb +7 -3
  272. data/lib/puppet/indirector/file_bucket_file/rest.rb +48 -0
  273. data/lib/puppet/indirector/file_content/http.rb +8 -1
  274. data/lib/puppet/indirector/file_content/rest.rb +30 -0
  275. data/lib/puppet/indirector/file_metadata/http.rb +28 -8
  276. data/lib/puppet/indirector/file_metadata/rest.rb +53 -0
  277. data/lib/puppet/indirector/file_server.rb +5 -3
  278. data/lib/puppet/indirector/hiera.rb +6 -0
  279. data/lib/puppet/indirector/indirection.rb +59 -31
  280. data/lib/puppet/indirector/json.rb +6 -2
  281. data/lib/puppet/indirector/key/file.rb +2 -6
  282. data/lib/puppet/indirector/key/memory.rb +1 -0
  283. data/lib/puppet/indirector/msgpack.rb +2 -2
  284. data/lib/puppet/indirector/node/exec.rb +4 -5
  285. data/lib/puppet/indirector/node/json.rb +8 -0
  286. data/lib/puppet/indirector/node/rest.rb +24 -0
  287. data/lib/puppet/indirector/node/yaml.rb +0 -6
  288. data/lib/puppet/indirector/report/json.rb +34 -0
  289. data/lib/puppet/indirector/report/processor.rb +4 -3
  290. data/lib/puppet/indirector/report/rest.rb +19 -0
  291. data/lib/puppet/indirector/report/yaml.rb +23 -0
  292. data/lib/puppet/indirector/request.rb +49 -28
  293. data/lib/puppet/indirector/resource/ral.rb +7 -4
  294. data/lib/puppet/indirector/resource/validator.rb +1 -1
  295. data/lib/puppet/indirector/rest.rb +30 -66
  296. data/lib/puppet/indirector/ssl_file.rb +13 -52
  297. data/lib/puppet/indirector/status/rest.rb +18 -0
  298. data/lib/puppet/indirector/terminus.rb +11 -4
  299. data/lib/puppet/indirector/yaml.rb +5 -5
  300. data/lib/puppet/indirector.rb +3 -3
  301. data/lib/puppet/info_service/class_information_service.rb +1 -1
  302. data/lib/puppet/info_service/plan_information_service.rb +36 -0
  303. data/lib/puppet/info_service/task_information_service.rb +7 -3
  304. data/lib/puppet/info_service.rb +9 -0
  305. data/lib/puppet/interface/action.rb +23 -10
  306. data/lib/puppet/interface/action_builder.rb +8 -0
  307. data/lib/puppet/interface/action_manager.rb +2 -1
  308. data/lib/puppet/interface/documentation.rb +11 -7
  309. data/lib/puppet/interface/face_collection.rb +9 -4
  310. data/lib/puppet/interface/option.rb +4 -2
  311. data/lib/puppet/interface/option_manager.rb +5 -3
  312. data/lib/puppet/interface.rb +5 -3
  313. data/lib/puppet/loaders.rb +10 -1
  314. data/lib/puppet/metatype/manager.rb +81 -83
  315. data/lib/puppet/module/plan.rb +159 -0
  316. data/lib/puppet/module/task.rb +216 -32
  317. data/lib/puppet/module.rb +51 -39
  318. data/lib/puppet/module_tool/applications/application.rb +7 -6
  319. data/lib/puppet/module_tool/applications/checksummer.rb +3 -3
  320. data/lib/puppet/module_tool/applications/installer.rb +72 -13
  321. data/lib/puppet/module_tool/applications/uninstaller.rb +6 -5
  322. data/lib/puppet/module_tool/applications/unpacker.rb +4 -4
  323. data/lib/puppet/module_tool/applications/upgrader.rb +12 -8
  324. data/lib/puppet/module_tool/applications.rb +0 -1
  325. data/lib/puppet/module_tool/contents_description.rb +2 -1
  326. data/lib/puppet/module_tool/dependency.rb +1 -1
  327. data/lib/puppet/module_tool/errors/shared.rb +34 -2
  328. data/lib/puppet/module_tool/installed_modules.rb +3 -3
  329. data/lib/puppet/module_tool/local_tarball.rb +3 -3
  330. data/lib/puppet/module_tool/metadata.rb +5 -8
  331. data/lib/puppet/module_tool/shared_behaviors.rb +8 -7
  332. data/lib/puppet/module_tool/tar/mini.rb +14 -4
  333. data/lib/puppet/module_tool.rb +4 -6
  334. data/lib/puppet/network/authconfig.rb +5 -16
  335. data/lib/puppet/network/authstore.rb +3 -2
  336. data/lib/puppet/network/format_support.rb +15 -10
  337. data/lib/puppet/network/formats.rb +168 -10
  338. data/lib/puppet/network/http/api/indirected_routes.rb +31 -20
  339. data/lib/puppet/network/http/api/master/v3/environment.rb +5 -2
  340. data/lib/puppet/network/http/api/master/v3/environments.rb +2 -3
  341. data/lib/puppet/network/http/api.rb +1 -10
  342. data/lib/puppet/network/http/base_pool.rb +36 -0
  343. data/lib/puppet/network/http/compression.rb +8 -1
  344. data/lib/puppet/network/http/connection.rb +59 -36
  345. data/lib/puppet/network/http/connection_adapter.rb +184 -0
  346. data/lib/puppet/network/http/error.rb +3 -3
  347. data/lib/puppet/network/http/factory.rb +16 -18
  348. data/lib/puppet/network/http/handler.rb +60 -27
  349. data/lib/puppet/network/http/nocache_pool.rb +11 -4
  350. data/lib/puppet/network/http/pool.rb +24 -16
  351. data/lib/puppet/network/http/request.rb +2 -1
  352. data/lib/puppet/network/http/route.rb +4 -3
  353. data/lib/puppet/network/http/session.rb +3 -2
  354. data/lib/puppet/network/http/site.rb +5 -1
  355. data/lib/puppet/network/http.rb +2 -7
  356. data/lib/puppet/network/http_pool.rb +35 -1
  357. data/lib/puppet/network/resolver.rb +140 -67
  358. data/lib/puppet/network/rights.rb +3 -2
  359. data/lib/puppet/network/uri.rb +18 -0
  360. data/lib/puppet/node/environment.rb +65 -62
  361. data/lib/puppet/node/facts.rb +28 -1
  362. data/lib/puppet/node.rb +65 -8
  363. data/lib/puppet/pal/catalog_compiler.rb +108 -0
  364. data/lib/puppet/pal/compiler.rb +222 -0
  365. data/lib/puppet/pal/function_signature.rb +52 -0
  366. data/lib/puppet/pal/json_catalog_encoder.rb +67 -0
  367. data/lib/puppet/pal/pal_api.rb +15 -0
  368. data/lib/puppet/pal/pal_impl.rb +588 -0
  369. data/lib/puppet/pal/plan_signature.rb +71 -0
  370. data/lib/puppet/pal/script_compiler.rb +73 -0
  371. data/lib/puppet/pal/task_signature.rb +58 -0
  372. data/lib/puppet/parameter/boolean.rb +1 -1
  373. data/lib/puppet/parameter/value_collection.rb +8 -8
  374. data/lib/puppet/parameter.rb +17 -10
  375. data/lib/puppet/parser/abstract_compiler.rb +36 -0
  376. data/lib/puppet/parser/ast/branch.rb +4 -4
  377. data/lib/puppet/parser/ast/leaf.rb +10 -4
  378. data/lib/puppet/parser/ast/pops_bridge.rb +34 -68
  379. data/lib/puppet/parser/ast/resourceparam.rb +1 -1
  380. data/lib/puppet/parser/ast.rb +5 -9
  381. data/lib/puppet/parser/catalog_compiler.rb +56 -0
  382. data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +3 -1
  383. data/lib/puppet/parser/compiler/catalog_validator/relationship_validator.rb +9 -2
  384. data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +2 -0
  385. data/lib/puppet/parser/compiler.rb +73 -93
  386. data/lib/puppet/parser/environment_compiler.rb +4 -1
  387. data/lib/puppet/parser/files.rb +2 -1
  388. data/lib/puppet/parser/functions/assert_type.rb +3 -3
  389. data/lib/puppet/parser/functions/create_resources.rb +18 -14
  390. data/lib/puppet/parser/functions/each.rb +2 -2
  391. data/lib/puppet/parser/functions/epp.rb +3 -3
  392. data/lib/puppet/parser/functions/fail.rb +8 -1
  393. data/lib/puppet/parser/functions/filter.rb +3 -2
  394. data/lib/puppet/parser/functions/fqdn_rand.rb +27 -4
  395. data/lib/puppet/parser/functions/generate.rb +8 -7
  396. data/lib/puppet/parser/functions/hiera.rb +4 -4
  397. data/lib/puppet/parser/functions/hiera_array.rb +5 -5
  398. data/lib/puppet/parser/functions/hiera_hash.rb +6 -6
  399. data/lib/puppet/parser/functions/hiera_include.rb +10 -11
  400. data/lib/puppet/parser/functions/inline_epp.rb +5 -5
  401. data/lib/puppet/parser/functions/inline_template.rb +7 -1
  402. data/lib/puppet/parser/functions/lest.rb +1 -1
  403. data/lib/puppet/parser/functions/lookup.rb +1 -1
  404. data/lib/puppet/parser/functions/map.rb +1 -1
  405. data/lib/puppet/parser/functions/new.rb +32 -47
  406. data/lib/puppet/parser/functions/realize.rb +6 -0
  407. data/lib/puppet/parser/functions/reduce.rb +1 -1
  408. data/lib/puppet/parser/functions/return.rb +22 -1
  409. data/lib/puppet/parser/functions/reverse_each.rb +2 -2
  410. data/lib/puppet/parser/functions/scanf.rb +1 -1
  411. data/lib/puppet/parser/functions/sha256.rb +5 -0
  412. data/lib/puppet/parser/functions/sprintf.rb +12 -1
  413. data/lib/puppet/parser/functions/step.rb +1 -1
  414. data/lib/puppet/parser/functions/tag.rb +6 -0
  415. data/lib/puppet/parser/functions/tagged.rb +6 -3
  416. data/lib/puppet/parser/functions/template.rb +5 -0
  417. data/lib/puppet/parser/functions/then.rb +1 -1
  418. data/lib/puppet/parser/functions/with.rb +4 -4
  419. data/lib/puppet/parser/functions.rb +60 -17
  420. data/lib/puppet/parser/parser_factory.rb +1 -1
  421. data/lib/puppet/parser/relationship.rb +2 -1
  422. data/lib/puppet/parser/resource/param.rb +18 -5
  423. data/lib/puppet/parser/resource.rb +11 -8
  424. data/lib/puppet/parser/scope.rb +48 -22
  425. data/lib/puppet/parser/script_compiler.rb +123 -0
  426. data/lib/puppet/parser/templatewrapper.rb +4 -2
  427. data/lib/puppet/parser/type_loader.rb +15 -14
  428. data/lib/puppet/parser.rb +1 -0
  429. data/lib/puppet/plugins/configuration.rb +5 -1
  430. data/lib/puppet/pops/adaptable.rb +8 -17
  431. data/lib/puppet/pops/adapters.rb +22 -4
  432. data/lib/puppet/pops/evaluator/access_operator.rb +39 -5
  433. data/lib/puppet/pops/evaluator/closure.rb +19 -9
  434. data/lib/puppet/pops/evaluator/collector_transformer.rb +1 -1
  435. data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +4 -4
  436. data/lib/puppet/pops/evaluator/collectors/catalog_collector.rb +1 -1
  437. data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +3 -2
  438. data/lib/puppet/pops/evaluator/collectors/fixed_set_collector.rb +2 -1
  439. data/lib/puppet/pops/evaluator/compare_operator.rb +7 -5
  440. data/lib/puppet/pops/evaluator/deferred_resolver.rb +132 -0
  441. data/lib/puppet/pops/evaluator/epp_evaluator.rb +15 -2
  442. data/lib/puppet/pops/evaluator/evaluator_impl.rb +82 -16
  443. data/lib/puppet/pops/evaluator/external_syntax_support.rb +6 -5
  444. data/lib/puppet/pops/evaluator/literal_evaluator.rb +1 -1
  445. data/lib/puppet/pops/evaluator/runtime3_converter.rb +24 -5
  446. data/lib/puppet/pops/evaluator/runtime3_resource_support.rb +5 -3
  447. data/lib/puppet/pops/evaluator/runtime3_support.rb +18 -21
  448. data/lib/puppet/pops/functions/dispatch.rb +13 -6
  449. data/lib/puppet/pops/functions/function.rb +2 -2
  450. data/lib/puppet/pops/issue_reporter.rb +18 -1
  451. data/lib/puppet/pops/issues.rb +73 -10
  452. data/lib/puppet/pops/loader/base_loader.rb +14 -2
  453. data/lib/puppet/pops/loader/dependency_loader.rb +11 -2
  454. data/lib/puppet/pops/loader/gem_support.rb +4 -2
  455. data/lib/puppet/pops/loader/generic_plan_instantiator.rb +28 -0
  456. data/lib/puppet/pops/loader/loader.rb +26 -5
  457. data/lib/puppet/pops/loader/loader_paths.rb +221 -32
  458. data/lib/puppet/pops/loader/module_loaders.rb +242 -40
  459. data/lib/puppet/pops/loader/puppet_plan_instantiator.rb +93 -0
  460. data/lib/puppet/pops/loader/puppet_resource_type_impl_instantiator.rb +9 -9
  461. data/lib/puppet/pops/loader/ruby_data_type_instantiator.rb +39 -0
  462. data/lib/puppet/pops/loader/ruby_function_instantiator.rb +1 -2
  463. data/lib/puppet/pops/loader/ruby_legacy_function_instantiator.rb +121 -0
  464. data/lib/puppet/pops/loader/runtime3_type_loader.rb +10 -3
  465. data/lib/puppet/pops/loader/static_loader.rb +23 -44
  466. data/lib/puppet/pops/loader/task_instantiator.rb +44 -0
  467. data/lib/puppet/pops/loader/type_definition_instantiator.rb +8 -1
  468. data/lib/puppet/pops/loaders.rb +169 -50
  469. data/lib/puppet/pops/lookup/context.rb +1 -1
  470. data/lib/puppet/pops/lookup/data_dig_function_provider.rb +1 -1
  471. data/lib/puppet/pops/lookup/global_data_provider.rb +1 -1
  472. data/lib/puppet/pops/lookup/hiera_config.rb +16 -2
  473. data/lib/puppet/pops/lookup/interpolation.rb +3 -2
  474. data/lib/puppet/pops/lookup/invocation.rb +10 -3
  475. data/lib/puppet/pops/lookup/key_recorder.rb +18 -0
  476. data/lib/puppet/pops/lookup/lookup_adapter.rb +65 -9
  477. data/lib/puppet/pops/lookup/sub_lookup.rb +1 -1
  478. data/lib/puppet/pops/lookup.rb +1 -0
  479. data/lib/puppet/pops/merge_strategy.rb +22 -18
  480. data/lib/puppet/pops/model/ast.pp +19 -0
  481. data/lib/puppet/pops/model/ast.rb +129 -1
  482. data/lib/puppet/pops/model/ast_transformer.rb +1 -1
  483. data/lib/puppet/pops/model/factory.rb +93 -13
  484. data/lib/puppet/pops/model/model_label_provider.rb +9 -1
  485. data/lib/puppet/pops/model/model_tree_dumper.rb +16 -1
  486. data/lib/puppet/pops/model/pn_transformer.rb +401 -0
  487. data/lib/puppet/pops/model/tree_dumper.rb +1 -1
  488. data/lib/puppet/pops/parser/code_merger.rb +4 -4
  489. data/lib/puppet/pops/parser/egrammar.ra +60 -18
  490. data/lib/puppet/pops/parser/eparser.rb +1926 -1745
  491. data/lib/puppet/pops/parser/epp_parser.rb +1 -1
  492. data/lib/puppet/pops/parser/epp_support.rb +9 -6
  493. data/lib/puppet/pops/parser/evaluating_parser.rb +9 -12
  494. data/lib/puppet/pops/parser/heredoc_support.rb +20 -10
  495. data/lib/puppet/pops/parser/interpolation_support.rb +16 -11
  496. data/lib/puppet/pops/parser/lexer2.rb +109 -100
  497. data/lib/puppet/pops/parser/lexer_support.rb +5 -4
  498. data/lib/puppet/pops/parser/locatable.rb +1 -1
  499. data/lib/puppet/pops/parser/locator.rb +116 -103
  500. data/lib/puppet/pops/parser/parser_support.rb +14 -5
  501. data/lib/puppet/pops/parser/pn_parser.rb +317 -0
  502. data/lib/puppet/pops/parser/slurp_support.rb +1 -3
  503. data/lib/puppet/pops/pcore.rb +43 -10
  504. data/lib/puppet/pops/pn.rb +236 -0
  505. data/lib/puppet/pops/puppet_stack.rb +55 -37
  506. data/lib/puppet/pops/resource/param.rb +1 -1
  507. data/lib/puppet/pops/resource/resource_type_impl.rb +4 -2
  508. data/lib/puppet/pops/serialization/abstract_reader.rb +4 -0
  509. data/lib/puppet/pops/serialization/abstract_writer.rb +6 -0
  510. data/lib/puppet/pops/serialization/extension.rb +1 -0
  511. data/lib/puppet/pops/serialization/from_data_converter.rb +68 -13
  512. data/lib/puppet/pops/serialization/json.rb +7 -7
  513. data/lib/puppet/pops/serialization/json_path.rb +5 -4
  514. data/lib/puppet/pops/serialization/object.rb +3 -4
  515. data/lib/puppet/pops/serialization/serializer.rb +2 -1
  516. data/lib/puppet/pops/serialization/to_data_converter.rb +24 -12
  517. data/lib/puppet/pops/serialization/to_stringified_converter.rb +226 -0
  518. data/lib/puppet/pops/serialization.rb +4 -2
  519. data/lib/puppet/pops/time/timespan.rb +4 -6
  520. data/lib/puppet/pops/types/class_loader.rb +6 -3
  521. data/lib/puppet/pops/types/implementation_registry.rb +28 -35
  522. data/lib/puppet/pops/types/iterable.rb +68 -13
  523. data/lib/puppet/pops/types/p_binary_type.rb +1 -2
  524. data/lib/puppet/pops/types/p_init_type.rb +1 -1
  525. data/lib/puppet/pops/types/p_meta_type.rb +5 -1
  526. data/lib/puppet/pops/types/p_object_type.rb +152 -17
  527. data/lib/puppet/pops/types/p_object_type_extension.rb +228 -0
  528. data/lib/puppet/pops/types/p_sem_ver_range_type.rb +0 -1
  529. data/lib/puppet/pops/types/p_sem_ver_type.rb +18 -4
  530. data/lib/puppet/pops/types/p_sensitive_type.rb +11 -1
  531. data/lib/puppet/pops/types/p_timespan_type.rb +4 -4
  532. data/lib/puppet/pops/types/p_type_set_type.rb +28 -2
  533. data/lib/puppet/pops/types/p_uri_type.rb +190 -0
  534. data/lib/puppet/pops/types/puppet_object.rb +15 -1
  535. data/lib/puppet/pops/types/ruby_generator.rb +49 -58
  536. data/lib/puppet/pops/types/string_converter.rb +55 -23
  537. data/lib/puppet/pops/types/tree_iterators.rb +5 -1
  538. data/lib/puppet/pops/types/type_acceptor.rb +1 -1
  539. data/lib/puppet/pops/types/type_calculator.rb +45 -16
  540. data/lib/puppet/pops/types/type_factory.rb +46 -9
  541. data/lib/puppet/pops/types/type_formatter.rb +79 -17
  542. data/lib/puppet/pops/types/type_mismatch_describer.rb +3 -3
  543. data/lib/puppet/pops/types/type_parser.rb +112 -15
  544. data/lib/puppet/pops/types/type_with_members.rb +43 -0
  545. data/lib/puppet/pops/types/types.rb +231 -115
  546. data/lib/puppet/pops/utils.rb +2 -2
  547. data/lib/puppet/pops/validation/checker4_0.rb +181 -12
  548. data/lib/puppet/pops/validation/tasks_checker.rb +105 -0
  549. data/lib/puppet/pops/validation/validator_factory_4_0.rb +14 -8
  550. data/lib/puppet/pops/validation.rb +13 -20
  551. data/lib/puppet/pops/visitor.rb +12 -6
  552. data/lib/puppet/pops.rb +2 -1
  553. data/lib/puppet/property/ensure.rb +3 -2
  554. data/lib/puppet/property/keyvalue.rb +72 -9
  555. data/lib/puppet/property/list.rb +3 -2
  556. data/lib/puppet/property.rb +21 -18
  557. data/lib/puppet/provider/aix_object.rb +485 -0
  558. data/lib/puppet/provider/exec/posix.rb +16 -4
  559. data/lib/puppet/provider/exec.rb +71 -64
  560. data/lib/puppet/provider/file/posix.rb +11 -3
  561. data/lib/puppet/provider/file/windows.rb +50 -2
  562. data/lib/puppet/provider/group/aix.rb +69 -113
  563. data/lib/puppet/provider/group/groupadd.rb +92 -24
  564. data/lib/puppet/provider/group/ldap.rb +7 -4
  565. data/lib/puppet/provider/group/pw.rb +4 -2
  566. data/lib/puppet/provider/group/windows_adsi.rb +12 -8
  567. data/lib/puppet/provider/ldap.rb +8 -4
  568. data/lib/puppet/provider/nameservice/directoryservice.rb +12 -8
  569. data/lib/puppet/provider/nameservice/objectadd.rb +13 -24
  570. data/lib/puppet/provider/nameservice/pw.rb +14 -14
  571. data/lib/puppet/provider/nameservice.rb +20 -29
  572. data/lib/puppet/provider/network_device.rb +4 -2
  573. data/lib/puppet/provider/package/aix.rb +21 -4
  574. data/lib/puppet/provider/package/appdmg.rb +4 -3
  575. data/lib/puppet/provider/package/apple.rb +2 -2
  576. data/lib/puppet/provider/package/apt.rb +156 -10
  577. data/lib/puppet/provider/package/aptitude.rb +7 -1
  578. data/lib/puppet/provider/package/blastwave.rb +2 -1
  579. data/lib/puppet/provider/package/dnf.rb +7 -4
  580. data/lib/puppet/provider/package/dnfmodule.rb +141 -0
  581. data/lib/puppet/provider/package/dpkg.rb +51 -14
  582. data/lib/puppet/provider/package/fink.rb +22 -4
  583. data/lib/puppet/provider/package/gem.rb +151 -53
  584. data/lib/puppet/provider/package/macports.rb +8 -5
  585. data/lib/puppet/provider/package/nim.rb +19 -10
  586. data/lib/puppet/provider/package/openbsd.rb +30 -12
  587. data/lib/puppet/provider/package/opkg.rb +2 -1
  588. data/lib/puppet/provider/package/pacman.rb +9 -12
  589. data/lib/puppet/provider/package/pip.rb +271 -115
  590. data/lib/puppet/provider/package/pip2.rb +17 -0
  591. data/lib/puppet/provider/package/pip3.rb +2 -5
  592. data/lib/puppet/provider/package/pkg.rb +57 -10
  593. data/lib/puppet/provider/package/pkgdmg.rb +8 -7
  594. data/lib/puppet/provider/package/pkgng.rb +56 -26
  595. data/lib/puppet/provider/package/pkgutil.rb +4 -3
  596. data/lib/puppet/provider/package/portage.rb +32 -23
  597. data/lib/puppet/provider/package/portupgrade.rb +2 -1
  598. data/lib/puppet/provider/package/puppet_gem.rb +12 -3
  599. data/lib/puppet/provider/package/puppetserver_gem.rb +171 -0
  600. data/lib/puppet/provider/package/rpm.rb +87 -242
  601. data/lib/puppet/provider/package/sun.rb +2 -2
  602. data/lib/puppet/provider/package/windows/exe_package.rb +45 -10
  603. data/lib/puppet/provider/package/windows/msi_package.rb +8 -0
  604. data/lib/puppet/provider/package/windows/package.rb +14 -4
  605. data/lib/puppet/provider/package/windows.rb +21 -4
  606. data/lib/puppet/provider/package/yum.rb +143 -39
  607. data/lib/puppet/provider/package/zypper.rb +68 -7
  608. data/lib/puppet/provider/package.rb +4 -1
  609. data/lib/puppet/provider/package_targetable.rb +69 -0
  610. data/lib/puppet/provider/parsedfile.rb +43 -12
  611. data/lib/puppet/provider/service/base.rb +10 -7
  612. data/lib/puppet/provider/service/daemontools.rb +9 -9
  613. data/lib/puppet/provider/service/debian.rb +3 -0
  614. data/lib/puppet/provider/service/init.rb +11 -9
  615. data/lib/puppet/provider/service/launchd.rb +49 -17
  616. data/lib/puppet/provider/service/openbsd.rb +1 -1
  617. data/lib/puppet/provider/service/rcng.rb +2 -2
  618. data/lib/puppet/provider/service/redhat.rb +3 -2
  619. data/lib/puppet/provider/service/runit.rb +2 -8
  620. data/lib/puppet/provider/service/service.rb +2 -1
  621. data/lib/puppet/provider/service/smf.rb +60 -6
  622. data/lib/puppet/provider/service/systemd.rb +70 -26
  623. data/lib/puppet/provider/service/upstart.rb +39 -13
  624. data/lib/puppet/provider/service/windows.rb +117 -41
  625. data/lib/puppet/provider/user/aix.rb +223 -244
  626. data/lib/puppet/provider/user/directoryservice.rb +72 -16
  627. data/lib/puppet/provider/user/hpux.rb +2 -2
  628. data/lib/puppet/provider/user/ldap.rb +8 -4
  629. data/lib/puppet/provider/user/openbsd.rb +3 -2
  630. data/lib/puppet/provider/user/pw.rb +15 -5
  631. data/lib/puppet/provider/user/user_role_add.rb +17 -5
  632. data/lib/puppet/provider/user/useradd.rb +237 -62
  633. data/lib/puppet/provider/user/windows_adsi.rb +26 -2
  634. data/lib/puppet/provider.rb +41 -19
  635. data/lib/puppet/reference/configuration.rb +12 -3
  636. data/lib/puppet/reference/indirection.rb +2 -2
  637. data/lib/puppet/reference/metaparameter.rb +1 -3
  638. data/lib/puppet/reference/providers.rb +6 -7
  639. data/lib/puppet/reference/report.rb +1 -1
  640. data/lib/puppet/reference/type.rb +14 -19
  641. data/lib/puppet/relationship.rb +4 -9
  642. data/lib/puppet/reports/http.rb +15 -8
  643. data/lib/puppet/reports/store.rb +1 -1
  644. data/lib/puppet/reports.rb +3 -3
  645. data/lib/puppet/resource/capability_finder.rb +18 -14
  646. data/lib/puppet/resource/catalog.rb +49 -64
  647. data/lib/puppet/resource/status.rb +11 -3
  648. data/lib/puppet/resource/type.rb +28 -11
  649. data/lib/puppet/resource/type_collection.rb +27 -20
  650. data/lib/puppet/resource.rb +100 -24
  651. data/lib/puppet/rest/errors.rb +15 -0
  652. data/lib/puppet/rest/response.rb +35 -0
  653. data/lib/puppet/rest/route.rb +85 -0
  654. data/lib/puppet/rest/routes.rb +135 -0
  655. data/lib/puppet/runtime.rb +66 -0
  656. data/lib/puppet/settings/alias_setting.rb +37 -0
  657. data/lib/puppet/settings/base_setting.rb +34 -4
  658. data/lib/puppet/settings/config_file.rb +5 -5
  659. data/lib/puppet/settings/environment_conf.rb +12 -2
  660. data/lib/puppet/settings/file_setting.rb +3 -2
  661. data/lib/puppet/settings/http_extra_headers_setting.rb +25 -0
  662. data/lib/puppet/settings/ini_file.rb +67 -12
  663. data/lib/puppet/settings/server_list_setting.rb +9 -0
  664. data/lib/puppet/settings/ttl_setting.rb +5 -0
  665. data/lib/puppet/settings.rb +220 -67
  666. data/lib/puppet/ssl/base.rb +4 -11
  667. data/lib/puppet/ssl/certificate.rb +11 -4
  668. data/lib/puppet/ssl/certificate_request.rb +31 -23
  669. data/lib/puppet/ssl/certificate_request_attributes.rb +1 -1
  670. data/lib/puppet/ssl/certificate_signer.rb +11 -0
  671. data/lib/puppet/ssl/error.rb +26 -0
  672. data/lib/puppet/ssl/host.rb +291 -186
  673. data/lib/puppet/ssl/key.rb +5 -7
  674. data/lib/puppet/ssl/oids.rb +4 -3
  675. data/lib/puppet/ssl/openssl_loader.rb +24 -0
  676. data/lib/puppet/ssl/ssl_context.rb +30 -0
  677. data/lib/puppet/ssl/ssl_provider.rb +333 -0
  678. data/lib/puppet/ssl/state_machine.rb +472 -0
  679. data/lib/puppet/ssl/validator/default_validator.rb +61 -25
  680. data/lib/puppet/ssl/validator/no_validator.rb +3 -1
  681. data/lib/puppet/ssl/validator.rb +2 -1
  682. data/lib/puppet/ssl/verifier.rb +140 -0
  683. data/lib/puppet/ssl/verifier_adapter.rb +58 -0
  684. data/lib/puppet/ssl.rb +9 -3
  685. data/lib/puppet/syntax_checkers/base64.rb +1 -1
  686. data/lib/puppet/syntax_checkers/epp.rb +34 -0
  687. data/lib/puppet/syntax_checkers/json.rb +1 -1
  688. data/lib/puppet/syntax_checkers/pp.rb +34 -0
  689. data/lib/puppet/test/test_helper.rb +33 -18
  690. data/lib/puppet/thread_local.rb +7 -0
  691. data/lib/puppet/transaction/additional_resource_generator.rb +3 -3
  692. data/lib/puppet/transaction/event.rb +40 -16
  693. data/lib/puppet/transaction/event_manager.rb +17 -5
  694. data/lib/puppet/transaction/persistence.rb +22 -2
  695. data/lib/puppet/transaction/report.rb +57 -34
  696. data/lib/puppet/transaction/resource_harness.rb +9 -4
  697. data/lib/puppet/transaction.rb +77 -23
  698. data/lib/puppet/trusted_external.rb +41 -0
  699. data/lib/puppet/type/component.rb +2 -1
  700. data/lib/puppet/type/exec.rb +156 -66
  701. data/lib/puppet/type/file/checksum.rb +10 -4
  702. data/lib/puppet/type/file/checksum_value.rb +4 -3
  703. data/lib/puppet/type/file/content.rb +24 -8
  704. data/lib/puppet/type/file/ctime.rb +2 -1
  705. data/lib/puppet/type/file/data_sync.rb +8 -3
  706. data/lib/puppet/type/file/ensure.rb +11 -8
  707. data/lib/puppet/type/file/mode.rb +15 -3
  708. data/lib/puppet/type/file/mtime.rb +2 -1
  709. data/lib/puppet/type/file/selcontext.rb +2 -1
  710. data/lib/puppet/type/file/source.rb +98 -75
  711. data/lib/puppet/type/file/target.rb +2 -1
  712. data/lib/puppet/type/file/type.rb +2 -1
  713. data/lib/puppet/type/file.rb +146 -51
  714. data/lib/puppet/type/filebucket.rb +15 -11
  715. data/lib/puppet/type/group.rb +43 -12
  716. data/lib/puppet/type/notify.rb +6 -5
  717. data/lib/puppet/type/package.rb +185 -35
  718. data/lib/puppet/type/resources.rb +15 -4
  719. data/lib/puppet/type/schedule.rb +59 -99
  720. data/lib/puppet/type/service.rb +76 -25
  721. data/lib/puppet/type/stage.rb +1 -1
  722. data/lib/puppet/type/tidy.rb +57 -18
  723. data/lib/puppet/type/user.rb +186 -101
  724. data/lib/puppet/type.rb +159 -90
  725. data/lib/puppet/util/at_fork.rb +1 -1
  726. data/lib/puppet/util/autoload.rb +51 -62
  727. data/lib/puppet/util/backups.rb +1 -1
  728. data/lib/puppet/util/character_encoding.rb +11 -29
  729. data/lib/puppet/util/checksums.rb +101 -7
  730. data/lib/puppet/util/classgen.rb +12 -12
  731. data/lib/puppet/util/command_line/trollop.rb +1 -1
  732. data/lib/puppet/util/command_line.rb +16 -10
  733. data/lib/puppet/util/connection.rb +88 -0
  734. data/lib/puppet/util/diff.rb +4 -2
  735. data/lib/puppet/util/errors.rb +0 -2
  736. data/lib/puppet/util/execution.rb +28 -11
  737. data/lib/puppet/util/fact_dif.rb +81 -0
  738. data/lib/puppet/util/feature.rb +77 -43
  739. data/lib/puppet/util/fileparsing.rb +79 -46
  740. data/lib/puppet/util/filetype.rb +62 -13
  741. data/lib/puppet/util/http_proxy.rb +37 -25
  742. data/lib/puppet/util/inifile.rb +3 -4
  743. data/lib/puppet/util/instance_loader.rb +16 -29
  744. data/lib/puppet/util/json.rb +89 -0
  745. data/lib/puppet/util/json_lockfile.rb +3 -3
  746. data/lib/puppet/util/ldap/connection.rb +11 -9
  747. data/lib/puppet/util/ldap/manager.rb +6 -3
  748. data/lib/puppet/util/log/destinations.rb +21 -17
  749. data/lib/puppet/util/log.rb +26 -17
  750. data/lib/puppet/util/logging.rb +36 -47
  751. data/lib/puppet/util/metric.rb +4 -3
  752. data/lib/puppet/util/monkey_patches.rb +76 -23
  753. data/lib/puppet/util/network_device/base.rb +1 -1
  754. data/lib/puppet/util/network_device/config.rb +2 -3
  755. data/lib/puppet/util/package/version/debian.rb +175 -0
  756. data/lib/puppet/util/package/version/gem.rb +15 -0
  757. data/lib/puppet/util/package/version/pip.rb +167 -0
  758. data/lib/puppet/util/package/version/range/eq.rb +14 -0
  759. data/lib/puppet/util/package/version/range/gt.rb +14 -0
  760. data/lib/puppet/util/package/version/range/gt_eq.rb +14 -0
  761. data/lib/puppet/util/package/version/range/lt.rb +14 -0
  762. data/lib/puppet/util/package/version/range/lt_eq.rb +14 -0
  763. data/lib/puppet/util/package/version/range/min_max.rb +21 -0
  764. data/lib/puppet/util/package/version/range/simple.rb +11 -0
  765. data/lib/puppet/util/package/version/range.rb +53 -0
  766. data/lib/puppet/util/package/version/rpm.rb +73 -0
  767. data/lib/puppet/util/package.rb +25 -16
  768. data/lib/puppet/util/pidlock.rb +45 -5
  769. data/lib/puppet/util/platform.rb +48 -0
  770. data/lib/puppet/util/plist.rb +10 -4
  771. data/lib/puppet/util/posix.rb +69 -3
  772. data/lib/puppet/util/provider_features.rb +5 -10
  773. data/lib/puppet/util/rdoc/code_objects.rb +2 -1
  774. data/lib/puppet/util/rdoc/generators/puppet_generator.rb +6 -4
  775. data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +2 -2
  776. data/lib/puppet/util/rdoc/parser/puppet_parser_rdoc2.rb +1 -1
  777. data/lib/puppet/util/rdoc.rb +2 -2
  778. data/lib/puppet/util/reference.rb +10 -16
  779. data/lib/puppet/util/resource_template.rb +1 -1
  780. data/lib/puppet/util/rpm_compare.rb +193 -0
  781. data/lib/puppet/util/rubygems.rb +6 -14
  782. data/lib/puppet/util/run_mode.rb +6 -2
  783. data/lib/puppet/util/selinux.rb +41 -8
  784. data/lib/puppet/util/skip_tags.rb +4 -0
  785. data/lib/puppet/util/ssl.rb +31 -1
  786. data/lib/puppet/util/storage.rb +13 -2
  787. data/lib/puppet/util/suidmanager.rb +8 -7
  788. data/lib/puppet/util/symbolic_file_mode.rb +29 -17
  789. data/lib/puppet/util/tag_set.rb +1 -1
  790. data/lib/puppet/util/tagging.rb +19 -5
  791. data/lib/puppet/util/warnings.rb +0 -2
  792. data/lib/puppet/util/windows/adsi.rb +305 -206
  793. data/lib/puppet/util/windows/api_types.rb +60 -33
  794. data/lib/puppet/util/windows/com.rb +2 -1
  795. data/lib/puppet/util/windows/eventlog.rb +1 -6
  796. data/lib/puppet/util/windows/file.rb +20 -2
  797. data/lib/puppet/util/windows/monkey_patches/dir.rb +40 -0
  798. data/lib/puppet/util/windows/principal.rb +24 -14
  799. data/lib/puppet/util/windows/process.rb +93 -4
  800. data/lib/puppet/util/windows/registry.rb +48 -16
  801. data/lib/puppet/util/windows/root_certs.rb +1 -1
  802. data/lib/puppet/util/windows/security.rb +66 -16
  803. data/lib/puppet/util/windows/service.rb +1147 -0
  804. data/lib/puppet/util/windows/sid.rb +68 -12
  805. data/lib/puppet/util/windows/user.rb +254 -14
  806. data/lib/puppet/util/windows.rb +23 -2
  807. data/lib/puppet/util/yaml.rb +62 -7
  808. data/lib/puppet/util.rb +130 -55
  809. data/lib/puppet/vendor/pathspec/lib/pathspec/gitignorespec.rb +18 -18
  810. data/lib/puppet/vendor/require_vendored.rb +0 -1
  811. data/lib/puppet/vendor.rb +1 -1
  812. data/lib/puppet/version.rb +2 -5
  813. data/lib/puppet/x509/cert_provider.rb +355 -0
  814. data/lib/puppet/x509/pem_store.rb +55 -0
  815. data/lib/puppet/x509.rb +7 -0
  816. data/lib/puppet.rb +83 -36
  817. data/lib/puppet_pal.rb +8 -0
  818. data/locales/puppet.pot +5 -9763
  819. data/man/man5/puppet.conf.5 +651 -390
  820. data/man/man8/puppet-agent.8 +88 -67
  821. data/man/man8/puppet-apply.8 +8 -5
  822. data/man/man8/puppet-catalog.8 +39 -11
  823. data/man/man8/puppet-config.8 +42 -8
  824. data/man/man8/puppet-describe.8 +1 -1
  825. data/man/man8/puppet-device.8 +55 -22
  826. data/man/man8/puppet-doc.8 +1 -1
  827. data/man/man8/puppet-epp.8 +35 -13
  828. data/man/man8/puppet-facts.8 +144 -6
  829. data/man/man8/puppet-filebucket.8 +58 -12
  830. data/man/man8/puppet-generate.8 +2 -2
  831. data/man/man8/puppet-help.8 +7 -4
  832. data/man/man8/puppet-key.8 +9 -15
  833. data/man/man8/puppet-lookup.8 +10 -7
  834. data/man/man8/puppet-man.8 +11 -5
  835. data/man/man8/puppet-module.8 +28 -106
  836. data/man/man8/puppet-node.8 +13 -13
  837. data/man/man8/puppet-parser.8 +32 -9
  838. data/man/man8/puppet-plugin.8 +2 -2
  839. data/man/man8/puppet-report.8 +9 -6
  840. data/man/man8/puppet-resource.8 +2 -2
  841. data/man/man8/puppet-script.8 +70 -0
  842. data/man/man8/puppet-ssl.8 +59 -0
  843. data/man/man8/puppet-status.8 +7 -7
  844. data/man/man8/puppet.8 +12 -3
  845. data/spec/fixtures/integration/application/agent/cached_deferred_catalog.json +92 -0
  846. data/spec/fixtures/integration/application/agent/lib/facter/agent_spec_role.rb +3 -0
  847. data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/provider/applytest/applytest.rb +2 -0
  848. data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/type/applytest.rb +25 -0
  849. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/Gemfile +4 -0
  850. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/Rakefile +3 -0
  851. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/lib/puppet/functions/l10n.rb +8 -0
  852. data/{lib/puppet/vendor/semantic_puppet → spec/fixtures/integration/l10n/envs/prod/modules/demo}/locales/config.yaml +8 -4
  853. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/locales/ja/puppet-l10n.po +19 -0
  854. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/locales/puppet-l10n.pot +20 -0
  855. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/metadata.json +8 -0
  856. data/spec/fixtures/ssl/127.0.0.1-key.pem +117 -0
  857. data/spec/fixtures/ssl/127.0.0.1.pem +69 -0
  858. data/spec/fixtures/ssl/bad-basic-constraints.pem +81 -0
  859. data/spec/fixtures/ssl/bad-int-basic-constraints.pem +81 -0
  860. data/spec/fixtures/ssl/ca.pem +81 -0
  861. data/spec/fixtures/ssl/crl.pem +40 -0
  862. data/spec/fixtures/ssl/ec-key.pem +18 -0
  863. data/spec/fixtures/ssl/ec.pem +49 -0
  864. data/spec/fixtures/ssl/encrypted-ec-key.pem +21 -0
  865. data/spec/fixtures/ssl/encrypted-key.pem +120 -0
  866. data/spec/fixtures/ssl/intermediate-agent-crl.pem +40 -0
  867. data/spec/fixtures/ssl/intermediate-agent.pem +81 -0
  868. data/spec/fixtures/ssl/intermediate-crl.pem +46 -0
  869. data/spec/fixtures/ssl/intermediate.pem +81 -0
  870. data/spec/fixtures/ssl/netlock-arany-utf8.pem +23 -0
  871. data/spec/fixtures/ssl/oid-key.pem +117 -0
  872. data/spec/fixtures/ssl/oid.pem +69 -0
  873. data/spec/fixtures/ssl/pluto-key.pem +117 -0
  874. data/spec/fixtures/ssl/pluto.pem +66 -0
  875. data/spec/fixtures/ssl/request-key.pem +117 -0
  876. data/spec/fixtures/ssl/request.pem +60 -0
  877. data/spec/fixtures/ssl/revoked-key.pem +117 -0
  878. data/spec/fixtures/ssl/revoked.pem +66 -0
  879. data/spec/fixtures/ssl/signed-key.pem +117 -0
  880. data/spec/fixtures/ssl/signed.pem +66 -0
  881. data/spec/fixtures/ssl/tampered-cert.pem +66 -0
  882. data/spec/fixtures/ssl/tampered-csr.pem +60 -0
  883. data/spec/fixtures/ssl/trusted_oid_mapping.yaml +5 -0
  884. data/spec/fixtures/ssl/unknown-127.0.0.1-key.pem +117 -0
  885. data/spec/fixtures/ssl/unknown-127.0.0.1.pem +69 -0
  886. data/spec/fixtures/ssl/unknown-ca-key.pem +117 -0
  887. data/spec/fixtures/ssl/unknown-ca.pem +81 -0
  888. data/spec/fixtures/unit/forge/bacula-releases.json +128 -0
  889. data/spec/fixtures/unit/forge/bacula.json +76 -0
  890. data/spec/fixtures/unit/forge/bacula.tar.gz +0 -0
  891. data/spec/fixtures/unit/functions/hiera/hiera/backend/hieraspec_backend.rb +22 -0
  892. data/spec/fixtures/unit/functions/lookup/hiera/backend/custom_backend.rb +18 -0
  893. data/spec/fixtures/unit/functions/lookup/hiera/backend/other_backend.rb +7 -0
  894. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome2/lib/puppet_x/awesome2/echo_scheme_handler.rb +1 -1
  895. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/manifests/init.pp +6 -6
  896. data/spec/fixtures/unit/pops/loaders/loaders/mix_4x_and_3x_functions/usee/lib/puppet/parser/functions/bad_func_load.rb +11 -0
  897. data/spec/fixtures/unit/pops/loaders/loaders/mix_4x_and_3x_functions/usee/lib/puppet/parser/functions/bad_func_load2.rb +11 -0
  898. data/spec/fixtures/unit/pops/loaders/loaders/mix_4x_and_3x_functions/usee/lib/puppet/parser/functions/bad_func_load3.rb +11 -0
  899. data/spec/fixtures/unit/pops/loaders/loaders/mix_4x_and_3x_functions/usee/lib/puppet/parser/functions/bad_func_load4.rb +11 -0
  900. data/spec/fixtures/unit/pops/loaders/loaders/mix_4x_and_3x_functions/usee/lib/puppet/parser/functions/bad_func_load5.rb +12 -0
  901. data/spec/fixtures/unit/pops/loaders/loaders/mix_4x_and_3x_functions/usee/lib/puppet/parser/functions/func_with_syntax_error.rb +9 -0
  902. data/spec/fixtures/unit/pops/loaders/loaders/mix_4x_and_3x_functions/usee/lib/puppet/parser/functions/good_func_load.rb +9 -0
  903. data/spec/fixtures/unit/provider/aix_object/aix_colon_list_real_world_input.out +1 -0
  904. data/spec/fixtures/unit/provider/aix_object/aix_colon_list_real_world_output.out +1 -0
  905. data/spec/fixtures/unit/provider/package/dnfmodule/dnf-module-list.txt +19 -0
  906. data/spec/fixtures/unit/provider/package/pkgng/pkg.query +7 -1
  907. data/spec/fixtures/unit/provider/package/pkgng/pkg.query.zsh +1 -0
  908. data/spec/fixtures/unit/provider/package/pkgng/pkg.version +2 -0
  909. data/spec/fixtures/unit/provider/package/puppetserver_gem/gem-list-local-packages +30 -0
  910. data/spec/fixtures/unit/provider/package/yum/yum-check-update-subscription-manager.txt +9 -0
  911. data/spec/fixtures/unit/provider/package/zypper/zypper-search-uninstalled.out +13 -0
  912. data/spec/fixtures/unit/provider/parsedfile/aliases.txt +2 -0
  913. data/spec/fixtures/unit/provider/service/smf/svcs_fmri.out +6 -0
  914. data/spec/fixtures/unit/provider/service/smf/svcs_multiple_fmris.out +13 -0
  915. data/spec/fixtures/unit/provider/service/systemd/list_unit_files_services +9 -0
  916. data/spec/fixtures/unit/provider/service/systemd/list_unit_files_services_vendor_preset +9 -0
  917. data/spec/fixtures/unit/provider/user/aix/aix_passwd_file.out +36 -0
  918. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_fetch_if_not_on_the_local_disk.yml +1 -102
  919. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_not_update_if_content_on_disk_is_up-to-date.yml +1 -106
  920. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_update_if_content_differs_on_disk.yml +1 -106
  921. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_mtime_is_older_on_disk.yml +1 -102
  922. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_no_header_specified.yml +1 -98
  923. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_not_on_the_local_disk.yml +1 -102
  924. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_not_update_if_mtime_is_newer_on_disk.yml +1 -102
  925. data/spec/integration/agent/logging_spec.rb +7 -9
  926. data/spec/integration/application/agent_spec.rb +848 -0
  927. data/spec/integration/application/apply_spec.rb +338 -178
  928. data/spec/integration/application/doc_spec.rb +16 -7
  929. data/spec/integration/application/filebucket_spec.rb +255 -0
  930. data/spec/integration/application/help_spec.rb +42 -0
  931. data/spec/integration/application/lookup_spec.rb +105 -40
  932. data/spec/integration/application/module_spec.rb +89 -0
  933. data/spec/integration/application/plugin_spec.rb +123 -0
  934. data/spec/integration/application/resource_spec.rb +68 -0
  935. data/spec/integration/application/ssl_spec.rb +20 -0
  936. data/spec/integration/configurer_spec.rb +109 -12
  937. data/spec/integration/data_binding_spec.rb +83 -0
  938. data/spec/integration/defaults_spec.rb +30 -19
  939. data/spec/integration/directory_environments_spec.rb +17 -17
  940. data/spec/integration/environments/setting_hooks_spec.rb +1 -1
  941. data/spec/integration/environments/settings_interpolation_spec.rb +0 -4
  942. data/spec/integration/http/client_spec.rb +213 -0
  943. data/spec/integration/indirector/catalog/compiler_spec.rb +10 -11
  944. data/spec/integration/indirector/direct_file_server_spec.rb +2 -4
  945. data/spec/integration/indirector/facts/facter_spec.rb +112 -63
  946. data/spec/integration/indirector/file_content/file_server_spec.rb +7 -8
  947. data/spec/integration/indirector/file_metadata/file_server_spec.rb +7 -8
  948. data/spec/integration/l10n/compiler_spec.rb +37 -0
  949. data/spec/integration/network/authconfig_spec.rb +23 -24
  950. data/spec/integration/network/formats_spec.rb +0 -1
  951. data/spec/integration/network/http/api/indirected_routes_spec.rb +9 -38
  952. data/spec/integration/network/http_pool_spec.rb +293 -0
  953. data/spec/integration/node/environment_spec.rb +16 -2
  954. data/spec/integration/node/facts_spec.rb +9 -10
  955. data/spec/integration/node_spec.rb +6 -11
  956. data/spec/integration/parser/catalog_spec.rb +8 -8
  957. data/spec/integration/parser/collection_spec.rb +6 -11
  958. data/spec/integration/parser/compiler_spec.rb +60 -30
  959. data/spec/integration/parser/pcore_resource_spec.rb +13 -3
  960. data/spec/integration/parser/scope_spec.rb +3 -3
  961. data/spec/integration/parser/script_compiler_spec.rb +113 -0
  962. data/spec/integration/parser/undef_param_spec.rb +1 -1
  963. data/spec/integration/provider/file/windows_spec.rb +162 -0
  964. data/spec/integration/resource/catalog_spec.rb +14 -17
  965. data/spec/integration/resource/type_collection_spec.rb +3 -8
  966. data/spec/integration/transaction/report_spec.rb +12 -17
  967. data/spec/integration/transaction_spec.rb +37 -39
  968. data/spec/integration/type/exec_spec.rb +71 -47
  969. data/spec/integration/type/file_spec.rb +142 -42
  970. data/spec/integration/type/notify_spec.rb +46 -0
  971. data/spec/integration/type/package_spec.rb +27 -31
  972. data/spec/integration/type/tidy_spec.rb +1 -2
  973. data/spec/integration/type_spec.rb +1 -3
  974. data/spec/integration/util/autoload_spec.rb +10 -8
  975. data/spec/integration/util/execution_spec.rb +54 -5
  976. data/spec/integration/util/rdoc/parser_spec.rb +14 -25
  977. data/spec/integration/util/settings_spec.rb +2 -2
  978. data/spec/integration/util/windows/adsi_spec.rb +116 -8
  979. data/spec/integration/util/windows/monkey_patches/dir_spec.rb +11 -0
  980. data/spec/integration/util/windows/principal_spec.rb +33 -4
  981. data/spec/integration/util/windows/process_spec.rb +28 -44
  982. data/spec/integration/util/windows/registry_spec.rb +130 -53
  983. data/spec/integration/util/windows/security_spec.rb +103 -12
  984. data/spec/integration/util/windows/user_spec.rb +108 -29
  985. data/spec/integration/util_spec.rb +9 -38
  986. data/spec/lib/matchers/json.rb +13 -19
  987. data/{lib/puppet/ssl → spec/lib/puppet}/certificate_factory.rb +7 -8
  988. data/spec/lib/puppet/test_ca.rb +164 -0
  989. data/spec/lib/puppet_spec/compiler.rb +28 -1
  990. data/spec/lib/puppet_spec/files.rb +28 -24
  991. data/spec/lib/puppet_spec/fixtures.rb +24 -0
  992. data/spec/lib/puppet_spec/https.rb +95 -0
  993. data/spec/lib/puppet_spec/language.rb +34 -35
  994. data/spec/lib/puppet_spec/matchers.rb +0 -93
  995. data/spec/lib/puppet_spec/module_tool/shared_functions.rb +3 -3
  996. data/spec/lib/puppet_spec/modules.rb +39 -4
  997. data/spec/lib/puppet_spec/puppetserver.rb +179 -0
  998. data/spec/lib/puppet_spec/scope.rb +1 -2
  999. data/spec/lib/puppet_spec/settings.rb +7 -1
  1000. data/spec/lib/puppet_spec/ssl.rb +265 -0
  1001. data/spec/shared_behaviours/all_parsedfile_providers.rb +1 -1
  1002. data/spec/shared_behaviours/documentation_on_faces.rb +0 -2
  1003. data/spec/shared_behaviours/file_server_terminus.rb +8 -11
  1004. data/spec/shared_behaviours/file_serving.rb +6 -8
  1005. data/spec/shared_behaviours/hiera_indirections.rb +3 -4
  1006. data/spec/shared_behaviours/iterative_functions.rb +0 -1
  1007. data/spec/shared_behaviours/memory_terminus.rb +2 -2
  1008. data/spec/shared_behaviours/path_parameters.rb +1 -1
  1009. data/spec/shared_behaviours/things_that_declare_options.rb +2 -2
  1010. data/spec/shared_contexts/checksum.rb +4 -1
  1011. data/spec/shared_contexts/digests.rb +46 -1
  1012. data/spec/shared_contexts/https.rb +29 -0
  1013. data/spec/shared_contexts/l10n.rb +32 -0
  1014. data/spec/shared_contexts/types_setup.rb +10 -3
  1015. data/spec/shared_examples/rhel_package_provider.rb +112 -70
  1016. data/spec/spec_helper.rb +49 -22
  1017. data/spec/unit/agent/disabler_spec.rb +4 -5
  1018. data/spec/unit/agent/locker_spec.rb +12 -13
  1019. data/spec/unit/agent_spec.rb +181 -104
  1020. data/spec/unit/application/agent_spec.rb +159 -130
  1021. data/spec/unit/application/apply_spec.rb +199 -145
  1022. data/spec/unit/application/config_spec.rb +224 -5
  1023. data/spec/unit/application/describe_spec.rb +88 -51
  1024. data/spec/unit/application/device_spec.rb +424 -300
  1025. data/spec/unit/application/doc_spec.rb +46 -48
  1026. data/spec/unit/application/face_base_spec.rb +69 -68
  1027. data/spec/unit/application/facts_spec.rb +518 -9
  1028. data/spec/unit/application/filebucket_spec.rb +98 -74
  1029. data/spec/unit/application/indirection_base_spec.rb +8 -6
  1030. data/spec/unit/application/lookup_spec.rb +176 -47
  1031. data/spec/unit/application/man_spec.rb +52 -0
  1032. data/spec/unit/application/resource_spec.rb +76 -51
  1033. data/spec/unit/application/ssl_spec.rb +458 -0
  1034. data/spec/unit/application_spec.rb +171 -94
  1035. data/spec/unit/capability_spec.rb +17 -15
  1036. data/spec/unit/{ssl/certificate_factory_spec.rb → certificate_factory_spec.rb} +11 -22
  1037. data/spec/unit/concurrent/lock_spec.rb +29 -0
  1038. data/spec/unit/concurrent/thread_local_singleton_spec.rb +39 -0
  1039. data/spec/unit/configurer/downloader_spec.rb +41 -21
  1040. data/spec/unit/configurer/fact_handler_spec.rb +6 -11
  1041. data/spec/unit/configurer/plugin_handler_spec.rb +71 -48
  1042. data/spec/unit/configurer_spec.rb +851 -480
  1043. data/spec/unit/confine/exists_spec.rb +17 -15
  1044. data/spec/unit/confine/false_spec.rb +32 -6
  1045. data/spec/unit/confine/feature_spec.rb +7 -5
  1046. data/spec/unit/confine/true_spec.rb +32 -6
  1047. data/spec/unit/confine/variable_spec.rb +14 -15
  1048. data/spec/unit/confine_collection_spec.rb +28 -29
  1049. data/spec/unit/confine_spec.rb +36 -14
  1050. data/spec/unit/confiner_spec.rb +10 -11
  1051. data/spec/unit/context/trusted_information_spec.rb +68 -5
  1052. data/spec/unit/context_spec.rb +119 -38
  1053. data/spec/unit/daemon_spec.rb +39 -107
  1054. data/spec/unit/data_providers/function_data_provider_spec.rb +0 -1
  1055. data/spec/unit/data_providers/hiera_data_provider_spec.rb +4 -5
  1056. data/spec/unit/datatypes_spec.rb +352 -0
  1057. data/spec/unit/defaults_spec.rb +182 -19
  1058. data/spec/unit/environments_spec.rb +592 -104
  1059. data/spec/unit/etc_spec.rb +52 -29
  1060. data/spec/unit/external/pson_spec.rb +0 -1
  1061. data/spec/unit/face/config_spec.rb +247 -33
  1062. data/spec/unit/face/epp_face_spec.rb +63 -9
  1063. data/spec/unit/face/facts_spec.rb +70 -1
  1064. data/spec/unit/face/generate_spec.rb +68 -5
  1065. data/spec/unit/face/help_spec.rb +67 -74
  1066. data/spec/unit/face/key_spec.rb +0 -1
  1067. data/spec/unit/face/module/install_spec.rb +3 -5
  1068. data/spec/unit/face/module/list_spec.rb +2 -73
  1069. data/spec/unit/face/module/search_spec.rb +39 -9
  1070. data/spec/unit/face/module/uninstall_spec.rb +4 -8
  1071. data/spec/unit/face/node_spec.rb +22 -59
  1072. data/spec/unit/face/parser_spec.rb +177 -25
  1073. data/spec/unit/face/plugin_spec.rb +56 -19
  1074. data/spec/unit/face/status_spec.rb +0 -1
  1075. data/spec/unit/facter_impl_spec.rb +31 -0
  1076. data/spec/unit/file_bucket/dipper_spec.rb +39 -28
  1077. data/spec/unit/file_bucket/file_spec.rb +0 -2
  1078. data/spec/unit/file_serving/base_spec.rb +17 -21
  1079. data/spec/unit/file_serving/configuration/parser_spec.rb +49 -28
  1080. data/spec/unit/file_serving/configuration_spec.rb +77 -70
  1081. data/spec/unit/file_serving/content_spec.rb +10 -12
  1082. data/spec/unit/file_serving/fileset_spec.rb +123 -59
  1083. data/spec/unit/file_serving/http_metadata_spec.rb +38 -14
  1084. data/spec/unit/file_serving/metadata_spec.rb +41 -42
  1085. data/spec/unit/file_serving/mount/file_spec.rb +31 -32
  1086. data/spec/unit/file_serving/mount/locales_spec.rb +25 -26
  1087. data/spec/unit/file_serving/mount/modules_spec.rb +14 -15
  1088. data/spec/unit/file_serving/mount/pluginfacts_spec.rb +25 -26
  1089. data/spec/unit/file_serving/mount/plugins_spec.rb +25 -26
  1090. data/spec/unit/file_serving/mount/scripts_spec.rb +69 -0
  1091. data/spec/unit/file_serving/mount/tasks_spec.rb +14 -15
  1092. data/spec/unit/file_serving/mount_spec.rb +0 -1
  1093. data/spec/unit/file_serving/terminus_helper_spec.rb +47 -45
  1094. data/spec/unit/file_serving/terminus_selector_spec.rb +45 -29
  1095. data/spec/unit/file_system/path_pattern_spec.rb +1 -1
  1096. data/spec/unit/file_system/uniquefile_spec.rb +41 -6
  1097. data/spec/unit/file_system_spec.rb +330 -9
  1098. data/spec/unit/forge/errors_spec.rb +1 -1
  1099. data/spec/unit/forge/forge_spec.rb +14 -57
  1100. data/spec/unit/forge/module_release_spec.rb +161 -48
  1101. data/spec/unit/forge/repository_spec.rb +66 -163
  1102. data/spec/unit/forge_spec.rb +47 -114
  1103. data/spec/unit/functions/abs_spec.rb +70 -0
  1104. data/spec/unit/functions/assert_type_spec.rb +2 -2
  1105. data/spec/unit/functions/binary_file_spec.rb +3 -3
  1106. data/spec/unit/functions/break_spec.rb +34 -2
  1107. data/spec/unit/functions/call_spec.rb +59 -5
  1108. data/spec/unit/functions/camelcase_spec.rb +34 -0
  1109. data/spec/unit/functions/capitalize_spec.rb +34 -0
  1110. data/spec/unit/functions/ceiling_spec.rb +65 -0
  1111. data/spec/unit/functions/chomp_spec.rb +46 -0
  1112. data/spec/unit/functions/chop_spec.rb +38 -0
  1113. data/spec/unit/functions/compare_spec.rb +147 -0
  1114. data/spec/unit/functions/contain_spec.rb +2 -3
  1115. data/spec/unit/functions/convert_to_spec.rb +25 -0
  1116. data/spec/unit/functions/defined_spec.rb +0 -1
  1117. data/spec/unit/functions/downcase_spec.rb +34 -0
  1118. data/spec/unit/functions/empty_spec.rb +87 -0
  1119. data/spec/unit/functions/epp_spec.rb +13 -5
  1120. data/spec/unit/functions/filter_spec.rb +4 -4
  1121. data/spec/unit/functions/find_file_spec.rb +7 -7
  1122. data/spec/unit/functions/find_template_spec.rb +69 -0
  1123. data/spec/unit/functions/flatten_spec.rb +31 -0
  1124. data/spec/unit/functions/floor_spec.rb +65 -0
  1125. data/spec/unit/functions/get_spec.rb +135 -0
  1126. data/spec/unit/functions/getvar_spec.rb +121 -0
  1127. data/spec/unit/functions/group_by_spec.rb +40 -0
  1128. data/spec/unit/functions/hiera_spec.rb +14 -48
  1129. data/spec/unit/functions/include_spec.rb +16 -5
  1130. data/spec/unit/functions/index_spec.rb +184 -0
  1131. data/spec/unit/functions/inline_epp_spec.rb +27 -2
  1132. data/spec/unit/functions/join_spec.rb +33 -0
  1133. data/spec/unit/functions/keys_spec.rb +31 -0
  1134. data/spec/unit/functions/length_spec.rb +50 -0
  1135. data/spec/unit/functions/logging_spec.rb +11 -3
  1136. data/spec/unit/functions/lookup_fixture_spec.rb +1 -2
  1137. data/spec/unit/functions/lookup_spec.rb +165 -63
  1138. data/spec/unit/functions/lstrip_spec.rb +30 -0
  1139. data/spec/unit/functions/match_spec.rb +21 -4
  1140. data/spec/unit/functions/max_spec.rb +129 -0
  1141. data/spec/unit/functions/min_spec.rb +129 -0
  1142. data/spec/unit/functions/module_directory_spec.rb +43 -0
  1143. data/spec/unit/functions/new_spec.rb +30 -14
  1144. data/spec/unit/functions/partition_spec.rb +40 -0
  1145. data/spec/unit/functions/regsubst_spec.rb +3 -4
  1146. data/spec/unit/functions/require_spec.rb +1 -2
  1147. data/spec/unit/functions/round_spec.rb +41 -0
  1148. data/spec/unit/functions/rstrip_spec.rb +30 -0
  1149. data/spec/unit/functions/shared.rb +15 -6
  1150. data/spec/unit/functions/size_spec.rb +50 -0
  1151. data/spec/unit/functions/sort_spec.rb +79 -0
  1152. data/spec/unit/functions/split_spec.rb +3 -4
  1153. data/spec/unit/functions/step_spec.rb +1 -1
  1154. data/spec/unit/functions/strftime_spec.rb +2 -2
  1155. data/spec/unit/functions/strip_spec.rb +30 -0
  1156. data/spec/unit/functions/tree_each_spec.rb +49 -0
  1157. data/spec/unit/functions/unwrap_spec.rb +8 -0
  1158. data/spec/unit/functions/upcase_spec.rb +34 -0
  1159. data/spec/unit/functions/values_spec.rb +30 -0
  1160. data/spec/unit/functions/versioncmp_spec.rb +43 -9
  1161. data/spec/unit/functions4_spec.rb +154 -86
  1162. data/spec/unit/gettext/config_spec.rb +45 -14
  1163. data/spec/unit/gettext/module_loading_spec.rb +7 -7
  1164. data/spec/unit/graph/rb_tree_map_spec.rb +0 -2
  1165. data/spec/unit/graph/relationship_graph_spec.rb +1 -2
  1166. data/spec/unit/graph/simple_graph_spec.rb +51 -12
  1167. data/spec/unit/hiera/scope_spec.rb +7 -0
  1168. data/spec/unit/hiera_puppet_spec.rb +20 -20
  1169. data/spec/unit/http/client_spec.rb +938 -0
  1170. data/spec/unit/http/external_client_spec.rb +201 -0
  1171. data/spec/unit/http/resolver_spec.rb +133 -0
  1172. data/spec/unit/http/response_spec.rb +75 -0
  1173. data/spec/unit/http/service/ca_spec.rb +198 -0
  1174. data/spec/unit/http/service/compiler_spec.rb +806 -0
  1175. data/spec/unit/http/service/file_server_spec.rb +307 -0
  1176. data/spec/unit/http/service/puppetserver_spec.rb +82 -0
  1177. data/spec/unit/http/service/report_spec.rb +117 -0
  1178. data/spec/unit/http/service_spec.rb +144 -0
  1179. data/spec/unit/http/session_spec.rb +307 -0
  1180. data/spec/unit/indirector/catalog/compiler_spec.rb +343 -194
  1181. data/spec/unit/indirector/catalog/json_spec.rb +10 -5
  1182. data/spec/unit/indirector/catalog/msgpack_spec.rb +0 -1
  1183. data/spec/unit/indirector/catalog/rest_spec.rb +67 -3
  1184. data/spec/unit/indirector/catalog/store_configs_spec.rb +0 -1
  1185. data/spec/unit/indirector/catalog/yaml_spec.rb +0 -1
  1186. data/spec/unit/indirector/certificate/file_spec.rb +0 -9
  1187. data/spec/unit/indirector/certificate/rest_spec.rb +8 -10
  1188. data/spec/unit/indirector/certificate_request/file_spec.rb +0 -1
  1189. data/spec/unit/indirector/certificate_request/rest_spec.rb +0 -1
  1190. data/spec/unit/indirector/direct_file_server_spec.rb +47 -50
  1191. data/spec/unit/indirector/envelope_spec.rb +1 -2
  1192. data/spec/unit/indirector/exec_spec.rb +29 -24
  1193. data/spec/unit/indirector/face_spec.rb +8 -9
  1194. data/spec/unit/indirector/facts/facter_spec.rb +131 -43
  1195. data/spec/unit/indirector/facts/json_spec.rb +255 -0
  1196. data/spec/unit/indirector/facts/network_device_spec.rb +8 -9
  1197. data/spec/unit/indirector/facts/rest_spec.rb +99 -0
  1198. data/spec/unit/indirector/facts/store_configs_spec.rb +0 -1
  1199. data/spec/unit/indirector/facts/yaml_spec.rb +95 -79
  1200. data/spec/unit/indirector/file_bucket_file/file_spec.rb +156 -100
  1201. data/spec/unit/indirector/file_bucket_file/rest_spec.rb +82 -3
  1202. data/spec/unit/indirector/file_bucket_file/selector_spec.rb +26 -9
  1203. data/spec/unit/indirector/file_content/file_server_spec.rb +0 -1
  1204. data/spec/unit/indirector/file_content/file_spec.rb +0 -1
  1205. data/spec/unit/indirector/file_content/rest_spec.rb +53 -3
  1206. data/spec/unit/indirector/file_content/selector_spec.rb +0 -1
  1207. data/spec/unit/indirector/file_metadata/file_server_spec.rb +0 -1
  1208. data/spec/unit/indirector/file_metadata/file_spec.rb +12 -13
  1209. data/spec/unit/indirector/file_metadata/http_spec.rb +194 -0
  1210. data/spec/unit/indirector/file_metadata/rest_spec.rb +110 -3
  1211. data/spec/unit/indirector/file_metadata/selector_spec.rb +0 -1
  1212. data/spec/unit/indirector/file_server_spec.rb +143 -137
  1213. data/spec/unit/indirector/indirection_spec.rb +296 -231
  1214. data/spec/unit/indirector/json_spec.rb +10 -12
  1215. data/spec/unit/indirector/key/file_spec.rb +20 -39
  1216. data/spec/unit/indirector/memory_spec.rb +6 -7
  1217. data/spec/unit/indirector/msgpack_spec.rb +10 -12
  1218. data/spec/unit/indirector/node/exec_spec.rb +43 -23
  1219. data/spec/unit/indirector/node/json_spec.rb +33 -0
  1220. data/spec/unit/indirector/node/memory_spec.rb +2 -4
  1221. data/spec/unit/indirector/node/msgpack_spec.rb +0 -1
  1222. data/spec/unit/indirector/node/plain_spec.rb +2 -4
  1223. data/spec/unit/indirector/node/rest_spec.rb +57 -3
  1224. data/spec/unit/indirector/node/store_configs_spec.rb +0 -1
  1225. data/spec/unit/indirector/node/yaml_spec.rb +0 -1
  1226. data/spec/unit/indirector/none_spec.rb +5 -5
  1227. data/spec/unit/indirector/plain_spec.rb +7 -8
  1228. data/spec/unit/indirector/report/json_spec.rb +72 -0
  1229. data/spec/unit/indirector/report/msgpack_spec.rb +0 -1
  1230. data/spec/unit/indirector/report/processor_spec.rb +21 -22
  1231. data/spec/unit/indirector/report/rest_spec.rb +58 -52
  1232. data/spec/unit/indirector/report/yaml_spec.rb +72 -9
  1233. data/spec/unit/indirector/request_spec.rb +27 -29
  1234. data/spec/unit/indirector/resource/ral_spec.rb +40 -82
  1235. data/spec/unit/indirector/resource/store_configs_spec.rb +0 -1
  1236. data/spec/unit/indirector/rest_spec.rb +166 -107
  1237. data/spec/unit/indirector/ssl_file_spec.rb +99 -122
  1238. data/spec/unit/indirector/status/local_spec.rb +0 -1
  1239. data/spec/unit/indirector/status/rest_spec.rb +43 -3
  1240. data/spec/unit/indirector/terminus_spec.rb +29 -29
  1241. data/spec/unit/indirector/yaml_spec.rb +92 -70
  1242. data/spec/unit/indirector_spec.rb +2 -4
  1243. data/spec/unit/info_service_spec.rb +195 -11
  1244. data/spec/unit/interface/action_builder_spec.rb +0 -1
  1245. data/spec/unit/interface/action_manager_spec.rb +1 -2
  1246. data/spec/unit/interface/action_spec.rb +36 -13
  1247. data/spec/unit/interface/documentation_spec.rb +0 -1
  1248. data/spec/unit/interface/face_collection_spec.rb +19 -12
  1249. data/spec/unit/interface_spec.rb +6 -6
  1250. data/spec/unit/module_spec.rb +135 -113
  1251. data/spec/unit/module_tool/applications/installer_spec.rb +116 -13
  1252. data/spec/unit/module_tool/applications/searcher_spec.rb +3 -3
  1253. data/spec/unit/module_tool/applications/uninstaller_spec.rb +16 -0
  1254. data/spec/unit/module_tool/applications/unpacker_spec.rb +17 -17
  1255. data/spec/unit/module_tool/applications/upgrader_spec.rb +11 -5
  1256. data/spec/unit/module_tool/install_directory_spec.rb +8 -8
  1257. data/spec/unit/module_tool/installed_modules_spec.rb +3 -3
  1258. data/spec/unit/module_tool/tar/gnu_spec.rb +6 -6
  1259. data/spec/unit/module_tool/tar/mini_spec.rb +32 -12
  1260. data/spec/unit/module_tool/tar_spec.rb +12 -13
  1261. data/spec/unit/module_tool_spec.rb +7 -34
  1262. data/spec/unit/network/auth_config_parser_spec.rb +11 -13
  1263. data/spec/unit/network/authconfig_spec.rb +16 -20
  1264. data/spec/unit/network/authorization_spec.rb +4 -5
  1265. data/spec/unit/network/authstore_spec.rb +0 -16
  1266. data/spec/unit/network/format_handler_spec.rb +0 -1
  1267. data/spec/unit/network/format_spec.rb +9 -10
  1268. data/spec/unit/network/format_support_spec.rb +29 -29
  1269. data/spec/unit/network/formats_spec.rb +82 -18
  1270. data/spec/unit/network/http/api/indirected_routes_spec.rb +54 -48
  1271. data/spec/unit/network/http/api/master/v3/authorization_spec.rb +7 -9
  1272. data/spec/unit/network/http/api/master/v3/environment_spec.rb +1 -2
  1273. data/spec/unit/network/http/api/master/v3/environments_spec.rb +11 -23
  1274. data/spec/unit/network/http/api_spec.rb +0 -28
  1275. data/spec/unit/network/http/compression_spec.rb +27 -25
  1276. data/spec/unit/network/http/connection_spec.rb +537 -275
  1277. data/spec/unit/network/http/factory_spec.rb +82 -36
  1278. data/spec/unit/network/http/handler_spec.rb +10 -23
  1279. data/spec/unit/network/http/nocache_pool_spec.rb +32 -11
  1280. data/spec/unit/network/http/pool_spec.rb +166 -59
  1281. data/spec/unit/network/http/request_spec.rb +0 -2
  1282. data/spec/unit/network/http/response_spec.rb +11 -13
  1283. data/spec/unit/network/http/route_spec.rb +0 -1
  1284. data/spec/unit/network/http/session_spec.rb +9 -3
  1285. data/spec/unit/network/http/site_spec.rb +7 -1
  1286. data/spec/unit/network/http_pool_spec.rb +99 -48
  1287. data/spec/unit/network/http_spec.rb +1 -2
  1288. data/spec/unit/network/resolver_spec.rb +103 -29
  1289. data/spec/unit/network/rights_spec.rb +52 -53
  1290. data/spec/unit/network/uri_spec.rb +47 -0
  1291. data/spec/unit/node/environment_spec.rb +72 -24
  1292. data/spec/unit/node/facts_spec.rb +20 -8
  1293. data/spec/unit/node_spec.rb +38 -23
  1294. data/spec/unit/other/selinux_spec.rb +0 -72
  1295. data/spec/unit/parameter/boolean_spec.rb +1 -2
  1296. data/spec/unit/parameter/package_options_spec.rb +1 -2
  1297. data/spec/unit/parameter/path_spec.rb +0 -1
  1298. data/spec/unit/parameter/value_collection_spec.rb +0 -1
  1299. data/spec/unit/parameter/value_spec.rb +0 -1
  1300. data/spec/unit/parameter_spec.rb +9 -9
  1301. data/spec/unit/parser/ast/block_expression_spec.rb +7 -9
  1302. data/spec/unit/parser/ast/leaf_spec.rb +20 -21
  1303. data/spec/unit/parser/compiler_spec.rb +93 -114
  1304. data/spec/unit/parser/environment_compiler_spec.rb +67 -23
  1305. data/spec/unit/parser/files_spec.rb +0 -1
  1306. data/spec/unit/parser/functions/create_resources_spec.rb +10 -1
  1307. data/spec/unit/parser/functions/digest_spec.rb +0 -5
  1308. data/spec/unit/parser/functions/fail_spec.rb +2 -7
  1309. data/spec/unit/parser/functions/file_spec.rb +13 -18
  1310. data/spec/unit/parser/functions/fqdn_rand_spec.rb +39 -2
  1311. data/spec/unit/parser/functions/generate_spec.rb +36 -39
  1312. data/spec/unit/parser/functions/inline_template_spec.rb +7 -5
  1313. data/spec/unit/parser/functions/realize_spec.rb +9 -0
  1314. data/spec/unit/parser/functions/regsubst_spec.rb +0 -5
  1315. data/spec/unit/parser/functions/scanf_spec.rb +0 -5
  1316. data/spec/unit/parser/functions/shellquote_spec.rb +0 -1
  1317. data/spec/unit/parser/functions/split_spec.rb +0 -5
  1318. data/spec/unit/parser/functions/sprintf_spec.rb +0 -5
  1319. data/spec/unit/parser/functions/tag_spec.rb +8 -6
  1320. data/spec/unit/parser/functions/tagged_spec.rb +36 -0
  1321. data/spec/unit/parser/functions/template_spec.rb +21 -17
  1322. data/spec/unit/parser/functions/versioncmp_spec.rb +1 -6
  1323. data/spec/unit/parser/functions_spec.rb +28 -4
  1324. data/spec/unit/parser/relationship_spec.rb +0 -1
  1325. data/spec/unit/parser/resource/param_spec.rb +1 -1
  1326. data/spec/unit/parser/resource_spec.rb +53 -48
  1327. data/spec/unit/parser/scope_spec.rb +72 -39
  1328. data/spec/unit/parser/templatewrapper_spec.rb +25 -15
  1329. data/spec/unit/parser/type_loader_spec.rb +18 -20
  1330. data/spec/unit/plan_spec.rb +65 -0
  1331. data/spec/unit/pops/adaptable_spec.rb +0 -2
  1332. data/spec/unit/pops/benchmark_spec.rb +0 -1
  1333. data/spec/unit/pops/evaluator/access_ops_spec.rb +0 -1
  1334. data/spec/unit/pops/evaluator/arithmetic_ops_spec.rb +10 -1
  1335. data/spec/unit/pops/evaluator/basic_expressions_spec.rb +0 -1
  1336. data/spec/unit/pops/evaluator/collections_ops_spec.rb +0 -1
  1337. data/spec/unit/pops/evaluator/comparison_ops_spec.rb +0 -1
  1338. data/spec/unit/pops/evaluator/conditionals_spec.rb +1 -2
  1339. data/spec/unit/pops/evaluator/deferred_resolver_spec.rb +20 -0
  1340. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +133 -17
  1341. data/spec/unit/pops/evaluator/logical_ops_spec.rb +0 -1
  1342. data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +24 -11
  1343. data/spec/unit/pops/evaluator/string_interpolation_spec.rb +0 -1
  1344. data/spec/unit/pops/evaluator/variables_spec.rb +0 -1
  1345. data/spec/unit/pops/factory_rspec_helper.rb +1 -1
  1346. data/spec/unit/pops/factory_spec.rb +8 -9
  1347. data/spec/unit/pops/issues_spec.rb +40 -26
  1348. data/spec/unit/pops/loaders/dependency_loader_spec.rb +2 -2
  1349. data/spec/unit/pops/loaders/loader_spec.rb +516 -0
  1350. data/spec/unit/pops/loaders/loaders_spec.rb +294 -46
  1351. data/spec/unit/pops/loaders/module_loaders_spec.rb +112 -0
  1352. data/spec/unit/pops/loaders/static_loader_spec.rb +16 -44
  1353. data/spec/unit/pops/lookup/context_spec.rb +0 -1
  1354. data/spec/unit/pops/lookup/interpolation_spec.rb +7 -3
  1355. data/spec/unit/pops/lookup/lookup_spec.rb +81 -0
  1356. data/spec/unit/pops/merge_strategy_spec.rb +0 -1
  1357. data/spec/unit/pops/migration_spec.rb +3 -5
  1358. data/spec/unit/pops/model/model_spec.rb +5 -1
  1359. data/spec/unit/pops/model/pn_transformer_spec.rb +56 -0
  1360. data/spec/unit/pops/parser/lexer2_spec.rb +89 -26
  1361. data/spec/unit/pops/parser/locator_spec.rb +63 -1
  1362. data/spec/unit/pops/parser/parse_application_spec.rb +0 -1
  1363. data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +42 -10
  1364. data/spec/unit/pops/parser/parse_calls_spec.rb +28 -1
  1365. data/spec/unit/pops/parser/parse_capabilities_spec.rb +0 -1
  1366. data/spec/unit/pops/parser/parse_conditionals_spec.rb +12 -1
  1367. data/spec/unit/pops/parser/parse_containers_spec.rb +2 -14
  1368. data/spec/unit/pops/parser/parse_functions_spec.rb +1 -1
  1369. data/spec/unit/pops/parser/parse_heredoc_spec.rb +124 -12
  1370. data/spec/unit/pops/parser/parse_lambda_spec.rb +1 -1
  1371. data/spec/unit/pops/parser/parse_plan_spec.rb +47 -0
  1372. data/spec/unit/pops/parser/parse_resource_spec.rb +35 -36
  1373. data/spec/unit/pops/parser/parse_site_spec.rb +0 -1
  1374. data/spec/unit/pops/parser/pn_parser_spec.rb +100 -0
  1375. data/spec/unit/pops/pn_spec.rb +147 -0
  1376. data/spec/unit/pops/puppet_stack_spec.rb +38 -9
  1377. data/spec/unit/pops/resource/resource_type_impl_spec.rb +0 -1
  1378. data/spec/unit/pops/serialization/packer_spec.rb +8 -0
  1379. data/spec/unit/pops/serialization/serialization_spec.rb +37 -5
  1380. data/spec/unit/pops/serialization/to_from_hr_spec.rb +74 -4
  1381. data/spec/unit/pops/serialization/to_stringified_spec.rb +162 -0
  1382. data/spec/unit/pops/types/deferred_spec.rb +87 -0
  1383. data/spec/unit/pops/types/error_spec.rb +207 -0
  1384. data/spec/unit/pops/types/iterable_spec.rb +1 -1
  1385. data/spec/unit/pops/types/p_init_type_spec.rb +98 -0
  1386. data/spec/unit/pops/types/p_object_type_spec.rb +298 -13
  1387. data/spec/unit/pops/types/p_sem_ver_type_spec.rb +18 -0
  1388. data/spec/unit/pops/types/p_sensitive_type_spec.rb +18 -0
  1389. data/spec/unit/pops/types/p_timespan_type_spec.rb +33 -4
  1390. data/spec/unit/pops/types/p_timestamp_type_spec.rb +28 -2
  1391. data/spec/unit/pops/types/p_type_set_type_spec.rb +106 -2
  1392. data/spec/unit/pops/types/p_uri_type_spec.rb +191 -0
  1393. data/spec/unit/pops/types/recursion_guard_spec.rb +10 -10
  1394. data/spec/unit/pops/types/ruby_generator_spec.rb +87 -54
  1395. data/spec/unit/pops/types/string_converter_spec.rb +39 -6
  1396. data/spec/unit/pops/types/task_spec.rb +411 -0
  1397. data/spec/unit/pops/types/type_asserter_spec.rb +2 -2
  1398. data/spec/unit/pops/types/type_calculator_spec.rb +120 -53
  1399. data/spec/unit/pops/types/type_formatter_spec.rb +31 -13
  1400. data/spec/unit/pops/types/type_mismatch_describer_spec.rb +9 -0
  1401. data/spec/unit/pops/types/type_parser_spec.rb +26 -14
  1402. data/spec/unit/pops/types/types_spec.rb +99 -6
  1403. data/spec/unit/pops/validator/validator_spec.rb +455 -7
  1404. data/spec/unit/pops/visitor_spec.rb +0 -1
  1405. data/spec/unit/property/boolean_spec.rb +1 -1
  1406. data/spec/unit/property/ensure_spec.rb +0 -1
  1407. data/spec/unit/property/keyvalue_spec.rb +127 -38
  1408. data/spec/unit/property/list_spec.rb +26 -27
  1409. data/spec/unit/property/ordered_list_spec.rb +10 -14
  1410. data/spec/unit/property_spec.rb +55 -46
  1411. data/spec/unit/provider/aix_object_spec.rb +821 -0
  1412. data/spec/unit/provider/command_spec.rb +9 -9
  1413. data/spec/unit/provider/exec/posix_spec.rb +38 -15
  1414. data/spec/unit/provider/exec/shell_spec.rb +2 -2
  1415. data/spec/unit/provider/exec/windows_spec.rb +4 -6
  1416. data/spec/unit/provider/exec_spec.rb +210 -1
  1417. data/spec/unit/provider/file/posix_spec.rb +22 -24
  1418. data/spec/unit/provider/file/windows_spec.rb +17 -19
  1419. data/spec/unit/provider/group/aix_spec.rb +91 -0
  1420. data/spec/unit/provider/group/groupadd_spec.rb +237 -29
  1421. data/spec/unit/provider/group/ldap_spec.rb +33 -36
  1422. data/spec/unit/provider/group/pw_spec.rb +15 -18
  1423. data/spec/unit/provider/group/windows_adsi_spec.rb +173 -68
  1424. data/spec/unit/provider/ldap_spec.rb +61 -63
  1425. data/spec/unit/provider/nameservice/directoryservice_spec.rb +102 -109
  1426. data/spec/unit/provider/nameservice_spec.rb +99 -100
  1427. data/spec/unit/provider/package/aix_spec.rb +48 -22
  1428. data/spec/unit/provider/package/appdmg_spec.rb +13 -13
  1429. data/spec/unit/provider/package/apt_spec.rb +174 -37
  1430. data/spec/unit/provider/package/aptitude_spec.rb +8 -7
  1431. data/spec/unit/provider/package/aptrpm_spec.rb +8 -13
  1432. data/spec/unit/provider/package/base_spec.rb +7 -6
  1433. data/spec/unit/provider/package/dnf_spec.rb +43 -18
  1434. data/spec/unit/provider/package/dnfmodule_spec.rb +256 -0
  1435. data/spec/unit/provider/package/dpkg_spec.rb +348 -137
  1436. data/spec/unit/provider/package/freebsd_spec.rb +15 -18
  1437. data/spec/unit/provider/package/gem_spec.rb +210 -83
  1438. data/spec/unit/provider/package/hpux_spec.rb +15 -18
  1439. data/spec/unit/provider/package/macports_spec.rb +56 -54
  1440. data/spec/unit/provider/package/nim_spec.rb +76 -59
  1441. data/spec/unit/provider/package/openbsd_spec.rb +62 -49
  1442. data/spec/unit/provider/package/opkg_spec.rb +23 -26
  1443. data/spec/unit/provider/package/pacman_spec.rb +103 -133
  1444. data/spec/unit/provider/package/pip2_spec.rb +36 -0
  1445. data/spec/unit/provider/package/pip3_spec.rb +20 -6
  1446. data/spec/unit/provider/package/pip_spec.rb +252 -157
  1447. data/spec/unit/provider/package/pkg_spec.rb +194 -98
  1448. data/spec/unit/provider/package/pkgdmg_spec.rb +64 -66
  1449. data/spec/unit/provider/package/pkgin_spec.rb +21 -24
  1450. data/spec/unit/provider/package/pkgng_spec.rb +80 -38
  1451. data/spec/unit/provider/package/pkgutil_spec.rb +45 -49
  1452. data/spec/unit/provider/package/portage_spec.rb +89 -74
  1453. data/spec/unit/provider/package/puppet_gem_spec.rb +53 -21
  1454. data/spec/unit/provider/package/puppetserver_gem_spec.rb +137 -0
  1455. data/spec/unit/provider/package/rpm_spec.rb +280 -261
  1456. data/spec/unit/provider/package/sun_spec.rb +16 -18
  1457. data/spec/unit/provider/package/tdnf_spec.rb +9 -12
  1458. data/spec/unit/provider/package/up2date_spec.rb +2 -4
  1459. data/spec/unit/provider/package/urpmi_spec.rb +18 -14
  1460. data/spec/unit/provider/package/windows/exe_package_spec.rb +32 -18
  1461. data/spec/unit/provider/package/windows/msi_package_spec.rb +20 -23
  1462. data/spec/unit/provider/package/windows/package_spec.rb +38 -43
  1463. data/spec/unit/provider/package/windows_spec.rb +51 -36
  1464. data/spec/unit/provider/package/yum_spec.rb +442 -13
  1465. data/spec/unit/provider/package/zypper_spec.rb +202 -106
  1466. data/spec/unit/provider/package_targetable_spec.rb +60 -0
  1467. data/spec/unit/provider/parsedfile_spec.rb +81 -46
  1468. data/spec/unit/provider/service/base_spec.rb +6 -11
  1469. data/spec/unit/provider/service/bsd_spec.rb +52 -51
  1470. data/spec/unit/provider/service/daemontools_spec.rb +71 -52
  1471. data/spec/unit/provider/service/debian_spec.rb +51 -53
  1472. data/spec/unit/provider/service/freebsd_spec.rb +21 -21
  1473. data/spec/unit/provider/service/gentoo_spec.rb +78 -82
  1474. data/spec/unit/provider/service/init_spec.rb +117 -67
  1475. data/spec/unit/provider/service/launchd_spec.rb +196 -114
  1476. data/spec/unit/provider/service/openbsd_spec.rb +98 -92
  1477. data/spec/unit/provider/service/openrc_spec.rb +73 -75
  1478. data/spec/unit/provider/service/openwrt_spec.rb +36 -44
  1479. data/spec/unit/provider/service/rcng_spec.rb +20 -21
  1480. data/spec/unit/provider/service/redhat_spec.rb +76 -58
  1481. data/spec/unit/provider/service/runit_spec.rb +62 -43
  1482. data/spec/unit/provider/service/smf_spec.rb +143 -73
  1483. data/spec/unit/provider/service/src_spec.rb +60 -69
  1484. data/spec/unit/provider/service/systemd_spec.rb +330 -155
  1485. data/spec/unit/provider/service/upstart_spec.rb +106 -84
  1486. data/spec/unit/provider/service/windows_spec.rb +336 -91
  1487. data/spec/unit/provider/user/aix_spec.rb +263 -112
  1488. data/spec/unit/provider/user/directoryservice_spec.rb +229 -124
  1489. data/spec/unit/provider/user/hpux_spec.rb +19 -20
  1490. data/spec/unit/provider/user/ldap_spec.rb +80 -83
  1491. data/spec/unit/provider/user/openbsd_spec.rb +11 -12
  1492. data/spec/unit/provider/user/pw_spec.rb +82 -44
  1493. data/spec/unit/provider/user/user_role_add_spec.rb +109 -92
  1494. data/spec/unit/provider/user/useradd_spec.rb +479 -90
  1495. data/spec/unit/provider/user/windows_adsi_spec.rb +144 -63
  1496. data/spec/unit/provider_spec.rb +241 -47
  1497. data/spec/unit/puppet_pal_2pec.rb +1033 -0
  1498. data/spec/unit/puppet_pal_catalog_spec.rb +962 -0
  1499. data/spec/unit/puppet_pal_spec.rb +3 -0
  1500. data/spec/unit/puppet_spec.rb +58 -25
  1501. data/spec/unit/relationship_spec.rb +0 -1
  1502. data/spec/unit/reports/http_spec.rb +70 -54
  1503. data/spec/unit/reports/store_spec.rb +20 -17
  1504. data/spec/unit/reports_spec.rb +12 -14
  1505. data/spec/unit/resource/capability_finder_spec.rb +31 -29
  1506. data/spec/unit/resource/catalog_spec.rb +104 -82
  1507. data/spec/unit/resource/status_spec.rb +23 -12
  1508. data/spec/unit/resource/type_collection_spec.rb +19 -17
  1509. data/spec/unit/resource/type_spec.rb +52 -38
  1510. data/spec/unit/resource_spec.rb +207 -49
  1511. data/spec/unit/rest/route_spec.rb +132 -0
  1512. data/spec/unit/scheduler/job_spec.rb +0 -1
  1513. data/spec/unit/scheduler/scheduler_spec.rb +0 -1
  1514. data/spec/unit/scheduler/splay_job_spec.rb +1 -2
  1515. data/spec/unit/settings/array_setting_spec.rb +1 -1
  1516. data/spec/unit/settings/autosign_setting_spec.rb +11 -11
  1517. data/spec/unit/settings/certificate_revocation_setting_spec.rb +1 -1
  1518. data/spec/unit/settings/config_file_spec.rb +9 -1
  1519. data/spec/unit/settings/directory_setting_spec.rb +2 -7
  1520. data/spec/unit/settings/duration_setting_spec.rb +1 -2
  1521. data/spec/unit/settings/enum_setting_spec.rb +1 -1
  1522. data/spec/unit/settings/environment_conf_spec.rb +4 -6
  1523. data/spec/unit/settings/file_setting_spec.rb +54 -48
  1524. data/spec/unit/settings/http_extra_headers_spec.rb +64 -0
  1525. data/spec/unit/settings/ini_file_spec.rb +314 -5
  1526. data/spec/unit/settings/path_setting_spec.rb +2 -3
  1527. data/spec/unit/settings/priority_setting_spec.rb +1 -2
  1528. data/spec/unit/settings/server_list_setting_spec.rb +21 -0
  1529. data/spec/unit/settings/string_setting_spec.rb +14 -15
  1530. data/spec/unit/settings/terminus_setting_spec.rb +1 -2
  1531. data/spec/unit/settings/value_translator_spec.rb +0 -1
  1532. data/spec/unit/settings_spec.rb +905 -448
  1533. data/spec/unit/ssl/base_spec.rb +13 -15
  1534. data/spec/unit/ssl/certificate_request_attributes_spec.rb +21 -8
  1535. data/spec/unit/ssl/certificate_request_spec.rb +84 -65
  1536. data/spec/unit/ssl/certificate_spec.rb +34 -32
  1537. data/spec/unit/ssl/digest_spec.rb +0 -1
  1538. data/spec/unit/ssl/host_spec.rb +336 -649
  1539. data/spec/unit/ssl/key_spec.rb +31 -49
  1540. data/spec/unit/ssl/oids_spec.rb +1 -0
  1541. data/spec/unit/ssl/ssl_provider_spec.rb +630 -0
  1542. data/spec/unit/ssl/state_machine_spec.rb +983 -0
  1543. data/spec/unit/ssl/validator_spec.rb +74 -214
  1544. data/spec/unit/ssl/verifier_spec.rb +123 -0
  1545. data/spec/unit/task_spec.rb +216 -27
  1546. data/spec/unit/test/test_helper_spec.rb +17 -0
  1547. data/spec/unit/transaction/additional_resource_generator_spec.rb +66 -72
  1548. data/spec/unit/transaction/event_manager_spec.rb +114 -89
  1549. data/spec/unit/transaction/event_spec.rb +16 -15
  1550. data/spec/unit/transaction/persistence_spec.rb +83 -27
  1551. data/spec/unit/transaction/report_spec.rb +55 -27
  1552. data/spec/unit/transaction/resource_harness_spec.rb +72 -33
  1553. data/spec/unit/transaction_spec.rb +328 -115
  1554. data/spec/unit/type/component_spec.rb +0 -1
  1555. data/spec/unit/type/exec_spec.rb +210 -95
  1556. data/spec/unit/type/file/checksum_spec.rb +29 -10
  1557. data/spec/unit/type/file/checksum_value_spec.rb +31 -32
  1558. data/spec/unit/type/file/content_spec.rb +72 -58
  1559. data/spec/unit/type/file/ctime_spec.rb +0 -1
  1560. data/spec/unit/type/file/ensure_spec.rb +13 -15
  1561. data/spec/unit/type/file/group_spec.rb +5 -7
  1562. data/spec/unit/type/file/mode_spec.rb +4 -6
  1563. data/spec/unit/type/file/mtime_spec.rb +0 -1
  1564. data/spec/unit/type/file/owner_spec.rb +6 -8
  1565. data/spec/unit/type/file/selinux_spec.rb +16 -21
  1566. data/spec/unit/type/file/source_spec.rb +186 -126
  1567. data/spec/unit/type/file/type_spec.rb +0 -1
  1568. data/spec/unit/type/file_spec.rb +321 -267
  1569. data/spec/unit/type/filebucket_spec.rb +12 -11
  1570. data/spec/unit/type/group_spec.rb +32 -11
  1571. data/spec/unit/type/noop_metaparam_spec.rb +1 -2
  1572. data/spec/unit/type/package/package_settings_spec.rb +44 -23
  1573. data/spec/unit/type/package_spec.rb +76 -54
  1574. data/spec/unit/type/resources_spec.rb +105 -75
  1575. data/spec/unit/type/schedule_spec.rb +29 -29
  1576. data/spec/unit/type/service_spec.rb +252 -76
  1577. data/spec/unit/type/stage_spec.rb +0 -1
  1578. data/spec/unit/type/tidy_spec.rb +92 -61
  1579. data/spec/unit/type/user_spec.rb +79 -143
  1580. data/spec/unit/type/whit_spec.rb +0 -1
  1581. data/spec/unit/type_spec.rb +288 -140
  1582. data/spec/unit/util/at_fork_spec.rb +21 -21
  1583. data/spec/unit/util/autoload_spec.rb +126 -94
  1584. data/spec/unit/util/backups_spec.rb +33 -35
  1585. data/spec/unit/util/character_encoding_spec.rb +5 -48
  1586. data/spec/unit/util/checksums_spec.rb +57 -42
  1587. data/spec/unit/util/colors_spec.rb +1 -2
  1588. data/spec/unit/util/command_line_spec.rb +50 -25
  1589. data/spec/unit/util/constant_inflector_spec.rb +0 -1
  1590. data/spec/unit/util/diff_spec.rb +12 -5
  1591. data/spec/unit/util/docs_spec.rb +1 -1
  1592. data/spec/unit/util/errors_spec.rb +0 -1
  1593. data/spec/unit/util/execution_spec.rb +288 -167
  1594. data/spec/unit/util/execution_stub_spec.rb +2 -3
  1595. data/spec/unit/util/feature_spec.rb +56 -29
  1596. data/spec/unit/util/filetype_spec.rb +62 -50
  1597. data/spec/unit/util/http_proxy_spec.rb +178 -17
  1598. data/spec/unit/util/inifile_spec.rb +70 -52
  1599. data/spec/unit/util/json_lockfile_spec.rb +3 -5
  1600. data/spec/unit/util/json_spec.rb +126 -0
  1601. data/spec/unit/util/ldap/connection_spec.rb +26 -25
  1602. data/spec/unit/util/ldap/generator_spec.rb +0 -1
  1603. data/spec/unit/util/ldap/manager_spec.rb +100 -129
  1604. data/spec/unit/util/lockfile_spec.rb +1 -2
  1605. data/spec/unit/util/log/destinations_spec.rb +68 -37
  1606. data/spec/unit/util/log_spec.rb +55 -151
  1607. data/spec/unit/util/logging_spec.rb +323 -105
  1608. data/spec/unit/util/metric_spec.rb +0 -1
  1609. data/spec/unit/util/monkey_patches_spec.rb +23 -13
  1610. data/spec/unit/util/multi_match_spec.rb +0 -1
  1611. data/spec/unit/util/network_device/config_spec.rb +0 -1
  1612. data/spec/unit/util/network_device/transport/base_spec.rb +5 -6
  1613. data/spec/unit/util/network_device_spec.rb +7 -9
  1614. data/spec/unit/util/package/version/debian_spec.rb +83 -0
  1615. data/spec/unit/util/package/version/pip_spec.rb +464 -0
  1616. data/spec/unit/util/package/version/range_spec.rb +175 -0
  1617. data/spec/unit/util/package/version/rpm_spec.rb +121 -0
  1618. data/spec/unit/util/package_spec.rb +0 -1
  1619. data/spec/unit/util/pidlock_spec.rb +130 -15
  1620. data/spec/unit/util/plist_spec.rb +66 -33
  1621. data/spec/unit/util/posix_spec.rb +426 -47
  1622. data/spec/unit/util/profiler/object_counts_spec.rb +2 -1
  1623. data/spec/unit/util/rdoc_spec.rb +9 -10
  1624. data/spec/unit/util/reference_spec.rb +0 -1
  1625. data/spec/unit/util/resource_template_spec.rb +20 -20
  1626. data/spec/unit/util/retry_action_spec.rb +7 -8
  1627. data/spec/unit/util/rpm_compare_spec.rb +196 -0
  1628. data/spec/unit/util/rubygems_spec.rb +8 -43
  1629. data/spec/unit/util/run_mode_spec.rb +16 -17
  1630. data/spec/unit/util/selinux_spec.rb +204 -98
  1631. data/spec/unit/util/skip_tags_spec.rb +14 -0
  1632. data/spec/unit/util/splayer_spec.rb +8 -9
  1633. data/spec/unit/util/ssl_spec.rb +0 -1
  1634. data/spec/unit/util/storage_spec.rb +125 -12
  1635. data/spec/unit/util/suidmanager_spec.rb +83 -91
  1636. data/spec/unit/util/symbolic_file_mode_spec.rb +0 -1
  1637. data/spec/unit/util/tag_set_spec.rb +8 -2
  1638. data/spec/unit/util/tagging_spec.rb +27 -9
  1639. data/spec/unit/util/terminal_spec.rb +9 -10
  1640. data/spec/unit/util/user_attr_spec.rb +1 -2
  1641. data/spec/unit/util/warnings_spec.rb +3 -4
  1642. data/spec/unit/util/watcher/periodic_watcher_spec.rb +2 -2
  1643. data/spec/unit/util/watcher_spec.rb +51 -21
  1644. data/spec/unit/util/windows/access_control_entry_spec.rb +1 -2
  1645. data/spec/unit/util/windows/access_control_list_spec.rb +1 -2
  1646. data/spec/unit/util/windows/adsi_spec.rb +285 -137
  1647. data/spec/unit/util/windows/api_types_spec.rb +105 -42
  1648. data/spec/unit/util/windows/eventlog_spec.rb +10 -13
  1649. data/spec/unit/util/windows/file_spec.rb +0 -1
  1650. data/spec/unit/util/windows/root_certs_spec.rb +1 -2
  1651. data/spec/unit/util/windows/security_descriptor_spec.rb +1 -3
  1652. data/spec/unit/util/windows/service_spec.rb +677 -0
  1653. data/spec/unit/util/windows/sid_spec.rb +131 -21
  1654. data/spec/unit/util/windows/string_spec.rb +1 -2
  1655. data/spec/unit/util/windows_spec.rb +23 -0
  1656. data/spec/unit/util/yaml_spec.rb +193 -34
  1657. data/spec/unit/util_spec.rb +110 -130
  1658. data/spec/unit/version_spec.rb +6 -6
  1659. data/spec/unit/x509/cert_provider_spec.rb +606 -0
  1660. data/spec/unit/x509/pem_store_spec.rb +160 -0
  1661. data/tasks/benchmark.rake +41 -0
  1662. data/tasks/ci.rake +0 -5
  1663. data/tasks/generate_cert_fixtures.rake +194 -0
  1664. data/tasks/manpages.rake +15 -36
  1665. data/tasks/parallel.rake +3 -3
  1666. data/tasks/parser.rake +11 -3
  1667. metadata +3497 -3514
  1668. data/COMMITTERS.md +0 -244
  1669. data/MAINTAINERS +0 -66
  1670. data/ext/README.environment +0 -8
  1671. data/ext/autotest/Rakefile +0 -8
  1672. data/ext/autotest/config +0 -43
  1673. data/ext/autotest/readme.rst +0 -16
  1674. data/ext/cert_inspector +0 -140
  1675. data/ext/dbfix.sql +0 -132
  1676. data/ext/debian/README.Debian +0 -8
  1677. data/ext/debian/README.source +0 -2
  1678. data/ext/debian/TODO.Debian +0 -1
  1679. data/ext/debian/changelog.erb +0 -1122
  1680. data/ext/debian/compat +0 -1
  1681. data/ext/debian/control +0 -144
  1682. data/ext/debian/copyright +0 -361
  1683. data/ext/debian/docs +0 -1
  1684. data/ext/debian/fileserver.conf +0 -41
  1685. data/ext/debian/puppet-common.dirs +0 -13
  1686. data/ext/debian/puppet-common.install +0 -3
  1687. data/ext/debian/puppet-common.lintian-overrides +0 -5
  1688. data/ext/debian/puppet-common.manpages +0 -28
  1689. data/ext/debian/puppet-common.postinst +0 -35
  1690. data/ext/debian/puppet-common.postrm +0 -33
  1691. data/ext/debian/puppet-el.dirs +0 -1
  1692. data/ext/debian/puppet-el.emacsen-install +0 -25
  1693. data/ext/debian/puppet-el.emacsen-remove +0 -11
  1694. data/ext/debian/puppet-el.emacsen-startup +0 -9
  1695. data/ext/debian/puppet-el.install +0 -1
  1696. data/ext/debian/puppet-testsuite.install +0 -2
  1697. data/ext/debian/puppet-testsuite.lintian-overrides +0 -4
  1698. data/ext/debian/puppet.lintian-overrides +0 -3
  1699. data/ext/debian/puppet.logrotate +0 -20
  1700. data/ext/debian/puppet.postinst +0 -20
  1701. data/ext/debian/puppet.postrm +0 -20
  1702. data/ext/debian/puppet.preinst +0 -20
  1703. data/ext/debian/puppetmaster-common.install +0 -2
  1704. data/ext/debian/puppetmaster-common.manpages +0 -2
  1705. data/ext/debian/puppetmaster-common.postinst +0 -6
  1706. data/ext/debian/puppetmaster-passenger.dirs +0 -4
  1707. data/ext/debian/puppetmaster-passenger.postinst +0 -162
  1708. data/ext/debian/puppetmaster-passenger.postrm +0 -61
  1709. data/ext/debian/puppetmaster.README.debian +0 -17
  1710. data/ext/debian/puppetmaster.default +0 -14
  1711. data/ext/debian/puppetmaster.init +0 -137
  1712. data/ext/debian/puppetmaster.lintian-overrides +0 -3
  1713. data/ext/debian/puppetmaster.postinst +0 -20
  1714. data/ext/debian/puppetmaster.postrm +0 -5
  1715. data/ext/debian/puppetmaster.preinst +0 -22
  1716. data/ext/debian/rules +0 -132
  1717. data/ext/debian/source/format +0 -1
  1718. data/ext/debian/source/options +0 -1
  1719. data/ext/debian/vim-puppet.README.Debian +0 -13
  1720. data/ext/debian/vim-puppet.dirs +0 -5
  1721. data/ext/debian/vim-puppet.yaml +0 -7
  1722. data/ext/debian/watch +0 -2
  1723. data/ext/envpuppet +0 -139
  1724. data/ext/envpuppet.bat +0 -14
  1725. data/ext/freebsd/puppetd +0 -26
  1726. data/ext/freebsd/puppetmasterd +0 -26
  1727. data/ext/gentoo/conf.d/puppet +0 -5
  1728. data/ext/gentoo/conf.d/puppetmaster +0 -12
  1729. data/ext/gentoo/init.d/puppet +0 -38
  1730. data/ext/gentoo/init.d/puppetmaster +0 -51
  1731. data/ext/gentoo/puppet/fileserver.conf +0 -41
  1732. data/ext/ips/puppet-agent +0 -44
  1733. data/ext/ips/puppet-master +0 -44
  1734. data/ext/ips/puppet.p5m.erb +0 -12
  1735. data/ext/ips/puppetagent.xml +0 -42
  1736. data/ext/ips/puppetmaster.xml +0 -42
  1737. data/ext/ips/rules +0 -19
  1738. data/ext/ips/transforms +0 -34
  1739. data/ext/ldap/puppet.schema +0 -24
  1740. data/ext/logcheck/puppet +0 -23
  1741. data/ext/osx/file_mapping.yaml +0 -33
  1742. data/ext/osx/postflight.erb +0 -109
  1743. data/ext/osx/preflight.erb +0 -52
  1744. data/ext/osx/prototype.plist.erb +0 -38
  1745. data/ext/puppet-test +0 -477
  1746. data/ext/pure_ruby_dsl/dsl_test.rb +0 -7
  1747. data/ext/rack/config.ru +0 -44
  1748. data/ext/rack/example-passenger-vhost.conf +0 -57
  1749. data/ext/redhat/fileserver.conf +0 -41
  1750. data/ext/redhat/logrotate +0 -21
  1751. data/ext/redhat/puppet.spec.erb +0 -846
  1752. data/ext/redhat/server.init +0 -128
  1753. data/ext/redhat/server.sysconfig +0 -13
  1754. data/ext/solaris/pkginfo +0 -6
  1755. data/ext/solaris/smf/puppetd.xml +0 -77
  1756. data/ext/solaris/smf/puppetmasterd.xml +0 -77
  1757. data/ext/solaris/smf/svc-puppetd +0 -64
  1758. data/ext/solaris/smf/svc-puppetmasterd +0 -60
  1759. data/ext/suse/puppet.spec +0 -310
  1760. data/ext/suse/server.init +0 -173
  1761. data/ext/upload_facts.rb +0 -119
  1762. data/ext/windows/eventlog/Rakefile +0 -32
  1763. data/ext/windows/eventlog/puppetres.dll +0 -0
  1764. data/ext/windows/eventlog/puppetres.mc +0 -18
  1765. data/ext/yaml_nodes.rb +0 -105
  1766. data/lib/puppet/application/ca.rb +0 -11
  1767. data/lib/puppet/application/certificate.rb +0 -17
  1768. data/lib/puppet/application/certificate_request.rb +0 -7
  1769. data/lib/puppet/application/certificate_revocation_list.rb +0 -7
  1770. data/lib/puppet/application/master.rb +0 -317
  1771. data/lib/puppet/bindings.rb +0 -148
  1772. data/lib/puppet/configurer/downloader_factory.rb +0 -44
  1773. data/lib/puppet/external/nagios/base.rb +0 -472
  1774. data/lib/puppet/external/nagios/grammar.ry +0 -248
  1775. data/lib/puppet/external/nagios/makefile +0 -9
  1776. data/lib/puppet/external/nagios/parser.rb +0 -400
  1777. data/lib/puppet/external/nagios.rb +0 -46
  1778. data/lib/puppet/face/ca.rb +0 -266
  1779. data/lib/puppet/face/certificate.rb +0 -165
  1780. data/lib/puppet/face/certificate_request.rb +0 -56
  1781. data/lib/puppet/face/certificate_revocation_list.rb +0 -56
  1782. data/lib/puppet/feature/rack.rb +0 -19
  1783. data/lib/puppet/graph/random_prioritizer.rb +0 -16
  1784. data/lib/puppet/graph/title_hash_prioritizer.rb +0 -16
  1785. data/lib/puppet/indirector/certificate/ca.rb +0 -9
  1786. data/lib/puppet/indirector/certificate/disabled_ca.rb +0 -22
  1787. data/lib/puppet/indirector/certificate_request/ca.rb +0 -22
  1788. data/lib/puppet/indirector/certificate_request/disabled_ca.rb +0 -22
  1789. data/lib/puppet/indirector/certificate_revocation_list/ca.rb +0 -8
  1790. data/lib/puppet/indirector/certificate_revocation_list/disabled_ca.rb +0 -22
  1791. data/lib/puppet/indirector/certificate_revocation_list/file.rb +0 -8
  1792. data/lib/puppet/indirector/certificate_revocation_list/rest.rb +0 -22
  1793. data/lib/puppet/indirector/certificate_status/file.rb +0 -91
  1794. data/lib/puppet/indirector/certificate_status/rest.rb +0 -11
  1795. data/lib/puppet/indirector/certificate_status.rb +0 -4
  1796. data/lib/puppet/indirector/key/ca.rb +0 -16
  1797. data/lib/puppet/indirector/key/disabled_ca.rb +0 -22
  1798. data/lib/puppet/indirector/ldap.rb +0 -80
  1799. data/lib/puppet/indirector/node/ldap.rb +0 -259
  1800. data/lib/puppet/indirector/node/write_only_yaml.rb +0 -39
  1801. data/lib/puppet/module_tool/applications/builder.rb +0 -148
  1802. data/lib/puppet/module_tool/skeleton/templates/generator/Gemfile +0 -18
  1803. data/lib/puppet/module_tool/skeleton/templates/generator/README.md.erb +0 -89
  1804. data/lib/puppet/module_tool/skeleton/templates/generator/Rakefile +0 -32
  1805. data/lib/puppet/module_tool/skeleton/templates/generator/examples/init.pp.erb +0 -12
  1806. data/lib/puppet/module_tool/skeleton/templates/generator/manifests/init.pp.erb +0 -48
  1807. data/lib/puppet/module_tool/skeleton/templates/generator/metadata.json.erb +0 -1
  1808. data/lib/puppet/module_tool/skeleton/templates/generator/spec/classes/init_spec.rb.erb +0 -6
  1809. data/lib/puppet/module_tool/skeleton/templates/generator/spec/spec_helper.rb +0 -1
  1810. data/lib/puppet/network/http/api/ca/v1.rb +0 -11
  1811. data/lib/puppet/network/http/api/ca.rb +0 -2
  1812. data/lib/puppet/network/http/rack/rest.rb +0 -162
  1813. data/lib/puppet/network/http/rack.rb +0 -33
  1814. data/lib/puppet/network/http/webrick/rest.rb +0 -114
  1815. data/lib/puppet/network/http/webrick.rb +0 -123
  1816. data/lib/puppet/network/server.rb +0 -39
  1817. data/lib/puppet/pops/loader/null_loader.rb +0 -60
  1818. data/lib/puppet/provider/aixobject.rb +0 -392
  1819. data/lib/puppet/provider/augeas/augeas.rb +0 -567
  1820. data/lib/puppet/provider/cisco.rb +0 -9
  1821. data/lib/puppet/provider/computer/computer.rb +0 -20
  1822. data/lib/puppet/provider/cron/crontab.rb +0 -297
  1823. data/lib/puppet/provider/host/parsed.rb +0 -46
  1824. data/lib/puppet/provider/interface/cisco.rb +0 -27
  1825. data/lib/puppet/provider/macauthorization/macauthorization.rb +0 -298
  1826. data/lib/puppet/provider/mailalias/aliases.rb +0 -50
  1827. data/lib/puppet/provider/maillist/mailman.rb +0 -108
  1828. data/lib/puppet/provider/mcx/mcxcontent.rb +0 -173
  1829. data/lib/puppet/provider/mount/parsed.rb +0 -282
  1830. data/lib/puppet/provider/mount.rb +0 -59
  1831. data/lib/puppet/provider/naginator.rb +0 -63
  1832. data/lib/puppet/provider/scheduled_task/win32_taskscheduler.rb +0 -590
  1833. data/lib/puppet/provider/selboolean/getsetsebool.rb +0 -47
  1834. data/lib/puppet/provider/selmodule/semodule.rb +0 -140
  1835. data/lib/puppet/provider/ssh_authorized_key/parsed.rb +0 -105
  1836. data/lib/puppet/provider/sshkey/parsed.rb +0 -50
  1837. data/lib/puppet/provider/vlan/cisco.rb +0 -28
  1838. data/lib/puppet/provider/yumrepo/inifile.rb +0 -305
  1839. data/lib/puppet/provider/zfs/zfs.rb +0 -88
  1840. data/lib/puppet/provider/zone/solaris.rb +0 -364
  1841. data/lib/puppet/provider/zpool/zpool.rb +0 -125
  1842. data/lib/puppet/ssl/certificate_authority/autosign_command.rb +0 -45
  1843. data/lib/puppet/ssl/certificate_authority/interface.rb +0 -324
  1844. data/lib/puppet/ssl/certificate_authority.rb +0 -553
  1845. data/lib/puppet/ssl/certificate_revocation_list.rb +0 -110
  1846. data/lib/puppet/ssl/configuration.rb +0 -61
  1847. data/lib/puppet/ssl/inventory.rb +0 -55
  1848. data/lib/puppet/type/augeas.rb +0 -211
  1849. data/lib/puppet/type/computer.rb +0 -66
  1850. data/lib/puppet/type/cron.rb +0 -475
  1851. data/lib/puppet/type/host.rb +0 -95
  1852. data/lib/puppet/type/interface.rb +0 -121
  1853. data/lib/puppet/type/k5login.rb +0 -88
  1854. data/lib/puppet/type/macauthorization.rb +0 -167
  1855. data/lib/puppet/type/mailalias.rb +0 -46
  1856. data/lib/puppet/type/maillist.rb +0 -62
  1857. data/lib/puppet/type/mcx.rb +0 -98
  1858. data/lib/puppet/type/mount.rb +0 -310
  1859. data/lib/puppet/type/nagios_command.rb +0 -3
  1860. data/lib/puppet/type/nagios_contact.rb +0 -3
  1861. data/lib/puppet/type/nagios_contactgroup.rb +0 -3
  1862. data/lib/puppet/type/nagios_host.rb +0 -3
  1863. data/lib/puppet/type/nagios_hostdependency.rb +0 -3
  1864. data/lib/puppet/type/nagios_hostescalation.rb +0 -3
  1865. data/lib/puppet/type/nagios_hostextinfo.rb +0 -3
  1866. data/lib/puppet/type/nagios_hostgroup.rb +0 -3
  1867. data/lib/puppet/type/nagios_service.rb +0 -3
  1868. data/lib/puppet/type/nagios_servicedependency.rb +0 -3
  1869. data/lib/puppet/type/nagios_serviceescalation.rb +0 -3
  1870. data/lib/puppet/type/nagios_serviceextinfo.rb +0 -3
  1871. data/lib/puppet/type/nagios_servicegroup.rb +0 -3
  1872. data/lib/puppet/type/nagios_timeperiod.rb +0 -3
  1873. data/lib/puppet/type/router.rb +0 -17
  1874. data/lib/puppet/type/scheduled_task.rb +0 -183
  1875. data/lib/puppet/type/selboolean.rb +0 -26
  1876. data/lib/puppet/type/selmodule.rb +0 -59
  1877. data/lib/puppet/type/ssh_authorized_key.rb +0 -143
  1878. data/lib/puppet/type/sshkey.rb +0 -83
  1879. data/lib/puppet/type/vlan.rb +0 -26
  1880. data/lib/puppet/type/yumrepo.rb +0 -409
  1881. data/lib/puppet/type/zfs.rb +0 -150
  1882. data/lib/puppet/type/zone.rb +0 -382
  1883. data/lib/puppet/type/zpool.rb +0 -91
  1884. data/lib/puppet/util/methodhelper.rb +0 -32
  1885. data/lib/puppet/util/nagios_maker.rb +0 -85
  1886. data/lib/puppet/util/network_device/cisco/device.rb +0 -285
  1887. data/lib/puppet/util/network_device/cisco/facts.rb +0 -72
  1888. data/lib/puppet/util/network_device/cisco/interface.rb +0 -94
  1889. data/lib/puppet/util/network_device/cisco.rb +0 -4
  1890. data/lib/puppet/util/network_device/ipcalc.rb +0 -68
  1891. data/lib/puppet/util/network_device/transport/ssh.rb +0 -126
  1892. data/lib/puppet/util/network_device/transport/telnet.rb +0 -47
  1893. data/lib/puppet/util/windows/taskscheduler.rb +0 -1276
  1894. data/lib/puppet/vendor/deep_merge/CHANGELOG +0 -45
  1895. data/lib/puppet/vendor/deep_merge/Gemfile +0 -3
  1896. data/lib/puppet/vendor/deep_merge/LICENSE +0 -21
  1897. data/lib/puppet/vendor/deep_merge/PUPPET_README.md +0 -6
  1898. data/lib/puppet/vendor/deep_merge/README.md +0 -113
  1899. data/lib/puppet/vendor/deep_merge/Rakefile +0 -19
  1900. data/lib/puppet/vendor/deep_merge/deep_merge.gemspec +0 -35
  1901. data/lib/puppet/vendor/deep_merge/lib/deep_merge/core.rb +0 -210
  1902. data/lib/puppet/vendor/deep_merge/lib/deep_merge/deep_merge_hash.rb +0 -28
  1903. data/lib/puppet/vendor/deep_merge/lib/deep_merge/rails_compat.rb +0 -27
  1904. data/lib/puppet/vendor/deep_merge/lib/deep_merge.rb +0 -2
  1905. data/lib/puppet/vendor/deep_merge/test/test_deep_merge.rb +0 -608
  1906. data/lib/puppet/vendor/load_deep_merge.rb +0 -1
  1907. data/lib/puppet/vendor/load_semantic.rb +0 -1
  1908. data/lib/puppet/vendor/load_semantic_puppet.rb +0 -1
  1909. data/lib/puppet/vendor/semantic/lib/semantic.rb +0 -5
  1910. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/dependency/graph.rb +0 -60
  1911. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/dependency/graph_node.rb +0 -117
  1912. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/dependency/module_release.rb +0 -58
  1913. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/dependency/source.rb +0 -25
  1914. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/dependency/unsatisfiable_graph.rb +0 -31
  1915. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/dependency.rb +0 -181
  1916. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/gem_version.rb +0 -3
  1917. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/version.rb +0 -203
  1918. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/version_range.rb +0 -758
  1919. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet.rb +0 -11
  1920. data/locales/ja/puppet.po +0 -11234
  1921. data/man/man8/puppet-ca.8 +0 -196
  1922. data/man/man8/puppet-cert.8 +0 -118
  1923. data/man/man8/puppet-certificate.8 +0 -240
  1924. data/man/man8/puppet-certificate_request.8 +0 -161
  1925. data/man/man8/puppet-certificate_revocation_list.8 +0 -139
  1926. data/man/man8/puppet-master.8 +0 -85
  1927. data/spec/fixtures/integration/provider/cron/crontab/create_normal_entry +0 -19
  1928. data/spec/fixtures/integration/provider/cron/crontab/create_special_entry +0 -18
  1929. data/spec/fixtures/integration/provider/cron/crontab/crontab_user1 +0 -15
  1930. data/spec/fixtures/integration/provider/cron/crontab/crontab_user2 +0 -4
  1931. data/spec/fixtures/integration/provider/cron/crontab/modify_entry +0 -13
  1932. data/spec/fixtures/integration/provider/cron/crontab/moved_cronjob_input1 +0 -15
  1933. data/spec/fixtures/integration/provider/cron/crontab/moved_cronjob_input2 +0 -6
  1934. data/spec/fixtures/integration/provider/cron/crontab/purged +0 -8
  1935. data/spec/fixtures/integration/provider/cron/crontab/remove_named_resource +0 -12
  1936. data/spec/fixtures/integration/provider/cron/crontab/remove_unnamed_resource +0 -14
  1937. data/spec/fixtures/integration/provider/cron/crontab/unspecialized +0 -15
  1938. data/spec/fixtures/integration/provider/mailalias/aliases/test1 +0 -31
  1939. data/spec/fixtures/integration/provider/sshkey/sample +0 -21
  1940. data/spec/fixtures/unit/provider/augeas/augeas/augeas/lenses/test.aug +0 -13
  1941. data/spec/fixtures/unit/provider/augeas/augeas/etc/fstab +0 -10
  1942. data/spec/fixtures/unit/provider/augeas/augeas/etc/hosts +0 -6
  1943. data/spec/fixtures/unit/provider/augeas/augeas/etc/test +0 -3
  1944. data/spec/fixtures/unit/provider/augeas/augeas/test.aug +0 -13
  1945. data/spec/fixtures/unit/provider/host/parsed/valid_hosts +0 -19
  1946. data/spec/fixtures/unit/provider/mount/mount-output.aix.txt +0 -7
  1947. data/spec/fixtures/unit/provider/mount/parsed/aix.filesystems +0 -152
  1948. data/spec/fixtures/unit/provider/mount/parsed/aix.mount +0 -11
  1949. data/spec/fixtures/unit/provider/mount/parsed/darwin.mount +0 -6
  1950. data/spec/fixtures/unit/provider/mount/parsed/freebsd.fstab +0 -8
  1951. data/spec/fixtures/unit/provider/mount/parsed/freebsd.mount +0 -3
  1952. data/spec/fixtures/unit/provider/mount/parsed/hpux.mount +0 -17
  1953. data/spec/fixtures/unit/provider/mount/parsed/linux.fstab +0 -11
  1954. data/spec/fixtures/unit/provider/mount/parsed/linux.mount +0 -5
  1955. data/spec/fixtures/unit/provider/mount/parsed/netbsd.fstab +0 -9
  1956. data/spec/fixtures/unit/provider/mount/parsed/netbsd.mount +0 -8
  1957. data/spec/fixtures/unit/provider/mount/parsed/openbsd.fstab +0 -4
  1958. data/spec/fixtures/unit/provider/mount/parsed/openbsd.mount +0 -4
  1959. data/spec/fixtures/unit/provider/mount/parsed/solaris.fstab +0 -11
  1960. data/spec/fixtures/unit/provider/mount/parsed/solaris.mount +0 -6
  1961. data/spec/fixtures/unit/provider/naginator/define_empty_param +0 -6
  1962. data/spec/fixtures/unit/provider/package/pkgng/pkg.info +0 -8
  1963. data/spec/fixtures/unit/provider/package/pkgng/pkg.query_absent +0 -1
  1964. data/spec/fixtures/unit/provider/ssh_authorized_key/parsed/authorized_keys +0 -7
  1965. data/spec/fixtures/unit/provider/ssh_authorized_key/parsed/authorized_keys1 +0 -3
  1966. data/spec/fixtures/unit/provider/ssh_authorized_key/parsed/authorized_keys2 +0 -1
  1967. data/spec/fixtures/unit/provider/sshkey/parsed/sample +0 -21
  1968. data/spec/fixtures/unit/provider/sshkey/parsed/sample_with_blank_lines +0 -8
  1969. data/spec/fixtures/unit/provider/zfs/zfs/zfs-list.out +0 -2
  1970. data/spec/fixtures/unit/provider/zpool/zpool/zpool-list.out +0 -2
  1971. data/spec/fixtures/vcr/cassettes/Puppet_Network_HTTP_Connection/when_handling_requests/_request_get/should_yield_to_the_block.yml +0 -24
  1972. data/spec/fixtures/vcr/cassettes/Puppet_Network_HTTP_Connection/when_handling_requests/_request_head/should_yield_to_the_block.yml +0 -24
  1973. data/spec/fixtures/vcr/cassettes/Puppet_Network_HTTP_Connection/when_handling_requests/_request_post/should_yield_to_the_block.yml +0 -24
  1974. data/spec/integration/faces/ca_spec.rb +0 -354
  1975. data/spec/integration/faces/config_spec.rb +0 -80
  1976. data/spec/integration/faces/documentation_spec.rb +0 -58
  1977. data/spec/integration/faces/plugin_spec.rb +0 -59
  1978. data/spec/integration/file_bucket/file_spec.rb +0 -69
  1979. data/spec/integration/file_serving/content_spec.rb +0 -8
  1980. data/spec/integration/file_serving/fileset_spec.rb +0 -13
  1981. data/spec/integration/file_serving/metadata_spec.rb +0 -9
  1982. data/spec/integration/file_serving/terminus_helper_spec.rb +0 -21
  1983. data/spec/integration/file_system/uniquefile_spec.rb +0 -29
  1984. data/spec/integration/indirector/node/ldap_spec.rb +0 -14
  1985. data/spec/integration/module_tool/tar/mini_spec.rb +0 -28
  1986. data/spec/integration/provider/cron/crontab_spec.rb +0 -242
  1987. data/spec/integration/provider/mailalias/aliases_spec.rb +0 -10
  1988. data/spec/integration/provider/mount_spec.rb +0 -161
  1989. data/spec/integration/provider/service/init_spec.rb +0 -46
  1990. data/spec/integration/provider/service/systemd_spec.rb +0 -20
  1991. data/spec/integration/provider/service/windows_spec.rb +0 -49
  1992. data/spec/integration/provider/ssh_authorized_key_spec.rb +0 -219
  1993. data/spec/integration/provider/sshkey_spec.rb +0 -159
  1994. data/spec/integration/provider/yumrepo_spec.rb +0 -130
  1995. data/spec/integration/reference/providers_spec.rb +0 -16
  1996. data/spec/integration/reports_spec.rb +0 -14
  1997. data/spec/integration/ssl/autosign_spec.rb +0 -145
  1998. data/spec/integration/ssl/certificate_authority_spec.rb +0 -162
  1999. data/spec/integration/ssl/certificate_request_spec.rb +0 -47
  2000. data/spec/integration/ssl/certificate_revocation_list_spec.rb +0 -34
  2001. data/spec/integration/ssl/host_spec.rb +0 -81
  2002. data/spec/integration/ssl/key_spec.rb +0 -104
  2003. data/spec/integration/test/test_helper_spec.rb +0 -32
  2004. data/spec/integration/type/nagios_spec.rb +0 -71
  2005. data/spec/integration/type/user_spec.rb +0 -64
  2006. data/spec/lib/matchers/include.rb +0 -27
  2007. data/spec/lib/matchers/include_spec.rb +0 -32
  2008. data/spec/shared_behaviours/file_serving_model.rb +0 -72
  2009. data/spec/unit/application/cert_spec.rb +0 -240
  2010. data/spec/unit/application/certificate_spec.rb +0 -22
  2011. data/spec/unit/application/master_spec.rb +0 -404
  2012. data/spec/unit/configurer/downloader_factory_spec.rb +0 -129
  2013. data/spec/unit/face/ca_spec.rb +0 -10
  2014. data/spec/unit/face/catalog_spec.rb +0 -7
  2015. data/spec/unit/face/certificate_request_spec.rb +0 -10
  2016. data/spec/unit/face/certificate_revocation_list_spec.rb +0 -10
  2017. data/spec/unit/face/certificate_spec.rb +0 -231
  2018. data/spec/unit/face/module/build_spec.rb +0 -69
  2019. data/spec/unit/face/module_spec.rb +0 -3
  2020. data/spec/unit/graph/title_hash_prioritizer_spec.rb +0 -49
  2021. data/spec/unit/indirector/certificate/ca_spec.rb +0 -23
  2022. data/spec/unit/indirector/certificate/disabled_ca_spec.rb +0 -33
  2023. data/spec/unit/indirector/certificate_request/ca_spec.rb +0 -57
  2024. data/spec/unit/indirector/certificate_request/disabled_ca_spec.rb +0 -33
  2025. data/spec/unit/indirector/certificate_revocation_list/ca_spec.rb +0 -16
  2026. data/spec/unit/indirector/certificate_revocation_list/disabled_ca_spec.rb +0 -33
  2027. data/spec/unit/indirector/certificate_revocation_list/file_spec.rb +0 -17
  2028. data/spec/unit/indirector/certificate_revocation_list/rest_spec.rb +0 -34
  2029. data/spec/unit/indirector/certificate_status/file_spec.rb +0 -191
  2030. data/spec/unit/indirector/certificate_status/rest_spec.rb +0 -18
  2031. data/spec/unit/indirector/code_spec.rb +0 -31
  2032. data/spec/unit/indirector/key/ca_spec.rb +0 -23
  2033. data/spec/unit/indirector/key/disabled_ca_spec.rb +0 -33
  2034. data/spec/unit/indirector/ldap_spec.rb +0 -137
  2035. data/spec/unit/indirector/node/ldap_spec.rb +0 -462
  2036. data/spec/unit/indirector/node/write_only_yaml_spec.rb +0 -12
  2037. data/spec/unit/indirector/store_configs_spec.rb +0 -8
  2038. data/spec/unit/man_spec.rb +0 -32
  2039. data/spec/unit/module_tool/applications/builder_spec.rb +0 -432
  2040. data/spec/unit/network/http/api/ca/v1_spec.rb +0 -26
  2041. data/spec/unit/network/http/rack/rest_spec.rb +0 -325
  2042. data/spec/unit/network/http/rack_spec.rb +0 -43
  2043. data/spec/unit/network/http/webrick/rest_spec.rb +0 -231
  2044. data/spec/unit/network/http/webrick_spec.rb +0 -280
  2045. data/spec/unit/network/server_spec.rb +0 -95
  2046. data/spec/unit/provider/aixobject_spec.rb +0 -101
  2047. data/spec/unit/provider/augeas/augeas_spec.rb +0 -1025
  2048. data/spec/unit/provider/cisco_spec.rb +0 -15
  2049. data/spec/unit/provider/cron/crontab_spec.rb +0 -207
  2050. data/spec/unit/provider/cron/parsed_spec.rb +0 -358
  2051. data/spec/unit/provider/host/parsed_spec.rb +0 -233
  2052. data/spec/unit/provider/interface/cisco_spec.rb +0 -57
  2053. data/spec/unit/provider/macauthorization_spec.rb +0 -155
  2054. data/spec/unit/provider/mcx/mcxcontent_spec.rb +0 -192
  2055. data/spec/unit/provider/mount/parsed_spec.rb +0 -317
  2056. data/spec/unit/provider/mount_spec.rb +0 -165
  2057. data/spec/unit/provider/naginator_spec.rb +0 -79
  2058. data/spec/unit/provider/network_device_spec.rb +0 -152
  2059. data/spec/unit/provider/scheduled_task/win32_taskscheduler_spec.rb +0 -2060
  2060. data/spec/unit/provider/selboolean_spec.rb +0 -36
  2061. data/spec/unit/provider/selmodule-example.pp +0 -0
  2062. data/spec/unit/provider/selmodule_spec.rb +0 -79
  2063. data/spec/unit/provider/ssh_authorized_key/parsed_spec.rb +0 -277
  2064. data/spec/unit/provider/sshkey/parsed_spec.rb +0 -95
  2065. data/spec/unit/provider/vlan/cisco_spec.rb +0 -55
  2066. data/spec/unit/provider/yumrepo/inifile_spec.rb +0 -326
  2067. data/spec/unit/provider/zfs/zfs_spec.rb +0 -112
  2068. data/spec/unit/provider/zone/solaris_spec.rb +0 -247
  2069. data/spec/unit/provider/zpool/zpool_spec.rb +0 -251
  2070. data/spec/unit/ssl/certificate_authority/autosign_command_spec.rb +0 -30
  2071. data/spec/unit/ssl/certificate_authority/interface_spec.rb +0 -560
  2072. data/spec/unit/ssl/certificate_authority_spec.rb +0 -1184
  2073. data/spec/unit/ssl/certificate_revocation_list_spec.rb +0 -196
  2074. data/spec/unit/ssl/configuration_spec.rb +0 -141
  2075. data/spec/unit/ssl/inventory_spec.rb +0 -151
  2076. data/spec/unit/type/augeas_spec.rb +0 -119
  2077. data/spec/unit/type/computer_spec.rb +0 -80
  2078. data/spec/unit/type/cron_spec.rb +0 -543
  2079. data/spec/unit/type/host_spec.rb +0 -681
  2080. data/spec/unit/type/interface_spec.rb +0 -129
  2081. data/spec/unit/type/k5login_spec.rb +0 -115
  2082. data/spec/unit/type/macauthorization_spec.rb +0 -113
  2083. data/spec/unit/type/mailalias_spec.rb +0 -49
  2084. data/spec/unit/type/maillist_spec.rb +0 -41
  2085. data/spec/unit/type/mcx_spec.rb +0 -79
  2086. data/spec/unit/type/mount_spec.rb +0 -634
  2087. data/spec/unit/type/nagios_spec.rb +0 -313
  2088. data/spec/unit/type/scheduled_task_spec.rb +0 -103
  2089. data/spec/unit/type/selboolean_spec.rb +0 -44
  2090. data/spec/unit/type/selmodule_spec.rb +0 -17
  2091. data/spec/unit/type/ssh_authorized_key_spec.rb +0 -258
  2092. data/spec/unit/type/sshkey_spec.rb +0 -77
  2093. data/spec/unit/type/vlan_spec.rb +0 -44
  2094. data/spec/unit/type/yumrepo_spec.rb +0 -398
  2095. data/spec/unit/type/zfs_spec.rb +0 -46
  2096. data/spec/unit/type/zone_spec.rb +0 -172
  2097. data/spec/unit/type/zpool_spec.rb +0 -109
  2098. data/spec/unit/util/nagios_maker_spec.rb +0 -122
  2099. data/spec/unit/util/network_device/cisco/device_spec.rb +0 -482
  2100. data/spec/unit/util/network_device/cisco/facts_spec.rb +0 -64
  2101. data/spec/unit/util/network_device/cisco/interface_spec.rb +0 -88
  2102. data/spec/unit/util/network_device/ipcalc_spec.rb +0 -62
  2103. data/spec/unit/util/network_device/transport/ssh_spec.rb +0 -218
  2104. data/spec/unit/util/network_device/transport/telnet_spec.rb +0 -86
  2105. data/spec/watchr.rb +0 -138
@@ -1,451 +1,482 @@
1
- #! /usr/bin/env ruby
2
1
  require 'spec_helper'
3
2
  require 'puppet/configurer'
4
3
 
5
4
  describe Puppet::Configurer do
5
+ include PuppetSpec::Files
6
+
6
7
  before do
7
- Puppet.settings.stubs(:use).returns(true)
8
- @agent = Puppet::Configurer.new
9
- @agent.stubs(:init_storage)
10
- Puppet::Util::Storage.stubs(:store)
11
8
  Puppet[:server] = "puppetmaster"
12
9
  Puppet[:report] = true
13
- end
14
10
 
15
- it "should include the Fact Handler module" do
16
- expect(Puppet::Configurer.ancestors).to be_include(Puppet::Configurer::FactHandler)
11
+ catalog.add_resource(resource)
12
+
13
+ Puppet[:lastrunfile] = file_containing('last_run_summary.yaml', <<~SUMMARY)
14
+ ---
15
+ version:
16
+ config: 1624882680
17
+ puppet: #{Puppet.version}
18
+ application:
19
+ initial_environment: #{Puppet[:environment]}
20
+ converged_environment: #{Puppet[:environment]}
21
+ run_mode: agent
22
+ SUMMARY
17
23
  end
18
24
 
25
+ let(:node_name) { Puppet[:node_name_value] }
26
+ let(:configurer) { Puppet::Configurer.new }
27
+ let(:report) { Puppet::Transaction::Report.new }
28
+ let(:catalog) { Puppet::Resource::Catalog.new(node_name, Puppet::Node::Environment.remote(Puppet[:environment].to_sym)) }
29
+ let(:resource) { Puppet::Resource.new(:notice, 'a') }
30
+ let(:facts) { Puppet::Node::Facts.new(node_name) }
31
+
19
32
  describe "when executing a pre-run hook" do
20
33
  it "should do nothing if the hook is set to an empty string" do
21
34
  Puppet.settings[:prerun_command] = ""
22
- Puppet::Util.expects(:exec).never
35
+ expect(Puppet::Util::Execution).not_to receive(:execute)
23
36
 
24
- @agent.execute_prerun_command
37
+ configurer.execute_prerun_command
25
38
  end
26
39
 
27
40
  it "should execute any pre-run command provided via the 'prerun_command' setting" do
28
41
  Puppet.settings[:prerun_command] = "/my/command"
29
- Puppet::Util::Execution.expects(:execute).with(["/my/command"]).raises(Puppet::ExecutionFailure, "Failed")
42
+ expect(Puppet::Util::Execution).to receive(:execute).with(["/my/command"]).and_raise(Puppet::ExecutionFailure, "Failed")
30
43
 
31
- @agent.execute_prerun_command
44
+ configurer.execute_prerun_command
32
45
  end
33
46
 
34
47
  it "should fail if the command fails" do
35
48
  Puppet.settings[:prerun_command] = "/my/command"
36
- Puppet::Util::Execution.expects(:execute).with(["/my/command"]).raises(Puppet::ExecutionFailure, "Failed")
49
+ expect(Puppet::Util::Execution).to receive(:execute).with(["/my/command"]).and_raise(Puppet::ExecutionFailure, "Failed")
37
50
 
38
- expect(@agent.execute_prerun_command).to be_falsey
51
+ expect(configurer.execute_prerun_command).to be_falsey
39
52
  end
40
53
  end
41
54
 
42
55
  describe "when executing a post-run hook" do
43
56
  it "should do nothing if the hook is set to an empty string" do
44
57
  Puppet.settings[:postrun_command] = ""
45
- Puppet::Util.expects(:exec).never
58
+ expect(Puppet::Util::Execution).not_to receive(:execute)
46
59
 
47
- @agent.execute_postrun_command
60
+ configurer.execute_postrun_command
48
61
  end
49
62
 
50
63
  it "should execute any post-run command provided via the 'postrun_command' setting" do
51
64
  Puppet.settings[:postrun_command] = "/my/command"
52
- Puppet::Util::Execution.expects(:execute).with(["/my/command"]).raises(Puppet::ExecutionFailure, "Failed")
65
+ expect(Puppet::Util::Execution).to receive(:execute).with(["/my/command"]).and_raise(Puppet::ExecutionFailure, "Failed")
53
66
 
54
- @agent.execute_postrun_command
67
+ configurer.execute_postrun_command
55
68
  end
56
69
 
57
70
  it "should fail if the command fails" do
58
71
  Puppet.settings[:postrun_command] = "/my/command"
59
- Puppet::Util::Execution.expects(:execute).with(["/my/command"]).raises(Puppet::ExecutionFailure, "Failed")
72
+ expect(Puppet::Util::Execution).to receive(:execute).with(["/my/command"]).and_raise(Puppet::ExecutionFailure, "Failed")
60
73
 
61
- expect(@agent.execute_postrun_command).to be_falsey
74
+ expect(configurer.execute_postrun_command).to be_falsey
62
75
  end
63
76
  end
64
77
 
65
- describe "when executing a catalog run" do
78
+ describe "when executing a catalog run without stubbing valid_server_environment?" do
66
79
  before do
67
- Puppet.settings.stubs(:use).returns(true)
68
- @agent.stubs(:download_plugins)
69
- Puppet::Node::Facts.indirection.terminus_class = :memory
70
- @facts = Puppet::Node::Facts.new(Puppet[:node_name_value])
71
- Puppet::Node::Facts.indirection.save(@facts)
72
-
73
- @catalog = Puppet::Resource::Catalog.new("tester", Puppet::Node::Environment.remote(Puppet[:environment].to_sym))
74
- @catalog.stubs(:to_ral).returns(@catalog)
75
80
  Puppet::Resource::Catalog.indirection.terminus_class = :rest
76
- Puppet::Resource::Catalog.indirection.stubs(:find).returns(@catalog)
77
- @agent.stubs(:send_report)
78
- @agent.stubs(:save_last_run_summary)
81
+ allow(Puppet::Resource::Catalog.indirection).to receive(:find).and_return(catalog)
82
+ end
83
+
84
+ it 'skips initial plugin sync if environment is not found and no strict_environment_mode' do
85
+ body = "{\"message\":\"Not Found: Could not find environment 'fasdfad'\",\"issue_kind\":\"RUNTIME_ERROR\"}"
86
+ stub_request(:get, %r{/puppet/v3/file_metadatas/plugins?}).to_return(
87
+ status: 404, body: body, headers: {'Content-Type' => 'application/json'}
88
+ )
79
89
 
80
- Puppet::Util::Log.stubs(:close_all)
90
+ configurer.run(:pluginsync => true)
91
+
92
+ expect(@logs).to include(an_object_having_attributes(level: :notice, message: %r{Environment 'production' not found on server, skipping initial pluginsync.}))
93
+ expect(@logs).to include(an_object_having_attributes(level: :notice, message: /Applied catalog in .* seconds/))
81
94
  end
82
95
 
83
- after :all do
84
- Puppet::Node::Facts.indirection.reset_terminus_class
85
- Puppet::Resource::Catalog.indirection.reset_terminus_class
96
+ it 'if strict_environment_mode is set and environment is not found, aborts the puppet run' do
97
+ Puppet[:strict_environment_mode] = true
98
+ body = "{\"message\":\"Not Found: Could not find environment 'fasdfad'\",\"issue_kind\":\"RUNTIME_ERROR\"}"
99
+ stub_request(:get, %r{/puppet/v3/file_metadatas/plugins?}).to_return(
100
+ status: 404, body: body, headers: {'Content-Type' => 'application/json'}
101
+ )
102
+
103
+ configurer.run(:pluginsync => true)
104
+
105
+ expect(@logs).to include(an_object_having_attributes(level: :err, message: %r{Failed to apply catalog: Environment 'production' not found on server, aborting run.}))
86
106
  end
107
+ end
87
108
 
88
- it "should initialize storage" do
89
- Puppet::Util::Storage.expects(:load)
90
- @agent.run
109
+ describe "when executing a catalog run" do
110
+ before do
111
+ Puppet::Resource::Catalog.indirection.terminus_class = :rest
112
+ allow(Puppet::Resource::Catalog.indirection).to receive(:find).and_return(catalog)
113
+ allow_any_instance_of(described_class).to(
114
+ receive(:valid_server_environment?).and_return(true)
115
+ )
91
116
  end
92
117
 
93
118
  it "downloads plugins when told" do
94
- @agent.expects(:download_plugins)
95
- @agent.run(:pluginsync => true)
119
+ expect(configurer).to receive(:download_plugins)
120
+ configurer.run(:pluginsync => true)
96
121
  end
97
122
 
98
123
  it "does not download plugins when told" do
99
- @agent.expects(:download_plugins).never
100
- @agent.run(:pluginsync => false)
124
+ expect(configurer).not_to receive(:download_plugins)
125
+ configurer.run(:pluginsync => false)
101
126
  end
102
127
 
103
- it "should carry on when it can't fetch its node definition" do
104
- error = Net::HTTPError.new(400, 'dummy server communication error')
105
- Puppet::Node.indirection.expects(:find).raises(error)
106
- expect(@agent.run).to eq(0)
128
+ it "does not download plugins when specified environment is not vaild on server" do
129
+ expect(configurer).to receive(:valid_server_environment?).and_return(false)
130
+ expect(configurer).not_to receive(:download_plugins)
131
+ configurer.run(:pluginsync => true)
107
132
  end
108
133
 
109
- it "applies a cached catalog when it can't connect to the master" do
110
- error = Errno::ECONNREFUSED.new('Connection refused - connect(2)')
134
+ it "fails the run if pluginsync fails when usecacheonfailure is false" do
135
+ Puppet[:ignore_plugin_errors] = false
111
136
 
112
- Puppet::Node.indirection.expects(:find).raises(error)
113
- Puppet::Resource::Catalog.indirection.expects(:find).with(anything, has_entry(:ignore_cache => true)).raises(error)
114
- Puppet::Resource::Catalog.indirection.expects(:find).with(anything, has_entry(:ignore_terminus => true)).returns(@catalog)
137
+ # --test implies these, set them so we don't fall back to a cached catalog
138
+ Puppet[:use_cached_catalog] = false
139
+ Puppet[:usecacheonfailure] = false
115
140
 
116
- expect(@agent.run).to eq(0)
117
- end
141
+ body = "{\"message\":\"Not Found: Could not find environment 'fasdfad'\",\"issue_kind\":\"RUNTIME_ERROR\"}"
142
+ stub_request(:get, %r{/puppet/v3/file_metadatas/pluginfacts}).to_return(
143
+ status: 404, body: body, headers: {'Content-Type' => 'application/json'}
144
+ )
145
+ stub_request(:get, %r{/puppet/v3/file_metadata/pluginfacts}).to_return(
146
+ status: 404, body: body, headers: {'Content-Type' => 'application/json'}
147
+ )
118
148
 
119
- it "should initialize a transaction report if one is not provided" do
120
- report = Puppet::Transaction::Report.new
121
- Puppet::Transaction::Report.expects(:new).returns report
149
+ configurer.run(pluginsync: true)
122
150
 
123
- @agent.run
151
+ expect(@logs).to include(an_object_having_attributes(level: :err, message: %r{Failed to apply catalog: Failed to retrieve pluginfacts: Could not retrieve information from environment production source\(s\) puppet:///pluginfacts}))
124
152
  end
125
153
 
126
- it "should respect node_name_fact when setting the host on a report" do
127
- Puppet[:node_name_fact] = 'my_name_fact'
128
- @facts.values = {'my_name_fact' => 'node_name_from_fact'}
129
-
130
- report = Puppet::Transaction::Report.new
154
+ it "applies a cached catalog if pluginsync fails when usecacheonfailure is true" do
155
+ Puppet[:ignore_plugin_errors] = false
131
156
 
132
- @agent.run(:report => report)
133
- expect(report.host).to eq('node_name_from_fact')
134
- end
157
+ Puppet[:use_cached_catalog] = false
158
+ Puppet[:usecacheonfailure] = true
135
159
 
136
- it "should pass the new report to the catalog" do
137
- report = Puppet::Transaction::Report.new
138
- Puppet::Transaction::Report.stubs(:new).returns report
139
- @catalog.expects(:apply).with{|options| options[:report] == report}
160
+ body = "{\"message\":\"Not Found: Could not find environment 'fasdfad'\",\"issue_kind\":\"RUNTIME_ERROR\"}"
161
+ stub_request(:get, %r{/puppet/v3/file_metadatas/pluginfacts}).to_return(
162
+ status: 404, body: body, headers: {'Content-Type' => 'application/json'}
163
+ )
164
+ stub_request(:get, %r{/puppet/v3/file_metadata/pluginfacts}).to_return(
165
+ status: 404, body: body, headers: {'Content-Type' => 'application/json'}
166
+ )
140
167
 
141
- @agent.run
168
+ expect(configurer.run(pluginsync: true, :report => report)).to eq(0)
169
+ expect(report.cached_catalog_status).to eq('on_failure')
142
170
  end
143
171
 
144
- it "should use the provided report if it was passed one" do
145
- report = Puppet::Transaction::Report.new
146
- @catalog.expects(:apply).with {|options| options[:report] == report}
172
+ it "applies a cached catalog when it can't connect to the master" do
173
+ error = Errno::ECONNREFUSED.new('Connection refused - connect(2)')
174
+
175
+ expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(:ignore_cache => true)).and_raise(error)
176
+ expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(:ignore_terminus => true)).and_return(catalog)
147
177
 
148
- @agent.run(:report => report)
178
+ expect(configurer.run).to eq(0)
149
179
  end
150
180
 
151
- it "should set the report as a log destination" do
152
- report = Puppet::Transaction::Report.new
153
-
154
- report.expects(:<<).with(instance_of(Puppet::Util::Log)).at_least_once
181
+ it "should initialize a transaction report if one is not provided" do
182
+ # host and settings catalogs each create a report...
183
+ expect(Puppet::Transaction::Report).to receive(:new).and_return(report).twice
155
184
 
156
- @agent.run(:report => report)
185
+ configurer.run
157
186
  end
158
187
 
159
- it "should retrieve the catalog" do
160
- @agent.expects(:retrieve_catalog)
188
+ it "should respect node_name_fact when setting the host on a report" do
189
+ Puppet[:node_name_value] = nil
190
+ Puppet[:node_name_fact] = 'my_name_fact'
191
+ facts.values = {'my_name_fact' => 'node_name_from_fact'}
192
+ Puppet::Node::Facts.indirection.save(facts)
161
193
 
162
- @agent.run
194
+ configurer.run(:report => report)
195
+ expect(report.host).to eq('node_name_from_fact')
163
196
  end
164
197
 
165
- it "should log a failure and do nothing if no catalog can be retrieved" do
166
- @agent.expects(:retrieve_catalog).returns nil
198
+ it "creates a new report when applying the catalog" do
199
+ options = {}
200
+ configurer.run(options)
167
201
 
168
- Puppet.expects(:err).with "Could not retrieve catalog; skipping run"
169
-
170
- @agent.run
202
+ expect(options[:report].metrics['time']['catalog_application']).to be_an_instance_of(Float)
171
203
  end
172
204
 
173
- it "should apply the catalog with all options to :run" do
174
- @agent.expects(:retrieve_catalog).returns @catalog
205
+ it "uses the provided report when applying the catalog" do
206
+ configurer.run(:report => report)
175
207
 
176
- @catalog.expects(:apply).with { |args| args[:one] == true }
177
- @agent.run :one => true
208
+ expect(report.metrics['time']['catalog_application']).to be_an_instance_of(Float)
178
209
  end
179
210
 
180
- it "should accept a catalog and use it instead of retrieving a different one" do
181
- @agent.expects(:retrieve_catalog).never
211
+ it "should log a failure and do nothing if no catalog can be retrieved" do
212
+ expect(configurer).to receive(:retrieve_catalog).and_return(nil)
182
213
 
183
- @catalog.expects(:apply)
184
- @agent.run :one => true, :catalog => @catalog
185
- end
214
+ expect(Puppet).to receive(:err).with("Could not retrieve catalog; skipping run")
186
215
 
187
- it "should benchmark how long it takes to apply the catalog" do
188
- @agent.expects(:benchmark).with(:notice, instance_of(String))
216
+ configurer.run
217
+ end
189
218
 
190
- @agent.expects(:retrieve_catalog).returns @catalog
219
+ it "passes arbitrary options when applying the catalog" do
220
+ expect(catalog).to receive(:apply).with(hash_including(one: true))
191
221
 
192
- @catalog.expects(:apply).never # because we're not yielding
193
- @agent.run
222
+ configurer.run(catalog: catalog, one: true)
194
223
  end
195
224
 
196
- it "should execute post-run hooks after the run" do
197
- @agent.expects(:execute_postrun_command)
225
+ it "should benchmark how long it takes to apply the catalog" do
226
+ configurer.run(report: report)
198
227
 
199
- @agent.run
228
+ expect(report.logs).to include(an_object_having_attributes(level: :notice, message: /Applied catalog in .* seconds/))
200
229
  end
201
230
 
202
231
  it "should create report with passed transaction_uuid and job_id" do
203
- @agent = Puppet::Configurer.new(Puppet::Configurer::DownloaderFactory.new, "test_tuuid", "test_jid")
204
- @agent.stubs(:init_storage)
232
+ configurer = Puppet::Configurer.new("test_tuuid", "test_jid")
205
233
 
206
234
  report = Puppet::Transaction::Report.new(nil, "test", "aaaa")
207
- Puppet::Transaction::Report.expects(:new).with(anything, anything, 'test_tuuid', 'test_jid').returns(report)
208
- @agent.expects(:send_report).with(report)
235
+ expect(Puppet::Transaction::Report).to receive(:new).with(anything, anything, 'test_tuuid', 'test_jid', anything).and_return(report)
236
+ expect(configurer).to receive(:send_report).with(report)
209
237
 
210
- @agent.run
238
+ configurer.run
211
239
  end
212
240
 
213
241
  it "should send the report" do
214
242
  report = Puppet::Transaction::Report.new(nil, "test", "aaaa")
215
- Puppet::Transaction::Report.expects(:new).returns(report)
216
- @agent.expects(:send_report).with(report)
243
+ expect(Puppet::Transaction::Report).to receive(:new).and_return(report)
244
+ expect(configurer).to receive(:send_report).with(report)
217
245
 
218
246
  expect(report.environment).to eq("test")
219
247
  expect(report.transaction_uuid).to eq("aaaa")
220
248
 
221
- @agent.run
249
+ configurer.run
222
250
  end
223
251
 
224
252
  it "should send the transaction report even if the catalog could not be retrieved" do
225
- @agent.expects(:retrieve_catalog).returns nil
253
+ expect(configurer).to receive(:retrieve_catalog).and_return(nil)
226
254
 
227
255
  report = Puppet::Transaction::Report.new(nil, "test", "aaaa")
228
- Puppet::Transaction::Report.expects(:new).returns(report)
229
- @agent.expects(:send_report).with(report)
256
+ expect(Puppet::Transaction::Report).to receive(:new).and_return(report)
257
+ expect(configurer).to receive(:send_report).with(report)
230
258
 
231
259
  expect(report.environment).to eq("test")
232
260
  expect(report.transaction_uuid).to eq("aaaa")
233
261
 
234
- @agent.run
262
+ configurer.run
235
263
  end
236
264
 
237
265
  it "should send the transaction report even if there is a failure" do
238
- @agent.expects(:retrieve_catalog).raises "whatever"
266
+ expect(configurer).to receive(:retrieve_catalog).and_raise("whatever")
239
267
 
240
268
  report = Puppet::Transaction::Report.new(nil, "test", "aaaa")
241
- Puppet::Transaction::Report.expects(:new).returns(report)
242
- @agent.expects(:send_report).with(report)
269
+ expect(Puppet::Transaction::Report).to receive(:new).and_return(report)
270
+ expect(configurer).to receive(:send_report).with(report)
243
271
 
244
272
  expect(report.environment).to eq("test")
245
273
  expect(report.transaction_uuid).to eq("aaaa")
246
274
 
247
- expect(@agent.run).to be_nil
275
+ expect(configurer.run).to be_nil
248
276
  end
249
277
 
250
278
  it "should remove the report as a log destination when the run is finished" do
251
- report = Puppet::Transaction::Report.new
252
- Puppet::Transaction::Report.expects(:new).returns(report)
253
-
254
- @agent.run
279
+ configurer.run(report: report)
255
280
 
256
281
  expect(Puppet::Util::Log.destinations).not_to include(report)
257
282
  end
258
283
 
259
- it "should return the report exit_status as the result of the run" do
260
- report = Puppet::Transaction::Report.new
261
- Puppet::Transaction::Report.expects(:new).returns(report)
262
- report.expects(:exit_status).returns(1234)
284
+ it "should return an exit status of 2 due to the notify resource 'changing'" do
285
+ cat = Puppet::Resource::Catalog.new("tester", Puppet::Node::Environment.remote(Puppet[:environment].to_sym))
286
+ cat.add_resource(Puppet::Type.type(:notify).new(:name => 'something changed'))
287
+
288
+ expect(configurer.run(catalog: cat, report: report)).to eq(2)
289
+ end
290
+
291
+ it "should return nil if catalog application fails" do
292
+ expect(catalog).to receive(:apply).and_raise(Puppet::Error, 'One or more resource dependency cycles detected in graph')
263
293
 
264
- expect(@agent.run).to eq(1234)
294
+ expect(configurer.run(catalog: catalog, report: report)).to be_nil
265
295
  end
266
296
 
267
297
  it "should send the transaction report even if the pre-run command fails" do
268
- report = Puppet::Transaction::Report.new
269
- Puppet::Transaction::Report.expects(:new).returns(report)
298
+ expect(Puppet::Transaction::Report).to receive(:new).and_return(report)
270
299
 
271
300
  Puppet.settings[:prerun_command] = "/my/command"
272
- Puppet::Util::Execution.expects(:execute).with(["/my/command"]).raises(Puppet::ExecutionFailure, "Failed")
273
- @agent.expects(:send_report).with(report)
301
+ expect(Puppet::Util::Execution).to receive(:execute).with(["/my/command"]).and_raise(Puppet::ExecutionFailure, "Failed")
302
+ expect(configurer).to receive(:send_report).with(report)
274
303
 
275
- expect(@agent.run).to be_nil
304
+ expect(configurer.run).to be_nil
276
305
  end
277
306
 
278
307
  it "should include the pre-run command failure in the report" do
279
- report = Puppet::Transaction::Report.new
280
- Puppet::Transaction::Report.expects(:new).returns(report)
281
-
282
308
  Puppet.settings[:prerun_command] = "/my/command"
283
- Puppet::Util::Execution.expects(:execute).with(["/my/command"]).raises(Puppet::ExecutionFailure, "Failed")
309
+ expect(Puppet::Util::Execution).to receive(:execute).with(["/my/command"]).and_raise(Puppet::ExecutionFailure, "Failed")
284
310
 
285
- expect(@agent.run).to be_nil
311
+ expect(configurer.run(report: report)).to be_nil
286
312
  expect(report.logs.find { |x| x.message =~ /Could not run command from prerun_command/ }).to be
287
313
  end
288
314
 
289
315
  it "should send the transaction report even if the post-run command fails" do
290
- report = Puppet::Transaction::Report.new
291
- Puppet::Transaction::Report.expects(:new).returns(report)
292
-
293
316
  Puppet.settings[:postrun_command] = "/my/command"
294
- Puppet::Util::Execution.expects(:execute).with(["/my/command"]).raises(Puppet::ExecutionFailure, "Failed")
295
- @agent.expects(:send_report).with(report)
317
+ expect(Puppet::Util::Execution).to receive(:execute).with(["/my/command"]).and_raise(Puppet::ExecutionFailure, "Failed")
318
+ expect(configurer).to receive(:send_report).with(report)
296
319
 
297
- expect(@agent.run).to be_nil
320
+ expect(configurer.run(report: report)).to be_nil
298
321
  end
299
322
 
300
323
  it "should include the post-run command failure in the report" do
301
- report = Puppet::Transaction::Report.new
302
- Puppet::Transaction::Report.expects(:new).returns(report)
303
-
304
324
  Puppet.settings[:postrun_command] = "/my/command"
305
- Puppet::Util::Execution.expects(:execute).with(["/my/command"]).raises(Puppet::ExecutionFailure, "Failed")
325
+ expect(Puppet::Util::Execution).to receive(:execute).with(["/my/command"]).and_raise(Puppet::ExecutionFailure, "Failed")
306
326
 
307
- report.expects(:<<).with { |log| log.message.include?("Could not run command from postrun_command") }
327
+ expect(report).to receive(:<<) { |log, _| expect(log.message).to match(/Could not run command from postrun_command/) }.at_least(:once)
308
328
 
309
- expect(@agent.run).to be_nil
329
+ expect(configurer.run(report: report)).to be_nil
310
330
  end
311
331
 
312
332
  it "should execute post-run command even if the pre-run command fails" do
313
333
  Puppet.settings[:prerun_command] = "/my/precommand"
314
334
  Puppet.settings[:postrun_command] = "/my/postcommand"
315
- Puppet::Util::Execution.expects(:execute).with(["/my/precommand"]).raises(Puppet::ExecutionFailure, "Failed")
316
- Puppet::Util::Execution.expects(:execute).with(["/my/postcommand"])
335
+ expect(Puppet::Util::Execution).to receive(:execute).with(["/my/precommand"]).and_raise(Puppet::ExecutionFailure, "Failed")
336
+ expect(Puppet::Util::Execution).to receive(:execute).with(["/my/postcommand"])
317
337
 
318
- expect(@agent.run).to be_nil
338
+ expect(configurer.run).to be_nil
319
339
  end
320
340
 
321
341
  it "should finalize the report" do
322
- report = Puppet::Transaction::Report.new
323
- Puppet::Transaction::Report.expects(:new).returns(report)
324
-
325
- report.expects(:finalize_report)
326
- @agent.run
342
+ expect(report).to receive(:finalize_report)
343
+ configurer.run(report: report)
327
344
  end
328
345
 
329
346
  it "should not apply the catalog if the pre-run command fails" do
330
- report = Puppet::Transaction::Report.new
331
- Puppet::Transaction::Report.expects(:new).returns(report)
332
-
333
347
  Puppet.settings[:prerun_command] = "/my/command"
334
- Puppet::Util::Execution.expects(:execute).with(["/my/command"]).raises(Puppet::ExecutionFailure, "Failed")
348
+ expect(Puppet::Util::Execution).to receive(:execute).with(["/my/command"]).and_raise(Puppet::ExecutionFailure, "Failed")
335
349
 
336
- @catalog.expects(:apply).never()
337
- @agent.expects(:send_report)
350
+ expect_any_instance_of(Puppet::Resource::Catalog).not_to receive(:apply)
351
+ expect(configurer).to receive(:send_report)
338
352
 
339
- expect(@agent.run).to be_nil
353
+ expect(configurer.run(report: report)).to be_nil
340
354
  end
341
355
 
342
356
  it "should apply the catalog, send the report, and return nil if the post-run command fails" do
343
- report = Puppet::Transaction::Report.new
344
- Puppet::Transaction::Report.expects(:new).returns(report)
345
-
346
357
  Puppet.settings[:postrun_command] = "/my/command"
347
- Puppet::Util::Execution.expects(:execute).with(["/my/command"]).raises(Puppet::ExecutionFailure, "Failed")
358
+ expect(Puppet::Util::Execution).to receive(:execute).with(["/my/command"]).and_raise(Puppet::ExecutionFailure, "Failed")
348
359
 
349
- @catalog.expects(:apply)
350
- @agent.expects(:send_report)
360
+ expect_any_instance_of(Puppet::Resource::Catalog).to receive(:apply)
361
+ expect(configurer).to receive(:send_report)
351
362
 
352
- expect(@agent.run).to be_nil
363
+ expect(configurer.run(report: report)).to be_nil
353
364
  end
354
365
 
355
- it "should refetch the catalog if the server specifies a new environment in the catalog" do
356
- catalog = Puppet::Resource::Catalog.new("tester", Puppet::Node::Environment.remote('second_env'))
357
- @agent.expects(:retrieve_catalog).returns(catalog).twice
366
+ it 'includes total time metrics in the report after successfully applying the catalog' do
367
+ configurer.run(report: report)
358
368
 
359
- @agent.run
369
+ expect(report.metrics['time']).to be
370
+ expect(report.metrics['time']['total']).to be_a_kind_of(Numeric)
360
371
  end
361
372
 
362
- it "should change the environment setting if the server specifies a new environment in the catalog" do
363
- @catalog.stubs(:environment).returns("second_env")
373
+ it 'includes total time metrics in the report even if prerun fails' do
374
+ Puppet.settings[:prerun_command] = "/my/command"
375
+ expect(Puppet::Util::Execution).to receive(:execute).with(["/my/command"]).and_raise(Puppet::ExecutionFailure, "Failed")
364
376
 
365
- @agent.run
377
+ configurer.run(report: report)
366
378
 
367
- expect(@agent.environment).to eq("second_env")
379
+ expect(report.metrics['time']).to be
380
+ expect(report.metrics['time']['total']).to be_a_kind_of(Numeric)
368
381
  end
369
382
 
370
- it "should fix the report if the server specifies a new environment in the catalog" do
371
- report = Puppet::Transaction::Report.new(nil, "test", "aaaa")
372
- Puppet::Transaction::Report.expects(:new).returns(report)
373
- @agent.expects(:send_report).with(report)
383
+ it 'includes total time metrics in the report even if catalog retrieval fails' do
384
+ allow(configurer).to receive(:prepare_and_retrieve_catalog_from_cache).and_raise
385
+ configurer.run(:report => report)
386
+
387
+ expect(report.metrics['time']).to be
388
+ expect(report.metrics['time']['total']).to be_a_kind_of(Numeric)
389
+ end
390
+
391
+ it "should refetch the catalog if the server specifies a new environment in the catalog" do
392
+ catalog = Puppet::Resource::Catalog.new(node_name, Puppet::Node::Environment.remote('second_env'))
393
+ expect(configurer).to receive(:retrieve_catalog).and_return(catalog).twice
374
394
 
375
- @catalog.stubs(:environment).returns("second_env")
376
- @agent.stubs(:retrieve_catalog).returns(@catalog)
395
+ configurer.run
396
+ end
377
397
 
378
- @agent.run
398
+ it "changes the configurer's environment if the server specifies a new environment in the catalog" do
399
+ allow_any_instance_of(Puppet::Resource::Catalog).to receive(:environment).and_return("second_env")
400
+
401
+ configurer.run
402
+
403
+ expect(configurer.environment).to eq("second_env")
404
+ end
405
+
406
+ it "changes the report's environment if the server specifies a new environment in the catalog" do
407
+ allow_any_instance_of(Puppet::Resource::Catalog).to receive(:environment).and_return("second_env")
408
+
409
+ configurer.run(report: report)
379
410
 
380
411
  expect(report.environment).to eq("second_env")
381
412
  end
382
413
 
383
414
  it "sends the transaction uuid in a catalog request" do
384
- @agent.instance_variable_set(:@transaction_uuid, 'aaa')
385
- Puppet::Resource::Catalog.indirection.expects(:find).with(anything, has_entries(:transaction_uuid => 'aaa'))
386
- @agent.run
415
+ configurer = Puppet::Configurer.new('aaa')
416
+ expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(transaction_uuid: 'aaa'))
417
+ configurer.run
387
418
  end
388
419
 
389
420
  it "sends the transaction uuid in a catalog request" do
390
- @agent.instance_variable_set(:@job_id, 'aaa')
391
- Puppet::Resource::Catalog.indirection.expects(:find).with(anything, has_entries(:job_id => 'aaa'))
392
- @agent.run
421
+ configurer = Puppet::Configurer.new('b', 'aaa')
422
+ expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(job_id: 'aaa'))
423
+ configurer.run
393
424
  end
394
425
 
395
426
  it "sets the static_catalog query param to true in a catalog request" do
396
- Puppet::Resource::Catalog.indirection.expects(:find).with(anything, has_entries(:static_catalog => true))
397
- @agent.run
427
+ expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(static_catalog: true))
428
+ configurer.run
398
429
  end
399
430
 
400
431
  it "sets the checksum_type query param to the default supported_checksum_types in a catalog request" do
401
- Puppet::Resource::Catalog.indirection.expects(:find).with(anything,
402
- has_entries(:checksum_type => 'md5.sha256'))
403
- @agent.run
432
+ expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything,
433
+ hash_including(checksum_type: 'md5.sha256.sha384.sha512.sha224'))
434
+ configurer.run
404
435
  end
405
436
 
406
437
  it "sets the checksum_type query param to the supported_checksum_types setting in a catalog request" do
407
- # Regenerate the agent to pick up the new setting
408
438
  Puppet[:supported_checksum_types] = ['sha256']
409
- @agent = Puppet::Configurer.new
410
- @agent.stubs(:init_storage)
411
- @agent.stubs(:download_plugins)
412
- @agent.stubs(:send_report)
413
- @agent.stubs(:save_last_run_summary)
439
+ # Regenerate the agent to pick up the new setting
440
+ configurer = Puppet::Configurer.new
414
441
 
415
- Puppet::Resource::Catalog.indirection.expects(:find).with(anything, has_entries(:checksum_type => 'sha256'))
416
- @agent.run
442
+ expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(checksum_type: 'sha256'))
443
+ configurer.run
417
444
  end
418
445
 
419
446
  describe "when not using a REST terminus for catalogs" do
420
447
  it "should not pass any facts when retrieving the catalog" do
448
+ # This is weird, we collect facts when constructing the node,
449
+ # but we don't send them in the indirector request. Then the compiler
450
+ # looks up the node, and collects its facts, which we could have sent
451
+ # in the first place. This seems like a bug.
421
452
  Puppet::Resource::Catalog.indirection.terminus_class = :compiler
422
- @agent.expects(:facts_for_uploading).never
423
- Puppet::Resource::Catalog.indirection.expects(:find).with { |name, options|
424
- options[:facts].nil?
425
- }.returns @catalog
426
453
 
427
- @agent.run
454
+ expect(Puppet::Resource::Catalog.indirection).to receive(:find) do |name, options|
455
+ expect(options[:facts]).to be_nil
456
+ end.and_return(catalog)
457
+
458
+ configurer.run
428
459
  end
429
460
  end
430
461
 
431
462
  describe "when using a REST terminus for catalogs" do
432
- it "should pass the prepared facts and the facts format as arguments when retrieving the catalog" do
463
+ it "should pass the url encoded facts and facts format as arguments when retrieving the catalog" do
433
464
  Puppet::Resource::Catalog.indirection.terminus_class = :rest
434
- @agent.expects(:facts_for_uploading).returns(:facts => "myfacts", :facts_format => :foo)
435
- Puppet::Resource::Catalog.indirection.expects(:find).with { |name, options|
436
- options[:facts] == "myfacts" and options[:facts_format] == :foo
437
- }.returns @catalog
438
465
 
439
- @agent.run
440
- end
441
- end
442
- end
466
+ facts.values = { 'foo' => 'bar' }
467
+ Puppet::Node::Facts.indirection.save(facts)
443
468
 
444
- describe "when initialized with a transaction_uuid" do
445
- it "stores it" do
446
- SecureRandom.expects(:uuid).never
447
- configurer = Puppet::Configurer.new(Puppet::Configurer::DownloaderFactory.new, 'foo')
448
- expect(configurer.instance_variable_get(:@transaction_uuid) == 'foo')
469
+ expect(
470
+ Puppet::Resource::Catalog.indirection
471
+ ).to receive(:find) do |_, options|
472
+ expect(options[:facts_format]).to eq("application/json")
473
+
474
+ unescaped = JSON.parse(CGI.unescape(options[:facts]))
475
+ expect(unescaped).to include("values" => {"foo" => "bar"})
476
+ end.and_return(catalog)
477
+
478
+ configurer.run
479
+ end
449
480
  end
450
481
  end
451
482
 
@@ -453,65 +484,72 @@ describe Puppet::Configurer do
453
484
  include PuppetSpec::Files
454
485
 
455
486
  before do
456
- Puppet.settings.stubs(:use).returns(true)
457
- @configurer = Puppet::Configurer.new
458
487
  Puppet[:lastrunfile] = tmpfile('last_run_file')
459
-
460
- @report = Puppet::Transaction::Report.new
461
488
  Puppet[:reports] = "none"
462
489
  end
463
490
 
464
491
  it "should print a report summary if configured to do so" do
465
492
  Puppet.settings[:summarize] = true
466
493
 
467
- @report.expects(:summary).returns "stuff"
494
+ expect(report).to receive(:summary).and_return("stuff")
468
495
 
469
- @configurer.expects(:puts).with("stuff")
470
- @configurer.send_report(@report)
496
+ expect(configurer).to receive(:puts).with("stuff")
497
+ configurer.send_report(report)
471
498
  end
472
499
 
473
500
  it "should not print a report summary if not configured to do so" do
474
501
  Puppet.settings[:summarize] = false
475
502
 
476
- @configurer.expects(:puts).never
477
- @configurer.send_report(@report)
503
+ expect(configurer).not_to receive(:puts)
504
+ configurer.send_report(report)
478
505
  end
479
506
 
480
507
  it "should save the report if reporting is enabled" do
481
508
  Puppet.settings[:report] = true
482
509
 
483
- Puppet::Transaction::Report.indirection.expects(:save).with(@report, nil, instance_of(Hash))
484
- @configurer.send_report(@report)
510
+ expect(Puppet::Transaction::Report.indirection).to receive(:save).with(report, nil, instance_of(Hash)).twice
511
+ configurer.send_report(report)
485
512
  end
486
513
 
487
514
  it "should not save the report if reporting is disabled" do
488
515
  Puppet.settings[:report] = false
489
516
 
490
- Puppet::Transaction::Report.indirection.expects(:save).with(@report, nil, instance_of(Hash)).never
491
- @configurer.send_report(@report)
517
+ expect(Puppet::Transaction::Report.indirection).not_to receive(:save).with(report, nil, instance_of(Hash))
518
+ configurer.send_report(report)
492
519
  end
493
520
 
494
521
  it "should save the last run summary if reporting is enabled" do
495
522
  Puppet.settings[:report] = true
496
523
 
497
- @configurer.expects(:save_last_run_summary).with(@report)
498
- @configurer.send_report(@report)
524
+ expect(configurer).to receive(:save_last_run_summary).with(report)
525
+ configurer.send_report(report)
499
526
  end
500
527
 
501
528
  it "should save the last run summary if reporting is disabled" do
502
529
  Puppet.settings[:report] = false
503
530
 
504
- @configurer.expects(:save_last_run_summary).with(@report)
505
- @configurer.send_report(@report)
531
+ expect(configurer).to receive(:save_last_run_summary).with(report)
532
+ configurer.send_report(report)
506
533
  end
507
534
 
508
535
  it "should log but not fail if saving the report fails" do
509
536
  Puppet.settings[:report] = true
510
537
 
511
- Puppet::Transaction::Report.indirection.expects(:save).raises("whatever")
538
+ expect(Puppet::Transaction::Report.indirection).to receive(:save).with(report, nil, hash_including(ignore_cache: true)).and_raise("whatever")
539
+ expect(Puppet::Transaction::Report.indirection).to receive(:save).with(report, nil, hash_including(ignore_terminus: true))
512
540
 
513
- Puppet.expects(:err)
514
- expect { @configurer.send_report(@report) }.not_to raise_error
541
+ configurer.send_report(report)
542
+
543
+ expect(@logs).to include(an_object_having_attributes(level: :err, message: 'Could not send report: whatever'))
544
+ end
545
+
546
+ it "should save the cached report if fails to send the report" do
547
+ allow(Puppet::Transaction::Report.indirection).to receive(:save).with(report, nil, hash_including(ignore_terminus: true)).and_call_original
548
+ allow(Puppet::Transaction::Report.indirection).to receive(:save).with(report, nil, hash_including(ignore_cache: true)).and_raise("whatever")
549
+
550
+ expect(File).to_not be_exist(Puppet[:lastrunfile])
551
+ configurer.send_report(report)
552
+ expect(File.read(Puppet[:lastrunfile])).to match(/puppet: #{Puppet::PUPPETVERSION}/)
515
553
  end
516
554
  end
517
555
 
@@ -519,22 +557,17 @@ describe Puppet::Configurer do
519
557
  include PuppetSpec::Files
520
558
 
521
559
  before do
522
- Puppet.settings.stubs(:use).returns(true)
523
- @configurer = Puppet::Configurer.new
524
-
525
- @report = stub 'report', :raw_summary => {}
526
-
527
560
  Puppet[:lastrunfile] = tmpfile('last_run_file')
528
561
  end
529
562
 
530
563
  it "should write the last run file" do
531
- @configurer.save_last_run_summary(@report)
564
+ configurer.save_last_run_summary(report)
532
565
  expect(Puppet::FileSystem.exist?(Puppet[:lastrunfile])).to be_truthy
533
566
  end
534
567
 
535
568
  it "should write the raw summary as yaml" do
536
- @report.expects(:raw_summary).returns("summary")
537
- @configurer.save_last_run_summary(@report)
569
+ expect(report).to receive(:raw_summary).and_return("summary")
570
+ configurer.save_last_run_summary(report)
538
571
  expect(File.read(Puppet[:lastrunfile])).to eq(YAML.dump("summary"))
539
572
  end
540
573
 
@@ -547,15 +580,16 @@ describe Puppet::Configurer do
547
580
  end
548
581
  end.new
549
582
 
550
- Puppet::Util.expects(:replace_file).yields(fh)
583
+ expect(Puppet::Util).to receive(:replace_file).and_yield(fh)
551
584
 
552
- Puppet.expects(:err)
553
- expect { @configurer.save_last_run_summary(@report) }.to_not raise_error
585
+ configurer.save_last_run_summary(report)
586
+
587
+ expect(@logs).to include(an_object_having_attributes(level: :err, message: 'Could not save last run local report: failed to do print'))
554
588
  end
555
589
 
556
590
  it "should create the last run file with the correct mode" do
557
- Puppet.settings.setting(:lastrunfile).expects(:mode).returns('664')
558
- @configurer.save_last_run_summary(@report)
591
+ expect(Puppet.settings.setting(:lastrunfile)).to receive(:mode).and_return('664')
592
+ configurer.save_last_run_summary(report)
559
593
 
560
594
  if Puppet::Util::Platform.windows?
561
595
  require 'puppet/util/windows/security'
@@ -567,66 +601,52 @@ describe Puppet::Configurer do
567
601
  end
568
602
 
569
603
  it "should report invalid last run file permissions" do
570
- Puppet.settings.setting(:lastrunfile).expects(:mode).returns('892')
571
- Puppet.expects(:err).with(regexp_matches(/Could not save last run local report.*892 is invalid/))
572
- @configurer.save_last_run_summary(@report)
573
- end
574
- end
604
+ expect(Puppet.settings.setting(:lastrunfile)).to receive(:mode).and_return('892')
575
605
 
576
- describe "when requesting a node" do
577
- it "uses the transaction uuid in the request" do
578
- Puppet::Node.indirection.expects(:find).with(anything, has_entries(:transaction_uuid => anything)).twice
579
- @agent.run
580
- end
606
+ configurer.save_last_run_summary(report)
581
607
 
582
- it "sends an explicitly configured environment request" do
583
- Puppet.settings.expects(:set_by_config?).with(:environment).returns(true)
584
- Puppet::Node.indirection.expects(:find).with(anything, has_entries(:configured_environment => Puppet[:environment])).twice
585
- @agent.run
608
+ expect(@logs).to include(an_object_having_attributes(level: :err, message: /Could not save last run local report.*892 is invalid/))
586
609
  end
610
+ end
587
611
 
588
- it "does not send a configured_environment when using the default" do
589
- Puppet::Node.indirection.expects(:find).with(anything, has_entries(:configured_environment => nil)).twice
590
- @agent.run
591
- end
612
+ def expects_pluginsync
613
+ metadata = "[{\"path\":\"/etc/puppetlabs/code\",\"relative_path\":\".\",\"links\":\"follow\",\"owner\":0,\"group\":0,\"mode\":420,\"checksum\":{\"type\":\"ctime\",\"value\":\"{ctime}2020-07-10 14:00:00 -0700\"},\"type\":\"directory\",\"destination\":null}]"
614
+ stub_request(:get, %r{/puppet/v3/file_metadatas/(plugins|locales)}).to_return(status: 200, body: metadata, headers: {'Content-Type' => 'application/json'})
615
+
616
+ # response retains owner/group/mode due to source_permissions => use
617
+ facts_metadata = "[{\"path\":\"/etc/puppetlabs/code\",\"relative_path\":\".\",\"links\":\"follow\",\"owner\":500,\"group\":500,\"mode\":493,\"checksum\":{\"type\":\"ctime\",\"value\":\"{ctime}2020-07-10 14:00:00 -0700\"},\"type\":\"directory\",\"destination\":null}]"
618
+ stub_request(:get, %r{/puppet/v3/file_metadatas/pluginfacts}).to_return(status: 200, body: facts_metadata, headers: {'Content-Type' => 'application/json'})
592
619
  end
593
620
 
594
621
  def expects_new_catalog_only(catalog)
595
- Puppet::Resource::Catalog.indirection.expects(:find).with { |name, options| options[:ignore_cache] == true }.returns catalog
596
- Puppet::Resource::Catalog.indirection.expects(:find).with { |name, options| options[:ignore_terminus] == true }.never
622
+ expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(ignore_cache: true, check_environment: true)).and_return(catalog)
623
+ expect(Puppet::Resource::Catalog.indirection).not_to receive(:find).with(anything, hash_including(ignore_terminus: true))
597
624
  end
598
625
 
599
626
  def expects_cached_catalog_only(catalog)
600
- Puppet::Resource::Catalog.indirection.expects(:find).with { |name, options| options[:ignore_terminus] == true }.returns catalog
601
- Puppet::Resource::Catalog.indirection.expects(:find).with { |name, options| options[:ignore_cache] == true }.never
627
+ expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(ignore_terminus: true)).and_return(catalog)
628
+ expect(Puppet::Resource::Catalog.indirection).not_to receive(:find).with(anything, hash_including(ignore_cache: true))
602
629
  end
603
630
 
604
631
  def expects_fallback_to_cached_catalog(catalog)
605
- Puppet::Resource::Catalog.indirection.expects(:find).with { |name, options| options[:ignore_cache] == true }.returns nil
606
- Puppet::Resource::Catalog.indirection.expects(:find).with { |name, options| options[:ignore_terminus] == true }.returns catalog
632
+ expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(ignore_cache: true)).and_return(nil)
633
+ expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(ignore_terminus: true)).and_return(catalog)
607
634
  end
608
635
 
609
636
  def expects_fallback_to_new_catalog(catalog)
610
- Puppet::Resource::Catalog.indirection.expects(:find).with { |name, options| options[:ignore_terminus] == true }.returns nil
611
- Puppet::Resource::Catalog.indirection.expects(:find).with { |name, options| options[:ignore_cache] == true }.returns catalog
637
+ expects_pluginsync
638
+ expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(ignore_terminus: true)).and_return(nil)
639
+ expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(ignore_cache: true, check_environment: true)).and_return(catalog)
612
640
  end
613
641
 
614
642
  def expects_neither_new_or_cached_catalog
615
- Puppet::Resource::Catalog.indirection.expects(:find).with { |name, options| options[:ignore_cache] == true }.returns nil
616
- Puppet::Resource::Catalog.indirection.expects(:find).with { |name, options| options[:ignore_terminus] == true }.returns nil
643
+ expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(ignore_cache: true)).and_return(nil)
644
+ expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(ignore_terminus: true)).and_return(nil)
617
645
  end
618
646
 
619
647
  describe "when retrieving a catalog" do
620
648
  before do
621
- Puppet.settings.stubs(:use).returns(true)
622
- @agent.stubs(:facts_for_uploading).returns({})
623
- @agent.stubs(:download_plugins)
624
-
625
- # retrieve a catalog in the current environment, so we don't try to converge unexpectedly
626
- @catalog = Puppet::Resource::Catalog.new("tester", Puppet::Node::Environment.remote(Puppet[:environment].to_sym))
627
-
628
- # this is the default when using a Configurer instance
629
- Puppet::Resource::Catalog.indirection.stubs(:terminus_class).returns :rest
649
+ allow(Puppet::Resource::Catalog.indirection).to receive(:terminus_class).and_return(:rest)
630
650
  end
631
651
 
632
652
  describe "and configured to only retrieve a catalog from the cache" do
@@ -635,100 +655,119 @@ describe Puppet::Configurer do
635
655
  end
636
656
 
637
657
  it "should first look in the cache for a catalog" do
638
- expects_cached_catalog_only(@catalog)
639
-
640
- expect(@agent.retrieve_catalog({})).to eq(@catalog)
641
- end
642
-
643
- it "should not make a node request or pluginsync when a cached catalog is successfully retrieved" do
644
- Puppet::Node.indirection.expects(:find).never
645
- expects_cached_catalog_only(@catalog)
646
- @agent.expects(:download_plugins).never
658
+ expects_cached_catalog_only(catalog)
647
659
 
648
- @agent.run
660
+ configurer.run
649
661
  end
650
662
 
651
- it "should make a node request and pluginsync when a cached catalog cannot be retrieved" do
652
- Puppet::Node.indirection.expects(:find).returns nil
653
- expects_fallback_to_new_catalog(@catalog)
654
- @agent.expects(:download_plugins)
663
+ it "should not pluginsync when a cached catalog is successfully retrieved" do
664
+ expects_cached_catalog_only(catalog)
665
+ expect(configurer).not_to receive(:download_plugins)
655
666
 
656
- @agent.run
667
+ configurer.run
657
668
  end
658
669
 
659
670
  it "should set its cached_catalog_status to 'explicitly_requested'" do
660
- expects_cached_catalog_only(@catalog)
671
+ expects_cached_catalog_only(catalog)
661
672
 
662
- @agent.retrieve_catalog({})
663
- expect(@agent.instance_variable_get(:@cached_catalog_status)).to eq('explicitly_requested')
673
+ options = {}
674
+ configurer.run(options)
675
+
676
+ expect(options[:report].cached_catalog_status).to eq('explicitly_requested')
664
677
  end
665
678
 
666
679
  it "should set its cached_catalog_status to 'explicitly requested' if the cached catalog is from a different environment" do
667
- cached_catalog = Puppet::Resource::Catalog.new("tester", Puppet::Node::Environment.remote('second_env'))
680
+ cached_catalog = Puppet::Resource::Catalog.new(node_name, Puppet::Node::Environment.remote('second_env'))
668
681
  expects_cached_catalog_only(cached_catalog)
669
682
 
670
- @agent.retrieve_catalog({})
671
- expect(@agent.instance_variable_get(:@cached_catalog_status)).to eq('explicitly_requested')
672
- end
673
-
674
- it "should compile a new catalog if none is found in the cache" do
675
- expects_fallback_to_new_catalog(@catalog)
683
+ options = {}
684
+ configurer.run(options)
676
685
 
677
- expect(@agent.retrieve_catalog({})).to eq(@catalog)
686
+ expect(options[:report].cached_catalog_status).to eq('explicitly_requested')
678
687
  end
679
688
 
680
- it "should set its cached_catalog_status to 'not_used' if no catalog is found in the cache" do
681
- expects_fallback_to_new_catalog(@catalog)
689
+ it "should pluginsync and compile a new catalog if none is found in the cache" do
690
+ expects_fallback_to_new_catalog(catalog)
691
+ stub_request(:get, %r{/puppet/v3/file_metadatas?/plugins}).to_return(:status => 404)
692
+ stub_request(:get, %r{/puppet/v3/file_metadatas?/pluginfacts}).to_return(:status => 404)
693
+
694
+ options = {}
695
+ configurer.run(options)
682
696
 
683
- @agent.retrieve_catalog({})
684
- expect(@agent.instance_variable_get(:@cached_catalog_status)).to eq('not_used')
697
+ expect(options[:report].cached_catalog_status).to eq('not_used')
685
698
  end
686
699
 
687
700
  it "should not attempt to retrieve a cached catalog again if the first attempt failed" do
688
- Puppet::Node.indirection.expects(:find).returns(nil)
689
701
  expects_neither_new_or_cached_catalog
702
+ expects_pluginsync
690
703
 
691
- @agent.run
704
+ # after failing to use a cached catalog, we'll need to pluginsync before getting
705
+ # a new catalog, which also fails.
706
+ stub_request(:get, %r{/puppet/v3/file_metadatas?/plugins}).to_return(:status => 404)
707
+ stub_request(:get, %r{/puppet/v3/file_metadatas?/pluginfacts}).to_return(:status => 404)
708
+
709
+ configurer.run
692
710
  end
693
711
 
694
712
  it "should return the cached catalog when the environment doesn't match" do
695
- cached_catalog = Puppet::Resource::Catalog.new("tester", Puppet::Node::Environment.remote('second_env'))
713
+ cached_catalog = Puppet::Resource::Catalog.new(node_name, Puppet::Node::Environment.remote('second_env'))
696
714
  expects_cached_catalog_only(cached_catalog)
697
715
 
698
- Puppet.expects(:info).with("Using cached catalog from environment 'second_env'")
699
- expect(@agent.retrieve_catalog({})).to eq(cached_catalog)
716
+ allow(Puppet).to receive(:info)
717
+ expect(Puppet).to receive(:info).with("Using cached catalog from environment 'second_env'")
718
+
719
+ configurer.run
720
+ end
721
+
722
+ it "applies the catalog passed as options when the catalog cache terminus is not set" do
723
+ expects_pluginsync
724
+
725
+ catalog.add_resource(Puppet::Resource.new('notify', 'from apply'))
726
+ configurer.run(catalog: catalog.to_ral)
727
+
728
+ # make sure cache class is not set to avoid surprises later
729
+ expect(Puppet::Resource::Catalog.indirection).to_not be_cache
730
+ expect(@logs).to include(an_object_having_attributes(level: :notice, message: /defined 'message' as 'from apply'/))
731
+ end
732
+
733
+ it "applies the cached catalog when the catalog cache terminus is set, ignoring the catalog passed as options" do
734
+ Puppet::Resource::Catalog.indirection.cache_class = :json
735
+
736
+ cached_catalog = Puppet::Resource::Catalog.new(Puppet[:node_name_value], Puppet[:environment])
737
+ cached_catalog.add_resource(Puppet::Resource.new('notify', 'from cache'))
738
+
739
+ # update cached catalog
740
+ Puppet.settings.use(:main, :agent)
741
+ path = Puppet::Resource::Catalog.indirection.cache.path(cached_catalog.name)
742
+ FileUtils.mkdir(File.dirname(path))
743
+ File.write(path, cached_catalog.render(:json))
744
+
745
+ configurer.run(catalog: catalog.to_ral)
746
+
747
+ expect(@logs).to include(an_object_having_attributes(level: :notice, message: /defined 'message' as 'from cache'/))
700
748
  end
701
749
  end
702
750
 
703
751
  describe "and strict environment mode is set" do
704
752
  before do
705
- @catalog.stubs(:to_ral).returns(@catalog)
706
- @catalog.stubs(:write_class_file)
707
- @catalog.stubs(:write_resource_file)
708
- @agent.stubs(:send_report)
709
- @agent.stubs(:save_last_run_summary)
710
753
  Puppet.settings[:strict_environment_mode] = true
711
754
  end
712
755
 
713
- it "should not make a node request" do
714
- Puppet::Node.indirection.expects(:find).never
715
-
716
- @agent.run
717
- end
718
-
719
756
  it "should return nil when the catalog's environment doesn't match the agent specified environment" do
720
- @agent.instance_variable_set(:@environment, 'second_env')
721
- expects_new_catalog_only(@catalog)
757
+ Puppet[:environment] = 'second_env'
758
+ configurer = Puppet::Configurer.new
759
+
760
+ catalog = Puppet::Resource::Catalog.new(node_name, Puppet::Node::Environment.remote("production"))
761
+ expects_new_catalog_only(catalog)
722
762
 
723
- Puppet.expects(:err).with("Not using catalog because its environment 'production' does not match agent specified environment 'second_env' and strict_environment_mode is set")
724
- expect(@agent.run).to be_nil
763
+ expect(Puppet).to receive(:err).with("Not using catalog because its environment 'production' does not match agent specified environment 'second_env' and strict_environment_mode is set")
764
+ expect(configurer.run).to be_nil
725
765
  end
726
766
 
727
- it "should not return nil when the catalog's environment matches the agent specified environment" do
728
- @agent.instance_variable_set(:@environment, 'production')
729
- expects_new_catalog_only(@catalog)
767
+ it "should return 0 when the catalog's environment matches the agent specified environment" do
768
+ expects_new_catalog_only(catalog)
730
769
 
731
- expect(@agent.run).to eq(0)
770
+ expect(configurer.run).to eq(0)
732
771
  end
733
772
 
734
773
  describe "and a cached catalog is explicitly requested" do
@@ -737,202 +776,274 @@ describe Puppet::Configurer do
737
776
  end
738
777
 
739
778
  it "should return nil when the cached catalog's environment doesn't match the agent specified environment" do
740
- @agent.instance_variable_set(:@environment, 'second_env')
741
- expects_cached_catalog_only(@catalog)
779
+ Puppet[:environment] = 'second_env'
780
+ configurer = Puppet::Configurer.new
742
781
 
743
- Puppet.expects(:err).with("Not using catalog because its environment 'production' does not match agent specified environment 'second_env' and strict_environment_mode is set")
744
- expect(@agent.run).to be_nil
782
+ catalog = Puppet::Resource::Catalog.new(node_name, Puppet::Node::Environment.remote("production"))
783
+ expects_cached_catalog_only(catalog)
784
+
785
+ expect(Puppet).to receive(:err).with("Not using catalog because its environment 'production' does not match agent specified environment 'second_env' and strict_environment_mode is set")
786
+ expect(configurer.run).to be_nil
745
787
  end
746
788
 
747
- it "should proceed with the cached catalog if its environment matchs the local environment" do
748
- Puppet.settings[:use_cached_catalog] = true
749
- @agent.instance_variable_set(:@environment, 'production')
750
- expects_cached_catalog_only(@catalog)
789
+ it "should proceed with the cached catalog if its environment matches the local environment" do
790
+ expects_cached_catalog_only(catalog)
751
791
 
752
- expect(@agent.run).to eq(0)
792
+ expect(configurer.run).to eq(0)
753
793
  end
754
794
  end
755
795
  end
756
796
 
757
- it "should use the Catalog class to get its catalog" do
758
- Puppet::Resource::Catalog.indirection.expects(:find).returns @catalog
759
-
760
- @agent.retrieve_catalog({})
761
- end
762
-
763
797
  it "should set its cached_catalog_status to 'not_used' when downloading a new catalog" do
764
- Puppet::Resource::Catalog.indirection.expects(:find).with { |name, options| options[:ignore_cache] == true }.returns @catalog
798
+ expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(ignore_cache: true)).and_return(catalog)
799
+
800
+ options = {}
801
+ configurer.run(options)
765
802
 
766
- @agent.retrieve_catalog({})
767
- expect(@agent.instance_variable_get(:@cached_catalog_status)).to eq('not_used')
803
+ expect(options[:report].cached_catalog_status).to eq('not_used')
768
804
  end
769
805
 
770
806
  it "should use its node_name_value to retrieve the catalog" do
771
- Facter.stubs(:value).returns "eh"
772
- Puppet.settings[:node_name_value] = "myhost.domain.com"
773
- Puppet::Resource::Catalog.indirection.expects(:find).with { |name, options| name == "myhost.domain.com" }.returns @catalog
774
-
775
- @agent.retrieve_catalog({})
776
- end
807
+ myhost_facts = Puppet::Node::Facts.new("myhost.domain.com")
808
+ Puppet::Node::Facts.indirection.save(myhost_facts)
777
809
 
778
- it "should default to returning a catalog retrieved directly from the server, skipping the cache" do
779
- Puppet::Resource::Catalog.indirection.expects(:find).with { |name, options| options[:ignore_cache] == true }.returns @catalog
810
+ Puppet.settings[:node_name_value] = "myhost.domain.com"
811
+ expect(Puppet::Resource::Catalog.indirection).to receive(:find).with("myhost.domain.com", anything).and_return(catalog)
780
812
 
781
- expect(@agent.retrieve_catalog({})).to eq(@catalog)
813
+ configurer.run
782
814
  end
783
815
 
784
- it "should log and return the cached catalog when no catalog can be retrieved from the server" do
785
- expects_fallback_to_cached_catalog(@catalog)
816
+ it "should log when no catalog can be retrieved from the server" do
817
+ expects_fallback_to_cached_catalog(catalog)
786
818
 
787
- Puppet.expects(:info).with("Using cached catalog from environment 'production'")
788
- expect(@agent.retrieve_catalog({})).to eq(@catalog)
819
+ allow(Puppet).to receive(:info)
820
+ expect(Puppet).to receive(:info).with("Using cached catalog from environment 'production'")
821
+ configurer.run
789
822
  end
790
823
 
791
824
  it "should set its cached_catalog_status to 'on_failure' when no catalog can be retrieved from the server" do
792
- expects_fallback_to_cached_catalog(@catalog)
825
+ expects_fallback_to_cached_catalog(catalog)
793
826
 
794
- @agent.retrieve_catalog({})
795
- expect(@agent.instance_variable_get(:@cached_catalog_status)).to eq('on_failure')
827
+ options = {}
828
+ configurer.run(options)
829
+
830
+ expect(options[:report].cached_catalog_status).to eq('on_failure')
796
831
  end
797
832
 
798
833
  it "should not look in the cache for a catalog if one is returned from the server" do
799
- expects_new_catalog_only(@catalog)
834
+ expects_new_catalog_only(catalog)
800
835
 
801
- expect(@agent.retrieve_catalog({})).to eq(@catalog)
836
+ configurer.run
802
837
  end
803
838
 
804
839
  it "should return the cached catalog when retrieving the remote catalog throws an exception" do
805
- Puppet::Resource::Catalog.indirection.expects(:find).with { |name, options| options[:ignore_cache] == true }.raises "eh"
806
- Puppet::Resource::Catalog.indirection.expects(:find).with { |name, options| options[:ignore_terminus] == true }.returns @catalog
840
+ expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(ignore_cache: true)).and_raise("eh")
841
+ expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(ignore_terminus: true)).and_return(catalog)
807
842
 
808
- expect(@agent.retrieve_catalog({})).to eq(@catalog)
843
+ configurer.run
809
844
  end
810
845
 
811
846
  it "should set its cached_catalog_status to 'on_failure' when retrieving the remote catalog throws an exception" do
812
- Puppet::Resource::Catalog.indirection.expects(:find).with { |name, options| options[:ignore_cache] == true }.raises "eh"
813
- Puppet::Resource::Catalog.indirection.expects(:find).with { |name, options| options[:ignore_terminus] == true }.returns @catalog
847
+ expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(ignore_cache: true)).and_raise("eh")
848
+ expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(ignore_terminus: true)).and_return(catalog)
849
+
850
+ options = {}
851
+ configurer.run(options)
814
852
 
815
- @agent.retrieve_catalog({})
816
- expect(@agent.instance_variable_get(:@cached_catalog_status)).to eq('on_failure')
853
+ expect(options[:report].cached_catalog_status).to eq('on_failure')
817
854
  end
818
855
 
819
856
  it "should log and return nil if no catalog can be retrieved from the server and :usecacheonfailure is disabled" do
820
857
  Puppet[:usecacheonfailure] = false
821
- Puppet::Resource::Catalog.indirection.expects(:find).with { |name, options| options[:ignore_cache] == true }.returns nil
858
+ expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(ignore_cache: true)).and_return(nil)
822
859
 
823
- Puppet.expects(:warning).with('Not using cache on failed catalog')
860
+ expect(Puppet).to receive(:warning).with('Not using cache on failed catalog')
824
861
 
825
- expect(@agent.retrieve_catalog({})).to be_nil
862
+ expect(configurer.run).to be_nil
826
863
  end
827
864
 
828
865
  it "should set its cached_catalog_status to 'not_used' if no catalog can be retrieved from the server and :usecacheonfailure is disabled or fails to retrieve a catalog" do
829
866
  Puppet[:usecacheonfailure] = false
830
- Puppet::Resource::Catalog.indirection.expects(:find).with { |name, options| options[:ignore_cache] == true }.returns nil
867
+ expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(ignore_cache: true)).and_return(nil)
831
868
 
832
- @agent.retrieve_catalog({})
833
- expect(@agent.instance_variable_get(:@cached_catalog_status)).to eq('not_used')
869
+ options = {}
870
+ configurer.run(options)
871
+
872
+ expect(options[:report].cached_catalog_status).to eq('not_used')
834
873
  end
835
874
 
836
875
  it "should return nil if no cached catalog is available and no catalog can be retrieved from the server" do
837
876
  expects_neither_new_or_cached_catalog
838
877
 
839
- expect(@agent.retrieve_catalog({})).to be_nil
878
+ expect(configurer.run).to be_nil
840
879
  end
841
880
 
842
881
  it "should return nil if its cached catalog environment doesn't match server-specified environment" do
843
- cached_catalog = Puppet::Resource::Catalog.new("tester", Puppet::Node::Environment.remote('second_env'))
844
- @agent.instance_variable_set(:@node_environment, 'production')
882
+ cached_catalog = Puppet::Resource::Catalog.new(node_name, Puppet::Node::Environment.remote('second_env'))
845
883
 
846
884
  expects_fallback_to_cached_catalog(cached_catalog)
847
885
 
848
- Puppet.expects(:err).with("Not using cached catalog because its environment 'second_env' does not match 'production'")
849
- expect(@agent.retrieve_catalog({})).to be_nil
886
+ allow(Puppet).to receive(:err)
887
+ expect(Puppet).to receive(:err).with("Not using cached catalog because its environment 'second_env' does not match 'production'")
888
+ expect(configurer.run).to be_nil
850
889
  end
851
890
 
852
891
  it "should set its cached_catalog_status to 'not_used' if the cached catalog environment doesn't match server-specified environment" do
853
- cached_catalog = Puppet::Resource::Catalog.new("tester", Puppet::Node::Environment.remote('second_env'))
854
- @agent.instance_variable_set(:@node_environment, 'production')
892
+ cached_catalog = Puppet::Resource::Catalog.new(node_name, Puppet::Node::Environment.remote('second_env'))
855
893
 
856
894
  expects_fallback_to_cached_catalog(cached_catalog)
857
895
 
858
- @agent.retrieve_catalog({})
859
- expect(@agent.instance_variable_get(:@cached_catalog_status)).to eq('not_used')
896
+ options = {}
897
+ configurer.run(options)
898
+ expect(options[:report].cached_catalog_status).to eq('not_used')
860
899
  end
861
900
 
862
- it "should return its cached catalog if the environment matches the server-specified environment" do
863
- cached_catalog = Puppet::Resource::Catalog.new("tester", Puppet::Node::Environment.remote(Puppet[:environment]))
864
- @agent.instance_variable_set(:@node_environment, cached_catalog.environment)
901
+ it "should set its cached_catalog_status to 'on_failure' if the cached catalog environment matches server-specified environment" do
902
+ expects_fallback_to_cached_catalog(catalog)
865
903
 
866
- expects_fallback_to_cached_catalog(cached_catalog)
904
+ options = {}
905
+ configurer.run(options)
906
+ expect(options[:report].cached_catalog_status).to eq('on_failure')
907
+ end
908
+
909
+ it "should not update the cached catalog in noop mode" do
910
+ Puppet[:noop] = true
867
911
 
868
- expect(@agent.retrieve_catalog({})).to eq(cached_catalog)
912
+ stub_request(:post, %r{/puppet/v3/catalog}).to_return(:status => 200, :body => catalog.render(:json), :headers => {'Content-Type' => 'application/json'})
913
+
914
+ Puppet::Resource::Catalog.indirection.cache_class = :json
915
+ path = Puppet::Resource::Catalog.indirection.cache.path(catalog.name)
916
+
917
+ expect(File).to_not be_exist(path)
918
+ configurer.run
919
+ expect(File).to_not be_exist(path)
869
920
  end
870
921
 
871
- it "should set its cached_catalog_status to 'on_failure' if the cached catalog environment matches server-specified environment" do
872
- cached_catalog = Puppet::Resource::Catalog.new("tester", Puppet::Node::Environment.remote(Puppet[:environment]))
873
- @agent.instance_variable_set(:@node_environment, cached_catalog.environment)
922
+ it "should update the cached catalog when not in noop mode" do
923
+ Puppet[:noop] = false
924
+ Puppet[:log_level] = 'info'
874
925
 
875
- expects_fallback_to_cached_catalog(cached_catalog)
926
+ stub_request(:post, %r{/puppet/v3/catalog}).to_return(:status => 200, :body => catalog.render(:json), :headers => {'Content-Type' => 'application/json'})
927
+
928
+ Puppet::Resource::Catalog.indirection.cache_class = :json
929
+ cache_path = Puppet::Resource::Catalog.indirection.cache.path(Puppet[:node_name_value])
930
+
931
+ expect(File).to_not be_exist(cache_path)
932
+ configurer.run
933
+ expect(File).to be_exist(cache_path)
934
+
935
+ expect(@logs).to include(an_object_having_attributes(level: :info, message: "Caching catalog for #{Puppet[:node_name_value]}"))
936
+ end
876
937
 
877
- @agent.retrieve_catalog({})
878
- expect(@agent.instance_variable_get(:@cached_catalog_status)).to eq('on_failure')
938
+ it "successfully applies the catalog without a cache" do
939
+ stub_request(:post, %r{/puppet/v3/catalog}).to_return(:status => 200, :body => catalog.render(:json), :headers => {'Content-Type' => 'application/json'})
940
+
941
+ Puppet::Resource::Catalog.indirection.cache_class = nil
942
+
943
+ expect(configurer.run).to eq(0)
944
+ end
945
+
946
+ it "should not update the cached catalog when running puppet apply" do
947
+ Puppet::Resource::Catalog.indirection.cache_class = :json
948
+ path = Puppet::Resource::Catalog.indirection.cache.path(catalog.name)
949
+
950
+ expect(File).to_not be_exist(path)
951
+ configurer.run(catalog: catalog)
952
+ expect(File).to_not be_exist(path)
879
953
  end
880
954
  end
881
955
 
882
- describe "when converting the catalog" do
883
- before do
884
- Puppet.settings.stubs(:use).returns(true)
956
+ describe "when converging the environment" do
957
+ let(:apple) { Puppet::Resource::Catalog.new(Puppet[:node_name_value], Puppet::Node::Environment.remote('apple')) }
958
+ let(:banana) { Puppet::Resource::Catalog.new(Puppet[:node_name_value], Puppet::Node::Environment.remote('banana')) }
885
959
 
886
- catalog.stubs(:to_ral).returns ral_catalog
960
+ before :each do
961
+ apple.add_resource(resource)
962
+ banana.add_resource(resource)
887
963
  end
888
964
 
889
- let (:catalog) { Puppet::Resource::Catalog.new('tester', Puppet::Node::Environment.remote(Puppet[:environment].to_sym)) }
890
- let (:ral_catalog) { Puppet::Resource::Catalog.new('tester', Puppet::Node::Environment.remote(Puppet[:environment].to_sym)) }
965
+ it "converges after multiple attempts" do
966
+ expect(Puppet::Resource::Catalog.indirection).to receive(:find).and_return(apple, banana, banana)
967
+
968
+ allow(Puppet).to receive(:notice)
969
+ allow(Puppet).to receive(:push_context)
970
+ expect(Puppet).to receive(:notice).with("Local environment: 'production' doesn't match server specified environment 'apple', restarting agent run with environment 'apple'")
971
+ expect(Puppet).to receive(:notice).with("Local environment: 'apple' doesn't match server specified environment 'banana', restarting agent run with environment 'banana'")
891
972
 
892
- it "should convert the catalog to a RAL-formed catalog" do
893
- expect(@agent.convert_catalog(catalog, 10)).to equal(ral_catalog)
973
+ expect(Puppet).to receive(:push_context).with(
974
+ hash_including(current_environment: an_object_having_attributes(name: :production)),
975
+ 'Local node environment production for configurer transaction'
976
+ )
977
+ expect(Puppet).to receive(:push_context).with(
978
+ hash_including(current_environment: an_object_having_attributes(name: :apple)),
979
+ 'Local node environment apple for configurer transaction'
980
+ )
981
+ expect(Puppet).to receive(:push_context).with(
982
+ hash_including(current_environment: an_object_having_attributes(name: :banana)),
983
+ 'Local node environment banana for configurer transaction'
984
+ )
985
+
986
+ configurer.run
894
987
  end
895
988
 
896
- it "should finalize the catalog" do
897
- ral_catalog.expects(:finalize)
989
+ it "raises if it can't converge after 4 tries after the initial catalog request" do
990
+ expect(Puppet::Resource::Catalog.indirection).to receive(:find).and_return(apple, banana, apple, banana, apple)
991
+
992
+ configurer.run
898
993
 
899
- @agent.convert_catalog(catalog, 10)
994
+ expect(@logs).to include(an_object_having_attributes(level: :err, message: "Failed to apply catalog: Catalog environment didn't stabilize after 4 fetches, aborting run"))
900
995
  end
996
+ end
901
997
 
902
- it "should record the passed retrieval time with the RAL catalog" do
903
- ral_catalog.expects(:retrieval_duration=).with 10
998
+ describe "when converting the catalog" do
999
+ it "converts Puppet::Resource into Puppet::Type::Notify" do
1000
+ expect(configurer).to receive(:apply_catalog) do |ral, _|
1001
+ expect(ral.resources).to contain(an_instance_of(Puppet::Type::Notify))
1002
+ end
904
1003
 
905
- @agent.convert_catalog(catalog, 10)
1004
+ configurer.run(catalog: catalog)
906
1005
  end
907
1006
 
908
- it "should write the RAL catalog's class file" do
909
- ral_catalog.expects(:write_class_file)
1007
+ it "adds default schedules" do
1008
+ expect(configurer).to receive(:apply_catalog) do |ral, _|
1009
+ expect(ral.resources.map(&:to_ref)).to contain(%w{Schedule[puppet] Schedule[hourly] Schedule[daily] Schedule[weekly] Schedule[monthly] Schedule[never]})
1010
+ end
910
1011
 
911
- @agent.convert_catalog(catalog, 10)
1012
+ configurer.run
912
1013
  end
913
1014
 
914
- it "should write the RAL catalog's resource file" do
915
- ral_catalog.expects(:write_resource_file)
1015
+ it "records the retrieval duration to the catalog" do
1016
+ expect(configurer).to receive(:apply_catalog) do |ral, _|
1017
+ expect(ral.retrieval_duration).to be_an_instance_of(Float)
1018
+ end
916
1019
 
917
- @agent.convert_catalog(catalog, 10)
1020
+ configurer.run
918
1021
  end
919
- end
920
1022
 
921
- describe "when determining whether to pluginsync" do
922
- it "should default to Puppet[:pluginsync] when explicitly set by the commandline" do
923
- Puppet.settings[:pluginsync] = false
924
- Puppet.settings.expects(:set_by_cli?).returns(true)
1023
+ it "writes the class file containing applied settings classes" do
1024
+ expect(File).to_not be_exist(Puppet[:classfile])
925
1025
 
926
- expect(described_class).not_to be_should_pluginsync
1026
+ configurer.run
1027
+
1028
+ expect(File.read(Puppet[:classfile]).chomp).to eq('settings')
927
1029
  end
928
1030
 
929
- it "should default to Puppet[:pluginsync] when explicitly set by config" do
930
- Puppet.settings[:pluginsync] = false
931
- Puppet.settings.expects(:set_by_config?).returns(true)
1031
+ it "writes an empty resource file since no resources are 'managed'" do
1032
+ expect(File).to_not be_exist(Puppet[:resourcefile])
932
1033
 
933
- expect(described_class).not_to be_should_pluginsync
1034
+ configurer.run
1035
+
1036
+ expect(File.read(Puppet[:resourcefile]).chomp).to eq("")
934
1037
  end
935
1038
 
1039
+ it "adds the conversion time to the report" do
1040
+ configurer.run(report: report)
1041
+
1042
+ expect(report.metrics['time']['convert_catalog']).to be_an_instance_of(Float)
1043
+ end
1044
+ end
1045
+
1046
+ describe "when determining whether to pluginsync" do
936
1047
  it "should be true if use_cached_catalog is false" do
937
1048
  Puppet.settings[:use_cached_catalog] = false
938
1049
 
@@ -949,46 +1060,306 @@ describe Puppet::Configurer do
949
1060
  describe "when attempting failover" do
950
1061
  it "should not failover if server_list is not set" do
951
1062
  Puppet.settings[:server_list] = []
952
- @agent.expects(:find_functional_server).never
953
- @agent.run
1063
+ configurer.run
954
1064
  end
955
1065
 
956
1066
  it "should not failover during an apply run" do
957
1067
  Puppet.settings[:server_list] = ["myserver:123"]
958
- @agent.expects(:find_functional_server).never
959
- catalog = Puppet::Resource::Catalog.new("tester", Puppet::Node::Environment.remote(Puppet[:environment].to_sym))
960
- @agent.run :catalog => catalog
1068
+ catalog = Puppet::Resource::Catalog.new(node_name, Puppet::Node::Environment.remote(Puppet[:environment].to_sym))
1069
+ configurer.run(catalog: catalog)
961
1070
  end
962
1071
 
963
- it "should select a server when provided" do
1072
+ it "should select a server when it receives 200 OK response" do
964
1073
  Puppet.settings[:server_list] = ["myserver:123"]
965
- pool = Puppet::Network::HTTP::Pool.new(Puppet[:http_keepalive_timeout])
966
- Puppet::Network::HTTP::Pool.expects(:new).returns(pool)
967
- Puppet.expects(:override).with({:http_pool => pool}).yields
968
- Puppet.expects(:override).with({:server => "myserver", :serverport => '123'}).twice.yields
969
- Puppet::Node.indirection.expects(:find).returns(nil)
970
- @agent.expects(:run_internal).returns(nil)
971
- @agent.run
1074
+
1075
+ stub_request(:get, 'https://myserver:123/status/v1/simple/master').to_return(status: 200)
1076
+
1077
+ options = {}
1078
+ configurer.run(options)
1079
+ expect(options[:report].master_used).to eq('myserver:123')
1080
+ expect(options[:report].server_used).to eq('myserver:123')
972
1081
  end
973
1082
 
974
- it "should fallback to an empty server when failover fails" do
1083
+ it "should report when usecacheonfailure is false and server is unavailable" do
975
1084
  Puppet.settings[:server_list] = ["myserver:123"]
976
- pool = Puppet::Network::HTTP::Pool.new(Puppet[:http_keepalive_timeout])
977
- Puppet::Network::HTTP::Pool.expects(:new).returns(pool)
978
- Puppet.expects(:override).with({:http_pool => pool}).yields
979
- Puppet.expects(:override).with({:server => "myserver", :serverport => '123'}).yields
980
- Puppet.expects(:override).with({:server => nil, :serverport => nil}).yields
981
- error = Net::HTTPError.new(400, 'dummy server communication error')
982
- Puppet::Node.indirection.expects(:find).raises(error)
983
- @agent.expects(:run_internal).returns(nil)
984
- @agent.run
985
- end
986
-
987
- it "should not make multiple node requets when the server is found" do
988
- Puppet.settings[:server_list] = ["myserver:123"]
989
- Puppet::Node.indirection.expects(:find).returns("mynode").once
990
- @agent.expects(:prepare_and_retrieve_catalog).returns(nil)
991
- @agent.run
1085
+ Puppet[:usecacheonfailure] = false
1086
+
1087
+ stub_request(:get, 'https://myserver:123/status/v1/simple/master').to_return(status: [500, "Internal Server Error"])
1088
+
1089
+ expect {
1090
+ configurer.run
1091
+ }.to raise_error(Puppet::Error, /Could not select a functional puppet server from server_list:/)
1092
+
1093
+ expect(@logs).to include(an_object_having_attributes(level: :err, message: /Puppet server myserver:123 is unavailable: 500 Internal Server Error/))
1094
+ end
1095
+
1096
+ it "should error when no servers in 'server_list' are reachable" do
1097
+ Puppet.settings[:server_list] = "myserver:123,someotherservername"
1098
+ Puppet[:usecacheonfailure] = false
1099
+
1100
+ stub_request(:get, 'https://myserver:123/status/v1/simple/master').to_return(status: 400)
1101
+ stub_request(:get, 'https://someotherservername:8140/status/v1/simple/master').to_return(status: 400)
1102
+
1103
+ expect{
1104
+ configurer.run
1105
+ }.to raise_error(Puppet::Error, /Could not select a functional puppet server from server_list: 'myserver:123,someotherservername'/)
1106
+ end
1107
+
1108
+ it "should warn when servers in 'server_list' are unreachable" do
1109
+ Puppet.settings[:server_list] = "mybadserver1:123,mybadserver2:123,mygoodserver"
1110
+ Puppet[:usecacheonfailure] = false
1111
+
1112
+ stub_request(:get, 'https://mybadserver1:123/status/v1/simple/master').and_raise(Puppet::HTTP::HTTPError)
1113
+ stub_request(:get, 'https://mybadserver2:123/status/v1/simple/master').and_raise(Puppet::HTTP::HTTPError)
1114
+ stub_request(:get, 'https://mygoodserver:8140/status/v1/simple/master').to_return(status: 200)
1115
+
1116
+ expect(Puppet).to receive(:warning).with(/^Unable to connect to server from server_list setting:.*Trying with next server from server_list.$/).twice
1117
+ configurer.run
1118
+ end
1119
+
1120
+ it "should warn when servers in 'server_list' respond with error" do
1121
+ Puppet.settings[:server_list] = "mybadserver:123,someotherservername"
1122
+ Puppet[:usecacheonfailure] = false
1123
+
1124
+ stub_request(:get, 'https://mybadserver:123/status/v1/simple/master').to_return(status: 400)
1125
+ stub_request(:get, 'https://someotherservername:8140/status/v1/simple/master').to_return(status: 200)
1126
+
1127
+ expect(Puppet).to receive(:warning).with(/^Puppet server mybadserver:123 is unavailable: 400 Trying with next server from server_list.$/)
1128
+ configurer.run
1129
+ end
1130
+
1131
+ it "should not error when usecacheonfailure is true and no servers in 'server_list' are reachable" do
1132
+ Puppet.settings[:server_list] = "myserver:123,someotherservername"
1133
+ Puppet[:usecacheonfailure] = true
1134
+
1135
+ stub_request(:get, 'https://myserver:123/status/v1/simple/master').to_return(status: 400)
1136
+ stub_request(:get, 'https://someotherservername:8140/status/v1/simple/master').to_return(status: 400)
1137
+
1138
+ options = {}
1139
+
1140
+ expect(configurer.run(options)).to eq(0)
1141
+ expect(options[:report].server_used).to be_nil
1142
+ end
1143
+ end
1144
+
1145
+ describe "when selecting an environment" do
1146
+ include PuppetSpec::Settings
1147
+
1148
+ describe "when the last used environment is available" do
1149
+ let(:last_server_specified_environment) { 'development' }
1150
+
1151
+ before do
1152
+ Puppet[:lastrunfile] = file_containing('last_run_summary.yaml', <<~SUMMARY)
1153
+ ---
1154
+ version:
1155
+ config: 1624882680
1156
+ puppet: 6.24.0
1157
+ application:
1158
+ initial_environment: #{Puppet[:environment]}
1159
+ converged_environment: #{last_server_specified_environment}
1160
+ run_mode: agent
1161
+ SUMMARY
1162
+ end
1163
+
1164
+ describe "when the use_last_environment is set to true" do
1165
+ before do
1166
+ expect(Puppet::Node.indirection).not_to receive(:find)
1167
+ .with(anything, hash_including(:ignore_cache => true, :fail_on_404 => true))
1168
+ end
1169
+
1170
+ it "prefers the environment set via cli" do
1171
+ Puppet.settings.handlearg('--environment', 'usethis')
1172
+ configurer.run
1173
+
1174
+ expect(configurer.environment).to eq('usethis')
1175
+ end
1176
+
1177
+ it "prefers the environment set via lastrunfile over config" do
1178
+ FileUtils.mkdir_p(Puppet[:confdir])
1179
+ set_puppet_conf(Puppet[:confdir], <<~CONF)
1180
+ [main]
1181
+ environment = usethis
1182
+ lastrunfile = #{Puppet[:lastrunfile]}
1183
+ CONF
1184
+
1185
+ Puppet.initialize_settings
1186
+ configurer.run
1187
+
1188
+ expect(configurer.environment).to eq(last_server_specified_environment)
1189
+ end
1190
+
1191
+ it "uses the environment from Puppet[:environment] if given a catalog" do
1192
+ configurer.run(catalog: catalog)
1193
+
1194
+ expect(configurer.environment).to eq(Puppet[:environment])
1195
+ end
1196
+
1197
+ it "uses the environment from Puppet[:environment] if use_cached_catalog = true" do
1198
+ Puppet[:use_cached_catalog] = true
1199
+ expects_cached_catalog_only(catalog)
1200
+ configurer.run
1201
+
1202
+ expect(configurer.environment).to eq(Puppet[:environment])
1203
+ end
1204
+
1205
+ describe "when the environment is not set via CLI" do
1206
+ it "uses the environment found in lastrunfile if the key exists" do
1207
+ configurer.run
1208
+
1209
+ expect(configurer.environment).to eq(last_server_specified_environment)
1210
+ end
1211
+
1212
+ it "pushes the converged environment found in lastrunfile over the existing context" do
1213
+ initial_env = Puppet::Node::Environment.remote('production')
1214
+ Puppet.push_context(
1215
+ current_environment: initial_env,
1216
+ loaders: Puppet::Pops::Loaders.new(initial_env, true))
1217
+
1218
+ expect(Puppet).to receive(:push_context).with(
1219
+ hash_including(:current_environment, :loaders),
1220
+ "Local node environment #{last_server_specified_environment} for configurer transaction"
1221
+ ).once.and_call_original
1222
+
1223
+ configurer.run
1224
+ end
1225
+
1226
+ it "uses the environment from Puppet[:environment] if strict_environment_mode is set" do
1227
+ Puppet[:strict_environment_mode] = true
1228
+ configurer.run
1229
+
1230
+ expect(configurer.environment).to eq(Puppet[:environment])
1231
+ end
1232
+
1233
+ it "uses the environment from Puppet[:environment] if initial_environment is the same as converged_environment" do
1234
+ Puppet[:lastrunfile] = file_containing('last_run_summary.yaml', <<~SUMMARY)
1235
+ ---
1236
+ version:
1237
+ config: 1624882680
1238
+ puppet: 6.24.0
1239
+ application:
1240
+ initial_environment: development
1241
+ converged_environment: development
1242
+ run_mode: agent
1243
+ SUMMARY
1244
+ configurer.run
1245
+
1246
+ expect(configurer.environment).to eq(Puppet[:environment])
1247
+ end
1248
+ end
1249
+ end
1250
+
1251
+ describe "when the use_last_environment setting is set to false" do
1252
+ let(:node_environment) { Puppet::Node::Environment.remote(:salam) }
1253
+ let(:node) { Puppet::Node.new(Puppet[:node_name_value]) }
1254
+
1255
+ before do
1256
+ Puppet[:use_last_environment] = false
1257
+ node.environment = node_environment
1258
+
1259
+ allow(Puppet::Node.indirection).to receive(:find)
1260
+ allow(Puppet::Node.indirection).to receive(:find)
1261
+ .with(anything, hash_including(:ignore_cache => true, :fail_on_404 => true))
1262
+ .and_return(node)
1263
+ end
1264
+
1265
+ it "does a node request" do
1266
+ expect(Puppet::Node.indirection).to receive(:find)
1267
+ .with(anything, hash_including(:ignore_cache => true, :fail_on_404 => true))
1268
+
1269
+ configurer.run
1270
+ end
1271
+
1272
+ it "uses the node environment from the node request" do
1273
+ configurer.run
1274
+
1275
+ expect(configurer.environment).to eq(node_environment.name.to_s)
1276
+ end
1277
+ end
1278
+ end
1279
+
1280
+ describe "when the last used environment is not available" do
1281
+ describe "when the node request succeeds" do
1282
+ let(:node_environment) { Puppet::Node::Environment.remote(:salam) }
1283
+ let(:node) { Puppet::Node.new(Puppet[:node_name_value]) }
1284
+ let(:last_server_specified_environment) { 'development' }
1285
+
1286
+ before do
1287
+ node.environment = node_environment
1288
+
1289
+ allow(Puppet::Node.indirection).to receive(:find)
1290
+ allow(Puppet::Node.indirection).to receive(:find)
1291
+ .with(anything, hash_including(:ignore_cache => true, :fail_on_404 => true))
1292
+ .and_return(node)
1293
+ end
1294
+
1295
+ it "uses the environment from the node request if the run mode doesn't match" do
1296
+ Puppet[:lastrunfile] = file_containing('last_run_summary.yaml', <<~SUMMARY)
1297
+ ---
1298
+ version:
1299
+ config: 1624882680
1300
+ puppet: 6.24.0
1301
+ application:
1302
+ initial_environment: #{Puppet[:environment]}
1303
+ converged_environment: #{last_server_specified_environment}
1304
+ run_mode: user
1305
+ SUMMARY
1306
+ configurer.run
1307
+
1308
+ expect(configurer.environment).to eq(node_environment.name.to_s)
1309
+ end
1310
+
1311
+ it "uses the environment from the node request if lastrunfile does not contain the expected keys" do
1312
+ Puppet[:lastrunfile] = file_containing('last_run_summary.yaml', <<~SUMMARY)
1313
+ ---
1314
+ version:
1315
+ config: 1624882680
1316
+ puppet: 6.24.0
1317
+ SUMMARY
1318
+ configurer.run
1319
+
1320
+ expect(configurer.environment).to eq(node_environment.name.to_s)
1321
+ end
1322
+
1323
+ it "uses the environment from the node request if lastrunfile is invalid YAML" do
1324
+ Puppet[:lastrunfile] = file_containing('last_run_summary.yaml', <<~SUMMARY)
1325
+ Key: 'this is my very very very ' +
1326
+ 'long string'
1327
+ SUMMARY
1328
+ configurer.run
1329
+
1330
+ expect(configurer.environment).to eq(node_environment.name.to_s)
1331
+ end
1332
+
1333
+ it "uses the environment from the node request if lastrunfile exists but is empty" do
1334
+ Puppet[:lastrunfile] = file_containing('last_run_summary.yaml', '')
1335
+ configurer.run
1336
+
1337
+ expect(configurer.environment).to eq(node_environment.name.to_s)
1338
+ end
1339
+
1340
+ it "uses the environment from the node request if the last used one cannot be found" do
1341
+ Puppet[:lastrunfile] = tmpfile('last_run_summary.yaml')
1342
+ configurer.run
1343
+
1344
+ expect(configurer.environment).to eq(node_environment.name.to_s)
1345
+ end
1346
+ end
1347
+
1348
+ describe "when the node request fails" do
1349
+ before do
1350
+ allow(Puppet::Node.indirection).to receive(:find).and_call_original
1351
+ allow(Puppet::Node.indirection).to receive(:find)
1352
+ .with(anything, hash_including(:ignore_cache => true, :fail_on_404 => true))
1353
+ .and_raise(Puppet::Error)
1354
+ end
1355
+
1356
+ it "uses the environment from Puppet[:environment] if the last used one cannot be found" do
1357
+ Puppet[:lastrunfile] = tmpfile('last_run_summary.yaml')
1358
+ configurer.run
1359
+
1360
+ expect(configurer.environment).to eq(Puppet[:environment])
1361
+ end
1362
+ end
992
1363
  end
993
1364
  end
994
1365
  end