我们对用户的定义如下:
user { 'belmin':
ensure => present,
uid => 308,
comment => 'Belmin Fernandez',
managehome => true,
password => '$6$NrtZpXEauUqjdRh0$vE9oJwbNTSWVCGrlDe4KHXFB0KXY7hszSas3v0DZvhUej4SIb/WLfaCy.lmSU7Hh8AAvAbPuDRai2p1X9mDcM0',
}
我想定义一个类型,它将在本地查找/etc/shadow
Puppet Master,如果用户在那里,则使用该密码哈希。类似于:
define our_user ($user = $title, $uid, $fullname, $default_hash) {
$shadow_hash = get_hash_from_local_shadown_somehow
if $shadow_hash == '' {
$shadow_hash = $default_hash
}
user { $user:
ensure => present,
uid => $uid,
comment => $fullname,
managehome => true,
password => $shadow_hash,
}
}
在这种情况下会怎样get_hash_from_local_shadown_somehow
?我看到文件功能但puppet
不确定如何利用它来解决这个问题,因为我需要更多的文本处理。
注意:我知道集中式身份验证是最明智的途径,但目前这不是一个立即的选择。
答案1
找到了一种方法来做到这一点Puppet 的论坛使用产生功能:
您可以使用 generate() 函数来实现这一点。
你基本上需要创建一个脚本来执行你需要的任何处理,然后$shadow_hash = generate('/path/to/script')。
我编写了一个简单的 Bash 脚本来检索哈希:
#!/bin/bash
SHADOW_FILE='/etc/shadow'
awk -F: "\$1 == \"$@\"" ${SHADOW_FILE} | awk -F: '{print $2}' || echo ''
该generate
函数如下所示:
$shadow_hash = generate('/bin/bash','/usr/local/sbin/extract_shadow_hash', $user)
希望这对其他人有帮助。似乎这是一个在很多用例中都很有用的功能。