puppet 4.3.2 → 4.4.0

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

Potentially problematic release.


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

Files changed (487) hide show
  1. checksums.yaml +4 -4
  2. data/COMMITTERS.md +2 -2
  3. data/CONTRIBUTING.md +6 -6
  4. data/LICENSE +1 -1
  5. data/README.md +8 -9
  6. data/conf/auth.conf +2 -2
  7. data/ext/README.environment +1 -1
  8. data/ext/debian/README.source +1 -1
  9. data/ext/debian/control +1 -1
  10. data/ext/debian/copyright +4 -4
  11. data/ext/debian/puppetmaster.README.debian +11 -9
  12. data/ext/emacs/puppet-mode.el +1 -1
  13. data/ext/envpuppet +2 -2
  14. data/ext/ips/puppetagent.xml +1 -1
  15. data/ext/ips/puppetmaster.xml +1 -1
  16. data/ext/project_data.yaml +8 -0
  17. data/ext/puppet-test +3 -3
  18. data/ext/rack/example-passenger-vhost.conf +1 -1
  19. data/ext/redhat/puppet.spec.erb +2 -2
  20. data/ext/regexp_nodes/regexp_nodes.rb +1 -1
  21. data/ext/solaris/pkginfo +1 -1
  22. data/ext/solaris/smf/puppet.xml +1 -1
  23. data/ext/suse/puppet.spec +2 -2
  24. data/ext/upload_facts.rb +1 -1
  25. data/ext/windows/puppet_interactive.bat +6 -0
  26. data/ext/windows/puppet_shell.bat +9 -0
  27. data/ext/windows/run_puppet_interactive.bat +9 -0
  28. data/ext/yaml_nodes.rb +1 -1
  29. data/install.rb +30 -20
  30. data/lib/puppet/agent.rb +1 -1
  31. data/lib/puppet/application/agent.rb +4 -2
  32. data/lib/puppet/application/apply.rb +7 -4
  33. data/lib/puppet/application/cert.rb +1 -1
  34. data/lib/puppet/application/device.rb +1 -1
  35. data/lib/puppet/application/filebucket.rb +1 -1
  36. data/lib/puppet/application/inspect.rb +1 -1
  37. data/lib/puppet/application/lookup.rb +4 -4
  38. data/lib/puppet/application/master.rb +2 -2
  39. data/lib/puppet/application/resource.rb +1 -1
  40. data/lib/puppet/configurer.rb +100 -22
  41. data/lib/puppet/data_providers/hiera_config.rb +28 -3
  42. data/lib/puppet/data_providers/hiera_interpolate.rb +30 -15
  43. data/lib/puppet/data_providers/hiera_support.rb +1 -1
  44. data/lib/puppet/data_providers/json_data_provider_factory.rb +2 -2
  45. data/lib/puppet/data_providers/yaml_data_provider_factory.rb +2 -2
  46. data/lib/puppet/defaults.rb +65 -19
  47. data/lib/puppet/environments.rb +3 -1
  48. data/lib/puppet/face/config.rb +1 -1
  49. data/lib/puppet/face/epp.rb +1 -1
  50. data/lib/puppet/face/help/man.erb +1 -1
  51. data/lib/puppet/face/module/install.rb +6 -6
  52. data/lib/puppet/face/parser.rb +12 -9
  53. data/lib/puppet/face/status.rb +2 -1
  54. data/lib/puppet/feature/cfpropertylist.rb +3 -0
  55. data/lib/puppet/feature/telnet.rb +9 -0
  56. data/lib/puppet/file_serving/http_metadata.rb +46 -0
  57. data/lib/puppet/file_serving/metadata.rb +18 -2
  58. data/lib/puppet/file_serving/terminus_selector.rb +2 -0
  59. data/lib/puppet/file_system.rb +2 -2
  60. data/lib/puppet/file_system/file_impl.rb +2 -2
  61. data/lib/puppet/file_system/memory_impl.rb +1 -1
  62. data/lib/puppet/file_system/uniquefile.rb +1 -1
  63. data/lib/puppet/forge.rb +1 -1
  64. data/lib/puppet/forge/repository.rb +1 -31
  65. data/lib/puppet/functions.rb +45 -6
  66. data/lib/puppet/functions/assert_type.rb +9 -9
  67. data/lib/puppet/functions/each.rb +5 -13
  68. data/lib/puppet/functions/filter.rb +5 -14
  69. data/lib/puppet/functions/map.rb +6 -14
  70. data/lib/puppet/functions/reduce.rb +5 -13
  71. data/lib/puppet/functions/reverse_each.rb +82 -0
  72. data/lib/puppet/functions/scanf.rb +15 -18
  73. data/lib/puppet/functions/slice.rb +22 -36
  74. data/lib/puppet/functions/split.rb +2 -2
  75. data/lib/puppet/functions/step.rb +88 -0
  76. data/lib/puppet/functions/type.rb +70 -0
  77. data/lib/puppet/graph/rb_tree_map.rb +1 -1
  78. data/lib/puppet/indirector/catalog/compiler.rb +188 -5
  79. data/lib/puppet/indirector/file_content/http.rb +15 -0
  80. data/lib/puppet/indirector/file_metadata/http.rb +27 -0
  81. data/lib/puppet/indirector/generic_http.rb +16 -0
  82. data/lib/puppet/indirector/node/exec.rb +1 -1
  83. data/lib/puppet/indirector/node/ldap.rb +1 -1
  84. data/lib/puppet/indirector/rest.rb +2 -1
  85. data/lib/puppet/info_service/class_information_service.rb +13 -12
  86. data/lib/puppet/loaders.rb +1 -0
  87. data/lib/puppet/module.rb +3 -0
  88. data/lib/puppet/module_tool/skeleton/templates/generator/Gemfile +9 -2
  89. data/lib/puppet/module_tool/skeleton/templates/generator/spec/classes/init_spec.rb.erb +1 -1
  90. data/lib/puppet/module_tool/skeleton/templates/generator/tests/init.pp.erb +2 -2
  91. data/lib/puppet/module_tool/tar/mini.rb +3 -3
  92. data/lib/puppet/network/http/pool.rb +9 -0
  93. data/lib/puppet/node.rb +1 -1
  94. data/lib/puppet/node/environment.rb +11 -2
  95. data/lib/puppet/parser/ast/pops_bridge.rb +19 -22
  96. data/lib/puppet/parser/compiler.rb +3 -3
  97. data/lib/puppet/parser/environment_compiler.rb +0 -1
  98. data/lib/puppet/parser/functions.rb +28 -16
  99. data/lib/puppet/parser/functions/fqdn_rand.rb +1 -1
  100. data/lib/puppet/parser/functions/inline_template.rb +1 -1
  101. data/lib/puppet/parser/functions/map.rb +1 -1
  102. data/lib/puppet/parser/functions/scanf.rb +15 -26
  103. data/lib/puppet/parser/functions/slice.rb +17 -24
  104. data/lib/puppet/parser/functions/split.rb +1 -1
  105. data/lib/puppet/parser/resource.rb +19 -17
  106. data/lib/puppet/parser/scope.rb +176 -5
  107. data/lib/puppet/plugins/data_providers/data_provider.rb +54 -13
  108. data/lib/puppet/pops.rb +0 -8
  109. data/lib/puppet/pops/adaptable.rb +4 -1
  110. data/lib/puppet/pops/adapters.rb +38 -13
  111. data/lib/puppet/pops/binder/binder.rb +21 -17
  112. data/lib/puppet/pops/binder/binder_issues.rb +8 -6
  113. data/lib/puppet/pops/binder/bindings_checker.rb +12 -8
  114. data/lib/puppet/pops/binder/bindings_composer.rb +16 -12
  115. data/lib/puppet/pops/binder/bindings_factory.rb +108 -104
  116. data/lib/puppet/pops/binder/bindings_model.rb +49 -47
  117. data/lib/puppet/pops/binder/config/diagnostic_producer.rb +10 -6
  118. data/lib/puppet/pops/binder/injector.rb +53 -48
  119. data/lib/puppet/pops/binder/key_factory.rb +10 -6
  120. data/lib/puppet/pops/binder/producers.rb +67 -62
  121. data/lib/puppet/pops/evaluator/access_operator.rb +95 -93
  122. data/lib/puppet/pops/evaluator/closure.rb +84 -68
  123. data/lib/puppet/pops/evaluator/collector_transformer.rb +18 -14
  124. data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +0 -1
  125. data/lib/puppet/pops/evaluator/compare_operator.rb +13 -9
  126. data/lib/puppet/pops/evaluator/epp_evaluator.rb +9 -8
  127. data/lib/puppet/pops/evaluator/evaluator_impl.rb +78 -76
  128. data/lib/puppet/pops/evaluator/json_strict_literal_evaluator.rb +85 -0
  129. data/lib/puppet/pops/evaluator/relationship_operator.rb +13 -11
  130. data/lib/puppet/pops/evaluator/runtime3_converter.rb +5 -0
  131. data/lib/puppet/pops/evaluator/runtime3_support.rb +41 -45
  132. data/lib/puppet/pops/issue_reporter.rb +6 -4
  133. data/lib/puppet/pops/issues.rb +34 -11
  134. data/lib/puppet/pops/loader/base_loader.rb +1 -1
  135. data/lib/puppet/pops/loader/loader.rb +1 -1
  136. data/lib/puppet/pops/loader/loader_paths.rb +15 -0
  137. data/lib/puppet/pops/loader/module_loaders.rb +17 -13
  138. data/lib/puppet/pops/loader/puppet_function_instantiator.rb +16 -12
  139. data/lib/puppet/pops/loader/ruby_function_instantiator.rb +16 -3
  140. data/lib/puppet/pops/loader/type_definition_instantiator.rb +55 -0
  141. data/lib/puppet/pops/loaders.rb +51 -9
  142. data/lib/puppet/pops/lookup.rb +14 -12
  143. data/lib/puppet/pops/merge_strategy.rb +16 -19
  144. data/lib/puppet/pops/model/factory.rb +26 -2
  145. data/lib/puppet/pops/model/model.rb +8 -8
  146. data/lib/puppet/pops/model/model_label_provider.rb +13 -7
  147. data/lib/puppet/pops/model/model_meta.rb +17 -0
  148. data/lib/puppet/pops/model/model_tree_dumper.rb +8 -0
  149. data/lib/puppet/pops/parser/egrammar.ra +38 -14
  150. data/lib/puppet/pops/parser/eparser.rb +1353 -1276
  151. data/lib/puppet/pops/parser/epp_support.rb +11 -7
  152. data/lib/puppet/pops/parser/evaluating_parser.rb +14 -10
  153. data/lib/puppet/pops/parser/heredoc_support.rb +15 -11
  154. data/lib/puppet/pops/parser/lexer2.rb +26 -19
  155. data/lib/puppet/pops/parser/lexer_support.rb +85 -7
  156. data/lib/puppet/pops/parser/locator.rb +21 -0
  157. data/lib/puppet/pops/parser/parser_support.rb +19 -16
  158. data/lib/puppet/pops/parser/slurp_support.rb +11 -7
  159. data/lib/puppet/pops/types/class_loader.rb +23 -19
  160. data/lib/puppet/pops/types/enumeration.rb +9 -26
  161. data/lib/puppet/pops/types/iterable.rb +308 -0
  162. data/lib/puppet/pops/types/recursion_guard.rb +82 -0
  163. data/lib/puppet/pops/types/type_acceptor.rb +25 -0
  164. data/lib/puppet/pops/types/type_asserter.rb +10 -9
  165. data/lib/puppet/pops/types/type_calculator.rb +138 -381
  166. data/lib/puppet/pops/types/type_factory.rb +91 -57
  167. data/lib/puppet/pops/types/type_formatter.rb +334 -0
  168. data/lib/puppet/pops/types/type_mismatch_describer.rb +226 -59
  169. data/lib/puppet/pops/types/type_parser.rb +159 -112
  170. data/lib/puppet/pops/types/types.rb +2057 -1247
  171. data/lib/puppet/pops/utils.rb +11 -10
  172. data/lib/puppet/pops/validation.rb +11 -9
  173. data/lib/puppet/pops/validation/checker4_0.rb +83 -55
  174. data/lib/puppet/pops/validation/validator_factory_4_0.rb +8 -4
  175. data/lib/puppet/provider/aixobject.rb +1 -1
  176. data/lib/puppet/provider/augeas/augeas.rb +1 -1
  177. data/lib/puppet/provider/cron/crontab.rb +1 -1
  178. data/lib/puppet/provider/exec/windows.rb +1 -1
  179. data/lib/puppet/provider/macauthorization/macauthorization.rb +10 -9
  180. data/lib/puppet/provider/nameservice/directoryservice.rb +35 -50
  181. data/lib/puppet/provider/package/appdmg.rb +3 -2
  182. data/lib/puppet/provider/package/dnf.rb +1 -1
  183. data/lib/puppet/provider/package/pip.rb +5 -8
  184. data/lib/puppet/provider/package/pip3.rb +1 -1
  185. data/lib/puppet/provider/package/pkg.rb +1 -1
  186. data/lib/puppet/provider/package/pkgdmg.rb +3 -2
  187. data/lib/puppet/provider/package/pkgng.rb +13 -4
  188. data/lib/puppet/provider/package/windows.rb +1 -1
  189. data/lib/puppet/provider/package/yum.rb +1 -1
  190. data/lib/puppet/provider/package/zypper.rb +19 -0
  191. data/lib/puppet/provider/service/debian.rb +2 -2
  192. data/lib/puppet/provider/service/launchd.rb +6 -18
  193. data/lib/puppet/provider/service/systemd.rb +9 -2
  194. data/lib/puppet/provider/sshkey/parsed.rb +1 -1
  195. data/lib/puppet/provider/user/aix.rb +1 -1
  196. data/lib/puppet/provider/user/directoryservice.rb +33 -58
  197. data/lib/puppet/provider/zfs/zfs.rb +1 -1
  198. data/lib/puppet/provider/zpool/zpool.rb +1 -1
  199. data/lib/puppet/reference/configuration.rb +1 -1
  200. data/lib/puppet/reference/providers.rb +1 -1
  201. data/lib/puppet/resource.rb +15 -12
  202. data/lib/puppet/resource/capability_finder.rb +20 -13
  203. data/lib/puppet/resource/catalog.rb +60 -3
  204. data/lib/puppet/resource/status.rb +11 -2
  205. data/lib/puppet/resource/type.rb +28 -38
  206. data/lib/puppet/settings.rb +1 -1
  207. data/lib/puppet/settings/config_file.rb +1 -1
  208. data/lib/puppet/settings/environment_conf.rb +13 -5
  209. data/lib/puppet/ssl/certificate_factory.rb +3 -3
  210. data/lib/puppet/ssl/certificate_request.rb +4 -4
  211. data/lib/puppet/ssl/certificate_signer.rb +1 -1
  212. data/lib/puppet/ssl/validator/default_validator.rb +1 -1
  213. data/lib/puppet/test/test_helper.rb +16 -4
  214. data/lib/puppet/transaction.rb +15 -2
  215. data/lib/puppet/transaction/additional_resource_generator.rb +6 -2
  216. data/lib/puppet/transaction/report.rb +31 -1
  217. data/lib/puppet/transaction/resource_harness.rb +0 -25
  218. data/lib/puppet/type.rb +11 -11
  219. data/lib/puppet/type/augeas.rb +1 -1
  220. data/lib/puppet/type/cron.rb +12 -12
  221. data/lib/puppet/type/file.rb +91 -39
  222. data/lib/puppet/type/file/checksum_value.rb +53 -0
  223. data/lib/puppet/type/file/content.rb +26 -111
  224. data/lib/puppet/type/file/data_sync.rb +84 -0
  225. data/lib/puppet/type/file/ensure.rb +17 -14
  226. data/lib/puppet/type/file/selcontext.rb +1 -1
  227. data/lib/puppet/type/file/source.rb +103 -18
  228. data/lib/puppet/type/filebucket.rb +1 -1
  229. data/lib/puppet/type/interface.rb +8 -3
  230. data/lib/puppet/type/macauthorization.rb +1 -1
  231. data/lib/puppet/type/package.rb +6 -0
  232. data/lib/puppet/type/schedule.rb +1 -1
  233. data/lib/puppet/type/stage.rb +1 -1
  234. data/lib/puppet/type/user.rb +19 -17
  235. data/lib/puppet/type/yumrepo.rb +20 -0
  236. data/lib/puppet/util.rb +109 -22
  237. data/lib/puppet/util/autoload.rb +16 -11
  238. data/lib/puppet/util/checksums.rb +74 -31
  239. data/lib/puppet/util/execution.rb +1 -1
  240. data/lib/puppet/util/http_proxy.rb +72 -0
  241. data/lib/puppet/util/log.rb +2 -0
  242. data/lib/puppet/util/logging.rb +43 -1
  243. data/lib/puppet/util/monkey_patches.rb +2 -2
  244. data/lib/puppet/util/multi_match.rb +51 -0
  245. data/lib/puppet/util/network_device/cisco/device.rb +10 -2
  246. data/lib/puppet/util/network_device/cisco/interface.rb +21 -8
  247. data/lib/puppet/util/network_device/transport/ssh.rb +7 -3
  248. data/lib/puppet/util/network_device/transport/telnet.rb +39 -36
  249. data/lib/puppet/util/plist.rb +130 -0
  250. data/lib/puppet/util/resource_template.rb +1 -1
  251. data/lib/puppet/util/run_mode.rb +2 -2
  252. data/lib/puppet/util/skip_tags.rb +9 -0
  253. data/lib/puppet/util/windows/access_control_entry.rb +1 -1
  254. data/lib/puppet/util/windows/access_control_list.rb +3 -3
  255. data/lib/puppet/util/windows/adsi.rb +4 -4
  256. data/lib/puppet/util/windows/api_types.rb +24 -18
  257. data/lib/puppet/util/windows/com.rb +3 -3
  258. data/lib/puppet/util/windows/error.rb +1 -1
  259. data/lib/puppet/util/windows/file.rb +8 -8
  260. data/lib/puppet/util/windows/principal.rb +23 -14
  261. data/lib/puppet/util/windows/process.rb +78 -11
  262. data/lib/puppet/util/windows/registry.rb +1 -1
  263. data/lib/puppet/util/windows/root_certs.rb +5 -5
  264. data/lib/puppet/util/windows/security.rb +33 -35
  265. data/lib/puppet/util/windows/security_descriptor.rb +1 -1
  266. data/lib/puppet/util/windows/sid.rb +42 -4
  267. data/lib/puppet/util/windows/taskscheduler.rb +15 -15
  268. data/lib/puppet/util/windows/user.rb +10 -10
  269. data/lib/puppet/vendor/deep_merge/deep_merge.gemspec +1 -1
  270. data/lib/puppet/vendor/pathspec/LICENSE +2 -2
  271. data/lib/puppet/vendor/pathspec/README.md +1 -1
  272. data/lib/puppet/vendor/rgen/README.rdoc +1 -1
  273. data/lib/puppet/vendor/semantic/lib/semantic/dependency/module_release.rb +14 -0
  274. data/lib/puppet/version.rb +1 -1
  275. data/lib/semver.rb +17 -1
  276. data/man/man5/puppet.conf.5 +12 -12
  277. data/man/man8/extlookup2hiera.8 +1 -1
  278. data/man/man8/puppet-agent.8 +2 -2
  279. data/man/man8/puppet-apply.8 +2 -2
  280. data/man/man8/puppet-ca.8 +2 -2
  281. data/man/man8/puppet-catalog.8 +2 -2
  282. data/man/man8/puppet-cert.8 +2 -2
  283. data/man/man8/puppet-certificate.8 +2 -2
  284. data/man/man8/puppet-certificate_request.8 +2 -2
  285. data/man/man8/puppet-certificate_revocation_list.8 +2 -2
  286. data/man/man8/puppet-config.8 +3 -3
  287. data/man/man8/puppet-describe.8 +1 -1
  288. data/man/man8/puppet-device.8 +1 -1
  289. data/man/man8/puppet-doc.8 +1 -1
  290. data/man/man8/puppet-epp.8 +2 -2
  291. data/man/man8/puppet-facts.8 +2 -2
  292. data/man/man8/puppet-file.8 +2 -2
  293. data/man/man8/puppet-filebucket.8 +2 -2
  294. data/man/man8/puppet-help.8 +2 -2
  295. data/man/man8/puppet-inspect.8 +2 -2
  296. data/man/man8/puppet-key.8 +2 -2
  297. data/man/man8/puppet-man.8 +2 -2
  298. data/man/man8/puppet-master.8 +2 -2
  299. data/man/man8/puppet-module.8 +9 -9
  300. data/man/man8/puppet-node.8 +2 -2
  301. data/man/man8/puppet-parser.8 +2 -2
  302. data/man/man8/puppet-plugin.8 +2 -2
  303. data/man/man8/puppet-report.8 +2 -2
  304. data/man/man8/puppet-resource.8 +2 -2
  305. data/man/man8/puppet-resource_type.8 +2 -2
  306. data/man/man8/puppet-status.8 +3 -3
  307. data/man/man8/puppet.8 +1 -1
  308. data/spec/fixtures/module.tar.gz +0 -0
  309. data/spec/fixtures/unit/functions/lookup/environments/production/modules/bad_data/lib/puppet/functions/bad_data/data.rb +1 -0
  310. data/spec/fixtures/unit/functions/lookup/environments/production/modules/bad_data/manifests/init.pp +0 -1
  311. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/data/empty.json +0 -0
  312. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/hiera.yaml +5 -0
  313. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/manifests/init.pp +2 -0
  314. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/metadata.json +9 -0
  315. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/data/empty.yaml +1 -0
  316. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/hiera.yaml +5 -0
  317. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/manifests/init.pp +2 -0
  318. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/metadata.json +9 -0
  319. data/spec/fixtures/unit/functions/lookup/environments/production/modules/hieraprovider/data/first.json +2 -1
  320. data/spec/fixtures/unit/module/trailing-comma.json +1 -1
  321. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/manifests/init.pp +3 -1
  322. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/types/zero.pp +1 -0
  323. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/types/withuseeone.pp +1 -0
  324. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/types/withuseezero.pp +1 -0
  325. data/spec/fixtures/unit/provider/package/yum/yum-check-update-broken-notices.txt +187 -0
  326. data/spec/fixtures/unit/provider/sshkey/parsed/sample_with_blank_lines +8 -0
  327. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_fetch_if_not_on_the_local_disk.yml +205 -0
  328. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_not_update_if_content_on_disk_is_up-to-date.yml +213 -0
  329. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_update_if_content_differs_on_disk.yml +213 -0
  330. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_mtime_is_older_on_disk.yml +205 -0
  331. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_no_header_specified.yml +197 -0
  332. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_not_on_the_local_disk.yml +205 -0
  333. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_not_update_if_mtime_is_newer_on_disk.yml +205 -0
  334. data/spec/integration/defaults_spec.rb +14 -2
  335. data/spec/integration/file_system/uniquefile_spec.rb +29 -0
  336. data/spec/integration/module_tool/tar/mini_spec.rb +28 -0
  337. data/spec/integration/node/environment_spec.rb +13 -0
  338. data/spec/integration/parser/dynamic_scoping_spec.rb +67 -0
  339. data/spec/integration/parser/parameter_defaults_spec.rb +336 -0
  340. data/spec/integration/parser/undef_param_spec.rb +8 -0
  341. data/spec/integration/provider/yumrepo_spec.rb +1 -1
  342. data/spec/integration/test/test_helper_spec.rb +28 -0
  343. data/spec/integration/transaction/report_spec.rb +16 -0
  344. data/spec/integration/transaction_spec.rb +11 -0
  345. data/spec/integration/type/file_spec.rb +194 -4
  346. data/spec/integration/type/package_spec.rb +5 -1
  347. data/spec/integration/type/tidy_spec.rb +21 -9
  348. data/spec/integration/util/execution_spec.rb +22 -0
  349. data/spec/integration/util/windows/principal_spec.rb +90 -4
  350. data/spec/integration/util/windows/process_spec.rb +31 -0
  351. data/spec/integration/util/windows/security_spec.rb +6 -6
  352. data/spec/integration/util/windows/user_spec.rb +1 -1
  353. data/spec/integration/util_spec.rb +49 -27
  354. data/spec/lib/puppet_spec/compiler.rb +17 -0
  355. data/spec/lib/puppet_spec/files.rb +2 -2
  356. data/spec/lib/puppet_spec/pops.rb +13 -0
  357. data/spec/shared_behaviours/iterative_functions.rb +1 -1
  358. data/spec/shared_contexts/types_setup.rb +96 -0
  359. data/spec/unit/agent_spec.rb +1 -0
  360. data/spec/unit/application/agent_spec.rb +10 -0
  361. data/spec/unit/application/apply_spec.rb +9 -0
  362. data/spec/unit/configurer/downloader_spec.rb +5 -5
  363. data/spec/unit/configurer_spec.rb +271 -39
  364. data/spec/unit/data_providers/hiera_interpolation_spec.rb +57 -0
  365. data/spec/unit/defaults_spec.rb +15 -0
  366. data/spec/unit/environments_spec.rb +24 -4
  367. data/spec/unit/face/parser_spec.rb +43 -2
  368. data/spec/unit/file_serving/http_metadata_spec.rb +85 -0
  369. data/spec/unit/file_serving/metadata_spec.rb +50 -0
  370. data/spec/unit/file_serving/terminus_selector_spec.rb +12 -2
  371. data/spec/unit/file_system_spec.rb +26 -0
  372. data/spec/unit/functions/assert_type_spec.rb +36 -2
  373. data/spec/unit/functions/defined_spec.rb +2 -2
  374. data/spec/unit/functions/epp_spec.rb +11 -3
  375. data/spec/unit/functions/lookup_spec.rb +58 -13
  376. data/spec/unit/functions/regsubst_spec.rb +1 -1
  377. data/spec/unit/functions/reverse_each_spec.rb +108 -0
  378. data/spec/unit/functions/step_spec.rb +113 -0
  379. data/spec/unit/functions/type_spec.rb +35 -0
  380. data/spec/unit/functions4_spec.rb +61 -5
  381. data/spec/unit/indirector/catalog/compiler_spec.rb +705 -4
  382. data/spec/unit/indirector/file_bucket_file/file_spec.rb +1 -1
  383. data/spec/unit/indirector/indirection_spec.rb +1 -1
  384. data/spec/unit/info_service_spec.rb +94 -32
  385. data/spec/unit/module_spec.rb +14 -0
  386. data/spec/unit/module_tool/applications/builder_spec.rb +4 -4
  387. data/spec/unit/network/authstore_spec.rb +1 -1
  388. data/spec/unit/network/http/connection_spec.rb +1 -0
  389. data/spec/unit/network/http/pool_spec.rb +30 -0
  390. data/spec/unit/node_spec.rb +1 -1
  391. data/spec/unit/parser/compiler_spec.rb +16 -0
  392. data/spec/unit/parser/scope_spec.rb +28 -11
  393. data/spec/unit/pops/evaluator/access_ops_spec.rb +3 -3
  394. data/spec/unit/pops/evaluator/comparison_ops_spec.rb +3 -0
  395. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +7 -1
  396. data/spec/unit/pops/evaluator/evaluator_rspec_helper.rb +4 -4
  397. data/spec/unit/pops/evaluator/json_strict_literal_evaluator_spec.rb +63 -0
  398. data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +6 -0
  399. data/spec/unit/pops/loaders/dependency_loader_spec.rb +53 -0
  400. data/spec/unit/pops/loaders/loaders_spec.rb +44 -1
  401. data/spec/unit/pops/parser/lexer2_spec.rb +112 -3
  402. data/spec/unit/pops/parser/parse_calls_spec.rb +8 -0
  403. data/spec/unit/pops/parser/parser_spec.rb +10 -0
  404. data/spec/unit/pops/parser/source_pos_adapter_spec.rb +26 -0
  405. data/spec/unit/pops/types/iterable_spec.rb +262 -0
  406. data/spec/unit/pops/types/recursion_guard_spec.rb +91 -0
  407. data/spec/unit/pops/types/type_acceptor_spec.rb +105 -0
  408. data/spec/unit/pops/types/type_asserter_spec.rb +43 -0
  409. data/spec/unit/pops/types/type_calculator_spec.rb +275 -373
  410. data/spec/unit/pops/types/type_formatter_spec.rb +280 -0
  411. data/spec/unit/pops/types/type_mismatch_describer_spec.rb +152 -0
  412. data/spec/unit/pops/types/type_parser_spec.rb +58 -13
  413. data/spec/unit/pops/types/types_spec.rb +241 -0
  414. data/spec/unit/pops/validator/validator_spec.rb +100 -43
  415. data/spec/unit/provider/cron/parsed_spec.rb +1 -0
  416. data/spec/unit/provider/macauthorization_spec.rb +5 -2
  417. data/spec/unit/provider/nameservice/directoryservice_spec.rb +14 -19
  418. data/spec/unit/provider/package/appdmg_spec.rb +3 -3
  419. data/spec/unit/provider/package/dnf_spec.rb +16 -0
  420. data/spec/unit/provider/package/pip3_spec.rb +60 -42
  421. data/spec/unit/provider/package/pip_spec.rb +47 -34
  422. data/spec/unit/provider/package/pkgdmg_spec.rb +18 -9
  423. data/spec/unit/provider/package/pkgng_spec.rb +4 -2
  424. data/spec/unit/provider/package/yum_spec.rb +11 -0
  425. data/spec/unit/provider/package/zypper_spec.rb +14 -0
  426. data/spec/unit/provider/service/launchd_spec.rb +17 -35
  427. data/spec/unit/provider/service/systemd_spec.rb +7 -0
  428. data/spec/unit/provider/sshkey/parsed_spec.rb +20 -19
  429. data/spec/unit/provider/user/directoryservice_spec.rb +40 -59
  430. data/spec/unit/resource/capability_finder_spec.rb +28 -15
  431. data/spec/unit/resource/catalog_spec.rb +33 -1
  432. data/spec/unit/resource/type_spec.rb +149 -7
  433. data/spec/unit/resource_spec.rb +96 -57
  434. data/spec/unit/settings/environment_conf_spec.rb +18 -1
  435. data/spec/unit/ssl/certificate_revocation_list_spec.rb +3 -3
  436. data/spec/unit/transaction/report_spec.rb +27 -0
  437. data/spec/unit/transaction/resource_harness_spec.rb +0 -47
  438. data/spec/unit/transaction_spec.rb +5 -0
  439. data/spec/unit/type/file/checksum_spec.rb +6 -0
  440. data/spec/unit/type/file/checksum_value_spec.rb +286 -0
  441. data/spec/unit/type/file/content_spec.rb +12 -193
  442. data/spec/unit/type/file/source_spec.rb +211 -119
  443. data/spec/unit/type/file_spec.rb +133 -34
  444. data/spec/unit/type/interface_spec.rb +32 -0
  445. data/spec/unit/type/macauthorization_spec.rb +4 -1
  446. data/spec/unit/type/yumrepo_spec.rb +2 -2
  447. data/spec/unit/util/filetype_spec.rb +1 -1
  448. data/spec/unit/util/http_proxy_spec.rb +2 -2
  449. data/spec/unit/util/log/destinations_spec.rb +0 -2
  450. data/spec/unit/util/logging_spec.rb +69 -0
  451. data/spec/unit/util/multi_match_spec.rb +39 -0
  452. data/spec/unit/util/network_device/cisco/device_spec.rb +253 -216
  453. data/spec/unit/util/network_device/transport/telnet_spec.rb +60 -58
  454. data/spec/unit/util/plist_spec.rb +110 -0
  455. data/spec/unit/util/resource_template_spec.rb +2 -2
  456. data/spec/unit/util/run_mode_spec.rb +27 -3
  457. data/spec/unit/util/windows/adsi_spec.rb +4 -4
  458. data/spec/unit/util/windows/api_types_spec.rb +42 -0
  459. data/spec/unit/util/windows/security_descriptor_spec.rb +3 -3
  460. data/spec/unit/util/windows/sid_spec.rb +1 -1
  461. data/spec/unit/util_spec.rb +123 -13
  462. data/tasks/cfpropertylist.rake +15 -0
  463. metadata +114 -26
  464. data/lib/puppet/vendor/load_plist.rb +0 -1
  465. data/lib/puppet/vendor/plist/CHANGELOG +0 -82
  466. data/lib/puppet/vendor/plist/MIT-LICENSE +0 -21
  467. data/lib/puppet/vendor/plist/PUPPET_README.md +0 -6
  468. data/lib/puppet/vendor/plist/README +0 -36
  469. data/lib/puppet/vendor/plist/Rakefile +0 -144
  470. data/lib/puppet/vendor/plist/docs/USAGE +0 -104
  471. data/lib/puppet/vendor/plist/docs/jamis-template.rb +0 -591
  472. data/lib/puppet/vendor/plist/lib/plist.rb +0 -22
  473. data/lib/puppet/vendor/plist/lib/plist/generator.rb +0 -224
  474. data/lib/puppet/vendor/plist/lib/plist/parser.rb +0 -225
  475. data/lib/puppet/vendor/plist/test/assets/AlbumData.xml +0 -203
  476. data/lib/puppet/vendor/plist/test/assets/Cookies.plist +0 -104
  477. data/lib/puppet/vendor/plist/test/assets/commented.plist +0 -9
  478. data/lib/puppet/vendor/plist/test/assets/example_data.bin +0 -0
  479. data/lib/puppet/vendor/plist/test/assets/example_data.jpg +0 -0
  480. data/lib/puppet/vendor/plist/test/assets/example_data.plist +0 -259
  481. data/lib/puppet/vendor/plist/test/assets/test_data_elements.plist +0 -24
  482. data/lib/puppet/vendor/plist/test/assets/test_empty_key.plist +0 -13
  483. data/lib/puppet/vendor/plist/test/test_data_elements.rb +0 -115
  484. data/lib/puppet/vendor/plist/test/test_generator.rb +0 -59
  485. data/lib/puppet/vendor/plist/test/test_generator_basic_types.rb +0 -58
  486. data/lib/puppet/vendor/plist/test/test_generator_collections.rb +0 -82
  487. data/lib/puppet/vendor/plist/test/test_parser.rb +0 -90
