Packer使用Puppet进行配置时卡住了

4

我很新于Packer/Vagrant,Puppet等领域。我正在尝试使用Packer和Puppet构建我的第一个虚拟机。

我已经成功构建了一个VirtualBox,并添加了一个Shell脚本配置项来安装Puppet。我通过SSH登录到虚拟机来验证它是否工作正常,同时Puppet也已经安装好了。

接下来,我添加了另外一个无Master的Puppet配置项,代码如下:

# java dependency
package { 'openjdk-7-jdk' :
    ensure => present
}

当我运行packer时,它到了这一步就卡住了:
==> virtualbox-iso: Provisioning with Puppet...
virtualbox-iso: Creating Puppet staging directory...
virtualbox-iso: Uploading manifests...
virtualbox-iso: Running Puppet:   sudo -E puppet apply --verbose --modulepath='' --detailed-exitcodes /tmp/packer-puppet-masterless/manifests/ubuntu.pp

任何建议都会很有帮助。甚至可以提供调试方法以了解幕后发生的事情。


你可以尝试的一件事是在Puppet上启用--debug标志。我不熟悉Packer,但似乎你必须使用puppet provisionerexecute_command可选参数。 - cassianoleal
另一个建议是将 package 资源注释掉,以便 Puppet 使用空清单执行。如果可以正常工作,您可以取消注释该资源并尝试在虚拟机内运行 puppet apply -- 我会从 Packer 的输出中复制并粘贴命令。这可能会给您一些线索。 - cassianoleal
好主意。我会尝试一下。我想要按照Puppet的本意来使用它,所以我会尝试进行调试。 - kane
如果sudo未配置允许覆盖env_reset选项,则sudo上的-E选项可能会使您困扰。 - rojs
#kane,你找到解决方案了吗?我也遇到了同样的问题。即使是空的清单文件,它也会停止运行。在虚拟机内部运行“puppet apply”命令可以正常工作并返回退出代码0。 - Saimon
不,我还没有解决它。我已经回到只使用独立的Vagrant了。 - kane
1个回答

3

我遇到了同样的问题,将 execute_command 更改为接收 vagrant 用户密码的方式解决了问题。

"override": {
    "virtualbox-iso": {
    "execute_command": "echo 'vagrant' | {{.FacterVars}}{{if .Sudo}} sudo -S -E {{end}}puppet apply  --verbose --modulepath='{{.ModulePath}}' {{if ne .HieraConfigPath \"\"}}--hiera_config='{{.HieraConfigPath}}' {{end}} {{if ne .ManifestDir \"\"}}--manifestdir='{{.ManifestDir}}' {{end}} --detailed-exitcodes {{.ManifestFile}}"
     }
 }

整个代码块如下所示:
{
        "type": "puppet-masterless",
        "manifest_file": "../puppet/manifests/base.pp",
        "module_paths": [
            "../puppet/modules/"
        ],
        "override": {
            "virtualbox-iso": {
                "execute_command": "echo 'vagrant' | {{.FacterVars}}{{if .Sudo}} sudo -S -E {{end}}puppet apply  --verbose --modulepath='{{.ModulePath}}' {{if ne .HieraConfigPath \"\"}}--hiera_config='{{.HieraConfigPath}}' {{end}} {{if ne .ManifestDir \"\"}}--manifestdir='{{.ManifestDir}}' {{end}} --detailed-exitcodes {{.ManifestFile}}"
            }
        }
    }

来源:在这里找到了一个示例 https://github.com/AdoptOpenJDK/openjdk-virtual-images/blob/master/packer/openjdk-development/openjdk-development.json

该示例是关于OpenJDK的虚拟镜像,用于开发和构建Java应用程序。您可以通过访问上述链接来查看示例代码和配置文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接