tnargav 1.2.3 → 1.3.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (380) hide show
  1. data/.gitignore +19 -3
  2. data/CHANGELOG.md +311 -0
  3. data/bin/vagrant +12 -0
  4. data/config/default.rb +2 -4
  5. data/keys/README.md +0 -7
  6. data/lib/vagrant.rb +7 -0
  7. data/lib/vagrant/action.rb +2 -0
  8. data/lib/vagrant/action/builtin/box_add.rb +12 -1
  9. data/lib/vagrant/action/builtin/confirm.rb +1 -0
  10. data/lib/vagrant/action/builtin/graceful_halt.rb +9 -5
  11. data/lib/vagrant/action/builtin/handle_box_url.rb +16 -7
  12. data/lib/vagrant/action/builtin/handle_forwarded_port_collisions.rb +1 -1
  13. data/lib/vagrant/action/builtin/mixin_provisioners.rb +43 -0
  14. data/lib/vagrant/action/builtin/nfs.rb +18 -8
  15. data/lib/vagrant/action/builtin/provision.rb +30 -21
  16. data/lib/vagrant/action/builtin/provisioner_cleanup.rb +35 -0
  17. data/lib/vagrant/action/builtin/wait_for_communicator.rb +84 -0
  18. data/lib/vagrant/action/warden.rb +2 -1
  19. data/lib/vagrant/box_collection.rb +62 -44
  20. data/lib/vagrant/cli.rb +1 -9
  21. data/lib/vagrant/config/v2/root.rb +6 -0
  22. data/lib/vagrant/environment.rb +27 -51
  23. data/lib/vagrant/errors.rb +33 -1
  24. data/lib/vagrant/guest.rb +2 -2
  25. data/lib/vagrant/machine.rb +14 -22
  26. data/lib/vagrant/plugin/v2/command.rb +4 -1
  27. data/lib/vagrant/plugin/v2/communicator.rb +21 -0
  28. data/lib/vagrant/plugin/v2/guest.rb +1 -56
  29. data/lib/vagrant/plugin/v2/provisioner.rb +6 -0
  30. data/lib/vagrant/util/downloader.rb +7 -2
  31. data/lib/vagrant/util/platform.rb +43 -0
  32. data/lib/vagrant/util/ssh.rb +5 -0
  33. data/lib/vagrant/util/subprocess.rb +16 -2
  34. data/lib/vagrant/version.rb +1 -1
  35. data/plugins/commands/box/command/remove.rb +22 -2
  36. data/plugins/commands/box/command/repackage.rb +1 -1
  37. data/plugins/commands/destroy/command.rb +8 -3
  38. data/plugins/commands/help/command.rb +12 -0
  39. data/plugins/commands/help/plugin.rb +17 -0
  40. data/plugins/commands/plugin/action.rb +11 -0
  41. data/plugins/commands/plugin/action/install_gem.rb +26 -1
  42. data/plugins/commands/plugin/action/plugin_exists_check.rb +26 -0
  43. data/plugins/commands/plugin/command/install.rb +4 -21
  44. data/plugins/commands/plugin/command/mixin_install_opts.rb +30 -0
  45. data/plugins/commands/plugin/command/root.rb +5 -0
  46. data/plugins/commands/plugin/command/update.rb +41 -0
  47. data/plugins/commands/reload/command.rb +4 -0
  48. data/plugins/commands/status/command.rb +6 -1
  49. data/plugins/commands/up/command.rb +10 -0
  50. data/plugins/commands/up/start_mixins.rb +12 -1
  51. data/plugins/communicators/ssh/communicator.rb +61 -6
  52. data/plugins/guests/arch/cap/change_host_name.rb +1 -2
  53. data/plugins/guests/arch/cap/configure_networks.rb +6 -0
  54. data/plugins/guests/coreos/cap/change_host_name.rb +15 -0
  55. data/plugins/guests/coreos/cap/configure_networks.rb +72 -0
  56. data/plugins/guests/coreos/guest.rb +9 -0
  57. data/plugins/guests/coreos/plugin.rb +25 -0
  58. data/plugins/guests/darwin/cap/change_host_name.rb +14 -0
  59. data/plugins/guests/darwin/cap/configure_networks.rb +52 -0
  60. data/plugins/guests/darwin/cap/halt.rb +16 -0
  61. data/plugins/guests/darwin/cap/mount_nfs_folder.rb +25 -0
  62. data/plugins/guests/darwin/cap/mount_vmware_shared_folder.rb +36 -0
  63. data/plugins/guests/darwin/cap/shell_expand_guest_path.rb +26 -0
  64. data/plugins/guests/darwin/cap/verify_vmware_hgfs.rb +12 -0
  65. data/plugins/guests/darwin/guest.rb +15 -0
  66. data/plugins/guests/darwin/plugin.rb +50 -0
  67. data/plugins/guests/debian/cap/change_host_name.rb +1 -0
  68. data/plugins/guests/gentoo/guest.rb +1 -1
  69. data/plugins/guests/linux/cap/mount_nfs.rb +9 -1
  70. data/plugins/guests/linux/cap/mount_virtualbox_shared_folder.rb +26 -7
  71. data/plugins/guests/linux/cap/shell_expand_guest_path.rb +4 -1
  72. data/plugins/guests/openbsd/cap/change_host_name.rb +14 -0
  73. data/plugins/guests/openbsd/cap/configure_networks.rb +40 -0
  74. data/plugins/guests/openbsd/cap/mount_nfs_folder.rb +14 -0
  75. data/plugins/guests/openbsd/plugin.rb +15 -0
  76. data/plugins/guests/solaris/cap/halt.rb +2 -1
  77. data/plugins/guests/solaris/cap/mount_virtualbox_shared_folder.rb +4 -1
  78. data/plugins/guests/solaris11/cap/change_host_name.rb +25 -0
  79. data/plugins/guests/solaris11/cap/configure_networks.rb +32 -0
  80. data/plugins/guests/solaris11/cap/halt.rb +26 -0
  81. data/plugins/guests/solaris11/cap/mount_virtualbox_shared_folder.rb +35 -0
  82. data/plugins/guests/solaris11/config.rb +22 -0
  83. data/plugins/guests/solaris11/guest.rb +15 -0
  84. data/plugins/guests/solaris11/plugin.rb +44 -0
  85. data/plugins/guests/suse/cap/configure_networks.rb +60 -0
  86. data/plugins/guests/suse/plugin.rb +5 -0
  87. data/plugins/guests/ubuntu/cap/change_host_name.rb +1 -0
  88. data/plugins/guests/ubuntu/cap/mount_nfs.rb +19 -0
  89. data/plugins/guests/ubuntu/cap/mount_virtualbox_shared_folder.rb +14 -0
  90. data/plugins/guests/ubuntu/guest.rb +0 -19
  91. data/plugins/guests/ubuntu/plugin.rb +10 -0
  92. data/plugins/hosts/arch/host.rb +5 -28
  93. data/plugins/hosts/bsd/host.rb +83 -7
  94. data/plugins/hosts/fedora/host.rb +12 -6
  95. data/plugins/hosts/gentoo/host.rb +3 -1
  96. data/plugins/hosts/linux/host.rb +42 -9
  97. data/plugins/hosts/opensuse/host.rb +3 -1
  98. data/plugins/hosts/slackware/host.rb +26 -0
  99. data/plugins/hosts/slackware/plugin.rb +15 -0
  100. data/plugins/kernel_v1/config/ssh.rb +2 -2
  101. data/plugins/kernel_v2/config/ssh.rb +8 -16
  102. data/plugins/kernel_v2/config/vm.rb +68 -11
  103. data/plugins/providers/virtualbox/action.rb +15 -2
  104. data/plugins/providers/virtualbox/action/boot.rb +0 -26
  105. data/plugins/providers/virtualbox/action/clear_network_interfaces.rb +1 -1
  106. data/plugins/providers/virtualbox/action/customize.rb +10 -3
  107. data/plugins/providers/virtualbox/action/destroy_unused_network_interfaces.rb +8 -1
  108. data/plugins/providers/virtualbox/action/forward_ports.rb +1 -0
  109. data/plugins/providers/virtualbox/action/import.rb +3 -0
  110. data/plugins/providers/virtualbox/action/network.rb +14 -2
  111. data/plugins/providers/virtualbox/action/prepare_nfs_settings.rb +7 -2
  112. data/plugins/providers/virtualbox/action/set_name.rb +13 -1
  113. data/plugins/providers/virtualbox/config.rb +39 -2
  114. data/plugins/providers/virtualbox/driver/base.rb +5 -0
  115. data/plugins/providers/virtualbox/driver/meta.rb +7 -1
  116. data/plugins/providers/virtualbox/driver/version_4_0.rb +2 -2
  117. data/plugins/providers/virtualbox/driver/version_4_1.rb +2 -2
  118. data/plugins/providers/virtualbox/driver/version_4_2.rb +17 -0
  119. data/plugins/providers/virtualbox/model/forwarded_port.rb +7 -1
  120. data/plugins/providers/virtualbox/util/compile_forwarded_ports.rb +5 -1
  121. data/plugins/provisioners/ansible/config.rb +40 -23
  122. data/plugins/provisioners/ansible/provisioner.rb +68 -13
  123. data/plugins/provisioners/cfengine/cap/debian/cfengine_install.rb +1 -1
  124. data/plugins/provisioners/cfengine/cap/redhat/cfengine_install.rb +1 -1
  125. data/plugins/provisioners/cfengine/config.rb +7 -1
  126. data/plugins/provisioners/cfengine/provisioner.rb +4 -5
  127. data/plugins/provisioners/chef/config/base.rb +31 -0
  128. data/plugins/provisioners/chef/config/chef_client.rb +15 -6
  129. data/plugins/provisioners/chef/config/chef_solo.rb +18 -11
  130. data/plugins/provisioners/chef/provisioner/base.rb +23 -3
  131. data/plugins/provisioners/chef/provisioner/chef_client.rb +25 -6
  132. data/plugins/provisioners/chef/provisioner/chef_solo.rb +16 -13
  133. data/plugins/provisioners/file/config.rb +29 -0
  134. data/plugins/provisioners/file/plugin.rb +23 -0
  135. data/plugins/provisioners/file/provisioner.rb +16 -0
  136. data/plugins/provisioners/puppet/config/puppet.rb +4 -1
  137. data/plugins/provisioners/puppet/provisioner/puppet.rb +15 -9
  138. data/plugins/provisioners/puppet/provisioner/puppet_server.rb +9 -2
  139. data/plugins/provisioners/salt/bootstrap-salt.sh +6 -0
  140. data/plugins/provisioners/salt/config.rb +105 -0
  141. data/plugins/provisioners/salt/errors.rb +11 -0
  142. data/plugins/provisioners/salt/plugin.rb +22 -0
  143. data/plugins/provisioners/salt/provisioner.rb +249 -0
  144. data/plugins/provisioners/shell/config.rb +11 -2
  145. data/plugins/provisioners/shell/provisioner.rb +15 -3
  146. data/scripts/website_push_docs.sh +12 -0
  147. data/scripts/website_push_www.sh +12 -0
  148. data/templates/commands/init/Vagrantfile.erb +5 -2
  149. data/templates/commands/ssh_config/config.erb +4 -0
  150. data/templates/guests/coreos/etcd.service.erb +10 -0
  151. data/templates/guests/fedora/network_static.erb +2 -3
  152. data/templates/guests/openbsd/network_dhcp.erb +1 -0
  153. data/templates/guests/openbsd/network_static.erb +1 -0
  154. data/templates/guests/suse/network_dhcp.erb +6 -0
  155. data/templates/guests/suse/network_static.erb +10 -0
  156. data/templates/locales/en.yml +123 -13
  157. data/templates/nfs/exports.erb +4 -4
  158. data/templates/nfs/exports_freebsd.erb +4 -4
  159. data/templates/nfs/exports_linux.erb +5 -3
  160. data/templates/provisioners/chef_client/client.erb +9 -0
  161. data/templates/provisioners/chef_solo/solo.erb +19 -1
  162. data/test/unit/vagrant/action/builtin/graceful_halt_test.rb +1 -2
  163. data/test/unit/vagrant/cli_test.rb +1 -0
  164. data/test/unit/vagrant/config/v2/root_test.rb +18 -0
  165. data/test/unit/vagrant/environment_test.rb +25 -0
  166. data/test/unit/vagrant/util/downloader_test.rb +4 -4
  167. data/test/unit/vagrant_test.rb +18 -0
  168. data/website/docs/.buildpacks +2 -0
  169. data/website/docs/Gemfile +13 -0
  170. data/website/docs/Gemfile.lock +141 -0
  171. data/website/docs/Procfile +1 -0
  172. data/website/docs/README.md +26 -0
  173. data/website/docs/config.rb +78 -0
  174. data/website/docs/config.ru +44 -0
  175. data/website/docs/helpers/sidebar_helpers.rb +19 -0
  176. data/website/docs/lib/redirect_to_latest.rb +25 -0
  177. data/website/docs/lib/redirect_v1_docs.rb +26 -0
  178. data/website/docs/source/404.html.erb +7 -0
  179. data/website/docs/source/images/bullet_1.png +0 -0
  180. data/website/docs/source/images/bullet_2.png +0 -0
  181. data/website/docs/source/images/bullet_3.png +0 -0
  182. data/website/docs/source/images/customers.png +0 -0
  183. data/website/docs/source/images/customers_small.png +0 -0
  184. data/website/docs/source/images/footer_background.png +0 -0
  185. data/website/docs/source/images/footer_hashi_logo.png +0 -0
  186. data/website/docs/source/images/footer_vagrant_logo.png +0 -0
  187. data/website/docs/source/images/get_started_background.png +0 -0
  188. data/website/docs/source/images/icon_caution.png +0 -0
  189. data/website/docs/source/images/logo_docs.png +0 -0
  190. data/website/docs/source/images/logo_docs_small.png +0 -0
  191. data/website/docs/source/images/logo_small.png +0 -0
  192. data/website/docs/source/images/logo_vagrant.png +0 -0
  193. data/website/docs/source/images/open_close.png +0 -0
  194. data/website/docs/source/images/search_icon.png +0 -0
  195. data/website/docs/source/images/sidebar_background_docs.png +0 -0
  196. data/website/docs/source/images/sidebar_background_inner.png +0 -0
  197. data/website/docs/source/images/steps_background.png +0 -0
  198. data/website/docs/source/images/vagrant_header_background.png +0 -0
  199. data/website/docs/source/index.html.erb +0 -0
  200. data/website/docs/source/javascripts/backstretch.js +4 -0
  201. data/website/docs/source/javascripts/bootstrap.min.js +7 -0
  202. data/website/docs/source/javascripts/fittext.js +43 -0
  203. data/website/docs/source/javascripts/grid-overlay.js +161 -0
  204. data/website/docs/source/javascripts/jquery.js +2 -0
  205. data/website/docs/source/javascripts/less-1.3.0.min.js +9 -0
  206. data/website/docs/source/javascripts/modernizr.js +1384 -0
  207. data/website/docs/source/javascripts/vagrantup.js +15 -0
  208. data/website/docs/source/layouts/layout.erb +266 -0
  209. data/website/docs/source/stylesheets/_base.less +317 -0
  210. data/website/docs/source/stylesheets/_components.less +74 -0
  211. data/website/docs/source/stylesheets/_footer.less +101 -0
  212. data/website/docs/source/stylesheets/_media-queries.less +452 -0
  213. data/website/docs/source/stylesheets/_mixins.less +174 -0
  214. data/website/docs/source/stylesheets/_nav.less +71 -0
  215. data/website/docs/source/stylesheets/_pages.less +276 -0
  216. data/website/docs/source/stylesheets/_sidebar.less +136 -0
  217. data/website/docs/source/stylesheets/_type.less +36 -0
  218. data/website/docs/source/stylesheets/_variables.less +39 -0
  219. data/website/docs/source/stylesheets/bootstrap.css +5946 -0
  220. data/website/docs/source/stylesheets/vagrantup.less +16 -0
  221. data/website/docs/source/v2/boxes.html.md +78 -0
  222. data/website/docs/source/v2/boxes/format.html.md +32 -0
  223. data/website/docs/source/v2/cli/box.html.md +62 -0
  224. data/website/docs/source/v2/cli/destroy.html.md +20 -0
  225. data/website/docs/source/v2/cli/halt.html.md +19 -0
  226. data/website/docs/source/v2/cli/index.html.md +24 -0
  227. data/website/docs/source/v2/cli/init.html.md +18 -0
  228. data/website/docs/source/v2/cli/package.html.md +43 -0
  229. data/website/docs/source/v2/cli/plugin.html.md +56 -0
  230. data/website/docs/source/v2/cli/provision.html.md +24 -0
  231. data/website/docs/source/v2/cli/reload.html.md +27 -0
  232. data/website/docs/source/v2/cli/resume.html.md +11 -0
  233. data/website/docs/source/v2/cli/ssh.html.md +24 -0
  234. data/website/docs/source/v2/cli/ssh_config.html.md +16 -0
  235. data/website/docs/source/v2/cli/status.html.md +14 -0
  236. data/website/docs/source/v2/cli/suspend.html.md +19 -0
  237. data/website/docs/source/v2/cli/up.html.md +34 -0
  238. data/website/docs/source/v2/debugging.html.md +42 -0
  239. data/website/docs/source/v2/getting-started/boxes.html.md +56 -0
  240. data/website/docs/source/v2/getting-started/index.html.md +43 -0
  241. data/website/docs/source/v2/getting-started/networking.html.md +45 -0
  242. data/website/docs/source/v2/getting-started/project_setup.html.md +38 -0
  243. data/website/docs/source/v2/getting-started/providers.html.md +37 -0
  244. data/website/docs/source/v2/getting-started/provisioning.html.md +75 -0
  245. data/website/docs/source/v2/getting-started/rebuild.html.md +17 -0
  246. data/website/docs/source/v2/getting-started/synced_folders.html.md +42 -0
  247. data/website/docs/source/v2/getting-started/teardown.html.md +41 -0
  248. data/website/docs/source/v2/getting-started/up.html.md +35 -0
  249. data/website/docs/source/v2/index.html.md +10 -0
  250. data/website/docs/source/v2/installation/backwards-compatibility.html.md +35 -0
  251. data/website/docs/source/v2/installation/index.html.md +28 -0
  252. data/website/docs/source/v2/installation/uninstallation.html.md +39 -0
  253. data/website/docs/source/v2/installation/upgrading-from-1-0.html.md +26 -0
  254. data/website/docs/source/v2/installation/upgrading.html.md +20 -0
  255. data/website/docs/source/v2/multi-machine/index.html.md +105 -0
  256. data/website/docs/source/v2/networking/basic_usage.html.md +43 -0
  257. data/website/docs/source/v2/networking/forwarded_ports.html.md +57 -0
  258. data/website/docs/source/v2/networking/index.html.md +40 -0
  259. data/website/docs/source/v2/networking/private_network.html.md +48 -0
  260. data/website/docs/source/v2/networking/public_network.html.md +53 -0
  261. data/website/docs/source/v2/plugins/commands.html.md +116 -0
  262. data/website/docs/source/v2/plugins/configuration.html.md +166 -0
  263. data/website/docs/source/v2/plugins/development-basics.html.md +139 -0
  264. data/website/docs/source/v2/plugins/guest-capabilities.html.md +100 -0
  265. data/website/docs/source/v2/plugins/guests.html.md +99 -0
  266. data/website/docs/source/v2/plugins/hosts.html.md +46 -0
  267. data/website/docs/source/v2/plugins/index.html.md +21 -0
  268. data/website/docs/source/v2/plugins/packaging.html.md +102 -0
  269. data/website/docs/source/v2/plugins/providers.html.md +234 -0
  270. data/website/docs/source/v2/plugins/provisioners.html.md +64 -0
  271. data/website/docs/source/v2/plugins/usage.html.md +58 -0
  272. data/website/docs/source/v2/providers/basic_usage.html.md +67 -0
  273. data/website/docs/source/v2/providers/configuration.html.md +89 -0
  274. data/website/docs/source/v2/providers/custom.html.md +9 -0
  275. data/website/docs/source/v2/providers/default.html.md +22 -0
  276. data/website/docs/source/v2/providers/index.html.md +23 -0
  277. data/website/docs/source/v2/providers/installation.html.md +11 -0
  278. data/website/docs/source/v2/provisioning/ansible.html.md +144 -0
  279. data/website/docs/source/v2/provisioning/basic_usage.html.md +67 -0
  280. data/website/docs/source/v2/provisioning/chef_client.html.md +109 -0
  281. data/website/docs/source/v2/provisioning/chef_solo.html.md +156 -0
  282. data/website/docs/source/v2/provisioning/index.html.md +28 -0
  283. data/website/docs/source/v2/provisioning/puppet_agent.html.md +70 -0
  284. data/website/docs/source/v2/provisioning/puppet_apply.html.md +114 -0
  285. data/website/docs/source/v2/provisioning/shell.html.md +88 -0
  286. data/website/docs/source/v2/synced-folders/basic_usage.html.md +53 -0
  287. data/website/docs/source/v2/synced-folders/index.html.md +17 -0
  288. data/website/docs/source/v2/synced-folders/nfs.html.md +53 -0
  289. data/website/docs/source/v2/vagrantfile/index.html.md +75 -0
  290. data/website/docs/source/v2/vagrantfile/machine_settings.html.md +84 -0
  291. data/website/docs/source/v2/vagrantfile/ssh_settings.html.md +61 -0
  292. data/website/docs/source/v2/vagrantfile/vagrant_settings.html.md +19 -0
  293. data/website/docs/source/v2/vagrantfile/version.html.md +64 -0
  294. data/website/docs/source/v2/virtualbox/boxes.html.md +71 -0
  295. data/website/docs/source/v2/virtualbox/configuration.html.md +63 -0
  296. data/website/docs/source/v2/virtualbox/index.html.md +21 -0
  297. data/website/docs/source/v2/virtualbox/usage.html.md +12 -0
  298. data/website/docs/source/v2/vmware/boxes.html.md +107 -0
  299. data/website/docs/source/v2/vmware/configuration.html.md +91 -0
  300. data/website/docs/source/v2/vmware/index.html.md +30 -0
  301. data/website/docs/source/v2/vmware/installation.html.md +40 -0
  302. data/website/docs/source/v2/vmware/known-issues.html.md +21 -0
  303. data/website/docs/source/v2/vmware/usage.html.md +27 -0
  304. data/website/docs/source/v2/why-vagrant/index.html.md +46 -0
  305. data/website/www/.buildpacks +2 -0
  306. data/website/www/Gemfile +15 -0
  307. data/website/www/Gemfile.lock +123 -0
  308. data/website/www/Procfile +1 -0
  309. data/website/www/README.md +26 -0
  310. data/website/www/config.rb +88 -0
  311. data/website/www/config.ru +39 -0
  312. data/website/www/helpers/sidebar_helpers.rb +12 -0
  313. data/website/www/lib/legacy_redirect.rb +32 -0
  314. data/website/www/source/404.html.erb +11 -0
  315. data/website/www/source/_sidebar_about.erb +5 -0
  316. data/website/www/source/_sidebar_blog.erb +11 -0
  317. data/website/www/source/_sidebar_support.html.erb +6 -0
  318. data/website/www/source/about.html.markdown +16 -0
  319. data/website/www/source/blog.html.erb +34 -0
  320. data/website/www/source/blog/2013-09-16-test.html.markdown +26 -0
  321. data/website/www/source/blog_feed.xml.builder +23 -0
  322. data/website/www/source/images/bullet_1.png +0 -0
  323. data/website/www/source/images/bullet_2.png +0 -0
  324. data/website/www/source/images/bullet_3.png +0 -0
  325. data/website/www/source/images/customers.png +0 -0
  326. data/website/www/source/images/customers_small.png +0 -0
  327. data/website/www/source/images/footer_background.png +0 -0
  328. data/website/www/source/images/footer_hashi_logo.png +0 -0
  329. data/website/www/source/images/footer_vagrant_logo.png +0 -0
  330. data/website/www/source/images/get_started_background.png +0 -0
  331. data/website/www/source/images/icon_caution.png +0 -0
  332. data/website/www/source/images/logo_docs.png +0 -0
  333. data/website/www/source/images/logo_docs_small.png +0 -0
  334. data/website/www/source/images/logo_small.png +0 -0
  335. data/website/www/source/images/logo_vagrant.png +0 -0
  336. data/website/www/source/images/open_close.png +0 -0
  337. data/website/www/source/images/search_icon.png +0 -0
  338. data/website/www/source/images/sidebar_background_docs.png +0 -0
  339. data/website/www/source/images/sidebar_background_inner.png +0 -0
  340. data/website/www/source/images/sponsors/fastly.png +0 -0
  341. data/website/www/source/images/sponsors/kiip.png +0 -0
  342. data/website/www/source/images/sponsors/softlayer.jpg +0 -0
  343. data/website/www/source/images/sponsors/typekit.png +0 -0
  344. data/website/www/source/images/steps_background.png +0 -0
  345. data/website/www/source/images/vagrant_header_background.png +0 -0
  346. data/website/www/source/images/vagrant_vmware_background.png +0 -0
  347. data/website/www/source/index.html.erb +109 -0
  348. data/website/www/source/javascripts/backstretch.js +4 -0
  349. data/website/www/source/javascripts/bootstrap.min.js +7 -0
  350. data/website/www/source/javascripts/fittext.js +43 -0
  351. data/website/www/source/javascripts/grid-overlay.js +161 -0
  352. data/website/www/source/javascripts/jquery.js +2 -0
  353. data/website/www/source/javascripts/less-1.3.0.min.js +9 -0
  354. data/website/www/source/javascripts/modernizr.js +1384 -0
  355. data/website/www/source/javascripts/vagrantup.js +58 -0
  356. data/website/www/source/layouts/blog_post.erb +42 -0
  357. data/website/www/source/layouts/inner.erb +34 -0
  358. data/website/www/source/layouts/layout.erb +107 -0
  359. data/website/www/source/sponsors.html.erb +23 -0
  360. data/website/www/source/stylesheets/_base.less +326 -0
  361. data/website/www/source/stylesheets/_components.less +74 -0
  362. data/website/www/source/stylesheets/_footer.less +101 -0
  363. data/website/www/source/stylesheets/_media-queries.less +549 -0
  364. data/website/www/source/stylesheets/_mixins.less +175 -0
  365. data/website/www/source/stylesheets/_modules.less +37 -0
  366. data/website/www/source/stylesheets/_nav.less +74 -0
  367. data/website/www/source/stylesheets/_pages.less +467 -0
  368. data/website/www/source/stylesheets/_sidebar.less +137 -0
  369. data/website/www/source/stylesheets/_type.less +36 -0
  370. data/website/www/source/stylesheets/_variables.less +39 -0
  371. data/website/www/source/stylesheets/bootstrap.css +5946 -0
  372. data/website/www/source/stylesheets/vagrantup.less +17 -0
  373. data/website/www/source/support.html.erb +25 -0
  374. data/website/www/source/support/community.html.erb +28 -0
  375. data/website/www/source/support/professional.html.erb +17 -0
  376. data/website/www/source/vmware/eula.html.md +21 -0
  377. data/website/www/source/vmware/index.html.erb +185 -0
  378. data/website/www/source/vmware/privacy-policy.html.md +71 -0
  379. data/website/www/source/vmware/terms-of-service.html.md +50 -0
  380. metadata +436 -186
