puppet 3.3.2 → 3.4.0.rc1

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 (589) hide show
  1. data/CONTRIBUTING.md +22 -0
  2. data/Gemfile +11 -2
  3. data/README.md +13 -17
  4. data/README_DEVELOPER.md +1 -1
  5. data/Rakefile +1 -1
  6. data/examples/hiera/README.md +4 -4
  7. data/ext/debian/puppetmaster.init +1 -0
  8. data/ext/debian/rules +2 -5
  9. data/ext/nagios/check_puppet.rb +7 -7
  10. data/ext/osx/file_mapping.yaml +1 -1
  11. data/ext/osx/preflight.erb +34 -19
  12. data/ext/rack/{files/config.ru → config.ru} +0 -0
  13. data/ext/rack/{files/apache2.conf → example-passenger-vhost.conf} +6 -0
  14. data/ext/redhat/puppet.spec.erb +20 -2
  15. data/ext/systemd/{puppetagent.service → puppet.service} +0 -0
  16. data/lib/hiera_puppet.rb +2 -2
  17. data/lib/puppet/agent.rb +1 -6
  18. data/lib/puppet/application.rb +15 -2
  19. data/lib/puppet/application/agent.rb +2 -7
  20. data/lib/puppet/application/apply.rb +8 -13
  21. data/lib/puppet/application/cert.rb +47 -7
  22. data/lib/puppet/application/device.rb +1 -6
  23. data/lib/puppet/application/face_base.rb +1 -1
  24. data/lib/puppet/application/filebucket.rb +1 -1
  25. data/lib/puppet/application/inspect.rb +3 -12
  26. data/lib/puppet/application/master.rb +1 -6
  27. data/lib/puppet/application/queue.rb +1 -6
  28. data/lib/puppet/application/resource.rb +2 -6
  29. data/lib/puppet/coercion.rb +11 -0
  30. data/lib/puppet/configurer.rb +5 -3
  31. data/lib/puppet/configurer/downloader.rb +3 -1
  32. data/lib/puppet/configurer/plugin_handler.rb +10 -0
  33. data/lib/puppet/confine.rb +80 -0
  34. data/lib/puppet/{provider/confine → confine}/exists.rb +3 -3
  35. data/lib/puppet/{provider/confine → confine}/false.rb +2 -2
  36. data/lib/puppet/{provider/confine → confine}/feature.rb +2 -2
  37. data/lib/puppet/{provider/confine → confine}/true.rb +2 -2
  38. data/lib/puppet/{provider/confine → confine}/variable.rb +2 -2
  39. data/lib/puppet/{provider/confine_collection.rb → confine_collection.rb} +4 -4
  40. data/lib/puppet/{provider/confiner.rb → confiner.rb} +4 -4
  41. data/lib/puppet/daemon.rb +2 -6
  42. data/lib/puppet/data_binding.rb +2 -30
  43. data/lib/puppet/defaults.rb +283 -174
  44. data/lib/puppet/error.rb +1 -0
  45. data/lib/puppet/external/nagios.rb +0 -2
  46. data/lib/puppet/external/nagios/base.rb +4 -3
  47. data/lib/puppet/external/nagios/grammar.ry +173 -112
  48. data/lib/puppet/external/nagios/parser.rb +233 -184
  49. data/lib/puppet/face/file/store.rb +1 -1
  50. data/lib/puppet/face/module/generate.rb +5 -7
  51. data/lib/puppet/face/parser.rb +12 -2
  52. data/lib/puppet/face/plugin.rb +6 -0
  53. data/lib/puppet/feature/base.rb +16 -0
  54. data/lib/puppet/feature/external_facts.rb +5 -0
  55. data/lib/puppet/feature/libuser.rb +1 -1
  56. data/lib/puppet/feature/msgpack.rb +1 -0
  57. data/lib/puppet/feature/rails.rb +2 -2
  58. data/lib/puppet/file_bucket/dipper.rb +8 -6
  59. data/lib/puppet/file_bucket/file.rb +17 -1
  60. data/lib/puppet/file_serving/base.rb +21 -10
  61. data/lib/puppet/file_serving/configuration.rb +5 -7
  62. data/lib/puppet/file_serving/configuration/parser.rb +1 -1
  63. data/lib/puppet/file_serving/content.rb +1 -1
  64. data/lib/puppet/file_serving/fileset.rb +3 -3
  65. data/lib/puppet/file_serving/metadata.rb +22 -18
  66. data/lib/puppet/file_serving/mount/file.rb +1 -1
  67. data/lib/puppet/file_serving/mount/pluginfacts.rb +35 -0
  68. data/lib/puppet/file_system.rb +3 -0
  69. data/lib/puppet/file_system/file.rb +261 -0
  70. data/lib/puppet/file_system/file18.rb +5 -0
  71. data/lib/puppet/file_system/file19.rb +5 -0
  72. data/lib/puppet/file_system/file19windows.rb +113 -0
  73. data/lib/puppet/file_system/memory_file.rb +31 -0
  74. data/lib/puppet/file_system/tempfile.rb +20 -0
  75. data/lib/puppet/indirector/active_record.rb +1 -0
  76. data/lib/puppet/indirector/catalog/compiler.rb +28 -0
  77. data/lib/puppet/indirector/certificate_request/memory.rb +6 -0
  78. data/lib/puppet/indirector/data_binding/hiera.rb +46 -2
  79. data/lib/puppet/indirector/direct_file_server.rb +2 -2
  80. data/lib/puppet/indirector/facts/facter.rb +25 -0
  81. data/lib/puppet/indirector/file_bucket_file/file.rb +60 -74
  82. data/lib/puppet/indirector/indirection.rb +5 -1
  83. data/lib/puppet/indirector/json.rb +1 -1
  84. data/lib/puppet/indirector/key/ca.rb +4 -0
  85. data/lib/puppet/indirector/key/file.rb +7 -3
  86. data/lib/puppet/indirector/key/memory.rb +6 -0
  87. data/lib/puppet/indirector/node/write_only_yaml.rb +2 -2
  88. data/lib/puppet/indirector/request.rb +17 -11
  89. data/lib/puppet/indirector/resource/ral.rb +5 -0
  90. data/lib/puppet/indirector/resource/rest.rb +1 -0
  91. data/lib/puppet/indirector/resource/store_configs.rb +4 -0
  92. data/lib/puppet/indirector/rest.rb +2 -1
  93. data/lib/puppet/indirector/ssl_file.rb +7 -7
  94. data/lib/puppet/indirector/terminus.rb +4 -0
  95. data/lib/puppet/indirector/yaml.rb +3 -3
  96. data/lib/puppet/interface/documentation.rb +4 -11
  97. data/lib/puppet/module.rb +19 -6
  98. data/lib/puppet/module_tool/applications/builder.rb +1 -1
  99. data/lib/puppet/module_tool/applications/installer.rb +1 -1
  100. data/lib/puppet/module_tool/checksums.rb +1 -1
  101. data/lib/puppet/module_tool/dependency.rb +7 -3
  102. data/lib/puppet/module_tool/metadata.rb +6 -2
  103. data/lib/puppet/module_tool/tar.rb +2 -1
  104. data/lib/puppet/module_tool/tar/gnu.rb +6 -2
  105. data/lib/puppet/module_tool/tar/mini.rb +2 -0
  106. data/lib/puppet/module_tool/tar/solaris.rb +2 -5
  107. data/lib/puppet/network/authconfig.rb +0 -2
  108. data/lib/puppet/network/authentication.rb +1 -1
  109. data/lib/puppet/network/authstore.rb +6 -7
  110. data/lib/puppet/network/format.rb +2 -3
  111. data/lib/puppet/network/format_handler.rb +16 -11
  112. data/lib/puppet/network/format_support.rb +14 -0
  113. data/lib/puppet/network/formats.rb +26 -0
  114. data/lib/puppet/network/http/connection.rb +8 -41
  115. data/lib/puppet/network/http/handler.rb +28 -32
  116. data/lib/puppet/network/http/webrick.rb +15 -22
  117. data/lib/puppet/network/http_pool.rb +43 -9
  118. data/lib/puppet/network/rights.rb +0 -0
  119. data/lib/puppet/node.rb +24 -8
  120. data/lib/puppet/node/environment.rb +18 -20
  121. data/lib/puppet/node/facts.rb +23 -6
  122. data/lib/puppet/parameter.rb +15 -2
  123. data/lib/puppet/parameter/boolean.rb +5 -0
  124. data/lib/puppet/parameter/value_collection.rb +6 -4
  125. data/lib/puppet/parser/ast/resourceparam.rb +2 -1
  126. data/lib/puppet/parser/compiler.rb +25 -9
  127. data/lib/puppet/parser/files.rb +1 -1
  128. data/lib/puppet/parser/functions.rb +12 -21
  129. data/lib/puppet/parser/functions/collect.rb +6 -35
  130. data/lib/puppet/parser/functions/contain.rb +26 -0
  131. data/lib/puppet/parser/functions/create_resources.rb +5 -0
  132. data/lib/puppet/parser/functions/extlookup.rb +2 -2
  133. data/lib/puppet/parser/functions/file.rb +1 -1
  134. data/lib/puppet/parser/functions/{reject.rb → filter.rb} +13 -12
  135. data/lib/puppet/parser/functions/fqdn_rand.rb +13 -5
  136. data/lib/puppet/parser/functions/include.rb +18 -1
  137. data/lib/puppet/parser/functions/map.rb +44 -0
  138. data/lib/puppet/parser/functions/select.rb +6 -38
  139. data/lib/puppet/parser/lexer.rb +1 -1
  140. data/lib/puppet/parser/parser_support.rb +1 -1
  141. data/lib/puppet/parser/resource.rb +6 -45
  142. data/lib/puppet/parser/scope.rb +33 -2
  143. data/lib/puppet/parser/type_loader.rb +4 -60
  144. data/lib/puppet/pops/binder/bindings_loader.rb +1 -1
  145. data/lib/puppet/pops/binder/config/binder_config.rb +3 -3
  146. data/lib/puppet/pops/binder/hiera2/bindings_provider.rb +1 -1
  147. data/lib/puppet/pops/binder/scheme_handler/confdir_hiera_scheme.rb +1 -1
  148. data/lib/puppet/pops/binder/scheme_handler/module_hiera_scheme.rb +2 -2
  149. data/lib/puppet/pops/issues.rb +4 -0
  150. data/lib/puppet/pops/model/ast_transformer.rb +4 -1
  151. data/lib/puppet/pops/model/model_label_provider.rb +1 -1
  152. data/lib/puppet/pops/parser/egrammar.ra +5 -24
  153. data/lib/puppet/pops/parser/eparser.rb +859 -902
  154. data/lib/puppet/pops/parser/lexer.rb +48 -30
  155. data/lib/puppet/pops/parser/parser_support.rb +1 -1
  156. data/lib/puppet/pops/patterns.rb +4 -4
  157. data/lib/puppet/pops/utils.rb +1 -1
  158. data/lib/puppet/pops/validation/checker3_1.rb +25 -20
  159. data/lib/puppet/provider.rb +23 -6
  160. data/lib/puppet/provider/aixobject.rb +0 -0
  161. data/lib/puppet/provider/augeas/augeas.rb +21 -5
  162. data/lib/puppet/provider/confine.rb +5 -79
  163. data/lib/puppet/provider/cron/crontab.rb +0 -0
  164. data/lib/puppet/provider/exec.rb +9 -7
  165. data/lib/puppet/provider/exec/posix.rb +10 -1
  166. data/lib/puppet/provider/exec/windows.rb +1 -1
  167. data/lib/puppet/provider/file/posix.rb +1 -0
  168. data/lib/puppet/provider/file/windows.rb +16 -5
  169. data/lib/puppet/provider/group/aix.rb +0 -0
  170. data/lib/puppet/provider/group/windows_adsi.rb +33 -1
  171. data/lib/puppet/provider/macauthorization/macauthorization.rb +1 -1
  172. data/lib/puppet/provider/mailalias/aliases.rb +0 -0
  173. data/lib/puppet/provider/maillist/mailman.rb +0 -0
  174. data/lib/puppet/provider/mount/parsed.rb +0 -0
  175. data/lib/puppet/provider/nameservice/directoryservice.rb +3 -3
  176. data/lib/puppet/provider/package/appdmg.rb +1 -1
  177. data/lib/puppet/provider/package/apple.rb +1 -1
  178. data/lib/puppet/provider/package/apt.rb +1 -1
  179. data/lib/puppet/provider/package/aptitude.rb +0 -0
  180. data/lib/puppet/provider/package/blastwave.rb +1 -1
  181. data/lib/puppet/provider/package/dpkg.rb +1 -1
  182. data/lib/puppet/provider/package/fink.rb +1 -1
  183. data/lib/puppet/provider/package/freebsd.rb +0 -0
  184. data/lib/puppet/provider/package/gem.rb +0 -0
  185. data/lib/puppet/provider/package/macports.rb +0 -0
  186. data/lib/puppet/provider/package/msi.rb +4 -10
  187. data/lib/puppet/provider/package/nim.rb +8 -8
  188. data/lib/puppet/provider/package/openbsd.rb +1 -1
  189. data/lib/puppet/provider/package/opkg.rb +0 -0
  190. data/lib/puppet/provider/package/pacman.rb +2 -2
  191. data/lib/puppet/provider/package/pkgdmg.rb +1 -1
  192. data/lib/puppet/provider/package/pkgutil.rb +1 -1
  193. data/lib/puppet/provider/package/ports.rb +0 -0
  194. data/lib/puppet/provider/package/rpm.rb +39 -3
  195. data/lib/puppet/provider/package/sun.rb +3 -3
  196. data/lib/puppet/provider/package/sunfreeware.rb +0 -0
  197. data/lib/puppet/provider/package/windows.rb +12 -19
  198. data/lib/puppet/provider/package/windows/package.rb +1 -1
  199. data/lib/puppet/provider/package/yum.rb +2 -2
  200. data/lib/puppet/provider/parsedfile.rb +0 -0
  201. data/lib/puppet/provider/port/parsed.rb +0 -0
  202. data/lib/puppet/provider/service/base.rb +0 -0
  203. data/lib/puppet/provider/service/bsd.rb +3 -3
  204. data/lib/puppet/provider/service/daemontools.rb +8 -8
  205. data/lib/puppet/provider/service/debian.rb +0 -0
  206. data/lib/puppet/provider/service/freebsd.rb +3 -3
  207. data/lib/puppet/provider/service/init.rb +5 -4
  208. data/lib/puppet/provider/service/launchd.rb +35 -24
  209. data/lib/puppet/provider/service/openbsd.rb +23 -0
  210. data/lib/puppet/provider/service/redhat.rb +0 -0
  211. data/lib/puppet/provider/service/runit.rb +3 -3
  212. data/lib/puppet/provider/service/smf.rb +0 -0
  213. data/lib/puppet/provider/service/src.rb +0 -0
  214. data/lib/puppet/provider/service/systemd.rb +0 -0
  215. data/lib/puppet/provider/service/upstart.rb +3 -3
  216. data/lib/puppet/provider/ssh_authorized_key/parsed.rb +2 -2
  217. data/lib/puppet/provider/sshkey/parsed.rb +0 -0
  218. data/lib/puppet/provider/user/aix.rb +0 -0
  219. data/lib/puppet/provider/user/directoryservice.rb +1 -1
  220. data/lib/puppet/provider/user/useradd.rb +1 -1
  221. data/lib/puppet/provider/zone/solaris.rb +1 -1
  222. data/lib/puppet/rails/benchmark.rb +1 -1
  223. data/lib/puppet/reference/configuration.rb +1 -2
  224. data/lib/puppet/reference/indirection.rb +12 -14
  225. data/lib/puppet/relationship.rb +7 -4
  226. data/lib/puppet/reports.rb +2 -2
  227. data/lib/puppet/reports/rrdgraph.rb +1 -1
  228. data/lib/puppet/reports/store.rb +3 -3
  229. data/lib/puppet/reports/tagmail.rb +2 -2
  230. data/lib/puppet/resource.rb +66 -8
  231. data/lib/puppet/resource/catalog.rb +18 -25
  232. data/lib/puppet/resource/status.rb +10 -4
  233. data/lib/puppet/run.rb +6 -2
  234. data/lib/puppet/settings.rb +39 -119
  235. data/lib/puppet/settings/base_setting.rb +8 -9
  236. data/lib/puppet/settings/directory_setting.rb +8 -0
  237. data/lib/puppet/settings/file_setting.rb +35 -1
  238. data/lib/puppet/settings/priority_setting.rb +42 -0
  239. data/lib/puppet/ssl.rb +4 -0
  240. data/lib/puppet/ssl/certificate.rb +18 -0
  241. data/lib/puppet/ssl/certificate_authority.rb +101 -72
  242. data/lib/puppet/ssl/certificate_authority/autosign_command.rb +44 -0
  243. data/lib/puppet/ssl/certificate_authority/interface.rb +21 -17
  244. data/lib/puppet/ssl/certificate_factory.rb +38 -12
  245. data/lib/puppet/ssl/certificate_request.rb +201 -47
  246. data/lib/puppet/ssl/certificate_request_attributes.rb +34 -0
  247. data/lib/puppet/ssl/certificate_revocation_list.rb +2 -2
  248. data/lib/puppet/ssl/host.rb +21 -10
  249. data/lib/puppet/ssl/inventory.rb +6 -10
  250. data/lib/puppet/ssl/key.rb +1 -1
  251. data/lib/puppet/ssl/oids.rb +78 -0
  252. data/lib/puppet/ssl/validator.rb +41 -97
  253. data/lib/puppet/ssl/validator/default_validator.rb +153 -0
  254. data/lib/puppet/ssl/validator/no_validator.rb +17 -0
  255. data/lib/puppet/status.rb +4 -0
  256. data/lib/puppet/test/test_helper.rb +5 -0
  257. data/lib/puppet/transaction.rb +13 -0
  258. data/lib/puppet/transaction/event.rb +8 -3
  259. data/lib/puppet/transaction/report.rb +6 -2
  260. data/lib/puppet/transaction/resource_harness.rb +173 -115
  261. data/lib/puppet/type.rb +30 -13
  262. data/lib/puppet/type/augeas.rb +12 -46
  263. data/lib/puppet/type/component.rb +1 -7
  264. data/lib/puppet/type/cron.rb +0 -0
  265. data/lib/puppet/type/exec.rb +13 -1
  266. data/lib/puppet/type/file.rb +19 -10
  267. data/lib/puppet/type/file/checksum.rb +0 -0
  268. data/lib/puppet/type/file/content.rb +3 -0
  269. data/lib/puppet/type/file/ensure.rb +33 -15
  270. data/lib/puppet/type/file/group.rb +0 -0
  271. data/lib/puppet/type/file/mode.rb +6 -2
  272. data/lib/puppet/type/file/owner.rb +0 -0
  273. data/lib/puppet/type/file/source.rb +65 -14
  274. data/lib/puppet/type/file/target.rb +6 -6
  275. data/lib/puppet/type/file/type.rb +0 -0
  276. data/lib/puppet/type/filebucket.rb +0 -0
  277. data/lib/puppet/type/group.rb +18 -0
  278. data/lib/puppet/type/host.rb +0 -0
  279. data/lib/puppet/type/k5login.rb +4 -4
  280. data/lib/puppet/type/mailalias.rb +0 -0
  281. data/lib/puppet/type/maillist.rb +0 -0
  282. data/lib/puppet/type/mount.rb +15 -1
  283. data/lib/puppet/type/package.rb +7 -1
  284. data/lib/puppet/type/port.rb +0 -0
  285. data/lib/puppet/type/schedule.rb +9 -4
  286. data/lib/puppet/type/service.rb +1 -1
  287. data/lib/puppet/type/sshkey.rb +0 -0
  288. data/lib/puppet/type/tidy.rb +1 -1
  289. data/lib/puppet/type/user.rb +3 -0
  290. data/lib/puppet/type/yumrepo.rb +8 -6
  291. data/lib/puppet/type/zpool.rb +0 -0
  292. data/lib/puppet/util.rb +4 -31
  293. data/lib/puppet/util/adsi.rb +73 -17
  294. data/lib/puppet/util/autoload.rb +3 -3
  295. data/lib/puppet/util/backups.rb +4 -4
  296. data/lib/puppet/util/cacher.rb +7 -13
  297. data/lib/puppet/util/checksums.rb +2 -2
  298. data/lib/puppet/util/classgen.rb +3 -1
  299. data/lib/puppet/util/colors.rb +1 -0
  300. data/lib/puppet/util/command_line.rb +5 -0
  301. data/lib/puppet/util/docs.rb +33 -27
  302. data/lib/puppet/util/execution.rb +42 -18
  303. data/lib/puppet/util/filetype.rb +3 -3
  304. data/lib/puppet/util/instance_loader.rb +2 -2
  305. data/lib/puppet/util/instrumentation.rb +23 -42
  306. data/lib/puppet/util/instrumentation/data.rb +11 -4
  307. data/lib/puppet/util/instrumentation/indirection_probe.rb +11 -4
  308. data/lib/puppet/util/instrumentation/instrumentable.rb +7 -14
  309. data/lib/puppet/util/instrumentation/listener.rb +15 -8
  310. data/lib/puppet/util/instrumentation/listeners/log.rb +4 -10
  311. data/lib/puppet/util/instrumentation/listeners/performance.rb +8 -14
  312. data/lib/puppet/util/limits.rb +12 -0
  313. data/lib/puppet/util/lockfile.rb +2 -2
  314. data/lib/puppet/util/log.rb +14 -6
  315. data/lib/puppet/util/log/destinations.rb +23 -1
  316. data/lib/puppet/util/metric.rb +9 -3
  317. data/lib/puppet/util/monkey_patches.rb +7 -2
  318. data/lib/puppet/util/network_device/config.rb +1 -1
  319. data/lib/puppet/util/plugins.rb +1 -1
  320. data/lib/puppet/util/posix.rb +0 -0
  321. data/lib/puppet/util/profiler.rb +7 -2
  322. data/lib/puppet/util/provider_features.rb +2 -2
  323. data/lib/puppet/util/rdoc.rb +28 -30
  324. data/lib/puppet/util/rdoc/code_objects.rb +75 -25
  325. data/lib/puppet/util/rdoc/generators/puppet_generator.rb +1 -1
  326. data/lib/puppet/util/rdoc/parser.rb +12 -487
  327. data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +477 -0
  328. data/lib/puppet/util/rdoc/parser/puppet_parser_rdoc1.rb +19 -0
  329. data/lib/puppet/util/rdoc/parser/puppet_parser_rdoc2.rb +14 -0
  330. data/lib/puppet/util/reference.rb +1 -1
  331. data/lib/puppet/util/resource_template.rb +1 -1
  332. data/lib/puppet/util/selinux.rb +1 -1
  333. data/lib/puppet/util/storage.rb +2 -2
  334. data/lib/puppet/util/suidmanager.rb +1 -1
  335. data/lib/puppet/util/tag_set.rb +29 -0
  336. data/lib/puppet/util/tagging.rb +8 -24
  337. data/lib/puppet/util/watched_file.rb +1 -1
  338. data/lib/puppet/util/watcher.rb +1 -1
  339. data/lib/puppet/util/windows.rb +3 -0
  340. data/lib/puppet/util/windows/access_control_entry.rb +84 -0
  341. data/lib/puppet/util/windows/access_control_list.rb +106 -0
  342. data/lib/puppet/util/windows/file.rb +213 -0
  343. data/lib/puppet/util/windows/process.rb +199 -0
  344. data/lib/puppet/util/windows/root_certs.rb +52 -37
  345. data/lib/puppet/util/windows/security.rb +270 -245
  346. data/lib/puppet/util/windows/security_descriptor.rb +62 -0
  347. data/lib/puppet/util/windows/sid.rb +26 -4
  348. data/lib/puppet/version.rb +2 -2
  349. data/spec/fixtures/releases/jamtur01-apache/lib/puppet/provider/a2mod/debian.rb +1 -1
  350. data/spec/fixtures/unit/indirector/{hiera → data_binding/hiera}/global.yaml +0 -0
  351. data/spec/fixtures/unit/indirector/data_binding/hiera/invalid.yaml +1 -0
  352. data/spec/fixtures/unit/module/trailing-comma.json +24 -0
  353. data/spec/fixtures/unit/util/monkey_patches/x509.pem +32 -0
  354. data/spec/integration/application/apply_spec.rb +1 -1
  355. data/spec/integration/application/doc_spec.rb +1 -1
  356. data/spec/integration/configurer_spec.rb +4 -2
  357. data/spec/integration/data_binding.rb +100 -0
  358. data/spec/integration/indirector/catalog/compiler_spec.rb +16 -13
  359. data/spec/integration/indirector/direct_file_server_spec.rb +3 -5
  360. data/spec/integration/indirector/file_content/file_server_spec.rb +2 -2
  361. data/spec/integration/node/facts_spec.rb +1 -1
  362. data/spec/integration/node_spec.rb +1 -1
  363. data/spec/integration/parser/compiler_spec.rb +90 -0
  364. data/spec/integration/parser/parser_spec.rb +2 -2
  365. data/spec/integration/provider/cron/crontab_spec.rb +3 -5
  366. data/spec/integration/resource/catalog_spec.rb +1 -1
  367. data/spec/integration/ssl/autosign_spec.rb +90 -0
  368. data/spec/integration/ssl/certificate_authority_spec.rb +62 -69
  369. data/spec/integration/ssl/certificate_revocation_list_spec.rb +1 -1
  370. data/spec/integration/ssl/host_spec.rb +1 -1
  371. data/spec/integration/transaction_spec.rb +13 -13
  372. data/spec/integration/type/exec_spec.rb +2 -2
  373. data/spec/integration/type/file_spec.rb +287 -45
  374. data/spec/integration/type/tidy_spec.rb +3 -3
  375. data/spec/integration/util/rdoc/parser_spec.rb +236 -35
  376. data/spec/integration/util/settings_spec.rb +1 -1
  377. data/spec/integration/util/windows/process_spec.rb +22 -0
  378. data/spec/integration/util/windows/security_spec.rb +316 -106
  379. data/spec/lib/matchers/containment_matchers.rb +52 -0
  380. data/spec/lib/puppet_spec/compiler.rb +6 -0
  381. data/spec/lib/puppet_spec/files.rb +20 -21
  382. data/spec/shared_behaviours/documentation_on_faces.rb +3 -3
  383. data/spec/shared_behaviours/file_server_terminus.rb +2 -2
  384. data/spec/shared_contexts/platform.rb +1 -0
  385. data/spec/spec_helper.rb +13 -1
  386. data/spec/unit/agent_spec.rb +0 -12
  387. data/spec/unit/application/agent_spec.rb +4 -4
  388. data/spec/unit/application/apply_spec.rb +18 -2
  389. data/spec/unit/application/cert_spec.rb +8 -6
  390. data/spec/unit/application/device_spec.rb +1 -1
  391. data/spec/unit/application/filebucket_spec.rb +1 -1
  392. data/spec/unit/application/inspect_spec.rb +1 -1
  393. data/spec/unit/application_spec.rb +24 -0
  394. data/spec/unit/configurer/downloader_spec.rb +8 -7
  395. data/spec/unit/configurer/fact_handler_spec.rb +23 -0
  396. data/spec/unit/configurer/plugin_handler_spec.rb +7 -2
  397. data/spec/unit/configurer_spec.rb +15 -5
  398. data/spec/unit/{provider/confine → confine}/exists_spec.rb +12 -12
  399. data/spec/unit/{provider/confine → confine}/false_spec.rb +9 -9
  400. data/spec/unit/{provider/confine → confine}/feature_spec.rb +10 -10
  401. data/spec/unit/{provider/confine → confine}/true_spec.rb +7 -7
  402. data/spec/unit/{provider/confine → confine}/variable_spec.rb +16 -16
  403. data/spec/unit/{provider/confine_collection_spec.rb → confine_collection_spec.rb} +30 -30
  404. data/spec/unit/{provider/confine_spec.rb → confine_spec.rb} +11 -11
  405. data/spec/unit/{provider/confiner_spec.rb → confiner_spec.rb} +4 -4
  406. data/spec/unit/face/parser_spec.rb +54 -0
  407. data/spec/unit/file_bucket/dipper_spec.rb +2 -2
  408. data/spec/unit/file_serving/base_spec.rb +32 -9
  409. data/spec/unit/file_serving/configuration_spec.rb +7 -7
  410. data/spec/unit/file_serving/content_spec.rb +12 -7
  411. data/spec/unit/file_serving/fileset_spec.rb +57 -27
  412. data/spec/unit/file_serving/metadata_spec.rb +74 -12
  413. data/spec/unit/file_serving/mount/file_spec.rb +10 -10
  414. data/spec/unit/file_serving/mount/pluginfacts_spec.rb +73 -0
  415. data/spec/unit/file_system/file_spec.rb +486 -0
  416. data/spec/unit/file_system/tempfile_spec.rb +48 -0
  417. data/spec/unit/graph/relationship_graph_spec.rb +0 -6
  418. data/spec/unit/hiera_puppet_spec.rb +2 -2
  419. data/spec/unit/indirector/catalog/compiler_spec.rb +15 -19
  420. data/spec/unit/indirector/certificate_status/file_spec.rb +30 -40
  421. data/spec/unit/indirector/data_binding/hiera_spec.rb +95 -2
  422. data/spec/unit/indirector/direct_file_server_spec.rb +6 -6
  423. data/spec/unit/indirector/facts/facter_spec.rb +33 -0
  424. data/spec/unit/indirector/file_bucket_file/file_spec.rb +61 -52
  425. data/spec/unit/indirector/file_metadata/file_spec.rb +2 -2
  426. data/spec/unit/indirector/file_server_spec.rb +4 -4
  427. data/spec/unit/indirector/json_spec.rb +4 -4
  428. data/spec/unit/indirector/key/file_spec.rb +13 -14
  429. data/spec/unit/indirector/resource/ral_spec.rb +7 -0
  430. data/spec/unit/indirector/resource/store_configs_spec.rb +11 -0
  431. data/spec/unit/indirector/rest_spec.rb +7 -3
  432. data/spec/unit/indirector/ssl_file_spec.rb +14 -17
  433. data/spec/unit/indirector/yaml_spec.rb +4 -4
  434. data/spec/unit/module_spec.rb +43 -15
  435. data/spec/unit/module_tool/tar/gnu_spec.rb +2 -2
  436. data/spec/unit/module_tool/tar/solaris_spec.rb +2 -2
  437. data/spec/unit/module_tool/tar_spec.rb +45 -0
  438. data/spec/unit/network/authconfig_spec.rb +2 -1
  439. data/spec/unit/network/authentication_spec.rb +2 -2
  440. data/spec/unit/network/format_handler_spec.rb +2 -2
  441. data/spec/unit/network/formats_spec.rb +24 -0
  442. data/spec/unit/network/http/connection_spec.rb +76 -199
  443. data/spec/unit/network/http/handler_spec.rb +33 -34
  444. data/spec/unit/network/http_pool_spec.rb +8 -5
  445. data/spec/unit/node/environment_spec.rb +76 -90
  446. data/spec/unit/node/facts_spec.rb +20 -3
  447. data/spec/unit/node_spec.rb +43 -0
  448. data/spec/unit/parameter/boolean_spec.rb +22 -12
  449. data/spec/unit/parser/ast/resourceparam_spec.rb +51 -0
  450. data/spec/unit/parser/compiler_spec.rb +103 -35
  451. data/spec/unit/parser/eparser_adapter_spec.rb +12 -12
  452. data/spec/unit/parser/files_spec.rb +11 -11
  453. data/spec/unit/parser/functions/contain_spec.rb +185 -0
  454. data/spec/unit/parser/functions/create_resources_spec.rb +13 -5
  455. data/spec/unit/parser/functions/generate_spec.rb +1 -1
  456. data/spec/unit/parser/functions_spec.rb +2 -2
  457. data/spec/unit/parser/lexer_spec.rb +1 -1
  458. data/spec/unit/parser/methods/each_spec.rb +1 -1
  459. data/spec/unit/parser/methods/{select_spec.rb → filter_spec.rb} +11 -11
  460. data/spec/unit/parser/methods/map_spec.rb +95 -0
  461. data/spec/unit/parser/methods/reduce_spec.rb +12 -11
  462. data/spec/unit/parser/methods/shared.rb +5 -5
  463. data/spec/unit/parser/methods/slice_spec.rb +13 -13
  464. data/spec/unit/parser/parser_spec.rb +1 -1
  465. data/spec/unit/parser/resource/param_spec.rb +44 -0
  466. data/spec/unit/parser/resource_spec.rb +16 -15
  467. data/spec/unit/pops/model/ast_transformer_spec.rb +18 -4
  468. data/spec/unit/pops/parser/lexer_spec.rb +22 -5
  469. data/spec/unit/pops/parser/parse_calls_spec.rb +5 -5
  470. data/spec/unit/pops/transformer/transform_calls_spec.rb +6 -6
  471. data/spec/unit/pops/transformer/transform_containers_spec.rb +2 -2
  472. data/spec/unit/pops/validator/validator_spec.rb +31 -0
  473. data/spec/unit/provider/augeas/augeas_spec.rb +57 -2
  474. data/spec/unit/provider/exec/posix_spec.rb +8 -3
  475. data/spec/unit/provider/file/posix_spec.rb +2 -2
  476. data/spec/unit/provider/group/windows_adsi_spec.rb +70 -3
  477. data/spec/unit/provider/nameservice/directoryservice_spec.rb +3 -3
  478. data/spec/unit/provider/package/apt_spec.rb +1 -1
  479. data/spec/unit/provider/package/msi_spec.rb +15 -42
  480. data/spec/unit/provider/package/openbsd_spec.rb +3 -3
  481. data/spec/unit/provider/package/rpm_spec.rb +56 -13
  482. data/spec/unit/provider/package/windows_spec.rb +15 -19
  483. data/spec/unit/provider/service/base_spec.rb +1 -1
  484. data/spec/unit/provider/service/daemontools_spec.rb +18 -8
  485. data/spec/unit/provider/service/freebsd_spec.rb +3 -3
  486. data/spec/unit/provider/service/gentoo_spec.rb +5 -2
  487. data/spec/unit/provider/service/init_spec.rb +17 -17
  488. data/spec/unit/provider/service/launchd_spec.rb +76 -23
  489. data/spec/unit/provider/service/openbsd_spec.rb +125 -0
  490. data/spec/unit/provider/service/openwrt_spec.rb +1 -1
  491. data/spec/unit/provider/service/runit_spec.rb +12 -5
  492. data/spec/unit/provider/service/upstart_spec.rb +4 -4
  493. data/spec/unit/provider/ssh_authorized_key/parsed_spec.rb +5 -5
  494. data/spec/unit/provider/user/directoryservice_spec.rb +4 -4
  495. data/spec/unit/provider/zone/solaris_spec.rb +1 -1
  496. data/spec/unit/provider_spec.rb +2 -2
  497. data/spec/unit/reports/http_spec.rb +19 -34
  498. data/spec/unit/reports/store_spec.rb +2 -2
  499. data/spec/unit/resource/catalog_spec.rb +81 -11
  500. data/spec/unit/resource/status_spec.rb +11 -1
  501. data/spec/unit/resource/type_spec.rb +30 -1
  502. data/spec/unit/resource_spec.rb +40 -4
  503. data/spec/unit/settings/file_setting_spec.rb +2 -2
  504. data/spec/unit/settings/path_setting_spec.rb +2 -2
  505. data/spec/unit/settings/priority_setting_spec.rb +66 -0
  506. data/spec/unit/settings_spec.rb +16 -31
  507. data/spec/unit/ssl/certificate_authority/autosign_command_spec.rb +30 -0
  508. data/spec/unit/ssl/certificate_authority_spec.rb +129 -134
  509. data/spec/unit/ssl/certificate_factory_spec.rb +18 -0
  510. data/spec/unit/ssl/certificate_request_attributes_spec.rb +61 -0
  511. data/spec/unit/ssl/certificate_request_spec.rb +103 -0
  512. data/spec/unit/ssl/certificate_spec.rb +31 -18
  513. data/spec/unit/ssl/host_spec.rb +34 -8
  514. data/spec/unit/ssl/inventory_spec.rb +27 -62
  515. data/spec/unit/ssl/key_spec.rb +4 -4
  516. data/spec/unit/ssl/oids_spec.rb +48 -0
  517. data/spec/unit/ssl/validator_spec.rb +49 -6
  518. data/spec/unit/status_spec.rb +9 -0
  519. data/spec/unit/transaction/event_spec.rb +1 -9
  520. data/spec/unit/transaction/report_spec.rb +20 -1
  521. data/spec/unit/transaction/resource_harness_spec.rb +60 -210
  522. data/spec/unit/transaction_spec.rb +54 -8
  523. data/spec/unit/type/component_spec.rb +2 -2
  524. data/spec/unit/type/exec_spec.rb +14 -7
  525. data/spec/unit/type/file/content_spec.rb +13 -2
  526. data/spec/unit/type/file/ctime_spec.rb +1 -1
  527. data/spec/unit/type/file/mode_spec.rb +48 -2
  528. data/spec/unit/type/file/mtime_spec.rb +1 -1
  529. data/spec/unit/type/file/source_spec.rb +177 -7
  530. data/spec/unit/type/file_spec.rb +63 -71
  531. data/spec/unit/type/group_spec.rb +20 -0
  532. data/spec/unit/type/k5login_spec.rb +3 -3
  533. data/spec/unit/type/mount_spec.rb +53 -0
  534. data/spec/unit/type/nagios_spec.rb +216 -0
  535. data/spec/unit/type/package_spec.rb +7 -1
  536. data/spec/unit/type/schedule_spec.rb +6 -0
  537. data/spec/unit/type/service_spec.rb +3 -3
  538. data/spec/unit/type/tidy_spec.rb +14 -14
  539. data/spec/unit/type/user_spec.rb +9 -0
  540. data/spec/unit/type_spec.rb +86 -4
  541. data/spec/unit/util/adsi_spec.rb +120 -12
  542. data/spec/unit/util/autoload_spec.rb +14 -14
  543. data/spec/unit/util/backups_spec.rb +29 -21
  544. data/spec/unit/util/checksums_spec.rb +2 -1
  545. data/spec/unit/util/command_line_spec.rb +41 -0
  546. data/spec/unit/util/docs_spec.rb +91 -0
  547. data/spec/unit/util/execution_spec.rb +26 -2
  548. data/spec/unit/util/filetype_spec.rb +7 -7
  549. data/spec/unit/util/lockfile_spec.rb +2 -2
  550. data/spec/unit/util/log/destinations_spec.rb +32 -0
  551. data/spec/unit/util/monkey_patches_spec.rb +41 -0
  552. data/spec/unit/util/pidlock_spec.rb +6 -6
  553. data/spec/unit/util/rdoc/parser_spec.rb +15 -13
  554. data/spec/unit/util/rdoc_spec.rb +18 -24
  555. data/spec/unit/util/resource_template_spec.rb +3 -3
  556. data/spec/unit/util/selinux_spec.rb +4 -2
  557. data/spec/unit/util/storage_spec.rb +4 -4
  558. data/spec/unit/util/suidmanager_spec.rb +7 -0
  559. data/spec/unit/util/tag_set_spec.rb +46 -0
  560. data/spec/unit/util/tagging_spec.rb +82 -45
  561. data/spec/unit/util/watcher_spec.rb +4 -1
  562. data/spec/unit/util/windows/access_control_entry_spec.rb +67 -0
  563. data/spec/unit/util/windows/access_control_list_spec.rb +133 -0
  564. data/spec/unit/util/windows/root_certs_spec.rb +10 -8
  565. data/spec/unit/util/windows/security_descriptor_spec.rb +117 -0
  566. data/spec/unit/util/windows/sid_spec.rb +69 -0
  567. data/spec/unit/util_spec.rb +7 -7
  568. data/tasks/ci.rake +17 -36
  569. metadata +2811 -2746
  570. checksums.yaml +0 -7
  571. data/examples/mac_automount.pp +0 -16
  572. data/examples/mcx_dock_absent.pp +0 -4
  573. data/examples/mcx_dock_default.pp +0 -118
  574. data/examples/mcx_dock_full.pp +0 -125
  575. data/examples/mcx_dock_invalid.pp +0 -9
  576. data/examples/mcx_nogroup.pp +0 -118
  577. data/examples/mcx_notexists_absent.pp +0 -4
  578. data/ext/rack/README +0 -58
  579. data/ext/rack/manifest.pp +0 -59
  580. data/lib/puppet/external/lock.rb +0 -63
  581. data/lib/puppet/indirector/hiera.rb +0 -39
  582. data/lib/puppet/parser/functions/foreach.rb +0 -95
  583. data/spec/integration/network/server/webrick_spec.rb +0 -76
  584. data/spec/integration/parser/functions_spec.rb +0 -16
  585. data/spec/unit/indirector/hiera_spec.rb +0 -154
  586. data/spec/unit/parser/methods/collect_spec.rb +0 -153
  587. data/spec/unit/parser/methods/foreach_spec.rb +0 -91
  588. data/spec/unit/parser/methods/reject_spec.rb +0 -73
  589. data/spec/unit/resource/resource_type.json +0 -34
