puppet 3.2.4 → 3.3.0.rc2

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 (562) hide show
  1. data/COMMITTERS.md +101 -42
  2. data/Gemfile +15 -4
  3. data/README.md +5 -1
  4. data/README_DEVELOPER.md +117 -54
  5. data/Rakefile +4 -0
  6. data/ext/build_defaults.yaml +3 -2
  7. data/ext/debian/puppet-common.manpages +33 -1
  8. data/ext/gentoo/init.d/puppet +1 -1
  9. data/ext/gentoo/init.d/puppetmaster +1 -1
  10. data/ext/redhat/puppet.spec.erb +0 -1
  11. data/install.rb +2 -1
  12. data/lib/hiera/backend/puppet_backend.rb +1 -1
  13. data/lib/puppet/application.rb +10 -9
  14. data/lib/puppet/application/agent.rb +87 -93
  15. data/lib/puppet/application/apply.rb +0 -2
  16. data/lib/puppet/application/device.rb +3 -3
  17. data/lib/puppet/application/kick.rb +2 -2
  18. data/lib/puppet/application/master.rb +41 -19
  19. data/lib/puppet/application/queue.rb +5 -3
  20. data/lib/puppet/bindings.rb +147 -0
  21. data/lib/puppet/configurer.rb +25 -15
  22. data/lib/puppet/configurer/fact_handler.rb +2 -9
  23. data/lib/puppet/daemon.rb +44 -33
  24. data/lib/puppet/defaults.rb +57 -26
  25. data/lib/puppet/error.rb +1 -1
  26. data/lib/puppet/external/dot.rb +2 -2
  27. data/lib/puppet/external/nagios/base.rb +1 -6
  28. data/lib/puppet/external/pson/common.rb +2 -2
  29. data/lib/puppet/external/pson/pure/generator.rb +2 -2
  30. data/lib/puppet/external/pson/pure/parser.rb +1 -1
  31. data/lib/puppet/face/ca.rb +1 -1
  32. data/lib/puppet/face/config.rb +1 -1
  33. data/lib/puppet/face/help.rb +2 -2
  34. data/lib/puppet/face/module/list.rb +2 -2
  35. data/lib/puppet/feature/rails.rb +1 -1
  36. data/lib/puppet/file_bucket/dipper.rb +0 -1
  37. data/lib/puppet/file_serving/base.rb +1 -1
  38. data/lib/puppet/file_serving/configuration/parser.rb +20 -14
  39. data/lib/puppet/forge.rb +0 -32
  40. data/lib/puppet/forge/cache.rb +1 -1
  41. data/lib/puppet/forge/errors.rb +3 -3
  42. data/lib/puppet/forge/repository.rb +7 -42
  43. data/lib/puppet/graph.rb +11 -0
  44. data/lib/puppet/graph/key.rb +26 -0
  45. data/lib/puppet/graph/prioritizer.rb +29 -0
  46. data/lib/puppet/graph/random_prioritizer.rb +16 -0
  47. data/lib/puppet/{rb_tree_map.rb → graph/rb_tree_map.rb} +3 -3
  48. data/lib/puppet/graph/relationship_graph.rb +246 -0
  49. data/lib/puppet/graph/sequential_prioritizer.rb +31 -0
  50. data/lib/puppet/{simple_graph.rb → graph/simple_graph.rb} +22 -3
  51. data/lib/puppet/graph/title_hash_prioritizer.rb +16 -0
  52. data/lib/puppet/indirector.rb +2 -2
  53. data/lib/puppet/indirector/catalog/compiler.rb +10 -7
  54. data/lib/puppet/indirector/catalog/static_compiler.rb +50 -0
  55. data/lib/puppet/indirector/certificate/rest.rb +1 -1
  56. data/lib/puppet/indirector/exec.rb +1 -1
  57. data/lib/puppet/indirector/facts/facter.rb +2 -2
  58. data/lib/puppet/indirector/facts/inventory_active_record.rb +0 -1
  59. data/lib/puppet/indirector/facts/network_device.rb +1 -1
  60. data/lib/puppet/indirector/file_bucket_file/file.rb +0 -1
  61. data/lib/puppet/indirector/indirection.rb +2 -2
  62. data/lib/puppet/indirector/memory.rb +9 -0
  63. data/lib/puppet/indirector/node/ldap.rb +2 -4
  64. data/lib/puppet/indirector/report/processor.rb +1 -2
  65. data/lib/puppet/indirector/report/rest.rb +1 -1
  66. data/lib/puppet/indirector/request.rb +32 -10
  67. data/lib/puppet/indirector/resource/rest.rb +1 -1
  68. data/lib/puppet/indirector/resource_type/parser.rb +31 -12
  69. data/lib/puppet/interface.rb +1 -1
  70. data/lib/puppet/interface/documentation.rb +7 -11
  71. data/lib/puppet/interface/option.rb +1 -1
  72. data/lib/puppet/interface/option_builder.rb +1 -1
  73. data/lib/puppet/metatype/manager.rb +2 -2
  74. data/lib/puppet/module.rb +7 -1
  75. data/lib/puppet/module_tool.rb +1 -1
  76. data/lib/puppet/module_tool/applications/application.rb +10 -0
  77. data/lib/puppet/module_tool/applications/installer.rb +6 -3
  78. data/lib/puppet/module_tool/dependency.rb +2 -0
  79. data/lib/puppet/module_tool/errors/upgrader.rb +1 -1
  80. data/lib/puppet/module_tool/metadata.rb +25 -13
  81. data/lib/puppet/module_tool/modulefile.rb +7 -7
  82. data/lib/puppet/module_tool/shared_behaviors.rb +4 -2
  83. data/lib/puppet/module_tool/skeleton.rb +1 -1
  84. data/lib/puppet/module_tool/skeleton/templates/generator/manifests/init.pp.erb +5 -5
  85. data/lib/puppet/module_tool/skeleton/templates/generator/tests/init.pp.erb +5 -4
  86. data/lib/puppet/network/auth_config_parser.rb +3 -0
  87. data/lib/puppet/network/authconfig.rb +0 -1
  88. data/lib/puppet/network/authorization.rb +1 -1
  89. data/lib/puppet/network/authstore.rb +2 -2
  90. data/lib/puppet/network/format_handler.rb +25 -114
  91. data/lib/puppet/network/format_support.rb +106 -0
  92. data/lib/puppet/network/formats.rb +10 -4
  93. data/lib/puppet/network/http/compression.rb +1 -1
  94. data/lib/puppet/network/http/connection.rb +76 -32
  95. data/lib/puppet/network/http/handler.rb +122 -61
  96. data/lib/puppet/network/http/rack/rest.rb +1 -1
  97. data/lib/puppet/network/http/webrick/rest.rb +9 -3
  98. data/lib/puppet/network/http_pool.rb +2 -2
  99. data/lib/puppet/network/resolver.rb +1 -0
  100. data/lib/puppet/network/server.rb +5 -81
  101. data/lib/puppet/node/environment.rb +256 -13
  102. data/lib/puppet/node/facts.rb +28 -2
  103. data/lib/puppet/parameter.rb +27 -18
  104. data/lib/puppet/parameter/boolean.rb +20 -0
  105. data/lib/puppet/parameter/path.rb +1 -1
  106. data/lib/puppet/parameter/value.rb +1 -1
  107. data/lib/puppet/parameter/value_collection.rb +1 -1
  108. data/lib/puppet/parser/ast/arithmetic_operator.rb +8 -0
  109. data/lib/puppet/parser/ast/casestatement.rb +0 -3
  110. data/lib/puppet/parser/ast/lambda.rb +25 -6
  111. data/lib/puppet/parser/ast/leaf.rb +10 -3
  112. data/lib/puppet/parser/ast/nop.rb +1 -1
  113. data/lib/puppet/parser/ast/resource_override.rb +0 -2
  114. data/lib/puppet/parser/compiler.rb +92 -34
  115. data/lib/puppet/parser/files.rb +0 -5
  116. data/lib/puppet/parser/functions/create_resources.rb +23 -46
  117. data/lib/puppet/parser/functions/each.rb +0 -2
  118. data/lib/puppet/parser/functions/extlookup.rb +2 -2
  119. data/lib/puppet/parser/functions/foreach.rb +0 -2
  120. data/lib/puppet/parser/functions/hiera_include.rb +1 -1
  121. data/lib/puppet/parser/functions/lookup.rb +44 -0
  122. data/lib/puppet/parser/functions/slice.rb +1 -1
  123. data/lib/puppet/parser/grammar.ra +0 -1
  124. data/lib/puppet/parser/lexer.rb +0 -1
  125. data/lib/puppet/parser/parser.rb +0 -1
  126. data/lib/puppet/parser/parser_factory.rb +3 -2
  127. data/lib/puppet/parser/parser_support.rb +1 -1
  128. data/lib/puppet/parser/relationship.rb +1 -1
  129. data/lib/puppet/parser/scope.rb +49 -24
  130. data/lib/puppet/parser/type_loader.rb +13 -18
  131. data/lib/puppet/pops.rb +45 -0
  132. data/lib/puppet/pops/adaptable.rb +2 -2
  133. data/lib/puppet/pops/adapters.rb +4 -0
  134. data/lib/puppet/pops/binder/binder.rb +421 -0
  135. data/lib/puppet/pops/binder/binder_issues.rb +142 -0
  136. data/lib/puppet/pops/binder/bindings_checker.rb +217 -0
  137. data/lib/puppet/pops/binder/bindings_composer.rb +241 -0
  138. data/lib/puppet/pops/binder/bindings_factory.rb +847 -0
  139. data/lib/puppet/pops/binder/bindings_label_provider.rb +46 -0
  140. data/lib/puppet/pops/binder/bindings_loader.rb +79 -0
  141. data/lib/puppet/pops/binder/bindings_model.rb +215 -0
  142. data/lib/puppet/pops/binder/bindings_model_dumper.rb +205 -0
  143. data/lib/puppet/pops/binder/bindings_validator_factory.rb +28 -0
  144. data/lib/puppet/pops/binder/config/binder_config.rb +139 -0
  145. data/lib/puppet/pops/binder/config/binder_config_checker.rb +183 -0
  146. data/lib/puppet/pops/binder/config/diagnostic_producer.rb +32 -0
  147. data/lib/puppet/pops/binder/config/issues.rb +106 -0
  148. data/lib/puppet/pops/binder/hiera2.rb +10 -0
  149. data/lib/puppet/pops/binder/hiera2/bindings_provider.rb +148 -0
  150. data/lib/puppet/pops/binder/hiera2/config.rb +69 -0
  151. data/lib/puppet/pops/binder/hiera2/config_checker.rb +68 -0
  152. data/lib/puppet/pops/binder/hiera2/diagnostic_producer.rb +36 -0
  153. data/lib/puppet/pops/binder/hiera2/issues.rb +67 -0
  154. data/lib/puppet/pops/binder/hiera2/json_backend.rb +18 -0
  155. data/lib/puppet/pops/binder/hiera2/yaml_backend.rb +21 -0
  156. data/lib/puppet/pops/binder/injector.rb +688 -0
  157. data/lib/puppet/pops/binder/injector_entry.rb +53 -0
  158. data/lib/puppet/pops/binder/key_factory.rb +61 -0
  159. data/lib/puppet/pops/binder/producers.rb +829 -0
  160. data/lib/puppet/pops/binder/scheme_handler/confdir_hiera_scheme.rb +67 -0
  161. data/lib/puppet/pops/binder/scheme_handler/confdir_scheme.rb +34 -0
  162. data/lib/puppet/pops/binder/scheme_handler/module_hiera_scheme.rb +92 -0
  163. data/lib/puppet/pops/binder/scheme_handler/module_scheme.rb +84 -0
  164. data/lib/puppet/pops/binder/scheme_handler/symbolic_scheme.rb +54 -0
  165. data/lib/puppet/pops/binder/system_bindings.rb +72 -0
  166. data/lib/puppet/pops/issue_reporter.rb +75 -0
  167. data/lib/puppet/pops/issues.rb +9 -5
  168. data/lib/puppet/pops/model/ast_transformer.rb +4 -4
  169. data/lib/puppet/pops/model/ast_tree_dumper.rb +1 -1
  170. data/lib/puppet/pops/model/factory.rb +25 -13
  171. data/lib/puppet/pops/model/model.rb +1 -1
  172. data/lib/puppet/pops/model/tree_dumper.rb +2 -2
  173. data/lib/puppet/pops/parser/egrammar.ra +0 -1
  174. data/lib/puppet/pops/parser/eparser.rb +1 -2
  175. data/lib/puppet/pops/parser/evaluating_parser.rb +162 -0
  176. data/lib/puppet/pops/parser/lexer.rb +8 -6
  177. data/lib/puppet/pops/types/class_loader.rb +118 -0
  178. data/lib/puppet/pops/types/type_calculator.rb +557 -0
  179. data/lib/puppet/pops/types/type_factory.rb +147 -0
  180. data/lib/puppet/pops/types/type_parser.rb +117 -0
  181. data/lib/puppet/pops/types/types.rb +132 -0
  182. data/lib/puppet/pops/validation.rb +146 -17
  183. data/lib/puppet/pops/validation/checker3_1.rb +1 -1
  184. data/lib/puppet/pops/validation/validator_factory_3_1.rb +6 -16
  185. data/lib/puppet/property.rb +3 -3
  186. data/lib/puppet/property/keyvalue.rb +1 -1
  187. data/lib/puppet/provider.rb +2 -2
  188. data/lib/puppet/provider/aixobject.rb +19 -21
  189. data/lib/puppet/provider/augeas/augeas.rb +3 -1
  190. data/lib/puppet/provider/command.rb +2 -2
  191. data/lib/puppet/provider/group/aix.rb +1 -1
  192. data/lib/puppet/provider/group/ldap.rb +1 -1
  193. data/lib/puppet/provider/macauthorization/macauthorization.rb +1 -1
  194. data/lib/puppet/provider/mailalias/aliases.rb +3 -8
  195. data/lib/puppet/provider/mcx/mcxcontent.rb +7 -1
  196. data/lib/puppet/provider/mount.rb +8 -3
  197. data/lib/puppet/provider/nameservice.rb +1 -1
  198. data/lib/puppet/provider/nameservice/directoryservice.rb +5 -5
  199. data/lib/puppet/provider/package/appdmg.rb +1 -1
  200. data/lib/puppet/provider/package/apt.rb +0 -1
  201. data/lib/puppet/provider/package/dpkg.rb +86 -32
  202. data/lib/puppet/provider/package/fink.rb +0 -2
  203. data/lib/puppet/provider/package/freebsd.rb +0 -2
  204. data/lib/puppet/provider/package/openbsd.rb +57 -10
  205. data/lib/puppet/provider/package/opkg.rb +0 -1
  206. data/lib/puppet/provider/package/pacman.rb +0 -1
  207. data/lib/puppet/provider/package/pip.rb +1 -1
  208. data/lib/puppet/provider/package/pkgdmg.rb +17 -6
  209. data/lib/puppet/provider/package/pkgutil.rb +1 -1
  210. data/lib/puppet/provider/package/portage.rb +9 -1
  211. data/lib/puppet/provider/package/ports.rb +2 -2
  212. data/lib/puppet/provider/package/rpm.rb +29 -12
  213. data/lib/puppet/provider/package/rug.rb +1 -1
  214. data/lib/puppet/provider/package/urpmi.rb +11 -15
  215. data/lib/puppet/provider/package/windows/exe_package.rb +1 -1
  216. data/lib/puppet/provider/package/windows/package.rb +1 -26
  217. data/lib/puppet/provider/package/yum.rb +1 -1
  218. data/lib/puppet/provider/package/zypper.rb +22 -3
  219. data/lib/puppet/provider/parsedfile.rb +1 -12
  220. data/lib/puppet/provider/scheduled_task/win32_taskscheduler.rb +1 -1
  221. data/lib/puppet/provider/service/base.rb +1 -1
  222. data/lib/puppet/provider/service/daemontools.rb +3 -3
  223. data/lib/puppet/provider/service/debian.rb +1 -1
  224. data/lib/puppet/provider/service/init.rb +14 -20
  225. data/lib/puppet/provider/service/openrc.rb +3 -1
  226. data/lib/puppet/provider/service/redhat.rb +5 -8
  227. data/lib/puppet/provider/service/runit.rb +3 -2
  228. data/lib/puppet/provider/service/systemd.rb +1 -1
  229. data/lib/puppet/provider/ssh_authorized_key/parsed.rb +1 -1
  230. data/lib/puppet/provider/sshkey/parsed.rb +0 -2
  231. data/lib/puppet/provider/user/aix.rb +25 -12
  232. data/lib/puppet/provider/user/directoryservice.rb +4 -7
  233. data/lib/puppet/provider/user/ldap.rb +0 -1
  234. data/lib/puppet/provider/user/user_role_add.rb +2 -0
  235. data/lib/puppet/provider/user/useradd.rb +1 -1
  236. data/lib/puppet/provider/zone/solaris.rb +1 -2
  237. data/lib/puppet/reference/metaparameter.rb +1 -1
  238. data/lib/puppet/reference/type.rb +1 -1
  239. data/lib/puppet/reports/rrdgraph.rb +1 -1
  240. data/lib/puppet/reports/tagmail.rb +1 -1
  241. data/lib/puppet/resource.rb +16 -4
  242. data/lib/puppet/resource/catalog.rb +111 -173
  243. data/lib/puppet/resource/status.rb +42 -3
  244. data/lib/puppet/resource/type.rb +33 -46
  245. data/lib/puppet/resource/type_collection.rb +19 -15
  246. data/lib/puppet/run.rb +5 -1
  247. data/lib/puppet/scheduler/scheduler.rb +14 -15
  248. data/lib/puppet/settings.rb +78 -41
  249. data/lib/puppet/settings/boolean_setting.rb +0 -2
  250. data/lib/puppet/settings/config_file.rb +0 -2
  251. data/lib/puppet/settings/directory_setting.rb +0 -2
  252. data/lib/puppet/settings/duration_setting.rb +0 -2
  253. data/lib/puppet/settings/enum_setting.rb +16 -0
  254. data/lib/puppet/settings/file_setting.rb +0 -2
  255. data/lib/puppet/settings/path_setting.rb +0 -2
  256. data/lib/puppet/settings/string_setting.rb +0 -3
  257. data/lib/puppet/settings/terminus_setting.rb +0 -2
  258. data/lib/puppet/ssl/certificate_authority.rb +102 -9
  259. data/lib/puppet/test/test_helper.rb +1 -0
  260. data/lib/puppet/transaction.rb +130 -292
  261. data/lib/puppet/transaction/additional_resource_generator.rb +126 -0
  262. data/lib/puppet/transaction/event.rb +16 -1
  263. data/lib/puppet/transaction/report.rb +34 -14
  264. data/lib/puppet/transaction/resource_harness.rb +16 -19
  265. data/lib/puppet/type.rb +59 -53
  266. data/lib/puppet/type/component.rb +0 -2
  267. data/lib/puppet/type/cron.rb +13 -2
  268. data/lib/puppet/type/exec.rb +5 -7
  269. data/lib/puppet/type/file.rb +9 -32
  270. data/lib/puppet/type/file/content.rb +4 -1
  271. data/lib/puppet/type/file/ctime.rb +3 -1
  272. data/lib/puppet/type/file/ensure.rb +1 -1
  273. data/lib/puppet/type/file/mode.rb +0 -1
  274. data/lib/puppet/type/file/mtime.rb +2 -1
  275. data/lib/puppet/type/group.rb +7 -9
  276. data/lib/puppet/type/host.rb +1 -2
  277. data/lib/puppet/type/mcx.rb +0 -1
  278. data/lib/puppet/type/mount.rb +38 -6
  279. data/lib/puppet/type/package.rb +2 -2
  280. data/lib/puppet/type/resources.rb +5 -4
  281. data/lib/puppet/type/schedule.rb +1 -4
  282. data/lib/puppet/type/selmodule.rb +1 -1
  283. data/lib/puppet/type/service.rb +1 -3
  284. data/lib/puppet/type/tidy.rb +3 -3
  285. data/lib/puppet/type/user.rb +9 -13
  286. data/lib/puppet/type/yumrepo.rb +11 -7
  287. data/lib/puppet/util.rb +14 -7
  288. data/lib/puppet/util/autoload.rb +0 -1
  289. data/lib/puppet/util/backups.rb +1 -3
  290. data/lib/puppet/util/classgen.rb +1 -1
  291. data/lib/puppet/util/command_line/puppet_option_parser.rb +1 -3
  292. data/lib/puppet/util/command_line/trollop.rb +1 -1
  293. data/lib/puppet/util/constant_inflector.rb +1 -2
  294. data/lib/puppet/util/errors.rb +1 -0
  295. data/lib/puppet/util/file_watcher.rb +28 -0
  296. data/lib/puppet/util/fileparsing.rb +1 -3
  297. data/lib/puppet/util/filetype.rb +0 -1
  298. data/lib/puppet/util/http_proxy.rb +38 -0
  299. data/lib/puppet/util/ldap/manager.rb +1 -2
  300. data/lib/puppet/util/log.rb +31 -10
  301. data/lib/puppet/util/log/destinations.rb +0 -50
  302. data/lib/puppet/util/metric.rb +8 -1
  303. data/lib/puppet/util/monkey_patches.rb +14 -148
  304. data/lib/puppet/util/network_device/cisco/facts.rb +1 -1
  305. data/lib/puppet/util/network_device/config.rb +6 -9
  306. data/lib/puppet/util/network_device/transport/ssh.rb +1 -1
  307. data/lib/puppet/util/pidlock.rb +3 -0
  308. data/lib/puppet/util/posix.rb +1 -1
  309. data/lib/puppet/util/profiler.rb +1 -1
  310. data/lib/puppet/util/rdoc.rb +1 -1
  311. data/lib/puppet/util/rdoc/generators/puppet_generator.rb +0 -1
  312. data/lib/puppet/util/rdoc/generators/template/puppet/puppet.rb +50 -42
  313. data/lib/puppet/util/retryaction.rb +0 -1
  314. data/lib/puppet/util/symbolic_file_mode.rb +5 -1
  315. data/lib/puppet/util/tagging.rb +0 -2
  316. data/lib/puppet/util/warnings.rb +3 -0
  317. data/lib/puppet/util/watched_file.rb +37 -0
  318. data/lib/puppet/util/watcher.rb +17 -0
  319. data/lib/puppet/util/watcher/change_watcher.rb +33 -0
  320. data/lib/puppet/util/watcher/periodic_watcher.rb +37 -0
  321. data/lib/puppet/util/watcher/timer.rb +19 -0
  322. data/lib/puppet/util/windows/user.rb +1 -1
  323. data/lib/puppet/version.rb +1 -1
  324. data/lib/puppetx.rb +109 -0
  325. data/lib/puppetx/puppet/bindings_scheme_handler.rb +130 -0
  326. data/lib/puppetx/puppet/hiera2_backend.rb +31 -0
  327. data/lib/puppetx/puppet/syntax_checker.rb +91 -0
  328. data/lib/puppetx/puppetlabs/syntax_checkers/json.rb +39 -0
  329. data/lib/semver.rb +1 -1
  330. data/man/man8/puppet-kick.8 +1 -1
  331. data/spec/fixtures/integration/provider/cron/crontab/unspecialized +15 -0
  332. data/spec/fixtures/unit/pops/binder/bindings_composer/hiera1config/binder_config.yaml +18 -0
  333. data/spec/fixtures/unit/pops/binder/bindings_composer/hiera1config/hiera.yaml +8 -0
  334. data/spec/fixtures/unit/pops/binder/bindings_composer/hiera1config/modules/good/common.yaml +1 -0
  335. data/spec/fixtures/unit/pops/binder/bindings_composer/hiera1config/modules/good/hiera.yaml +10 -0
  336. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/binder_config.yaml +19 -0
  337. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/common.yaml +1 -0
  338. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/hiera.yaml +11 -0
  339. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/localhost.yaml +1 -0
  340. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/common.yaml +3 -0
  341. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/hiera.yaml +13 -0
  342. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/lib/puppet/bindings/awesome/default.rb +4 -0
  343. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/lib/puppetx/awesome/echo_backend.rb +11 -0
  344. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/lib/puppetx/awesome/echo_scheme_handler.rb +18 -0
  345. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/localhost.yaml +1 -0
  346. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/bad/common.yaml +3 -0
  347. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/bad/hiera_config.yaml +9 -0
  348. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/good/common.yaml +2 -0
  349. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/good/hiera.yaml +11 -0
  350. data/spec/fixtures/unit/pops/binder/config/binder_config/ok/binder_config.yaml +9 -0
  351. data/spec/fixtures/unit/pops/binder/hiera2/bindings_provider/ok/hiera.yaml +9 -0
  352. data/spec/fixtures/unit/pops/binder/hiera2/bindings_provider/ok/node.example.com.json +9 -0
  353. data/spec/fixtures/unit/pops/binder/hiera2/bindings_provider/ok/node.example.com.yaml +5 -0
  354. data/spec/fixtures/unit/pops/binder/hiera2/config/bad_syntax/hiera.yaml +10 -0
  355. data/spec/fixtures/unit/pops/binder/hiera2/config/malformed_hierarchy/hiera.yaml +8 -0
  356. data/spec/fixtures/unit/pops/binder/hiera2/config/missing/foo.txt +1 -0
  357. data/spec/fixtures/unit/pops/binder/hiera2/config/no_backends/hiera.yaml +7 -0
  358. data/spec/fixtures/unit/pops/binder/hiera2/config/no_hierarchy/hiera.yaml +4 -0
  359. data/spec/fixtures/unit/pops/binder/hiera2/config/not_a_hash/hiera.yaml +2 -0
  360. data/spec/fixtures/unit/pops/binder/hiera2/config/ok/hiera.yaml +8 -0
  361. data/spec/fixtures/unit/pops/binder/hiera2/yaml_backend/empty/common.yaml +0 -0
  362. data/spec/fixtures/unit/pops/binder/hiera2/yaml_backend/invalid/common.yaml +1 -0
  363. data/spec/fixtures/unit/pops/binder/hiera2/yaml_backend/ok/common.yaml +2 -0
  364. data/spec/fixtures/unit/provider/package/openbsd/pkginfo_flavors.list +2 -0
  365. data/spec/integration/agent/logging_spec.rb +178 -0
  366. data/spec/integration/configurer_spec.rb +1 -1
  367. data/spec/integration/defaults_spec.rb +0 -6
  368. data/spec/integration/network/authconfig_spec.rb +19 -0
  369. data/spec/integration/network/server/webrick_spec.rb +10 -11
  370. data/spec/integration/parser/catalog_spec.rb +85 -0
  371. data/spec/integration/provider/cron/crontab_spec.rb +11 -0
  372. data/spec/integration/provider/mount_spec.rb +1 -0
  373. data/spec/integration/transaction_spec.rb +8 -8
  374. data/spec/integration/type/file_spec.rb +1 -1
  375. data/spec/integration/util/settings_spec.rb +58 -11
  376. data/spec/lib/matchers/include_in_order.rb +21 -0
  377. data/spec/lib/matchers/include_in_order_spec.rb +30 -0
  378. data/spec/lib/matchers/relationship_graph_matchers.rb +48 -0
  379. data/spec/lib/puppet_spec/compiler.rb +24 -0
  380. data/spec/lib/puppet_spec/pops.rb +16 -0
  381. data/spec/spec_helper.rb +0 -1
  382. data/spec/unit/application/agent_spec.rb +145 -145
  383. data/spec/unit/application/apply_spec.rb +1 -1
  384. data/spec/unit/application/doc_spec.rb +1 -1
  385. data/spec/unit/application/face_base_spec.rb +3 -3
  386. data/spec/unit/application/facts_spec.rb +1 -0
  387. data/spec/unit/application/master_spec.rb +0 -15
  388. data/spec/unit/application/queue_spec.rb +6 -12
  389. data/spec/unit/application/resource_spec.rb +1 -1
  390. data/spec/unit/configurer/fact_handler_spec.rb +19 -50
  391. data/spec/unit/configurer_spec.rb +23 -7
  392. data/spec/unit/daemon_spec.rb +97 -121
  393. data/spec/unit/defaults_spec.rb +44 -0
  394. data/spec/unit/face/node_spec.rb +2 -2
  395. data/spec/unit/file_serving/configuration/parser_spec.rb +23 -33
  396. data/spec/unit/file_serving/configuration_spec.rb +2 -2
  397. data/spec/unit/file_serving/mount/file_spec.rb +4 -4
  398. data/spec/unit/forge/repository_spec.rb +9 -29
  399. data/spec/unit/graph/key_spec.rb +41 -0
  400. data/spec/unit/{rb_tree_map_spec.rb → graph/rb_tree_map_spec.rb} +7 -7
  401. data/spec/unit/graph/relationship_graph_spec.rb +393 -0
  402. data/spec/unit/graph/sequential_prioritizer_spec.rb +32 -0
  403. data/spec/unit/{simple_graph_spec.rb → graph/simple_graph.rb} +42 -254
  404. data/spec/unit/graph/title_hash_prioritizer_spec.rb +49 -0
  405. data/spec/unit/hiera_puppet_spec.rb +1 -1
  406. data/spec/unit/indirector/catalog/active_record_spec.rb +4 -2
  407. data/spec/unit/indirector/catalog/compiler_spec.rb +20 -26
  408. data/spec/unit/indirector/face_spec.rb +1 -1
  409. data/spec/unit/indirector/facts/facter_spec.rb +11 -1
  410. data/spec/unit/indirector/facts/network_device_spec.rb +11 -1
  411. data/spec/unit/indirector/hiera_spec.rb +1 -1
  412. data/spec/unit/indirector/instrumentation_data/local_spec.rb +1 -1
  413. data/spec/unit/indirector/instrumentation_listener/local_spec.rb +1 -1
  414. data/spec/unit/indirector/request_spec.rb +92 -39
  415. data/spec/unit/indirector/rest_spec.rb +1 -0
  416. data/spec/unit/indirector_spec.rb +2 -2
  417. data/spec/unit/interface/option_builder_spec.rb +1 -0
  418. data/spec/unit/interface/option_spec.rb +1 -0
  419. data/spec/unit/interface_spec.rb +2 -2
  420. data/spec/unit/module_tool/applications/installer_spec.rb +49 -2
  421. data/spec/unit/module_tool/metadata_spec.rb +13 -0
  422. data/spec/unit/network/authstore_spec.rb +1 -1
  423. data/spec/unit/network/format_handler_spec.rb +33 -282
  424. data/spec/unit/network/format_support_spec.rb +199 -0
  425. data/spec/unit/network/formats_spec.rb +2 -2
  426. data/spec/unit/network/http/connection_spec.rb +88 -7
  427. data/spec/unit/network/http/handler_spec.rb +271 -249
  428. data/spec/unit/network/http/rack/rest_spec.rb +1 -1
  429. data/spec/unit/network/http/webrick/rest_spec.rb +73 -22
  430. data/spec/unit/network/http_pool_spec.rb +40 -0
  431. data/spec/unit/network/server_spec.rb +18 -207
  432. data/spec/unit/node/facts_spec.rb +68 -17
  433. data/spec/unit/other/selinux_spec.rb +24 -20
  434. data/spec/unit/parameter/boolean_spec.rb +25 -0
  435. data/spec/unit/parameter/value_collection_spec.rb +7 -7
  436. data/spec/unit/parameter_spec.rb +10 -13
  437. data/spec/unit/parser/ast/function_spec.rb +4 -4
  438. data/spec/unit/parser/ast/leaf_spec.rb +45 -6
  439. data/spec/unit/parser/collector_spec.rb +3 -3
  440. data/spec/unit/parser/compiler_spec.rb +4 -3
  441. data/spec/unit/parser/functions/create_resources_spec.rb +9 -25
  442. data/spec/unit/parser/functions/extlookup_spec.rb +2 -2
  443. data/spec/unit/parser/functions/hiera_include_spec.rb +12 -0
  444. data/spec/unit/parser/functions/lookup_spec.rb +96 -0
  445. data/spec/unit/parser/functions/regsubst_spec.rb +2 -2
  446. data/spec/unit/parser/functions/split_spec.rb +2 -2
  447. data/spec/unit/parser/functions/sprintf_spec.rb +1 -1
  448. data/spec/unit/parser/functions/versioncmp_spec.rb +2 -2
  449. data/spec/unit/parser/functions_spec.rb +7 -7
  450. data/spec/unit/parser/lexer_spec.rb +1 -1
  451. data/spec/unit/parser/methods/collect_spec.rb +43 -0
  452. data/spec/unit/parser/resource_spec.rb +9 -9
  453. data/spec/unit/parser/scope_spec.rb +45 -2
  454. data/spec/unit/parser/type_loader_spec.rb +159 -175
  455. data/spec/unit/pops/binder/binder_spec.rb +62 -0
  456. data/spec/unit/pops/binder/bindings_checker_spec.rb +196 -0
  457. data/spec/unit/pops/binder/bindings_composer_spec.rb +89 -0
  458. data/spec/unit/pops/binder/bindings_validator_factory_spec.rb +18 -0
  459. data/spec/unit/pops/binder/config/binder_config_spec.rb +48 -0
  460. data/spec/unit/pops/binder/hiera2/bindings_provider_spec.rb +74 -0
  461. data/spec/unit/pops/binder/hiera2/config_spec.rb +61 -0
  462. data/spec/unit/pops/binder/hiera2/yaml_backend_spec.rb +33 -0
  463. data/spec/unit/pops/binder/injector_spec.rb +789 -0
  464. data/spec/unit/pops/containment_spec.rb +1 -0
  465. data/spec/unit/pops/issues_spec.rb +1 -1
  466. data/spec/unit/pops/parser/evaluating_parser_spec.rb +88 -0
  467. data/spec/unit/pops/parser/lexer_spec.rb +1 -1
  468. data/spec/unit/pops/parser/parse_calls_spec.rb +4 -0
  469. data/spec/unit/pops/parser/parser_spec.rb +1 -1
  470. data/spec/unit/pops/types/type_calculator_spec.rb +484 -0
  471. data/spec/unit/pops/types/type_factory_spec.rb +65 -0
  472. data/spec/unit/pops/types/type_parser_spec.rb +93 -0
  473. data/spec/unit/property/list_spec.rb +1 -1
  474. data/spec/unit/property/ordered_list_spec.rb +1 -1
  475. data/spec/unit/provider/aixobject_spec.rb +101 -0
  476. data/spec/unit/provider/augeas/augeas_spec.rb +14 -3
  477. data/spec/unit/provider/mcx/mcxcontent_spec.rb +52 -16
  478. data/spec/unit/provider/mount/parsed_spec.rb +44 -56
  479. data/spec/unit/provider/mount_spec.rb +11 -2
  480. data/spec/unit/provider/naginator_spec.rb +8 -0
  481. data/spec/unit/provider/package/apt_spec.rb +5 -1
  482. data/spec/unit/provider/package/aptitude_spec.rb +9 -5
  483. data/spec/unit/provider/package/aptrpm_spec.rb +2 -2
  484. data/spec/unit/provider/package/dpkg_spec.rb +274 -99
  485. data/spec/unit/provider/package/openbsd_spec.rb +84 -1
  486. data/spec/unit/provider/package/opkg_spec.rb +3 -3
  487. data/spec/unit/provider/package/pip_spec.rb +16 -0
  488. data/spec/unit/provider/package/pkgdmg_spec.rb +62 -7
  489. data/spec/unit/provider/package/rpm_spec.rb +112 -21
  490. data/spec/unit/provider/package/urpmi.rb +80 -0
  491. data/spec/unit/provider/package/windows/exe_package_spec.rb +1 -1
  492. data/spec/unit/provider/package/yum_spec.rb +85 -0
  493. data/spec/unit/provider/package/zypper_spec.rb +25 -6
  494. data/spec/unit/provider/parsedfile_spec.rb +3 -2
  495. data/spec/unit/provider/service/init_spec.rb +10 -10
  496. data/spec/unit/provider/service/openrc_spec.rb +16 -0
  497. data/spec/unit/provider/service/openwrt_spec.rb +1 -1
  498. data/spec/unit/provider/service/redhat_spec.rb +7 -0
  499. data/spec/unit/provider/ssh_authorized_key/parsed_spec.rb +2 -2
  500. data/spec/unit/provider/user/aix_spec.rb +89 -0
  501. data/spec/unit/provider/user/directoryservice_spec.rb +11 -4
  502. data/spec/unit/provider/user/user_role_add_spec.rb +18 -0
  503. data/spec/unit/provider_spec.rb +2 -13
  504. data/spec/unit/reports/http_spec.rb +1 -1
  505. data/spec/unit/resource/catalog_spec.rb +23 -97
  506. data/spec/unit/resource/resource_type.json +34 -0
  507. data/spec/unit/resource/status_spec.rb +56 -0
  508. data/spec/unit/resource/type_collection_spec.rb +6 -6
  509. data/spec/unit/resource/type_spec.rb +25 -5
  510. data/spec/unit/resource_spec.rb +68 -24
  511. data/spec/unit/run_spec.rb +16 -0
  512. data/spec/unit/scheduler/scheduler_spec.rb +14 -27
  513. data/spec/unit/semver_spec.rb +5 -0
  514. data/spec/unit/settings/enum_setting_spec.rb +27 -0
  515. data/spec/unit/settings_spec.rb +53 -44
  516. data/spec/unit/ssl/certificate_authority_spec.rb +155 -19
  517. data/spec/unit/transaction/additional_resource_generator_spec.rb +419 -0
  518. data/spec/unit/transaction/event_manager_spec.rb +2 -2
  519. data/spec/unit/transaction/event_spec.rb +57 -0
  520. data/spec/unit/transaction/report_spec.rb +66 -0
  521. data/spec/unit/transaction/resource_harness_spec.rb +27 -20
  522. data/spec/unit/transaction_spec.rb +182 -390
  523. data/spec/unit/type/augeas_spec.rb +3 -3
  524. data/spec/unit/type/component_spec.rb +0 -9
  525. data/spec/unit/type/computer_spec.rb +1 -1
  526. data/spec/unit/type/cron_spec.rb +2 -2
  527. data/spec/unit/type/exec_spec.rb +4 -2
  528. data/spec/unit/type/file/content_spec.rb +11 -0
  529. data/spec/unit/type/file/group_spec.rb +1 -1
  530. data/spec/unit/type/file_spec.rb +16 -8
  531. data/spec/unit/type/mount_spec.rb +445 -259
  532. data/spec/unit/type/package_spec.rb +4 -4
  533. data/spec/unit/type/resources_spec.rb +30 -1
  534. data/spec/unit/type/user_spec.rb +26 -3
  535. data/spec/unit/type/yumrepo_spec.rb +7 -27
  536. data/spec/unit/type/zone_spec.rb +4 -1
  537. data/spec/unit/type_spec.rb +66 -33
  538. data/spec/unit/util/backups_spec.rb +3 -3
  539. data/spec/unit/util/http_proxy_spec.rb +83 -0
  540. data/spec/unit/util/log_spec.rb +79 -8
  541. data/spec/unit/util/metric_spec.rb +12 -0
  542. data/spec/unit/util/monkey_patches_spec.rb +6 -0
  543. data/spec/unit/util/network_device/config_spec.rb +26 -64
  544. data/spec/unit/util/pidlock_spec.rb +4 -1
  545. data/spec/unit/util/tagging_spec.rb +5 -9
  546. data/spec/unit/util/warnings_spec.rb +1 -1
  547. data/spec/unit/util/watched_file_spec.rb +52 -0
  548. data/spec/unit/util/watcher/periodic_watcher_spec.rb +52 -0
  549. data/spec/unit/util/watcher_spec.rb +56 -0
  550. data/spec/unit/util_spec.rb +16 -0
  551. metadata +2767 -2576
  552. data/ext/debian/puppet.manpages +0 -32
  553. data/ext/osx/PackageInfo.plist +0 -36
  554. data/ext/osx/createpackage.sh +0 -187
  555. data/ext/redhat/rundir-perms.patch +0 -28
  556. data/lib/puppet/external/base64.rb +0 -19
  557. data/lib/puppet/util/graph.rb +0 -27
  558. data/lib/puppet/util/loadedfile.rb +0 -61
  559. data/lib/puppet/util/log_paths.rb +0 -22
  560. data/lib/puppet/util/subclass_loader.rb +0 -78
  561. data/spec/monkey_patches/publicize_methods.rb +0 -11
  562. data/spec/unit/util/loadedfile_spec.rb +0 -71
