我在打包模板 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 文件放在应用程序文件夹中的 Packer 文件夹中。
我做错了什么?
我的应用程序文件夹是这样的:
api_v1
├── template.json
├── app
│ ├── bin
│ ├── config
│ ├── packer
│ │ ├── api-clients
│ │ │ └── database.yml
│ ├── lib
│ ├── log
│ ├── ...
它似乎与 Packer 上的相对路径/绝对路径有关,但我无法弄清楚出了什么问题......
提前致谢,
由于路径不是以
/
开头,因此它是相对路径。执行时相对于当前工作目录packer build
。
使用源
packer/api-clients/database.yml
,您必须从app
目录运行打包程序,即
packer build ../template.json
使用源
api-clients/database.yml
,您必须从packer
目录运行打包程序,即
packer build ../../template.json
有关更多信息,请参阅 Packer 文档 - 文件配置器:源。
正如你所猜测的那样,这是一条路径。
如果您移动了 api-clients 文件夹或它与该位置的打包机一起使用。
如果您的文件夹结构始终是这样,那么为了避免混淆,如果您使用源的完整路径,无论您从哪里运行打包程序,它都将始终有效
例如 /api_v1/app/packer/api-clients/database.yml
如果必须使用相对路径,请确保源路径始终与运行打包程序的文件夹相对。
"provisioners": [
{
"type": "file",
"source": "<source_path>",
"destination": "<target_path>",
"pause_before": "30s"
}]