@@ -5,9 +5,8 @@ BOOTPROTO=none
5
5
  ONBOOT=yes
6
6
  IPADDR=<%= options[:ip] %>
7
7
  NETMASK=<%= options[:netmask] %>
8
- DEVICE=p7p<%= options[:interface] %>
8
+ DEVICE=eth<%= options[:interface] %>
9
9
  <%= options[:gateway] ? "GATEWAY=#{options[:gateway]}" : '' %>
10
10
  <%= options[:mac_address] ? "HWADDR=#{options[:mac_address]}" : '' %>
11
- <%= options[:dns1] ? "DNS1=#{options[:dns1]}" : 'DNS1=8.8.4.4' %>
12
- <%= options[:dns2] ? "DNS2=#{options[:dns2]}" : 'DNS1=8.8.8.8' %>
11
+ PEERDNS=no
13
12
  #VAGRANT-END
@@ -0,0 +1 @@
1
+ dhcp
@@ -0,0 +1 @@
1
+ inet <%= options[:ip] %> <%= options[:netmask] %> NONE
@@ -0,0 +1,6 @@
1
+ #VAGRANT-BEGIN
2
+ # The contents below are automatically generated by Vagrant. Do not modify.
3
+ BOOTPROTO=dhcp
4
+ ONBOOT=yes
5
+ DEVICE=eth<%= options[:interface] %>
6
+ #VAGRANT-END
@@ -0,0 +1,10 @@
1
+ #VAGRANT-BEGIN
2
+ # The contents below are automatically generated by Vagrant. Do not modify.
3
+ BOOTPROTO='static'
4
+ IPADDR='<%= options[:ip] %>'
5
+ NETMASK='<%= options[:netmask] %>'
6
+ DEVICE='eth<%= options[:interface] %>'
7
+ PEERDNS=no
8
+ STARTMODE='auto'
9
+ USERCONTROL='no'
10
+ #VAGRANT-END
@@ -1,5 +1,9 @@
1
1
  en:
