2016-11-10 31 views
1

只有设置了参数才能将参数传递给puppet资源吗?例如,假设我有一个创建新用户的清单,并且我可能会或可能不想手动设置uid和gid。我能想到做到最好的办法是这样的:可选地将一个参数传递给puppet资源

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。有没有更好的办法?

回答

1

我想你的例子会因为多次声明而无法编译,因为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的正确和预期行为,而不uidgid改变。

您可以在https://docs.puppet.com/puppet/latest/reference/lang_resources_advanced.html找到记录的两种方法,您甚至可以找出该文档中的另外两个或两个方法。

+0

从哈希设置确实是我在找什么。感谢您的链接! – mounty

相关问题