vagrant-unbundled 2.2.6.2 → 2.2.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.hashibot.hcl +12 -0
- data/CHANGELOG.md +37 -2
- data/contrib/bash/completion.sh +13 -1
- data/lib/vagrant/action.rb +1 -0
- data/lib/vagrant/action/builtin/box_add.rb +9 -3
- data/lib/vagrant/action/builtin/box_check_outdated.rb +12 -15
- data/lib/vagrant/action/builtin/disk.rb +39 -0
- data/lib/vagrant/action/builtin/mixin_provisioners.rb +19 -1
- data/lib/vagrant/action/builtin/ssh_run.rb +21 -3
- data/lib/vagrant/action/warden.rb +9 -0
- data/lib/vagrant/box_metadata.rb +17 -3
- data/lib/vagrant/errors.rb +4 -0
- data/lib/vagrant/ui.rb +8 -3
- data/lib/vagrant/util/file_checksum.rb +6 -2
- data/lib/vagrant/util/is_port_open.rb +1 -2
- data/lib/vagrant/util/numeric.rb +61 -0
- data/plugins/commands/box/command/outdated.rb +14 -2
- data/plugins/commands/cloud/publish.rb +1 -1
- data/plugins/commands/snapshot/command/save.rb +13 -8
- data/plugins/guests/alpine/cap/rsync.rb +1 -1
- data/plugins/guests/alpine/plugin.rb +16 -0
- data/plugins/guests/darwin/cap/mount_vmware_shared_folder.rb +86 -13
- data/plugins/guests/linux/cap/reboot.rb +42 -0
- data/plugins/guests/linux/plugin.rb +10 -0
- data/plugins/guests/redhat/cap/nfs_client.rb +2 -2
- data/plugins/guests/suse/cap/change_host_name.rb +2 -2
- data/plugins/hosts/darwin/cap/nfs.rb +11 -0
- data/plugins/hosts/darwin/plugin.rb +5 -0
- data/plugins/hosts/linux/cap/nfs.rb +20 -2
- data/plugins/kernel_v2/config/disk.rb +168 -0
- data/plugins/kernel_v2/config/vm.rb +82 -1
- data/plugins/kernel_v2/config/vm_provisioner.rb +4 -1
- data/plugins/providers/docker/driver.rb +22 -10
- data/plugins/providers/docker/errors.rb +4 -0
- data/plugins/providers/docker/executor/local.rb +7 -1
- data/plugins/providers/virtualbox/action.rb +1 -0
- data/plugins/providers/virtualbox/action/clean_machine_folder.rb +10 -1
- data/plugins/providers/virtualbox/driver/meta.rb +1 -0
- data/plugins/providers/virtualbox/driver/version_6_1.rb +16 -0
- data/plugins/providers/virtualbox/plugin.rb +1 -0
- data/plugins/provisioners/ansible/cap/guest/arch/ansible_install.rb +20 -3
- data/plugins/provisioners/ansible/cap/guest/debian/ansible_install.rb +4 -5
- data/plugins/provisioners/ansible/cap/guest/fedora/ansible_install.rb +2 -2
- data/plugins/provisioners/ansible/cap/guest/freebsd/ansible_install.rb +2 -2
- data/plugins/provisioners/ansible/cap/guest/pip/pip.rb +8 -4
- data/plugins/provisioners/ansible/cap/guest/redhat/ansible_install.rb +2 -2
- data/plugins/provisioners/ansible/cap/guest/suse/ansible_install.rb +2 -1
- data/plugins/provisioners/ansible/cap/guest/ubuntu/ansible_install.rb +3 -3
- data/templates/commands/init/Vagrantfile.erb +1 -1
- data/templates/locales/en.yml +32 -2
- data/templates/locales/providers_docker.yml +2 -0
- data/templates/nfs/exports_darwin.erb +7 -0
- data/vagrant.gemspec +3 -4
- data/version.txt +1 -1
- metadata +7273 -773
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5c1283ff34586e6a2607abd40cd3e31715639e0700fe9430c1efa7b8087e2473
|
4
|
+
data.tar.gz: 0ad8e0b9d1b606802db43d803b28d9e3d168243168e3092c5ba37bcab7571bde
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 323983d2f71ed25fd578143f77f912621ba5631bdd7d7c68409c249831ed925507e47d91f2b4403fd9a54503ac84c3d086535c87e122fcdeb3fe97e2dcc0679b
|
7
|
+
data.tar.gz: dfe2cb8904ad0bf9ebd1391afac0df82064cbd760c3db372e9aa6d103986c7c64e18b0efe729da3dbe21b3ed0be8106da5f5d5d65723a8386ebb0d569e8af68a
|
data/.hashibot.hcl
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
poll "closed_issue_locker" "locker" {
|
2
|
+
schedule = "0 50 1 * * *"
|
3
|
+
closed_for = "720h" # 30 days
|
4
|
+
max_issues = 500
|
5
|
+
sleep_between_issues = "5s"
|
6
|
+
|
7
|
+
message = <<-EOF
|
8
|
+
I'm going to lock this issue because it has been closed for _30 days_ ⏳. This helps our maintainers find and focus on the active issues.
|
9
|
+
|
10
|
+
If you have found a problem that seems similar to this, please open a new issue and complete the issue template so we can capture all the details necessary to investigate further.
|
11
|
+
EOF
|
12
|
+
}
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,38 @@
|
|
1
|
+
## 2.2.7 (January 27, 2020)
|
2
|
+
|
3
|
+
IMPROVEMENTS:
|
4
|
+
|
5
|
+
- guest/opensuse: Check for basename hostname prior to setting hostname [GH-11170]
|
6
|
+
- host/linux: Check for modinfo in /sbin if it's not on PATH [GH-11178]
|
7
|
+
- core: Show guest name in hostname error message [GH-11175]
|
8
|
+
- provisioners/shell: Linux guests now support `reboot` option [GH-11194]
|
9
|
+
- darwin/nfs: Put each NFS export on its own line [GH-11216]
|
10
|
+
- contrib/bash: Add more completion flags to up command [GH-11223]
|
11
|
+
- provider/virtualbox: Add VirtualBox provider support for version 6.1.x [GH-11250]
|
12
|
+
- box/outdated: Allow to force check for box updates and ignore cached check [GH-11231]
|
13
|
+
- guest/alpine: Update apk cache when installing rsync [GH-11220]
|
14
|
+
- provider/virtualbox: Improve error message when machine folder is inaccessible [GH-11239]
|
15
|
+
- provisioner/ansible_local: Add pip install method for arch guests [GH-11265]
|
16
|
+
- communicators/winssh: Use Windows shell for `vagrant ssh -c` [GH-11258]
|
17
|
+
|
18
|
+
BUG FIXES:
|
19
|
+
|
20
|
+
- command/snapshot/save: Fix regression that prevented snapshot of all guests in environment [GH-11152]
|
21
|
+
- core: Update UI to properly retain newlines when adding prefix [GH-11126]
|
22
|
+
- core: Check if box update is available locally [GH-11188]
|
23
|
+
- core: Ensure Vagrant::Errors are loaded in file_checksum util [GH-11183]
|
24
|
+
- cloud/publish: Improve argument handling for missing arguments to command [GH-11184]
|
25
|
+
- core: Get latest version for current provider during outdated check [GH-11192]
|
26
|
+
- linux/nfs: avoid adding extra newlines to /etc/exports [GH-11201]
|
27
|
+
- guest/darwin: Fix VMware synced folders on APFS [GH-11267]
|
28
|
+
- guest/redhat: Ensure `nfs-server` is restarted when installing nfs client [GH-11212]
|
29
|
+
- core: Do not validate checksums if options are empty string [GH-11211]
|
30
|
+
- provider/docker: Enhance docker build method to match against buildkit output [GH-11205]
|
31
|
+
- provisioner/ansible_local: Don't prompt for input when installing Ansible on Ubuntu and Debian [GH-11191]
|
32
|
+
- provisioner/ansible_local: Ensure all guest caps accept all passed in arguments [GH-11265]
|
33
|
+
- host/windows: Fix regression that prevented port collisions from being detected [GH-11244]
|
34
|
+
- core/provisioner: Set top level provisioner name if set in a provisioner config [GH-11295]
|
35
|
+
|
1
36
|
## 2.2.6 (October 14, 2019)
|
2
37
|
|
3
38
|
FEATURES:
|
@@ -13,7 +48,7 @@ IMPROVEMENTS:
|
|
13
48
|
- guest/alt: Improve handling for using network tools when setting hostname [GH-11000]
|
14
49
|
- guest/suse: Add ipv6 network config templates for SUSE based distributions [GH-11013]
|
15
50
|
- guest/windows: Retry on connection timeout errors for the reboot capability [GH-11093]
|
16
|
-
- host/bsd: Use host resolve path capability to modify local paths if
|
51
|
+
- host/bsd: Use host resolve path capability to modify local paths if required [GH-11108]
|
17
52
|
- host/darwin: Add host resolve path capability to provide real paths for firmlinks [GH-11108]
|
18
53
|
- provisioners/chef: Update pkg install flags for chef on FreeBSD guests [GH-11075]
|
19
54
|
- provider/hyperv: Improve error message when VMMS is not running [GH-10978]
|
@@ -509,7 +544,7 @@ BUG FIXES:
|
|
509
544
|
- core: Rescue more exceptions when checking if port is open [GH-8517]
|
510
545
|
- guests/solaris11: Inherit from Solaris guest and keep solaris11 specific methods [GH-9034]
|
511
546
|
- guests/windows: Split out cygwin path helper for msys2/cygwin paths and ensure cygpath exists [GH-8972]
|
512
|
-
- guests/windows: Specify expected shell when executing on guest (fixes
|
547
|
+
- guests/windows: Specify expected shell when executing on guest (fixes einssh communicator usage) [GH-9012]
|
513
548
|
- guests/windows: Include WinSSH Communicator when using insert_public_key [GH-9105]
|
514
549
|
- hosts/windows: Check for vagrant.exe when validating versions within WSL [GH-9107, GH-8962]
|
515
550
|
- providers/docker: Isolate windows check within executor to handle running through VM [GH-8921]
|
data/contrib/bash/completion.sh
CHANGED
@@ -75,7 +75,19 @@ _vagrant() {
|
|
75
75
|
then
|
76
76
|
local vm_list=$(find "${vagrant_state_file}/machines" -mindepth 1 -maxdepth 1 -type d -exec basename {} \;)
|
77
77
|
fi
|
78
|
-
local up_commands="
|
78
|
+
local up_commands="\
|
79
|
+
--provision \
|
80
|
+
--no-provision \
|
81
|
+
--provision-with \
|
82
|
+
--destroy-on-error \
|
83
|
+
--no-destroy-on-error \
|
84
|
+
--parallel \
|
85
|
+
--no-parallel
|
86
|
+
--provider \
|
87
|
+
--install-provider \
|
88
|
+
--no-install-provider \
|
89
|
+
-h \
|
90
|
+
--help"
|
79
91
|
COMPREPLY=($(compgen -W "${up_commands} ${vm_list}" -- ${cur}))
|
80
92
|
return 0
|
81
93
|
;;
|
data/lib/vagrant/action.rb
CHANGED
@@ -15,6 +15,7 @@ module Vagrant
|
|
15
15
|
autoload :Confirm, "vagrant/action/builtin/confirm"
|
16
16
|
autoload :ConfigValidate, "vagrant/action/builtin/config_validate"
|
17
17
|
autoload :DestroyConfirm, "vagrant/action/builtin/destroy_confirm"
|
18
|
+
autoload :Disk, "vagrant/action/builtin/disk"
|
18
19
|
autoload :EnvSet, "vagrant/action/builtin/env_set"
|
19
20
|
autoload :GracefulHalt, "vagrant/action/builtin/graceful_halt"
|
20
21
|
autoload :HandleBox, "vagrant/action/builtin/handle_box"
|
@@ -348,9 +348,15 @@ module Vagrant
|
|
348
348
|
end
|
349
349
|
|
350
350
|
if opts[:checksum] && opts[:checksum_type]
|
351
|
-
|
352
|
-
|
353
|
-
|
351
|
+
if opts[:checksum].to_s.strip.empty?
|
352
|
+
@logger.warn("Given checksum is empty, cannot validate checksum for box")
|
353
|
+
elsif opts[:checksum_type].to_s.strip.empty?
|
354
|
+
@logger.warn("Given checksum type is empty, cannot validate checksum for box")
|
355
|
+
else
|
356
|
+
env[:ui].detail(I18n.t("vagrant.actions.box.add.checksumming"))
|
357
|
+
validate_checksum(
|
358
|
+
opts[:checksum_type], opts[:checksum], box_url)
|
359
|
+
end
|
354
360
|
end
|
355
361
|
|
356
362
|
# Add the box!
|
@@ -40,7 +40,7 @@ module Vagrant
|
|
40
40
|
# Have download options specified in the environment override
|
41
41
|
# options specified for the machine.
|
42
42
|
download_options = {
|
43
|
-
automatic_check:
|
43
|
+
automatic_check: !env[:box_outdated_force],
|
44
44
|
ca_cert: env[:ca_cert] || machine.config.vm.box_download_ca_cert,
|
45
45
|
ca_path: env[:ca_path] || machine.config.vm.box_download_ca_path,
|
46
46
|
client_cert: env[:client_cert] ||
|
@@ -70,15 +70,23 @@ module Vagrant
|
|
70
70
|
message: e.message))
|
71
71
|
end
|
72
72
|
env[:box_outdated] = update != nil
|
73
|
-
|
73
|
+
local_update = check_outdated_local(env)
|
74
|
+
if update && (local_update.nil? || (local_update.version < update[1].version))
|
74
75
|
env[:ui].warn(I18n.t(
|
75
76
|
"vagrant.box_outdated_single",
|
76
77
|
name: update[0].name,
|
77
78
|
provider: box.provider,
|
78
79
|
current: box.version,
|
79
80
|
latest: update[1].version))
|
81
|
+
elsif local_update
|
82
|
+
env[:ui].warn(I18n.t(
|
83
|
+
"vagrant.box_outdated_local",
|
84
|
+
name: local_update.name,
|
85
|
+
old: box.version,
|
86
|
+
new: local_update.version))
|
87
|
+
env[:box_outdated] = true
|
80
88
|
else
|
81
|
-
|
89
|
+
env[:box_outdated] = false
|
82
90
|
end
|
83
91
|
|
84
92
|
@app.call(env)
|
@@ -93,19 +101,8 @@ module Vagrant
|
|
93
101
|
version ||= ""
|
94
102
|
version += "> #{machine.box.version}"
|
95
103
|
|
96
|
-
|
104
|
+
env[:box_collection].find(
|
97
105
|
machine.box.name, machine.box.provider, version)
|
98
|
-
if box
|
99
|
-
env[:ui].warn(I18n.t(
|
100
|
-
"vagrant.box_outdated_local",
|
101
|
-
name: box.name,
|
102
|
-
old: machine.box.version,
|
103
|
-
new: box.version))
|
104
|
-
env[:box_outdated] = true
|
105
|
-
return
|
106
|
-
end
|
107
|
-
|
108
|
-
env[:box_outdated] = false
|
109
106
|
end
|
110
107
|
end
|
111
108
|
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module Vagrant
|
2
|
+
module Action
|
3
|
+
module Builtin
|
4
|
+
class Disk
|
5
|
+
def initialize(app, env)
|
6
|
+
@app = app
|
7
|
+
@logger = Log4r::Logger.new("vagrant::action::builtin::disk")
|
8
|
+
end
|
9
|
+
|
10
|
+
def call(env)
|
11
|
+
machine = env[:machine]
|
12
|
+
defined_disks = get_disks(machine, env)
|
13
|
+
|
14
|
+
# Call into providers machine implementation for disk management
|
15
|
+
if !defined_disks.empty?
|
16
|
+
if machine.provider.capability?(:configure_disks)
|
17
|
+
machine.provider.capability(:configure_disks, defined_disks)
|
18
|
+
else
|
19
|
+
env[:ui].warn(I18n.t("vagrant.actions.disk.provider_unsupported",
|
20
|
+
provider: machine.provider_name))
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
# Continue On
|
25
|
+
@app.call(env)
|
26
|
+
end
|
27
|
+
|
28
|
+
def get_disks(machine, env)
|
29
|
+
return @_disks if @_disks
|
30
|
+
|
31
|
+
@_disks = []
|
32
|
+
@_disks = machine.config.vm.disks
|
33
|
+
|
34
|
+
@_disks
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -25,9 +25,27 @@ module Vagrant
|
|
25
25
|
# Store in the type map so that --provision-with works properly
|
26
26
|
@_provisioner_types[result] = provisioner.type
|
27
27
|
|
28
|
+
# Set top level provisioner name to provisioner configs name if top level name not set.
|
29
|
+
# This is mostly for handling the shell provisioner, if a user has set its name like:
|
30
|
+
#
|
31
|
+
# config.vm.provision "shell", name: "my_provisioner"
|
32
|
+
#
|
33
|
+
# Where `name` is a shell config option, not a top level provisioner class option
|
34
|
+
#
|
35
|
+
# Note: `name` is set to a symbol, since it is converted to one via #Config::VM.provision
|
36
|
+
provisioner_name = provisioner.name
|
37
|
+
if !provisioner_name
|
38
|
+
if provisioner.config.respond_to?(:name) &&
|
39
|
+
provisioner.config.name
|
40
|
+
provisioner_name = provisioner.config.name.to_sym
|
41
|
+
end
|
42
|
+
else
|
43
|
+
provisioner_name = provisioner_name.to_sym
|
44
|
+
end
|
45
|
+
|
28
46
|
# Build up the options
|
29
47
|
options = {
|
30
|
-
name:
|
48
|
+
name: provisioner_name,
|
31
49
|
run: provisioner.run,
|
32
50
|
before: provisioner.before,
|
33
51
|
after: provisioner.after,
|
@@ -36,17 +36,35 @@ module Vagrant
|
|
36
36
|
|
37
37
|
# Get the command and wrap it in a login shell
|
38
38
|
command = ShellQuote.escape(env[:ssh_run_command], "'")
|
39
|
-
|
39
|
+
|
40
|
+
if env[:machine].config.vm.communicator == :winssh
|
41
|
+
shell = env[:machine].config.winssh.shell
|
42
|
+
else
|
43
|
+
shell = env[:machine].config.ssh.shell
|
44
|
+
end
|
45
|
+
|
46
|
+
if shell == "cmd"
|
47
|
+
# Add an extra space to the command so cmd.exe quoting works
|
48
|
+
# properly
|
49
|
+
command = "#{shell} /C #{command} "
|
50
|
+
elsif shell == "powershell"
|
51
|
+
command = "$ProgressPreference = \"SilentlyContinue\"; #{command}"
|
52
|
+
command = Base64.strict_encode64(command.encode("UTF-16LE", "UTF-8"))
|
53
|
+
command = "#{shell} -encodedCommand #{command}"
|
54
|
+
else
|
55
|
+
command = "#{shell} -c '#{command}'"
|
56
|
+
end
|
40
57
|
|
41
58
|
# Execute!
|
42
59
|
opts = env[:ssh_opts] || {}
|
43
60
|
opts[:extra_args] ||= []
|
44
61
|
|
45
62
|
# Allow the user to specify a tty or non-tty manually, but if they
|
46
|
-
# don't then we default to a TTY
|
63
|
+
# don't then we default to a TTY unless they are using WinSSH
|
47
64
|
if !opts[:extra_args].include?("-t") &&
|
48
65
|
!opts[:extra_args].include?("-T") &&
|
49
|
-
env[:tty]
|
66
|
+
env[:tty] &&
|
67
|
+
env[:machine].config.vm.communicator != :winssh
|
50
68
|
opts[:extra_args] << "-t"
|
51
69
|
end
|
52
70
|
|
@@ -47,7 +47,16 @@ module Vagrant
|
|
47
47
|
raise Errors::VagrantInterrupt if env[:interrupted]
|
48
48
|
action = @actions.shift
|
49
49
|
@logger.info("Calling IN action: #{action}")
|
50
|
+
|
51
|
+
if !action.is_a?(Proc) && env[:hook]
|
52
|
+
hook_name = action.class.name.split("::").last.
|
53
|
+
gsub(/([a-z])([A-Z])/, '\1_\2').gsub('-', '_').downcase
|
54
|
+
end
|
55
|
+
|
56
|
+
env[:hook].call("before_#{hook_name}".to_sym) if hook_name
|
50
57
|
@stack.unshift(action).first.call(env)
|
58
|
+
env[:hook].call("after_#{hook_name}".to_sym) if hook_name
|
59
|
+
|
51
60
|
raise Errors::VagrantInterrupt if env[:interrupted]
|
52
61
|
@logger.info("Calling OUT action: #{action}")
|
53
62
|
rescue SystemExit
|
data/lib/vagrant/box_metadata.rb
CHANGED
@@ -68,11 +68,25 @@ module Vagrant
|
|
68
68
|
|
69
69
|
# Returns all the versions supported by this metadata. These
|
70
70
|
# versions are sorted so the last element of the list is the
|
71
|
-
# latest version.
|
71
|
+
# latest version. Optionally filter versions by a matching
|
72
|
+
# provider.
|
72
73
|
#
|
73
74
|
# @return[Array<String>]
|
74
|
-
def versions
|
75
|
-
|
75
|
+
def versions(**opts)
|
76
|
+
provider = nil
|
77
|
+
provider = opts[:provider].to_sym if opts[:provider]
|
78
|
+
|
79
|
+
if provider
|
80
|
+
@version_map.select do |version, raw|
|
81
|
+
if raw["providers"]
|
82
|
+
raw["providers"].detect do |p|
|
83
|
+
p["name"].to_sym == provider
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end.keys.sort.map(&:to_s)
|
87
|
+
else
|
88
|
+
@version_map.keys.sort.map(&:to_s)
|
89
|
+
end
|
76
90
|
end
|
77
91
|
|
78
92
|
# Represents a single version within the metadata.
|
data/lib/vagrant/errors.rb
CHANGED
@@ -436,6 +436,10 @@ module Vagrant
|
|
436
436
|
error_key(:machine_action_locked)
|
437
437
|
end
|
438
438
|
|
439
|
+
class MachineFolderNotAccessible < VagrantError
|
440
|
+
error_key(:machine_folder_not_accessible)
|
441
|
+
end
|
442
|
+
|
439
443
|
class MachineGuestNotReady < VagrantError
|
440
444
|
error_key(:machine_guest_not_ready)
|
441
445
|
end
|
data/lib/vagrant/ui.rb
CHANGED
@@ -329,10 +329,15 @@ module Vagrant
|
|
329
329
|
target = opts[:target] if opts.key?(:target)
|
330
330
|
target = "#{target}:" if target != ""
|
331
331
|
|
332
|
-
# Get the lines. The first default is because if the message
|
333
|
-
# is an empty string, then we want to still use the empty string.
|
334
332
|
lines = [message]
|
335
|
-
|
333
|
+
if message != ""
|
334
|
+
lines = [].tap do |l|
|
335
|
+
message.scan(/(.*?)(\n|$)/).each do |m|
|
336
|
+
l << m.first if m.first != "" || (m.first == "" && m.last == "\n")
|
337
|
+
end
|
338
|
+
end
|
339
|
+
lines << "" if message.end_with?("\n")
|
340
|
+
end
|
336
341
|
|
337
342
|
# Otherwise, make sure to prefix every line properly
|
338
343
|
lines.map do |line|
|
@@ -2,6 +2,9 @@
|
|
2
2
|
# passed into FileChecksum. Note that this isn't strictly enforced at
|
3
3
|
# the moment, and this class isn't directly used. It is merely here for
|
4
4
|
# documentation of structure of the class.
|
5
|
+
|
6
|
+
require "vagrant/errors"
|
7
|
+
|
5
8
|
class DigestClass
|
6
9
|
def update(string); end
|
7
10
|
def hexdigest; end
|
@@ -62,8 +65,9 @@ class FileChecksum
|
|
62
65
|
def load_digest(type)
|
63
66
|
digest = CHECKSUM_MAP[type.to_s.to_sym]
|
64
67
|
if digest.nil?
|
65
|
-
raise Errors::BoxChecksumInvalidType,
|
66
|
-
type: type.to_s
|
68
|
+
raise Vagrant::Errors::BoxChecksumInvalidType,
|
69
|
+
type: type.to_s,
|
70
|
+
types: CHECKSUM_MAP.keys.join(', ')
|
67
71
|
end
|
68
72
|
digest
|
69
73
|
end
|
@@ -30,8 +30,7 @@ module Vagrant
|
|
30
30
|
return true
|
31
31
|
end
|
32
32
|
rescue Timeout::Error, Errno::ECONNREFUSED, Errno::EHOSTUNREACH, \
|
33
|
-
Errno::ENETUNREACH, Errno::EACCES, Errno::ENOTCONN
|
34
|
-
Errno::EADDRNOTAVAIL
|
33
|
+
Errno::ENETUNREACH, Errno::EACCES, Errno::ENOTCONN
|
35
34
|
# Any of the above exceptions signal that the port is closed.
|
36
35
|
return false
|
37
36
|
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
require "log4r"
|
2
|
+
|
3
|
+
module Vagrant
|
4
|
+
module Util
|
5
|
+
class Numeric
|
6
|
+
|
7
|
+
# Authors Note: This conversion has been borrowed from the ActiveSupport Numeric class
|
8
|
+
# Conversion helper constants
|
9
|
+
KILOBYTE = 1024
|
10
|
+
MEGABYTE = KILOBYTE * 1024
|
11
|
+
GIGABYTE = MEGABYTE * 1024
|
12
|
+
TERABYTE = GIGABYTE * 1024
|
13
|
+
PETABYTE = TERABYTE * 1024
|
14
|
+
EXABYTE = PETABYTE * 1024
|
15
|
+
|
16
|
+
BYTES_CONVERSION_MAP = {KB: KILOBYTE, MB: MEGABYTE, GB: GIGABYTE, TB: TERABYTE,
|
17
|
+
PB: PETABYTE, EB: EXABYTE}
|
18
|
+
|
19
|
+
# Regex borrowed from the vagrant-disksize config class
|
20
|
+
SHORTHAND_MATCH_REGEX = /^(?<number>[0-9]+)\s?(?<unit>KB|MB|GB|TB)?$/
|
21
|
+
|
22
|
+
class << self
|
23
|
+
LOGGER = Log4r::Logger.new("vagrant::util::numeric")
|
24
|
+
|
25
|
+
# A helper that converts a shortcut string to its bytes representation.
|
26
|
+
# The expected format of `str` is essentially: "<Number>XX"
|
27
|
+
# Where `XX` is shorthand for KB, MB, GB, TB, PB, or EB. For example, 50 megabytes:
|
28
|
+
#
|
29
|
+
# str = "50MB"
|
30
|
+
#
|
31
|
+
# @param [String] - str
|
32
|
+
# @return [Integer,nil] - bytes - returns nil if method fails to convert to bytes
|
33
|
+
def string_to_bytes(str)
|
34
|
+
bytes = nil
|
35
|
+
|
36
|
+
str = str.to_s.strip
|
37
|
+
matches = SHORTHAND_MATCH_REGEX.match(str)
|
38
|
+
if matches
|
39
|
+
number = matches[:number].to_i
|
40
|
+
unit = matches[:unit].to_sym
|
41
|
+
|
42
|
+
if BYTES_CONVERSION_MAP.key?(unit)
|
43
|
+
bytes = number * BYTES_CONVERSION_MAP[unit]
|
44
|
+
else
|
45
|
+
LOGGER.error("An invalid unit or format was given, string_to_bytes cannot convert #{str}")
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
bytes
|
50
|
+
end
|
51
|
+
|
52
|
+
# @private
|
53
|
+
# Reset the cached values for platform. This is not considered a public
|
54
|
+
# API and should only be used for testing.
|
55
|
+
def reset!
|
56
|
+
instance_variables.each(&method(:remove_instance_variable))
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|