2
2
  vagrant:
3
+ boot_completed: |-
4
+ Machine booted and ready!
5
+ boot_waiting: |-
6
+ Waiting for machine to boot. This may take a few minutes...
3
7
  cfengine_bootstrapping: |-
4
8
  Bootstrapping CFEngine with policy server: %{policy_server}...
5
9
  cfengine_bootstrapping_policy_hub: |-
@@ -25,8 +29,21 @@ en:
25
29
  CFEngine running in "single run" mode. Will execute one file.
26
30
  cfengine_single_run_execute: |-
27
31
  Executing run file for CFEngine...
32
+ chef_client_cleanup_failed: |-
33
+ Cleaning up the '%{deletable}' for Chef failed. The stdout and
34
+ stderr are shown below. Vagrant will continue destroying the machine,
35
+ so please clean up these resources manually.
36
+
37
+ stdout: %{stdout}
38
+
39
+ stderr: %{stderr}
40
+ chef_config_knife_not_found: |-
41
+ The `knife` application was not found! This is required by Vagrant
42
+ to automatically delete Chef nodes and clients.
28
43
  chef_run_list_empty: |-
29
44
  Warning: Chef solo run list is empty. This may not be what you want.
45
+ provisioner_cleanup: |-
46
+ Running cleanup tasks for '%{name}' provisioner...
30
47
 
