puppet 4.5.3-universal-darwin → 4.6.1-universal-darwin

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

Potentially problematic release.


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

Files changed (422) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +10 -1
  3. data/ext/debian/control +2 -4
  4. data/ext/project_data.yaml +4 -4
  5. data/install.rb +6 -2
  6. data/lib/puppet.rb +3 -1
  7. data/lib/puppet/agent/locker.rb +1 -1
  8. data/lib/puppet/application.rb +6 -4
  9. data/lib/puppet/application/agent.rb +2 -1
  10. data/lib/puppet/application/cert.rb +35 -2
  11. data/lib/puppet/application/device.rb +1 -1
  12. data/lib/puppet/application/generate.rb +5 -0
  13. data/lib/puppet/application/lookup.rb +3 -3
  14. data/lib/puppet/application_support.rb +1 -1
  15. data/lib/puppet/compilable_resource_type.rb +15 -0
  16. data/lib/puppet/configurer.rb +67 -10
  17. data/lib/puppet/configurer/plugin_handler.rb +2 -4
  18. data/lib/puppet/data_providers/hiera_config.rb +1 -1
  19. data/lib/puppet/defaults.rb +34 -7
  20. data/lib/puppet/environments.rb +4 -2
  21. data/lib/puppet/error.rb +1 -1
  22. data/lib/puppet/external/dot.rb +1 -1
  23. data/lib/puppet/face/ca.rb +4 -1
  24. data/lib/puppet/face/certificate.rb +7 -1
  25. data/lib/puppet/face/epp.rb +5 -5
  26. data/lib/puppet/face/generate.rb +64 -0
  27. data/lib/puppet/face/help.rb +19 -13
  28. data/lib/puppet/face/man.rb +1 -1
  29. data/lib/puppet/feature/external_facts.rb +1 -1
  30. data/lib/puppet/file_system.rb +16 -0
  31. data/lib/puppet/file_system/file_impl.rb +5 -0
  32. data/lib/puppet/file_system/memory_impl.rb +4 -0
  33. data/lib/puppet/file_system/path_pattern.rb +1 -0
  34. data/lib/puppet/file_system/windows.rb +19 -0
  35. data/lib/puppet/functions.rb +3 -5
  36. data/lib/puppet/functions/assert_type.rb +1 -1
  37. data/lib/puppet/functions/defined.rb +7 -5
  38. data/lib/puppet/functions/dig.rb +2 -18
  39. data/lib/puppet/functions/hiera.rb +1 -1
  40. data/lib/puppet/functions/lest.rb +1 -37
  41. data/lib/puppet/functions/new.rb +2 -473
  42. data/lib/puppet/functions/reverse_each.rb +2 -59
  43. data/lib/puppet/functions/scanf.rb +4 -4
  44. data/lib/puppet/functions/step.rb +1 -63
  45. data/lib/puppet/functions/then.rb +1 -61
  46. data/lib/puppet/functions/type.rb +1 -40
  47. data/lib/puppet/functions/unwrap.rb +40 -0
  48. data/lib/puppet/generate/models/type/property.rb +70 -0
  49. data/lib/puppet/generate/models/type/type.rb +57 -0
  50. data/lib/puppet/generate/templates/type/pcore.erb +41 -0
  51. data/lib/puppet/generate/type.rb +239 -0
  52. data/lib/puppet/graph/simple_graph.rb +2 -6
  53. data/lib/puppet/indirector/catalog/static_compiler.rb +5 -2
  54. data/lib/puppet/indirector/facts/facter.rb +1 -1
  55. data/lib/puppet/indirector/key/ca.rb +2 -2
  56. data/lib/puppet/indirector/request.rb +25 -4
  57. data/lib/puppet/indirector/rest.rb +73 -3
  58. data/lib/puppet/info_service/class_information_service.rb +1 -2
  59. data/lib/puppet/interface/documentation.rb +1 -1
  60. data/lib/puppet/loaders.rb +2 -0
  61. data/lib/puppet/metatype/manager.rb +6 -6
  62. data/lib/puppet/module.rb +8 -1
  63. data/lib/puppet/module_tool.rb +2 -2
  64. data/lib/puppet/module_tool/checksums.rb +1 -1
  65. data/lib/puppet/module_tool/errors/installer.rb +2 -2
  66. data/lib/puppet/module_tool/metadata.rb +1 -1
  67. data/lib/puppet/network/http/api/indirected_routes.rb +23 -32
  68. data/lib/puppet/network/http/rack/rest.rb +15 -1
  69. data/lib/puppet/network/rights.rb +1 -11
  70. data/lib/puppet/node/environment.rb +7 -3
  71. data/lib/puppet/node/facts.rb +1 -1
  72. data/lib/puppet/parameter.rb +23 -3
  73. data/lib/puppet/parameter/boolean.rb +1 -1
  74. data/lib/puppet/parameter/value.rb +1 -1
  75. data/lib/puppet/parser.rb +0 -1
  76. data/lib/puppet/parser/ast/pops_bridge.rb +1 -1
  77. data/lib/puppet/parser/ast/resource.rb +5 -0
  78. data/lib/puppet/parser/ast/resource_instance.rb +5 -1
  79. data/lib/puppet/parser/ast/resourceparam.rb +5 -0
  80. data/lib/puppet/parser/compiler.rb +14 -17
  81. data/lib/puppet/parser/compiler/catalog_validator/relationship_validator.rb +1 -1
  82. data/lib/puppet/parser/environment_compiler.rb +10 -0
  83. data/lib/puppet/parser/functions/create_resources.rb +39 -24
  84. data/lib/puppet/parser/functions/defined.rb +2 -26
  85. data/lib/puppet/parser/functions/dig.rb +29 -0
  86. data/lib/puppet/parser/functions/lest.rb +49 -0
  87. data/lib/puppet/parser/functions/new.rb +530 -0
  88. data/lib/puppet/parser/functions/require.rb +1 -1
  89. data/lib/puppet/parser/functions/reverse_each.rb +83 -0
  90. data/lib/puppet/parser/functions/scanf.rb +4 -4
  91. data/lib/puppet/parser/functions/step.rb +84 -0
  92. data/lib/puppet/parser/functions/then.rb +73 -0
  93. data/lib/puppet/parser/functions/type.rb +53 -0
  94. data/lib/puppet/parser/resource.rb +16 -7
  95. data/lib/puppet/parser/scope.rb +36 -28
  96. data/lib/puppet/parser/type_loader.rb +1 -1
  97. data/lib/puppet/plugins/data_providers/data_provider.rb +1 -1
  98. data/lib/puppet/pops.rb +13 -0
  99. data/lib/puppet/pops/adapters.rb +49 -49
  100. data/lib/puppet/pops/binder/scheme_handler/confdir_scheme.rb +1 -1
  101. data/lib/puppet/pops/evaluator/access_operator.rb +39 -2
  102. data/lib/puppet/pops/evaluator/closure.rb +39 -13
  103. data/lib/puppet/pops/evaluator/collector_transformer.rb +10 -1
  104. data/lib/puppet/pops/evaluator/evaluator_impl.rb +16 -11
  105. data/lib/puppet/pops/evaluator/external_syntax_support.rb +1 -1
  106. data/lib/puppet/pops/evaluator/json_strict_literal_evaluator.rb +0 -1
  107. data/lib/puppet/pops/evaluator/literal_evaluator.rb +0 -1
  108. data/lib/puppet/pops/evaluator/relationship_operator.rb +1 -2
  109. data/lib/puppet/pops/evaluator/runtime3_resource_support.rb +119 -0
  110. data/lib/puppet/pops/evaluator/runtime3_support.rb +19 -45
  111. data/lib/puppet/pops/functions/function.rb +5 -0
  112. data/lib/puppet/pops/issues.rb +1 -1
  113. data/lib/puppet/pops/label_provider.rb +2 -2
  114. data/lib/puppet/pops/loader/base_loader.rb +12 -15
  115. data/lib/puppet/pops/loader/loader.rb +15 -50
  116. data/lib/puppet/pops/loader/loader_paths.rb +28 -2
  117. data/lib/puppet/pops/loader/module_loaders.rb +16 -1
  118. data/lib/puppet/pops/loader/null_loader.rb +17 -1
  119. data/lib/puppet/pops/loader/puppet_function_instantiator.rb +12 -11
  120. data/lib/puppet/pops/loader/puppet_resource_type_impl_instantiator.rb +80 -0
  121. data/lib/puppet/pops/loader/ruby_function_instantiator.rb +2 -3
  122. data/lib/puppet/pops/loader/runtime3_type_loader.rb +52 -13
  123. data/lib/puppet/pops/loader/static_loader.rb +55 -0
  124. data/lib/puppet/pops/loader/type_definition_instantiator.rb +30 -14
  125. data/lib/puppet/pops/loader/typed_name.rb +50 -0
  126. data/lib/puppet/pops/loaders.rb +64 -19
  127. data/lib/puppet/pops/merge_strategy.rb +7 -7
  128. data/lib/puppet/pops/migration/migration_checker.rb +4 -0
  129. data/lib/puppet/pops/model/model_label_provider.rb +2 -0
  130. data/lib/puppet/pops/parser/egrammar.ra +8 -5
  131. data/lib/puppet/pops/parser/eparser.rb +1550 -1498
  132. data/lib/puppet/pops/parser/evaluating_parser.rb +1 -1
  133. data/lib/puppet/pops/parser/interpolation_support.rb +7 -0
  134. data/lib/puppet/pops/parser/lexer2.rb +14 -1
  135. data/lib/puppet/pops/parser/locator.rb +30 -1
  136. data/lib/puppet/pops/parser/parser_support.rb +0 -3
  137. data/lib/puppet/pops/parser/slurp_support.rb +3 -3
  138. data/lib/puppet/pops/patterns.rb +9 -1
  139. data/lib/puppet/pops/pcore.rb +67 -11
  140. data/lib/puppet/pops/puppet_stack.rb +43 -0
  141. data/lib/puppet/pops/resource/param.rb +51 -0
  142. data/lib/puppet/pops/resource/resource_type_impl.rb +301 -0
  143. data/lib/puppet/pops/resource/resource_type_set.pcore +21 -0
  144. data/lib/puppet/pops/serialization.rb +17 -0
  145. data/lib/puppet/pops/serialization/abstract_reader.rb +149 -0
  146. data/lib/puppet/pops/serialization/abstract_writer.rb +179 -0
  147. data/lib/puppet/pops/serialization/deserializer.rb +60 -0
  148. data/lib/puppet/pops/serialization/extension.rb +126 -0
  149. data/lib/puppet/pops/serialization/instance_reader.rb +19 -0
  150. data/lib/puppet/pops/serialization/instance_writer.rb +14 -0
  151. data/lib/puppet/pops/serialization/json.rb +247 -0
  152. data/lib/puppet/pops/serialization/object.rb +63 -0
  153. data/lib/puppet/pops/serialization/rgen.rb +151 -0
  154. data/lib/puppet/pops/serialization/serializer.rb +91 -0
  155. data/lib/puppet/pops/serialization/time_factory.rb +66 -0
  156. data/lib/puppet/pops/types/annotatable.rb +36 -0
  157. data/lib/puppet/pops/types/implementation_registry.rb +3 -8
  158. data/lib/puppet/pops/types/p_meta_type.rb +83 -0
  159. data/lib/puppet/pops/types/p_object_type.rb +110 -117
  160. data/lib/puppet/pops/types/p_runtime_type.rb +13 -0
  161. data/lib/puppet/pops/types/p_sem_ver_range_type.rb +23 -0
  162. data/lib/puppet/pops/types/p_sem_ver_type.rb +30 -2
  163. data/lib/puppet/pops/types/p_sensitive_type.rb +69 -0
  164. data/lib/puppet/pops/types/p_type_set_type.rb +361 -0
  165. data/lib/puppet/pops/types/puppet_object.rb +0 -5
  166. data/lib/puppet/pops/types/ruby_generator.rb +9 -2
  167. data/lib/puppet/pops/types/type_calculator.rb +6 -1
  168. data/lib/puppet/pops/types/type_factory.rb +14 -12
  169. data/lib/puppet/pops/types/type_formatter.rb +78 -33
  170. data/lib/puppet/pops/types/type_mismatch_describer.rb +0 -2
  171. data/lib/puppet/pops/types/type_parser.rb +27 -2
  172. data/lib/puppet/pops/types/type_set_reference.rb +59 -0
  173. data/lib/puppet/pops/types/types.rb +366 -13
  174. data/lib/puppet/pops/validation.rb +4 -4
  175. data/lib/puppet/pops/validation/checker4_0.rb +5 -2
  176. data/lib/puppet/pops/visitor.rb +2 -2
  177. data/lib/puppet/property.rb +64 -5
  178. data/lib/puppet/provider.rb +1 -1
  179. data/lib/puppet/provider/aixobject.rb +3 -3
  180. data/lib/puppet/provider/group/aix.rb +4 -4
  181. data/lib/puppet/provider/macauthorization/macauthorization.rb +1 -1
  182. data/lib/puppet/provider/mailalias/aliases.rb +1 -1
  183. data/lib/puppet/provider/mcx/mcxcontent.rb +2 -2
  184. data/lib/puppet/provider/mount/parsed.rb +1 -1
  185. data/lib/puppet/provider/nameservice/directoryservice.rb +5 -5
  186. data/lib/puppet/provider/package/appdmg.rb +3 -3
  187. data/lib/puppet/provider/package/apple.rb +1 -1
  188. data/lib/puppet/provider/package/dnf.rb +5 -0
  189. data/lib/puppet/provider/package/nim.rb +1 -1
  190. data/lib/puppet/provider/package/pacman.rb +2 -2
  191. data/lib/puppet/provider/package/pip.rb +5 -3
  192. data/lib/puppet/provider/package/pip3.rb +1 -1
  193. data/lib/puppet/provider/package/pkg.rb +5 -5
  194. data/lib/puppet/provider/package/pkgdmg.rb +4 -4
  195. data/lib/puppet/provider/package/pkgin.rb +1 -1
  196. data/lib/puppet/provider/package/pkgutil.rb +1 -1
  197. data/lib/puppet/provider/package/portage.rb +48 -8
  198. data/lib/puppet/provider/package/sun.rb +1 -1
  199. data/lib/puppet/provider/package/tdnf.rb +28 -0
  200. data/lib/puppet/provider/package/yum.rb +22 -4
  201. data/lib/puppet/provider/parsedfile.rb +2 -2
  202. data/lib/puppet/provider/service/base.rb +1 -1
  203. data/lib/puppet/provider/service/bsd.rb +1 -1
  204. data/lib/puppet/provider/service/daemontools.rb +2 -2
  205. data/lib/puppet/provider/service/debian.rb +3 -3
  206. data/lib/puppet/provider/service/init.rb +5 -3
  207. data/lib/puppet/provider/service/launchd.rb +16 -2
  208. data/lib/puppet/provider/service/runit.rb +1 -1
  209. data/lib/puppet/provider/service/smf.rb +8 -1
  210. data/lib/puppet/provider/service/systemd.rb +39 -6
  211. data/lib/puppet/provider/ssh_authorized_key/parsed.rb +1 -1
  212. data/lib/puppet/provider/user/aix.rb +3 -2
  213. data/lib/puppet/provider/user/directoryservice.rb +4 -3
  214. data/lib/puppet/provider/user/hpux.rb +1 -1
  215. data/lib/puppet/provider/user/user_role_add.rb +1 -1
  216. data/lib/puppet/provider/user/windows_adsi.rb +3 -0
  217. data/lib/puppet/provider/zfs/zfs.rb +1 -1
  218. data/lib/puppet/reference/type.rb +1 -1
  219. data/lib/puppet/resource.rb +33 -7
  220. data/lib/puppet/resource/capability_finder.rb +74 -54
  221. data/lib/puppet/resource/status.rb +11 -2
  222. data/lib/puppet/settings.rb +17 -6
  223. data/lib/puppet/settings/environment_conf.rb +1 -1
  224. data/lib/puppet/settings/server_list_setting.rb +20 -0
  225. data/lib/puppet/ssl/certificate_authority.rb +32 -9
  226. data/lib/puppet/ssl/certificate_authority/interface.rb +164 -24
  227. data/lib/puppet/ssl/host.rb +3 -3
  228. data/lib/puppet/ssl/oids.rb +10 -0
  229. data/lib/puppet/ssl/validator/default_validator.rb +2 -2
  230. data/lib/puppet/test/test_helper.rb +2 -2
  231. data/lib/puppet/transaction.rb +12 -0
  232. data/lib/puppet/transaction/additional_resource_generator.rb +1 -1
  233. data/lib/puppet/transaction/event.rb +29 -2
  234. data/lib/puppet/transaction/event_manager.rb +1 -1
  235. data/lib/puppet/transaction/persistence.rb +84 -0
  236. data/lib/puppet/transaction/report.rb +49 -2
  237. data/lib/puppet/transaction/resource_harness.rb +98 -18
  238. data/lib/puppet/type.rb +63 -21
  239. data/lib/puppet/type/augeas.rb +3 -3
  240. data/lib/puppet/type/cron.rb +1 -1
  241. data/lib/puppet/type/file.rb +39 -2
  242. data/lib/puppet/type/file/data_sync.rb +13 -5
  243. data/lib/puppet/type/host.rb +1 -1
  244. data/lib/puppet/type/mount.rb +2 -6
  245. data/lib/puppet/type/notify.rb +1 -1
  246. data/lib/puppet/type/package.rb +1 -1
  247. data/lib/puppet/type/resources.rb +1 -1
  248. data/lib/puppet/type/scheduled_task.rb +1 -1
  249. data/lib/puppet/type/ssh_authorized_key.rb +2 -2
  250. data/lib/puppet/type/tidy.rb +1 -1
  251. data/lib/puppet/type/yumrepo.rb +3 -3
  252. data/lib/puppet/type/zone.rb +1 -1
  253. data/lib/puppet/util.rb +2 -2
  254. data/lib/puppet/util/classgen.rb +1 -1
  255. data/lib/puppet/util/command_line.rb +6 -2
  256. data/lib/puppet/util/command_line/trollop.rb +1 -1
  257. data/lib/puppet/util/execution.rb +2 -2
  258. data/lib/puppet/util/http_proxy.rb +1 -1
  259. data/lib/puppet/util/inifile.rb +1 -1
  260. data/lib/puppet/util/instance_loader.rb +1 -1
  261. data/lib/puppet/util/logging.rb +1 -1
  262. data/lib/puppet/util/multi_match.rb +1 -1
  263. data/lib/puppet/util/plist.rb +15 -5
  264. data/lib/puppet/util/profiler.rb +1 -1
  265. data/lib/puppet/util/profiler/around_profiler.rb +1 -1
  266. data/lib/puppet/util/psych_support.rb +1 -1
  267. data/lib/puppet/util/rdoc.rb +2 -2
  268. data/lib/puppet/util/rubygems.rb +1 -1
  269. data/lib/puppet/util/watcher/periodic_watcher.rb +2 -2
  270. data/lib/puppet/util/windows/access_control_entry.rb +1 -1
  271. data/lib/puppet/util/windows/adsi.rb +30 -8
  272. data/lib/puppet/util/windows/api_types.rb +1 -1
  273. data/lib/puppet/util/windows/file.rb +59 -0
  274. data/lib/puppet/util/windows/process.rb +10 -0
  275. data/lib/puppet/util/windows/security.rb +1 -1
  276. data/lib/puppet/util/windows/user.rb +22 -4
  277. data/lib/puppet/util/yaml.rb +15 -3
  278. data/lib/puppet/vendor/deep_merge/test/test_deep_merge.rb +1 -1
  279. data/lib/puppet/vendor/rgen_patch.rb +1 -1
  280. data/lib/puppet/version.rb +2 -2
  281. data/spec/fixtures/unit/pops/loaders/loaders/no_modules/manifests/site.pp +10 -0
  282. data/spec/integration/agent/logging_spec.rb +15 -14
  283. data/spec/integration/application/apply_spec.rb +1 -0
  284. data/spec/integration/directory_environments_spec.rb +16 -0
  285. data/spec/integration/environments/settings_spec.rb +32 -4
  286. data/spec/integration/faces/documentation_spec.rb +1 -1
  287. data/spec/integration/network/http/api/indirected_routes_spec.rb +33 -0
  288. data/spec/integration/node/environment_spec.rb +21 -0
  289. data/spec/integration/parser/collection_spec.rb +10 -0
  290. data/spec/integration/parser/compiler_spec.rb +76 -840
  291. data/spec/integration/parser/functions/require_spec.rb +3 -3
  292. data/spec/integration/parser/parameter_defaults_spec.rb +6 -2
  293. data/spec/integration/parser/pcore_resource_spec.rb +208 -0
  294. data/spec/integration/parser/resource_expressions_spec.rb +4 -2
  295. data/spec/integration/provider/yumrepo_spec.rb +4 -1
  296. data/spec/integration/transaction/report_spec.rb +666 -0
  297. data/spec/integration/type/file_spec.rb +11 -12
  298. data/spec/integration/util/windows/adsi_spec.rb +99 -0
  299. data/spec/integration/util/windows/principal_spec.rb +109 -60
  300. data/spec/integration/util/windows/process_spec.rb +4 -2
  301. data/spec/integration/util/windows/security_spec.rb +34 -8
  302. data/spec/integration/util/windows/user_spec.rb +26 -4
  303. data/spec/lib/puppet_spec/files.rb +2 -2
  304. data/spec/lib/puppet_spec/network.rb +12 -8
  305. data/spec/shared_examples/rhel_package_provider.rb +341 -0
  306. data/spec/spec_helper.rb +8 -2
  307. data/spec/unit/application/cert_spec.rb +20 -0
  308. data/spec/unit/configurer/plugin_handler_spec.rb +0 -26
  309. data/spec/unit/configurer_spec.rb +46 -0
  310. data/spec/unit/defaults_spec.rb +14 -0
  311. data/spec/unit/face/generate_spec.rb +230 -0
  312. data/spec/unit/face/help_spec.rb +53 -0
  313. data/spec/unit/face/parser_spec.rb +6 -0
  314. data/spec/unit/face/plugin_spec.rb +0 -4
  315. data/spec/unit/file_system_spec.rb +85 -0
  316. data/spec/unit/functions/lookup_spec.rb +4 -4
  317. data/spec/unit/functions/match_spec.rb +2 -2
  318. data/spec/unit/functions/regsubst_spec.rb +1 -1
  319. data/spec/unit/functions/split_spec.rb +1 -1
  320. data/spec/unit/functions/unwrap_spec.rb +29 -0
  321. data/spec/unit/functions/versioncmp_spec.rb +1 -1
  322. data/spec/unit/functions4_spec.rb +8 -8
  323. data/spec/unit/indirector/facts/facter_spec.rb +1 -9
  324. data/spec/unit/indirector/rest_spec.rb +95 -9
  325. data/spec/unit/module_spec.rb +43 -7
  326. data/spec/unit/module_tool/applications/installer_spec.rb +10 -1
  327. data/spec/unit/module_tool/applications/unpacker_spec.rb +2 -1
  328. data/spec/unit/module_tool/applications/upgrader_spec.rb +8 -0
  329. data/spec/unit/module_tool/tar/mini_spec.rb +3 -3
  330. data/spec/unit/network/http/api/indirected_routes_spec.rb +49 -58
  331. data/spec/unit/network/http/api/master/v3_spec.rb +7 -4
  332. data/spec/unit/network/rights_spec.rb +1 -1
  333. data/spec/unit/parameter_spec.rb +11 -0
  334. data/spec/unit/parser/compiler_spec.rb +19 -33
  335. data/spec/unit/{appmgmt_spec.rb → parser/environment_compiler_spec.rb} +12 -1
  336. data/spec/unit/parser/functions/create_resources_spec.rb +76 -4
  337. data/spec/unit/parser/functions/require_spec.rb +2 -2
  338. data/spec/unit/parser/resource_spec.rb +21 -11
  339. data/spec/unit/parser/scope_spec.rb +1 -5
  340. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +1 -1
  341. data/spec/unit/pops/loaders/dependency_loader_spec.rb +1 -1
  342. data/spec/unit/pops/loaders/loader_paths_spec.rb +1 -1
  343. data/spec/unit/pops/loaders/loaders_spec.rb +63 -5
  344. data/spec/unit/pops/loaders/module_loaders_spec.rb +2 -2
  345. data/spec/unit/pops/loaders/static_loader_spec.rb +1 -1
  346. data/spec/unit/pops/parser/lexer2_spec.rb +27 -3
  347. data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +8 -0
  348. data/spec/unit/pops/parser/parse_calls_spec.rb +9 -0
  349. data/spec/unit/pops/puppet_stack_spec.rb +79 -0
  350. data/spec/unit/pops/resource/resource_type_impl_spec.rb +37 -0
  351. data/spec/unit/pops/serialization/packer_spec.rb +153 -0
  352. data/spec/unit/pops/serialization/rgen_spec.rb +88 -0
  353. data/spec/unit/pops/serialization/serialization_spec.rb +228 -0
  354. data/spec/unit/pops/types/p_object_type_spec.rb +44 -2
  355. data/spec/unit/pops/types/p_sem_ver_type_spec.rb +42 -0
  356. data/spec/unit/pops/types/p_sensitive_type_spec.rb +139 -0
  357. data/spec/unit/pops/types/p_type_set_type_spec.rb +424 -0
  358. data/spec/unit/pops/types/ruby_generator_spec.rb +497 -181
  359. data/spec/unit/pops/types/type_calculator_spec.rb +10 -4
  360. data/spec/unit/pops/types/type_formatter_spec.rb +1 -1
  361. data/spec/unit/pops/types/type_mismatch_describer_spec.rb +2 -2
  362. data/spec/unit/pops/types/type_parser_spec.rb +1 -1
  363. data/spec/unit/pops/types/types_spec.rb +1 -1
  364. data/spec/unit/pops/validator/validator_spec.rb +18 -1
  365. data/spec/unit/property_spec.rb +48 -11
  366. data/spec/unit/provider/group/windows_adsi_spec.rb +11 -1
  367. data/spec/unit/provider/package/dnf_spec.rb +1 -99
  368. data/spec/unit/provider/package/pacman_spec.rb +4 -4
  369. data/spec/unit/provider/package/pip_spec.rb +14 -0
  370. data/spec/unit/provider/package/pkg_spec.rb +6 -0
  371. data/spec/unit/provider/package/pkgdmg_spec.rb +0 -3
  372. data/spec/unit/provider/package/portage_spec.rb +64 -8
  373. data/spec/unit/provider/package/tdnf_spec.rb +18 -0
  374. data/spec/unit/provider/package/windows/package_spec.rb +4 -1
  375. data/spec/unit/provider/package/windows_spec.rb +8 -2
  376. data/spec/unit/provider/package/yum_spec.rb +6 -377
  377. data/spec/unit/provider/service/base_spec.rb +6 -0
  378. data/spec/unit/provider/service/debian_spec.rb +16 -7
  379. data/spec/unit/provider/service/gentoo_spec.rb +6 -0
  380. data/spec/unit/provider/service/init_spec.rb +7 -0
  381. data/spec/unit/provider/service/launchd_spec.rb +35 -4
  382. data/spec/unit/provider/service/openrc_spec.rb +6 -0
  383. data/spec/unit/provider/service/smf_spec.rb +31 -6
  384. data/spec/unit/provider/service/src_spec.rb +6 -0
  385. data/spec/unit/provider/service/systemd_spec.rb +70 -20
  386. data/spec/unit/provider/service/upstart_spec.rb +6 -0
  387. data/spec/unit/provider/user/aix_spec.rb +7 -0
  388. data/spec/unit/provider/user/directoryservice_spec.rb +30 -1
  389. data/spec/unit/provider/user/windows_adsi_spec.rb +19 -0
  390. data/spec/unit/resource/capability_finder_spec.rb +51 -3
  391. data/spec/unit/resource/catalog_spec.rb +5 -0
  392. data/spec/unit/resource/type_spec.rb +2 -2
  393. data/spec/unit/resource_spec.rb +19 -0
  394. data/spec/unit/settings_spec.rb +13 -0
  395. data/spec/unit/ssl/certificate_authority/interface_spec.rb +176 -10
  396. data/spec/unit/ssl/certificate_authority_spec.rb +63 -22
  397. data/spec/unit/ssl/host_spec.rb +1 -1
  398. data/spec/unit/ssl/oids_spec.rb +24 -21
  399. data/spec/unit/transaction/event_spec.rb +3 -1
  400. data/spec/unit/transaction/persistence_spec.rb +173 -0
  401. data/spec/unit/transaction/report_spec.rb +64 -1
  402. data/spec/unit/transaction/resource_harness_spec.rb +91 -0
  403. data/spec/unit/type/file/content_spec.rb +47 -15
  404. data/spec/unit/type/file_spec.rb +28 -0
  405. data/spec/unit/type/mount_spec.rb +5 -12
  406. data/spec/unit/type/yumrepo_spec.rb +1 -5
  407. data/spec/unit/type_spec.rb +32 -0
  408. data/spec/unit/util/command_line_spec.rb +11 -0
  409. data/spec/unit/util/execution_spec.rb +1 -1
  410. data/spec/unit/util/plist_spec.rb +16 -3
  411. data/spec/unit/util/storage_spec.rb +4 -1
  412. data/spec/unit/util/windows/adsi_spec.rb +23 -2
  413. data/spec/unit/util/windows/file_spec.rb +56 -1
  414. data/spec/unit/util/windows/sid_spec.rb +31 -7
  415. data/spec/unit/util/yaml_spec.rb +12 -0
  416. data/spec/unit/util_spec.rb +87 -20
  417. metadata +89 -34
  418. data/ext/puppetlisten/puppetlisten.rb +0 -77
  419. data/ext/puppetlisten/puppetrun.rb +0 -38
  420. data/lib/puppet/resource/type_collection_helper.rb +0 -7
  421. data/spec/unit/parser/functions/defined_spec.rb +0 -120
  422. data/spec/unit/resource/type_collection_helper_spec.rb +0 -24
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 47d856595eb363a2edd180781c1e4a000991a8c3
4
+ data.tar.gz: 7cb58d1e7ecbe02311b6db725885141f1607f3a0
5
+ SHA512:
6
+ metadata.gz: 4b333961a27d1dc8f7e2d2792ff9ef9eab9d79034e38ed322a2f5fed65f6095d76b49ad81af85ffbdeccbdd7fd9e15d3d6eb41d053adceb0d480b280dc18ecde
7
+ data.tar.gz: 76a7c009757e6dbfaa270715e5581c41ad7103702bb4ec952ec5b3fb59f13c6c553ad41ef9b4f30d929c1ad976afb7536edfbd3cd9d1f7151358292dfe9c2258
data/Gemfile CHANGED
@@ -27,6 +27,9 @@ gem "puppet", :path => File.dirname(__FILE__), :require => false
27
27
  gem "facter", *location_for(ENV['FACTER_LOCATION'] || ['> 2.0', '< 4'])