@@ -281,7 +281,7 @@ class Puppet::Pops::Validation::Checker3_1
281
281
  end
282
282
 
283
283
  def check_QueryExpression(o)
284
- rvalue(o.expr) if o.expr # is optional
284
+ query(o.expr) if o.expr # is optional
285
285
  end
286
286
 
287
287
  def relation_Object(o, rel_expr)
@@ -1,20 +1,8 @@
1
1
  # Configures validation suitable for 3.1 + iteration
2
2
  #
3
- class Puppet::Pops::Validation::ValidatorFactory_3_1
3
+ class Puppet::Pops::Validation::ValidatorFactory_3_1 < Puppet::Pops::Validation::Factory
4
4
  Issues = Puppet::Pops::Issues
5
5
 
6
- # Produces a validator with the given acceptor as the recipient of produced diagnostics.
7
- #
8
- def validator acceptor
9
- checker(diagnostic_producer(acceptor))
10
- end
11
-
12
- # Produces the diagnostics producer to use given an acceptor as the recipient of produced diagnostics
13
- #
14
- def diagnostic_producer acceptor
15
- Puppet::Pops::Validation::DiagnosticProducer.new(acceptor, severity_producer(), label_provider())
16
- end
17
-
18
6
  # Produces the checker to use
19
7
  def checker diagnostic_producer