31
48
  cfengine_config:
32
49
  classes_array: |-
@@ -40,6 +57,14 @@ en:
40
57
  run_file_not_found: |-
41
58
  The 'run_file' specified could not be found.
42
59
 
60
+ virtualbox:
61
+ config:
62
+ id_in_pre_import: |-
63
+ The ':id' parameter is not available in "pre-import" customizations.
64
+ invalid_event: |-
65
+ %{event} is not a valid event for customization. Valid events
66
+ are: %{valid_events}
67
+
43
68
  general:
44
69
  batch_unexpected_error: |-
45
70
  An unexpected error ocurred when executing the action on the
@@ -52,7 +77,9 @@ en:
52
77
 
53
78
  %{message}
54
79
  config_upgrade_messages: |-
55
- There were warnings and/or errors while loading your Vagrantfile.
80
+ There were warnings and/or errors while loading your Vagrantfile
81
+ for the machine '%{name}'.
82
+
56
83
  Your Vagrantfile was written for an earlier version of Vagrant,
57
84
  and while Vagrant does the best it can to remain backwards
58
85
  compatible, there are some cases where things have changed
@@ -106,6 +133,9 @@ en:
106
133
  Machine name: %{name}
107
134
  Active provider: %{active_provider}
108
135
  Requested provider: %{requested_provider}