@@ -148,8 +148,8 @@ class Puppet::Pops::Parser::Lexer
148
148
  TOKENS.add_tokens(
149
149
  '[' => :LBRACK,
150
150
  ']' => :RBRACK,
151
- # '{' => :LBRACE, # Specialized to handle lambda
152
- '}' => :RBRACE,
151
+ # '{' => :LBRACE, # Specialized to handle lambda and brace count
152
+ # '}' => :RBRACE, # Specialized to handle brace count
153
153
  '(' => :LPAREN,
154
154
  ')' => :RPAREN,
155
155
  '=' => :EQUALS,
@@ -194,7 +194,6 @@ class Puppet::Pops::Parser::Lexer
194
194
  "<dqstring between two interpolations>" => :DQMID,
195
195
  "<dqstring after final interpolation>" => :DQPOST,
196
196
  "<boolean>" => :BOOLEAN,
197
- "<lambda start>" => :LAMBDA, # A LBRACE followed by '|'
198
197
  "<select start>" => :SELBRACE # A QMARK followed by '{'
199
198
  )
200
199
 
@@ -214,10 +213,6 @@ class Puppet::Pops::Parser::Lexer
214
213
  REGEX_INTRODUCING_TOKENS.include? context[:after]
215
214
  end
216
215
 
