vagrant-unbundled 2.2.6.2 → 2.2.7.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.
- 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
|