Vagrant 有没有办法导入指定版本的本地框文件?

Vagrant 有没有办法导入指定版本的本地框文件?

我使用的是版本控制的盒子,但没有使用 Vagrant Cloud(我有一个自定义盒子主机)。下载版本控制的盒子效果很好。

但是,当我在本地开发盒子的新版本时,我不希望每次想要升级 Vagrant 中加载的盒子版本时都要经历上传/下载循环。换句话说,我想运行vagrant box add,同时指定较新的版本和本地文件。

vagrant box add似乎有一个选项--box-version,但这是用于限制正在下载的盒子的版本,而不是用于指定正在添加的盒子的版本。无论如何尝试指定 box-version 都会导致:

您指定了带有直接 box 文件路径的 box 版本约束。box 版本约束仅适用于来自 Vagrant Cloud 或自定义 box 主机的 box。请删除版本约束并重试。

但我并不想限制我正在添加;我正在尝试指定。任何形式的 box add 似乎都会将版本设置为 0。有什么方法可以解决这个问题并告诉 Vagrant 我正在添加哪个版本?

答案1

基于此回答,为了给本地盒子指定一个版本,您需要创建一个metadata.json

该文件的最小内容如下:

{
    "name": "USERNAME/BOXNAME",
    "versions": [{
        "version": "X.Y.Z",
        "providers": [{
            "url": "package.box"
        }]
    }]
}

其中 是package.box相对路径metadata.json

此后,您只需运行即可vagrant box add metadata.json添加一个带有版本的新框。

警告:

Vagrant 将metadata.jsonURL 存储在文件中~/.vagrant.d/boxes/FULLBOXNAME/metadata_url。因此,请谨慎使用名称,您不能使用来自不同来源的相同名称。

答案2

导入盒子文件后

cd ~/.vagrant.d/boxes/<用户名>-VAGANTSLASH-<盒子名称>/
mv 0 <指定版本>

答案3

您需要将提供商名称添加为“virtualbox”,例如

"providers": [{
        "name": "virtualbox",
        "url": ...

相关内容