如何从 Puppet 运行 Shell 脚本?

如何从 Puppet 运行 Shell 脚本?

我需要安装npm,这是由完成的,curl http://npmjs.org/install.sh | sh并且是新使用的puppet,我对如何完成有点困惑。

我很清楚创建一个package {}调用exec目标的条目,但是当我npm从源代码安装时,这行不通。

我显然不想npm每次puppet拉动时都进行构建,因此我需要以某种方式来检查它是否已安装,因此仅仅exec {}单独进行构建也是不够的。

我能做些什么?

答案1

就像是

exec { "install npm":
    command => "/usr/bin/curl http://npmjs.org/install.sh | sh",
    creates => "/some/directory/somewhere"
}

应该可以奏效。

然而,我会强烈建议不要这样做,因为这会使您的安装过程依赖于许多其他正常运行的东西,并将未跟踪的文件丢弃到文件系统中谁知道的什么地方(这甚至是在我们开始讨论自动运行不受信任和无法验证的代码的安全隐患之前)。您最好为您的操作系统制作一个本机包,将其放在本地存储库中,然后使用包资源进行安装。

答案2

我“赞同” Womble 所说的关于通过本地存储库中的包管理工具进行打包和安装的一切。根据平台的不同,可能还有可靠的第三方存储库可供您使用。

关于 Womble 的回答,有一点需要挑剔:木偶风格指南建议使用单引号,除非需要双引号来进行变量插值。在 Womble 展示的代码中,没有变量,因此所有的“都应该改为 '”。

请注意,许多 Puppet 文档尚未更新以反映此建议,因此即使在官方文档中,您也会在很多地方看到双引号。样式指南和puppet-lint两者都反映了当前推荐的最佳实践,并且希望最终能够修复文档。

相关内容