2015-01-13 2 views
0

현재 인수에서 md5 해시를 만들고 싶습니다. 그런 다음 해시를 파일에 쓰고 싶습니다 (경로가 다른 인수 임).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 

그리고 꼭두각시 매니페스트 전화 :

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 

답변

3

?

Ruby 2.0 이상에는 Digest 모듈 (documentation here)이 있는데, 왜 대신 사용하지 않습니까?

당신은이 같은 Digest에서 사용할 수있는 해시 사용할 수 있습니다

:

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

을하거나

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

사용할 수 있습니다 다른 해시 기능이 있습니다

진수 표현을 선호하는 경우 hexdigest를 사용

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

나는 꼭두각시 기업이 보통 루비 1.9.3과 함께 배송된다는 것을 알고 있습니다. 대답은 여전히 ​​적용될 수 있습니다. – ptierno

+0

나는 루비 2.0을 가졌다. 나는 당신의 제안을 시도했지만, 문제는 남아 있습니다. 파일의 원래 문자열이 없습니다. 해시 값이 없습니다. –

+0

다른 문제가있는 것 같습니다. 내가 'str'에 할당하는 것은 중요하지 않습니다. 파일에서 항상 호출의 두 번째 매개 변수입니다. –