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

时间:2015-07-29 22:13:05

标签: vagrant

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

puphpet/centos65-x64   (virtualbox, 1.2.1)
puphpet/centos65-x64   (virtualbox, 2.0)

vagrant global-status显示包含提供者的目录:

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

但我如何才能看到哪个Vagrant盒子版本在哪个目录中使用?

2 个答案:

答案 0 :(得分:8)

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

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

"d62342a255436211725abe8fd3c313ea": {
    "local_data_path": "/Users/whoever/mymachine/.vagrant",
    "name": "default",
    "provider": "virtualbox",
    "state": "poweroff",
    "vagrantfile_name": null,
    "vagrantfile_path": "/Users/whoever/mymachine",
    "updated_at": null,
    "extra_data": {
        "box": {
            "name": "ubuntu/xenial64",
            "provider": "virtualbox",
            "version": "20170706.0.0"
        }
    }
},

与您的机器相关的盒子信息就在那里。 ubuntu/xenial64提供商版本virtualbox上的20170706.0.0框。

答案 1 :(得分:1)

这是一个旧线程,但是最近我遇到了与原始请求匹配的情况,并且发现了未在此处列出的答案:

vagrant box outdated命令在测试是否有较新版本的盒子时列出了当前盒子的版本号。

需要注意的是,vagrant box outdated命令需要访问Internet才能检查当前版本,并输出该版本。

只有在编写了使用bashjq文件中搜索当前目录的~/.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"
  }
}
$