vagrant-fixed-ssh 1.0.7
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.
- data/.gitignore +46 -0
- data/.yardopts +1 -0
- data/CHANGELOG.md +723 -0
- data/Gemfile +3 -0
- data/LICENSE +22 -0
- data/README.md +121 -0
- data/Rakefile +18 -0
- data/bin/vagrant +60 -0
- data/config/default.rb +30 -0
- data/contrib/README.md +12 -0
- data/contrib/emacs/vagrant.el +8 -0
- data/contrib/vim/vagrantfile.vim +9 -0
- data/keys/README.md +17 -0
- data/keys/vagrant +27 -0
- data/keys/vagrant.pub +1 -0
- data/lib/vagrant.rb +197 -0
- data/lib/vagrant/action.rb +63 -0
- data/lib/vagrant/action/box/destroy.rb +25 -0
- data/lib/vagrant/action/box/download.rb +84 -0
- data/lib/vagrant/action/box/package.rb +19 -0
- data/lib/vagrant/action/box/unpackage.rb +61 -0
- data/lib/vagrant/action/box/verify.rb +23 -0
- data/lib/vagrant/action/builder.rb +128 -0
- data/lib/vagrant/action/builtin.rb +171 -0
- data/lib/vagrant/action/env/set.rb +21 -0
- data/lib/vagrant/action/environment.rb +12 -0
- data/lib/vagrant/action/general/check_virtualbox.rb +28 -0
- data/lib/vagrant/action/general/package.rb +101 -0
- data/lib/vagrant/action/general/validate.rb +18 -0
- data/lib/vagrant/action/runner.rb +53 -0
- data/lib/vagrant/action/vm/boot.rb +53 -0
- data/lib/vagrant/action/vm/check_accessible.rb +23 -0
- data/lib/vagrant/action/vm/check_box.rb +33 -0
- data/lib/vagrant/action/vm/check_guest_additions.rb +38 -0
- data/lib/vagrant/action/vm/check_port_collisions.rb +89 -0
- data/lib/vagrant/action/vm/clean_machine_folder.rb +43 -0
- data/lib/vagrant/action/vm/clear_forwarded_ports.rb +18 -0
- data/lib/vagrant/action/vm/clear_network_interfaces.rb +31 -0
- data/lib/vagrant/action/vm/clear_shared_folders.rb +18 -0
- data/lib/vagrant/action/vm/customize.rb +36 -0
- data/lib/vagrant/action/vm/default_name.rb +22 -0
- data/lib/vagrant/action/vm/destroy.rb +19 -0
- data/lib/vagrant/action/vm/destroy_unused_network_interfaces.rb +20 -0
- data/lib/vagrant/action/vm/discard_state.rb +22 -0
- data/lib/vagrant/action/vm/export.rb +57 -0
- data/lib/vagrant/action/vm/forward_ports.rb +92 -0
- data/lib/vagrant/action/vm/halt.rb +32 -0
- data/lib/vagrant/action/vm/host_name.rb +21 -0
- data/lib/vagrant/action/vm/import.rb +48 -0
- data/lib/vagrant/action/vm/match_mac_address.rb +21 -0
- data/lib/vagrant/action/vm/network.rb +403 -0
- data/lib/vagrant/action/vm/nfs.rb +196 -0
- data/lib/vagrant/action/vm/package.rb +23 -0
- data/lib/vagrant/action/vm/package_vagrantfile.rb +36 -0
- data/lib/vagrant/action/vm/provision.rb +61 -0
- data/lib/vagrant/action/vm/provisioner_cleanup.rb +26 -0
- data/lib/vagrant/action/vm/prune_nfs_exports.rb +20 -0
- data/lib/vagrant/action/vm/resume.rb +20 -0
- data/lib/vagrant/action/vm/sane_defaults.rb +78 -0
- data/lib/vagrant/action/vm/setup_package_files.rb +54 -0
- data/lib/vagrant/action/vm/share_folders.rb +114 -0
- data/lib/vagrant/action/vm/suspend.rb +20 -0
- data/lib/vagrant/action/warden.rb +92 -0
- data/lib/vagrant/box.rb +44 -0
- data/lib/vagrant/box_collection.rb +58 -0
- data/lib/vagrant/cli.rb +76 -0
- data/lib/vagrant/command.rb +24 -0
- data/lib/vagrant/command/base.rb +167 -0
- data/lib/vagrant/command/box.rb +58 -0
- data/lib/vagrant/command/box_add.rb +37 -0
- data/lib/vagrant/command/box_list.rb +28 -0
- data/lib/vagrant/command/box_remove.rb +27 -0
- data/lib/vagrant/command/box_repackage.rb +27 -0
- data/lib/vagrant/command/destroy.rb +64 -0
- data/lib/vagrant/command/gem.rb +39 -0
- data/lib/vagrant/command/halt.rb +39 -0
- data/lib/vagrant/command/init.rb +40 -0
- data/lib/vagrant/command/package.rb +75 -0
- data/lib/vagrant/command/provision.rb +40 -0
- data/lib/vagrant/command/reload.rb +39 -0
- data/lib/vagrant/command/resume.rb +33 -0
- data/lib/vagrant/command/ssh.rb +90 -0
- data/lib/vagrant/command/ssh_config.rb +51 -0
- data/lib/vagrant/command/start_mixins.rb +26 -0
- data/lib/vagrant/command/status.rb +36 -0
- data/lib/vagrant/command/suspend.rb +33 -0
- data/lib/vagrant/command/up.rb +40 -0
- data/lib/vagrant/communication.rb +7 -0
- data/lib/vagrant/communication/base.rb +56 -0
- data/lib/vagrant/communication/ssh.rb +230 -0
- data/lib/vagrant/config.rb +49 -0
- data/lib/vagrant/config/base.rb +82 -0
- data/lib/vagrant/config/container.rb +37 -0
- data/lib/vagrant/config/error_recorder.rb +19 -0
- data/lib/vagrant/config/loader.rb +127 -0
- data/lib/vagrant/config/nfs.rb +8 -0
- data/lib/vagrant/config/package.rb +7 -0
- data/lib/vagrant/config/ssh.rb +27 -0
- data/lib/vagrant/config/top.rb +72 -0
- data/lib/vagrant/config/vagrant.rb +14 -0
- data/lib/vagrant/config/vm.rb +168 -0
- data/lib/vagrant/config/vm/provisioner.rb +52 -0
- data/lib/vagrant/config/vm/sub_vm.rb +17 -0
- data/lib/vagrant/data_store.rb +92 -0
- data/lib/vagrant/downloaders.rb +7 -0
- data/lib/vagrant/downloaders/base.rb +25 -0
- data/lib/vagrant/downloaders/file.rb +22 -0
- data/lib/vagrant/downloaders/http.rb +97 -0
- data/lib/vagrant/driver.rb +8 -0
- data/lib/vagrant/driver/virtualbox.rb +134 -0
- data/lib/vagrant/driver/virtualbox_4_0.rb +459 -0
- data/lib/vagrant/driver/virtualbox_4_1.rb +459 -0
- data/lib/vagrant/driver/virtualbox_4_2.rb +606 -0
- data/lib/vagrant/driver/virtualbox_base.rb +326 -0
- data/lib/vagrant/environment.rb +522 -0
- data/lib/vagrant/errors.rb +445 -0
- data/lib/vagrant/guest.rb +18 -0
- data/lib/vagrant/guest/arch.rb +56 -0
- data/lib/vagrant/guest/base.rb +99 -0
- data/lib/vagrant/guest/debian.rb +64 -0
- data/lib/vagrant/guest/fedora.rb +66 -0
- data/lib/vagrant/guest/freebsd.rb +86 -0
- data/lib/vagrant/guest/gentoo.rb +46 -0
- data/lib/vagrant/guest/linux.rb +118 -0
- data/lib/vagrant/guest/linux/config.rb +19 -0
- data/lib/vagrant/guest/linux/error.rb +9 -0
- data/lib/vagrant/guest/openbsd.rb +20 -0
- data/lib/vagrant/guest/redhat.rb +67 -0
- data/lib/vagrant/guest/solaris.rb +118 -0
- data/lib/vagrant/guest/suse.rb +17 -0
- data/lib/vagrant/guest/ubuntu.rb +23 -0
- data/lib/vagrant/hosts.rb +37 -0
- data/lib/vagrant/hosts/arch.rb +55 -0
- data/lib/vagrant/hosts/base.rb +66 -0
- data/lib/vagrant/hosts/bsd.rb +97 -0
- data/lib/vagrant/hosts/fedora.rb +47 -0
- data/lib/vagrant/hosts/freebsd.rb +41 -0
- data/lib/vagrant/hosts/gentoo.rb +20 -0
- data/lib/vagrant/hosts/linux.rb +94 -0
- data/lib/vagrant/hosts/opensuse.rb +30 -0
- data/lib/vagrant/hosts/windows.rb +16 -0
- data/lib/vagrant/plugin.rb +81 -0
- data/lib/vagrant/provisioners.rb +12 -0
- data/lib/vagrant/provisioners/base.rb +44 -0
- data/lib/vagrant/provisioners/chef.rb +168 -0
- data/lib/vagrant/provisioners/chef_client.rb +132 -0
- data/lib/vagrant/provisioners/chef_solo.rb +234 -0
- data/lib/vagrant/provisioners/puppet.rb +176 -0
- data/lib/vagrant/provisioners/puppet_server.rb +78 -0
- data/lib/vagrant/provisioners/shell.rb +103 -0
- data/lib/vagrant/registry.rb +52 -0
- data/lib/vagrant/ssh.rb +126 -0
- data/lib/vagrant/test_helpers.rb +154 -0
- data/lib/vagrant/ui.rb +168 -0
- data/lib/vagrant/util.rb +12 -0
- data/lib/vagrant/util/ansi_escape_code_remover.rb +34 -0
- data/lib/vagrant/util/busy.rb +59 -0
- data/lib/vagrant/util/counter.rb +24 -0
- data/lib/vagrant/util/file_checksum.rb +38 -0
- data/lib/vagrant/util/file_mode.rb +12 -0
- data/lib/vagrant/util/hash_with_indifferent_access.rb +63 -0
- data/lib/vagrant/util/is_port_open.rb +38 -0
- data/lib/vagrant/util/line_ending_helpers.rb +14 -0
- data/lib/vagrant/util/network_ip.rb +28 -0
- data/lib/vagrant/util/platform.rb +68 -0
- data/lib/vagrant/util/retryable.rb +25 -0
- data/lib/vagrant/util/safe_exec.rb +36 -0
- data/lib/vagrant/util/safe_puts.rb +31 -0
- data/lib/vagrant/util/stacked_proc_runner.rb +35 -0
- data/lib/vagrant/util/subprocess.rb +247 -0
- data/lib/vagrant/util/template_renderer.rb +83 -0
- data/lib/vagrant/version.rb +6 -0
- data/lib/vagrant/vm.rb +195 -0
- data/tasks/acceptance.rake +113 -0
- data/tasks/bundler.rake +3 -0
- data/tasks/test.rake +20 -0
- data/templates/commands/init/Vagrantfile.erb +99 -0
- data/templates/commands/ssh_config/config.erb +15 -0
- data/templates/config/validation_failed.erb +7 -0
- data/templates/guests/arch/network_dhcp.erb +7 -0
- data/templates/guests/arch/network_static.erb +7 -0
- data/templates/guests/debian/network_dhcp.erb +6 -0
- data/templates/guests/debian/network_static.erb +7 -0
- data/templates/guests/fedora/network_dhcp.erb +6 -0
- data/templates/guests/fedora/network_static.erb +13 -0
- data/templates/guests/freebsd/network_dhcp.erb +3 -0
- data/templates/guests/freebsd/network_static.erb +3 -0
- data/templates/guests/gentoo/network_dhcp.erb +4 -0
- data/templates/guests/gentoo/network_static.erb +4 -0
- data/templates/guests/redhat/network_dhcp.erb +6 -0
- data/templates/guests/redhat/network_static.erb +7 -0
- data/templates/locales/en.yml +759 -0
- data/templates/nfs/exports.erb +5 -0
- data/templates/nfs/exports_freebsd.erb +5 -0
- data/templates/nfs/exports_linux.erb +5 -0
- data/templates/package_Vagrantfile.erb +11 -0
- data/templates/provisioners/chef_client/client.erb +32 -0
- data/templates/provisioners/chef_solo/solo.erb +25 -0
- data/test/acceptance/base.rb +48 -0
- data/test/acceptance/box_test.rb +99 -0
- data/test/acceptance/destroy_test.rb +37 -0
- data/test/acceptance/halt_test.rb +72 -0
- data/test/acceptance/init_test.rb +33 -0
- data/test/acceptance/networking/host_only_test.rb +37 -0
- data/test/acceptance/networking/port_forward_test.rb +125 -0
- data/test/acceptance/package_test.rb +46 -0
- data/test/acceptance/provisioning/basic_test.rb +61 -0
- data/test/acceptance/provisioning/chef_solo_test.rb +37 -0
- data/test/acceptance/provisioning/shell_test.rb +53 -0
- data/test/acceptance/resume_test.rb +17 -0
- data/test/acceptance/shared_folders_test.rb +84 -0
- data/test/acceptance/skeletons/chef_solo_basic/README.md +3 -0
- data/test/acceptance/skeletons/chef_solo_basic/cookbooks/basic/recipes/default.rb +5 -0
- data/test/acceptance/skeletons/chef_solo_json/README.md +3 -0
- data/test/acceptance/skeletons/chef_solo_json/cookbooks/basic/recipes/default.rb +6 -0
- data/test/acceptance/skeletons/provisioner_multi/README.md +3 -0
- data/test/acceptance/skeletons/provisioner_multi/cookbooks/basic/recipes/default.rb +5 -0
- data/test/acceptance/ssh_test.rb +46 -0
- data/test/acceptance/support/config.rb +42 -0
- data/test/acceptance/support/isolated_environment.rb +117 -0
- data/test/acceptance/support/matchers/have_color.rb +9 -0
- data/test/acceptance/support/matchers/match_output.rb +14 -0
- data/test/acceptance/support/matchers/succeed.rb +14 -0
- data/test/acceptance/support/network_tests.rb +29 -0
- data/test/acceptance/support/output.rb +95 -0
- data/test/acceptance/support/shared/base_context.rb +72 -0
- data/test/acceptance/support/shared/command_examples.rb +33 -0
- data/test/acceptance/support/virtualbox.rb +36 -0
- data/test/acceptance/suspend_test.rb +56 -0
- data/test/acceptance/up_basic_test.rb +33 -0
- data/test/acceptance/up_with_box_url.rb +40 -0
- data/test/acceptance/vagrant_test.rb +47 -0
- data/test/acceptance/version_test.rb +15 -0
- data/test/buildbot/README.md +72 -0
- data/test/buildbot/buildbot_config/__init__.py +0 -0
- data/test/buildbot/buildbot_config/config/__init__.py +0 -0
- data/test/buildbot/buildbot_config/config/loader.py +24 -0
- data/test/buildbot/buildbot_config/config/master.py +24 -0
- data/test/buildbot/buildbot_config/config/slave.py +22 -0
- data/test/buildbot/buildbot_config/master/__init__.py +6 -0
- data/test/buildbot/buildbot_config/master/builders.py +78 -0
- data/test/buildbot/buildbot_config/master/buildsteps.py +100 -0
- data/test/buildbot/buildbot_config/master/change_sources.py +8 -0
- data/test/buildbot/buildbot_config/master/schedulers.py +32 -0
- data/test/buildbot/buildbot_config/master/slaves.py +60 -0
- data/test/buildbot/buildbot_config/master/status.py +52 -0
- data/test/buildbot/master/Makefile.sample +28 -0
- data/test/buildbot/master/buildbot.tac +36 -0
- data/test/buildbot/master/master.cfg +67 -0
- data/test/buildbot/master/public_html/bg_gradient.jpg +0 -0
- data/test/buildbot/master/public_html/default.css +545 -0
- data/test/buildbot/master/public_html/favicon.ico +0 -0
- data/test/buildbot/master/public_html/robots.txt +10 -0
- data/test/buildbot/master/public_html/static/css/bootstrap-1.4.0.min.css +356 -0
- data/test/buildbot/master/public_html/static/css/prettify.css +97 -0
- data/test/buildbot/master/public_html/static/css/syntax.css +60 -0
- data/test/buildbot/master/public_html/static/css/vagrant.base.css +205 -0
- data/test/buildbot/master/public_html/static/images/base_box_mac.jpg +0 -0
- data/test/buildbot/master/public_html/static/images/getting-started/success.jpg +0 -0
- data/test/buildbot/master/public_html/static/images/icons/error.png +0 -0
- data/test/buildbot/master/public_html/static/images/vagrant_chilling.png +0 -0
- data/test/buildbot/master/public_html/static/images/vagrant_holding.png +0 -0
- data/test/buildbot/master/public_html/static/images/vagrant_looking.png +0 -0
- data/test/buildbot/master/public_html/static/images/windows/alter_path.jpg +0 -0
- data/test/buildbot/master/public_html/static/images/windows/edit_path.jpg +0 -0
- data/test/buildbot/master/public_html/static/images/windows/environment_variables_button.jpg +0 -0
- data/test/buildbot/master/public_html/static/images/windows/port_and_ppk_path.jpg +0 -0
- data/test/buildbot/master/public_html/static/images/windows/ppk_selection.jpg +0 -0
- data/test/buildbot/master/public_html/static/images/windows/putty_first_screen.jpg +0 -0
- data/test/buildbot/master/public_html/static/images/windows/save_result.jpg +0 -0
- data/test/buildbot/master/public_html/static/images/windows/vbox_manage_default_location.jpg +0 -0
- data/test/buildbot/master/public_html/static/js/bootstrap-tabs.js +80 -0
- data/test/buildbot/master/public_html/static/js/jquery-1.7.min.js +4 -0
- data/test/buildbot/master/templates/authfail.html +9 -0
- data/test/buildbot/master/templates/build.html +205 -0
- data/test/buildbot/master/templates/builder.html +118 -0
- data/test/buildbot/master/templates/builders.html +33 -0
- data/test/buildbot/master/templates/buildslave.html +72 -0
- data/test/buildbot/master/templates/buildslaves.html +70 -0
- data/test/buildbot/master/templates/change.html +15 -0
- data/test/buildbot/master/templates/layouts/base.html +58 -0
- data/test/buildbot/master/templates/macros/box.html +37 -0
- data/test/buildbot/master/templates/macros/build_line.html +50 -0
- data/test/buildbot/master/templates/macros/change.html +81 -0
- data/test/buildbot/master/templates/macros/forms.html +300 -0
- data/test/buildbot/master/templates/root.html +42 -0
- data/test/buildbot/master/templates/waterfall.html +53 -0
- data/test/buildbot/requirements.txt +4 -0
- data/test/buildbot/scripts/deploy.sh +38 -0
- data/test/buildbot/scripts/setup.sh +107 -0
- data/test/buildbot/slave/buildbot.tac +43 -0
- data/test/buildbot/slave/info/admin +1 -0
- data/test/buildbot/slave/info/host +1 -0
- data/test/buildbot/tests/__init__.py +0 -0
- data/test/buildbot/tests/master/__init__.py +0 -0
- data/test/buildbot/tests/master/test_slaves.py +41 -0
- data/test/buildbot/vendor/choices-0.4.0.tar.gz +0 -0
- data/test/config/acceptance_boxes.yml +7 -0
- data/test/support/isolated_environment.rb +46 -0
- data/test/support/tempdir.rb +34 -0
- data/test/unit/base.rb +21 -0
- data/test/unit/support/isolated_environment.rb +47 -0
- data/test/unit/support/shared/base_context.rb +30 -0
- data/test/unit/vagrant/action/builder_test.rb +156 -0
- data/test/unit/vagrant/action/environment_test.rb +16 -0
- data/test/unit/vagrant/action/runner_test.rb +65 -0
- data/test/unit/vagrant/action/warden_test.rb +92 -0
- data/test/unit/vagrant/box_collection_test.rb +56 -0
- data/test/unit/vagrant/box_test.rb +34 -0
- data/test/unit/vagrant/command/base_test.rb +150 -0
- data/test/unit/vagrant/config/base_test.rb +48 -0
- data/test/unit/vagrant/config/loader_test.rb +79 -0
- data/test/unit/vagrant/config/ssh_test.rb +17 -0
- data/test/unit/vagrant/config/top_test.rb +69 -0
- data/test/unit/vagrant/config/vm_test.rb +71 -0
- data/test/unit/vagrant/config_test.rb +27 -0
- data/test/unit/vagrant/data_store_test.rb +79 -0
- data/test/unit/vagrant/downloaders/base_test.rb +18 -0
- data/test/unit/vagrant/downloaders/file_test.rb +75 -0
- data/test/unit/vagrant/downloaders/http_test.rb +19 -0
- data/test/unit/vagrant/environment_test.rb +220 -0
- data/test/unit/vagrant/hosts_test.rb +36 -0
- data/test/unit/vagrant/registry_test.rb +74 -0
- data/test/unit/vagrant/util/ansi_escape_code_remover_test.rb +16 -0
- data/test/unit/vagrant/util/file_checksum_test.rb +23 -0
- data/test/unit/vagrant/util/hash_with_indifferent_access_test.rb +38 -0
- data/test/unit/vagrant/util/is_port_open_test.rb +53 -0
- data/test/unit/vagrant/util/line_endings_helper_test.rb +16 -0
- data/test/unit/vagrant/util/network_ip_test.rb +17 -0
- data/test/unit/vagrant/util/retryable_test.rb +106 -0
- data/test/unit/vagrant_test.rb +27 -0
- data/test/unit_legacy/locales/en.yml +8 -0
- data/test/unit_legacy/test_helper.rb +32 -0
- data/test/unit_legacy/vagrant/action/box/destroy_test.rb +18 -0
- data/test/unit_legacy/vagrant/action/box/download_test.rb +125 -0
- data/test/unit_legacy/vagrant/action/box/package_test.rb +25 -0
- data/test/unit_legacy/vagrant/action/box/unpackage_test.rb +84 -0
- data/test/unit_legacy/vagrant/action/box/verify_test.rb +30 -0
- data/test/unit_legacy/vagrant/action/env/set_test.rb +24 -0
- data/test/unit_legacy/vagrant/action/general/package_test.rb +268 -0
- data/test/unit_legacy/vagrant/action/general/validate_test.rb +31 -0
- data/test/unit_legacy/vagrant/action/vm/boot_test.rb +66 -0
- data/test/unit_legacy/vagrant/action/vm/check_accessible_test.rb +61 -0
- data/test/unit_legacy/vagrant/action/vm/check_box_test.rb +61 -0
- data/test/unit_legacy/vagrant/action/vm/check_guest_additions_test.rb +9 -0
- data/test/unit_legacy/vagrant/action/vm/clean_machine_folder_test.rb +84 -0
- data/test/unit_legacy/vagrant/action/vm/clear_forwarded_ports_test.rb +52 -0
- data/test/unit_legacy/vagrant/action/vm/clear_nfs_exports_test.rb +22 -0
- data/test/unit_legacy/vagrant/action/vm/clear_shared_folders_test.rb +40 -0
- data/test/unit_legacy/vagrant/action/vm/customize_test.rb +37 -0
- data/test/unit_legacy/vagrant/action/vm/destroy_test.rb +25 -0
- data/test/unit_legacy/vagrant/action/vm/destroy_unused_network_interfaces_test.rb +49 -0
- data/test/unit_legacy/vagrant/action/vm/discard_state_test.rb +45 -0
- data/test/unit_legacy/vagrant/action/vm/export_test.rb +107 -0
- data/test/unit_legacy/vagrant/action/vm/forward_ports_helpers_test.rb +77 -0
- data/test/unit_legacy/vagrant/action/vm/forward_ports_test.rb +197 -0
- data/test/unit_legacy/vagrant/action/vm/halt_test.rb +79 -0
- data/test/unit_legacy/vagrant/action/vm/host_name_test.rb +36 -0
- data/test/unit_legacy/vagrant/action/vm/import_test.rb +66 -0
- data/test/unit_legacy/vagrant/action/vm/match_mac_address_test.rb +40 -0
- data/test/unit_legacy/vagrant/action/vm/modify_test.rb +38 -0
- data/test/unit_legacy/vagrant/action/vm/network_test.rb +286 -0
- data/test/unit_legacy/vagrant/action/vm/nfs_helpers_test.rb +26 -0
- data/test/unit_legacy/vagrant/action/vm/nfs_test.rb +260 -0
- data/test/unit_legacy/vagrant/action/vm/package_test.rb +25 -0
- data/test/unit_legacy/vagrant/action/vm/package_vagrantfile_test.rb +46 -0
- data/test/unit_legacy/vagrant/action/vm/provision_test.rb +65 -0
- data/test/unit_legacy/vagrant/action/vm/provisioner_cleanup_test.rb +56 -0
- data/test/unit_legacy/vagrant/action/vm/resume_test.rb +35 -0
- data/test/unit_legacy/vagrant/action/vm/share_folders_test.rb +144 -0
- data/test/unit_legacy/vagrant/action/vm/suspend_test.rb +35 -0
- data/test/unit_legacy/vagrant/action_test.rb +89 -0
- data/test/unit_legacy/vagrant/box_collection_test.rb +45 -0
- data/test/unit_legacy/vagrant/box_test.rb +74 -0
- data/test/unit_legacy/vagrant/cli_test.rb +35 -0
- data/test/unit_legacy/vagrant/command/base_test.rb +23 -0
- data/test/unit_legacy/vagrant/command/group_base_test.rb +15 -0
- data/test/unit_legacy/vagrant/command/helpers_test.rb +88 -0
- data/test/unit_legacy/vagrant/command/init_test.rb +10 -0
- data/test/unit_legacy/vagrant/command/package_test.rb +27 -0
- data/test/unit_legacy/vagrant/config/base_test.rb +52 -0
- data/test/unit_legacy/vagrant/config/error_recorder_test.rb +18 -0
- data/test/unit_legacy/vagrant/config/ssh_test.rb +12 -0
- data/test/unit_legacy/vagrant/config/vagrant_test.rb +35 -0
- data/test/unit_legacy/vagrant/config/vm/provisioner_test.rb +92 -0
- data/test/unit_legacy/vagrant/config/vm_test.rb +47 -0
- data/test/unit_legacy/vagrant/config_test.rb +148 -0
- data/test/unit_legacy/vagrant/downloaders/http_test.rb +93 -0
- data/test/unit_legacy/vagrant/environment_test.rb +539 -0
- data/test/unit_legacy/vagrant/errors_test.rb +42 -0
- data/test/unit_legacy/vagrant/hosts/base_test.rb +46 -0
- data/test/unit_legacy/vagrant/hosts/bsd_test.rb +53 -0
- data/test/unit_legacy/vagrant/hosts/linux_test.rb +54 -0
- data/test/unit_legacy/vagrant/plugin_test.rb +9 -0
- data/test/unit_legacy/vagrant/provisioners/base_test.rb +63 -0
- data/test/unit_legacy/vagrant/provisioners/chef_client_test.rb +190 -0
- data/test/unit_legacy/vagrant/provisioners/chef_solo_test.rb +115 -0
- data/test/unit_legacy/vagrant/provisioners/chef_test.rb +209 -0
- data/test/unit_legacy/vagrant/provisioners/puppet_server_test.rb +68 -0
- data/test/unit_legacy/vagrant/provisioners/puppet_test.rb +182 -0
- data/test/unit_legacy/vagrant/provisioners/shell_test.rb +79 -0
- data/test/unit_legacy/vagrant/ssh/session_test.rb +40 -0
- data/test/unit_legacy/vagrant/ssh_test.rb +304 -0
- data/test/unit_legacy/vagrant/systems/base_test.rb +18 -0
- data/test/unit_legacy/vagrant/systems/linux_test.rb +104 -0
- data/test/unit_legacy/vagrant/util/busy_test.rb +106 -0
- data/test/unit_legacy/vagrant/util/counter_test.rb +29 -0
- data/test/unit_legacy/vagrant/util/platform_test.rb +18 -0
- data/test/unit_legacy/vagrant/util/stacked_proc_runner_test.rb +43 -0
- data/test/unit_legacy/vagrant/util/template_renderer_test.rb +145 -0
- data/test/unit_legacy/vagrant/vm_test.rb +300 -0
- data/vagrant-fixed-ssh.gemspec +70 -0
- metadata +712 -0
@@ -0,0 +1,132 @@
|
|
1
|
+
require 'pathname'
|
2
|
+
|
3
|
+
require 'vagrant/provisioners/chef'
|
4
|
+
|
5
|
+
module Vagrant
|
6
|
+
module Provisioners
|
7
|
+
# This class implements provisioning via chef-client, allowing provisioning
|
8
|
+
# with a chef server.
|
9
|
+
class ChefClient < Chef
|
10
|
+
class Config < Chef::Config
|
11
|
+
attr_accessor :chef_server_url
|
12
|
+
attr_accessor :validation_key_path
|
13
|
+
attr_accessor :validation_client_name
|
14
|
+
attr_accessor :client_key_path
|
15
|
+
attr_accessor :file_cache_path
|
16
|
+
attr_accessor :file_backup_path
|
17
|
+
attr_accessor :environment
|
18
|
+
attr_accessor :encrypted_data_bag_secret_key_path
|
19
|
+
attr_accessor :encrypted_data_bag_secret
|
20
|
+
|
21
|
+
# Provide defaults in such a way that they won't override the instance
|
22
|
+
# variable. This is so merging continues to work properly.
|
23
|
+
def validation_client_name; @validation_client_name || "chef-validator"; end
|
24
|
+
def client_key_path; @client_key_path || "/etc/chef/client.pem"; end
|
25
|
+
def file_cache_path; @file_cache_path || "/srv/chef/file_store"; end
|
26
|
+
def file_backup_path; @file_backup_path || "/srv/chef/cache"; end
|
27
|
+
def encrypted_data_bag_secret; @encrypted_data_bag_secret || "/tmp/encrypted_data_bag_secret"; end
|
28
|
+
|
29
|
+
def validate(env, errors)
|
30
|
+
super
|
31
|
+
|
32
|
+
errors.add(I18n.t("vagrant.config.chef.server_url_empty")) if !chef_server_url || chef_server_url.strip == ""
|
33
|
+
errors.add(I18n.t("vagrant.config.chef.validation_key_path")) if !validation_key_path
|
34
|
+
errors.add(I18n.t("vagrant.config.chef.run_list_empty")) if @run_list && @run_list.empty?
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.config_class
|
39
|
+
Config
|
40
|
+
end
|
41
|
+
|
42
|
+
def prepare
|
43
|
+
raise ChefError, :server_validation_key_required if config.validation_key_path.nil?
|
44
|
+
raise ChefError, :server_validation_key_doesnt_exist if !File.file?(validation_key_path)
|
45
|
+
raise ChefError, :server_url_required if config.chef_server_url.nil?
|
46
|
+
end
|
47
|
+
|
48
|
+
def provision!
|
49
|
+
verify_binary(chef_binary_path("chef-client"))
|
50
|
+
chown_provisioning_folder
|
51
|
+
create_client_key_folder
|
52
|
+
upload_validation_key
|
53
|
+
upload_encrypted_data_bag_secret if config.encrypted_data_bag_secret_key_path
|
54
|
+
setup_json
|
55
|
+
setup_server_config
|
56
|
+
run_chef_client
|
57
|
+
end
|
58
|
+
|
59
|
+
def create_client_key_folder
|
60
|
+
env[:ui].info I18n.t("vagrant.provisioners.chef.client_key_folder")
|
61
|
+
path = Pathname.new(config.client_key_path)
|
62
|
+
|
63
|
+
env[:vm].channel.sudo("mkdir -p #{path.dirname}")
|
64
|
+
end
|
65
|
+
|
66
|
+
def upload_validation_key
|
67
|
+
env[:ui].info I18n.t("vagrant.provisioners.chef.upload_validation_key")
|
68
|
+
env[:vm].channel.upload(validation_key_path, guest_validation_key_path)
|
69
|
+
end
|
70
|
+
|
71
|
+
def upload_encrypted_data_bag_secret
|
72
|
+
env[:ui].info I18n.t("vagrant.provisioners.chef.upload_encrypted_data_bag_secret_key")
|
73
|
+
env[:vm].channel.upload(encrypted_data_bag_secret_key_path,
|
74
|
+
config.encrypted_data_bag_secret)
|
75
|
+
end
|
76
|
+
|
77
|
+
def setup_server_config
|
78
|
+
setup_config("provisioners/chef_client/client", "client.rb", {
|
79
|
+
:node_name => config.node_name,
|
80
|
+
:chef_server_url => config.chef_server_url,
|
81
|
+
:validation_client_name => config.validation_client_name,
|
82
|
+
:validation_key => guest_validation_key_path,
|
83
|
+
:client_key => config.client_key_path,
|
84
|
+
:file_cache_path => config.file_cache_path,
|
85
|
+
:file_backup_path => config.file_backup_path,
|
86
|
+
:environment => config.environment,
|
87
|
+
:encrypted_data_bag_secret => config.encrypted_data_bag_secret
|
88
|
+
})
|
89
|
+
end
|
90
|
+
|
91
|
+
def run_chef_client
|
92
|
+
command_env = config.binary_env ? "#{config.binary_env} " : ""
|
93
|
+
command = "#{command_env}#{chef_binary_path("chef-client")} -c #{config.provisioning_path}/client.rb -j #{config.provisioning_path}/dna.json"
|
94
|
+
|
95
|
+
config.attempts.times do |attempt|
|
96
|
+
if attempt == 0
|
97
|
+
env[:ui].info I18n.t("vagrant.provisioners.chef.running_client")
|
98
|
+
else
|
99
|
+
env[:ui].info I18n.t("vagrant.provisioners.chef.running_client_again")
|
100
|
+
end
|
101
|
+
|
102
|
+
exit_status = env[:vm].channel.sudo(command) do |type, data|
|
103
|
+
# Output the data with the proper color based on the stream.
|
104
|
+
color = type == :stdout ? :green : :red
|
105
|
+
|
106
|
+
# Note: Be sure to chomp the data to avoid the newlines that the
|
107
|
+
# Chef outputs.
|
108
|
+
env[:ui].info(data.chomp, :color => color, :prefix => false)
|
109
|
+
end
|
110
|
+
|
111
|
+
# There is no need to run Chef again if it converges
|
112
|
+
return if exit_status == 0
|
113
|
+
end
|
114
|
+
|
115
|
+
# If we reached this point then Chef never converged! Error.
|
116
|
+
raise ChefError, :no_convergence
|
117
|
+
end
|
118
|
+
|
119
|
+
def validation_key_path
|
120
|
+
File.expand_path(config.validation_key_path, env[:root_path])
|
121
|
+
end
|
122
|
+
|
123
|
+
def encrypted_data_bag_secret_key_path
|
124
|
+
File.expand_path(config.encrypted_data_bag_secret_key_path, env[:root_path])
|
125
|
+
end
|
126
|
+
|
127
|
+
def guest_validation_key_path
|
128
|
+
File.join(config.provisioning_path, "validation.pem")
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
@@ -0,0 +1,234 @@
|
|
1
|
+
require "log4r"
|
2
|
+
|
3
|
+
require 'vagrant/provisioners/chef'
|
4
|
+
|
5
|
+
module Vagrant
|
6
|
+
module Provisioners
|
7
|
+
# This class implements provisioning via chef-solo.
|
8
|
+
class ChefSolo < Chef
|
9
|
+
extend Util::Counter
|
10
|
+
include Util::Counter
|
11
|
+
|
12
|
+
class Config < Chef::Config
|
13
|
+
attr_accessor :cookbooks_path
|
14
|
+
attr_accessor :roles_path
|
15
|
+
attr_accessor :data_bags_path
|
16
|
+
attr_accessor :recipe_url
|
17
|
+
attr_accessor :nfs
|
18
|
+
attr_accessor :encrypted_data_bag_secret_key_path
|
19
|
+
attr_accessor :encrypted_data_bag_secret
|
20
|
+
|
21
|
+
def encrypted_data_bag_secret; @encrypted_data_bag_secret || "/tmp/encrypted_data_bag_secret"; end
|
22
|
+
|
23
|
+
def initialize
|
24
|
+
super
|
25
|
+
|
26
|
+
@__default = ["cookbooks", [:vm, "cookbooks"]]
|
27
|
+
end
|
28
|
+
|
29
|
+
# Provide defaults in such a way that they won't override the instance
|
30
|
+
# variable. This is so merging continues to work properly.
|
31
|
+
def cookbooks_path
|
32
|
+
@cookbooks_path || _default_cookbook_path
|
33
|
+
end
|
34
|
+
|
35
|
+
# This stores a reference to the default cookbook path which is used
|
36
|
+
# later. Do not use this publicly. I apologize for not making it
|
37
|
+
# "protected" but it has to be called by Vagrant internals later.
|
38
|
+
def _default_cookbook_path
|
39
|
+
@__default
|
40
|
+
end
|
41
|
+
|
42
|
+
def nfs
|
43
|
+
@nfs || false
|
44
|
+
end
|
45
|
+
|
46
|
+
def validate(env, errors)
|
47
|
+
super
|
48
|
+
|
49
|
+
errors.add(I18n.t("vagrant.config.chef.cookbooks_path_empty")) if !cookbooks_path || [cookbooks_path].flatten.empty?
|
50
|
+
errors.add(I18n.t("vagrant.config.chef.run_list_empty")) if !run_list || run_list.empty?
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
attr_reader :cookbook_folders
|
55
|
+
attr_reader :role_folders
|
56
|
+
attr_reader :data_bags_folders
|
57
|
+
|
58
|
+
def self.config_class
|
59
|
+
Config
|
60
|
+
end
|
61
|
+
|
62
|
+
def initialize(env, config)
|
63
|
+
super
|
64
|
+
@logger = Log4r::Logger.new("vagrant::provisioners::chef_solo")
|
65
|
+
end
|
66
|
+
|
67
|
+
def prepare
|
68
|
+
@cookbook_folders = expanded_folders(config.cookbooks_path, "cookbooks")
|
69
|
+
@role_folders = expanded_folders(config.roles_path, "roles")
|
70
|
+
@data_bags_folders = expanded_folders(config.data_bags_path, "data_bags")
|
71
|
+
|
72
|
+
share_folders("csc", @cookbook_folders)
|
73
|
+
share_folders("csr", @role_folders)
|
74
|
+
share_folders("csdb", @data_bags_folders)
|
75
|
+
end
|
76
|
+
|
77
|
+
def provision!
|
78
|
+
# Verify that the proper shared folders exist.
|
79
|
+
check = []
|
80
|
+
[@cookbook_folders, @role_folders, @data_bags_folders].each do |folders|
|
81
|
+
folders.each do |type, local_path, remote_path|
|
82
|
+
# We only care about checking folders that have a local path, meaning
|
83
|
+
# they were shared from the local machine, rather than assumed to
|
84
|
+
# exist on the VM.
|
85
|
+
check << remote_path if local_path
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
verify_shared_folders(check)
|
90
|
+
|
91
|
+
verify_binary(chef_binary_path("chef-solo"))
|
92
|
+
chown_provisioning_folder
|
93
|
+
upload_encrypted_data_bag_secret if config.encrypted_data_bag_secret_key_path
|
94
|
+
setup_json
|
95
|
+
setup_solo_config
|
96
|
+
run_chef_solo
|
97
|
+
end
|
98
|
+
|
99
|
+
# Converts paths to a list of properly expanded paths with types.
|
100
|
+
def expanded_folders(paths, appended_folder=nil)
|
101
|
+
return [] if paths.nil?
|
102
|
+
|
103
|
+
# Convert the path to an array if it is a string or just a single
|
104
|
+
# path element which contains the folder location (:host or :vm)
|
105
|
+
paths = [paths] if paths.is_a?(String) || paths.first.is_a?(Symbol)
|
106
|
+
|
107
|
+
results = []
|
108
|
+
paths.each do |path|
|
109
|
+
path = [:host, path] if !path.is_a?(Array)
|
110
|
+
type, path = path
|
111
|
+
|
112
|
+
# Create the local/remote path based on whether this is a host
|
113
|
+
# or VM path.
|
114
|
+
local_path = nil
|
115
|
+
remote_path = nil
|
116
|
+
if type == :host
|
117
|
+
# Get the expanded path that the host path points to
|
118
|
+
local_path = File.expand_path(path, env[:root_path])
|
119
|
+
|
120
|
+
# Super hacky but if we're expanded the default cookbook paths,
|
121
|
+
# and one of the host paths doesn't exist, then just ignore it,
|
122
|
+
# because that is fine.
|
123
|
+
if paths.equal?(config._default_cookbook_path) && !File.directory?(local_path)
|
124
|
+
@logger.info("'cookbooks' folder doesn't exist on defaults. Ignoring.")
|
125
|
+
next
|
126
|
+
end
|
127
|
+
|
128
|
+
# Path exists on the host, setup the remote path
|
129
|
+
remote_path = "#{config.provisioning_path}/chef-solo-#{get_and_update_counter(:cookbooks_path)}"
|
130
|
+
else
|
131
|
+
# Path already exists on the virtual machine. Expand it
|
132
|
+
# relative to where we're provisioning.
|
133
|
+
remote_path = File.expand_path(path, config.provisioning_path)
|
134
|
+
|
135
|
+
# Remove drive letter if running on a windows host. This is a bit
|
136
|
+
# of a hack but is the most portable way I can think of at the moment
|
137
|
+
# to achieve this. Otherwise, Vagrant attempts to share at some crazy
|
138
|
+
# path like /home/vagrant/c:/foo/bar
|
139
|
+
remote_path = remote_path.gsub(/^[a-zA-Z]:/, "")
|
140
|
+
end
|
141
|
+
|
142
|
+
# If we have specified a folder name to append then append it
|
143
|
+
remote_path += "/#{appended_folder}" if appended_folder
|
144
|
+
|
145
|
+
# Append the result
|
146
|
+
results << [type, local_path, remote_path]
|
147
|
+
end
|
148
|
+
|
149
|
+
results
|
150
|
+
end
|
151
|
+
|
152
|
+
# Shares the given folders with the given prefix. The folders should
|
153
|
+
# be of the structure resulting from the `expanded_folders` function.
|
154
|
+
def share_folders(prefix, folders)
|
155
|
+
folders.each do |type, local_path, remote_path|
|
156
|
+
if type == :host
|
157
|
+
env[:vm].config.vm.share_folder("v-#{prefix}-#{self.class.get_and_update_counter(:shared_folder)}",
|
158
|
+
remote_path, local_path, :nfs => config.nfs)
|
159
|
+
end
|
160
|
+
end
|
161
|
+
end
|
162
|
+
|
163
|
+
def upload_encrypted_data_bag_secret
|
164
|
+
env[:ui].info I18n.t("vagrant.provisioners.chef.upload_encrypted_data_bag_secret_key")
|
165
|
+
env[:vm].channel.upload(encrypted_data_bag_secret_key_path,
|
166
|
+
config.encrypted_data_bag_secret)
|
167
|
+
end
|
168
|
+
|
169
|
+
def setup_solo_config
|
170
|
+
cookbooks_path = guest_paths(@cookbook_folders)
|
171
|
+
roles_path = guest_paths(@role_folders).first
|
172
|
+
data_bags_path = guest_paths(@data_bags_folders).first
|
173
|
+
|
174
|
+
setup_config("provisioners/chef_solo/solo", "solo.rb", {
|
175
|
+
:node_name => config.node_name,
|
176
|
+
:provisioning_path => config.provisioning_path,
|
177
|
+
:cookbooks_path => cookbooks_path,
|
178
|
+
:recipe_url => config.recipe_url,
|
179
|
+
:roles_path => roles_path,
|
180
|
+
:data_bags_path => data_bags_path,
|
181
|
+
:encrypted_data_bag_secret => config.encrypted_data_bag_secret,
|
182
|
+
})
|
183
|
+
end
|
184
|
+
|
185
|
+
def run_chef_solo
|
186
|
+
command_env = config.binary_env ? "#{config.binary_env} " : ""
|
187
|
+
command = "#{command_env}#{chef_binary_path("chef-solo")} -c #{config.provisioning_path}/solo.rb -j #{config.provisioning_path}/dna.json"
|
188
|
+
|
189
|
+
config.attempts.times do |attempt|
|
190
|
+
if attempt == 0
|
191
|
+
env[:ui].info I18n.t("vagrant.provisioners.chef.running_solo")
|
192
|
+
else
|
193
|
+
env[:ui].info I18n.t("vagrant.provisioners.chef.running_solo_again")
|
194
|
+
end
|
195
|
+
|
196
|
+
exit_status = env[:vm].channel.sudo(command, :error_check => false) do |type, data|
|
197
|
+
# Output the data with the proper color based on the stream.
|
198
|
+
color = type == :stdout ? :green : :red
|
199
|
+
|
200
|
+
# Note: Be sure to chomp the data to avoid the newlines that the
|
201
|
+
# Chef outputs.
|
202
|
+
env[:ui].info(data.chomp, :color => color, :prefix => false)
|
203
|
+
end
|
204
|
+
|
205
|
+
# There is no need to run Chef again if it converges
|
206
|
+
return if exit_status == 0
|
207
|
+
end
|
208
|
+
|
209
|
+
# If we reached this point then Chef never converged! Error.
|
210
|
+
raise ChefError, :no_convergence
|
211
|
+
end
|
212
|
+
|
213
|
+
def verify_shared_folders(folders)
|
214
|
+
folders.each do |folder|
|
215
|
+
@logger.debug("Checking for shared folder: #{folder}")
|
216
|
+
if !env[:vm].channel.test("test -d #{folder}")
|
217
|
+
raise ChefError, :missing_shared_folders
|
218
|
+
end
|
219
|
+
end
|
220
|
+
end
|
221
|
+
|
222
|
+
def encrypted_data_bag_secret_key_path
|
223
|
+
File.expand_path(config.encrypted_data_bag_secret_key_path, env[:root_path])
|
224
|
+
end
|
225
|
+
|
226
|
+
protected
|
227
|
+
|
228
|
+
# Extracts only the remote paths from a list of folders
|
229
|
+
def guest_paths(folders)
|
230
|
+
folders.map { |parts| parts[2] }
|
231
|
+
end
|
232
|
+
end
|
233
|
+
end
|
234
|
+
end
|
@@ -0,0 +1,176 @@
|
|
1
|
+
require "log4r"
|
2
|
+
|
3
|
+
module Vagrant
|
4
|
+
module Provisioners
|
5
|
+
class PuppetError < Vagrant::Errors::VagrantError
|
6
|
+
error_namespace("vagrant.provisioners.puppet")
|
7
|
+
end
|
8
|
+
|
9
|
+
class Puppet < Base
|
10
|
+
class Config < Vagrant::Config::Base
|
11
|
+
attr_accessor :manifest_file
|
12
|
+
attr_accessor :manifests_path
|
13
|
+
attr_accessor :module_path
|
14
|
+
attr_accessor :pp_path
|
15
|
+
attr_accessor :options
|
16
|
+
attr_accessor :facter
|
17
|
+
|
18
|
+
def manifest_file; @manifest_file || "default.pp"; end
|
19
|
+
def manifests_path; @manifests_path || "manifests"; end
|
20
|
+
def pp_path; @pp_path || "/tmp/vagrant-puppet"; end
|
21
|
+
def options; @options ||= []; end
|
22
|
+
def facter; @facter ||= {}; end
|
23
|
+
|
24
|
+
# Returns the manifests path expanded relative to the root path of the
|
25
|
+
# environment.
|
26
|
+
def expanded_manifests_path(root_path)
|
27
|
+
Pathname.new(manifests_path).expand_path(root_path)
|
28
|
+
end
|
29
|
+
|
30
|
+
# Returns the module paths as an array of paths expanded relative to the
|
31
|
+
# root path.
|
32
|
+
def expanded_module_paths(root_path)
|
33
|
+
return [] if !module_path
|
34
|
+
|
35
|
+
# Get all the paths and expand them relative to the root path, returning
|
36
|
+
# the array of expanded paths
|
37
|
+
paths = module_path
|
38
|
+
paths = [paths] if !paths.is_a?(Array)
|
39
|
+
paths.map do |path|
|
40
|
+
Pathname.new(path).expand_path(root_path)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def validate(env, errors)
|
45
|
+
# Calculate the manifests and module paths based on env
|
46
|
+
this_expanded_manifests_path = expanded_manifests_path(env.root_path)
|
47
|
+
this_expanded_module_paths = expanded_module_paths(env.root_path)
|
48
|
+
|
49
|
+
# Manifests path/file validation
|
50
|
+
if !this_expanded_manifests_path.directory?
|
51
|
+
errors.add(I18n.t("vagrant.provisioners.puppet.manifests_path_missing",
|
52
|
+
:path => this_expanded_manifests_path))
|
53
|
+
else
|
54
|
+
expanded_manifest_file = this_expanded_manifests_path.join(manifest_file)
|
55
|
+
if !expanded_manifest_file.file?
|
56
|
+
errors.add(I18n.t("vagrant.provisioners.puppet.manifest_missing",
|
57
|
+
:manifest => expanded_manifest_file.to_s))
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
# Module paths validation
|
62
|
+
this_expanded_module_paths.each do |path|
|
63
|
+
if !path.directory?
|
64
|
+
errors.add(I18n.t("vagrant.provisioners.puppet.module_path_missing", :path => path))
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def self.config_class
|
71
|
+
Config
|
72
|
+
end
|
73
|
+
|
74
|
+
def initialize(env, config)
|
75
|
+
super
|
76
|
+
|
77
|
+
@logger = Log4r::Logger.new("vagrant::provisioners::puppet")
|
78
|
+
end
|
79
|
+
|
80
|
+
def prepare
|
81
|
+
# Calculate the paths we're going to use based on the environment
|
82
|
+
@expanded_manifests_path = config.expanded_manifests_path(env[:root_path])
|
83
|
+
@expanded_module_paths = config.expanded_module_paths(env[:root_path])
|
84
|
+
@manifest_file = File.join(manifests_guest_path, config.manifest_file)
|
85
|
+
|
86
|
+
set_module_paths
|
87
|
+
share_manifests
|
88
|
+
share_module_paths
|
89
|
+
end
|
90
|
+
|
91
|
+
def provision!
|
92
|
+
# Check that the shared folders are properly shared
|
93
|
+
check = [manifests_guest_path]
|
94
|
+
@module_paths.each do |host_path, guest_path|
|
95
|
+
check << guest_path
|
96
|
+
end
|
97
|
+
|
98
|
+
verify_shared_folders(check)
|
99
|
+
|
100
|
+
# Verify Puppet is installed and run it
|
101
|
+
verify_binary("puppet")
|
102
|
+
run_puppet_client
|
103
|
+
end
|
104
|
+
|
105
|
+
def share_manifests
|
106
|
+
env[:vm].config.vm.share_folder("manifests", manifests_guest_path, @expanded_manifests_path)
|
107
|
+
end
|
108
|
+
|
109
|
+
def share_module_paths
|
110
|
+
count = 0
|
111
|
+
@module_paths.each do |from, to|
|
112
|
+
# Sorry for the cryptic key here, but VirtualBox has a strange limit on
|
113
|
+
# maximum size for it and its something small (around 10)
|
114
|
+
env[:vm].config.vm.share_folder("v-pp-m#{count}", to, from)
|
115
|
+
count += 1
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
def set_module_paths
|
120
|
+
@module_paths = []
|
121
|
+
@expanded_module_paths.each_with_index do |path, i|
|
122
|
+
@module_paths << [path, File.join(config.pp_path, "modules-#{i}")]
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
def manifests_guest_path
|
127
|
+
File.join(config.pp_path, "manifests")
|
128
|
+
end
|
129
|
+
|
130
|
+
def verify_binary(binary)
|
131
|
+
env[:vm].channel.sudo("which #{binary}",
|
132
|
+
:error_class => PuppetError,
|
133
|
+
:error_key => :not_detected,
|
134
|
+
:binary => binary)
|
135
|
+
end
|
136
|
+
|
137
|
+
def run_puppet_client
|
138
|
+
options = [config.options].flatten
|
139
|
+
module_paths = @module_paths.map { |_, to| to }
|
140
|
+
options << "--modulepath '#{module_paths.join(':')}'" if !@module_paths.empty?
|
141
|
+
options << @manifest_file
|
142
|
+
options = options.join(" ")
|
143
|
+
|
144
|
+
# Build up the custom facts if we have any
|
145
|
+
facter = ""
|
146
|
+
if !config.facter.empty?
|
147
|
+
facts = []
|
148
|
+
config.facter.each do |key, value|
|
149
|
+
facts << "FACTER_#{key}='#{value}'"
|
150
|
+
end
|
151
|
+
|
152
|
+
facter = "#{facts.join(" ")} "
|
153
|
+
end
|
154
|
+
|
155
|
+
command = "cd #{manifests_guest_path} && #{facter}puppet apply #{options} --detailed-exitcodes || [ $? -eq 2 ]"
|
156
|
+
|
157
|
+
env[:ui].info I18n.t("vagrant.provisioners.puppet.running_puppet",
|
158
|
+
:manifest => @manifest_file)
|
159
|
+
|
160
|
+
env[:vm].channel.sudo(command) do |type, data|
|
161
|
+
env[:ui].info(data.chomp, :prefix => false)
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
165
|
+
def verify_shared_folders(folders)
|
166
|
+
folders.each do |folder|
|
167
|
+
@logger.debug("Checking for shared folder: #{folder}")
|
168
|
+
if !env[:vm].channel.test("test -d #{folder}")
|
169
|
+
raise PuppetError, :missing_shared_folders
|
170
|
+
end
|
171
|
+
end
|
172
|
+
end
|
173
|
+
end
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|