我正在测试一个 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' },
}
}
Run Code Online (Sandbox Code Playgroud)
然后我的 site.pp 文件看起来像:
node default {
include myclass
}
Run Code Online (Sandbox Code Playgroud)
我创建了一个只调用 myclass 模块的 tests/init.pp 文件:
class { 'myclass': }
Run Code Online (Sandbox Code Playgroud)
我可以运行 tests/init.pp 文件,它确实正确安装了 java。我想知道是否有一种方法可以从命令行运行 myclass 模块而无需创建单独的 tests/init.pp 文件。或者,也许我可以将packagemyclass 中的语句移动到它自己的 .pp 文件中,并将其包含在 init.pp 中,然后如果我愿意,我可以运行该单独的 .pp 文件。什么是更正确的方法来做到这一点?
首先,如果您还不知道验证语法的技巧:
puppet parser validate my_file.pp
Run Code Online (Sandbox Code Playgroud)
现在,您如何对新类进行现场测试会因您的部署而异,但我可以告诉您我是如何做的,也许这对您的情况有意义。或者也许 ServerFault 上的每个人都会告诉我我错了。
在任何给定的环境中,我都有一组使用继承的节点声明:
node base_production_environment {
include ssh
include ntp
include whatever_else
}
node /prod-app\d+\.mycompany\.com/ inherits base_production_environment { }
Run Code Online (Sandbox Code Playgroud)
现在,当我编写一个新类时,我想在推出之前先在特定系统上测试它,所以我添加了一个更具体的(通过主机名)节点声明,以便它会覆盖不太具体的(通过正则表达式)声明,像这样:
node 'prod-app7.mycompany.com' inherits base_production_environment {
include my_new_class
}
Run Code Online (Sandbox Code Playgroud)
我简化了很多,以突出使用特定的节点声明来抽查新类。我们还使用环境将更改推出到不太重要的环境,然后再将它们推出到生产环境等。
所以我只是重新阅读了您的问题,我突然想到您可能正在使用推送模块目录方法,而不是使用 puppetmaster。如果这是真的,您可以包含一个用于测试目的的类,例如:
puppet apply --modulepath=C:\puppet-modules\ -e "include my_class"
Run Code Online (Sandbox Code Playgroud)
不过,我不知道这是否是 Windows 下 puppet 的正确目录语法。
| 归档时间: |
|
| 查看次数: |
2606 次 |
| 最近记录: |