Packer构建amazon-ebs镜像调用Puppet提示command not found如何解决
根因分析
报错sudo: puppet: command not found的核心原因是:你所使用的Ubuntu 16.04官方AWS基础镜像默认未预装Puppet运行环境,而Packer的puppet-masterless预置器仅负责上传Puppet配置清单、调用Puppet命令执行,不会自动在目标构建实例上安装Puppet组件。
解决方法
- 调整Packer模板的
provisioners配置,在puppet-masterless步骤前新增shell预置器,提前安装Puppet,修改后的完整模板如下:
{ "builders": [ { "ami_name": "packer-linux-aws-demo-{{timestamp}}", "instance_type": "t3.micro", "region": "us-west-2", "source_ami_filter": { "filters": { "virtualization-type": "hvm", "name": "ubuntu/images/*ubuntu-xenial-16.04-amd64-server-*", "root-device-type": "ebs" }, "most_recent": true }, "ssh_username": "ubuntu", "type": "amazon-ebs" } ], "provisioners": [ { "type": "shell", "inline": [ "sudo apt-get update -y", "sudo apt-get install -y puppet" ] }, { "type": "puppet-masterless", "manifest_file": "file.pp" } ] }
- 调整完成后重新执行
packer build <模板文件名>命令即可正常完成构建。
备选排查方案
如果安装Puppet后仍然提示命令不存在,是因为sudo执行环境的PATH变量未包含Puppet的安装路径,可在puppet-masterless配置中显式指定Puppet二进制文件路径:
{ "type": "puppet-masterless", "manifest_file": "file.pp", "puppet_path": "/usr/bin/puppet" }
内容的提问来源于stack exchange,提问作者user14494913
相关产品推荐
相关产品推荐