136
+ ansible_failed: |-
137
+ Ansible failed to complete successfully. Any error output should be
138
+ visible above. Please fix these errors and try again.
109
139
  ansible_playbook_app_not_found: |-
110
140
  The "ansible-playbook" program could not be found! Please verify
111
141
  that "ansible-playbook" is available on the PATH of your host
@@ -120,6 +150,31 @@ en:
120
150
  Any errors that occurred are shown below.
121
151
 
122
152
  %{message}
153
+ boot_bad_state: |-
154
+ The guest machine entered an invalid state while waiting for it
155
+ to boot. Valid states are '%{valid}'. The machine is in the
156
+ '%{invalid}' state. Please verify everything is configured
157
+ properly and try again.
158
+
159
+ If the provider you're using has a GUI that comes with it,
160
+ it is often helpful to open that and watch the machine, since the
161
+ GUI often has more helpful error messages than Vagrant can retrieve.
162
+ For example, if you're using VirtualBox, run `vagrant up` while the
163
+ VirtualBox GUI is open.
164
+ boot_timeout: |-
165
+ Timed out while waiting for the machine to boot. This means that
166
+ Vagrant was unable to communicate with the guest machine within
167
+ the configured ("config.vm.boot_timeout" value) time period. This can
168
+ mean a number of things.
169
+
170
+ If you're using a custom box, make sure that networking is properly
171
+ working and you're able to connect to the machine. It is a common
172
+ problem that networking isn't setup properly in these boxes.
173
+ Verify that authentication configurations are also setup properly,
174
+ as well.
175
+
176
+ If the box appears to be booting properly, you may want to increase
177
+ the timeout ("config.vm.boot_timeout") value.
123
178
  box_config_changing_box: |-
