在客户端,

在客户端,

我在 2.7.11-1ubuntu2.3 中尝试了以下操作。并收到以下错误:err: 无法从远程服务器检索目录:服务器上的错误 400:无法在节点 xxxx 上的 /etc/puppet/modules/php5/manifests/init.pp:90 处匹配 $(pecl)。

知道如何运行命令吗?

在客户端,

puppet 代理--测试

在 master 上

    exec { "pecl_memcache" :
            provider => shell,
            command  => "if [ -n "$(pecl install memcache | egrep fail )" ]; then echo y | pecl install memcache-3.0.8; fi",
            logoutput => true,
    }

答案1

您需要转义命令参数中的那些引号和变量;它们由 Puppet 而不是 bash 进行评估。

但是,使用它onlyif来检查输出比依赖 shell 更简洁:

exec { "pecl_memcache" :
        provider  => shell,
        command   => "pecl install memcache-3.0.8",
        unless    => "pecl install memcache | egrep fail",
        logoutput => true,
}

此处的细微差别在于,它unless依赖于 egrep 的退出代码,而 -n 测试仅查找非空字符串。在这种情况下,功能应该相同。

相关内容