我正在testing一个木偶init.pp文件(在Windows上),看起来像这样:
class myclass { package { 'java': ensure => installed, provider => 'msi', source => 'S:\puppet-repo\jdk1.6.0_31.msi', install_options => { 'INSTALLDIR' => 'C:\tools\java' }, } }
然后我的site.pp文件如下所示:
node default { include myclass }
我创build了一个只调用myclass模块的tests / init.pp文件:
class { 'myclass': }
我可以运行tests / init.pp文件,它可以正确安装java。 我想知道是否有一种方法来从命令行运行myclass模块而不创build单独的tests / init.pp文件。 或者,也许我可以将myclass中的package语句移动到它自己的.pp文件中,并将其包含在init.pp中,然后我可以运行该单独的.pp文件。 什么是更正确的方法来做到这一点?
首先,如果你还不知道的话,validation语法的一个技巧是:
puppet parser validate my_file.pp
现在,你如何进行现场testing一个新的类可以根据你的部署而有所不同,但我可以告诉你我是怎么做的,也许这对你的情况是有意义的。 或者,也许ServerFault上的每个人都会告诉我自己是多么的错误。
在任何给定的环境中,我都有一组使用inheritance的节点声明:
node base_production_environment { include ssh include ntp include whatever_else } node /prod-app\d+\.mycompany\.com/ inherits base_production_environment { }
现在,当我编写一个新类时,我想先在一个特定的系统上testing它,然后再将它推出,所以我添加了一个更具体的(通过主机名)节点声明,以便它将覆盖较不具体的(通过正则expression式)声明如下所示:
node 'prod-app7.mycompany.com' inherits base_production_environment { include my_new_class }
我简化了这一点,以突出使用特定的节点声明来检查新的类。 我们还使用环境将更改转移到不太关键的环境,然后再将其投入生产等。
所以我只是重新读你的问题,我想你可能使用推模块目录的方法,而不是使用木偶大师。 如果这是真的,你可以用类似的东西来包含一个类来进行testing:
puppet apply --modulepath=C:\puppet-modules\ -e "include my_class"
但是,我不知道这是否是Windows下puppet的正确目录语法。