Packer 构建 amazon-ebs:sudo:puppet:找不到命令

问题描述

在构建打包程序时,我收到了 puppet 调用错误

==> amazon-ebs: Provisioning with Puppet...
    amazon-ebs: Creating Puppet staging directory...
    amazon-ebs: Creating directory: /tmp/packer-puppet-masterless
    amazon-ebs: Uploading manifests...
    amazon-ebs: Creating directory: /tmp/packer-puppet-masterless/manifests
    amazon-ebs: Uploading manifest file from: file.pp
    amazon-ebs: Running Puppet: cd /tmp/packer-puppet-masterless && FACTER_packer_build_name='amazon-ebs' FACTER_packer_builder_type='amazon-ebs' sudo -E puppet apply --detailed-exitcodes /tmp/packer-puppet-masterless/manifests/file.pp
==> amazon-ebs: sudo: puppet: command not found
==> amazon-ebs: Prvisioning step had errors: Running the cleanup provisioner,if present...

我的环境是:$ packer -version 1.7.2

Packer Template : 
{
    "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": "puppet-masterless","manifest_file": "file.pp"
        }
    ]
}

=========
file.pp
$ cat file.pp
file { "/var/tmp/testfile":
        ensure => "present",owner => "root",group => "root",mode => "664",content => "This is a test file created using puppet.
                    Puppet is really cool",}

解决方法

就像 Matt 的评论所说,Puppet 不会为您安装在图像上,您需要自己安装。如果您使用的是 Ubuntu,则可以使用 inline-shell 配置程序来执行类似的操作

"provisioners": [
    {
        "type": "shell","inline": [
            "apt-get update","apt-get install puppet -y",},{

在我的情况下,Puppet 二进制文件不在我的路径上(因为我的构建器类型是 docker),但是您可以使用 pupet-masterless 配置器的 puppet_bin_dir 属性来指定它的位置>

    },{
        "type": "puppet-masterless","manifest_file": "site.pp","puppet_bin_dir": "/opt/puppetlabs/bin"
    }
]