【问题标题】:optionally passing a parameter to puppet resource可选地将参数传递给 puppet 资源
【发布时间】:2016-11-10 14:58:21
【问题描述】:

有没有办法只在设置了参数的情况下将参数传递给 puppet 资源?例如,假设我有一个创建新用户的清单,我可能想也可能不想手动设置 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。有没有更好的办法?

【问题讨论】:

    标签: puppet


    【解决方案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
        }
    }
    

    然后在 via 声明中传递附加参数:

    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 中找到这两种方法,您甚至可以从该文档中找出另一种或两种方法。

    【讨论】:

    • 从哈希中设置正是我想要的。感谢您的链接!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-25
    相关资源
    最近更新 更多