@@ -0,0 +1,39 @@
1
+ #! /usr/bin/env ruby
2
+ require 'spec_helper'
3
+ require 'puppet/util/multi_match'
4
+
5
+ describe "The Puppet::Util::MultiMatch" do
6
+ let(:not_nil) { Puppet::Util::MultiMatch::NOT_NIL }
7
+ let(:mm) { Puppet::Util::MultiMatch }
8
+
9
+ it "matches against not nil" do
10
+ expect(not_nil === 3).to be(true)
11
+ end
12
+
13
+ it "matches against multiple values" do
14
+ expect(mm.new(not_nil, not_nil) === [3, 3]).to be(true)
15
+ end
16
+
17
+ it "matches each value using ===" do
18
+ expect(mm.new(3, 3.14) === [Integer, Float]).to be(true)
19
+ end
20
+
21
+ it "matches are commutative" do
22
+ expect(mm.new(3, 3.14) === mm.new(Integer, Float)).to be(true)
23
+ expect(mm.new(Integer, Float) === mm.new(3, 3.14)).to be(true)
24
+ end
25
+
26
+ it "has TUPLE constant for match of array of two non nil values" do
27
+ expect(mm::TUPLE === [3, 3]).to be(true)
28
+ end
29
+
30
+ it "has TRIPLE constant for match of array of two non nil values" do
31
+ expect(mm::TRIPLE === [3, 3, 3]).to be(true)
32
+ end
33
+
34
+ it "considers length of array of values when matching" do
35
+ expect(mm.new(not_nil, not_nil) === [6, 6, 6]).to be(false)
36
+ expect(mm.new(not_nil, not_nil) === [6]).to be(false)
37
+ end
38
+
39
+ end
@@ -4,240 +4,241 @@ require 'spec_helper'
4
4
  require 'puppet/util/network_device/cisco/device'