217
- IN_STRING_INTERPOLATION = Proc.new do |context|
218
- context[:string_interpolation_depth] > 0
219
- end
220
-
221
216
  DASHED_VARIABLES_ALLOWED = Proc.new do |context|
222
217
  Puppet[:allow_variables_with_dashes]
223
218
  end
@@ -227,20 +222,6 @@ class Puppet::Pops::Parser::Lexer
227
222
  end
228
223
  end
229
224
 
230
- # LBRACE needs look ahead to differentiate between '{' and a '{'
231
- # followed by a '|' (start of lambda) The racc grammar can only do one
232
- # token lookahead.
233
- #
234
- TOKENS.add_token :LBRACE, /\{/ do | lexer, value |
235
- if lexer.match?(/[ \t\r]*\|/)
236
- [TOKENS[:LAMBDA], value]
237
- elsif lexer.lexing_context[:after] == :QMARK
238
- [TOKENS[:SELBRACE], value]
239
- else
240
- [TOKENS[:LBRACE], value]
241
- end
242
- end
243
-
244
225
  # Numbers are treated separately from names, so that they may contain dots.
245
226
  TOKENS.add_token :NUMBER, %r{\b(?:0[xX][0-9A-Fa-f]+|0?\d+(?:\.\d+)?(?:[eE]-?\d+)?)\b} do |lexer, value|
246
227
  lexer.assert_numeric(value)
@@ -305,10 +286,31 @@ class Puppet::Pops::Parser::Lexer
305
286
  lexer.tokenize_interpolated_string(DQ_initial_token_types)
306
287
  end
307
288
 
308
- TOKENS.add_token :DQCONT, /\}/ do |lexer, value|
309
- lexer.tokenize_interpolated_string(DQ_continuation_token_types)
289
+
290
+ # LBRACE needs look ahead to differentiate between '{' and a '{'
291
+ # followed by a '|' (start of lambda) The racc grammar can only do one
292
+ # token lookahead.
293
+ #
294
+ TOKENS.add_token :LBRACE, "{" do |lexer, value|
295
+ lexer.lexing_context[:brace_count] += 1
296
+ if lexer.lexing_context[:after] == :QMARK
297
+ [TOKENS[:SELBRACE], value]
298
+ else
299
+ [TOKENS[:LBRACE], value]
300
+ end
301
+ end
302
+
303
+ # RBRACE needs to differentiate between a regular brace that is part of
304
+ # syntax and one that is the ending of a string interpolation.
305
+ TOKENS.add_token :RBRACE, "}" do |lexer, value|
306
+ context = lexer.lexing_context
307
+ if context[:interpolation_stack].empty? || context[:brace_count] != context[:interpolation_stack][-1]
308
+ context[:brace_count] -= 1
309
+ [TOKENS[:RBRACE], value]
310
+ else
311
+ lexer.tokenize_interpolated_string(DQ_continuation_token_types)
312
+ end
310
313
  end