124
179
  While loading the Vagrantfile, the provider override specified
125
180
  a new box. This box, in turn, specified a different box. This isn't
@@ -134,7 +189,7 @@ en:
134
189
  box file format can be found at the URL below:
135
190
 
136
191
  http://docs.vagrantup.com/v2/boxes/format.html
137
- box_not_found: Box '%{name}' could not be found.
192
+ box_not_found: Box '%{name}' with '%{provider}' provider could not be found.
138
193
  box_provider_doesnt_match: |-
139
194
  The box you attempted to add doesn't match the provider you specified.
140
195
 
@@ -168,11 +223,11 @@ en:
168
223
 
169
224
  %{help}
170
225
  command_unavailable: |-
171
- The executable '%(file)' Vagrant is trying to run was not
226
+ The executable '%{file}' Vagrant is trying to run was not
172
227
  found in the PATH variable. This is an error. Please verify
173
228
  this software is installed and on the path.
174
229
  command_unavailable_windows: |-
175
- The executable '%(file)' Vagrant is trying to run was not
230
+ The executable '%{file}' Vagrant is trying to run was not
176
231
  found in the %PATH% variable. This is an error. Please verify
177
232
  this software is installed and on the path.
178
233
  config_invalid: |-
@@ -233,6 +288,11 @@ en:
233
288
  may run at any given time to avoid problems with VirtualBox inconsistencies
234
289
  occurring. Please wait for the other instance of Vagrant to end and then
235
290
  try again.
291
+ environment_non_existent_cwd: |-
292
+ The working directory for Vagrant doesn't exist! This is the
293
+ specified working directory:
294
+
295
+ %{cwd}
236
296
  forward_port_adapter_not_found: |-
237
297
  The adapter to attach a forwarded port to was not found. Please
238
298
  verify that the given adapter is setup on the machine as a NAT
@@ -313,6 +373,10 @@ en:
313
373
  A multi-vm environment is required for name specification to this command.
314
374
  multi_vm_target_required: |-
315
375
  This command requires a specific VM name to target in a multi-VM environment.
376
+ nfs_cant_read_exports: |-
377
+ Vagrant can't read your current NFS exports! The exports file should be
378
+ readable by any user. This is usually caused by invalid permissions
379
+ on your NFS exports file. Please fix them and try again.
316
380
  nfs_no_guest_ip: |-
317
381
  No guest IP was given to the Vagrant core NFS helper. This is an
318
382
  internal error that should be reported as a bug.
@@ -361,6 +425,8 @@ en:
361
425
  plugin_not_found: |-
362
426
  The plugin '%{name}' could not be found. Please install this plugin
363
427
  prior to attempting to do anything with it.
428
+ plugin_not_installed: |-
429
+ The plugin '%{name}' is not installed. Please install it first.
364
430
  port_collision_resume: |-
365
431
  This VM cannot be resumed, because the forwarded ports would collide
366
432
  with a running program (it could be another virtual machine). Normally,
@@ -370,6 +436,9 @@ en:
370
436
  provider_not_found: |-
371
437
  The provider '%{provider}' could not be found, but was requested to
372
438
  back the machine '%{machine}'. Please use a provider that exists.
439
+ provisioner_flag_invalid: |-
440
+ '%{name}' is not a known provisioner. Please specify a valid
441
+ provisioner.
373
442
  scp_permission_denied: |-
374
443
  Failed to upload a file to the guest VM via SCP due to a permissions
375
444
  error. This is normally because the user running Vagrant doesn't have
@@ -397,6 +466,14 @@ en:
397
466
  Vagrant assumes that this means the command failed!
398
467
 
399
468
  %{command}
469
+
470
+ Stdout from the command:
471
+
472
+ %{stdout}
473
+
474
+ Stderr from the command:
475
+
476
+ %{stderr}
400
477
  ssh_connect_eacces: |-
401
478
  SSH is getting permission denied errors when attempting to connect
