【问题标题】:Packer with vagrant post-processor "ovf file couldn't be found"带有 vagrant 后处理器的打包程序“找不到 ovf 文件”
【发布时间】:2021-05-13 17:33:39
【问题描述】:

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

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

这是我的打包程序配置/代码。

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
我的流浪版本是 2.2.10

【问题讨论】:

  • 似乎您可以删除 provider_override = "virtualbox" 部分,Packer 将创建一个具有 aws 提供程序的框,而不是您必须为 aws 提供程序创建一个插件,这可能会起作用。 Vagrant 文件必须包含: Vagrant.configure("2") do |config| config.vm.provider :aws 做 |aws| aws.ami = "ami-7747d01e" end end

标签: vagrant virtualbox packer


【解决方案1】:

有相同的(ish)问题 - 通过蛮力/机会找到答案

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

警告:我正在使用导出的 .vmdk,所以这可能不是您的解决方案,因为您正在寻找一种直接从数字海洋中获取它的方法? p>

提示

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"
  }
}

【讨论】:

    【解决方案2】:

    Tl;dr 这是不可能的

    我希望打包者做的是为 digitalocean 构建一些东西,然后给我一份副本,这样我就可以测试它,而无需从 digitalocean 购买虚拟机,也无需互联网。这是不可能的,经过一番思考,这是有道理的。

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

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

    PS:非常感谢您 @RedGrin-Grumble 花时间添加到这个几个月前的帖子。

    【讨论】:

      猜你喜欢
      • 2015-03-13
      • 2016-01-09
      • 2020-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-26
      • 1970-01-01
      相关资源
      最近更新 更多