vagrant 0.8.10 → 0.9.0
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/CHANGELOG.md +77 -1
- data/Gemfile +0 -14
- data/LICENSE +1 -1
- data/bin/vagrant +47 -20
- data/config/default.rb +6 -14
- data/lib/vagrant.rb +132 -5
- data/lib/vagrant/action.rb +45 -123
- data/lib/vagrant/action/box/destroy.rb +7 -3
- data/lib/vagrant/action/box/download.rb +8 -8
- data/lib/vagrant/action/box/package.rb +2 -2
- data/lib/vagrant/action/box/unpackage.rb +13 -7
- data/lib/vagrant/action/box/verify.rb +5 -5
- data/lib/vagrant/action/builder.rb +23 -19
- data/lib/vagrant/action/builtin.rb +117 -79
- data/lib/vagrant/action/env/set.rb +7 -4
- data/lib/vagrant/action/environment.rb +3 -41
- data/lib/vagrant/action/general/package.rb +14 -29
- data/lib/vagrant/action/general/validate.rb +2 -2
- data/lib/vagrant/action/runner.rb +53 -0
- data/lib/vagrant/action/vm/boot.rb +9 -9
- data/lib/vagrant/action/vm/check_accessible.rb +2 -2
- data/lib/vagrant/action/vm/check_box.rb +10 -12
- data/lib/vagrant/action/vm/check_guest_additions.rb +8 -8
- data/lib/vagrant/action/vm/check_port_collisions.rb +85 -0
- data/lib/vagrant/action/vm/clean_machine_folder.rb +4 -4
- data/lib/vagrant/action/vm/clear_forwarded_ports.rb +3 -11
- data/lib/vagrant/action/vm/clear_network_interfaces.rb +31 -0
- data/lib/vagrant/action/vm/clear_shared_folders.rb +2 -11
- data/lib/vagrant/action/vm/customize.rb +19 -9
- data/lib/vagrant/action/vm/destroy.rb +4 -4
- data/lib/vagrant/action/vm/destroy_unused_network_interfaces.rb +2 -12
- data/lib/vagrant/action/vm/discard_state.rb +4 -4
- data/lib/vagrant/action/vm/export.rb +13 -8
- data/lib/vagrant/action/vm/forward_ports.rb +55 -102
- data/lib/vagrant/action/vm/halt.rb +9 -6
- data/lib/vagrant/action/vm/host_name.rb +4 -4
- data/lib/vagrant/action/vm/import.rb +19 -10
- data/lib/vagrant/action/vm/match_mac_address.rb +4 -9
- data/lib/vagrant/action/vm/network.rb +300 -94
- data/lib/vagrant/action/vm/nfs.rb +41 -26
- data/lib/vagrant/action/vm/package.rb +1 -1
- data/lib/vagrant/action/vm/package_vagrantfile.rb +5 -2
- data/lib/vagrant/action/vm/provision.rb +42 -13
- data/lib/vagrant/action/vm/provisioner_cleanup.rb +2 -2
- data/lib/vagrant/action/vm/{clear_nfs_exports.rb → prune_nfs_exports.rb} +7 -7
- data/lib/vagrant/action/vm/resume.rb +4 -4
- data/lib/vagrant/action/vm/setup_package_files.rb +54 -0
- data/lib/vagrant/action/vm/share_folders.rb +63 -39
- data/lib/vagrant/action/vm/suspend.rb +4 -4
- data/lib/vagrant/action/warden.rb +13 -6
- data/lib/vagrant/box.rb +9 -55
- data/lib/vagrant/box_collection.rb +22 -17
- data/lib/vagrant/cli.rb +62 -47
- data/lib/vagrant/command.rb +18 -20
- data/lib/vagrant/command/base.rb +135 -90
- data/lib/vagrant/command/box.rb +46 -21
- data/lib/vagrant/command/box_add.rb +33 -0
- data/lib/vagrant/command/box_list.rb +25 -0
- data/lib/vagrant/command/box_remove.rb +23 -0
- data/lib/vagrant/command/box_repackage.rb +23 -0
- data/lib/vagrant/command/destroy.rb +16 -5
- data/lib/vagrant/command/halt.rb +25 -7
- data/lib/vagrant/command/init.rb +30 -7
- data/lib/vagrant/command/package.rb +49 -18
- data/lib/vagrant/command/provision.rb +22 -9
- data/lib/vagrant/command/reload.rb +18 -5
- data/lib/vagrant/command/resume.rb +18 -5
- data/lib/vagrant/command/ssh.rb +69 -31
- data/lib/vagrant/command/ssh_config.rb +37 -22
- data/lib/vagrant/command/status.rb +22 -20
- data/lib/vagrant/command/suspend.rb +18 -5
- data/lib/vagrant/command/up.rb +41 -8
- data/lib/vagrant/communication.rb +7 -0
- data/lib/vagrant/communication/base.rb +56 -0
- data/lib/vagrant/communication/ssh.rb +200 -0
- data/lib/vagrant/config.rb +29 -103
- data/lib/vagrant/config/base.rb +18 -26
- data/lib/vagrant/config/container.rb +37 -0
- data/lib/vagrant/config/error_recorder.rb +1 -1
- data/lib/vagrant/config/loader.rb +125 -0
- data/lib/vagrant/config/nfs.rb +1 -3
- data/lib/vagrant/config/package.rb +1 -3
- data/lib/vagrant/config/ssh.rb +31 -16
- data/lib/vagrant/config/top.rb +36 -25
- data/lib/vagrant/config/vagrant.rb +2 -5
- data/lib/vagrant/config/vm.rb +115 -56
- data/lib/vagrant/config/vm/provisioner.rb +16 -20
- data/lib/vagrant/config/vm/sub_vm.rb +1 -1
- data/lib/vagrant/data_store.rb +23 -15
- data/lib/vagrant/downloaders/base.rb +7 -5
- data/lib/vagrant/downloaders/file.rb +4 -4
- data/lib/vagrant/downloaders/http.rb +4 -5
- data/lib/vagrant/driver.rb +7 -0
- data/lib/vagrant/driver/virtualbox.rb +121 -0
- data/lib/vagrant/driver/virtualbox_4_0.rb +411 -0
- data/lib/vagrant/driver/virtualbox_4_1.rb +411 -0
- data/lib/vagrant/driver/virtualbox_base.rb +284 -0
- data/lib/vagrant/environment.rb +221 -240
- data/lib/vagrant/errors.rb +74 -25
- data/lib/vagrant/guest.rb +16 -0
- data/lib/vagrant/guest/arch.rb +48 -0
- data/lib/vagrant/{systems → guest}/base.rb +30 -18
- data/lib/vagrant/guest/debian.rb +61 -0
- data/lib/vagrant/{systems → guest}/freebsd.rb +11 -18
- data/lib/vagrant/guest/gentoo.rb +32 -0
- data/lib/vagrant/guest/linux.rb +78 -0
- data/lib/vagrant/{systems → guest}/linux/config.rb +2 -4
- data/lib/vagrant/guest/linux/error.rb +9 -0
- data/lib/vagrant/guest/redhat.rb +66 -0
- data/lib/vagrant/guest/solaris.rb +114 -0
- data/lib/vagrant/{systems → guest}/suse.rb +2 -2
- data/lib/vagrant/guest/ubuntu.rb +23 -0
- data/lib/vagrant/hosts.rb +23 -6
- data/lib/vagrant/hosts/arch.rb +7 -3
- data/lib/vagrant/hosts/base.rb +36 -46
- data/lib/vagrant/hosts/bsd.rb +53 -16
- data/lib/vagrant/hosts/fedora.rb +14 -0
- data/lib/vagrant/hosts/freebsd.rb +6 -36
- data/lib/vagrant/hosts/linux.rb +45 -20
- data/lib/vagrant/hosts/windows.rb +16 -0
- data/lib/vagrant/provisioners.rb +10 -7
- data/lib/vagrant/provisioners/base.rb +11 -34
- data/lib/vagrant/provisioners/chef.rb +30 -26
- data/lib/vagrant/provisioners/chef_client.rb +37 -23
- data/lib/vagrant/provisioners/chef_solo.rb +61 -16
- data/lib/vagrant/provisioners/puppet.rb +70 -38
- data/lib/vagrant/provisioners/puppet_server.rb +12 -13
- data/lib/vagrant/provisioners/shell.rb +24 -24
- data/lib/vagrant/registry.rb +49 -0
- data/lib/vagrant/ssh.rb +82 -153
- data/lib/vagrant/ui.rb +118 -50
- data/lib/vagrant/util/busy.rb +1 -1
- data/lib/vagrant/util/file_mode.rb +12 -0
- data/lib/vagrant/util/network_ip.rb +28 -0
- data/lib/vagrant/util/platform.rb +1 -0
- data/lib/vagrant/util/subprocess.rb +227 -0
- data/lib/vagrant/version.rb +1 -1
- data/lib/vagrant/vm.rb +111 -97
- data/tasks/acceptance.rake +3 -3
- data/tasks/test.rake +7 -2
- data/templates/commands/init/Vagrantfile.erb +11 -4
- data/templates/{ssh_config.erb → commands/ssh_config/config.erb} +0 -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/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 +241 -122
- data/templates/{chef_server_client.erb → provisioners/chef_client/client.erb} +0 -0
- data/templates/{chef_solo_solo.erb → provisioners/chef_solo/solo.erb} +0 -0
- data/test/acceptance/base.rb +10 -10
- data/test/acceptance/box_test.rb +28 -6
- data/test/acceptance/destroy_test.rb +1 -1
- data/test/acceptance/halt_test.rb +4 -4
- data/test/acceptance/init_test.rb +3 -3
- 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 +1 -1
- 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 +7 -2
- data/test/acceptance/support/config.rb +1 -1
- data/test/acceptance/support/isolated_environment.rb +41 -150
- data/test/acceptance/support/matchers/match_output.rb +1 -1
- data/test/acceptance/support/matchers/succeed.rb +14 -0
- data/test/acceptance/support/network_tests.rb +29 -0
- data/test/acceptance/support/output.rb +9 -1
- data/test/acceptance/support/shared/base_context.rb +16 -9
- data/test/acceptance/support/shared/command_examples.rb +4 -4
- data/test/acceptance/suspend_test.rb +1 -1
- data/test/acceptance/up_basic_test.rb +26 -7
- data/test/acceptance/up_with_box_url.rb +1 -1
- data/test/acceptance/vagrant_test.rb +1 -1
- data/test/acceptance/version_test.rb +0 -5
- data/test/support/isolated_environment.rb +46 -0
- data/test/{acceptance/support → support}/tempdir.rb +0 -0
- data/test/unit/base.rb +21 -0
- data/test/unit/support/isolated_environment.rb +39 -0
- data/test/unit/support/shared/base_context.rb +30 -0
- data/test/unit/vagrant/action/builder_test.rb +126 -177
- data/test/unit/vagrant/action/environment_test.rb +10 -21
- data/test/unit/vagrant/action/runner_test.rb +65 -0
- data/test/unit/vagrant/action/warden_test.rb +64 -97
- data/test/unit/vagrant/box_collection_test.rb +44 -33
- data/test/unit/vagrant/box_test.rb +25 -65
- data/test/unit/vagrant/command/base_test.rb +141 -14
- data/test/unit/vagrant/config/base_test.rb +16 -43
- data/test/unit/vagrant/config/loader_test.rb +79 -0
- data/test/unit/vagrant/config/top_test.rb +69 -0
- data/test/unit/vagrant/config/vm_test.rb +62 -47
- data/test/unit/vagrant/config_test.rb +16 -151
- data/test/unit/vagrant/data_store_test.rb +43 -61
- data/test/unit/vagrant/downloaders/base_test.rb +12 -22
- data/test/unit/vagrant/downloaders/file_test.rb +58 -31
- data/test/unit/vagrant/downloaders/http_test.rb +12 -86
- data/test/unit/vagrant/environment_test.rb +107 -536
- data/test/unit/vagrant/hosts_test.rb +36 -0
- data/test/unit/vagrant/registry_test.rb +56 -0
- data/test/unit/vagrant/util/file_checksum_test.rb +23 -0
- data/test/unit/vagrant/util/hash_with_indifferent_access_test.rb +23 -24
- data/test/unit/vagrant/util/network_ip_test.rb +17 -0
- data/test/unit/vagrant/util/retryable_test.rb +90 -34
- data/test/unit/vagrant_test.rb +27 -0
- data/test/{unit → unit_legacy}/locales/en.yml +0 -0
- data/test/{unit → unit_legacy}/test_helper.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/box/destroy_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/box/download_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/box/package_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/box/unpackage_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/box/verify_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/env/set_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/general/package_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/general/validate_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/vm/boot_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/vm/check_accessible_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/vm/check_box_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/vm/check_guest_additions_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/vm/clean_machine_folder_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/vm/clear_forwarded_ports_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/vm/clear_nfs_exports_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/vm/clear_shared_folders_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/vm/customize_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/vm/destroy_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/vm/destroy_unused_network_interfaces_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/vm/discard_state_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/vm/export_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/vm/forward_ports_helpers_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/vm/forward_ports_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/vm/halt_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/vm/host_name_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/vm/import_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/vm/match_mac_address_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/vm/modify_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/vm/network_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/vm/nfs_helpers_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/vm/nfs_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/vm/package_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/vm/package_vagrantfile_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/vm/provision_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/vm/provisioner_cleanup_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/vm/resume_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/vm/share_folders_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/vm/suspend_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action_test.rb +0 -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 → unit_legacy}/vagrant/cli_test.rb +0 -0
- data/test/unit_legacy/vagrant/command/base_test.rb +23 -0
- data/test/{unit → unit_legacy}/vagrant/command/group_base_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/command/helpers_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/command/init_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/command/package_test.rb +0 -0
- data/test/unit_legacy/vagrant/config/base_test.rb +52 -0
- data/test/{unit → unit_legacy}/vagrant/config/error_recorder_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/config/ssh_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/config/vagrant_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/config/vm/provisioner_test.rb +0 -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 → unit_legacy}/vagrant/errors_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/hosts/base_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/hosts/bsd_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/hosts/linux_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/plugin_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/provisioners/base_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/provisioners/chef_client_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/provisioners/chef_solo_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/provisioners/chef_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/provisioners/puppet_server_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/provisioners/puppet_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/provisioners/shell_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/ssh/session_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/ssh_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/systems/base_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/systems/linux_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/util/busy_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/util/counter_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/util/platform_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/util/stacked_proc_runner_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/util/template_renderer_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/vm_test.rb +0 -0
- data/vagrant.gemspec +7 -9
- metadata +214 -216
- data/keys/vagrant.ppk +0 -26
- data/lib/vagrant/action/box.rb +0 -11
- data/lib/vagrant/action/env.rb +0 -7
- data/lib/vagrant/action/general.rb +0 -8
- data/lib/vagrant/action/vm.rb +0 -34
- data/lib/vagrant/action/vm/forward_ports_helpers.rb +0 -28
- data/lib/vagrant/action/vm/modify.rb +0 -37
- data/lib/vagrant/action/vm/nfs_helpers.rb +0 -11
- data/lib/vagrant/command/group_base.rb +0 -107
- data/lib/vagrant/command/helpers.rb +0 -33
- data/lib/vagrant/command/named_base.rb +0 -14
- data/lib/vagrant/command/upgrade_to_060.rb +0 -45
- data/lib/vagrant/command/version.rb +0 -13
- data/lib/vagrant/ssh/session.rb +0 -136
- data/lib/vagrant/systems.rb +0 -13
- data/lib/vagrant/systems/arch.rb +0 -34
- data/lib/vagrant/systems/debian.rb +0 -36
- data/lib/vagrant/systems/gentoo.rb +0 -27
- data/lib/vagrant/systems/linux.rb +0 -82
- data/lib/vagrant/systems/linux/error.rb +0 -9
- data/lib/vagrant/systems/redhat.rb +0 -48
- data/lib/vagrant/systems/solaris.rb +0 -113
- data/lib/vagrant/systems/ubuntu.rb +0 -17
- data/templates/network_entry_arch.erb +0 -9
- data/templates/network_entry_debian.erb +0 -8
- data/templates/network_entry_gentoo.erb +0 -5
- data/templates/network_entry_redhat.erb +0 -9
- data/test/unit/vagrant/ui_test.rb +0 -29
data/keys/vagrant.ppk
DELETED
@@ -1,26 +0,0 @@
|
|
1
|
-
PuTTY-User-Key-File-2: ssh-rsa
|
2
|
-
Encryption: none
|
3
|
-
Comment: imported-openssh-key
|
4
|
-
Public-Lines: 6
|
5
|
-
AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+k
|
6
|
-
z4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdO
|
7
|
-
KLv6IedplqoPkcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4
|
8
|
-
O7PtixWKn5y2hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGj
|
9
|
-
yiYJnAmCP3NOTd0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPK
|
10
|
-
cF96hrucXzcWyLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQ==
|
11
|
-
Private-Lines: 14
|
12
|
-
AAABAQDiKpY8le3NkDryYp0QuziMmx3KTL57B1l412zm2NycdTnNRgTbkr598kQP
|
13
|
-
2pRYgJwtkNzzVMZaMfICoPUHDtemBTAWB5QnBSXNC6sC/7/JKfGLC5oYl+EUzUJp
|
14
|
-
AfN9emGBWaX59lS+clRO/N9MrYuDoR1tQT1NqtSUF//E9+4SExKUgTmR5v9nPf8t
|
15
|
-
SVGDzIOrPnD5BZUni62cqcqKrBk3SbCnBTthLImGVPhhXUXefhiMuzAznAmzaiqb
|
16
|
-
SOyxC78FPS3IRc0NgEsQXgCwKVpa5InaSOrsqGuthfNqCqGdJ6L04NgVKEm7xRZV
|
17
|
-
5zciFvlleXM7q901DUn1ex/ib7bLAAAAgQD6qFxx/Rv9CNN96l/4rb14HKirC2o/
|
18
|
-
orApiHmHDsURs5rUKDx0f9iPcXN7S1uePXuJRK/5hsubaOCx3Owd2u9gD6Oq0CsM
|
19
|
-
kE4CUSiJcYrMANtx54cGH7RkEjFZxK8xAv1ldELEyxrFqkbE4BKd8QOt414qjvTG
|
20
|
-
yAK+OLD3M2QdCQAAAIEA7cfKTQgMUe8oR2yFk9QB+uvl1jfG16u5d0Tv7pHmnIvf
|
21
|
-
CX5G5MVEWYbcVfxx7r1IZzy3V908MoDwWGRTaOKc1RIc1qE7ZxLaxbniscnN/i42
|
22
|
-
abqPpgZUOjkbX4JK/YAVaYV2RmBM5Ag95VXZfC+HMPQVaSqyQrNXObWhow4HSJ0A
|
23
|
-
AACANWrLCz708y7VYgAtW2Uf1DPOIYMdvo6fxIB5i9ZfISgcJ/bbCUkFrhoH+vq/
|
24
|
-
5CIWxCPp0f85R4qxxQ5ihxJ0YDQT9Jpx4TMss4PSavPaBH3RXow5Ohe+bYoQNE5O
|
25
|
-
gEXk2wVfZczCZpigBKbKZHNYcelXtTt/nP3rsCuGcM4h53s=
|
26
|
-
Private-MAC: bc710f345e67c736d57dd72aab10fe4625345dae
|
data/lib/vagrant/action/box.rb
DELETED
@@ -1,11 +0,0 @@
|
|
1
|
-
module Vagrant
|
2
|
-
class Action
|
3
|
-
module Box
|
4
|
-
autoload :Destroy, 'vagrant/action/box/destroy'
|
5
|
-
autoload :Download, 'vagrant/action/box/download'
|
6
|
-
autoload :Package, 'vagrant/action/box/package'
|
7
|
-
autoload :Unpackage, 'vagrant/action/box/unpackage'
|
8
|
-
autoload :Verify, 'vagrant/action/box/verify'
|
9
|
-
end
|
10
|
-
end
|
11
|
-
end
|
data/lib/vagrant/action/env.rb
DELETED
data/lib/vagrant/action/vm.rb
DELETED
@@ -1,34 +0,0 @@
|
|
1
|
-
module Vagrant
|
2
|
-
class Action
|
3
|
-
module VM
|
4
|
-
autoload :Boot, 'vagrant/action/vm/boot'
|
5
|
-
autoload :CheckAccessible, 'vagrant/action/vm/check_accessible'
|
6
|
-
autoload :CheckBox, 'vagrant/action/vm/check_box'
|
7
|
-
autoload :CheckGuestAdditions, 'vagrant/action/vm/check_guest_additions'
|
8
|
-
autoload :CleanMachineFolder, 'vagrant/action/vm/clean_machine_folder'
|
9
|
-
autoload :ClearForwardedPorts, 'vagrant/action/vm/clear_forwarded_ports'
|
10
|
-
autoload :ClearNFSExports, 'vagrant/action/vm/clear_nfs_exports'
|
11
|
-
autoload :ClearSharedFolders, 'vagrant/action/vm/clear_shared_folders'
|
12
|
-
autoload :Customize, 'vagrant/action/vm/customize'
|
13
|
-
autoload :Destroy, 'vagrant/action/vm/destroy'
|
14
|
-
autoload :DestroyUnusedNetworkInterfaces, 'vagrant/action/vm/destroy_unused_network_interfaces'
|
15
|
-
autoload :DiscardState, 'vagrant/action/vm/discard_state'
|
16
|
-
autoload :Export, 'vagrant/action/vm/export'
|
17
|
-
autoload :ForwardPorts, 'vagrant/action/vm/forward_ports'
|
18
|
-
autoload :Halt, 'vagrant/action/vm/halt'
|
19
|
-
autoload :HostName, 'vagrant/action/vm/host_name'
|
20
|
-
autoload :Import, 'vagrant/action/vm/import'
|
21
|
-
autoload :MatchMACAddress, 'vagrant/action/vm/match_mac_address'
|
22
|
-
autoload :Modify, 'vagrant/action/vm/modify'
|
23
|
-
autoload :Network, 'vagrant/action/vm/network'
|
24
|
-
autoload :NFS, 'vagrant/action/vm/nfs'
|
25
|
-
autoload :Package, 'vagrant/action/vm/package'
|
26
|
-
autoload :PackageVagrantfile, 'vagrant/action/vm/package_vagrantfile'
|
27
|
-
autoload :Provision, 'vagrant/action/vm/provision'
|
28
|
-
autoload :ProvisionerCleanup, 'vagrant/action/vm/provisioner_cleanup'
|
29
|
-
autoload :Resume, 'vagrant/action/vm/resume'
|
30
|
-
autoload :ShareFolders, 'vagrant/action/vm/share_folders'
|
31
|
-
autoload :Suspend, 'vagrant/action/vm/suspend'
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
@@ -1,28 +0,0 @@
|
|
1
|
-
module Vagrant
|
2
|
-
class Action
|
3
|
-
module VM
|
4
|
-
# Helper methods for forwarding ports. Requires that the environment
|
5
|
-
# is set to the `@env` instance variable.
|
6
|
-
module ForwardPortsHelpers
|
7
|
-
# Returns an array of used ports. This method is implemented
|
8
|
-
# differently depending on the VirtualBox version, but the
|
9
|
-
# behavior is the same.
|
10
|
-
#
|
11
|
-
# @return [Array<String>]
|
12
|
-
def used_ports
|
13
|
-
result = VirtualBox::VM.all.collect do |vm|
|
14
|
-
if vm.accessible? && vm.running? && vm.uuid != @env["vm"].uuid
|
15
|
-
vm.network_adapters.collect do |na|
|
16
|
-
na.nat_driver.forwarded_ports.collect do |fp|
|
17
|
-
fp.hostport.to_i
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
result.flatten.uniq
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
@@ -1,37 +0,0 @@
|
|
1
|
-
module Vagrant
|
2
|
-
class Action
|
3
|
-
module VM
|
4
|
-
# This class allows other actions on the virtual machine object
|
5
|
-
# to be consolidated under a single write lock. This vastly speeds
|
6
|
-
# up modification of virtual machines. This should be used whereever
|
7
|
-
# possible when dealing with virtual machine modifications.
|
8
|
-
class Modify
|
9
|
-
include Util::StackedProcRunner
|
10
|
-
|
11
|
-
def initialize(app, env)
|
12
|
-
@app = app
|
13
|
-
|
14
|
-
# Initialize the proc_stack, which should already be empty
|
15
|
-
# but just making sure here.
|
16
|
-
proc_stack.clear
|
17
|
-
|
18
|
-
# Create the lambda in the environment which is to be called
|
19
|
-
# to add new procs to the modification sequence.
|
20
|
-
env["vm.modify"] = lambda do |*procs|
|
21
|
-
procs.each { |p| push_proc(&p) }
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
def call(env)
|
26
|
-
# Run the procs we have saved up, save the machine, and reload
|
27
|
-
# to verify we get the new settings
|
28
|
-
run_procs!(env["vm"].vm)
|
29
|
-
env["vm"].vm.save
|
30
|
-
env["vm"].reload!
|
31
|
-
|
32
|
-
@app.call(env)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
@@ -1,107 +0,0 @@
|
|
1
|
-
require 'thor'
|
2
|
-
require 'thor/actions'
|
3
|
-
|
4
|
-
module Vagrant
|
5
|
-
module Command
|
6
|
-
# A {GroupBase} is the superclass which should be used if you're
|
7
|
-
# creating a CLI command which has subcommands such as `vagrant box`,
|
8
|
-
# which has subcommands such as `add`, `remove`, `list`. If you're
|
9
|
-
# creating a simple command which has no subcommands, such as `vagrant up`,
|
10
|
-
# then use {Base} instead.
|
11
|
-
#
|
12
|
-
# Unlike {Base}, where all public methods are executed, in a {GroupBase},
|
13
|
-
# each public method defines a separate task which can be invoked. The best
|
14
|
-
# way to get examples of how to create a {GroupBase} command is to look
|
15
|
-
# at the built-in commands, such as {BoxCommand}.
|
16
|
-
#
|
17
|
-
# # Defining a New Command
|
18
|
-
#
|
19
|
-
# To define a new command with subcommands, create a new class which inherits
|
20
|
-
# from this class, then call {register} to register the command. That's it! When
|
21
|
-
# the command is invoked, the method matching the subcommand is invoked. An
|
22
|
-
# example is shown below:
|
23
|
-
#
|
24
|
-
# class SayCommand < Vagrant::Command::GroupBase
|
25
|
-
# register "say", "Say hello or goodbye"
|
26
|
-
#
|
27
|
-
# desc "hello", "say hello"
|
28
|
-
# def hello
|
29
|
-
# env.ui.info "Hello"
|
30
|
-
# end
|
31
|
-
#
|
32
|
-
# desc "goodbye", "say goodbye"
|
33
|
-
# def goodbye
|
34
|
-
# env.ui.info "Goodbye"
|
35
|
-
# end
|
36
|
-
# end
|
37
|
-
#
|
38
|
-
# In this case, the above class is invokable via `vagrant say hello` or
|
39
|
-
# `vagrant say goodbye`. To give it a try yourself, just copy and paste
|
40
|
-
# the above into a Vagrantfile somewhere, and run `vagrant` from within
|
41
|
-
# that directory. You should see the new command!
|
42
|
-
#
|
43
|
-
# Also notice that in the above, each task follows a `desc` call. This
|
44
|
-
# call is used to provide usage and description for each task, and is
|
45
|
-
# required.
|
46
|
-
#
|
47
|
-
# ## Defining Command-line Options
|
48
|
-
#
|
49
|
-
# ### Arguments
|
50
|
-
#
|
51
|
-
# To define arguments to your commands, such as `vagrant say hello mitchell`,
|
52
|
-
# then you simply define them as arguments to the method implementing the
|
53
|
-
# task. An example is shown below (only the method, to keep things brief):
|
54
|
-
#
|
55
|
-
# def hello(name)
|
56
|
-
# env.ui.info "Hello, #{name}"
|
57
|
-
# end
|
58
|
-
#
|
59
|
-
# Then, if `vagrant say hello mitchell` was called, then the output would
|
60
|
-
# be "Hello, mitchell"
|
61
|
-
#
|
62
|
-
# ### Switches or Other Options
|
63
|
-
#
|
64
|
-
# TODO
|
65
|
-
class GroupBase < Thor
|
66
|
-
include Thor::Actions
|
67
|
-
include Helpers
|
68
|
-
|
69
|
-
attr_reader :env
|
70
|
-
|
71
|
-
# Register the command with the main Vagrant CLI under the given
|
72
|
-
# usage. The usage will be used for accessing it from the CLI,
|
73
|
-
# so if you give it a usage of `lamp [subcommand]`, then the command
|
74
|
-
# to invoke this will be `vagrant lamp` (with a subcommand).
|
75
|
-
#
|
76
|
-
# The description is used when a listing of the commands is given
|
77
|
-
# and is meant to be a brief (one sentence) description of what this
|
78
|
-
# command does.
|
79
|
-
#
|
80
|
-
# Some additional options may be passed in as the last parameter:
|
81
|
-
#
|
82
|
-
# * `:alias` - If given as an array or string, these will be aliases
|
83
|
-
# for the same command. For example, `vagrant version` is also
|
84
|
-
# `vagrant --version` and `vagrant -v`
|
85
|
-
#
|
86
|
-
# @param [String] usage
|
87
|
-
# @param [String] description
|
88
|
-
# @param [Hash] opts
|
89
|
-
def self.register(usage, description, opts=nil)
|
90
|
-
@_name = Base.extract_name_from_usage(usage)
|
91
|
-
CLI.register(self, @_name, usage, description, opts)
|
92
|
-
end
|
93
|
-
|
94
|
-
def initialize(*args)
|
95
|
-
super
|
96
|
-
initialize_environment(*args)
|
97
|
-
end
|
98
|
-
|
99
|
-
protected
|
100
|
-
|
101
|
-
# Override the basename to include the subcommand name.
|
102
|
-
def self.basename
|
103
|
-
"#{super} #{@_name}"
|
104
|
-
end
|
105
|
-
end
|
106
|
-
end
|
107
|
-
end
|
@@ -1,33 +0,0 @@
|
|
1
|
-
module Vagrant
|
2
|
-
module Command
|
3
|
-
module Helpers
|
4
|
-
# Initializes the environment by pulling the environment out of
|
5
|
-
# the configuration hash and sets up the UI if necessary.
|
6
|
-
def initialize_environment(args, options, config)
|
7
|
-
raise Errors::CLIMissingEnvironment if !config[:env]
|
8
|
-
@env = config[:env]
|
9
|
-
end
|
10
|
-
|
11
|
-
# This returns an array of {VM} objects depending on the arguments
|
12
|
-
# given to the command.
|
13
|
-
def target_vms(name=nil)
|
14
|
-
raise Errors::NoEnvironmentError if !env.root_path
|
15
|
-
|
16
|
-
name ||= self.name rescue nil
|
17
|
-
|
18
|
-
@target_vms ||= begin
|
19
|
-
if env.multivm?
|
20
|
-
return env.vms_ordered if !name
|
21
|
-
vm = env.vms[name.to_sym]
|
22
|
-
raise Errors::VMNotFoundError, :name => name if !vm
|
23
|
-
else
|
24
|
-
raise Errors::MultiVMEnvironmentRequired if name
|
25
|
-
vm = env.vms.values.first
|
26
|
-
end
|
27
|
-
|
28
|
-
[vm]
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
@@ -1,14 +0,0 @@
|
|
1
|
-
module Vagrant
|
2
|
-
module Command
|
3
|
-
# Same as {Base} except adds the `name` argument for you. This superclass
|
4
|
-
# is useful if you're creating a command which should be able to target
|
5
|
-
# a specific VM in a multi-VM environment. For example, in a multi-VM
|
6
|
-
# environment, `vagrant up` "ups" all defined VMs, but you can specify a
|
7
|
-
# name such as `vagrant up web` to target only a specific VM. That name
|
8
|
-
# argument is from {NamedBase}. Of course, you can always add it manually
|
9
|
-
# yourself, as well.
|
10
|
-
class NamedBase < Base
|
11
|
-
argument :name, :type => :string, :optional => true
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
@@ -1,45 +0,0 @@
|
|
1
|
-
require 'fileutils'
|
2
|
-
|
3
|
-
module Vagrant
|
4
|
-
module Command
|
5
|
-
class UpgradeTo060Command < Base
|
6
|
-
register "upgrade_to_060", "Upgrade pre-0.6.0 environment to 0.6.0", :hide => true
|
7
|
-
|
8
|
-
def execute
|
9
|
-
@env.ui.warn I18n.t("vagrant.commands.upgrade_to_060.info"), :prefix => false
|
10
|
-
@env.ui.warn "", :prefix => false
|
11
|
-
if !@env.ui.yes? I18n.t("vagrant.commands.upgrade_to_060.ask"), :prefix => false, :color => :yellow
|
12
|
-
@env.ui.info I18n.t("vagrant.commands.upgrade_to_060.quit"), :prefix => false
|
13
|
-
return
|
14
|
-
end
|
15
|
-
|
16
|
-
local_data = @env.local_data
|
17
|
-
if !local_data.empty?
|
18
|
-
if local_data[:active]
|
19
|
-
@env.ui.confirm I18n.t("vagrant.commands.upgrade_to_060.already_done"), :prefix => false
|
20
|
-
return
|
21
|
-
end
|
22
|
-
|
23
|
-
# Backup the previous file
|
24
|
-
@env.ui.info I18n.t("vagrant.commands.upgrade_to_060.backing_up"), :prefix => false
|
25
|
-
FileUtils.cp(local_data.file_path, "#{local_data.file_path}.bak-#{Time.now.to_i}")
|
26
|
-
|
27
|
-
# Gather the previously set virtual machines into a single
|
28
|
-
# active hash
|
29
|
-
active = local_data.inject({}) do |acc, data|
|
30
|
-
key, uuid = data
|
31
|
-
acc[key.to_sym] = uuid
|
32
|
-
acc
|
33
|
-
end
|
34
|
-
|
35
|
-
# Set the active hash to the active list and save it
|
36
|
-
local_data.clear
|
37
|
-
local_data[:active] = active
|
38
|
-
local_data.commit
|
39
|
-
end
|
40
|
-
|
41
|
-
@env.ui.confirm I18n.t("vagrant.commands.upgrade_to_060.complete"), :prefix => false
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
@@ -1,13 +0,0 @@
|
|
1
|
-
module Vagrant
|
2
|
-
module Command
|
3
|
-
class VersionCommand < Base
|
4
|
-
register "version", "Prints the Vagrant version information", :alias => %w(-v --version)
|
5
|
-
|
6
|
-
def version
|
7
|
-
env.ui.info(I18n.t("vagrant.commands.version.output",
|
8
|
-
:version => Vagrant::VERSION),
|
9
|
-
:prefix => false)
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
data/lib/vagrant/ssh/session.rb
DELETED
@@ -1,136 +0,0 @@
|
|
1
|
-
module Vagrant
|
2
|
-
class SSH
|
3
|
-
# A helper class which wraps around `Net::SSH::Connection::Session`
|
4
|
-
# in order to provide basic command error checking while still
|
5
|
-
# providing access to the actual session object.
|
6
|
-
class Session
|
7
|
-
include Util::Retryable
|
8
|
-
|
9
|
-
attr_reader :session
|
10
|
-
attr_reader :env
|
11
|
-
|
12
|
-
def initialize(session, env)
|
13
|
-
@session = session
|
14
|
-
@env = env
|
15
|
-
end
|
16
|
-
|
17
|
-
# Executes a given command and simply returns true/false if the
|
18
|
-
# command succeeded or not.
|
19
|
-
def test?(command)
|
20
|
-
exec!(command) do |ch, type, data|
|
21
|
-
return true if type == :exit_status && data == 0
|
22
|
-
end
|
23
|
-
|
24
|
-
false
|
25
|
-
end
|
26
|
-
|
27
|
-
# Executes a given command on the SSH session using `sudo` and
|
28
|
-
# blocks until the command completes. This takes the same parameters
|
29
|
-
# as {#exec!}. The only difference is that the command can be an
|
30
|
-
# array of commands, which will be placed into the same script.
|
31
|
-
#
|
32
|
-
# This is different than just calling {#exec!} with `sudo`, since
|
33
|
-
# this command is tailor-made to be compliant with older versions
|
34
|
-
# of `sudo`.
|
35
|
-
def sudo!(commands, options=nil, &block)
|
36
|
-
channel = session.open_channel do |ch|
|
37
|
-
ch.exec("sudo -H #{env.config.ssh.shell} -l") do |ch2, success|
|
38
|
-
# Set the terminal
|
39
|
-
ch2.send_data "export TERM=vt100\n"
|
40
|
-
|
41
|
-
# Output each command as if they were entered on the command line
|
42
|
-
[commands].flatten.each do |command|
|
43
|
-
ch2.send_data "#{command}\n"
|
44
|
-
end
|
45
|
-
|
46
|
-
# Remember to exit or we'll hang!
|
47
|
-
ch2.send_data "exit\n"
|
48
|
-
|
49
|
-
# Setup the callbacks with our options so we get all the
|
50
|
-
# stdout/stderr and error checking goodies
|
51
|
-
setup_channel_callbacks(ch2, commands, options, block)
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
channel.wait
|
56
|
-
channel[:result]
|
57
|
-
end
|
58
|
-
|
59
|
-
# Executes a given command on the SSH session and blocks until
|
60
|
-
# the command completes. This is an almost line for line copy of
|
61
|
-
# the actual `exec!` implementation, except that this
|
62
|
-
# implementation also reports `:exit_status` to the block if given.
|
63
|
-
def exec!(commands, options=nil, &block)
|
64
|
-
retryable(:tries => env.config.ssh.max_tries, :on => [IOError, Net::SSH::Disconnect], :sleep => 1.0) do
|
65
|
-
metach = session.open_channel do |ch|
|
66
|
-
ch.exec("#{env.config.ssh.shell} -l") do |ch2, success|
|
67
|
-
# Set the terminal
|
68
|
-
ch2.send_data "export TERM=vt100\n"
|
69
|
-
|
70
|
-
# Output the commands as if they were entered on the command line
|
71
|
-
[commands].flatten.each do |command|
|
72
|
-
ch2.send_data "#{command}\n"
|
73
|
-
end
|
74
|
-
|
75
|
-
# Remember to exit
|
76
|
-
ch2.send_data "exit\n"
|
77
|
-
|
78
|
-
# Setup the callbacks
|
79
|
-
setup_channel_callbacks(ch2, commands, options, block)
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|
83
|
-
metach.wait
|
84
|
-
metach[:result]
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
# Sets up the channel callbacks to properly check exit statuses and
|
89
|
-
# callback on stdout/stderr.
|
90
|
-
def setup_channel_callbacks(channel, command, options, block)
|
91
|
-
options = { :error_check => true }.merge(options || {})
|
92
|
-
|
93
|
-
block ||= Proc.new do |ch, type, data|
|
94
|
-
check_exit_status(data, command, options, ch[:result]) if type == :exit_status && options[:error_check]
|
95
|
-
|
96
|
-
ch[:result] ||= ""
|
97
|
-
ch[:result] << data if [:stdout, :stderr].include?(type)
|
98
|
-
end
|
99
|
-
|
100
|
-
# Output stdout data to the block
|
101
|
-
channel.on_data do |ch2, data|
|
102
|
-
# This clears the screen, we want to filter it out.
|
103
|
-
data.gsub!("\e[H", "")
|
104
|
-
|
105
|
-
block.call(ch2, :stdout, data)
|
106
|
-
end
|
107
|
-
|
108
|
-
# Output stderr data to the block
|
109
|
-
channel.on_extended_data do |ch2, type, data|
|
110
|
-
block.call(ch2, :stderr, data)
|
111
|
-
end
|
112
|
-
|
113
|
-
# Output exit status information to the block
|
114
|
-
channel.on_request("exit-status") do |ch2, data|
|
115
|
-
block.call(ch2, :exit_status, data.read_long)
|
116
|
-
end
|
117
|
-
end
|
118
|
-
|
119
|
-
# Checks for an erroroneous exit status and raises an exception
|
120
|
-
# if so.
|
121
|
-
def check_exit_status(exit_status, commands, options=nil, output=nil)
|
122
|
-
if exit_status != 0
|
123
|
-
output ||= '[no output]'
|
124
|
-
options = {
|
125
|
-
:_error_class => Errors::VagrantError,
|
126
|
-
:_key => :ssh_bad_exit_status,
|
127
|
-
:command => [commands].flatten.join("\n"),
|
128
|
-
:output => output
|
129
|
-
}.merge(options || {})
|
130
|
-
|
131
|
-
raise options[:_error_class], options
|
132
|
-
end
|
133
|
-
end
|
134
|
-
end
|
135
|
-
end
|
136
|
-
end
|