Packer文件配置器不会复制

时间:2018-03-09 15:23:58

标签: amazon-web-services build devops provisioning packer

我在我的打包器模板json上配置了文件配置器:

"provisioners": [{
        "type": "file",
        "source": "packer/api-clients/database.yml",
        "destination": "/tmp/api-clients-database.yml"
    },

当我尝试在Amazon AWS上构建AMI时,下面的代码不起作用,它始终说:

Bad source 'packer/api-clients/database.yml': stat packer/api-clients/database.yml: no such file or directory

如果我这样做:

"source": "api-clients/database.yml",

它就像一个魅力。但是为了组织起见,我必须将我的所有Packer文件放在app文件夹中的packer文件夹中。

我做错了什么?

我的app文件夹是这样的:

api_v1
├── template.json
├── app
│   ├── bin
│   ├── config
│   ├── packer
│   │   ├── api-clients
│   │   │   └── database.yml
│   ├── lib
│   ├── log
│   ├── ... 

它似乎与Packer上的相对路径/绝对路径有关,但我无法弄清楚出了什么问题......

提前致谢,

2 个答案:

答案 0 :(得分:1)

由于路径不以/开头,因此它是相对路径。执行packer build时相对于当前工作目录。

使用来源packer/api-clients/database.yml,您必须从app目录运行打包程序,即

packer build ../template.json

使用来源api-clients/database.yml,您必须从packer目录运行打包程序,即

packer build ../../template.json

有关详细信息,请参阅Packer documentation - File provisioner: source

答案 1 :(得分:0)

这就像您猜到的一样。

如果您已经移动了api-clients,则不会说从哪个文件夹中调用打包程序以及调用命令是什么,或者何时使用“ source”:api-clients / database.yml。文件夹,或与该位置的打包程序一起使用。

如果您的文件夹结构总是这样,那么为避免混淆(如果您对源使用完整路径),无论您从何处运行压缩程序,它都将始终有效

例如      /api_v1/app/packer/api-clients/database.yml

如果必须使用相对路径,请确保源路径始终与运行打包程序的文件夹相对。