--- /dev/null
+# download from go
+define archive::go (
+ String $server,
+ Integer $port,
+ String $url_path,
+ String $md5_url_path,
+ String $username,
+ String $password,
+ Enum['present', 'absent'] $ensure = present,
+ String $path = $name,
+ Optional[String] $owner = undef,
+ Optional[String] $group = undef,
+ Optional[String] $mode = undef,
+ Optional[Boolean] $extract = undef,
+ Optional[String] $extract_path = undef,
+ Optional[String] $creates = undef,
+ Optional[Boolean] $cleanup = undef,
+ Optional[Stdlib::Compat::Absolute_path] $archive_path = undef,
+) {
+
+ include ::archive::params
+
+ if $archive_path {
+ $file_path = "${archive_path}/${name}"
+ } else {
+ $file_path = $path
+ }
+
+ if $file_path !~ Stdlib::Compat::Absolute_path {
+ fail("archive::go[${name}]: \$name or \$archive_path must be an absolute path!") # lint:ignore:trailing_comma
+ }
+
+ $go_url = "http://${server}:${port}"
+ $file_url = "${go_url}/${url_path}"
+ $md5_url = "${go_url}/${md5_url_path}"
+
+ archive { $file_path:
+ ensure => $ensure,
+ path => $file_path,
+ extract => $extract,
+ extract_path => $extract_path,
+ source => $file_url,
+ checksum => go_md5($username, $password, $name, $md5_url),
+ checksum_type => 'md5',
+ creates => $creates,
+ cleanup => $cleanup,
+ username => $username,
+ password => $password,
+ }
+
+ $file_owner = pick($owner, $archive::params::owner)
+ $file_group = pick($group, $archive::params::group)
+ $file_mode = pick($mode, $archive::params::mode)
+
+ file { $file_path:
+ owner => $file_owner,
+ group => $file_group,
+ mode => $file_mode,
+ require => Archive[$file_path],
+ }
+}