Получить случайный пароль с функцией кукол
У меня есть функция, которая позволяет мне генерировать случайный пароль. Моя функция работает хорошо без марионетки. Когда я пытался с мастером, появляется ошибка при вызове функции:
Error 400 on SERVER: bad value for range
Вот моя функция:
module Puppet::Parser::Functions
newfunction(:get_random_password, :type => :rvalue, :doc => <<-EOS
Returns a random password.
EOS
) do |args|
raise(Puppet::ParseError, "get_random_password(): Wrong number of arguments " +
"given (#{args.size} for 1)") if args.size != 1
specials = ((33..33).to_a + (35..38).to_a + (40..47).to_a + (58..64).to_a + (91..93).to_a + (95..96).to_a + (123..125).to_a).pack('U*').chars.to_a
numbers = (0..9).to_a
alphal = ('a'..'z').to_a
alphau = ('A'..'Z').to_a
length = args[0]
CHARS = (alphal + specials + numbers + alphau)
pwd = CHARS.sort_by { rand }.join[0...length]
return pwd
end
end
Функция вызывается в обоих случаях с $pwd = get_random_password(10)
,
Когда я указал длину непосредственно в функции до 10, например. Пароль хорошо генерируется в режиме мастера.
У вас есть идея, почему я не могу указать значение длины?
2 ответа
Непонятно, почему это работает для puppet apply
(если вы намекаете на это), но ошибка, скорее всего, связана с опечаткой.
Пытаться
length = args[0].to_i
Насколько мне известно, для подобных ситуаций я использую функцию puppet generate(), чтобы создать случайный пароль и сохранить его в постоянном хранилище данных на главном сервере.
Например, база данных SQLITE или что-то еще. Таким образом, пароль генерируется случайным образом, если он не существует, и тот же пароль используется, если он уже существует.
Важно, чтобы ресурс всегда был управляемым, чтобы при изменении пароля на управляемом узле Puppet это осознал, изменил его на значение, которым вы управляете, и сообщил, что он это сделал.