Tom*_*art 6 configuration-management puppet
在类中定义依赖项时,每个Package
都可以全局定义一次。我有配置层次结构,一些包应该安装在所有机器上(进入默认配置),但其他包应该只安装在某些类别的机器上。当 Puppet 威胁作为重复声明时,我应该如何检查该包是否已经在机器上?
Duplicate declaration: Package[wget] is already declared
Run Code Online (Sandbox Code Playgroud)
我应该使用这样的函数吗?
if defined( Package[$package] ) {
debug("$package already installed")
} else {
package { $package: ensure => $ensure }
}
Run Code Online (Sandbox Code Playgroud)
我希望配置工具默认处理这个问题......我错过了什么吗?
小智 7
您可以使用stdlib 模块中的 ensure_resource() :
$packages = $::osfamily ? {
'Debian' => [ 'fcgiwrap', ],
'RedHat' => [ 'spawn-fcgi', 'git' ],
}
ensure_resource('package', $packages, {'ensure' => 'present'})
Run Code Online (Sandbox Code Playgroud)
所以,如果 git 已经被其他一些类安装了,那将被跳过。您不应该在整个 puppet 配置中只定义一次包。
当您有重复的包时,这是处理它的一种方法。另一种方法是首先通过使用虚拟资源来避免问题:
声明一个虚拟资源
class packages {
@package {
['cryptsetup-bin',
'cryptsetup',
'cifs-utils',
'e2fsprogs',
'libmysql-ruby',
'parted',
'pigz',
'sshfs' ]:
ensure => present,
}
}
Run Code Online (Sandbox Code Playgroud)
实现一个虚拟资源(可以多次实现资源):
include packages
realize Package['pigz']
Run Code Online (Sandbox Code Playgroud)
另一种方法是将重复的代码分离到另一个类中——即“wget”类。
木偶文档:http : //docs.puppetlabs.com/guides/virtual_resources.html
归档时间: |
|
查看次数: |
5711 次 |
最近记录: |