402
479
  to the IP for SSH. This is usually caused by network rules and not being
@@ -532,6 +609,11 @@ en:
532
609
  be found. Please verify VirtualBox is properly installed. You can verify
533
610
  everything is okay by running "VBoxManage --version" and verifying
534
611
  that the VirtualBox version is outputted.
612
+ virtualbox_broken_version_040214: |-
613
+ Vagrant detected you have VirtualBox 4.2.14 installed. VirtualBox
614
+ 4.2.14 contains a critical bug that causes it to not work with
615
+ Vagrant. VirtualBox 4.2.16+ fixes this problem. Please upgrade
616
+ VirtualBox.
535
617
  virtualbox_invalid_version: |-
536
618
  Vagrant has detected that you have a version of VirtualBox installed
537
619
  that is not supported. Please install one of the supported versions
@@ -582,12 +664,15 @@ en:
582
664
  #-------------------------------------------------------------------------------
583
665
  config:
584
666
  common:
585
- bad_field: "The following settings don't exist: %{fields}"
667
+ bad_field: "The following settings shouldn't exist: %{fields}"
586
668
  error_empty: "`%{field}` must be not be empty."
587
669
  chef:
588
670
  cookbooks_path_empty: "Must specify a cookbooks path for chef solo."
671
+ environment_path_required: "When 'environment' is specified, you must provide 'environments_path'."
589
672
  cookbooks_path_missing: |-
590
673
  Cookbook path doesn't exist: %{path}
674
+ custom_config_path_missing: |-
675
+ Path specified for "custom_config_path" does not exist.
591
676
  server_url_empty: "Chef server URL must be populated."
592
677
  validation_key_path: "Validation key path must be valid path to your chef server validation key."
593
678
  loader:
@@ -623,10 +708,14 @@ en:
623
708
  nfs_requires_host: |-
624
709
  Using NFS shared folders requires a host to be specified
625
710
  using `config.vagrant.host`.
711
+ network_ip_ends_in_one: |-
712
+ Static IPs cannot end in ".1" since that address is always
713
+ reserved for the router. Please use another ending.
626
714
  network_ip_required: |-
627
715
  An IP is required for a private network.
628
716
  network_fp_host_not_unique: |-
629
717
  Forwarded port '%{host}' (host port) is declared multiple times
718
+ with the protocol '%{protocol}'.
630
719
  network_fp_requires_ports: |-
631
720
  Forwarded port definitions require a "host" and "guest" value
632
721
  network_type_invalid: |-
@@ -643,6 +732,9 @@ en:
643
732
  shared_folder_nfs_owner_group: |-
644
733
  Shared folder that have NFS enabled do no support owner/group
645
734
  attributes. Host path: %{path}
735
+ shared_folder_mount_options_array: |-
736
+ Shared folder mount options specified by 'mount_options' must
737
+ be an array of options.
646
738
 
647
739
  #-------------------------------------------------------------------------------
648
740
  # Translations for commands. e.g. `vagrant x`
@@ -652,8 +744,19 @@ en:
652
744
  vm_already_running: |-
653
745
  VirtualBox VM is already running.
654
746
  vm_not_created: "VM not created. Moving on..."
655
- vm_not_running: "VM is not currently running. Please bring it up to run this command."
747
+ vm_not_running: "VM is not currently running. Please, first bring it up with `vagrant up` then run this command."
656
748
  box:
749
+ remove_must_specify_provider: |-
750
+ Multiple providers were found for the box '%{name}'. Please specify
751
+ the specific provider for the box you want to remove. The list of
752
+ providers backing this box is:
753
+
754
+ '%{providers}'
755
+
756
+ To remove the box for a specific provider, run the following command,
757
+ filling in PROVIDER with one of the providers above:
758
+
759
+ vagrant box remove '%{name}' PROVIDER
657
760
  no_installed_boxes: "There are no installed boxes! Use `vagrant box add` to add some."
658
761
  removing: |-
659
762
  Removing box '%{name}' with provider '%{provider}'...
@@ -681,6 +784,10 @@ en:
681
784
  Installing the '%{name}' plugin. This can take a few minutes...
682
785
  uninstalling: |-
683
786
  Uninstalling the '%{name}' plugin...
787
+ post_install: |-
788
+ Post install message from the '%{name}' plugin:
789
+
790
+ %{message}
684
791
  status:
685
792
  aborted: |-
686
793
  The VM is in an aborted state. This means that it was abruptly
@@ -751,9 +858,6 @@ en:
751
858
  vm:
752
859
  boot:
753
860
  booting: Booting VM...
754
- waiting: Waiting for VM to boot. This can take a few minutes.
755
- ready: VM booted and ready for use!
756
- failed: Failed to connect to VM!
757
861
  failed_to_boot: |-
758
862
  Failed to connect to VM via SSH. Please verify the VM successfully booted
759
863
  by looking at the VirtualBox GUI.
@@ -825,7 +929,7 @@ en:
825
929
  %{error}
826
930
 
827
931
  Please fix this customization and try again.
828
- running: Running any VM customizations...
932
+ running: Running '%{event}' VM customizations...
829
933
  destroy:
830
934
  destroying: Destroying VM and associated drives...
831
935
  destroy_network:
@@ -972,10 +1076,10 @@ en:
972
1076
 
973
1077
  %{output}
974
1078
  already_exists: |-
975
- The box you're attempting to add already exits:
1079
+ The box you're attempting to add already exists:
976
1080
 
977
1081
  Name: %{name}
978
- Provider: %{provider}
1082
+ Provider: %{formats}
979
1083
  add:
980
1084
  adding: |-
981
1085
  Extracting box...
@@ -1094,6 +1198,12 @@ en:
1094
1198
  server_validation_key_doesnt_exist: |-
1095
1199
  The validation key set for `config.chef.validation_key_path` does not exist! This
1096
1200
  file needs to exist so it can be uploaded to the virtual machine.
1201
+ deleting_from_server: "Deleting %{deletable} \"%{name}\" from Chef server..."
1202
+
1203
+ file:
1204
+ no_dest_file: "File destination must be specified."
1205
+ no_source_file: "File source must be specified."
1206
+ path_invalid: "File upload source file %{path} must exist"
1097
1207
 
1098
1208
  puppet:
1099
1209
  not_detected: |-
@@ -1134,5 +1244,5 @@ en:
1134
1244
  ansible:
1135
1245
  no_playbook: "`playbook` must be set for the Ansible provisioner."
