有没有办法将参数传递给木偶资源只有在它被设置的情况下?例如,假设我有一个创建新用户的清单,我可能也可能不想手动设置uid和gid。我能想到的最佳方式是:
class example (
$uid = undef,
$gid = undef,
$username = 'default'
) {
user { $username:
ensure => present,
# etc
}
if $uid != undef {
user { "uid-${username}":
name => $username,
uid => $uid,
require => User[$username]
}
}
if $gid != undef {
user { "gid-${username}":
name => $username,
gid => $gid,
require => User[$username]
}
}
}
但是,这只是为了确定是否发送uid和/或gid。还有更好的方法吗?
答案 0 :(得分:2)
我认为由于多个声明,您的示例将无法编译,因为name
资源上的user
正在检查唯一性。话虽如此,我认为有几种方法可以让它稍微好一些。
第一种方式涉及属性修改:
...
user { $username:
ensure => present,
# etc
}
if $uid != undef {
User[$username] { uid => $uid }
}
if $gid != undef {
User[$username] { gid => $gid }
}
第二个涉及从哈希设置属性:
class example (
Hash $id = {},
String $username = 'default'
) {
user { $username:
ensure => present,
* => $id,
# etc
}
}
然后在via声明中传递其他参数:
class example { 'foo':
username => 'bar',
id => { uid => 1000, gid => 1000 }
}
或使用类似于:
的自动Hiera查找example::id:
uid: 1000
gid: 1000
请注意,在任何情况下(声明或Hiera)未指定id
仍会导致user
资源的正确和预期行为,但uid
或gid
未被更改
您可以找到https://docs.puppet.com/puppet/latest/reference/lang_resources_advanced.html中记录的两种方法,您甚至可以从该文档中找出另外一种方法。