28
28
  gem "hiera", *location_for(ENV['HIERA_LOCATION'] || ['>= 2.0', '< 4'])
29
29
  gem "rake", "10.1.1", :require => false
30
+ # Hiera has an unbound dependency on json_pure
31
+ # json_pure 2.0.2+ officially requires Ruby >= 2.0, but should have specified that in 2.0
32
+ gem 'json_pure', '~> 1.8', :require => false
30
33
 
31
34
  group(:development, :test) do
32
35
  gem "rspec", "~> 3.1", :require => false
@@ -77,10 +80,16 @@ data['gem_platform_dependencies'].each_pair do |gem_platform, info|
77
80
  next if gem_platform == 'x64-mingw32' && !x64_platform
78
81
  if bundle_deps = info['gem_runtime_dependencies']
79
82
  bundle_platform = bundle_platforms[gem_platform] or raise "Missing bundle_platform"
80
- platform(bundle_platform.intern) do
83
+ if bundle_platform == "all"
81
84
  bundle_deps.each_pair do |name, version|
82
85
  gem(name, version, :require => false)
83
86
  end
87
+ else
88
+ platform(bundle_platform.intern) do
89
+ bundle_deps.each_pair do |name, version|
90
+ gem(name, version, :require => false)
91
+ end
92
+ end
84
93
  end
