手动应用 puppet 类

手动应用 puppet 类

我正在测试一个 puppet 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
}

我创建了一个 tests/init.pp 文件,它只调用 myclass 模块:

class { 'myclass': }

我可以运行 tests/init.pp 文件,它确实正确安装了 java。我想知道是否有一种方法可以从命令行运行 myclass 模块,而无需创建单独的 tests/init.pp 文件。或者我可以将packagemyclass 中的语句移动到它自己的 .pp 文件中,并将其包含在 init.pp 中,然后我可以根据需要运行该单独的 .pp 文件。更正确的方法是什么?

答案1

首先,如果你还不知道的话,这里有一个验证语法的技巧:

puppet parser validate my_file.pp

现在,如何对新类进行抽样测试可能会因部署而异,但我可以告诉您我是如何做的,也许这对您来说很有意义。或者也许 ServerFault 上的每个人都会告诉我我错了。

在任何给定的环境中,我都有一组使用继承的节点声明:

node base_production_environment {
  include ssh
  include ntp
  include whatever_else
}

node /prod-app\d+\.mycompany\.com/ inherits base_production_environment { }

现在,当我编写一个新类时,我想在推出它之前先在特定系统上对其进行测试,因此我添加了一个更具体的(通过主机名)节点声明,以便它将覆盖不太具体的(通过正则表达式)声明,如下所示:

node 'prod-app7.mycompany.com' inherits base_production_environment {
  include my_new_class
}

我对此进行了简化,以强调使用特定节点声明来抽查新类。我们还使用环境在将变更推广到生产环境之前,先将其推广到不太重要的环境中,等等。


所以我重新阅读了你的问题,我发现你可能使用的是推送模块目录方法,而不是使用 Puppetmaster。如果是这样,你可以包含一个用于测试目的的类,如下所示:

puppet apply --modulepath=C:\puppet-modules\ -e "include my_class"

但我不知道这是否是 Windows 下 puppet 的正确目录语法。

答案2

你也可以运行: puppet agent -t --tags你的班级名称

因此就你的情况而言:

puppet agent -t --tags my_new_class

相关内容