Мы определяем пользователей как таковых:
user { 'belmin':
ensure => present,
uid => 308,
comment => 'Belmin Fernandez',
managehome => true,
password => '$6$NrtZpXEauUqjdRh0$vE9oJwbNTSWVCGrlDe4KHXFB0KXY7hszSas3v0DZvhUej4SIb/WLfaCy.lmSU7Hh8AAvAbPuDRai2p1X9mDcM0',
}
Я хочу определить тип, который заглянет /etc/shadow
локальный для марионеточного ведущего устройства и, если пользователь там, используют тот хэш пароля вместо этого. Что-то как:
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
но не уверенный, как использовать это для обращения к этому, так как мне будет нужна еще некоторая обработка текста.
Примечание: Я знаю, что централизованная аутентификация была бы самой мудрой авеню, но это не непосредственная опция в данный момент.
Нашел способ сделать это на форуме Puppet с помощью функции generate :
Для этого вы можете использовать функцию 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)
Надеюсь, это поможет кому-то другому. Похоже на функцию, которая может быть полезна во многих случаях использования.