311
- TOKENS[:DQCONT].acceptable_when Contextual::IN_STRING_INTERPOLATION
312
314
 
313
315
  TOKENS.add_token :DOLLAR_VAR_WITH_DASH, %r{\$(?:::)?(?:[-\w]+::)*[-\w]+} do |lexer, value|
314
316
  lexer.warn_if_variable_has_hyphen(value)
@@ -339,9 +341,21 @@ class Puppet::Pops::Parser::Lexer
339
341
  # reference.
340
342
  #
341
343
  if lexer.match?(%r{[ \t\r]*\(})
342
- [TOKENS[:NAME],value]
344
+ # followed by ( is a function call
345
+ [TOKENS[:NAME], value]
346
+
347
+ elsif kwd_token = KEYWORDS.lookup(value)
348
+ # true, false, if, unless, case, and undef are keywords that cannot be used as variables
349
+ # but node, and several others are variables
350
+ if [ :TRUE, :FALSE ].include?(kwd_token.name)
351
+ [ TOKENS[:BOOLEAN], eval(value) ]
352
+ elsif [ :IF, :UNLESS, :CASE, :UNDEF ].include?(kwd_token.name)
353
+ [kwd_token, value]
354
+ else
355
+ [TOKENS[:VARIABLE], value]
356
+ end
343
357
  else
344
- [TOKENS[:VARIABLE],value]
358
+ [TOKENS[:VARIABLE], value]
345
359
  end
346
360
 
347
361
  end
@@ -404,7 +418,7 @@ class Puppet::Pops::Parser::Lexer
404
418
 
405
419
  def file=(file)
406
420
  @file = file
407
- contents = File.exists?(file) ? File.read(file) : ""
421
+ contents = Puppet::FileSystem::File.exist?(file) ? File.read(file) : ""
408
422
  @scanner = StringScanner.new(contents)
409
423
  @locator = Locator.new(contents, multibyte?)
410
424
  end
@@ -501,7 +515,8 @@ class Puppet::Pops::Parser::Lexer
501
515
  :start_of_line => true,
502
516
  :offset => 0, # byte offset before where token starts
503
517
  :end_offset => 0, # byte offset after scanned token
504
- :string_interpolation_depth => 0
518
+ :brace_count => 0, # nested depth of braces
519
+ :interpolation_stack => [] # matching interpolation brace level
505
520
  }
