This is an automated email from the ASF dual-hosted git repository. dahn pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/cloudstack.git
commit 2132f46fcb34e5cc42f063f06563ecabd469ac4c Merge: 02be2cdf67d 939ee9e1534 Author: Daan Hoogland <[email protected]> AuthorDate: Thu Jul 6 11:24:08 2023 +0200 Merge branch '4.18' .../download/HttpsDirectTemplateDownloader.java | 131 ----------- .../download/MetalinkDirectTemplateDownloader.java | 101 -------- .../java/com/cloud/storage/JavaStorageLayer.java | 9 +- .../direct/download/DirectDownloadHelper.java | 83 +++++++ .../direct/download/DirectTemplateDownloader.java | 30 ++- .../download/DirectTemplateDownloaderImpl.java | 34 ++- .../download/HttpDirectTemplateDownloader.java | 89 ++++++- .../download/HttpsDirectTemplateDownloader.java | 252 ++++++++++++++++++++ .../direct/download/HttpsMultiTrustManager.java | 102 ++++++++ .../download/MetalinkDirectTemplateDownloader.java | 177 ++++++++++++++ .../download/NfsDirectTemplateDownloader.java | 33 ++- .../com/cloud/storage/JavaStorageLayerTest.java | 35 +-- .../download/BaseDirectTemplateDownloaderTest.java | 72 ++++++ .../HttpsDirectTemplateDownloaderTest.java | 29 ++- .../MetalinkDirectTemplateDownloaderTest.java | 30 ++- .../com/cloud/vm/VirtualMachineManagerImpl.java | 111 ++++----- .../cloud/upgrade/dao/DatabaseAccessObject.java | 11 + .../java/com/cloud/upgrade/dao/DbUpgradeUtils.java | 5 +- .../com/cloud/upgrade/dao/Upgrade41800to41810.java | 29 +++ .../storage/datastore/db/TemplateDataStoreVO.java | 2 +- .../resources/META-INF/db/schema-41720to41800.sql | 14 -- .../resource/wrapper/LibvirtCheckUrlCommand.java | 19 +- .../kvm/storage/KVMStorageProcessor.java | 35 +-- .../com/cloud/storage/VolumeApiServiceImpl.java | 3 +- .../main/java/com/cloud/vm/UserVmManagerImpl.java | 258 ++++++++++----------- ui/src/views/network/CreateIsolatedNetworkForm.vue | 3 + utils/src/main/java/com/cloud/utils/UriUtils.java | 87 +------ 27 files changed, 1157 insertions(+), 627 deletions(-) diff --cc core/src/main/java/org/apache/cloudstack/direct/download/HttpDirectTemplateDownloader.java index db387b28538,11ba6a5aab0..093f0604a44 --- a/core/src/main/java/org/apache/cloudstack/direct/download/HttpDirectTemplateDownloader.java +++ b/core/src/main/java/org/apache/cloudstack/direct/download/HttpDirectTemplateDownloader.java @@@ -107,4 -107,71 +107,71 @@@ public class HttpDirectTemplateDownload } return new Pair<>(true, getDownloadedFilePath()); } + + @Override + public boolean checkUrl(String url) { + HeadMethod httpHead = new HeadMethod(url); + try { + if (client.executeMethod(httpHead) != HttpStatus.SC_OK) { + s_logger.error(String.format("Invalid URL: %s", url)); + return false; + } + return true; + } catch (IOException e) { + s_logger.error(String.format("Cannot reach URL: %s due to: %s", url, e.getMessage()), e); + return false; + } finally { + httpHead.releaseConnection(); + } + } + + @Override + public Long getRemoteFileSize(String url, String format) { + if ("qcow2".equalsIgnoreCase(format)) { + return QCOW2Utils.getVirtualSize(url); + } else { + return UriUtils.getRemoteSize(url); + } + } + + @Override + public List<String> getMetalinkUrls(String metalinkUrl) { + GetMethod getMethod = new GetMethod(metalinkUrl); + List<String> urls = new ArrayList<>(); + int status; + try { + status = client.executeMethod(getMethod); + } catch (IOException e) { + s_logger.error("Error retrieving urls form metalink: " + metalinkUrl); + getMethod.releaseConnection(); + return null; + } + try { + InputStream is = getMethod.getResponseBodyAsStream(); + if (status == HttpStatus.SC_OK) { + addMetalinkUrlsToListFromInputStream(is, urls); + } + } catch (IOException e) { + s_logger.warn(e.getMessage()); + } finally { + getMethod.releaseConnection(); + } + return urls; + } + + @Override + public List<String> getMetalinkChecksums(String metalinkUrl) { + GetMethod getMethod = new GetMethod(metalinkUrl); + try { + if (client.executeMethod(getMethod) == HttpStatus.SC_OK) { + InputStream is = getMethod.getResponseBodyAsStream(); + return generateChecksumListFromInputStream(is); + } + } catch (IOException e) { + s_logger.error(String.format("Error obtaining metalink checksums on URL %s: %s", metalinkUrl, e.getMessage()), e); + } finally { + getMethod.releaseConnection(); + } + return null; + } -} +}