5
5
  require 'puppet/util/network_device/transport/telnet'
6
6
 
7
- describe Puppet::Util::NetworkDevice::Cisco::Device do
8
- before(:each) do
9
- @transport = stub_everything 'transport', :is_a? => true, :command => ""
10
- @cisco = Puppet::Util::NetworkDevice::Cisco::Device.new("telnet://user:password@localhost:23/")
11
- @cisco.transport = @transport
12
- end
13
-
14
- describe "when creating the device" do
15
- it "should find the enable password from the url" do
16
- cisco = Puppet::Util::NetworkDevice::Cisco::Device.new("telnet://user:password@localhost:23/?enable=enable_password")
17
- expect(cisco.enable_password).to eq("enable_password")
7
+ if Puppet.features.telnet?
8
+ describe Puppet::Util::NetworkDevice::Cisco::Device do
9
+ before(:each) do
10
+ @transport = stub_everything 'transport', :is_a? => true, :command => ""
11
+ @cisco = Puppet::Util::NetworkDevice::Cisco::Device.new("telnet://user:password@localhost:23/")
12
+ @cisco.transport = @transport
18
13
  end
19
14
 
20
- describe "decoding the enable password" do
21
- it "should not parse a password if no query is given" do
22
- cisco = described_class.new("telnet://user:password@localhost:23")
23
- expect(cisco.enable_password).to be_nil
15
+ describe "when creating the device" do
16
+ it "should find the enable password from the url" do
17
+ cisco = Puppet::Util::NetworkDevice::Cisco::Device.new("telnet://user:password@localhost:23/?enable=enable_password")
18
+ expect(cisco.enable_password).to eq("enable_password")
24
19
  end
