Add puppet/archive module, required for newer puppet/rabbitmq
[mirror/dsa-puppet.git] / 3rdparty / modules / archive / lib / puppet / parser / functions / go_md5.rb
1 module Puppet::Parser::Functions
2   # Public: go file md5 checksum
3   #
4   # args[0] - username
5   # args[1] - password
6   # args[2] - file_name
7   # args[3] - go md5 checksum url
8   #
9   # http://www.thoughtworks.com/products/docs/go/12.4/help/Artifacts_API.html
10   #
11   # Returns specific file's md5 from go server md5 checksum file
12   newfunction(:go_md5, type: :rvalue) do |args|
13     raise(ArgumentError, "Invalid go md5 info url #{args}") unless args.size == 4
14
15     require 'puppet_x/bodeco/util.rb'
16
17     username, password, file, url = args
18
19     uri = URI(url)
20     response = PuppetX::Bodeco::Util.content(uri, username: username, password: password)
21
22     checksums = response.split("\n")
23     line = checksums.find { |x| x =~ %r{#{file}=} }
24     md5 = line.match(%r{\b[0-9a-f]{5,40}\b})
25     raise("Could not parse md5 from url#{url} response: #{response.body}") unless md5
26     md5[0]
27   end
28 end