用于现有 VM 映像的 Vagrant / metadata.json 格式

用于现有 VM 映像的 Vagrant / metadata.json 格式

我有一个 S3 存储桶现存的VMware 虚拟机镜像(OVA 格式),我想让它们与 Vagrant 兼容。但是,我对 Vagrant 镜像的打包结构有点困惑。

似乎有两个单独的metadata.json文件需要考虑:

  1. 文件metadata.json内部的.box
  2. 列出了不同提供商的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文件。

相关内容