如何显示特定目录中使用的Vagrant box版本

如何显示特定目录中使用的Vagrant box版本,vagrant,Vagrant,我有多个Vagrant box,希望查看哪个目录下运行的是哪个box的哪个版本。 vagrant box list返回一个全局框列表: puphpet/centos65-x64 (virtualbox, 1.2.1) puphpet/centos65-x64 (virtualbox, 2.0) vagrant全局状态显示包含提供程序的目录: id name provider state directory --------------------------

我有多个Vagrant box,希望查看哪个目录下运行的是哪个box的哪个版本。
vagrant box list
返回一个全局框列表:

puphpet/centos65-x64   (virtualbox, 1.2.1)
puphpet/centos65-x64   (virtualbox, 2.0)
vagrant全局状态
显示包含提供程序的目录:

id       name    provider   state    directory
--------------------------------------------------
a427238  default virtualbox poweroff /path/to/dir1
fa21751  default virtualbox running  /path/to/dir2

但我如何才能看到哪个目录中使用了哪个Vagrant box版本?

可以检索这些数据,但据我所知,这些数据不会通过Vagrant CLI公开。看看Linux或macOS上的
~/.vagrant.d/data/machine index/index
,我假设它类似于Windows上的
C:\Users\where\.vagrant.d\data\machine index

您将获得一些未格式化的JSON,其中包含流浪汉知道的每台机器的详细信息。如果您通过一个漂亮的打印机/美化器运行JSON,那么每台机器都会得到一个:

“d62342a255436211725abe8fd3c313ea”:{
“本地数据路径”:“/Users/where/mymachine/.vagrant”,
“名称”:“默认值”,
“提供商”:“virtualbox”,
“状态”:“断电”,
“文件名”:空,
“vagrantfile_路径”:“/Users/where/mymachine”,
“更新位置”:空,
“额外数据”:{
“盒子”:{
“名称”:“ubuntu/xenial64”,
“提供商”:“virtualbox”,
“版本”:“20170706.0.0”
}
}
},

与您的机器相关的盒子信息就在那里。
virtualbox
提供程序版本
20170706.0.0
上的
ubuntu/xenial64
框是一种旧线程,但我最近遇到了与原始请求相匹配的情况,我发现了一个未在此处列出的答案:

vagrant-box-outleted
命令在测试是否有更新版本的box时,会列出当前的box版本号

需要注意的是,
vagrant box过时的
命令需要访问internet以检查当前版本,它也会输出当前版本

我是在编写了这个
bash
脚本之后才发现这一点的,该脚本使用
jq
~/.vagrant.d/data/machine index/index
文件中搜索当前目录。我不保证这将在您的环境中起作用:

$ cat ~/scripts/vagrant_box_info.sh
#!/bin/bash

CUR_DIR=`pwd`

JQ_CMD='.machines|to_entries|map(select(.value.vagrantfile_path|test("'$CUR_DIR'$")))[].value.extra_data'

cat ~/.vagrant.d/data/machine-index/index | jq "$JQ_CMD"

$ ~/scripts/vagrant_box_info.sh
{
  "box": {
    "name": "geerlingguy/centos7",
    "provider": "virtualbox",
    "version": "1.2.15"
  }
}
$

我不认为vagrant可以这样做,因为这些信息来自vagrant文件,您可以随时更改这些信息,以便您可以使用一个框进行初始化,然后将其更改为使用另一个框运行(如果您升级操作系统或其他东西),您将需要一个脚本来读取每个vagrant文件并获取vm.box信息谢谢Frédéric!下面是我用来帮助确定VM正在使用哪个框的几个脚本:
grep-ir'VM.box'path/to/vms 2>&-
,如果使用VirtualBox,
VBoxManage-list-vms-long | egrep-I”(^Name:\s{8,})|(^Guest OS:\s)
脚本做得不错!尽管如此,它仍然不会告诉你这个盒子的流浪版本。就像
puphpet/centos65-x64(virtualbox,1.2.1)
puphpet/centos65-x64(virtualbox,2.0)
相反,它只是给你一些更通用的东西,比如
Red Hat(64位)
。谢谢,谢谢。可以确认这在Vagrant 2.2.0上仍然有效。