25
20
 
26
- it "should not parse a password if no enable param is given" do
27
- cisco = described_class.new("telnet://user:password@localhost:23/?notenable=notapassword")
28
- expect(cisco.enable_password).to be_nil
29
- end
30
- it "should decode sharps" do
31
- cisco = described_class.new("telnet://user:password@localhost:23/?enable=enable_password%23with_a_sharp")
32
- expect(cisco.enable_password).to eq("enable_password#with_a_sharp")
21
+ describe "decoding the enable password" do
22
+ it "should not parse a password if no query is given" do
23
+ cisco = described_class.new("telnet://user:password@localhost:23")
24
+ expect(cisco.enable_password).to be_nil
25
+ end
26
+
27
+ it "should not parse a password if no enable param is given" do
28
+ cisco = described_class.new("telnet://user:password@localhost:23/?notenable=notapassword")
29
+ expect(cisco.enable_password).to be_nil
30
+ end
31
+ it "should decode sharps" do
32
+ cisco = described_class.new("telnet://user:password@localhost:23/?enable=enable_password%23with_a_sharp")
33
+ expect(cisco.enable_password).to eq("enable_password#with_a_sharp")
34
+ end
35
+
36
+ it "should decode spaces" do
37
+ cisco = described_class.new("telnet://user:password@localhost:23/?enable=enable_password%20with_a_space")
38
+ expect(cisco.enable_password).to eq("enable_password with_a_space")
39
+ end
40
+
41
+ it "should only use the query parameter" do
42
+ cisco = described_class.new("telnet://enable=:password@localhost:23/?enable=enable_password&notenable=notapassword")
43
+ expect(cisco.enable_password).to eq("enable_password")
44
+ end
33
45
  end
