--- /dev/null
+# define: archive::nexus
+# ======================
+#
+# archive wrapper for downloading files from Nexus using REST API. Nexus API:
+# https://repository.sonatype.org/nexus-restlet1x-plugin/default/docs/path__artifact_maven_content.html
+#
+# Parameters
+# ----------
+#
+# Examples
+# --------
+#
+# archive::nexus { '/tmp/jtstand-ui-0.98.jar':
+# url => 'https://oss.sonatype.org',
+# gav => 'org.codehaus.jtstand:jtstand-ui:0.98',
+# repository => 'codehaus-releases',
+# packaging => 'jar',
+# extract => false,
+# }
+#
+define archive::nexus (
+ String $url,
+ String $gav,
+ String $repository,
+ Enum['present', 'absent'] $ensure = present,
+ Enum['none', 'md5', 'sha1', 'sha2','sha256', 'sha384', 'sha512'] $checksum_type = 'md5',
+ Boolean $checksum_verify = true,
+ String $packaging = 'jar',
+ Boolean $use_nexus3_urls = false,
+ Optional[String] $classifier = undef,
+ Optional[String] $extension = undef,
+ Optional[String] $username = undef,
+ Optional[String] $password = undef,
+ Optional[String] $user = undef,
+ Optional[String] $owner = undef,
+ Optional[String] $group = undef,
+ Optional[String] $mode = undef,
+ Optional[Boolean] $extract = undef,
+ Optional[String] $extract_path = undef,
+ Optional[String] $extract_flags = undef,
+ Optional[String] $extract_command = undef,
+ Optional[String] $creates = undef,
+ Optional[Boolean] $cleanup = undef,
+ Optional[String] $proxy_server = undef,
+ Optional[String] $proxy_type = undef,
+ Optional[Boolean] $allow_insecure = undef,
+) {
+
+ include ::archive::params
+
+ $artifact_info = split($gav, ':')
+
+ $group_id = $artifact_info[0]
+ $artifact_id = $artifact_info[1]
+ $version = $artifact_info[2]
+
+ $query_params = {
+
+ 'g' => $group_id,
+ 'a' => $artifact_id,
+ 'v' => $version,
+ 'r' => $repository,
+ 'p' => $packaging,
+ 'c' => $classifier,
+ 'e' => $extension,
+
+ }.filter |$keys, $values| { $values != undef }
+
+ if $use_nexus3_urls {
+ if $classifier {
+ $c = "-${classifier}"
+ } else {
+ $c = ''
+ }
+ $artifact_url = sprintf('%s/repository/%s/%s/%s/%s/%s-%s%s.%s', $url,
+ $repository, regsubst($group_id, '\.', '/', 'G'), $artifact_id,
+ $version, $artifact_id, $version, $c, $packaging)
+ $checksum_url = sprintf('%s.%s', $artifact_url, $checksum_type)
+ } else {
+ $artifact_url = assemble_nexus_url($url, $query_params)
+ $checksum_url = regsubst($artifact_url, "p=${packaging}", "p=${packaging}.${checksum_type}")
+ }
+ archive { $name:
+ ensure => $ensure,
+ source => $artifact_url,
+ username => $username,
+ password => $password,
+ checksum_url => $checksum_url,
+ checksum_type => $checksum_type,
+ checksum_verify => $checksum_verify,
+ extract => $extract,
+ extract_path => $extract_path,
+ extract_flags => $extract_flags,
+ extract_command => $extract_command,
+ user => $user,
+ group => $group,
+ creates => $creates,
+ cleanup => $cleanup,
+ proxy_server => $proxy_server,
+ proxy_type => $proxy_type,
+ allow_insecure => $allow_insecure,
+ }
+
+ $file_owner = pick($owner, $archive::params::owner)
+ $file_group = pick($group, $archive::params::group)
+ $file_mode = pick($mode, $archive::params::mode)
+
+ file { $name:
+ owner => $file_owner,
+ group => $file_group,
+ mode => $file_mode,
+ require => Archive[$name],
+ }
+}