tnargav 1.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (452) hide show
  1. data/.gitignore +31 -0
  2. data/.gitsetup.yml +5 -0
  3. data/.travis.yml +7 -0
  4. data/.yardopts +1 -0
  5. data/CHANGELOG.md +1067 -0
  6. data/Gemfile +3 -0
  7. data/LICENSE +21 -0
  8. data/README.md +89 -0
  9. data/Rakefile +18 -0
  10. data/bin/vagrant +106 -0
  11. data/config/default.rb +36 -0
  12. data/contrib/README.md +12 -0
  13. data/contrib/bash/completion.sh +3 -0
  14. data/contrib/emacs/vagrant.el +8 -0
  15. data/contrib/vim/vagrantfile.vim +9 -0
  16. data/keys/README.md +17 -0
  17. data/keys/vagrant +27 -0
  18. data/keys/vagrant.pub +1 -0
  19. data/lib/vagrant/action/builder.rb +174 -0
  20. data/lib/vagrant/action/builtin/box_add.rb +81 -0
  21. data/lib/vagrant/action/builtin/call.rb +67 -0
  22. data/lib/vagrant/action/builtin/config_validate.rb +30 -0
  23. data/lib/vagrant/action/builtin/confirm.rb +38 -0
  24. data/lib/vagrant/action/builtin/destroy_confirm.rb +21 -0
  25. data/lib/vagrant/action/builtin/env_set.rb +24 -0
  26. data/lib/vagrant/action/builtin/graceful_halt.rb +73 -0
  27. data/lib/vagrant/action/builtin/handle_box_url.rb +77 -0
  28. data/lib/vagrant/action/builtin/handle_forwarded_port_collisions.rb +134 -0
  29. data/lib/vagrant/action/builtin/lock.rb +57 -0
  30. data/lib/vagrant/action/builtin/nfs.rb +118 -0
  31. data/lib/vagrant/action/builtin/provision.rb +70 -0
  32. data/lib/vagrant/action/builtin/set_hostname.rb +27 -0
  33. data/lib/vagrant/action/builtin/ssh_exec.rb +42 -0
  34. data/lib/vagrant/action/builtin/ssh_run.rb +43 -0
  35. data/lib/vagrant/action/general/package.rb +103 -0
  36. data/lib/vagrant/action/hook.rb +107 -0
  37. data/lib/vagrant/action/runner.rb +69 -0
  38. data/lib/vagrant/action/warden.rb +103 -0
  39. data/lib/vagrant/action.rb +43 -0
  40. data/lib/vagrant/batch_action.rb +113 -0
  41. data/lib/vagrant/box.rb +97 -0
  42. data/lib/vagrant/box_collection.rb +375 -0
  43. data/lib/vagrant/cli.rb +82 -0
  44. data/lib/vagrant/config/loader.rb +222 -0
  45. data/lib/vagrant/config/v1/dummy_config.rb +13 -0
  46. data/lib/vagrant/config/v1/loader.rb +105 -0
  47. data/lib/vagrant/config/v1/root.rb +60 -0
  48. data/lib/vagrant/config/v1.rb +9 -0
  49. data/lib/vagrant/config/v2/dummy_config.rb +13 -0
  50. data/lib/vagrant/config/v2/loader.rb +141 -0
  51. data/lib/vagrant/config/v2/root.rb +105 -0
  52. data/lib/vagrant/config/v2/util.rb +21 -0
  53. data/lib/vagrant/config/v2.rb +9 -0
  54. data/lib/vagrant/config/version_base.rb +80 -0
  55. data/lib/vagrant/config.rb +61 -0
  56. data/lib/vagrant/environment.rb +843 -0
  57. data/lib/vagrant/errors.rb +570 -0
  58. data/lib/vagrant/guest.rb +163 -0
  59. data/lib/vagrant/hosts.rb +28 -0
  60. data/lib/vagrant/machine.rb +325 -0
  61. data/lib/vagrant/machine_state.rb +45 -0
  62. data/lib/vagrant/plugin/v1/command.rb +169 -0
  63. data/lib/vagrant/plugin/v1/communicator.rb +98 -0
  64. data/lib/vagrant/plugin/v1/config.rb +112 -0
  65. data/lib/vagrant/plugin/v1/errors.rb +15 -0
  66. data/lib/vagrant/plugin/v1/guest.rb +92 -0
  67. data/lib/vagrant/plugin/v1/host.rb +66 -0
  68. data/lib/vagrant/plugin/v1/manager.rb +131 -0
  69. data/lib/vagrant/plugin/v1/plugin.rb +229 -0
  70. data/lib/vagrant/plugin/v1/provider.rb +68 -0
  71. data/lib/vagrant/plugin/v1/provisioner.rb +50 -0
  72. data/lib/vagrant/plugin/v1.rb +19 -0
  73. data/lib/vagrant/plugin/v2/command.rb +234 -0
  74. data/lib/vagrant/plugin/v2/communicator.rb +98 -0
  75. data/lib/vagrant/plugin/v2/components.rb +47 -0
  76. data/lib/vagrant/plugin/v2/config.rb +136 -0
  77. data/lib/vagrant/plugin/v2/errors.rb +15 -0
  78. data/lib/vagrant/plugin/v2/guest.rb +78 -0
  79. data/lib/vagrant/plugin/v2/host.rb +66 -0
  80. data/lib/vagrant/plugin/v2/manager.rb +173 -0
  81. data/lib/vagrant/plugin/v2/plugin.rb +226 -0
  82. data/lib/vagrant/plugin/v2/provider.rb +69 -0
  83. data/lib/vagrant/plugin/v2/provisioner.rb +47 -0
  84. data/lib/vagrant/plugin/v2.rb +22 -0
  85. data/lib/vagrant/plugin.rb +6 -0
  86. data/lib/vagrant/registry.rb +78 -0
  87. data/lib/vagrant/ui.rb +215 -0
  88. data/lib/vagrant/util/ansi_escape_code_remover.rb +34 -0
  89. data/lib/vagrant/util/busy.rb +59 -0
  90. data/lib/vagrant/util/counter.rb +24 -0
  91. data/lib/vagrant/util/downloader.rb +146 -0
  92. data/lib/vagrant/util/file_checksum.rb +38 -0
  93. data/lib/vagrant/util/file_mode.rb +12 -0
  94. data/lib/vagrant/util/hash_with_indifferent_access.rb +63 -0
  95. data/lib/vagrant/util/is_port_open.rb +38 -0
  96. data/lib/vagrant/util/line_ending_helpers.rb +14 -0
  97. data/lib/vagrant/util/network_ip.rb +28 -0
  98. data/lib/vagrant/util/platform.rb +58 -0
  99. data/lib/vagrant/util/retryable.rb +31 -0
  100. data/lib/vagrant/util/safe_chdir.rb +33 -0
  101. data/lib/vagrant/util/safe_exec.rb +36 -0
  102. data/lib/vagrant/util/safe_puts.rb +31 -0
  103. data/lib/vagrant/util/scoped_hash_override.rb +45 -0
  104. data/lib/vagrant/util/ssh.rb +150 -0
  105. data/lib/vagrant/util/stacked_proc_runner.rb +35 -0
  106. data/lib/vagrant/util/string_block_editor.rb +77 -0
  107. data/lib/vagrant/util/subprocess.rb +273 -0
  108. data/lib/vagrant/util/template_renderer.rb +83 -0
  109. data/lib/vagrant/util/which.rb +43 -0
  110. data/lib/vagrant/util.rb +12 -0
  111. data/lib/vagrant/version.rb +6 -0
  112. data/lib/vagrant.rb +258 -0
  113. data/plugins/README.md +5 -0
  114. data/plugins/commands/box/command/add.rb +51 -0
  115. data/plugins/commands/box/command/list.rb +41 -0
  116. data/plugins/commands/box/command/remove.rb +37 -0
  117. data/plugins/commands/box/command/repackage.rb +43 -0
  118. data/plugins/commands/box/command/root.rb +75 -0
  119. data/plugins/commands/box/plugin.rb +15 -0
  120. data/plugins/commands/destroy/command.rb +31 -0
  121. data/plugins/commands/destroy/plugin.rb +18 -0
  122. data/plugins/commands/halt/command.rb +33 -0
  123. data/plugins/commands/halt/plugin.rb +18 -0
  124. data/plugins/commands/init/command.rb +40 -0
  125. data/plugins/commands/init/plugin.rb +18 -0
  126. data/plugins/commands/package/command.rb +83 -0
  127. data/plugins/commands/package/plugin.rb +18 -0
  128. data/plugins/commands/plugin/action/bundler_check.rb +25 -0
  129. data/plugins/commands/plugin/action/install_gem.rb +81 -0
  130. data/plugins/commands/plugin/action/license_plugin.rb +54 -0
  131. data/plugins/commands/plugin/action/list_plugins.rb +54 -0
  132. data/plugins/commands/plugin/action/prune_gems.rb +149 -0
  133. data/plugins/commands/plugin/action/uninstall_plugin.rb +23 -0
  134. data/plugins/commands/plugin/action.rb +52 -0
  135. data/plugins/commands/plugin/command/base.rb +22 -0
  136. data/plugins/commands/plugin/command/install.rb +58 -0
  137. data/plugins/commands/plugin/command/license.rb +31 -0
  138. data/plugins/commands/plugin/command/list.rb +28 -0
  139. data/plugins/commands/plugin/command/root.rb +75 -0
  140. data/plugins/commands/plugin/command/uninstall.rb +28 -0
  141. data/plugins/commands/plugin/gem_helper.rb +74 -0
  142. data/plugins/commands/plugin/plugin.rb +22 -0
  143. data/plugins/commands/plugin/state_file.rb +57 -0
  144. data/plugins/commands/provision/command.rb +34 -0
  145. data/plugins/commands/provision/plugin.rb +18 -0
  146. data/plugins/commands/reload/command.rb +37 -0
  147. data/plugins/commands/reload/plugin.rb +18 -0
  148. data/plugins/commands/resume/command.rb +25 -0
  149. data/plugins/commands/resume/plugin.rb +17 -0
  150. data/plugins/commands/ssh/command.rb +63 -0
  151. data/plugins/commands/ssh/plugin.rb +17 -0
  152. data/plugins/commands/ssh_config/command.rb +49 -0
  153. data/plugins/commands/ssh_config/plugin.rb +18 -0
  154. data/plugins/commands/status/command.rb +39 -0
  155. data/plugins/commands/status/plugin.rb +18 -0
  156. data/plugins/commands/suspend/command.rb +25 -0
  157. data/plugins/commands/suspend/plugin.rb +18 -0
  158. data/plugins/commands/up/command.rb +57 -0
  159. data/plugins/commands/up/plugin.rb +17 -0
  160. data/plugins/commands/up/start_mixins.rb +26 -0
  161. data/plugins/communicators/ssh/communicator.rb +342 -0
  162. data/plugins/communicators/ssh/plugin.rb +19 -0
  163. data/plugins/guests/arch/cap/change_host_name.rb +18 -0
  164. data/plugins/guests/arch/cap/configure_networks.rb +23 -0
  165. data/plugins/guests/arch/guest.rb +11 -0
  166. data/plugins/guests/arch/plugin.rb +25 -0
  167. data/plugins/guests/debian/cap/change_host_name.rb +18 -0
  168. data/plugins/guests/debian/cap/configure_networks.rb +61 -0
  169. data/plugins/guests/debian/guest.rb +9 -0
  170. data/plugins/guests/debian/plugin.rb +25 -0
  171. data/plugins/guests/fedora/cap/configure_networks.rb +59 -0
  172. data/plugins/guests/fedora/cap/network_scripts_dir.rb +15 -0
  173. data/plugins/guests/fedora/guest.rb +11 -0
  174. data/plugins/guests/fedora/plugin.rb +25 -0
  175. data/plugins/guests/freebsd/cap/change_host_name.rb +14 -0
  176. data/plugins/guests/freebsd/cap/configure_networks.rb +39 -0
  177. data/plugins/guests/freebsd/cap/halt.rb +16 -0
  178. data/plugins/guests/freebsd/cap/mount_nfs_folder.rb +14 -0
  179. data/plugins/guests/freebsd/guest.rb +14 -0
  180. data/plugins/guests/freebsd/plugin.rb +35 -0
  181. data/plugins/guests/gentoo/cap/change_host_name.rb +17 -0
  182. data/plugins/guests/gentoo/cap/configure_networks.rb +43 -0
  183. data/plugins/guests/gentoo/guest.rb +9 -0
  184. data/plugins/guests/gentoo/plugin.rb +25 -0
  185. data/plugins/guests/linux/cap/halt.rb +16 -0
  186. data/plugins/guests/linux/cap/mount_nfs.rb +30 -0
  187. data/plugins/guests/linux/cap/mount_virtualbox_shared_folder.rb +40 -0
  188. data/plugins/guests/linux/cap/read_ip_address.rb +17 -0
  189. data/plugins/guests/linux/cap/shell_expand_guest_path.rb +26 -0
  190. data/plugins/guests/linux/guest.rb +11 -0
  191. data/plugins/guests/linux/plugin.rb +40 -0
  192. data/plugins/guests/openbsd/cap/halt.rb +16 -0
  193. data/plugins/guests/openbsd/guest.rb +11 -0
  194. data/plugins/guests/openbsd/plugin.rb +20 -0
  195. data/plugins/guests/pld/cap/network_scripts_dir.rb +11 -0
  196. data/plugins/guests/pld/guest.rb +11 -0
  197. data/plugins/guests/pld/plugin.rb +20 -0
  198. data/plugins/guests/redhat/cap/change_host_name.rb +18 -0
  199. data/plugins/guests/redhat/cap/configure_networks.rb +60 -0
  200. data/plugins/guests/redhat/cap/network_scripts_dir.rb +11 -0
  201. data/plugins/guests/redhat/guest.rb +11 -0
  202. data/plugins/guests/redhat/plugin.rb +30 -0
  203. data/plugins/guests/solaris/cap/change_host_name.rb +17 -0
  204. data/plugins/guests/solaris/cap/configure_networks.rb +25 -0
  205. data/plugins/guests/solaris/cap/halt.rb +21 -0
  206. data/plugins/guests/solaris/cap/mount_virtualbox_shared_folder.rb +28 -0
  207. data/plugins/guests/solaris/config.rb +18 -0
  208. data/plugins/guests/solaris/guest.rb +14 -0
  209. data/plugins/guests/solaris/plugin.rb +40 -0
  210. data/plugins/guests/suse/cap/change_host_name.rb +18 -0
  211. data/plugins/guests/suse/cap/network_scripts_dir.rb +11 -0
  212. data/plugins/guests/suse/guest.rb +11 -0
  213. data/plugins/guests/suse/plugin.rb +25 -0
  214. data/plugins/guests/ubuntu/cap/change_host_name.rb +23 -0
  215. data/plugins/guests/ubuntu/guest.rb +32 -0
  216. data/plugins/guests/ubuntu/plugin.rb +20 -0
  217. data/plugins/hosts/arch/host.rb +68 -0
  218. data/plugins/hosts/arch/plugin.rb +15 -0
  219. data/plugins/hosts/bsd/host.rb +102 -0
  220. data/plugins/hosts/bsd/plugin.rb +15 -0
  221. data/plugins/hosts/fedora/host.rb +51 -0
  222. data/plugins/hosts/fedora/plugin.rb +15 -0
  223. data/plugins/hosts/freebsd/host.rb +43 -0
  224. data/plugins/hosts/freebsd/plugin.rb +15 -0
  225. data/plugins/hosts/gentoo/host.rb +24 -0
  226. data/plugins/hosts/gentoo/plugin.rb +15 -0
  227. data/plugins/hosts/linux/host.rb +95 -0
  228. data/plugins/hosts/linux/plugin.rb +15 -0
  229. data/plugins/hosts/opensuse/host.rb +34 -0
  230. data/plugins/hosts/opensuse/plugin.rb +15 -0
  231. data/plugins/hosts/windows/host.rb +17 -0
  232. data/plugins/hosts/windows/plugin.rb +15 -0
  233. data/plugins/kernel_v1/config/nfs.rb +20 -0
  234. data/plugins/kernel_v1/config/package.rb +17 -0
  235. data/plugins/kernel_v1/config/ssh.rb +46 -0
  236. data/plugins/kernel_v1/config/vagrant.rb +31 -0
  237. data/plugins/kernel_v1/config/vm.rb +184 -0
  238. data/plugins/kernel_v1/plugin.rb +44 -0
  239. data/plugins/kernel_v2/config/nfs.rb +14 -0
  240. data/plugins/kernel_v2/config/package.rb +13 -0
  241. data/plugins/kernel_v2/config/ssh.rb +76 -0
  242. data/plugins/kernel_v2/config/ssh_connect.rb +40 -0
  243. data/plugins/kernel_v2/config/vagrant.rb +13 -0
  244. data/plugins/kernel_v2/config/vm.rb +416 -0
  245. data/plugins/kernel_v2/config/vm_provisioner.rb +55 -0
  246. data/plugins/kernel_v2/config/vm_subvm.rb +30 -0
  247. data/plugins/kernel_v2/plugin.rb +44 -0
  248. data/plugins/providers/virtualbox/action/boot.rb +49 -0
  249. data/plugins/providers/virtualbox/action/check_accessible.rb +23 -0
  250. data/plugins/providers/virtualbox/action/check_created.rb +21 -0
  251. data/plugins/providers/virtualbox/action/check_guest_additions.rb +45 -0
  252. data/plugins/providers/virtualbox/action/check_running.rb +21 -0
  253. data/plugins/providers/virtualbox/action/check_virtualbox.rb +22 -0
  254. data/plugins/providers/virtualbox/action/clean_machine_folder.rb +43 -0
  255. data/plugins/providers/virtualbox/action/clear_forwarded_ports.rb +18 -0
  256. data/plugins/providers/virtualbox/action/clear_network_interfaces.rb +31 -0
  257. data/plugins/providers/virtualbox/action/clear_shared_folders.rb +17 -0
  258. data/plugins/providers/virtualbox/action/created.rb +20 -0
  259. data/plugins/providers/virtualbox/action/customize.rb +36 -0
  260. data/plugins/providers/virtualbox/action/destroy.rb +19 -0
  261. data/plugins/providers/virtualbox/action/destroy_unused_network_interfaces.rb +16 -0
  262. data/plugins/providers/virtualbox/action/discard_state.rb +20 -0
  263. data/plugins/providers/virtualbox/action/export.rb +57 -0
  264. data/plugins/providers/virtualbox/action/forced_halt.rb +25 -0
  265. data/plugins/providers/virtualbox/action/forward_ports.rb +87 -0
  266. data/plugins/providers/virtualbox/action/import.rb +51 -0
  267. data/plugins/providers/virtualbox/action/is_paused.rb +20 -0
  268. data/plugins/providers/virtualbox/action/is_running.rb +20 -0
  269. data/plugins/providers/virtualbox/action/is_saved.rb +20 -0
  270. data/plugins/providers/virtualbox/action/match_mac_address.rb +21 -0
  271. data/plugins/providers/virtualbox/action/message_already_running.rb +16 -0
  272. data/plugins/providers/virtualbox/action/message_not_created.rb +16 -0
  273. data/plugins/providers/virtualbox/action/message_not_running.rb +16 -0
  274. data/plugins/providers/virtualbox/action/message_will_not_destroy.rb +17 -0
  275. data/plugins/providers/virtualbox/action/network.rb +410 -0
  276. data/plugins/providers/virtualbox/action/package.rb +20 -0
  277. data/plugins/providers/virtualbox/action/package_vagrantfile.rb +33 -0
  278. data/plugins/providers/virtualbox/action/prepare_forwarded_port_collision_params.rb +35 -0
  279. data/plugins/providers/virtualbox/action/prepare_nfs_settings.rb +64 -0
  280. data/plugins/providers/virtualbox/action/prune_nfs_exports.rb +20 -0
  281. data/plugins/providers/virtualbox/action/resume.rb +25 -0
  282. data/plugins/providers/virtualbox/action/sane_defaults.rb +91 -0
  283. data/plugins/providers/virtualbox/action/set_name.rb +40 -0
  284. data/plugins/providers/virtualbox/action/setup_package_files.rb +51 -0
  285. data/plugins/providers/virtualbox/action/share_folders.rb +128 -0
  286. data/plugins/providers/virtualbox/action/suspend.rb +20 -0
  287. data/plugins/providers/virtualbox/action.rb +311 -0
  288. data/plugins/providers/virtualbox/config.rb +86 -0
  289. data/plugins/providers/virtualbox/driver/base.rb +360 -0
  290. data/plugins/providers/virtualbox/driver/meta.rb +142 -0
  291. data/plugins/providers/virtualbox/driver/version_4_0.rb +485 -0
  292. data/plugins/providers/virtualbox/driver/version_4_1.rb +485 -0
  293. data/plugins/providers/virtualbox/driver/version_4_2.rb +482 -0
  294. data/plugins/providers/virtualbox/model/forwarded_port.rb +58 -0
  295. data/plugins/providers/virtualbox/plugin.rb +42 -0
  296. data/plugins/providers/virtualbox/provider.rb +92 -0
  297. data/plugins/providers/virtualbox/util/compile_forwarded_ports.rb +31 -0
  298. data/plugins/provisioners/ansible/config.rb +72 -0
  299. data/plugins/provisioners/ansible/plugin.rb +23 -0
  300. data/plugins/provisioners/ansible/provisioner.rb +45 -0
  301. data/plugins/provisioners/cfengine/cap/debian/cfengine_install.rb +19 -0
  302. data/plugins/provisioners/cfengine/cap/linux/cfengine_installed.rb +14 -0
  303. data/plugins/provisioners/cfengine/cap/linux/cfengine_needs_bootstrap.rb +34 -0
  304. data/plugins/provisioners/cfengine/cap/redhat/cfengine_install.rb +24 -0
  305. data/plugins/provisioners/cfengine/config.rb +120 -0
  306. data/plugins/provisioners/cfengine/plugin.rb +42 -0
  307. data/plugins/provisioners/cfengine/provisioner.rb +136 -0
  308. data/plugins/provisioners/chef/config/base.rb +85 -0
  309. data/plugins/provisioners/chef/config/chef_client.rb +57 -0
  310. data/plugins/provisioners/chef/config/chef_solo.rb +87 -0
  311. data/plugins/provisioners/chef/plugin.rb +33 -0
  312. data/plugins/provisioners/chef/provisioner/base.rb +93 -0
  313. data/plugins/provisioners/chef/provisioner/chef_client.rb +107 -0
  314. data/plugins/provisioners/chef/provisioner/chef_solo.rb +192 -0
  315. data/plugins/provisioners/puppet/config/puppet.rb +70 -0
  316. data/plugins/provisioners/puppet/config/puppet_server.rb +16 -0
  317. data/plugins/provisioners/puppet/plugin.rb +33 -0
  318. data/plugins/provisioners/puppet/provisioner/puppet.rb +117 -0
  319. data/plugins/provisioners/puppet/provisioner/puppet_server.rb +67 -0
  320. data/plugins/provisioners/shell/config.rb +56 -0
  321. data/plugins/provisioners/shell/plugin.rb +23 -0
  322. data/plugins/provisioners/shell/provisioner.rb +86 -0
  323. data/tasks/acceptance.rake +113 -0
  324. data/tasks/bundler.rake +3 -0
  325. data/tasks/test.rake +20 -0
  326. data/templates/commands/init/Vagrantfile.erb +111 -0
  327. data/templates/commands/ssh_config/config.erb +16 -0
  328. data/templates/config/messages.erb +14 -0
  329. data/templates/config/validation_failed.erb +7 -0
  330. data/templates/guests/arch/network_dhcp.erb +4 -0
  331. data/templates/guests/arch/network_static.erb +6 -0
  332. data/templates/guests/debian/network_dhcp.erb +11 -0
  333. data/templates/guests/debian/network_static.erb +7 -0
  334. data/templates/guests/fedora/network_dhcp.erb +6 -0
  335. data/templates/guests/fedora/network_static.erb +13 -0
  336. data/templates/guests/freebsd/network_dhcp.erb +3 -0
  337. data/templates/guests/freebsd/network_static.erb +3 -0
  338. data/templates/guests/gentoo/network_dhcp.erb +4 -0
  339. data/templates/guests/gentoo/network_static.erb +4 -0
  340. data/templates/guests/redhat/network_dhcp.erb +6 -0
  341. data/templates/guests/redhat/network_static.erb +8 -0
  342. data/templates/locales/en.yml +1126 -0
  343. data/templates/nfs/exports.erb +5 -0
  344. data/templates/nfs/exports_freebsd.erb +5 -0
  345. data/templates/nfs/exports_linux.erb +5 -0
  346. data/templates/package_Vagrantfile.erb +11 -0
  347. data/templates/provisioners/chef_client/client.erb +32 -0
  348. data/templates/provisioners/chef_solo/solo.erb +25 -0
  349. data/templates/rgloader.rb +9 -0
  350. data/test/acceptance/base.rb +48 -0
  351. data/test/acceptance/box_test.rb +99 -0
  352. data/test/acceptance/destroy_test.rb +37 -0
  353. data/test/acceptance/halt_test.rb +72 -0
  354. data/test/acceptance/init_test.rb +33 -0
  355. data/test/acceptance/networking/host_only_test.rb +37 -0
  356. data/test/acceptance/networking/port_forward_test.rb +125 -0
  357. data/test/acceptance/package_test.rb +46 -0
  358. data/test/acceptance/provisioning/basic_test.rb +61 -0
  359. data/test/acceptance/provisioning/chef_solo_test.rb +37 -0
  360. data/test/acceptance/provisioning/shell_test.rb +53 -0
  361. data/test/acceptance/resume_test.rb +17 -0
  362. data/test/acceptance/shared_folders_test.rb +84 -0
  363. data/test/acceptance/skeletons/chef_solo_basic/README.md +3 -0
  364. data/test/acceptance/skeletons/chef_solo_basic/cookbooks/basic/recipes/default.rb +5 -0
  365. data/test/acceptance/skeletons/chef_solo_json/README.md +3 -0
  366. data/test/acceptance/skeletons/chef_solo_json/cookbooks/basic/recipes/default.rb +6 -0
  367. data/test/acceptance/skeletons/provisioner_multi/README.md +3 -0
  368. data/test/acceptance/skeletons/provisioner_multi/cookbooks/basic/recipes/default.rb +5 -0
  369. data/test/acceptance/ssh_test.rb +46 -0
  370. data/test/acceptance/support/config.rb +42 -0
  371. data/test/acceptance/support/isolated_environment.rb +118 -0
  372. data/test/acceptance/support/matchers/have_color.rb +9 -0
  373. data/test/acceptance/support/matchers/match_output.rb +14 -0
  374. data/test/acceptance/support/matchers/succeed.rb +14 -0
  375. data/test/acceptance/support/network_tests.rb +29 -0
  376. data/test/acceptance/support/output.rb +95 -0
  377. data/test/acceptance/support/shared/base_context.rb +72 -0
  378. data/test/acceptance/support/shared/command_examples.rb +33 -0
  379. data/test/acceptance/support/virtualbox.rb +36 -0
  380. data/test/acceptance/suspend_test.rb +56 -0
  381. data/test/acceptance/up_basic_test.rb +33 -0
  382. data/test/acceptance/up_with_box_url.rb +40 -0
  383. data/test/acceptance/vagrant_test.rb +47 -0
  384. data/test/acceptance/version_test.rb +15 -0
  385. data/test/config/acceptance_boxes.yml +7 -0
  386. data/test/support/isolated_environment.rb +46 -0
  387. data/test/support/tempdir.rb +43 -0
  388. data/test/unit/base.rb +27 -0
  389. data/test/unit/support/dummy_provider.rb +16 -0
  390. data/test/unit/support/isolated_environment.rb +179 -0
  391. data/test/unit/support/shared/base_context.rb +104 -0
  392. data/test/unit/vagrant/action/builder_test.rb +242 -0
  393. data/test/unit/vagrant/action/builtin/call_test.rb +145 -0
  394. data/test/unit/vagrant/action/builtin/confirm_test.rb +36 -0
  395. data/test/unit/vagrant/action/builtin/env_set_test.rb +20 -0
  396. data/test/unit/vagrant/action/builtin/graceful_halt_test.rb +61 -0
  397. data/test/unit/vagrant/action/builtin/lock_test.rb +98 -0
  398. data/test/unit/vagrant/action/builtin/ssh_exec_test.rb +57 -0
  399. data/test/unit/vagrant/action/hook_test.rb +120 -0
  400. data/test/unit/vagrant/action/runner_test.rb +71 -0
  401. data/test/unit/vagrant/action/warden_test.rb +92 -0
  402. data/test/unit/vagrant/batch_action_test.rb +36 -0
  403. data/test/unit/vagrant/box_collection_test.rb +237 -0
  404. data/test/unit/vagrant/box_test.rb +122 -0
  405. data/test/unit/vagrant/cli_test.rb +27 -0
  406. data/test/unit/vagrant/config/loader_test.rb +184 -0
  407. data/test/unit/vagrant/config/v1/dummy_config_test.rb +24 -0
  408. data/test/unit/vagrant/config/v1/loader_test.rb +145 -0
  409. data/test/unit/vagrant/config/v1/root_test.rb +40 -0
  410. data/test/unit/vagrant/config/v2/dummy_config_test.rb +24 -0
  411. data/test/unit/vagrant/config/v2/loader_test.rb +151 -0
  412. data/test/unit/vagrant/config/v2/root_test.rb +97 -0
  413. data/test/unit/vagrant/config/v2/util_test.rb +21 -0
  414. data/test/unit/vagrant/config_test.rb +66 -0
  415. data/test/unit/vagrant/environment_test.rb +721 -0
  416. data/test/unit/vagrant/guest_test.rb +166 -0
  417. data/test/unit/vagrant/hosts_test.rb +37 -0
  418. data/test/unit/vagrant/machine_state_test.rb +26 -0
  419. data/test/unit/vagrant/machine_test.rb +384 -0
  420. data/test/unit/vagrant/plugin/v1/command_test.rb +143 -0
  421. data/test/unit/vagrant/plugin/v1/communicator_test.rb +9 -0
  422. data/test/unit/vagrant/plugin/v1/config_test.rb +50 -0
  423. data/test/unit/vagrant/plugin/v1/host_test.rb +5 -0
  424. data/test/unit/vagrant/plugin/v1/manager_test.rb +114 -0
  425. data/test/unit/vagrant/plugin/v1/plugin_test.rb +267 -0
  426. data/test/unit/vagrant/plugin/v1/provider_test.rb +18 -0
  427. data/test/unit/vagrant/plugin/v2/command_test.rb +238 -0
  428. data/test/unit/vagrant/plugin/v2/communicator_test.rb +9 -0
  429. data/test/unit/vagrant/plugin/v2/components_test.rb +17 -0
  430. data/test/unit/vagrant/plugin/v2/config_test.rb +60 -0
  431. data/test/unit/vagrant/plugin/v2/host_test.rb +5 -0
  432. data/test/unit/vagrant/plugin/v2/manager_test.rb +174 -0
  433. data/test/unit/vagrant/plugin/v2/plugin_test.rb +305 -0
  434. data/test/unit/vagrant/plugin/v2/provider_test.rb +18 -0
  435. data/test/unit/vagrant/registry_test.rb +128 -0
  436. data/test/unit/vagrant/util/ansi_escape_code_remover_test.rb +16 -0
  437. data/test/unit/vagrant/util/downloader_test.rb +57 -0
  438. data/test/unit/vagrant/util/file_checksum_test.rb +23 -0
  439. data/test/unit/vagrant/util/hash_with_indifferent_access_test.rb +38 -0
  440. data/test/unit/vagrant/util/is_port_open_test.rb +53 -0
  441. data/test/unit/vagrant/util/line_endings_helper_test.rb +16 -0
  442. data/test/unit/vagrant/util/network_ip_test.rb +17 -0
  443. data/test/unit/vagrant/util/retryable_test.rb +106 -0
  444. data/test/unit/vagrant/util/safe_chdir_test.rb +43 -0
  445. data/test/unit/vagrant/util/scoped_hash_override_test.rb +48 -0
  446. data/test/unit/vagrant/util/ssh_test.rb +30 -0
  447. data/test/unit/vagrant/util/string_block_editor_test.rb +106 -0
  448. data/test/unit/vagrant/util/which_test.rb +43 -0
  449. data/test/unit/vagrant_test.rb +56 -0
  450. data/tnargav.gemspec +69 -0
  451. data/vagrant.gemspec +69 -0
  452. metadata +730 -0
