带有 vagrant post-处理器 "ovf file couldn't be found" 的打包机

Packer with vagrant post-processor "ovf file couldn't be found"

我是打包机的新手。我听说您可以添加一个 vagrant post 处理器来获得一个简单的 VM 来测试您的新图像。基于示例等,我认为下面的代码可以工作。但是,我收到此错误。

* Post-processor failed: ovf file couldn't be found

这是我的包装机 config/code。

source "digitalocean" "test" {
  image         = "ubuntu-20-10-x64"
  region        = "nyc1"
  size          = "s-1vcpu-1gb"
  snapshot_name = "me-image-{{isotime \"2006-01-02T15:04\"}}"

  snapshot_regions = [
    "nyc1", "sgp1", "lon1", "nyc3", "ams3", "fra1", "tor1", "sfo2", "blr1",
    "sfo3"
  ]
  tags         = ["delete"]
  ssh_username = "root"
}

# a build block invokes sources and runs provisioning steps on them.
build {
  sources = ["source.digitalocean.test"]

  provisioner "file" {
    source      = "jump_host"
    destination = "/tmp"
  }

  post-processor "vagrant" {
    keep_input_artifact = true
    provider_override   = "virtualbox"
    output = "out.box"
  }
}

我的打包器版本是 1.6.6
我的 vagrant 版本是 2.2.10

有同样(大概)的问题 - 通过 bruteforce/chance

找到了答案

所以我和你在同一条船上,但我设法找到了解决方案的提示here

警告:我正在使用导出的 .vmdk,因此这可能不是您的解决方案,因为您正在寻找获取它的方法直接来自数字海洋?

提示

build {
  sources = ["source.null.autogenerated_1"]

  post-processor "shell-local" {
    inline = ["echo Doing stuff..."]
  }
  post-processors {
    post-processor "vagrant" {
-->   include              = ["image.iso"]
      output               = "proxycore_{{.Provider}}.box"
      vagrantfile_template = "vagrantfile.tpl"
    }
    post-processor "vagrant-cloud" {
      access_token = "${var.cloud_token}"
      box_tag      = "hashicorp/precise64"
      version      = "${local.version}"
    }
  }
}

这没有在 Vagrant Post-Processor 页面上列出,但在 Vagrant Cloud Post-Processor 上。我只是决定试试运气,结果成功了。

工作示例

source "null" "example" {
  communicator = "none"
}


build {
  sources = ["source.null.example"]

  post-processor "artifice" {
    files               = ["example-disk001.vmdk", "example.ovf"]
    keep_input_artifact = true
  }

  post-processor "vagrant" {
    include             = ["example-disk001.vmdk", "example.ovf"]
    keep_input_artifact = true
    provider_override   = "virtualbox"
  }
}

Tl;dr 这不可能

我想让 packer 做的是为 digitalocean 构建一些东西,然后给我一份副本,这样我就可以测试它,而无需从 digitalocean 购买虚拟机,也不需要互联网。这是不可能的,经过深思熟虑后,我明白了为什么。

Digitalocean 不只是下载 Ubuntu 20 ISO 并将其扔到他们的服务器上。他们配置和更改映像,以便在其硬件上对其进行优化。期望他们的特殊图像 运行 在某些标准 VM 运行 上运行在消费者硬件上是不现实的。另外,我不确定是否有办法从 DO 下载快照。

但在尝试这样做的过程中,我有点错过了 vagrant 的全部要点。如果我正在测试 digitalocean 图像,我将始终需要连接并为 digitalocean 付费。 Vagrant 旨在让我轻松地做到这一点,而不必每次都点击界面。所以我什至不应该尝试在我的家用电脑上安装它。

PS:非常感谢 @RedGrin-Grumble 抽出宝贵的时间来添加这个 post.