Назад | Перейти на главную страницу

Как проверить, существует ли пользователь в марионетке?

Я уже нашел несколько примеров, где я могу проверить, имеет ли переменная определенное значение

if $var == 'somevalue' {
    ...
}

если что-то определено

if defined(Package['somepackage']) {
    ...
}

но как я могу проверить, существует ли пользователь, и потерпеть неудачу, если его нет. Было бы достаточно знать, как использовать результат скрипта или теста оболочки, потому что /usr/bin/id -u ${name} >/dev/null 2>&1 это все, что мне нужно, даже проверка, существует ли каталог пользователя, будет в порядке.

file и exec не принимайте onlyif параметр, иначе это не было бы проблемой

Почему бы просто не добавить фактический факт и не проверить его?

с моей настройкой на марионетке 3 я бы поместил следующее в modules/facts/lib/facter/user_exists_blah.rb

require 'facter'
Facter.add(:user_exists_blah) do
  setcode do
    name = "blah"
    Facter::Util::Resolution.exec("/usr/bin/id -u #{name} 2>/dev/null")
  end
end

А затем используйте его как

if $::user_exists_blah {
}

Пустая строка оценивается как ложь, поэтому вы можете просто использовать ее как логическое