20
8
  Puppet::Pops::Validation::Checker3_1.new(diagnostic_producer)
@@ -27,12 +15,14 @@ class Puppet::Pops::Validation::ValidatorFactory_3_1
27
15
 
28
16
  # Produces the severity producer to use
29
17
  def severity_producer
30
- p = Puppet::Pops::Validation::SeverityProducer.new
18
+ p = super
31
19
 
32
20
  # Configure each issue that should **not** be an error
33
21
  #
34
- p[Issues::RT_NO_STORECONFIGS_EXPORT] = :warning
35
- p[Issues::RT_NO_STORECONFIGS] = :warning
22
+ # Validate as per the current runtime configuration
23
+ p[Issues::RT_NO_STORECONFIGS_EXPORT] = Puppet[:storeconfigs] ? :ignore : :warning
24
+ p[Issues::RT_NO_STORECONFIGS] = Puppet[:storeconfigs] ? :ignore : :warning
25
+
36
26
  p[Issues::NAME_WITH_HYPHEN] = :deprecation
37
27
  p[Issues::DEPRECATED_NAME_AS_TYPE] = :deprecation
38
28
 
@@ -194,7 +194,7 @@ class Puppet::Property < Puppet::Parameter
194
194
  def call_valuemethod(name, value)
195
195
  if method = self.class.value_option(name, :method) and self.respond_to?(method)