@@ -0,0 +1,72 @@
1
+ module VagrantPlugins
2
+ module Ansible
3
+ class Config < Vagrant.plugin("2", :config)
4
+ attr_accessor :playbook
5
+ attr_accessor :extra_vars
6
+ attr_accessor :inventory_file
7
+ attr_accessor :ask_sudo_pass
8
+ attr_accessor :limit
9
+ attr_accessor :sudo
10
+ attr_accessor :sudo_user
11
+ attr_accessor :verbose
12
+
13
+ def initialize
14
+ @playbook = UNSET_VALUE
15
+ @extra_vars = UNSET_VALUE
16
+ @inventory_file = UNSET_VALUE
17
+ @ask_sudo_pass = UNSET_VALUE
18
+ @limit = UNSET_VALUE
19
+ @sudo = UNSET_VALUE
20
+ @sudo_user = UNSET_VALUE
21
+ @verbose = UNSET_VALUE
22
+ end
23
+
24
+ def finalize!
25
+ @playbook = nil if @playbook == UNSET_VALUE
26
+ @extra_vars = nil if @extra_vars == UNSET_VALUE
27
+ @inventory_file = nil if @inventory_file == UNSET_VALUE
28
+ @ask_sudo_pass = nil if @ask_sudo_pass == UNSET_VALUE
29
+ @limit = nil if @limit == UNSET_VALUE
30
+ @sudo = nil if @sudo == UNSET_VALUE
31
+ @sudo_user = nil if @sudo_user == UNSET_VALUE
32
+ @verbose = nil if @verbose == UNSET_VALUE
33
+ end
34
+
35
+ def validate(machine)
36
+ errors = []
37
+
38
+ # Validate that a playbook path was provided
39
+ if !playbook
40
+ errors << I18n.t("vagrant.provisioners.ansible.no_playbook")
41
+ end
42
+
43
+ # Validate the existence of said playbook on the host
44
+ if playbook
45
+ expanded_path = Pathname.new(playbook).expand_path(machine.env.root_path)
46
+ if !expanded_path.file?
47
+ errors << I18n.t("vagrant.provisioners.ansible.playbook_path_invalid",
48
+ :path => expanded_path)
49
+ end
50
+ end
51
+
52
+ # Validate that extra_vars is a hash, if set
53
+ if extra_vars
54
+ if !extra_vars.kind_of?(Hash)
55
+ errors << I18n.t("vagrant.provisioners.ansible.extra_vars_not_hash")
56
+ end
57
+ end
58
+
59
+ # Validate the existence of the inventory_file, if specified
60
+ if inventory_file
61
+ expanded_path = Pathname.new(inventory_file).expand_path(machine.env.root_path)
62
+ if !expanded_path.file?
63
+ errors << I18n.t("vagrant.provisioners.ansible.inventory_file_path_invalid",
64
+ :path => expanded_path)
65
+ end
66
+ end
67
+
68
+ { "ansible provisioner" => errors }
69
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,23 @@
1
+ require "vagrant"
2
+
3
+ module VagrantPlugins
4
+ module Ansible
5
+ class Plugin < Vagrant.plugin("2")
6
+ name "ansible"
7
+ description <<-DESC
8
+ Provides support for provisioning your virtual machines with
9
+ Ansible playbooks.
10
+ DESC
11
+
12
+ config(:ansible, :provisioner) do
13
+ require File.expand_path("../config", __FILE__)
14
+ Config
15
+ end
16
+
17
+ provisioner(:ansible) do
18
+ require File.expand_path("../provisioner", __FILE__)
19
+ Provisioner
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,45 @@
1
+ module VagrantPlugins
2
+ module Ansible
3
+ class Provisioner < Vagrant.plugin("2", :provisioner)
4
+ def provision
5
+ ssh = @machine.ssh_info
6
+
7
+ options = %W[--private-key=#{ssh[:private_key_path]} --user=#{ssh[:username]}]
8
+ options << "--extra-vars=" + config.extra_vars.map{|k,v| "#{k}=#{v}"}.join(' ') if config.extra_vars
9
+ options << "--inventory-file=#{config.inventory_file}" if config.inventory_file
10
+ options << "--ask-sudo-pass" if config.ask_sudo_pass
11
+
12
+ if config.limit
13
+ if not config.limit.kind_of?(Array)
14
+ config.limit = [config.limit]
15
+ end
16
+ config.limit = config.limit.join(",")
17
+ options << "--limit=#{config.limit}"
18
+ end
19
+
20
+ options << "--sudo" if config.sudo
21
+ options << "--sudo-user=#{config.sudo_user}" if config.sudo_user
22
+ options << "--verbose" if config.verbose
23
+
24
+ # Assemble the full ansible-playbook command
25
+ command = (%w(ansible-playbook) << options << config.playbook).flatten
26
+
27
+ # Write stdout and stderr data, since it's the regular Ansible output
28
+ command << {
29
+ :env => { "ANSIBLE_FORCE_COLOR" => "true" },
30
+ :notify => [:stdout, :stderr]
31
+ }
32
+
33
+ begin
34
+ Vagrant::Util::Subprocess.execute(*command) do |type, data|
35
+ if type == :stdout || type == :stderr
36
+ @machine.env.ui.info(data.chomp, :prefix => false)
37
+ end
38
+ end
39
+ rescue Vagrant::Util::Subprocess::LaunchError
40
+ raise Vagrant::Errors::AnsiblePlaybookAppNotFound
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,19 @@
1
+ module VagrantPlugins
2
+ module CFEngine
3
+ module Cap
4
+ module Debian
5
+ module CFEngineInstall
6
+ def self.cfengine_install(machine, config)
7
+ machine.communicate.tap do |comm|
8
+ comm.sudo("mkdir -p #{File.dirname(config.deb_repo_file)} && /bin/echo #{config.deb_repo_line} > #{config.deb_repo_file}")
9
+ comm.sudo("GPGFILE=`tempfile`; wget -O $GPGFILE #{config.repo_gpg_key_url} && apt-key add $GPGFILE; rm -f $GPGFILE")
10
+
11
+ comm.sudo("apt-get update")
12
+ comm.sudo("apt-get install -y cfengine-community")
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,14 @@
1
+ module VagrantPlugins
2
+ module CFEngine
3
+ module Cap
4
+ module Linux
5
+ module CFEngineInstalled
6
+ def self.cfengine_installed(machine)
7
+ machine.communicate.test(
8
+ "test -d /var/cfengine && test -x /var/cfengine/bin/cf-agent", sudo: true)
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,34 @@
1
+ require "log4r"
2
+
3
+ module VagrantPlugins
4
+ module CFEngine
5
+ module Cap
6
+ module Linux
7
+ module CFEngineNeedsBootstrap
8
+ def self.cfengine_needs_bootstrap(machine, config)
9
+ logger = Log4r::Logger.new("vagrant::plugins::cfengine::cap_linux_cfengine_bootstrap")
10
+
11
+ machine.communicate.tap do |comm|
12
+ # We hardcode fixing the permissions on /var/cfengine/ppkeys/, if it exists,
13
+ # because otherwise CFEngine will fail to bootstrap.
14
+ if comm.test("test -d /var/cfengine/ppkeys", :sudo => true)
15
+ logger.debug("Fixing permissions on /var/cfengine/ppkeys")
16
+ comm.sudo("chmod -R 600 /var/cfengine/ppkeys")
17
+ end
18
+
19
+ logger.debug("Checking if CFEngine is bootstrapped...")
20
+ bootstrapped = comm.test("test -f /var/cfengine/policy_server.dat", :sudo => true)
21
+ if bootstrapped && !config.force_bootstrap
22
+ logger.info("CFEngine already bootstrapped, no need to do it again")
23
+ return false
24
+ end
25
+
26
+ logger.info("CFEngine needs bootstrap.")
27
+ return true
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,24 @@
1
+ require "log4r"
2
+
3
+ module VagrantPlugins
4
+ module CFEngine
5
+ module Cap
6
+ module RedHat
7
+ module CFEngineInstall
8
+ def self.cfengine_install(machine, config)
9
+ logger = Log4r::Logger.new("vagrant::plugins::cfengine::cap_redhat_cfengine_install")
10
+
11
+ machine.communicate.tap do |comm|
12
+ logger.info("Adding the CFEngine repository to #{config.yum_repo_file}")
13
+ comm.sudo("mkdir -p #{File.dirname(config.yum_repo_file)} && (echo '[cfengine-repository]'; echo 'name=CFEngine Community Yum Repository'; echo 'baseurl=#{config.yum_repo_url}'; echo 'enabled=1'; echo 'gpgcheck=1') > #{config.yum_repo_file}")
14
+ logger.info("Installing CFEngine Community Yum Repository GPG KEY from #{config.repo_gpg_key_url}")
15
+ comm.sudo("GPGFILE=$(mktemp) && wget -O $GPGFILE #{config.repo_gpg_key_url} && rpm --import $GPGFILE; rm -f $GPGFILE")
16
+
17
+ comm.sudo("yum -y install cfengine-community")
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,120 @@
1
+ require "pathname"
2
+
3
+ require "vagrant"
4
+
5
+ module VagrantPlugins
6
+ module CFEngine
7
+ class Config < Vagrant.plugin("2", :config)
8
+ attr_accessor :am_policy_hub
9
+ attr_accessor :extra_agent_args
10
+ attr_accessor :classes
11
+ attr_accessor :deb_repo_file
12
+ attr_accessor :deb_repo_line
13
+ attr_accessor :files_path
14
+ attr_accessor :force_bootstrap
15
+ attr_accessor :install
16
+ attr_accessor :mode
17
+ attr_accessor :policy_server_address
18
+ attr_accessor :repo_gpg_key_url
19
+ attr_accessor :run_file
20
+ attr_accessor :upload_path
21
+ attr_accessor :yum_repo_file
22
+ attr_accessor :yum_repo_url
23
+
24
+ def initialize
25
+ @am_policy_hub = UNSET_VALUE
26
+ @classes = UNSET_VALUE
27
+ @deb_repo_file = UNSET_VALUE
28
+ @deb_repo_line = UNSET_VALUE
29
+ @extra_agent_args = UNSET_VALUE
30
+ @files_path = UNSET_VALUE
31
+ @force_bootstrap = UNSET_VALUE
32
+ @install = UNSET_VALUE
33
+ @mode = UNSET_VALUE
34
+ @policy_server_address = UNSET_VALUE
35
+ @repo_gpg_key_url = UNSET_VALUE
36
+ @run_file = UNSET_VALUE
37
+ @upload_path = UNSET_VALUE
38
+ @yum_repo_file = UNSET_VALUE
39
+ @yum_repo_url = UNSET_VALUE
40
+ end
41
+
42
+ def finalize!
43
+ @am_policy_hub = false if @am_policy_hub == UNSET_VALUE
44
+
45
+ @classes = nil if @classes == UNSET_VALUE
46
+
47
+ if @deb_repo_file == UNSET_VALUE
48
+ @deb_repo_file = "/etc/apt/sources.list.d/cfengine-community.list"
49
+ end
50
+
51
+ if @deb_repo_line == UNSET_VALUE
52
+ @deb_repo_line = "deb http://cfengine.com/pub/apt $(lsb_release -cs) main"
53
+ end
54
+
55
+ @extra_agent_args = nil if @extra_agent_args == UNSET_VALUE
56
+
57
+ @files_path = nil if @files_path == UNSET_VALUE
58
+
59
+ @force_bootstrap = false if @force_bootstrap == UNSET_VALUE
60
+
61
+ @install = true if @install == UNSET_VALUE
62
+ @install = @install.to_sym if @install.respond_to?(:to_sym)
63
+
64
+ @mode = :bootstrap if @mode == UNSET_VALUE
65
+ @mode = @mode.to_sym
66
+
67
+ @run_file = nil if @run_file == UNSET_VALUE
68
+
69
+ @policy_server_address = nil if @policy_server_address == UNSET_VALUE
70
+
71
+ if @repo_gpg_key_url == UNSET_VALUE
72
+ @repo_gpg_key_url = "http://cfengine.com/pub/gpg.key"
73
+ end
74
+
75
+ @upload_path = "/tmp/vagrant-cfengine-file" if @upload_path == UNSET_VALUE
76
+
77
+ if @yum_repo_file == UNSET_VALUE
78
+ @yum_repo_file = "/etc/yum.repos.d/cfengine-community.repo"
79
+ end
80
+
81
+ if @yum_repo_url == UNSET_VALUE
82
+ @yum_repo_url = "http://cfengine.com/pub/yum/"
83
+ end
84
+ end
85
+
86
+ def validate(machine)
87
+ errors = []
88
+
89
+ valid_modes = [:bootstrap, :single_run]
90
+ errors << I18n.t("vagrant.cfengine_config.invalid_mode") if !valid_modes.include?(@mode)
91
+
92
+ if @mode == :bootstrap
93
+ if !@policy_server_address && !@am_policy_hub
94
+ errors << I18n.t("vagrant.cfengine_config.policy_server_address")
95
+ end
96
+ end
97
+
98
+ if @classes && !@classes.is_a?(Array)
99
+ errors << I18n.t("vagrant.cfengine_config.classes_array")
100
+ end
101
+
102
+ if @files_path
103
+ expanded = Pathname.new(@files_path).expand_path(machine.env.root_path)
104
+ if !expanded.directory?
105
+ errors << I18n.t("vagrant.cfengine_config.files_path_not_directory")
106
+ end
107
+ end
108
+
109
+ if @run_file
110
+ expanded = Pathname.new(@run_file).expand_path(machine.env.root_path)
111
+ if !expanded.file?
112
+ errors << I18n.t("vagrant.cfengine_config.run_file_not_found")
113
+ end
114
+ end
115
+
116
+ { "CFEngine" => errors }
117
+ end
118
+ end
119
+ end
120
+ end
@@ -0,0 +1,42 @@
1
+ require "vagrant"
2
+
3
+ module VagrantPlugins
4
+ module CFEngine
5
+ class Plugin < Vagrant.plugin("2")
6
+ name "CFEngine Provisioner"
7
+ description <<-DESC
8
+ Provisions machines with CFEngine.
9
+ DESC
10
+
11
+ config(:cfengine, :provisioner) do
12
+ require_relative "config"
13
+ Config
14
+ end
15
+
16
+ guest_capability("debian", "cfengine_install") do
17
+ require_relative "cap/debian/cfengine_install"
18
+ Cap::Debian::CFEngineInstall
19
+ end
20
+
21
+ guest_capability("linux", "cfengine_needs_bootstrap") do
22
+ require_relative "cap/linux/cfengine_needs_bootstrap"
23
+ Cap::Linux::CFEngineNeedsBootstrap
24
+ end
25
+
26
+ guest_capability("linux", "cfengine_installed") do
27
+ require_relative "cap/linux/cfengine_installed"
28
+ Cap::Linux::CFEngineInstalled
29
+ end
30
+
31
+ guest_capability("redhat", "cfengine_install") do
32
+ require_relative "cap/redhat/cfengine_install"
33
+ Cap::RedHat::CFEngineInstall
34
+ end
35
+
36
+ provisioner(:cfengine) do
37
+ require_relative "provisioner"
38
+ Provisioner
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,136 @@
1
+ require "log4r"
2
+ require "vagrant"
3
+
4
+ module VagrantPlugins
5
+ module CFEngine
6
+ class Provisioner < Vagrant.plugin("2", :provisioner)
7
+ def provision
8
+ @logger = Log4r::Logger.new("vagrant::plugins::cfengine")
9
+
10
+ @logger.info("Checking for CFEngine installation...")
11
+ handle_cfengine_installation
12
+
13
+ if @config.files_path
14
+ @machine.ui.info(I18n.t("vagrant.cfengine_installing_files_path"))
15
+ install_files(Pathname.new(@config.files_path).expand_path(@machine.env.root_path))
16
+ end
17
+
18
+ handle_cfengine_bootstrap if @config.mode == :bootstrap
19
+
20
+ if @config.mode == :single_run
21
+ # Just let people know
22
+ @machine.ui.info(I18n.t("vagrant.cfengine_single_run"))
23
+ end
24
+
25
+ if @config.run_file
26
+ @machine.ui.info(I18n.t("vagrant.cfengine_single_run_execute"))
27
+ path = Pathname.new(@config.run_file).expand_path(@machine.env.root_path)
28
+ machine.communicate.upload(path.to_s, @config.upload_path)
29
+ cfagent("-KI -f #{@config.upload_path}#{cfagent_classes_args}#{cfagent_extra_args}")
30
+ end
31
+ end
32
+
33
+ protected
34
+
35
+ # This runs cf-agent with the given arguments.
36
+ def cfagent(args, options=nil)
37
+ options ||= {}
38
+ command = "/var/cfengine/bin/cf-agent #{args}"
39
+
40
+ @machine.communicate.sudo(command, error_check: options[:error_check]) do |type, data|
41
+ if [:stderr, :stdout].include?(type)
42
+ # Output the data with the proper color based on the stream.
43
+ color = type == :stdout ? :green : :red
44
+
45
+ # Note: Be sure to chomp the data to avoid the newlines that the
46
+ # Chef outputs.
47
+ @machine.ui.info(data.chomp, :color => color, :prefix => false)
48
+ end
49
+ end
50
+ end
51
+
52
+ # Returns the arguments for the classes configuration if they are
53
+ # set.
54
+ #
55
+ # @return [String]
56
+ def cfagent_classes_args
57
+ return "" if !@config.classes
58
+
59
+ args = @config.classes.map { |c| "-D#{c}" }.join(" ")
60
+ return " #{args}"
61
+ end
62
+
63
+ # Extra arguments for calles to cf-agent.
64
+ #
65
+ # @return [String]
66
+ def cfagent_extra_args
67
+ return "" if !@config.extra_agent_args
68
+ return " #{@config.extra_agent_args}"
69
+ end
70
+
71
+ # This handles checking if the CFEngine installation needs to
72
+ # be bootstrapped, and bootstraps if it does.
73
+ def handle_cfengine_bootstrap
74
+ @logger.info("Bootstrapping CFEngine...")
75
+ if !@machine.guest.capability(:cfengine_needs_bootstrap, @config)
76
+ @machine.ui.info(I18n.t("vagrant.cfengine_no_bootstrap"))
77
+ return
78
+ end
79
+
80
+ # Needs bootstrap, let's determine the parameters
81
+ policy_server_address = @config.policy_server_address
82
+ if !policy_server_address
83
+ policy_server_address = @machine.guest.capability(:read_ip_address)
84
+ raise Vagrant::Errors::CFEngineCantAutodetectIP if !policy_server_address
85
+ @machine.ui.info(I18n.t("vagrant.cfengine_detected_ip", address: policy_server_address))
86
+ end
87
+
88
+ @machine.ui.info(I18n.t("vagrant.cfengine_bootstrapping",
89
+ policy_server: policy_server_address))
90
+ result = cfagent("--bootstrap --policy-server #{policy_server_address}", error_check: false)
91
+ raise Vagrant::Errors::CFEngineBootstrapFailed if result != 0
92
+
93
+ # Policy hubs need to do additional things before they're ready
94
+ # to accept agents. Force that run now...
95
+ if @config.am_policy_hub
96
+ @machine.ui.info(I18n.t("vagrant.cfengine_bootstrapping_policy_hub"))
97
+ cfagent("-KI -f /var/cfengine/masterfiles/failsafe.cf#{cfagent_classes_args}")
98
+ cfagent("-KI #{cfagent_classes_args}#{cfagent_extra_args}")
99
+ end
100
+ end
101
+
102
+ # This handles verifying the CFEngine installation, installing it
103
+ # if it was requested, and so on. This method will raise exceptions
104
+ # if things are wrong.
105
+ def handle_cfengine_installation
106
+ if !@machine.guest.capability?(:cfengine_installed)
107
+ @machine.ui.warn(I18n.t("vagrant.cfengine_cant_detect"))
108
+ return
109
+ end
110
+
111
+ installed = @machine.guest.capability(:cfengine_installed)
112
+ if !installed || @config.install == :force
113
+ raise Vagrant::Errors::CFEngineNotInstalled if !@config.install
114
+
115
+ @machine.ui.info(I18n.t("vagrant.cfengine_installing"))
116
+ @machine.guest.capability(:cfengine_install, @config)
117
+
118
+ if !@machine.guest.capability(:cfengine_installed)
119
+ raise Vagrant::Errors::CFEngineInstallFailed
120
+ end
121
+ end
122
+ end
123
+
124
+ # This installs a set of files into the CFEngine folder within
125
+ # the machine.
126
+ #
127
+ # @param [Pathname] local_path
128
+ def install_files(local_path)
129
+ @logger.debug("Copying local files to CFEngine: #{local_path}")
130
+ @machine.communicate.sudo("rm -rf /tmp/cfengine-files")
131
+ @machine.communicate.upload(local_path.to_s, "/tmp/cfengine-files")
132
+ @machine.communicate.sudo("cp -R /tmp/cfengine-files/* /var/cfengine")
133
+ end
134
+ end
135
+ end
136
+ end
@@ -0,0 +1,85 @@
1
+ module VagrantPlugins
2
+ module Chef
3
+ module Config
4
+ class Base < Vagrant.plugin("2", :config)
5
+ attr_accessor :arguments
6
+ attr_accessor :attempts
7
+ attr_accessor :binary_path
8
+ attr_accessor :binary_env
9
+ attr_accessor :http_proxy
10
+ attr_accessor :http_proxy_user
11
+ attr_accessor :http_proxy_pass
12
+ attr_accessor :https_proxy
13
+ attr_accessor :https_proxy_user
14
+ attr_accessor :https_proxy_pass
15
+ attr_accessor :json
16
+ attr_accessor :log_level
17
+ attr_accessor :no_proxy
18
+ attr_accessor :node_name
19
+ attr_accessor :provisioning_path
20
+ attr_accessor :run_list
21
+
22
+ def initialize
23
+ super
24
+
25
+ @arguments = UNSET_VALUE
26
+ @attempts = UNSET_VALUE
27
+ @binary_path = UNSET_VALUE
28
+ @binary_env = UNSET_VALUE
29
+ @http_proxy = UNSET_VALUE
30
+ @http_proxy_user = UNSET_VALUE
31
+ @http_proxy_pass = UNSET_VALUE
32
+ @https_proxy = UNSET_VALUE
33
+ @https_proxy_user = UNSET_VALUE
34
+ @https_proxy_pass = UNSET_VALUE
35
+ @log_level = UNSET_VALUE
36
+ @no_proxy = UNSET_VALUE
37
+ @node_name = UNSET_VALUE
38
+ @provisioning_path = UNSET_VALUE
39
+
40
+ @json = {}
41
+ @run_list = []
42
+ end
43
+
44
+ def finalize!
45
+ @arguments = nil if @arguments == UNSET_VALUE
46
+ @attempts = 1 if @attempts == UNSET_VALUE
47
+ @binary_path = nil if @binary_path == UNSET_VALUE
48
+ @binary_env = nil if @binary_env == UNSET_VALUE
49
+ @http_proxy = nil if @http_proxy == UNSET_VALUE
50
+ @http_proxy_user = nil if @http_proxy_user == UNSET_VALUE
51
+ @http_proxy_pass = nil if @http_proxy_pass == UNSET_VALUE
52
+ @https_proxy = nil if @https_proxy == UNSET_VALUE
53
+ @https_proxy_user = nil if @https_proxy_user == UNSET_VALUE
54
+ @https_proxy_pass = nil if @https_proxy_pass == UNSET_VALUE
55
+ @log_level = :info if @log_level == UNSET_VALUE
56
+ @no_proxy = nil if @no_proxy == UNSET_VALUE
57
+ @node_name = nil if @node_name == UNSET_VALUE
58
+ @provisioning_path = nil if @provisioning_path == UNSET_VALUE
59
+
60
+ # Make sure the log level is a symbol
61
+ @log_level = @log_level.to_sym
62
+ end
63
+
64
+ def merge(other)
65
+ super.tap do |result|
66
+ result.instance_variable_set(:@json, @json.merge(other.json))
67
+ result.instance_variable_set(:@run_list, (@run_list + other.run_list))
68
+ end
69
+ end
70
+
71
+ # Adds a recipe to the run list
72
+ def add_recipe(name)
73
+ name = "recipe[#{name}]" unless name =~ /^recipe\[(.+?)\]$/
74
+ run_list << name
75
+ end
76
+
77
+ # Adds a role to the run list
78
+ def add_role(name)
79
+ name = "role[#{name}]" unless name =~ /^role\[(.+?)\]$/
80
+ run_list << name
81
+ end
82
+ end
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,57 @@
1
+ require File.expand_path("../base", __FILE__)
2
+
3
+ module VagrantPlugins
4
+ module Chef
5
+ module Config
6
+ class ChefClient < Base
7
+ attr_accessor :chef_server_url
8
+ attr_accessor :client_key_path
9
+ attr_accessor :encrypted_data_bag_secret_key_path
10
+ attr_accessor :encrypted_data_bag_secret
11
+ attr_accessor :environment
12
+ attr_accessor :file_cache_path
13
+ attr_accessor :file_backup_path
14
+ attr_accessor :validation_key_path
15
+ attr_accessor :validation_client_name
16
+
17
+ def initialize
18
+ super
19
+
20
+ @chef_server_url = UNSET_VALUE
21
+ @client_key_path = UNSET_VALUE
22
+ @encrypted_data_bag_secret_key_path = UNSET_VALUE
23
+ @encrypted_data_bag_secret = UNSET_VALUE
24
+ @environment = UNSET_VALUE
25
+ @file_cache_path = UNSET_VALUE
26
+ @file_backup_path = UNSET_VALUE
27
+ @validation_key_path = UNSET_VALUE
28
+ @validation_client_name = UNSET_VALUE
29
+ end
30
+
31
+ def finalize!
32
+ super
33
+
34
+ @chef_server_url = nil if @chef_server_url == UNSET_VALUE
35
+ @client_key_path = "/etc/chef/client.pem" if @client_key_path == UNSET_VALUE
36
+ @encrypted_data_bag_secret_key_path = nil if @encrypted_data_bag_secret_key_path == UNSET_VALUE
37
+ @encrypted_data_bag_secret = "/tmp/encrypted_data_bag_secret" if @encrypted_data_bag_secret == UNSET_VALUE
38
+ @environment = nil if @environment == UNSET_VALUE
39
+ @file_backup_path = "/srv/chef/cache" if @file_backup_path == UNSET_VALUE
40
+ @file_cache_path = "/srv/chef/file_store" if @file_cache_path == UNSET_VALUE
41
+ @validation_client_name = "chef-validator" if @validation_client_name == UNSET_VALUE
42
+ @validation_key_path = nil if @validation_key_path == UNSET_VALUE
43
+ end
44
+
45
+ def validate(machine)
46
+ errors = _detected_errors
47
+ errors << I18n.t("vagrant.config.chef.server_url_empty") if \
48
+ !chef_server_url || chef_server_url.strip == ""
49
+ errors << I18n.t("vagrant.config.chef.validation_key_path") if \
50
+ !validation_key_path
51
+
52
+ { "chef client provisioner" => errors }
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end