85
94
  end
86
95
  end
@@ -123,17 +123,15 @@ Description: Centralised configuration management - master setup to run under mo
123
123
 
124
124
  Package: vim-puppet
125
125
  Architecture: all
126
- Depends: ${misc:Depends}
126
+ Depends: ${misc:Depends}, puppet (= ${source:Version})
127
127
  Recommends: vim-addon-manager
128
- Conflicts: puppet (<< ${source:Version})
129
128
  Description: syntax highlighting for puppet manifests in vim
130
129
  The vim-puppet package provides filetype detection and syntax highlighting for
131
130
  puppet manifests (files ending with ".pp").
132
131
 
133
132
  Package: puppet-el
134
133
  Architecture: all
135
- Depends: ${misc:Depends}, emacsen-common
136
- Conflicts: puppet (<< ${source:Version})
134
+ Depends: ${misc:Depends}, emacsen-common, puppet (= ${source:Version})
137
135
  Description: syntax highlighting for puppet manifests in emacs
138
136
  The puppet-el package provides syntax highlighting for puppet manifests
139
137
 
@@ -19,7 +19,7 @@ gem_required_rubygems_version: '> 1.3.1'
19
19
  gem_runtime_dependencies:
20
20
  facter: ['> 2.0', '< 4']
21
21
  hiera: ['>= 2.0', '< 4']