506
521
  end
507
522
 
@@ -592,8 +607,11 @@ class Puppet::Pops::Parser::Lexer
592
607
  end
593
608
 
594
609
  lexing_context[:after] = final_token.name unless newline
595
- lexing_context[:string_interpolation_depth] += 1 if final_token.name == :DQPRE
596
- lexing_context[:string_interpolation_depth] -= 1 if final_token.name == :DQPOST
610
+ if final_token.name == :DQPRE
611
+ lexing_context[:interpolation_stack] << lexing_context[:brace_count]
612
+ elsif final_token.name == :DQPOST
613
+ lexing_context[:interpolation_stack].pop
614
+ end
597
615
 
598
616
  value = token_value[:value]
599
617
 
@@ -63,7 +63,7 @@ class Puppet::Pops::Parser::Parser
63
63
 
64
64
  # Parses a file expected to contain pp DSL logic.
65
65
  def parse_file(file)
66
- unless FileTest.exist?(file)
66
+ unless Puppet::FileSystem::File.exist?(file)
67
67
  unless file =~ /\.pp$/
68
68
  file = file + ".pp"
69
69
  end
@@ -18,18 +18,18 @@ module Puppet::Pops::Patterns
18
18
 
19
19
  # NAME matches a name the same way as the lexer.
