怎么保证没有实现的用户不存在于那个puppet节点里呢?

怎么保证没有实现的用户不存在于那个puppet节点里呢?

我们将所有用户声明为虚拟资源。例如:

@user { 'belmin':
    uid => 2001
    comment => 'Belmin Fernandez',
    groups => ['sysadmins'],
}

有时我们暂时realize将用户视为某个节点:

node web1 {
    realize User['belmin']
    (...)
}

我正在研究如何确保未在节点中实现的用户不存在于该服务器上。首先想到的方法是realize删除临时文件时执行以下操作:

node web1 {
    User <| title == 'belmin' |> {
       ensure => absent,
    }
}

但是,在删除临时文件时,很容易有人意外忽略这一点realize。还有其他更优雅的建议吗?

答案1

Puppet 有办法删除所有未明确管理的用户。这包括未实现的虚拟用户。

resources {
    'user':
        purge => true
}

这会忽略 UID 低于 500(对于 Debian 和某些 BSD,则为 1000)的系统用户。通常这样做是正确的。不用说,应谨慎使用。

答案2

在写这个问题的时候,想到在课堂上做这样的事情:

class our_users {
    user { 'belmin':
        ensure  => absent,
        uid     => 2001
        comment => 'Belmin Fernandez',
        groups  => ['sysadmins'],
    }
}

然后,在节点中:

node web1 {
    include our_users
    User <| title == 'belmin'|> {
        ensure => present,
    }
}

node web2 {
    include our_users
}

然后,任何没有实现用户并ensure覆盖属性的节点都将确保该用户为absent

我不完全确定这是否会起作用,但在测试时我会把它放在那里,以防我没有发现的弱点/问题。

相关内容