196
196
  begin
197
- event = self.send(method)
197
+ self.send(method)
198
198
  rescue Puppet::Error
199
199
  raise
200
200
  rescue => detail
@@ -611,7 +611,7 @@ class Puppet::Property < Puppet::Parameter
611
611
  end
612
612
 
613
613
  # (see #should=)
614
- def value=(value)
615
- self.should = value
614
+ def value=(values)
615
+ self.should = values
616
616
  end
617
617
  end
@@ -70,7 +70,7 @@ module Puppet
70
70
  ";"
71
71
  end
72
72
 
73
- # Retrieves the key-hash from the provider by invoking it's method named the same as this property.
73
+ # Retrieves the key-hash from the provider by invoking its method named the same as this property.
74
74
  # @return [Hash] the hash from the provider, or `:absent`
75
75
  #
76
76
  def retrieve
@@ -185,7 +185,7 @@ class Puppet::Provider
185
185
  # is lazy (when a resource is evaluated) and the absence of commands
186
186
  # that will be present after other resources have been applied no longer needs to be specified as
187
187
  # optional.
188
- # @param [Hash{String => String}] command_specs Named commands that the provider will
188
+ # @param [Hash{String => String}] hash Named commands that the provider will
189
189
  # be executing on the system. Each command is specified with a name and the path of the executable.