22
- json_pure:
22
+ json_pure: '~> 1.8'
23
23
  gem_rdoc_options:
24
24
  - --title
25
25
  - "Puppet - Configuration Management"
@@ -40,7 +40,7 @@ gem_platform_dependencies:
40
40
  win32-process: '= 0.7.5'
41
41
  # Use of win32-security is deprecated
42
42
  win32-security: '= 0.2.5'
43
- win32-service: '= 0.8.7'
43
+ win32-service: '= 0.8.8'
44
44
  minitar: '~> 0.5.4'
45
45
  x64-mingw32:
46
46
  gem_runtime_dependencies:
@@ -51,10 +51,10 @@ gem_platform_dependencies:
51
51
  win32-process: '= 0.7.5'
52
52
  # Use of win32-security is deprecated
53
53
  win32-security: '= 0.2.5'
54
- win32-service: '= 0.8.7'
54
+ win32-service: '= 0.8.8'
55
55
  minitar: '~> 0.5.4'
56
56
  bundle_platforms:
57
- universal-darwin: ruby
57
+ universal-darwin: all
58
58
  x86-mingw32: mingw
59
59
  x64-mingw32: x64_mingw
60
60
  pre_tasks:
data/install.rb CHANGED
@@ -141,6 +141,7 @@ end
141
141
  def prepare_installation