34
46
 
35
- it "should decode spaces" do
36
- cisco = described_class.new("telnet://user:password@localhost:23/?enable=enable_password%20with_a_space")
37
- expect(cisco.enable_password).to eq("enable_password with_a_space")
47
+ it "should find the enable password from the options" do
48
+ cisco = Puppet::Util::NetworkDevice::Cisco::Device.new("telnet://user:password@localhost:23/?enable=enable_password", :enable_password => "mypass")
49
+ expect(cisco.enable_password).to eq("mypass")
38
50
  end
39
51
 
40
- it "should only use the query parameter" do
41
- cisco = described_class.new("telnet://enable=:password@localhost:23/?enable=enable_password&notenable=notapassword")
42
- expect(cisco.enable_password).to eq("enable_password")
52
+ it "should find the debug mode from the options" do
53
+ Puppet::Util::NetworkDevice::Transport::Telnet.expects(:new).with(true).returns(@transport)
54
+ cisco = Puppet::Util::NetworkDevice::Cisco::Device.new("telnet://user:password@localhost:23", :debug => true)
43
55
  end
44
- end
45
56
 
46
- it "should find the enable password from the options" do
47
- cisco = Puppet::Util::NetworkDevice::Cisco::Device.new("telnet://user:password@localhost:23/?enable=enable_password", :enable_password => "mypass")
48
- expect(cisco.enable_password).to eq("mypass")
49
- end
50
-
51
- it "should find the debug mode from the options" do
52
- Puppet::Util::NetworkDevice::Transport::Telnet.expects(:new).with(true).returns(@transport)
53
- cisco = Puppet::Util::NetworkDevice::Cisco::Device.new("telnet://user:password@localhost:23", :debug => true)
54
- end
55
-
56
- it "should set the debug mode to nil by default" do
57
- Puppet::Util::NetworkDevice::Transport::Telnet.expects(:new).with(nil).returns(@transport)
58
- cisco = Puppet::Util::NetworkDevice::Cisco::Device.new("telnet://user:password@localhost:23")
59
- end
60
- end
61
-
62
- describe "when connecting to the physical device" do
63
- it "should connect to the transport" do
64
- @transport.expects(:connect)
65
- @cisco.command
66
- end
67
-
68
- it "should attempt to login" do
69
- @cisco.expects(:login)
70
- @cisco.command
71
- end
72
-
73
- it "should tell the device to not page" do
74
- @transport.expects(:command).with("terminal length 0")
75
- @cisco.command
76
- end
77
-
78
- it "should enter the enable password if returned prompt is not privileged" do
79
- @transport.stubs(:command).yields("Switch>").returns("")
80
- @cisco.expects(:enable)
81
- @cisco.command
82
- end
83
-
84
- it "should find device capabilities" do
85
- @cisco.expects(:find_capabilities)
86
- @cisco.command
57
+ it "should set the debug mode to nil by default" do
58
+ Puppet::Util::NetworkDevice::Transport::Telnet.expects(:new).with(nil).returns(@transport)
59
+ cisco = Puppet::Util::NetworkDevice::Cisco::Device.new("telnet://user:password@localhost:23")
60
+ end
87
61
  end
