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,48 @@
|
|
1
|
+
module Vagrant
|
2
|
+
module Action
|
3
|
+
module VM
|
4
|
+
class Import
|
5
|
+
def initialize(app, env)
|
6
|
+
@app = app
|
7
|
+
end
|
8
|
+
|
9
|
+
def call(env)
|
10
|
+
env[:ui].info I18n.t("vagrant.actions.vm.import.importing", :name => env[:vm].box.name)
|
11
|
+
|
12
|
+
# Import the virtual machine
|
13
|
+
ovf_file = env[:vm].box.directory.join("box.ovf").to_s
|
14
|
+
env[:vm].uuid = env[:vm].driver.import(ovf_file) do |progress|
|
15
|
+
env[:ui].clear_line
|
16
|
+
env[:ui].report_progress(progress, 100, false)
|
17
|
+
end
|
18
|
+
|
19
|
+
# Clear the line one last time since the progress meter doesn't disappear
|
20
|
+
# immediately.
|
21
|
+
env[:ui].clear_line
|
22
|
+
|
23
|
+
# If we got interrupted, then the import could have been
|
24
|
+
# interrupted and its not a big deal. Just return out.
|
25
|
+
return if env[:interrupted]
|
26
|
+
|
27
|
+
# Flag as erroneous and return if import failed
|
28
|
+
raise Errors::VMImportFailure if !env[:vm].uuid
|
29
|
+
|
30
|
+
# Import completed successfully. Continue the chain
|
31
|
+
@app.call(env)
|
32
|
+
end
|
33
|
+
|
34
|
+
def recover(env)
|
35
|
+
if env[:vm].created?
|
36
|
+
return if env["vagrant.error"].is_a?(Errors::VagrantError)
|
37
|
+
|
38
|
+
# Interrupted, destroy the VM. We note that we don't want to
|
39
|
+
# validate the configuration here.
|
40
|
+
destroy_env = env.clone
|
41
|
+
destroy_env[:validate] = false
|
42
|
+
env[:action_runner].run(:destroy, destroy_env)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Vagrant
|
2
|
+
module Action
|
3
|
+
module VM
|
4
|
+
class MatchMACAddress
|
5
|
+
def initialize(app, env)
|
6
|
+
@app = app
|
7
|
+
end
|
8
|
+
|
9
|
+
def call(env)
|
10
|
+
raise Errors::VMBaseMacNotSpecified if !env[:vm].config.vm.base_mac
|
11
|
+
|
12
|
+
# Create the proc which we want to use to modify the virtual machine
|
13
|
+
env[:ui].info I18n.t("vagrant.actions.vm.match_mac.matching")
|
14
|
+
env[:vm].driver.set_mac_address(env[:vm].config.vm.base_mac)
|
15
|
+
|
16
|
+
@app.call(env)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,403 @@
|
|
1
|
+
require 'set'
|
2
|
+
|
3
|
+
require 'log4r'
|
4
|
+
|
5
|
+
require 'vagrant/util/network_ip'
|
6
|
+
|
7
|
+
module Vagrant
|
8
|
+
module Action
|
9
|
+
module VM
|
10
|
+
# This action handles all `config.vm.network` configurations by
|
11
|
+
# setting up the VM properly and enabling the networks afterword.
|
12
|
+
class Network
|
13
|
+
# Utilities to deal with network addresses
|
14
|
+
include Util::NetworkIP
|
15
|
+
|
16
|
+
def initialize(app, env)
|
17
|
+
@logger = Log4r::Logger.new("vagrant::action::vm::network")
|
18
|
+
|
19
|
+
@app = app
|
20
|
+
end
|
21
|
+
|
22
|
+
def call(env)
|
23
|
+
@env = env
|
24
|
+
|
25
|
+
# First we have to get the array of adapters that we need
|
26
|
+
# to create on the virtual machine itself, as well as the
|
27
|
+
# driver-agnostic network configurations for each.
|
28
|
+
@logger.debug("Determining adapters and networks...")
|
29
|
+
adapters = []
|
30
|
+
networks = []
|
31
|
+
env[:vm].config.vm.networks.each do |type, args|
|
32
|
+
# Get the normalized configuration we'll use around
|
33
|
+
config = send("#{type}_config", args)
|
34
|
+
|
35
|
+
# Get the virtualbox adapter configuration
|
36
|
+
adapter = send("#{type}_adapter", config)
|
37
|
+
adapters << adapter
|
38
|
+
|
39
|
+
# Get the network configuration
|
40
|
+
network = send("#{type}_network_config", config)
|
41
|
+
network[:_auto_config] = true if config[:auto_config]
|
42
|
+
networks << network
|
43
|
+
end
|
44
|
+
|
45
|
+
if !adapters.empty?
|
46
|
+
# Automatically assign an adapter number to any adapters
|
47
|
+
# that aren't explicitly set.
|
48
|
+
@logger.debug("Assigning adapter locations...")
|
49
|
+
assign_adapter_locations(adapters)
|
50
|
+
|
51
|
+
# Verify that our adapters are good just prior to enabling them.
|
52
|
+
verify_adapters(adapters)
|
53
|
+
|
54
|
+
# Create all the network interfaces
|
55
|
+
@logger.info("Enabling adapters...")
|
56
|
+
env[:ui].info I18n.t("vagrant.actions.vm.network.preparing")
|
57
|
+
env[:vm].driver.enable_adapters(adapters)
|
58
|
+
end
|
59
|
+
|
60
|
+
# Continue the middleware chain. We're done with our VM
|
61
|
+
# setup until after it is booted.
|
62
|
+
@app.call(env)
|
63
|
+
|
64
|
+
if !adapters.empty? && !networks.empty?
|
65
|
+
# Determine the interface numbers for the guest.
|
66
|
+
assign_interface_numbers(networks, adapters)
|
67
|
+
|
68
|
+
# Configure all the network interfaces on the guest. We only
|
69
|
+
# want to configure the networks that have `auto_config` setup.
|
70
|
+
networks_to_configure = networks.select { |n| n[:_auto_config] }
|
71
|
+
env[:ui].info I18n.t("vagrant.actions.vm.network.configuring")
|
72
|
+
env[:vm].guest.configure_networks(networks_to_configure)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
# This method assigns the adapter to use for the adapter.
|
77
|
+
# e.g. it says that the first adapter is actually on the
|
78
|
+
# virtual machine's 2nd adapter location.
|
79
|
+
#
|
80
|
+
# It determines the adapter numbers by simply finding the
|
81
|
+
# "next available" in each case.
|
82
|
+
#
|
83
|
+
# The adapters are modified in place by adding an ":adapter"
|
84
|
+
# field to each.
|
85
|
+
def assign_adapter_locations(adapters)
|
86
|
+
available = Set.new(1..8)
|
87
|
+
|
88
|
+
# Determine which NICs are actually available.
|
89
|
+
interfaces = @env[:vm].driver.read_network_interfaces
|
90
|
+
interfaces.each do |number, nic|
|
91
|
+
# Remove the number from the available NICs if the
|
92
|
+
# NIC is in use.
|
93
|
+
available.delete(number) if nic[:type] != :none
|
94
|
+
end
|
95
|
+
|
96
|
+
# Based on the available set, assign in order to
|
97
|
+
# the adapters.
|
98
|
+
available = available.to_a.sort
|
99
|
+
@logger.debug("Available NICs: #{available.inspect}")
|
100
|
+
adapters.each do |adapter|
|
101
|
+
# Ignore the adapters that already have been assigned
|
102
|
+
if !adapter[:adapter]
|
103
|
+
# If we have no available adapters, then that is an exceptional
|
104
|
+
# event.
|
105
|
+
raise Errors::NetworkNoAdapters if available.empty?
|
106
|
+
|
107
|
+
# Otherwise, assign as the adapter the next available item
|
108
|
+
adapter[:adapter] = available.shift
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
# Verifies that the adapter configurations look good. This will
|
114
|
+
# raise an exception in the case that any errors occur.
|
115
|
+
def verify_adapters(adapters)
|
116
|
+
# Verify that there are no collisions in the adapters being used.
|
117
|
+
used = Set.new
|
118
|
+
adapters.each do |adapter|
|
119
|
+
raise Errors::NetworkAdapterCollision if used.include?(adapter[:adapter])
|
120
|
+
used.add(adapter[:adapter])
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
# Assigns the actual interface number of a network based on the
|
125
|
+
# enabled NICs on the virtual machine.
|
126
|
+
#
|
127
|
+
# This interface number is used by the guest to configure the
|
128
|
+
# NIC on the guest VM.
|
129
|
+
#
|
130
|
+
# The networks are modified in place by adding an ":interface"
|
131
|
+
# field to each.
|
132
|
+
def assign_interface_numbers(networks, adapters)
|
133
|
+
current = 0
|
134
|
+
adapter_to_interface = {}
|
135
|
+
|
136
|
+
# Make a first pass to assign interface numbers by adapter location
|
137
|
+
vm_adapters = @env[:vm].driver.read_network_interfaces
|
138
|
+
vm_adapters.sort.each do |number, adapter|
|
139
|
+
if adapter[:type] != :none
|
140
|
+
# Not used, so assign the interface number and increment
|
141
|
+
adapter_to_interface[number] = current
|
142
|
+
current += 1
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
# Make a pass through the adapters to assign the :interface
|
147
|
+
# key to each network configuration.
|
148
|
+
adapters.each_index do |i|
|
149
|
+
adapter = adapters[i]
|
150
|
+
network = networks[i]
|
151
|
+
|
152
|
+
# Figure out the interface number by simple lookup
|
153
|
+
network[:interface] = adapter_to_interface[adapter[:adapter]]
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
def hostonly_config(args)
|
158
|
+
ip = args[0]
|
159
|
+
options = args[1] || {}
|
160
|
+
|
161
|
+
# Determine if we're dealing with a static IP or a DHCP-served IP.
|
162
|
+
type = ip == :dhcp ? :dhcp : :static
|
163
|
+
|
164
|
+
# Default IP is in the 20-bit private network block for DHCP based networks
|
165
|
+
ip = "172.28.128.1" if type == :dhcp
|
166
|
+
|
167
|
+
options = {
|
168
|
+
:type => type,
|
169
|
+
:ip => ip,
|
170
|
+
:netmask => "255.255.255.0",
|
171
|
+
:adapter => nil,
|
172
|
+
:mac => nil,
|
173
|
+
:name => nil,
|
174
|
+
:auto_config => true
|
175
|
+
}.merge(options)
|
176
|
+
|
177
|
+
# Verify that this hostonly network wouldn't conflict with any
|
178
|
+
# bridged interfaces
|
179
|
+
verify_no_bridge_collision(options)
|
180
|
+
|
181
|
+
# Get the network address and IP parts which are used for many
|
182
|
+
# default calculations
|
183
|
+
netaddr = network_address(options[:ip], options[:netmask])
|
184
|
+
ip_parts = netaddr.split(".").map { |i| i.to_i }
|
185
|
+
|
186
|
+
# Calculate the adapter IP, which we assume is the IP ".1" at the
|
187
|
+
# end usually.
|
188
|
+
adapter_ip = ip_parts.dup
|
189
|
+
adapter_ip[3] += 1
|
190
|
+
options[:adapter_ip] ||= adapter_ip.join(".")
|
191
|
+
|
192
|
+
if type == :dhcp
|
193
|
+
# Calculate the DHCP server IP, which is the network address
|
194
|
+
# with the final octet + 2. So "172.28.0.0" turns into "172.28.0.2"
|
195
|
+
dhcp_ip = ip_parts.dup
|
196
|
+
dhcp_ip[3] += 2
|
197
|
+
options[:dhcp_ip] ||= dhcp_ip.join(".")
|
198
|
+
|
199
|
+
# Calculate the lower and upper bound for the DHCP server
|
200
|
+
dhcp_lower = ip_parts.dup
|
201
|
+
dhcp_lower[3] += 3
|
202
|
+
options[:dhcp_lower] ||= dhcp_lower.join(".")
|
203
|
+
|
204
|
+
dhcp_upper = ip_parts.dup
|
205
|
+
dhcp_upper[3] = 254
|
206
|
+
options[:dhcp_upper] ||= dhcp_upper.join(".")
|
207
|
+
end
|
208
|
+
|
209
|
+
# Return the hostonly network configuration
|
210
|
+
return options
|
211
|
+
end
|
212
|
+
|
213
|
+
def hostonly_adapter(config)
|
214
|
+
@logger.debug("Searching for matching network: #{config[:ip]}")
|
215
|
+
interface = find_matching_hostonly_network(config)
|
216
|
+
|
217
|
+
if !interface
|
218
|
+
@logger.debug("Network not found. Creating if we can.")
|
219
|
+
|
220
|
+
# It is an error case if a specific name was given but the network
|
221
|
+
# doesn't exist.
|
222
|
+
if config[:name]
|
223
|
+
raise Errors::NetworkNotFound, :name => config[:name]
|
224
|
+
end
|
225
|
+
|
226
|
+
# Otherwise, we create a new network and put the net network
|
227
|
+
# in the list of available networks so other network definitions
|
228
|
+
# can use it!
|
229
|
+
interface = create_hostonly_network(config)
|
230
|
+
@logger.debug("Created network: #{interface[:name]}")
|
231
|
+
end
|
232
|
+
|
233
|
+
if config[:type] == :dhcp
|
234
|
+
# Check that if there is a DHCP server attached on our interface,
|
235
|
+
# then it is identical. Otherwise, we can't set it.
|
236
|
+
if interface[:dhcp]
|
237
|
+
valid = interface[:dhcp][:ip] == config[:dhcp_ip] &&
|
238
|
+
interface[:dhcp][:lower] == config[:dhcp_lower] &&
|
239
|
+
interface[:dhcp][:upper] == config[:dhcp_upper]
|
240
|
+
|
241
|
+
raise Errors::NetworkDHCPAlreadyAttached if !valid
|
242
|
+
|
243
|
+
@logger.debug("DHCP server already properly configured")
|
244
|
+
else
|
245
|
+
# Configure the DHCP server for the network.
|
246
|
+
@logger.debug("Creating a DHCP server...")
|
247
|
+
@env[:vm].driver.create_dhcp_server(interface[:name], config)
|
248
|
+
end
|
249
|
+
end
|
250
|
+
|
251
|
+
return {
|
252
|
+
:adapter => config[:adapter],
|
253
|
+
:type => :hostonly,
|
254
|
+
:hostonly => interface[:name],
|
255
|
+
:mac_address => config[:mac],
|
256
|
+
:nic_type => config[:nic_type]
|
257
|
+
}
|
258
|
+
end
|
259
|
+
|
260
|
+
def hostonly_network_config(config)
|
261
|
+
return {
|
262
|
+
:type => config[:type],
|
263
|
+
:ip => config[:ip],
|
264
|
+
:netmask => config[:netmask]
|
265
|
+
}
|
266
|
+
end
|
267
|
+
|
268
|
+
# Creates a new hostonly network that matches the network requested
|
269
|
+
# by the given host-only network configuration.
|
270
|
+
def create_hostonly_network(config)
|
271
|
+
# Create the options that are going to be used to create our
|
272
|
+
# new network.
|
273
|
+
options = config.dup
|
274
|
+
options[:ip] = options[:adapter_ip]
|
275
|
+
|
276
|
+
@env[:vm].driver.create_host_only_network(options)
|
277
|
+
end
|
278
|
+
|
279
|
+
# Finds a host only network that matches our configuration on VirtualBox.
|
280
|
+
# This will return nil if a matching network does not exist.
|
281
|
+
def find_matching_hostonly_network(config)
|
282
|
+
this_netaddr = network_address(config[:ip], config[:netmask])
|
283
|
+
|
284
|
+
@env[:vm].driver.read_host_only_interfaces.each do |interface|
|
285
|
+
if config[:name] && config[:name] == interface[:name]
|
286
|
+
return interface
|
287
|
+
elsif this_netaddr == network_address(interface[:ip], interface[:netmask])
|
288
|
+
return interface
|
289
|
+
end
|
290
|
+
end
|
291
|
+
|
292
|
+
nil
|
293
|
+
end
|
294
|
+
|
295
|
+
# Verifies that a host-only network subnet would not collide with
|
296
|
+
# a bridged networking interface.
|
297
|
+
#
|
298
|
+
# If the subnets overlap in any way then the host only network
|
299
|
+
# will not work because the routing tables will force the traffic
|
300
|
+
# onto the real interface rather than the virtualbox interface.
|
301
|
+
def verify_no_bridge_collision(options)
|
302
|
+
this_netaddr = network_address(options[:ip], options[:netmask])
|
303
|
+
|
304
|
+
@env[:vm].driver.read_bridged_interfaces.each do |interface|
|
305
|
+
that_netaddr = network_address(interface[:ip], interface[:netmask])
|
306
|
+
raise Errors::NetworkCollision if this_netaddr == that_netaddr && interface[:status] != "Down"
|
307
|
+
end
|
308
|
+
end
|
309
|
+
|
310
|
+
def bridged_config(args)
|
311
|
+
options = args[0] || {}
|
312
|
+
options = {} if !options.is_a?(Hash)
|
313
|
+
|
314
|
+
return {
|
315
|
+
:adapter => nil,
|
316
|
+
:mac => nil,
|
317
|
+
:bridge => nil,
|
318
|
+
:auto_config => true
|
319
|
+
}.merge(options)
|
320
|
+
end
|
321
|
+
|
322
|
+
def bridged_adapter(config)
|
323
|
+
# Find the bridged interfaces that are available
|
324
|
+
bridgedifs = @env[:vm].driver.read_bridged_interfaces
|
325
|
+
bridgedifs.delete_if { |interface| interface[:status] == "Down" }
|
326
|
+
|
327
|
+
# The name of the chosen bridge interface will be assigned to this
|
328
|
+
# variable.
|
329
|
+
chosen_bridge = nil
|
330
|
+
|
331
|
+
if config[:bridge]
|
332
|
+
@logger.debug("Bridge was directly specified in config, searching for: #{config[:bridge]}")
|
333
|
+
|
334
|
+
# Search for a matching bridged interface
|
335
|
+
bridgedifs.each do |interface|
|
336
|
+
if interface[:name].downcase == config[:bridge].downcase
|
337
|
+
@logger.debug("Specific bridge found as configured in the Vagrantfile. Using it.")
|
338
|
+
chosen_bridge = interface[:name]
|
339
|
+
break
|
340
|
+
end
|
341
|
+
end
|
342
|
+
|
343
|
+
# If one wasn't found, then we notify the user here.
|
344
|
+
if !chosen_bridge
|
345
|
+
@env[:ui].info I18n.t("vagrant.actions.vm.bridged_networking.specific_not_found",
|
346
|
+
:bridge => config[:bridge])
|
347
|
+
end
|
348
|
+
end
|
349
|
+
|
350
|
+
# If we still don't have a bridge chosen (this means that one wasn't
|
351
|
+
# specified in the Vagrantfile, or the bridge specified in the Vagrantfile
|
352
|
+
# wasn't found), then we fall back to the normal means of searchign for a
|
353
|
+
# bridged network.
|
354
|
+
if !chosen_bridge
|
355
|
+
if bridgedifs.length == 1
|
356
|
+
# One bridgable interface? Just use it.
|
357
|
+
chosen_bridge = bridgedifs[0][:name]
|
358
|
+
@logger.debug("Only one bridged interface available. Using it by default.")
|
359
|
+
else
|
360
|
+
# More than one bridgable interface requires a user decision, so
|
361
|
+
# show options to choose from.
|
362
|
+
@env[:ui].info I18n.t("vagrant.actions.vm.bridged_networking.available",
|
363
|
+
:prefix => false)
|
364
|
+
bridgedifs.each_index do |index|
|
365
|
+
interface = bridgedifs[index]
|
366
|
+
@env[:ui].info("#{index + 1}) #{interface[:name]}", :prefix => false)
|
367
|
+
end
|
368
|
+
|
369
|
+
# The range of valid choices
|
370
|
+
valid = Range.new(1, bridgedifs.length)
|
371
|
+
|
372
|
+
# The choice that the user has chosen as the bridging interface
|
373
|
+
choice = nil
|
374
|
+
while !valid.include?(choice)
|
375
|
+
choice = @env[:ui].ask("What interface should the network bridge to? ")
|
376
|
+
choice = choice.to_i
|
377
|
+
end
|
378
|
+
|
379
|
+
chosen_bridge = bridgedifs[choice - 1][:name]
|
380
|
+
end
|
381
|
+
end
|
382
|
+
|
383
|
+
@logger.info("Bridging adapter #{config[:adapter]} to #{chosen_bridge}")
|
384
|
+
|
385
|
+
# Given the choice we can now define the adapter we're using
|
386
|
+
return {
|
387
|
+
:adapter => config[:adapter],
|
388
|
+
:type => :bridged,
|
389
|
+
:bridge => chosen_bridge,
|
390
|
+
:mac_address => config[:mac],
|
391
|
+
:nic_type => config[:nic_type],
|
392
|
+
}
|
393
|
+
end
|
394
|
+
|
395
|
+
def bridged_network_config(config)
|
396
|
+
return {
|
397
|
+
:type => :dhcp
|
398
|
+
}
|
399
|
+
end
|
400
|
+
end
|
401
|
+
end
|
402
|
+
end
|
403
|
+
end
|