190
190
  # (@see #has_command)
191
191
  # @see commands
@@ -564,7 +564,7 @@ class Puppet::Provider
564
564
 
565
565
  # Sets the given parameters values as the current values for those parameters.
566
566
  # Other parameters are unchanged.
567
- # @param [Array<Puppet::Parameter] the parameters with values that should be set
567
+ # @param [Array<Puppet::Parameter>] params the parameters with values that should be set
568
568
  # @return [void]
569
569
  #
570
570
  def set(params)
@@ -7,24 +7,20 @@ class Puppet::Provider::AixObject < Puppet::Provider
7
7
  desc "Generic AIX resource provider"
8
8
 
9
9
  # The real provider must implement these functions.
10
- def lscmd(value=@resource[:name])
11
- raise Puppet::Error, "Method not defined #{@resource.class.name} #{@resource.name}: #{detail}"
10
+ def lscmd( _value = @resource[:name] )
11
+ raise Puppet::Error, "Method not defined #{@resource.class.name} #{@resource.name}: Base AixObject provider doesn't implement lscmd"
12
12
  end
13
13
 
14
- def lscmd(value=@resource[:name])
15
- raise Puppet::Error, "Method not defined #{@resource.class.name} #{@resource.name}: #{detail}"
14
+ def addcmd( _extra_attrs = [] )
15
+ raise Puppet::Error, "Method not defined #{@resource.class.name} #{@resource.name}: Base AixObject provider doesn't implement addcmd"
16
16
  end