20
20
  # This name includes hyphen, which may be illegal in variables, and names in general.
21
- NAME = %r{((::)?[a-z0-9][-\w]*)(::[a-z0-9][-\w]*)*}
21
+ NAME = %r{\A((::)?[a-z0-9]\w*)(::[a-z0-9]\w*)*\z}
22
22
 
23
23
  # CLASSREF_EXT matches a class reference the same way as the lexer - i.e. the external source form
24
24
  # where each part must start with a capital letter A-Z.
25
25
  # This name includes hyphen, which may be illegal in some cases.
26
26
  #
27
- CLASSREF_EXT = %r{((::){0,1}[A-Z][-\w]*)+}
27
+ CLASSREF_EXT = %r{\A((::){0,1}[A-Z][-\w]*)+\z}
28
28
 
29
- # CLASSREF matches a class reference the way it is represented internall in the
29
+ # CLASSREF matches a class reference the way it is represented internally in the
30
30
  # model (i.e. in lower case).
31
31
  # This name includes hyphen, which may be illegal in some cases.
32
32
  #
33
- CLASSREF = %r{((::){0,1}[a-z][-\w]*)+}
33
+ CLASSREF = %r{\A((::){0,1}[a-z][-\w]*)+\z}
34
34
 
35
35
  end
@@ -35,7 +35,7 @@ module Puppet::Pops::Utils
35
35
  radix = 10