88
62
 
89
- it "should execute given command" do
90
- @transport.expects(:command).with("mycommand")
91
- @cisco.command("mycommand")
92
- end
63
+ describe "when connecting to the physical device" do
64
+ it "should connect to the transport" do
65
+ @transport.expects(:connect)
66
+ @cisco.command
67
+ end
93
68
 
94
- it "should yield to the command block if one is provided" do
95
- @transport.expects(:command).with("mycommand")
96
- @cisco.command do |c|
97
- c.command("mycommand")
69
+ it "should attempt to login" do
70
+ @cisco.expects(:login)
71
+ @cisco.command
98
72
  end
99
- end
100
73
 
101
- it "should close the device transport" do
102
- @transport.expects(:close)
103
- @cisco.command
104
- end
74
+ it "should tell the device to not page" do
75
+ @transport.expects(:command).with("terminal length 0")
76
+ @cisco.command
77
+ end
105
78
 
106
- describe "when login in" do
107
- it "should not login if transport handles login" do
108
- @transport.expects(:handles_login?).returns(true)
109
- @transport.expects(:command).never
110
- @transport.expects(:expect).never
111
- @cisco.login
79
+ it "should enter the enable password if returned prompt is not privileged" do
80
+ @transport.stubs(:command).yields("Switch>").returns("")
81
+ @cisco.expects(:enable)
82
+ @cisco.command
112
83
  end
113
84
 
114
- it "should send username if one has been provided" do
115
- @transport.expects(:command).with("user", :prompt => /^Password:/)
116
- @cisco.login
85
+ it "should find device capabilities" do
86
+ @cisco.expects(:find_capabilities)
87
+ @cisco.command
117
88
  end
118
89
 
119
- it "should send password after the username" do
120
- @transport.expects(:command).with("user", :prompt => /^Password:/)
121
- @transport.expects(:command).with("password")
122
- @cisco.login
90
+ it "should execute given command" do
91
+ @transport.expects(:command).with("mycommand")
92
+ @cisco.command("mycommand")
123
93
  end
124
94
 
125
- it "should expect the Password: prompt if no user was sent" do
126
- @cisco.url.user = ''
127
- @transport.expects(:expect).with(/^Password:/)
128
- @transport.expects(:command).with("password")
129
- @cisco.login
95
+ it "should yield to the command block if one is provided" do
96
+ @transport.expects(:command).with("mycommand")
97
+ @cisco.command do |c|
98
+ c.command("mycommand")
99
+ end
130
100
  end
131
- end
132
101
 