1136
1246
  playbook_path_invalid: "`playbook` for the Ansible provisioner does not exist on the host system: %{path}"
1137
- inventory_file_path_invalid: "`inventory_file` for the Ansible provisioner does not exist on the host system: %{path}"
1247
+ inventory_path_invalid: "`inventory_path` for the Ansible provisioner does not exist on the host system: %{path}"
1138
1248
  extra_vars_not_hash: "`extra_vars` for the Ansible provisioner must be a hash"
@@ -1,5 +1,5 @@
1
- # VAGRANT-BEGIN: <%= uuid %>
2
- <% folders.each do |name, opts| %>
3
- "<%= opts[:hostpath] %>" <%= ip %><% if opts[:map_uid] -%> -mapall=<%= [opts[:map_uid],opts[:map_gid]].compact.join(":") %><% end -%>
1
+ # VAGRANT-BEGIN: <%= user %> <%= uuid %>
2
+ <% folders.each do |dirs, opts| %>
3
+ <%= dirs.map { |d| "\"#{d}\"" }.join(" ") %> <%= ips.join(" ") %> <%=opts[:bsd__compiled_nfs_options] %>
4
4
  <% end %>
5
- # VAGRANT-END: <%= uuid %>
5
+ # VAGRANT-END: <%= user %> <%= uuid %>
@@ -1,5 +1,5 @@
1
- # VAGRANT-BEGIN: <%= uuid %>
2
- <% folders.each do |name, opts| %>
3
- <%= opts[:hostpath] %> <%= ip %><% if opts[:map_uid] -%> -alldirs -mapall=<%= [opts[:map_uid],opts[:map_gid]].compact.join(":") %><% end -%>
1
+ # VAGRANT-BEGIN: <%= user %> <%= uuid %>
2
+ <% folders.each do |dirs, opts| %>
3
+ <%= dirs.map { |d| "\"#{d}\"" }.join(" ") %> <%= ips.join(" ") %> <%=opts[:bsd__compiled_nfs_options] %>
4
4
  <% end %>
5
- # VAGRANT-END: <%= uuid %>
5
+ # VAGRANT-END: <%= user %> <%= uuid %>
@@ -1,5 +1,7 @@
1
- # VAGRANT-BEGIN: <%= uuid %>
1
+ # VAGRANT-BEGIN: <%= user %> <%= uuid %>
2
+ <% ips.each do |ip| %>
2
3
  <% folders.each do |name, opts| %>
3
- "<%= opts[:hostpath] %>" <%= ip %>(rw,no_subtree_check,all_squash<% if opts[:map_uid] %>,anonuid=<%= opts[:map_uid] %><% end %><% if opts[:map_gid] %>,anongid=<%= opts[:map_gid] %><% end %>,fsid=<%= opts[:uuid] %>)
4
+ "<%= opts[:hostpath] %>" <%= ip %>(<%= opts[:linux__nfs_options].join(",") %>)
4
5
  <% end %>
5
- # VAGRANT-END: <%= uuid %>
6
+ <% end %>
7
+ # VAGRANT-END: <%= user %> <%= uuid %>
@@ -1,5 +1,6 @@
1
1
  log_level <%= log_level.inspect %>
2
2
  log_location STDOUT
3
+ verbose_logging <%= verbose_logging.inspect %>
3
4
  <% if node_name %>
4
5
  node_name "<%= node_name %>"
5
6
  <% end %>
@@ -30,3 +31,11 @@ no_proxy <%= no_proxy.inspect %>
30
31
  pid_file "/var/run/chef/chef-client.pid"
31
32
 
32
33
  Mixlib::Log::Formatter.show_time = true
34
+
35
+ <% if formatter %>
36
+ add_formatter "<%= formatter %>"
37
+ <% end %>
38
+
39
+ <% if custom_configuration -%>
40
+ load "<%= custom_configuration %>"
41
+ <% end -%>
@@ -1,12 +1,14 @@
1
1
  <% if node_name %>
2
2
  node_name "<%= node_name %>"
3
3
  <% end %>
4
- file_cache_path "<%= provisioning_path %>"
4
+ file_cache_path "<%= file_cache_path %>"
5
+ file_backup_path "<%= file_backup_path %>"
5
6
  cookbook_path <%= cookbooks_path.inspect %>
6
7
  <% if roles_path %>
7
8
  role_path <%= roles_path.inspect %>
8
9
  <% end %>
9
10
  log_level <%= log_level.inspect %>
11
+ verbose_logging <%= verbose_logging.inspect %>
10
12
 
11
13
  encrypted_data_bag_secret "<%= encrypted_data_bag_secret %>"
12
14
 
@@ -18,6 +20,14 @@ data_bag_path <%= data_bags_path.inspect %>
18
20
  recipe_url "<%= recipe_url %>"
19
21
  <% end -%>
20
22
 
23
+ <% if environments_path %>
24
+ environment_path <%= environments_path.inspect %>
25
+ <% end -%>
26
+
27
+ <% if environment %>
28
+ environment "<%= environment %>"
29
+ <% end -%>
30
+
21
31
  http_proxy <%= http_proxy.inspect %>
22
32
  http_proxy_user <%= http_proxy_user.inspect %>
23
33
  http_proxy_pass <%= http_proxy_pass.inspect %>
@@ -25,3 +35,11 @@ https_proxy <%= https_proxy.inspect %>
25
35
  https_proxy_user <%= https_proxy_user.inspect %>
26
36
  https_proxy_pass <%= https_proxy_pass.inspect %>
27
37
  no_proxy <%= no_proxy.inspect %>
38
+
39
+ <% if formatter %>
40
+ add_formatter "<%= formatter %>"
41
+ <% end %>
42
+
43
+ <% if custom_configuration -%>
44
+ load "<%= custom_configuration %>"
45
+ <% end -%>
@@ -13,8 +13,7 @@ describe Vagrant::Action::Builtin::GracefulHalt do
13
13
  let(:machine_config) do
14
14
  double("machine_config").tap do |top_config|
15
15
  vm_config = double("machien_vm_config")
16
- vm_config.stub(:graceful_halt_retry_count => 2)
17
- vm_config.stub(:graceful_halt_retry_interval => 0)
16
+ vm_config.stub(:graceful_halt_timeout => 10)
18
17
  top_config.stub(:vm => vm_config)
19
18
  end
20
19
  end