【问题标题】:md5 Hash in a puppet custom function木偶自定义函数中的 md5 哈希
【发布时间】:2015-01-13 08:49:22
【问题描述】:

目前我想从一个参数创建一个 md5 哈希。然后我想将哈希写入文件(路径是另一个参数)。

那是自定义函数:

   module Puppet::Parser::Functions
      newfunction(:write_line_to_file) do |args|
    require 'md5'
        filename = args[0]

        str = MD5.new(lookupvar(args[1])).to_s
        File.open(filename, 'a') {|fd| fd.puts str }
      end
    end

以及 puppet manifest 中的调用:

write_line_to_file('/tmp/some_hash', "Hello world!")

我得到的结果是一个文件,内容不是散列而是原始字符串。 (在示例中是 Hello World!)

我知道这个自定义函数没有实际用处。我只是想了解 md5 哈希是如何工作的。

---UPD---

新功能(正常工作):

   require 'digest'
   module Puppet::Parser::Functions
      newfunction(:lxwrite_line_to_file) do |args|
        filename = args[0]

        str = Digest::MD5.hexdigest args[1]
        File.open(filename, 'w') {|fd| fd.puts str }
      end
    end

【问题讨论】:

    标签: ruby md5 puppet


    【解决方案1】:

    您使用的是哪种红宝石?

    在 Ruby 2.0+ 中有一个 Digest 模块 (documentation here) - 为什么不使用它呢?

    您可以使用Digest 中提供的任何哈希,如下所示:

    Digest::MD5.digest '123'
    => " ,\xB9b\xACY\a[\x96K\a\x15-#Kp"
    

    如果您更喜欢十六进制表示,请使用hexdigest

    Digest::MD5.hexdigest '123'
    => "202cb962ac59075b964b07152d234b70"
    

    那里还有其他可用的哈希函数:

    Digest::SHA2.hexdigest '123'
    => "a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3"
    

    【讨论】:

    • 我知道 puppet 企业通常附带 ruby​​ 1.9.3,我认为您的回答可能仍然适用。
    • 我有 ruby​​ 2.0。我试过你的建议,但问题仍然存在。文件中是原始字符串没有哈希值
    • 似乎还有一个问题。我分配给“str”的内容并不重要。文件中始终是调用的第二个参数。
    • @BenediktBock 能否请您在问题中添加新变体(使用Digest 进行哈希处理),这样可以检查吗?请在其后添加__UPD:__ 行和新变体。
    猜你喜欢
    • 1970-01-01
    • 2017-11-02
    • 1970-01-01
    • 1970-01-01
    • 2021-10-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-17
    • 2011-05-05
    相关资源
    最近更新 更多