36
36
  if match[1].to_s.length > 0
37
37
  radix = 16
38
- elsif match[2].to_s.length > 0 && match[2][0] == '0'
38
+ elsif match[2].to_s.length > 1 && match[2][0] == '0'
39
39
  radix = 8
40
40
  end
41
41
  [Integer(match[0], radix), radix]
@@ -20,7 +20,7 @@ class Puppet::Pops::Validation::Checker3_1
20
20
  def initialize(diagnostics_producer)
21
21
  @@check_visitor ||= Puppet::Pops::Visitor.new(nil, "check", 0, 0)
22
22
  @@rvalue_visitor ||= Puppet::Pops::Visitor.new(nil, "rvalue", 0, 0)
23
- @@hostname_visitor ||= Puppet::Pops::Visitor.new(nil, "hostname", 1, 1)
23
+ @@hostname_visitor ||= Puppet::Pops::Visitor.new(nil, "hostname", 1, 2)
24
24
  @@assignment_visitor ||= Puppet::Pops::Visitor.new(nil, "assign", 0, 1)
25
25
  @@query_visitor ||= Puppet::Pops::Visitor.new(nil, "query", 0, 0)
26
26
  @@top_visitor ||= Puppet::Pops::Visitor.new(nil, "top", 1, 1)
@@ -45,8 +45,9 @@ class Puppet::Pops::Validation::Checker3_1
45
45
  end
46
46
 
47
47
  # Performs check if this is a vaid hostname expression
48
- def hostname(o, semantic)
49
- @@hostname_visitor.visit_this(self, o, semantic)
48
+ # @param single_feature_name [String, nil] the name of a single valued hostname feature of the value's container. e.g. 'parent'
49
+ def hostname(o, semantic, single_feature_name = nil)
50
+ @@hostname_visitor.visit_this(self, o, semantic, single_feature_name)
50
51
  end
51
52
 
52
53
  # Performs check if this is valid as a query
@@ -125,7 +126,7 @@ class Puppet::Pops::Validation::Checker3_1
125
126
  case o.left_expr
126
127
  when Model::QualifiedName
127
128
  # allows many keys, but the name should really be a QualifiedReference
128
- acceptor.accept(Issues::DEPRECATED_NAME_AS_TYPE, o, :name => o.value)
129
+ acceptor.accept(Issues::DEPRECATED_NAME_AS_TYPE, o, :name => o.left_expr.value)
129
130
  when Model::QualifiedReference
130
131
  # ok, allows many - this is a resource reference
131
132
 
@@ -255,6 +256,7 @@ class Puppet::Pops::Validation::Checker3_1
255
256
  def check_NodeDefinition(o)
256
257
  # Check that hostnames are valid hostnames (or regular expressons)
257
258
  hostname(o.host_matches, o)
259
+ hostname(o.parent, o, 'parent') unless o.parent.nil?
258
260
  top(o.eContainer, o)
259
261
  end
260
262
 
@@ -385,11 +387,14 @@ class Puppet::Pops::Validation::Checker3_1
385
387
  #--- HOSTNAME CHECKS
386
388
 
387
389
  # Transforms Array of host matching expressions into a (Ruby) array of AST::HostName
388
- def hostname_Array(o, semantic)
389
- o.each {|x| hostname x, semantic }
390
+ def hostname_Array(o, semantic, single_feature_name)
391
+ if single_feature_name
392
+ acceptor.accept(Issues::ILLEGAL_EXPRESSION, o, {:feature=>single_feature_name, :container=>semantic})
393
+ end
394
+ o.each {|x| hostname(x, semantic, false) }
390
395
  end
391
396
 
392
- def hostname_String(o, semantic)
397
+ def hostname_String(o, semantic, single_feature_name)
393
398
  # The 3.x checker only checks for illegal characters - if matching /[^-\w.]/ the name is invalid,
394
399
  # but this allows pathological names like "a..b......c", "----"
395
400
  # TODO: Investigate if more illegal hostnames should be flagged.
@@ -399,11 +404,11 @@ class Puppet::Pops::Validation::Checker3_1
399
404
  end
400
405
  end
401
406
 
402
- def hostname_LiteralValue(o, semantic)
403
- hostname_String(o.value.to_s, o)
407
+ def hostname_LiteralValue(o, semantic, single_feature_name)
408
+ hostname_String(o.value.to_s, o, single_feature_name)
404
409
  end
405
410
 
406
- def hostname_ConcatenatedString(o, semantic)
411
+ def hostname_ConcatenatedString(o, semantic, single_feature_name)
407
412
  # Puppet 3.1. only accepts a concatenated string without interpolated expressions
408
413
  if the_expr = o.segments.index {|s| s.is_a?(Model::TextExpression) }
409
414
  acceptor.accept(Issues::ILLEGAL_HOSTNAME_INTERPOLATION, o.segments[the_expr].expr)
@@ -413,32 +418,32 @@ class Puppet::Pops::Validation::Checker3_1
413
418
  else
414
419
  # corner case, may be ok, but lexer may have replaced with plain string, this is
415
420
  # here if it does not
416
- hostname_String(o.segments[0], o.segments[0])
421
+ hostname_String(o.segments[0], o.segments[0], false)
417
422
  end
418
423
  end
419
424
 
420
- def hostname_QualifiedName(o, semantic)
421
- hostname_String(o.value.to_s, o)
425
+ def hostname_QualifiedName(o, semantic, single_feature_name)
426
+ hostname_String(o.value.to_s, o, single_feature_name)
422
427
  end
423
428
 
424
- def hostname_QualifiedReference(o, semantic)
425
- hostname_String(o.value.to_s, o)
429
+ def hostname_QualifiedReference(o, semantic, single_feature_name)
430
+ hostname_String(o.value.to_s, o, single_feature_name)
426
431
  end
427
432
 
428
- def hostname_LiteralNumber(o, semantic)
433
+ def hostname_LiteralNumber(o, semantic, single_feature_name)
429
434
  # always ok