17
17
 
18
- def addcmd(extra_attrs = [])
19
- raise Puppet::Error, "Method not defined #{@resource.class.name} #{@resource.name}: #{detail}"
20
- end
21
-
22
- def modifycmd(attributes_hash)
23
- raise Puppet::Error, "Method not defined #{@resource.class.name} #{@resource.name}: #{detail}"
18
+ def modifycmd( _attributes_hash = {} )
19
+ raise Puppet::Error, "Method not defined #{@resource.class.name} #{@resource.name}: Base AixObject provider doesn't implement modifycmd"
24
20
  end
25
21
 
26
22
  def deletecmd
27
- raise Puppet::Error, "Method not defined #{@resource.class.name} #{@resource.name}: #{detail}"
23
+ raise Puppet::Error, "Method not defined #{@resource.class.name} #{@resource.name}: Base AixObject provider doesn't implement deletecmd"
28
24
  end
29
25
 
30
26
  # Valid attributes to be managed by this provider.
@@ -152,7 +148,7 @@ class Puppet::Provider::AixObject < Puppet::Provider
152
148
  # Parse AIX command attributes from the output of an AIX command, that
153
149
  # which format is a list of space separated of key=value pairs:
154
150
  # "uid=100 groups=a,b,c".
155
- # It returns an hash.
151
+ # It returns a hash.
156
152
  #
157
153
  # If a mapping is provided, the keys are translated as defined in the
158
154
  # mapping hash. And only values included in mapping will be added
@@ -161,7 +157,7 @@ class Puppet::Provider::AixObject < Puppet::Provider
161
157
  def parse_attr_list(str, mapping=self.class.attribute_mapping_from)
162
158
  properties = {}
163
159
  attrs = []
164
- if !str or (attrs = str.split()).empty?
160
+ if str.nil? or (attrs = str.split()).empty?
165
161
  return nil
166
162
  end
167
163
 
@@ -169,11 +165,13 @@ class Puppet::Provider::AixObject < Puppet::Provider
169
165
  if i.include? "=" # Ignore if it does not include '='
170
166
  (key_str, val) = i.split('=')
171
167
  # Check the key
172
- if !key_str or key_str.empty?
168
+ if key_str.nil? or key_str.empty?
173
169
  info "Empty key in string 'i'?"
174
170
  continue
175
171
  end
172
+ key_str.strip!
176
173
  key = key_str.to_sym
174
+ val.strip! if val
177
175
 
178
176
  properties = self.load_attribute(key, val, mapping, properties)
179
177
  end
@@ -193,7 +191,7 @@ class Puppet::Provider::AixObject < Puppet::Provider
193
191
  def parse_colon_list(str, key_list, mapping=self.class.attribute_mapping_from)
194
192
  properties = {}
195
193
  attrs = []
196
- if !str or (attrs = str.split(':')).empty?
194
+ if str.nil? or (attrs = str.split(':')).empty?
197
195
  return nil
198
196
  end
199
197
 
@@ -227,9 +225,9 @@ class Puppet::Provider::AixObject < Puppet::Provider
227
225
  # Execute lsuser, split all attributes and add them to a dict.
228
226
  begin
229
227
  output = execute(self.lscmd)
230
- @objectinfo = self.parse_command_output(execute(self.lscmd))
228
+ @objectinfo = self.parse_command_output(output)
231
229
  # All attributtes without translation
232
- @objectosinfo = self.parse_command_output(execute(self.lscmd), nil)
230
+ @objectosinfo = self.parse_command_output(output, nil)
233
231
  rescue Puppet::ExecutionFailure => detail
234
232
  # Print error if needed. FIXME: Do not check the user here.
235
233
  Puppet.debug "aix.getinfo(): Could not find #{@resource.class.name} #{@resource.name}: #{detail}"
@@ -241,10 +239,10 @@ class Puppet::Provider::AixObject < Puppet::Provider
241
239
  # Like getinfo, but it will not use the mapping to translate the keys and values.
242
240
  # It might be usefult to retrieve some raw information.
243
241
  def getosinfo(refresh = false)
244
- if @objectosinfo .nil? or refresh == true
242
+ if @objectosinfo.nil? or refresh == true
245
243
  getinfo(refresh)
246
244
  end
247
- @objectosinfo
245
+ @objectosinfo || Hash.new
248
246
  end
249
247
 
250
248
 
@@ -290,7 +288,7 @@ class Puppet::Provider::AixObject < Puppet::Provider
290
288
  # providers, preferably with values already filled in, not resources.
291
289
  def self.instances
292
290
  objects=[]