142
142
  InstallOptions.configs = true
143
143
  InstallOptions.check_prereqs = true
144
+ InstallOptions.batch_files = true
144
145
 
145
146
  # Only try to do docs if we're sure they have rdoc
146
147
  if $haverdoc
@@ -201,6 +202,9 @@ def prepare_installation
201
202
  opts.on('--[no-]check-prereqs', 'Prevents validation of prerequisite libraries', 'Default on') do |prereq|
202
203
  InstallOptions.check_prereqs = prereq
203
204
  end
205
+ opts.on('--no-batch-files', 'Prevents installation of batch files for windows', 'Default off') do |batch_files|
206
+ InstallOptions.batch_files = false
207
+ end
204
208
  opts.on('--quick', 'Performs a quick installation. Only the', 'installation is done.') do |quick|
205
209
  InstallOptions.rdoc = false
206
210
  InstallOptions.ri = false
@@ -413,7 +417,7 @@ def install_binfile(from, op_file, target)
413
417
  end
414
418
  end
415
419
 
416
- if $operatingsystem == "windows"
420
+ if $operatingsystem == "windows" && InstallOptions.batch_files
417
421
  installed_wrapper = false
418
422
 
419
423
  unless File.extname(from).match(/\.(cmd|bat)/)
@@ -471,7 +475,7 @@ FileUtils.cd File.dirname(__FILE__) do
471
475
  #build_ri(ri) if InstallOptions.ri
