我有一个 S3 存储桶现存的VMware 虚拟机镜像(OVA 格式),我想让它们与 Vagrant 兼容。但是,我对 Vagrant 镜像的打包结构有点困惑。
似乎有两个单独的metadata.json
文件需要考虑:
- 文件
metadata.json
内部的.box
- 列出了不同提供商的
metadata.json
所有文件.box
Vagrant 文档讨论了盒子文件格式列出了 的简单示例metadata.json
。有意义的是,您需要一个metadata.json
文件作为所有版本/提供程序组合的索引,如下所示:
{
"name": "hashicorp/bionic64",
"description": "This box contains Ubuntu 18.04 LTS 64-bit.",
"versions": [
{
"version": "0.1.0",
"providers": [
{
"name": "virtualbox",
"url": "http://example.com/bionic64_010_virtualbox.box",
"checksum_type": "sha1",
"checksum": "foo"
}
]
}
]
}
这将是上面的 #2。但是.box
文件本身呢?需要做什么才能将 OVA(或任何磁盘映像)制作成.box
可在 Vagrant 中使用的文件?
答案1
我实际上是通过运行测试packer
构建来弄清楚这一点的,以查看它将 VMware 构建转换为 Vagrant 框的具体操作。结果发现,这些.box
文件只是压缩的 tarball。运行tar -xzf <some-box>.box
将显示内容。
$ tar -xvzf mybox.box
x Vagrantfile
x box.ovf
x metadata.json
x mybox.vmdk
box.ovf
和文件mybox.vmdk
取自原始 OVA 图像。该metadata.json
文件的内容只是 JSON {"provider":"virtualbox"}
。我不确定该Vagrantfile
文件是否需要,但它有以下内容:
# The contents below were provided by the Packer Vagrant post-processor
Vagrant.configure("2") do |config|
config.vm.base_mac = "000000000000" # Original MAC address removed
end
# The contents below (if any) are custom contents provided by the
# Packer template during image build.
因此,要执行此票中提到的操作,只需将这些文件压缩为一个.box
文件。