430
435
  end
431
436
 
432
- def hostname_LiteralDefault(o, semantic)
437
+ def hostname_LiteralDefault(o, semantic, single_feature_name)
433
438
  # always ok
434
439
  end
435
440
 
436
- def hostname_LiteralRegularExpression(o, semantic)
441
+ def hostname_LiteralRegularExpression(o, semantic, single_feature_name)
437
442
  # always ok
438
443
  end
439
444
 
440
- def hostname_Object(o, semantic)
441
- acceptor.accept(Issues::ILLEGAL_EXPRESSION, o, {:feature=>'hostname', :container=>semantic})
445
+ def hostname_Object(o, semantic, single_feature_name)
446
+ acceptor.accept(Issues::ILLEGAL_EXPRESSION, o, {:feature=> single_feature_name || 'hostname', :container=>semantic})
442
447
  end
443
448
 
444
449
  #---QUERY CHECKS
@@ -40,10 +40,10 @@ class Puppet::Provider
40
40
  include Puppet::Util::Warnings
41
41
  extend Puppet::Util::Warnings
42
42
 
43
- require 'puppet/provider/confiner'
43
+ require 'puppet/confiner'
44
44
  require 'puppet/provider/command'
45
45
 
46
- extend Puppet::Provider::Confiner
46
+ extend Puppet::Confiner
47
47
 
48
48
  Puppet::Util.logmethods(self, true)
49
49
 
@@ -148,6 +148,7 @@ class Puppet::Provider
148
148
  # @raise [Puppet::DevError] if the name does not reference an existing command.
149
149
  # @return [String] the absolute path to the found executable for the command
150
150
  # @see which
151
+ # @api public
151
152
  def self.command(name)
152
153
  name = name.intern
153
154
 
@@ -163,7 +164,7 @@ class Puppet::Provider
163
164
  end
164
165
 
165
166
  # Confines this provider to be suitable only on hosts where the given commands are present.
166
- # Also see {Puppet::Provider::Confiner#confine} for other types of confinement of a provider by use of other types of
167
+ # Also see {Puppet::Confiner#confine} for other types of confinement of a provider by use of other types of
167
168
  # predicates.
168
169
  #
169
170
  # @note It is preferred if the commands are not entered with absolute paths as this allows puppet
@@ -173,6 +174,7 @@ class Puppet::Provider
173
174
  # be executing on the system. Each command is specified with a name and the path of the executable.
174
175
  # @return [void]
175
176
  # @see optional_commands
177
+ # @api public
176
178
  #
177
179
  def self.commands(command_specs)
178
180
  command_specs.each do |name, path|
@@ -189,6 +191,7 @@ class Puppet::Provider
189
191
  # be executing on the system. Each command is specified with a name and the path of the executable.
190
192
  # (@see #has_command)
191
193
  # @see commands
194
+ # @api public
192
195
  def self.optional_commands(hash)
193
196
  hash.each do |name, target|
194
197
  has_command(name, target) do
@@ -221,6 +224,7 @@ class Puppet::Provider
221
224
  # @comment a yield [ ] produces {|| ...} in the signature, do not remove the space.
222
225
  # @note the name ´has_command´ looks odd in an API context, but makes more sense when seen in the internal
223
226
  # DSL context where a Provider is declaratively defined.
227
+ # @api public
224
228
  #
225
229
  def self.has_command(name, path, &block)
226
230
  name = name.intern
@@ -485,7 +489,7 @@ class Puppet::Provider
485
489
  if @defaults.length > 0
486
490
  return "Default for " + @defaults.collect do |f, v|
487
491
  "`#{f}` == `#{[v].flatten.join(', ')}`"
488
- end.join(" and ") + "."
492
+ end.sort.join(" and ") + "."
489
493
  end
490
494
  end
491
495
 
@@ -493,7 +497,7 @@ class Puppet::Provider
493
497
  if @commands.length > 0
494
498
  return "Required binaries: " + @commands.collect do |n, c|
495
499
  "`#{c}`"
496
- end.join(", ") + "."
500
+ end.sort.join(", ") + "."
497
501
  end
498
502
  end
499
503
 
@@ -501,7 +505,7 @@ class Puppet::Provider
501
505
  if features.length > 0
502
506
  return "Supported features: " + features.collect do |f|
503
507
  "`#{f}`"
504
- end.join(", ") + "."
508
+ end.sort.join(", ") + "."
505
509
  end
506
510
  end
507
511
 
@@ -602,6 +606,18 @@ class Puppet::Provider
602
606
  # fetched state (i.e. what is returned from the {instances} method).
603
607
  # @param resources_hash [Hash<{String => Puppet::Resource}>] map from name to resource of resources to prefetch
604
608
  # @return [void]
609
+ # @api public
610
+
611
+ # @comment Document post_resource_eval here as it does not exist anywhere else (called from transaction if implemented)
612
+ # @!method self.post_resource_eval()
613
+ # @since 3.4.0
614
+ # @api public
615
+ # @abstract A subclass may implement this - it is not implemented in the Provider class
616
+ # This method may be implemented by a provider in order to perform any
617
+ # cleanup actions needed. It will be called at the end of the transaction if
618
+ # any resources in the catalog make use of the provider, regardless of
619
+ # whether the resources are changed or not and even if resource failures occur.
620
+ # @return [void]
605
621
 
606
622
  # @comment Document flush here as it does not exist anywhere (called from transaction if implemented)
607
623
  # @!method flush()
@@ -609,5 +625,6 @@ class Puppet::Provider
609
625
  # This method may be implemented by a provider in order to flush properties that has not been individually
610
626
  # applied to the managed entity's current state.
611
627
  # @return [void]
628
+ # @api public
612
629
  end
613
630
 
File without changes
@@ -125,7 +125,7 @@ Puppet::Type.type(:augeas).provide(:augeas) do
125
125
  end
126
126
  fail("missing string argument #{narg} for #{cmd}") unless argline[-1]
127
127
  elsif f == :comparator
128
- argline << sc.scan(/(==|!=|=~|<|<=|>|>=)/)
128
+ argline << sc.scan(/(==|!=|=~|<=|>=|<|>)/)
129
129
  unless argline[-1]
130
130
  puts sc.rest
131
131
  fail("invalid comparator for command #{cmd}")
@@ -198,6 +198,17 @@ Puppet::Type.type(:augeas).provide(:augeas) do
198
198
  end
199
199
  end
200
200
 
201
+ def is_numeric?(s)
202
+ case s
203
+ when Fixnum
204
+ true
205
+ when String
206
+ s.match(/\A[+-]?\d+?(\.\d+)?\Z/n) == nil ? false : true
207
+ else
208
+ false
209
+ end
210
+ end
211
+
201
212
  # Used by the need_to_run? method to process get filters. Returns
202
213
  # true if there is a match, false if otherwise
203
214
  # Assumes a syntax of get /files/path [COMPARATOR] value
@@ -213,10 +224,15 @@ Puppet::Type.type(:augeas).provide(:augeas) do
213
224
 
214
225
  #check the value in augeas
215
226
  result = @aug.get(path) || ''
216
- case comparator
217
- when "!="
227
+
228
+ if ['<', '<=', '>=', '>'].include? comparator and is_numeric?(result) and
229
+ is_numeric?(arg)
230
+ resultf = result.to_f
231
+ argf = arg.to_f
232
+ return_value = (resultf.send(comparator, argf))
233
+ elsif comparator == "!="
218
234
  return_value = (result != arg)
219
- when "=~"
235
+ elsif comparator == "=~"
220
236
  regex = Regexp.new(arg)
221
237
  return_value = (result =~ regex)
222
238
  else
@@ -292,7 +308,7 @@ Puppet::Type.type(:augeas).provide(:augeas) do
292
308
  load_path.flatten!
293
309
  end
294
310
 
295
- if File.exists?("#{Puppet[:libdir]}/augeas/lenses")
311
+ if Puppet::FileSystem::File.exist?("#{Puppet[:libdir]}/augeas/lenses")
296
312
  load_path << "#{Puppet[:libdir]}/augeas/lenses"
297
313
  end
298
314