472
476
  do_configs(configs, InstallOptions.config_dir) if InstallOptions.configs
473
477
  do_bins(bins, InstallOptions.bin_dir)
474
- do_bins(windows_bins, InstallOptions.bin_dir, 'ext/windows/') if $operatingsystem == "windows"
478
+ do_bins(windows_bins, InstallOptions.bin_dir, 'ext/windows/') if $operatingsystem == "windows" && InstallOptions.batch_files
475
479
  do_libs(libs)
476
480
  do_man(man) unless $operatingsystem == "windows"
477
481
  end
@@ -197,7 +197,8 @@ module Puppet
197
197
  :http_pool => proc {
198
198
  require 'puppet/network/http'
199
199
  Puppet::Network::HTTP::NoCachePool.new
200
- }
200
+ },
201
+ :ssl_host => proc { Puppet::SSL::Host.localhost },
201
202
  }
202
203
  end
203
204
 
@@ -273,6 +274,7 @@ end
273
274
  # effort, but I think we should strive for it and revisit this at some point. --cprice 2012-03-16
274
275
 
275
276
  require 'puppet/indirector'
277
+ require 'puppet/compilable_resource_type'
276
278
  require 'puppet/type'
277
279
  require 'puppet/resource'
278
280
  require 'puppet/parser'
@@ -23,7 +23,7 @@ module Puppet::Agent::Locker
23
23
  lockfile.unlock
24
24
  end
25
25
  else
26
- fail Puppet::LockError, 'Failed to aquire lock'
26
+ fail Puppet::LockError, 'Failed to acquire lock'
27
27
  end
28
28
  end
29
29
 
@@ -75,7 +75,7 @@ module Puppet
75
75
  # Refer to +OptionParser+ documentation for the exact format.
76
76
  # * If the option method is given a block, this one will be called whenever
77
77
  # the option is encountered in the command-line argument.
78
- # * If the option method has no block, a default functionnality will be used, that
78
+ # * If the option method has no block, a default functionality will be used, that
79
79
  # stores the argument (or true/false if the option doesn't require an argument) in
80
80
  # the global (to the application) options array.
81
81
  # * If a given option was not defined by a the +option+ method, but it exists as a Puppet settings:
@@ -83,7 +83,7 @@ module Puppet
83
83
  # * if +unknown+ wasn't used, then the option/argument is handed to Puppet.settings.handlearg for
84
84
  # a default behavior
85
85
  #
86
- # --help is managed directly by the Puppet::Application class, but can be overriden.
86
+ # --help is managed directly by the Puppet::Application class, but can be overridden.
87
87
  #
88
88
  # === Setup
89
89
  # Applications can use the setup block to perform any initialization.
@@ -357,8 +357,10 @@ class Application
357
357
  end
358
358
 
359
359
  def setup_logs