133
- describe "when entering enable password" do
134
- it "should raise an error if no enable password has been set" do
135
- @cisco.enable_password = nil
136
- expect{ @cisco.enable }.to raise_error(RuntimeError, /Can't issue "enable" to enter privileged/)
102
+ it "should close the device transport" do
103
+ @transport.expects(:close)
104
+ @cisco.command
137
105
  end
138
106
 
139
- it "should send the enable command and expect an enable prompt" do
140
- @cisco.enable_password = 'mypass'
141
- @transport.expects(:command).with("enable", :prompt => /^Password:/)
142
- @cisco.enable
107
+ describe "when login in" do
108
+ it "should not login if transport handles login" do
109
+ @transport.expects(:handles_login?).returns(true)
110
+ @transport.expects(:command).never
111
+ @transport.expects(:expect).never
112
+ @cisco.login
113
+ end
114
+
115
+ it "should send username if one has been provided" do
116
+ @transport.expects(:command).with("user", :prompt => /^Password:/)
117
+ @cisco.login
118
+ end
119
+
120
+ it "should send password after the username" do
121
+ @transport.expects(:command).with("user", :prompt => /^Password:/)
122
+ @transport.expects(:command).with("password")
123
+ @cisco.login
124
+ end
125
+
126
+ it "should expect the Password: prompt if no user was sent" do
127
+ @cisco.url.user = ''
128
+ @transport.expects(:expect).with(/^Password:/)
129
+ @transport.expects(:command).with("password")
130
+ @cisco.login
131
+ end
143
132
  end
144
133
 
145
- it "should send the enable password" do
146
- @cisco.enable_password = 'mypass'
147
- @transport.stubs(:command).with("enable", :prompt => /^Password:/)
148
- @transport.expects(:command).with("mypass")
149
- @cisco.enable
134
+ describe "when entering enable password" do
135
+ it "should raise an error if no enable password has been set" do
136
+ @cisco.enable_password = nil
137
+ expect{ @cisco.enable }.to raise_error(RuntimeError, /Can't issue "enable" to enter privileged/)
138
+ end
139
+
140
+ it "should send the enable command and expect an enable prompt" do
141
+ @cisco.enable_password = 'mypass'
142
+ @transport.expects(:command).with("enable", :prompt => /^Password:/)
143
+ @cisco.enable
144
+ end
145
+
146
+ it "should send the enable password" do
147
+ @cisco.enable_password = 'mypass'
148
+ @transport.stubs(:command).with("enable", :prompt => /^Password:/)
149
+ @transport.expects(:command).with("mypass")
150
+ @cisco.enable
151
+ end
150
152
  end
151
153
  end
152
- end
153
154
 
154
- describe "when finding network device capabilities" do
155
- it "should try to execute sh vlan brief" do
156
- @transport.expects(:command).with("sh vlan brief").returns("")
157
- @cisco.find_capabilities
158
- end
155
+ describe "when finding network device capabilities" do
156
+ it "should try to execute sh vlan brief" do
157
+ @transport.expects(:command).with("sh vlan brief").returns("")
158
+ @cisco.find_capabilities
159
+ end
159
160
 
160
- it "should detect errors" do
161
- @transport.stubs(:command).with("sh vlan brief").returns(<<eos)
161
+ it "should detect errors" do
162
+ @transport.stubs(:command).with("sh vlan brief").returns(<<eos)
162
163
  Switch#sh vlan brief
163
164
  % Ambiguous command: "sh vlan brief"
164
165
  Switch#
165
166
  eos
166
167
 
167
- @cisco.find_capabilities
168
- expect(@cisco).not_to be_support_vlan_brief
168
+ @cisco.find_capabilities
169
+ expect(@cisco).not_to be_support_vlan_brief
170
+ end
169
171
  end
170
- end
171
-
172
172
 
173
- {
174
- "Fa 0/1" => "FastEthernet0/1",
175
- "Fa0/1" => "FastEthernet0/1",
176
- "FastEth 0/1" => "FastEthernet0/1",
177
- "Gi1" => "GigabitEthernet1",
178
- "Te2" => "TenGigabitEthernet2",
179
- "Di9" => "Dialer9",
180
- "Ethernet 0/0/1" => "Ethernet0/0/1",
181
- "E0" => "Ethernet0",
182
- "ATM 0/1.1" => "ATM0/1.1",
183
- "VLAN99" => "VLAN99"
184
- }.each do |input,expected|
185
- it "should canonicalize #{input} to #{expected}" do
186
- expect(@cisco.canonalize_ifname(input)).to eq(expected)
187
- end
188
- end
189
173
 
190
- describe "when updating device vlans" do
191
- describe "when removing a vlan" do
192
- it "should issue the no vlan command" do
193
- @transport.expects(:command).with("no vlan 200")
194
- @cisco.update_vlan("200", {:ensure => :present, :name => "200"}, { :ensure=> :absent})
174
+ {
175
+ "Fa 0/1" => "FastEthernet0/1",
176
+ "Fa0/1" => "FastEthernet0/1",
177
+ "FastEth 0/1" => "FastEthernet0/1",
178
+ "Gi1" => "GigabitEthernet1",
179
+ "Te2" => "TenGigabitEthernet2",
180
+ "Di9" => "Dialer9",
181
+ "Ethernet 0/0/1" => "Ethernet0/0/1",
182
+ "E0" => "Ethernet0",
183
+ "ATM 0/1.1" => "ATM0/1.1",
184
+ "VLAN99" => "VLAN99"
185
+ }.each do |input,expected|
186
+ it "should canonicalize #{input} to #{expected}" do
187
+ expect(@cisco.canonalize_ifname(input)).to eq(expected)
195
188
  end
196
189
  end
197
190
 
198
- describe "when updating a vlan" do
199
- it "should issue the vlan command to enter global vlan modifications" do
200
- @transport.expects(:command).with("vlan 200")
201
- @cisco.update_vlan("200", {:ensure => :present, :name => "200"}, { :ensure=> :present, :name => "200"})
191
+ describe "when updating device vlans" do
192
+ describe "when removing a vlan" do
193
+ it "should issue the no vlan command" do
194
+ @transport.expects(:command).with("no vlan 200")
195
+ @cisco.update_vlan("200", {:ensure => :present, :name => "200"}, { :ensure=> :absent})
196
+ end
202
197
  end
203
198
 
204
- it "should issue the name command to modify the vlan description" do
205
- @transport.expects(:command).with("name myvlan")
206
- @cisco.update_vlan("200", {:ensure => :present, :name => "200"}, { :ensure=> :present, :name => "200", :description => "myvlan"})
199
+ describe "when updating a vlan" do
200
+ it "should issue the vlan command to enter global vlan modifications" do
201
+ @transport.expects(:command).with("vlan 200")
202
+ @cisco.update_vlan("200", {:ensure => :present, :name => "200"}, { :ensure=> :present, :name => "200"})
203
+ end
204
+
205
+ it "should issue the name command to modify the vlan description" do
206
+ @transport.expects(:command).with("name myvlan")
207
+ @cisco.update_vlan("200", {:ensure => :present, :name => "200"}, { :ensure=> :present, :name => "200", :description => "myvlan"})
208
+ end
207
209
  end
208
210
  end
209
- end
210
211
 
211
- describe "when parsing interface" do
212
+ describe "when parsing interface" do
212
213
 
213
- it "should parse interface output" do
214
- @cisco.expects(:parse_interface).returns({ :ensure => :present })
214
+ it "should parse interface output" do
215
+ @cisco.expects(:parse_interface).returns({ :ensure => :present })
215
216
 
216
- expect(@cisco.interface("FastEthernet0/1")).to eq({ :ensure => :present })
217
- end
217
+ expect(@cisco.interface("FastEthernet0/1")).to eq({ :ensure => :present })
218
+ end
218
219
 
219
- it "should parse trunking and merge results" do
220
- @cisco.stubs(:parse_interface).returns({ :ensure => :present })
221
- @cisco.expects(:parse_trunking).returns({ :native_vlan => "100" })
220
+ it "should parse trunking and merge results" do
221
+ @cisco.stubs(:parse_interface).returns({ :ensure => :present })
222
+ @cisco.expects(:parse_trunking).returns({ :native_vlan => "100" })
222
223
 
223
- expect(@cisco.interface("FastEthernet0/1")).to eq({ :ensure => :present, :native_vlan => "100" })
224
- end
224
+ expect(@cisco.interface("FastEthernet0/1")).to eq({ :ensure => :present, :native_vlan => "100" })
225
+ end
225
226
 
226
- it "should return an absent interface if parse_interface returns nothing" do
227
- @cisco.stubs(:parse_interface).returns({})
227
+ it "should return an absent interface if parse_interface returns nothing" do
228
+ @cisco.stubs(:parse_interface).returns({})
228
229
 
229
- expect(@cisco.interface("FastEthernet0/1")).to eq({ :ensure => :absent })
230
- end
230
+ expect(@cisco.interface("FastEthernet0/1")).to eq({ :ensure => :absent })
231
+ end
231
232
 
232
- it "should parse ip address information and merge results" do
233
- @cisco.stubs(:parse_interface).returns({ :ensure => :present })
234
- @cisco.expects(:parse_interface_config).returns({ :ipaddress => [24,IPAddr.new('192.168.0.24'), nil] })
233
+ it "should parse ip address information and merge results" do
234
+ @cisco.stubs(:parse_interface).returns({ :ensure => :present })
235
+ @cisco.expects(:parse_interface_config).returns({ :ipaddress => [24,IPAddr.new('192.168.0.24'), nil] })
235
236
 
236
- expect(@cisco.interface("FastEthernet0/1")).to eq({ :ensure => :present, :ipaddress => [24,IPAddr.new('192.168.0.24'), nil] })
237
- end
237
+ expect(@cisco.interface("FastEthernet0/1")).to eq({ :ensure => :present, :ipaddress => [24,IPAddr.new('192.168.0.24'), nil] })
238
+ end
238
239
 
239
- it "should parse the sh interface command" do
240
- @transport.stubs(:command).with("sh interface FastEthernet0/1").returns(<<eos)
240
+ it "should parse the sh interface command" do
241
+ @transport.stubs(:command).with("sh interface FastEthernet0/1").returns(<<eos)
241
242
  Switch#sh interfaces FastEthernet 0/1
242
243
  FastEthernet0/1 is down, line protocol is down
243
244
  Hardware is Fast Ethernet, address is 00d0.bbe2.19c1 (bia 00d0.bbe2.19c1)
@@ -266,12 +267,12 @@ FastEthernet0/1 is down, line protocol is down
266
267
  Switch#
267
268
  eos
268
269
 
269
- expect(@cisco.parse_interface("FastEthernet0/1")).to eq({ :ensure => :absent, :duplex => :auto, :speed => :auto })
270
- end
270
+ expect(@cisco.parse_interface("FastEthernet0/1")).to eq({ :ensure => :absent, :duplex => :auto, :speed => :auto })
271
+ end
271
272
 
272
- it "should be able to parse the sh vlan brief command output" do
273
- @cisco.stubs(:support_vlan_brief?).returns(true)
274
- @transport.stubs(:command).with("sh vlan brief").returns(<<eos)
273
+ it "should be able to parse the sh vlan brief command output" do
274
+ @cisco.stubs(:support_vlan_brief?).returns(true)
275
+ @transport.stubs(:command).with("sh vlan brief").returns(<<eos)
275
276
  Switch#sh vlan brief
276
277
  VLAN Name Status Ports
277
278
  ---- -------------------------------- --------- -------------------------------
@@ -285,11 +286,11 @@ VLAN Name Status Ports
285
286
  Switch#
286
287
  eos
287
288
 
288
- expect(@cisco.parse_vlans).to eq({"100"=>{:status=>"active", :interfaces=>["FastEthernet0/1", "FastEthernet0/2"], :description=>"management", :name=>"100"}, "1"=>{:status=>"active", :interfaces=>["FastEthernet0/3", "FastEthernet0/4", "FastEthernet0/5", "FastEthernet0/6", "FastEthernet0/7", "FastEthernet0/8", "FastEthernet0/9", "FastEthernet0/10", "FastEthernet0/11", "FastEthernet0/12", "FastEthernet0/13", "FastEthernet0/14", "FastEthernet0/15", "FastEthernet0/16", "FastEthernet0/17", "FastEthernet0/18", "FastEthernet0/23", "FastEthernet0/24"], :description=>"default", :name=>"1"}, "10"=>{:status=>"active", :interfaces=>[], :description=>"VLAN0010", :name=>"10"}})
289
- end
289
+ expect(@cisco.parse_vlans).to eq({"100"=>{:status=>"active", :interfaces=>["FastEthernet0/1", "FastEthernet0/2"], :description=>"management", :name=>"100"}, "1"=>{:status=>"active", :interfaces=>["FastEthernet0/3", "FastEthernet0/4", "FastEthernet0/5", "FastEthernet0/6", "FastEthernet0/7", "FastEthernet0/8", "FastEthernet0/9", "FastEthernet0/10", "FastEthernet0/11", "FastEthernet0/12", "FastEthernet0/13", "FastEthernet0/14", "FastEthernet0/15", "FastEthernet0/16", "FastEthernet0/17", "FastEthernet0/18", "FastEthernet0/23", "FastEthernet0/24"], :description=>"default", :name=>"1"}, "10"=>{:status=>"active", :interfaces=>[], :description=>"VLAN0010", :name=>"10"}})
290
+ end
290
291
 
291
- it "should parse trunk switchport information" do
292
- @transport.stubs(:command).with("sh interface FastEthernet0/21 switchport").returns(<<eos)
292
+ it "should parse trunk switchport information" do
293
+ @transport.stubs(:command).with("sh interface FastEthernet0/21 switchport").returns(<<eos)
293
294
  Switch#sh interfaces FastEthernet 0/21 switchport
294
295
  Name: Fa0/21
295
296
  Switchport: Enabled
@@ -312,20 +313,20 @@ Self Loopback: No
312
313
  Switch#
313
314
  eos
314
315
 
315
- expect(@cisco.parse_trunking("FastEthernet0/21")).to eq({ :mode => :trunk, :encapsulation => :dot1q, :allowed_trunk_vlans=>:all, })
316
- end
316
+ expect(@cisco.parse_trunking("FastEthernet0/21")).to eq({ :mode => :trunk, :encapsulation => :dot1q, :native_vlan => "1", :allowed_trunk_vlans=>:all, })
317
+ end
317
318
 
318
- it "should parse trunk switchport information with allowed vlans" do
319
- @transport.stubs(:command).with("sh interface GigabitEthernet 0/1 switchport").returns(<<eos)
319
+ it "should parse dynamic desirable switchport information with native and allowed vlans" do
320
+ @transport.stubs(:command).with("sh interface GigabitEthernet 0/1 switchport").returns(<<eos)
320
321
  c2960#sh interfaces GigabitEthernet 0/1 switchport
321
322
  Name: Gi0/1
322
323
  Switchport: Enabled
323
- Administrative Mode: trunk
324
+ Administrative Mode: dynamic desirable
324
325
  Operational Mode: trunk
325
326
  Administrative Trunking Encapsulation: dot1q
326
327
  Operational Trunking Encapsulation: dot1q
327
328
  Negotiation of Trunking: On
328
- Access Mode VLAN: 1 (default)
329
+ Access Mode VLAN: 100 (SHDSL)
329
330
  Trunking Native Mode VLAN: 1 (default)
330
331
  Administrative Native VLAN tagging: enabled
331
332
  Voice VLAN: none
@@ -350,11 +351,11 @@ Appliance trust: none
350
351
  c2960#
351
352
  eos
352
353
 
353
- expect(@cisco.parse_trunking("GigabitEthernet 0/1")).to eq({ :mode => :trunk, :encapsulation => :dot1q, :allowed_trunk_vlans=>"1,99", })
354
- end
354
+ expect(@cisco.parse_trunking("GigabitEthernet 0/1")).to eq({ :mode => "dynamic desirable", :encapsulation => :dot1q, :access_vlan => "100", :native_vlan => "1", :allowed_trunk_vlans=>"1,99", })
355
+ end
355
356
 
356
- it "should parse access switchport information" do
357
- @transport.stubs(:command).with("sh interface FastEthernet0/1 switchport").returns(<<eos)
357
+ it "should parse access switchport information" do
358
+ @transport.stubs(:command).with("sh interface FastEthernet0/1 switchport").returns(<<eos)
358
359
  Switch#sh interfaces FastEthernet 0/1 switchport
359
360
  Name: Fa0/1
360
361
  Switchport: Enabled
@@ -376,11 +377,47 @@ Self Loopback: No
376
377
  Switch#
377
378
  eos
378
379
 
379
- expect(@cisco.parse_trunking("FastEthernet0/1")).to eq({ :mode => :access, :native_vlan => "100" })
380
- end
380
+ expect(@cisco.parse_trunking("FastEthernet0/1")).to eq({ :mode => :access, :access_vlan => "100" })
381
+ end
381
382
 
382
- it "should parse ip addresses" do
383
- @transport.stubs(:command).with("sh running-config interface Vlan 1 | begin interface").returns(<<eos)
383
+ it "should parse auto/negotiate switchport information" do
384
+ @transport.stubs(:command).with("sh interface FastEthernet0/24 switchport").returns(<<eos)
385
+ Switch#sh interfaces FastEthernet 0/24 switchport
386
+ Name: Fa0/24
387
+ Switchport: Enabled
388
+ Administrative mode: dynamic auto
389
+ Operational Mode: static access
390
+ Administrative Trunking Encapsulation: negotiate
391
+ Operational Trunking Encapsulation: native
392
+ Negotiation of Trunking: On
393
+ Access Mode VLAN: 1 (default)
394
+ Trunking Native Mode VLAN: 2 (default)
395
+ Administrative Native VLAN tagging: enabled
396
+ Voice VLAN: none
397
+ Administrative private-vlan host-association: none
398
+ Administrative private-vlan mapping: none
399
+ Administrative private-vlan trunk native VLAN: none
400
+ Administrative private-vlan trunk Native VLAN tagging: enabled
401
+ Administrative private-vlan trunk encapsulation: dot1q
402
+ Administrative private-vlan trunk normal VLANs: none
403
+ Administrative private-vlan trunk private VLANs: none
404
+ Operational private-vlan: none
405
+ Trunking VLANs Enabled: ALL
406
+ Pruning VLANs Enabled: 2-1001
407
+ Capture Mode Disabled
408
+ Capture VLANs Allowed: ALL
409
+
410
+ Protected: false
411
+ Unknown unicast blocked: disabled
412
+ Unknown multicast blocked: disabled
413
+ Appliance trust: none
414
+ eos
415
+
416
+ expect(@cisco.parse_trunking("FastEthernet0/24")).to eq({ :mode => "dynamic auto", :encapsulation => :negotiate, :allowed_trunk_vlans => :all, :access_vlan => "1", :native_vlan => "2" })
417
+ end
418
+
419
+ it "should parse ip addresses" do
420
+ @transport.stubs(:command).with("sh running-config interface Vlan 1 | begin interface").returns(<<eos)
384
421
  router#sh running-config interface Vlan 1 | begin interface
385
422
  interface Vlan1
386
423
  description $ETH-SW-LAUNCH$$INTF-INFO-HWIC 4ESW$$FW_INSIDE$
@@ -407,13 +444,13 @@ end
407
444
 
408
445
  router#
409
446
  eos
410
- expect(@cisco.parse_interface_config("Vlan 1")).to eq({:ipaddress=>[[24, IPAddr.new('192.168.0.24'), 'secondary'],
411
- [24, IPAddr.new('192.168.0.1'), nil],
412
- [64, IPAddr.new('2001:07a8:71c1::'), "eui-64"]]})
413
- end
447
+ expect(@cisco.parse_interface_config("Vlan 1")).to eq({:ipaddress=>[[24, IPAddr.new('192.168.0.24'), 'secondary'],
448
+ [24, IPAddr.new('192.168.0.1'), nil],
449
+ [64, IPAddr.new('2001:07a8:71c1::'), "eui-64"]]})
450
+ end
414
451
 
415
- it "should parse etherchannel membership" do
416
- @transport.stubs(:command).with("sh running-config interface Gi0/17 | begin interface").returns(<<eos)
452
+ it "should parse etherchannel membership" do
453
+ @transport.stubs(:command).with("sh running-config interface Gi0/17 | begin interface").returns(<<eos)
417
454
  c2960#sh running-config interface Gi0/17 | begin interface
418
455
  interface GigabitEthernet0/17
419
456
  description member of Po1
@@ -426,20 +463,20 @@ end
426
463
 
427
464
  c2960#
428
465
  eos
429
- expect(@cisco.parse_interface_config("Gi0/17")).to eq({:etherchannel=>"1"})
466
+ expect(@cisco.parse_interface_config("Gi0/17")).to eq({:etherchannel=>"1"})
467
+ end
430
468
  end
431
- end
432
469
 
433
- describe "when finding device facts" do
434
- it "should delegate to the cisco facts entity" do
435
- facts = stub 'facts'
436
- Puppet::Util::NetworkDevice::Cisco::Facts.expects(:new).returns(facts)
470
+ describe "when finding device facts" do
471
+ it "should delegate to the cisco facts entity" do
472
+ facts = stub 'facts'
473
+ Puppet::Util::NetworkDevice::Cisco::Facts.expects(:new).returns(facts)
437
474
 
438
- facts.expects(:retrieve).returns(:facts)
475
+ facts.expects(:retrieve).returns(:facts)
439
476
 
440
- expect(@cisco.facts).to eq(:facts)
477
+ expect(@cisco.facts).to eq(:facts)
478
+ end
441
479
  end
442
- end
443
480
 
481
+ end
444
482
  end
445
-