Получить случайный пароль с функцией кукол

У меня есть функция, которая позволяет мне генерировать случайный пароль. Моя функция работает хорошо без марионетки. Когда я пытался с мастером, появляется ошибка при вызове функции:

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 это осознал, изменил его на значение, которым вы управляете, и сообщил, что он это сделал.

Другие вопросы по тегам