360
- if options[:debug] || options[:verbose]
361
- Puppet::Util::Log.newdestination(:console)
360
+ unless options[:setdest]
361
+ if options[:debug] || options[:verbose]
362
+ Puppet::Util::Log.newdestination(:console)
363
+ end
362
364
  end
363
365
 
364
366
  set_log_level
@@ -264,7 +264,7 @@ generated by running puppet agent with '--genconfig'.
264
264
  * --test:
265
265
  Enable the most common options used for testing. These are 'onetime',
266
266
  'verbose', 'no-daemonize', 'no-usecacheonfailure', 'detailed-exitcodes',
267
- 'no-splay', and 'show_diff'.
267
+ 'no-splay', 'show_diff', and 'no-use_cached_catalog'.
268
268
 
269
269
  * --verbose:
270
270
  Turn on verbose reporting.
@@ -377,6 +377,7 @@ Copyright (c) 2011 Puppet Labs, LLC Licensed under the Apache 2.0 License
377
377
  Puppet.settings.handlearg("--no-splay")
378
378
  Puppet.settings.handlearg("--show_diff")
379
379
  Puppet.settings.handlearg("--no-daemonize")
380
+ Puppet.settings.handlearg("--no-use_cached_catalog")
380
381
  options[:verbose] = true
381
382
  Puppet[:onetime] = true
382
383
  options[:detailed_exitcodes] = true
@@ -74,11 +74,31 @@ class Puppet::Application::Cert < Puppet::Application
74
74
  options[:allow_dns_alt_names] = value
75
75
  end
76
76
 
77
+ option("--[no-]allow-authorization-extensions") do |value|
78
+ options[:allow_authorization_extensions] = value
79
+ end
80
+
77
81
  option("--verbose", "-v") do |arg|
78
82
  options[:verbose] = true
79
83
  set_log_level
80
84
  end
81
85
 
86
+ option("--human-readable", "-H") do |arg|
87
+ options[:format] = :human
88
+ end
89
+
90
+ option("--machine-readable", "-m") do |arg|
91
+ options[:format] = :machine
92
+ end
93
+
94
+ option("--interactive", "-i") do |arg|
95
+ options[:interactive] = true
96
+ end
97
+
98
+ option("--assume-yes", "-y") do |arg|
99
+ options[:yes] = true
100
+ end
101
+
82
102
  def help
83
103
  <<-'HELP'
84
104
 
@@ -132,7 +152,10 @@ The most important actions for day-to-day use are 'list' and 'sign'.
132
152
  List outstanding certificate requests. If '--all' is specified, signed
133
153
  certificates are also listed, prefixed by '+', and revoked or invalid
134
154
  certificates are prefixed by '-' (the verification outcome is printed
135
- in parenthesis).
155
+ in parenthesis). If '--human-readable' or '-H' is specified,
156
+ certificates are formatted in a way to improve human scan-ability. If
157
+ '--machine-readable' or '-m' is specified, output is formatted concisely
158
+ for consumption by a script.
136
159
 
137
160
  * print:
138
161
  Print the full-text version of a host's certificate.
@@ -145,7 +168,10 @@ The most important actions for day-to-day use are 'list' and 'sign'.
145
168
  needs to be restarted after revoking certificates.
146
169
 
147
170
  * sign:
148
- Sign an outstanding certificate request.
171
+ Sign an outstanding certificate request. If '--interactive' or '-i' is
172
+ supplied the user will be prompted to confirm that they are signing the
173
+ correct certificate (recommended). If '--assume-yes' or '-y' is supplied
174
+ the interactive prompt will assume the answer of 'yes'.
149
175
 
150
176
  * verify:
151
177
  Verify the named certificate against the local CA certificate.
@@ -187,6 +213,11 @@ configuration options can also be generated by running puppet cert with
187
213
  command line. The output of 'puppet cert list' shows any requested alt names
188
214
  for pending certificate requests.
189
215
 
216
+ * --allow-authorization-extensions:
217
+ Enable the signing of a request with authorization extensions. Such requests
218
+ are sensitive because they can be used to write access rules in Puppet Server.
219
+ Currently, this is the only means by which such requests can be signed.
220
+
190
221
  * --digest:
191
222
  Set the digest for fingerprinting (defaults to the digest used when
192
223
  signing the cert). Valid values depends on your openssl and openssl ruby
@@ -246,6 +277,7 @@ Copyright (c) 2011 Puppet Labs, LLC Licensed under the Apache 2.0 License
246
277
  exit(Puppet.settings.print_configs ? 0 : 1) if Puppet.settings.print_configs?
247
278
 
248
279
  Puppet::SSL::Oids.register_puppet_oids
280
+ Puppet::SSL::Oids.load_custom_oid_file(Puppet[:trusted_oid_mapping_file])
249
281
 
250
282
  Puppet::Util::Log.newdestination :console
251
283
 
@@ -283,6 +315,7 @@ Copyright (c) 2011 Puppet Labs, LLC Licensed under the Apache 2.0 License
283
315
  exit
284
316
  end
285
317
  end
318
+
286
319
  result
287
320
  end
288
321
 
@@ -118,7 +118,7 @@ parameter, so you can specify '--server <servername>' as an argument.
118
118
  code of '1' means at least one device had a compile failure, an exit code of
119
119
  '2' means at least one device had resource changes, and an exit code of '4'
120
120
  means at least one device had resource failures. Exit codes of '3', '5', '6',
121
- or '7' means that a bitwise combination of the preceeding exit codes happened.
121
+ or '7' means that a bitwise combination of the preceding exit codes happened.
122
122
 
123
123
  * --help:
124
124
  Print this help message
@@ -0,0 +1,5 @@
1
+ require 'puppet/application/face_base'
2
+
3
+ # The Generate application.
4
+ class Puppet::Application::Generate < Puppet::Application::FaceBase
5
+ end
@@ -144,7 +144,7 @@ http://links.puppetlabs.com/lookup-docs
144
144
 
145
145
  OPTIONS
146
146
  -------
147
- These options and their effects are decribed in more detail in
147
+ These options and their effects are described in more detail in
148
148
  the puppet lookup function linked to above.
149
149
 
150
150
  * --help:
@@ -174,7 +174,7 @@ the puppet lookup function linked to above.
174
174
 
175
175
  * --explain
176
176
  Print an explanation for the details of how the lookup performed rather
177
- than the value returned for the key. The explaination will describe how
177
+ than the value returned for the key. The explanation will describe how
178
178
  the result was obtained or why lookup failed to obtain the result.
179
179
 
180
180
  * --explain-options
@@ -294,7 +294,7 @@ Copyright (c) 2015 Puppet Labs, LLC Licensed under the Apache 2.0 License
294
294
  generate_scope do |scope|
