diff --git a/core/src/com/cloud/storage/template/TARProcessor.java b/core/src/com/cloud/storage/template/TARProcessor.java new file mode 100644 index 00000000000..96c866e4a03 --- /dev/null +++ b/core/src/com/cloud/storage/template/TARProcessor.java @@ -0,0 +1,79 @@ +// +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +// + +package com.cloud.storage.template; + +import com.cloud.storage.Storage.ImageFormat; +import com.cloud.storage.StorageLayer; +import com.cloud.utils.component.AdapterBase; +import org.apache.log4j.Logger; + +import javax.ejb.Local; +import javax.naming.ConfigurationException; +import java.io.File; +import java.util.Map; + +@Local(value = Processor.class) +public class TARProcessor extends AdapterBase implements Processor { + private static final Logger s_logger = Logger.getLogger(TARProcessor.class); + + private StorageLayer _storage; + + @Override + public FormatInfo process(String templatePath, ImageFormat format, String templateName) { + if (format != null) { + s_logger.debug("We currently don't handle conversion from " + format + " to TAR."); + return null; + } + + String tarPath = templatePath + File.separator + templateName + "." + ImageFormat.TAR.getFileExtension(); + + if (!_storage.exists(tarPath)) { + s_logger.debug("Unable to find the tar file: " + tarPath); + return null; + } + + FormatInfo info = new FormatInfo(); + info.format = ImageFormat.TAR; + info.filename = templateName + "." + ImageFormat.TAR.getFileExtension(); + + File tarFile = _storage.getFile(tarPath); + + info.size = _storage.getSize(tarPath); + + info.virtualSize = getVirtualSize(tarFile); + + return info; + } + + @Override + public long getVirtualSize(File file) { + return file.length(); + } + + @Override + public boolean configure(String name, Map params) throws ConfigurationException { + _storage = (StorageLayer)params.get(StorageLayer.InstanceConfigKey); + if (_storage == null) { + throw new ConfigurationException("Unable to get storage implementation"); + } + + return true; + } +} diff --git a/services/secondary-storage/server/src/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java b/services/secondary-storage/server/src/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java index 7582b7377f4..d8b19d3a4de 100755 --- a/services/secondary-storage/server/src/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java +++ b/services/secondary-storage/server/src/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java @@ -121,6 +121,7 @@ import com.cloud.storage.template.Processor; import com.cloud.storage.template.Processor.FormatInfo; import com.cloud.storage.template.QCOW2Processor; import com.cloud.storage.template.RawImageProcessor; +import com.cloud.storage.template.TARProcessor; import com.cloud.storage.template.TemplateLocation; import com.cloud.storage.template.TemplateProp; import com.cloud.storage.template.VhdProcessor; @@ -813,6 +814,8 @@ public class NfsSecondaryStorageResource extends ServerResourceBase implements S processor = new RawImageProcessor(); } else if (format == ImageFormat.VMDK) { processor = new VmdkProcessor(); + } if (format == ImageFormat.TAR) { + processor = new TARProcessor(); } if (processor == null) { diff --git a/services/secondary-storage/server/src/org/apache/cloudstack/storage/template/DownloadManagerImpl.java b/services/secondary-storage/server/src/org/apache/cloudstack/storage/template/DownloadManagerImpl.java index ec5b56969c1..9678b6b8629 100755 --- a/services/secondary-storage/server/src/org/apache/cloudstack/storage/template/DownloadManagerImpl.java +++ b/services/secondary-storage/server/src/org/apache/cloudstack/storage/template/DownloadManagerImpl.java @@ -67,6 +67,7 @@ import com.cloud.storage.template.Processor; import com.cloud.storage.template.Processor.FormatInfo; import com.cloud.storage.template.QCOW2Processor; import com.cloud.storage.template.RawImageProcessor; +import com.cloud.storage.template.TARProcessor; import com.cloud.storage.template.S3TemplateDownloader; import com.cloud.storage.template.ScpTemplateDownloader; import com.cloud.storage.template.TemplateConstants; @@ -996,6 +997,10 @@ public class DownloadManagerImpl extends ManagerBase implements DownloadManager processor.configure("Raw Image Processor", params); _processors.put("Raw Image Processor", processor); + processor = new TARProcessor(); + processor.configure("TAR Processor", params); + _processors.put("TAR Processor", processor); + _templateDir = (String)params.get("public.templates.root.dir"); if (_templateDir == null) { _templateDir = TemplateConstants.DEFAULT_TMPLT_ROOT_DIR;