如何从puppet运行shell脚本?

我需要安装由curl http://npmjs.org/install.sh | sh完成的npm 对于使用puppet ,我是一个新手,我对这个应该怎么做有点困惑。

我很清楚创build一个调用exec目标的package {}条目,但是当我从源代码安装npm时,这并不会削减它。

我显然不想在每次我的puppet拉动的时候都build立npm ,所以我需要去检查它是否被安装,所以仅仅做一个exec {}也是不够的。

我能做什么?

就像是

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

应该做的伎俩。

不过,我强烈build议不要这样做,因为它会使您的安装过程依赖于其他许多事情的正常工作,并且会在您的文件系统中删除未知的文件,这些文件在哪里(甚至在我们开始谈论安全隐患之前自动运行不可信和不可validation的代码)。 为您的操作系统制作本地软件包,将其放置在本地仓库中,然后使用软件包资源进行安装,会更好。

Womble说,我将把所有关于打包和通过本地资料库的包pipe理工具进行安装的东西都列为“第二”。 根据平台的不同,也可能有可靠的第三方存储库,您可以使用。

关于Womble的回答,一个小小的挑逗: 木偶风格指南build议使用单引号,除非需要双引号进行可变插值。 在Womble显示的代码中,没有variables,所以所有的“应该是”。

请注意,许多puppet文档还没有更新,以反映这个build议,所以你会看到双引号在很多地方甚至在官方文档。 风格指南和傀儡皮棉都反映了当前推荐的最佳做法,并且希望最终可以修复文档。