295
295
  lookup_invocation = Puppet::Pops::Lookup::Invocation.new(scope, {}, {}, explain ? Puppet::Pops::Lookup::Explainer.new(explain_options, only_explain_options) : nil)
296
296
  begin
297
- type = options.include?(:type) ? Puppet::Pops::Types::TypeParser.new.parse(options[:type], scope) : nil
297
+ type = options.include?(:type) ? Puppet::Pops::Types::TypeParser.singleton.parse(options[:type], scope) : nil
298
298
  result = Puppet::Pops::Lookup.lookup(keys, type, options[:default_value], use_default_value, merge_options, lookup_invocation)
299
299
  puts renderer.render(result) unless explain
300
300
  rescue Puppet::DataBinding::LookupError
@@ -36,7 +36,7 @@ module Puppet
36
36
  end
37
37
 
38
38
  # Reads the routes YAML settings from the file specified by Puppet[:route_file]
39
- # and resets indirector terminii for the current application class if listed.
39
+ # and resets indirector termini for the current application class if listed.
40
40
  #
41
41
  # For instance, PE uses this to set the master facts terminus
42
42
  # to 'puppetdb' and its cache terminus to 'yaml'.
@@ -0,0 +1,15 @@
1
+ require 'puppet'
2
+ # The CompilableResourceType module should be either included in a class or used as a class extension
3
+ # to mark that the instance used as the 'resource type' of a resource instance
4
+ # is an object that is compatible with Puppet::Type's API wrt. compiling.
5
+ # Puppet Resource Types written in Ruby use a meta programmed Ruby Class as the type. Those classes
6
+ # are subtypes of Puppet::Type. Meta data (Pcore/puppet language) based resource types uses instances of
7
+ # a class instead.
8
+ #
9
+ module Puppet::CompilableResourceType
10
+ # All 3.x resource types implemented in Ruby using Puppet::Type respond true.
11
+ # Other kinds of implementations should reimplement and return false.
12
+ def is_3x_ruby_plugin?
13
+ true
14
+ end
15
+ end
@@ -181,9 +181,45 @@ class Puppet::Configurer
181
181
  # which accepts :tags and :ignoreschedules.
182
182
  def run(options = {})
183
183
  pool = Puppet::Network::HTTP::Pool.new(Puppet[:http_keepalive_timeout])
184
+ # We create the report pre-populated with default settings for
185
+ # environment and transaction_uuid very early, this is to ensure
186
+ # they are sent regardless of any catalog compilation failures or
187
+ # exceptions.
188
+ options[:report] ||= Puppet::Transaction::Report.new("apply", nil, @environment, @transaction_uuid)
189
+ report = options[:report]
190
+ init_storage
191
+
192
+ Puppet::Util::Log.newdestination(report)
193
+
184
194
  begin
185
195
  Puppet.override(:http_pool => pool) do
186
- run_internal(options)
196
+
197
+ # Skip failover logic if the server_list setting is empty
198
+ if Puppet.settings[:server_list].nil? || Puppet.settings[:server_list].empty?
199
+ do_failover = false;
200
+ else
201
+ do_failover = true
202
+ end
203
+ # When we are passed a catalog, that means we're in apply
204
+ # mode. We shouldn't try to do any failover in that case.
205
+ if options[:catalog].nil? && do_failover
206
+ found = find_functional_server()
207
+ server = found[:server]
208
+ if server.nil?
209
+ Puppet.warning "Could not select a functional puppet master"
210
+ server = [nil, nil]
211
+ end
212
+ Puppet.override(:server => server[0], :serverport => server[1]) do
213
+ if !server.first.nil?
214
+ Puppet.debug "Selected master: #{server[0]}:#{server[1]}"
215
+ report.master_used = "#{server[0]}:#{server[1]}"
216
+ end
217
+
218
+ run_internal(options.merge(:node => found[:node]))
219
+ end
220
+ else
221
+ run_internal(options)
222
+ end
187
223
  end
188
224
  ensure
189
225
  pool.close
@@ -191,15 +227,7 @@ class Puppet::Configurer
191
227
  end
192
228
 
193
229
  def run_internal(options)
194
- # We create the report pre-populated with default settings for
195
- # environment and transaction_uuid very early, this is to ensure
196
- # they are sent regardless of any catalog compilation failures or
197
- # exceptions.
198
- options[:report] ||= Puppet::Transaction::Report.new("apply", nil, @environment, @transaction_uuid)
199
230
  report = options[:report]
200
- init_storage
201
-
202
- Puppet::Util::Log.newdestination(report)
203
231
 
204
232
  # If a cached catalog is explicitly requested, attempt to retrieve it. Skip the node request,
205
233
  # don't pluginsync and switch to the catalog's environment if we successfully retrieve it.
@@ -233,7 +261,7 @@ class Puppet::Configurer
233
261
  # We only need to find out the environment to run in if we don't already have a catalog
234
262
  unless (options[:catalog] || Puppet[:strict_environment_mode])
235
263
  begin
236
- if node = Puppet::Node.indirection.find(Puppet[:node_name_value],
264
+ if node = options[:node] || Puppet::Node.indirection.find(Puppet[:node_name_value],
237
265
  :environment => Puppet::Node::Environment.remote(@environment),
238
266
  :configured_environment => configured_environment,
239
267
  :ignore_cache => true,
@@ -328,6 +356,35 @@ class Puppet::Configurer
328
356
  end
329
357
  private :run_internal
330
358
 
359
+ def find_functional_server()
360
+ configured_environment = Puppet[:environment] if Puppet.settings.set_by_config?(:environment)
361
+
362
+ node = nil
363
+ selected_server = Puppet.settings[:server_list].find do |server|
364
+ # Puppet.override doesn't return the result of its block, so we
365
+ # need to handle this manually
366
+ found = false
367
+ server[1] ||= Puppet[:masterport]
368
+ Puppet.override(:server => server[0], :serverport => server[1]) do
369
+ begin
370
+ node = Puppet::Node.indirection.find(Puppet[:node_name_value],
371
+ :environment => Puppet::Node::Environment.remote(@environment),
372
+ :configured_environment => configured_environment,
373
+ :ignore_cache => true,
374
+ :transaction_uuid => @transaction_uuid,
375
+ :fail_on_404 => false)
376
+ found = true
377
+ rescue Exception => e
378
+ # Nothing to see here
379
+ end
380
+ end
381
+ found
382
+ end
383
+ { :node => node,
384
+ :server => selected_server }
385
+ end
386
+ private :find_functional_server
387
+
331
388
  def send_report(report)
332
389
  puts report.summary if Puppet[:summarize]
333
390
  save_last_run_summary(report)