带有 vagrant 后处理器的打包程序“找不到 ovf 文件”

Posted

技术标签:

【中文标题】带有 vagrant 后处理器的打包程序“找不到 ovf 文件”【英文标题】:Packer with vagrant post-processor "ovf file couldn't be found" 【发布时间】: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 【参考方案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 花时间添加到这个几个月前的帖子。

【讨论】:

以上是关于带有 vagrant 后处理器的打包程序“找不到 ovf 文件”的主要内容,如果未能解决你的问题,请参考以下文章

用pyinstaller打包出现找不到指定的模块?

IDEA使用Maven工具打包带有外部jar包时出错 - 提示程序包不存在和找不到符号

vue打包后图片找不到情况

vb6打包后运行提示找不到dll文件

pyinstaller打包资源文件及包含eyed3模块时提示找不到libmagic处理

java 代码里用了File类,打包后不能运行,报找不到文件的异常,该怎么解决?