用puppet函数获取随机密码

时间:2014-06-12 12:37:12

标签: ruby puppet

我有一个允许我生成随机密码的功能。我的功能在没有木偶大师的情况下运作良好。当我尝试使用母版时,在调用函数时会出现错误:

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 个答案:

答案 0 :(得分:0)

目前还不清楚为什么这适用于puppet apply(如果这是你的暗示),但错误很可能是打字问题。

尝试

length = args[0].to_i

答案 1 :(得分:0)

据我所知,对于这种情况,我使用puppet generate()函数创建随机密码并将其存储在主服务器上的持久数据存储中。

例如,SQLITE数据库或其他东西。这样,如果密码不存在,则会随机生成密码,如果密码已经存在,则使用相同的密码。

始终管理资源非常重要,这样如果在受管节点上更改了密码,Puppet就会意识到这一点,将其更改为您正在管理的值,并报告它已执行此操作如此。