diff --git a/lib/ansible/modules/packaging/language/maven_artifact.py b/lib/ansible/modules/packaging/language/maven_artifact.py index 30ea4e33095..1aed90996b2 100644 --- a/lib/ansible/modules/packaging/language/maven_artifact.py +++ b/lib/ansible/modules/packaging/language/maven_artifact.py @@ -384,10 +384,12 @@ class MavenDownloader: response = self._request(url, "Failed to download artifact " + str(artifact)) with io.open(filename, 'wb') as f: self._write_chunks(response, f, report_hook=self.chunk_report) - if verify_download and not self.verify_md5(filename, url): - # if verify_change was set, the previous file would be deleted - os.remove(filename) - return "Checksum verification failed" + if verify_download: + invalid_md5 = self.is_invalid_md5(filename, url) + if invalid_md5: + # if verify_change was set, the previous file would be deleted + os.remove(filename) + return invalid_md5 return None def chunk_report(self, bytes_so_far, chunk_size, total_size): @@ -416,7 +418,7 @@ class MavenDownloader: return bytes_so_far - def verify_md5(self, file, remote_url): + def is_invalid_md5(self, file, remote_url): if os.path.exists(file): local_md5 = self._local_md5(file) if self.local: @@ -424,8 +426,14 @@ class MavenDownloader: remote_md5 = self._local_md5(parsed_url.path) else: remote_md5 = self._getContent(remote_url + '.md5', "Failed to retrieve MD5", False) - return local_md5 == remote_md5 - return False + if(not remote_md5): + return "Cannot find md5 from " + remote_url + if local_md5 == remote_md5: + return None + else: + return "Checksum does not match: we computed " + local_md5 + "but the repository states " + remote_md5 + + return "Path does not exist: " + file def _local_md5(self, file): md5 = hashlib.md5() @@ -519,7 +527,7 @@ def main(): dest = posixpath.join(dest, "%s-%s.%s" % (artifact_id, version_part, extension)) b_dest = to_bytes(dest, errors='surrogate_or_strict') - if os.path.lexists(b_dest) and ((not verify_change) or downloader.verify_md5(dest, downloader.find_uri_for_artifact(artifact))): + if os.path.lexists(b_dest) and ((not verify_change) or not downloader.is_invalid_md5(dest, downloader.find_uri_for_artifact(artifact))): prev_state = "present" if prev_state == "absent":