293
- self.list_all.each { |entry|
291
+ list_all.each { |entry|
294
292
  objects << new(:name => entry, :ensure => :present)
295
293
  }
296
294
  objects
@@ -383,7 +381,7 @@ class Puppet::Provider::AixObject < Puppet::Provider
383
381
  end
384
382
 
385
383
  # Refresh de info.
386
- hash = getinfo(true)
384
+ getinfo(true)
387
385
  end
388
386
 
389
387
  def initialize(resource)
@@ -327,6 +327,8 @@ Puppet::Type.type(:augeas).provide(:augeas) do
327
327
 
328
328
  def print_errors(errors)
329
329
  errors.each do |errnode|
330
+ error = @aug.get(errnode)
331
+ debug("#{errnode} = #{error}") unless error.nil?
330
332
  @aug.match("#{errnode}/*").each do |subnode|
331
333
  subvalue = @aug.get(subnode)
332
334
  debug("#{subnode} = #{subvalue}")
@@ -334,7 +336,7 @@ Puppet::Type.type(:augeas).provide(:augeas) do
334
336
  end
335
337
  end
336
338
 
337
- # Determines if augeas acutally needs to run.
339
+ # Determines if augeas actually needs to run.
338
340
  def need_to_run?
339
341
  force = resource[:force]
340
342
  return_value = true
@@ -16,8 +16,8 @@ class Puppet::Provider::Command
16
16
  @options = options
17
17
  end
18
18
 
19
- # @param [Array<String>] Any command line arguments to pass to the executable
20
- # @returns The output from the command
19
+ # @param args [Array<String>] Any command line arguments to pass to the executable
20
+ # @return The output from the command
21
21
  def execute(*args)
22
22
  resolved_executable = @resolver.which(@executable) or raise Puppet::Error, "Command #{@name} is missing"
23
23
  @executor.execute([resolved_executable] + args, @options)
@@ -116,7 +116,7 @@ Puppet::Type.type(:group).provide :aix, :parent => Puppet::Provider::AixObject d
116
116
  end
117
117
 
118
118
  def attributes
119
- filter_attributes(getosinfo(refresh = false))
119
+ filter_attributes(getosinfo(false))
120
120
  end
121
121
 
122
122
  def attributes=(attr_hash)
@@ -40,6 +40,6 @@ Puppet::Type.type(:group).provide :ldap, :parent => Puppet::Provider::Ldap do
40
40
 
41
41
  # Only use the first result.
42
42
  group = result[0]
43
- gid = group[:gid][0]
43
+ group[:gid][0]
44
44
  end
45
45
  end
@@ -186,7 +186,7 @@ Puppet::Type.type(:macauthorization).provide :macauthorization, :parent => Puppe
186
186
  Plist::Emit.save_plist(values, tmp.path)
187
187
  cmds = []
188
188
  cmds << :security << "authorizationdb" << "write" << name
189
- output = execute(cmds, :failonfail => false, :combine => false, :stdinfile => tmp.path.to_s)
189
+ execute(cmds, :failonfail => false, :combine => false, :stdinfile => tmp.path.to_s)
190
190
  rescue Errno::EACCES => e
191
191
  raise Puppet::Error.new("Cannot save right to #{tmp.path}: #{e}")
192
192
  ensure
@@ -1,11 +1,9 @@
1
1
  require 'puppet/provider/parsedfile'
2
2
 
3
-
4
- Puppet::Type.type(:mailalias).provide(
5
- :aliases,
3
+ Puppet::Type.type(:mailalias).provide(
4
+ :aliases,
6
5
  :parent => Puppet::Provider::ParsedFile,
7
6
  :default_target => "/etc/aliases",
8
-
9
7
  :filetype => :flat
10
8
  ) do
11
9
  text_line :comment, :match => /^#/
@@ -13,10 +11,7 @@ require 'puppet/provider/parsedfile'
13
11
 
14
12
  record_line :aliases, :fields => %w{name recipient}, :separator => /\s*:\s*/, :block_eval => :instance do
15
13
  def post_parse(record)
16
- # LAK:NOTE See http://snurl.com/21zf8 [groups_google_com]
17
- # It's not sufficient to assign to an existing hash.
18
- recipient = record[:recipient].split(/\s*,\s*/).collect { |d| d.gsub(/^['"]|['"]$/, '') }
19
- record[:recipient] = recipient
14
+ record[:recipient] = record[:recipient].split(/\s*,\s*/).collect { |d| d.gsub(/^['"]|['"]$/, '') }
20
15
  record
21
16
  end
22
17
 
@@ -83,7 +83,7 @@ Puppet::Type.type(:mcx).provide :mcxcontent, :parent => Puppet::Provider do
83
83
  def exists?
84
84
  begin
85
85
  has_mcx?
86
- rescue Puppet::ExecutionFailure => e
86
+ rescue Puppet::ExecutionFailure
87
87
  return false
88
88
  end
89
89
  end
@@ -111,10 +111,16 @@ Puppet::Type.type(:mcx).provide :mcxcontent, :parent => Puppet::Provider do
111
111
  ds_t = TypeMap[ds_type]
112
112
  ds_path = "/Local/Default/#{ds_t}/#{ds_name}"
113
113
 
114
+ if has_mcx?
115
+ Puppet.debug "Removing MCX from #{ds_path}"
116
+ dscl 'localhost', '-mcxdelete', ds_path
117
+ end
118
+
114
119
  tmp = Tempfile.new('puppet_mcx')
115
120
  begin
116
121
  tmp << val
117
122
  tmp.flush
123
+ Puppet.debug "Importing MCX into #{ds_path}"
118
124
  dscl 'localhost', '-mcximport', ds_path, tmp.path
119
125
  ensure
120
126
  tmp.close
@@ -5,10 +5,15 @@ require 'puppet'
5
5
  module Puppet::Provider::Mount
6
6
  # This only works when the mount point is synced to the fstab.
7
7
  def mount
8
- # Manually pass the mount options in, since some OSes *cough*OS X*cough* don't
9
- # read from /etc/fstab but still want to use this type.
10
8
  args = []
11
- args << "-o" << self.options if self.options and self.options != :absent
9
+
10
+ # In general we do not have to pass mountoptions because we always
11
+ # flush /etc/fstab before attempting to mount. But old code suggests
12
+ # that MacOS always needs the mount options to be explicitly passed to
13
+ # the mount command
14
+ if Facter.value(:kernel) == 'Darwin'
15
+ args << "-o" << self.options if self.options and self.options != :absent
16
+ end
12
17
  args << resource[:name]
13
18
 
14
19
  mountcmd(*args)
@@ -227,7 +227,7 @@ class Puppet::Provider::NameService < Puppet::Provider
227
227
  @etcmethod ||= ("get" + self.class.section.to_s + "nam").intern
228
228
  begin
229
229
  @objectinfo = Etc.send(@etcmethod, @resource[:name])
230
- rescue ArgumentError => detail
230
+ rescue ArgumentError
231
231
  @objectinfo = nil
232
232
  end
233
233
  end
@@ -108,7 +108,7 @@ class Puppet::Provider::NameService::DirectoryService < Puppet::Provider::NameSe
108
108
  # JJM: List all objects of this Puppet::Type already present on the system.
109
109
  begin
110
110
  dscl_output = execute(get_exec_preamble("-list"))
111
- rescue Puppet::ExecutionFailure => detail
111
+ rescue Puppet::ExecutionFailure
112
112
  fail("Could not get #{@resource_type.name} list from DirectoryService")
113
113
  end
114
114
  dscl_output.split("\n")
@@ -166,7 +166,7 @@ class Puppet::Provider::NameService::DirectoryService < Puppet::Provider::NameSe
166
166
  dscl_vector = get_exec_preamble("-read", resource_name)
167
167
  begin
168
168
  dscl_output = execute(dscl_vector)
169
- rescue Puppet::ExecutionFailure => detail
169
+ rescue Puppet::ExecutionFailure
170
170
  fail("Could not get report. command execution failed.")
171
171
  end
172
172
 
@@ -237,7 +237,7 @@ class Puppet::Provider::NameService::DirectoryService < Puppet::Provider::NameSe
237
237
  dscl_vector = self.get_exec_preamble("-merge", resource_name)
238
238
  dscl_vector << "AuthenticationAuthority" << ";ShadowHash;"
239
239
  begin
240
- dscl_output = execute(dscl_vector)
240
+ execute(dscl_vector)
241
241
  rescue Puppet::ExecutionFailure => detail
242
242
  fail("Could not set AuthenticationAuthority.")
243
243
  end
@@ -332,7 +332,7 @@ class Puppet::Provider::NameService::DirectoryService < Puppet::Provider::NameSe
332
332
  def self.convert_xml_to_binary(plist_data)
333
333
  Puppet.debug('Converting XML plist to binary')
334
334
  Puppet.debug('Executing: \'plutil -convert binary1 -o - -\'')
335
- IO.popen('plutil -convert binary1 -o - -', mode='r+') do |io|
335
+ IO.popen('plutil -convert binary1 -o - -', 'r+') do |io|
336
336
  io.write plist_data.to_plist
337
337
  io.close_write
338
338
  @converted_plist = io.read
@@ -345,7 +345,7 @@ class Puppet::Provider::NameService::DirectoryService < Puppet::Provider::NameSe
345
345
  def self.convert_binary_to_xml(plist_data)
346
346
  Puppet.debug('Converting binary plist to XML')
347
347
  Puppet.debug('Executing: \'plutil -convert xml1 -o - -\'')
348
- IO.popen('plutil -convert xml1 -o - -', mode='r+') do |io|
348
+ IO.popen('plutil -convert xml1 -o - -', 'r+') do |io|
349
349
  io.write plist_data
350
350
  io.close_write
351
351
  @converted_plist = io.read
@@ -88,7 +88,7 @@ Puppet::Type.type(:package).provide(:appdmg, :parent => Puppet::Provider::Packag
88
88
  end
89
89
  end
90
90
  ensure
91
- FileUtils.remove_entry_secure(tmpdir, force=true)
91
+ FileUtils.remove_entry_secure(tmpdir, true)
92
92
  end
93
93
  end
94
94
 
@@ -45,7 +45,6 @@ Puppet::Type.type(:package).provide :apt, :parent => :dpkg, :source => :dpkg do
45
45
  checkforcdrom
46
46
  cmd = %w{-q -y}
47
47
 
48
- keep = ""
49
48
  if config = @resource[:configfiles]
50
49
  if config == :keep
51
50
  cmd << "-o" << 'DPkg::Options::=--force-confold'
@@ -11,39 +11,75 @@ Puppet::Type.type(:package).provide :dpkg, :parent => Puppet::Provider::Package
11
11
  commands :dpkg_deb => "/usr/bin/dpkg-deb"
12
12
  commands :dpkgquery => "/usr/bin/dpkg-query"
13
13
 
14
+ # Performs a dpkgquery call with a pipe so that output can be processed
15
+ # inline in a passed block.
16
+ # @param args [Array<String>] any command line arguments to be appended to the command
17
+ # @param block expected to be passed on to execpipe
18
+ # @return whatever the block returns
19
+ # @see Puppet::Util::Execution.execpipe
20
+ # @api private
21
+ def self.dpkgquery_piped(*args, &block)
22
+ cmd = args.unshift(command(:dpkgquery))
23
+ Puppet::Util::Execution.execpipe(cmd, &block)
24
+ end
25
+
14
26
  def self.instances
15
27
  packages = []
16
28
 
17
29
  # list out all of the packages
18
- cmd = "#{command(:dpkgquery)} -W --showformat '${Status} ${Package} ${Version}\\n'"
19
- Puppet.debug "Executing '#{cmd}'"
20
- Puppet::Util::Execution.execpipe(cmd) do |process|
21
- # our regex for matching dpkg output
22
- regex = %r{^(\S+) +(\S+) +(\S+) (\S+) (\S*)$}
23
- fields = [:desired, :error, :status, :name, :ensure]
24
- hash = {}
25
-
26
- # now turn each returned line into a package object
27
- process.each_line { |line|
28
- if hash = parse_line(line)
29
- packages << new(hash)
30
- end
31
- }
30
+ dpkgquery_piped('-W', '--showformat', self::DPKG_QUERY_FORMAT_STRING) do |pipe|
31
+ until pipe.eof?
32
+ hash = parse_multi_line(pipe)
33
+ packages << new(hash) if hash
34
+ end
32
35
  end
33
36
 
34
37
  packages
35
38
  end
36
39
 
37
- self::REGEX = %r{^(\S+) +(\S+) +(\S+) (\S+) (\S*)$}
38
- self::FIELDS = [:desired, :error, :status, :name, :ensure]
40
+ private
41
+
42
+ # Note: self:: is required here to keep these constants in the context of what will
43
+ # eventually become this Puppet:Type::Package::ProviderDpkg class.
44
+ self::DPKG_DESCRIPTION_DELIMITER = ':DESC:'
45
+ self::DPKG_QUERY_FORMAT_STRING = %Q{'${Status} ${Package} ${Version} #{self::DPKG_DESCRIPTION_DELIMITER} ${Description}\\n#{self::DPKG_DESCRIPTION_DELIMITER}\\n'}
46
+ self::FIELDS_REGEX = %r{^(\S+) +(\S+) +(\S+) (\S+) (\S*) #{self::DPKG_DESCRIPTION_DELIMITER} (.*)$}
47
+ self::FIELDS= [:desired, :error, :status, :name, :ensure, :description]
48
+ self::END_REGEX = %r{^#{self::DPKG_DESCRIPTION_DELIMITER}$}
49
+
50
+ # Handles parsing one package's worth of multi-line dpkg-query output. Will
51
+ # emit warnings if it encounters an initial line that does not match
52
+ # DPKG_QUERY_FORMAT_STRING. Swallows extra description lines silently.
53
+ #
54
+ # @param pipe [IO] the pipe yielded while processing dpkg output
55
+ # @return [Hash,nil] parsed dpkg-query entry as a hash of FIELDS strings or
56
+ # nil if we failed to parse
57
+ # @api private
58
+ def self.parse_multi_line(pipe)
59
+
60
+ line = pipe.gets
61
+ unless hash = parse_line(line)
62
+ Puppet.warning "Failed to match dpkg-query line #{line.inspect}"
63
+ return nil
64
+ end
65
+
66
+ consume_excess_description(pipe)
67
+
68
+ return hash
69
+ end
39
70
 
71
+ # @param line [String] one line of dpkg-query output
72
+ # @return [Hash,nil] a hash of FIELDS or nil if we failed to match
73
+ # @api private
40
74
  def self.parse_line(line)
41
- if match = self::REGEX.match(line)
75
+ hash = nil
76
+
77
+ if match = self::FIELDS_REGEX.match(line)
42
78
  hash = {}
43
79
 
44
- self::FIELDS.zip(match.captures) { |field,value|
80
+ self::FIELDS.zip(match.captures) do |field,value|
45
81
  hash[field] = value
46
- }
82
+ end
47
83
 
48
84
  hash[:provider] = self.name
49
85
 
@@ -53,14 +89,33 @@ Puppet::Type.type(:package).provide :dpkg, :parent => Puppet::Provider::Package
53
89
  hash[:ensure] = :absent
54
90
  end
55
91
  hash[:ensure] = :held if hash[:desired] == 'hold'
56
- else
57
- Puppet.warning "Failed to match dpkg-query line #{line.inspect}"
58
- return nil
59
92
  end
60
93
 
61
- hash
94
+ return hash
62
95
  end
63
96
 
97
+ # Silently consumes the extra description lines from dpkg-query and brings
98
+ # us to the next package entry start.
99
+ #
100
+ # @note dpkg-query Description field has a one line summary and a multi-line
101
+ # description. dpkg-query binary:Summary is what we want to use but was
102
+ # introduced in 2012 dpkg 1.16.2
103
+ # (https://launchpad.net/debian/+source/dpkg/1.16.2) and is not not available
104
+ # in older Debian versions. So we're placing a delimiter marker at the end
105
+ # of the description so we can consume and ignore the multiline description
106
+ # without issuing warnings
107
+ #
108
+ # @param pipe [IO] the pipe yielded while processing dpkg output
109
+ # @return nil
110
+ def self.consume_excess_description(pipe)
111
+ until pipe.eof?
112
+ break if self::END_REGEX.match(pipe.gets)
113
+ end
114
+ return nil
115
+ end
116
+
117
+ public
118
+
64
119
  def install
65
120
  unless file = @resource[:source]
66
121
  raise ArgumentError, "You cannot install dpkg packages without a source"
@@ -94,26 +149,24 @@ Puppet::Type.type(:package).provide :dpkg, :parent => Puppet::Provider::Package
94
149
  end
95
150
 
96
151
  def query
97
- packages = []
98
-
99
- fields = [:desired, :error, :status, :name, :ensure]
100
-
101
- hash = {}
152
+ hash = nil
102
153
 
103
154
  # list out our specific package
104
155
  begin
105
- output = dpkgquery(
156
+ self.class.dpkgquery_piped(
106
157
  "-W",
107
158
  "--showformat",
108
- '${Status} ${Package} ${Version}\\n',
159
+ self.class::DPKG_QUERY_FORMAT_STRING,
109
160
  @resource[:name]
110
- )
161
+ ) do |pipe|
162
+ hash = self.class.parse_multi_line(pipe)
163
+ end
111
164
  rescue Puppet::ExecutionFailure
112
165
  # dpkg-query exits 1 if the package is not found.
113
166
  return {:ensure => :purged, :status => 'missing', :name => @resource[:name], :error => 'ok'}
114
167
  end
115
168
 
116
- hash = self.class.parse_line(output) || {:ensure => :absent, :status => 'missing', :name => @resource[:name], :error => 'ok'}
169
+ hash ||= {:ensure => :absent, :status => 'missing', :name => @resource[:name], :error => 'ok'}
117
170
 
118
171
  if hash[:error] != "ok"
119
172
  raise Puppet::Error.new(
@@ -148,4 +201,5 @@ Puppet::Type.type(:package).provide :dpkg, :parent => Puppet::Provider::Package
148
201
  execute([:dpkg, "--set-selections"], :failonfail => false, :combine => false, :stdinfile => tmpfile.path.to_s)
149
202
  end
150
203
  end
204
+
151
205
  end