可选择将参数传递给人偶资源
optionally passing a parameter to puppet resource
有没有一种方法可以将参数仅在已设置的情况下传递给人偶资源?例如,假设我有一个创建新用户的清单,我可能想要也可能不想手动设置 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 and/or gid 有很多代码。有没有更好的方法?
我认为您的示例会由于多个声明而无法编译,因为正在检查 user
资源上的 name
的唯一性。话虽这么说,但我认为有几种方法可以使它稍微好一点。
第一种方式涉及修改属性:
...
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
}
}
然后通过声明传递附加参数:
class example { 'foo':
username => 'bar',
id => { uid => 1000, gid => 1000 }
}
或使用类似于以下内容的自动 Hiera 查找:
example::id:
uid: 1000
gid: 1000
请注意,在任何情况下(声明或 Hiera)不指定 id
仍会导致 user
资源在没有 uid
或 [=19= 的情况下的正确和预期行为] 改变了。
您可以在 https://docs.puppet.com/puppet/latest/reference/lang_resources_advanced.html 中找到这两种方法的文档,您甚至可以从该文档中找到另一种或两种方法。
有没有一种方法可以将参数仅在已设置的情况下传递给人偶资源?例如,假设我有一个创建新用户的清单,我可能想要也可能不想手动设置 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 and/or gid 有很多代码。有没有更好的方法?
我认为您的示例会由于多个声明而无法编译,因为正在检查 user
资源上的 name
的唯一性。话虽这么说,但我认为有几种方法可以使它稍微好一点。
第一种方式涉及修改属性:
...
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
}
}
然后通过声明传递附加参数:
class example { 'foo':
username => 'bar',
id => { uid => 1000, gid => 1000 }
}
或使用类似于以下内容的自动 Hiera 查找:
example::id:
uid: 1000
gid: 1000
请注意,在任何情况下(声明或 Hiera)不指定 id
仍会导致 user
资源在没有 uid
或 [=19= 的情况下的正确和预期行为] 改变了。
您可以在 https://docs.puppet.com/puppet/latest/reference/lang_resources_advanced.html 中找到这两种方法的文档,您甚至可以从该文档中找到另一种或两种方法。