This is an automated email from the ASF dual-hosted git repository.

rohit pushed a commit to branch 4.11
in repository https://gitbox.apache.org/repos/asf/cloudstack.git


The following commit(s) were added to refs/heads/4.11 by this push:
     new 39471c8  configdrive: make fewer mountpoints on hosts (#2716)
39471c8 is described below

commit 39471c8c00d0e977872e9224e31de5b4dda9f051
Author: Rohit Yadav <[email protected]>
AuthorDate: Wed Jun 20 12:25:16 2018 +0530

    configdrive: make fewer mountpoints on hosts (#2716)
    
    This ensure that fewer mount points are made on hosts for either
    primary storagepools or secondary storagepools.
    
    Signed-off-by: Rohit Yadav <[email protected]>
---
 .../apache/cloudstack/storage/configdrive/ConfigDrive.java | 14 +++++++++++---
 .../cloudstack/storage/configdrive/ConfigDriveBuilder.java |  5 +++++
 .../cloudstack/storage/configdrive/ConfigDriveTest.java    |  2 +-
 .../wrapper/LibvirtHandleConfigDriveCommandWrapper.java    |  3 +--
 .../cloud/network/element/ConfigDriveNetworkElement.java   |  3 ++-
 .../storage/resource/NfsSecondaryStorageResource.java      |  7 ++++---
 6 files changed, 24 insertions(+), 10 deletions(-)

diff --git 
a/engine/storage/configdrive/src/org/apache/cloudstack/storage/configdrive/ConfigDrive.java
 
b/engine/storage/configdrive/src/org/apache/cloudstack/storage/configdrive/ConfigDrive.java
index 07cfdc8..2fbc590 100644
--- 
a/engine/storage/configdrive/src/org/apache/cloudstack/storage/configdrive/ConfigDrive.java
+++ 
b/engine/storage/configdrive/src/org/apache/cloudstack/storage/configdrive/ConfigDrive.java
@@ -19,7 +19,6 @@ package org.apache.cloudstack.storage.configdrive;
 
 public class ConfigDrive {
 
-    public final static String CONFIGDRIVEFILENAME = "configdrive.iso";
     public final static String CONFIGDRIVEDIR = "configdrive";
 
     public static final String cloudStackConfigDriveName = "/cloudstack/";
@@ -27,11 +26,20 @@ public class ConfigDrive {
 
     /**
      * Creates the path to ISO file relative to mount point.
-     * The config driver path will have the following formated: {@link 
#CONFIGDRIVEDIR} + / + instanceName + / + {@link #CONFIGDRIVEFILENAME}
+     * The config driver path will have the following format: {@link 
#CONFIGDRIVEDIR} + / + instanceName + ".iso"
      *
      * @return config drive ISO file path
      */
     public static String createConfigDrivePath(String instanceName) {
-        return ConfigDrive.CONFIGDRIVEDIR + "/" + instanceName + "/"  + 
ConfigDrive.CONFIGDRIVEFILENAME;
+        return ConfigDrive.CONFIGDRIVEDIR + "/" + 
configIsoFileName(instanceName);
+    }
+
+    /**
+     * Config Drive iso file name for an instance name
+     * @param instanceName
+     * @return
+     */
+    public static String configIsoFileName(String instanceName) {
+        return instanceName + ".iso";
     }
 }
\ No newline at end of file
diff --git 
a/engine/storage/configdrive/src/org/apache/cloudstack/storage/configdrive/ConfigDriveBuilder.java
 
b/engine/storage/configdrive/src/org/apache/cloudstack/storage/configdrive/ConfigDriveBuilder.java
index 55e7979..0675b43 100644
--- 
a/engine/storage/configdrive/src/org/apache/cloudstack/storage/configdrive/ConfigDriveBuilder.java
+++ 
b/engine/storage/configdrive/src/org/apache/cloudstack/storage/configdrive/ConfigDriveBuilder.java
@@ -79,6 +79,11 @@ public class ConfigDriveBuilder {
     public static File base64StringToFile(String encodedIsoData, String 
folder, String fileName) throws IOException {
         byte[] decoded = 
Base64.decodeBase64(encodedIsoData.getBytes(StandardCharsets.US_ASCII));
         Path destPath = Paths.get(folder, fileName);
+        try {
+            Files.createDirectories(destPath.getParent());
+        } catch (final IOException e) {
+            LOG.warn("Exception hit while trying to recreate directory: " + 
destPath.getParent().toString());
+        }
         return Files.write(destPath, decoded).toFile();
     }
 
diff --git 
a/engine/storage/configdrive/test/org/apache/cloudstack/storage/configdrive/ConfigDriveTest.java
 
b/engine/storage/configdrive/test/org/apache/cloudstack/storage/configdrive/ConfigDriveTest.java
index 81294d4..fd3d3db 100644
--- 
a/engine/storage/configdrive/test/org/apache/cloudstack/storage/configdrive/ConfigDriveTest.java
+++ 
b/engine/storage/configdrive/test/org/apache/cloudstack/storage/configdrive/ConfigDriveTest.java
@@ -26,7 +26,7 @@ public class ConfigDriveTest {
 
     @Test
     public void testConfigDriveIsoPath() throws IOException {
-        Assert.assertEquals(ConfigDrive.createConfigDrivePath("i-x-y"), 
"configdrive/i-x-y/configdrive.iso");
+        Assert.assertEquals(ConfigDrive.createConfigDrivePath("i-x-y"), 
"configdrive/i-x-y.iso");
     }
 
 }
\ No newline at end of file
diff --git 
a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtHandleConfigDriveCommandWrapper.java
 
b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtHandleConfigDriveCommandWrapper.java
index 5e4ef48..6baae85 100644
--- 
a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtHandleConfigDriveCommandWrapper.java
+++ 
b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtHandleConfigDriveCommandWrapper.java
@@ -24,7 +24,6 @@ import java.nio.file.Path;
 import java.nio.file.Paths;
 
 import org.apache.cloudstack.storage.configdrive.ConfigDriveBuilder;
-import org.apache.commons.io.FileUtils;
 import org.apache.log4j.Logger;
 
 import com.cloud.agent.api.Answer;
@@ -67,7 +66,7 @@ public final class LibvirtHandleConfigDriveCommandWrapper 
extends CommandWrapper
             }
         } else {
             try {
-                FileUtils.deleteDirectory(isoPath.getParent().toFile());
+                Files.deleteIfExists(isoPath);
             } catch (IOException e) {
                 LOG.warn("Failed to delete config drive: " + 
isoPath.toAbsolutePath().toString());
                 return new Answer(command, false, "Failed due to exception: " 
+ e.getMessage());
diff --git 
a/server/src/com/cloud/network/element/ConfigDriveNetworkElement.java 
b/server/src/com/cloud/network/element/ConfigDriveNetworkElement.java
index a304ea4..919d7bd 100644
--- a/server/src/com/cloud/network/element/ConfigDriveNetworkElement.java
+++ b/server/src/com/cloud/network/element/ConfigDriveNetworkElement.java
@@ -375,8 +375,9 @@ public class ConfigDriveNetworkElement extends AdapterBase 
implements NetworkEle
 
         LOG.debug("Creating config drive ISO for vm: " + 
profile.getInstanceName());
 
+        final String isoFileName = 
ConfigDrive.configIsoFileName(profile.getInstanceName());
         final String isoPath = 
ConfigDrive.createConfigDrivePath(profile.getInstanceName());
-        final String isoData = 
ConfigDriveBuilder.buildConfigDrive(profile.getVmData(), 
ConfigDrive.CONFIGDRIVEFILENAME, profile.getConfigDriveLabel());
+        final String isoData = 
ConfigDriveBuilder.buildConfigDrive(profile.getVmData(), isoFileName, 
profile.getConfigDriveLabel());
         final HandleConfigDriveIsoCommand configDriveIsoCommand = new 
HandleConfigDriveIsoCommand(isoPath, isoData, dataStore.getTO(), true);
 
         final Answer answer = agentManager.easySend(agentId, 
configDriveIsoCommand);
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 0bb923f..46fa170 100644
--- 
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
@@ -42,6 +42,7 @@ import java.io.UnsupportedEncodingException;
 import java.net.InetAddress;
 import java.net.URI;
 import java.net.UnknownHostException;
+import java.nio.file.Files;
 import java.nio.file.Path;
 import java.security.NoSuchAlgorithmException;
 import java.util.ArrayList;
@@ -337,7 +338,7 @@ public class NfsSecondaryStorageResource extends 
ServerResourceBase implements S
             Path tempDir = null;
             try {
                 tempDir = 
java.nio.file.Files.createTempDirectory(ConfigDrive.CONFIGDRIVEDIR);
-                File tmpIsoFile = 
ConfigDriveBuilder.base64StringToFile(cmd.getIsoData(), 
tempDir.toAbsolutePath().toString(), ConfigDrive.CONFIGDRIVEFILENAME);
+                File tmpIsoFile = 
ConfigDriveBuilder.base64StringToFile(cmd.getIsoData(), 
tempDir.toAbsolutePath().toString(), cmd.getIsoFile());
                 copyLocalToNfs(tmpIsoFile, new File(cmd.getIsoFile()), 
cmd.getDestStore());
             } catch (IOException | ConfigurationException e) {
                 return new Answer(cmd, false, "Failed due to exception: " + 
e.getMessage());
@@ -355,11 +356,11 @@ public class NfsSecondaryStorageResource extends 
ServerResourceBase implements S
             DataStoreTO dstore = cmd.getDestStore();
             if (dstore instanceof NfsTO) {
                 NfsTO nfs = (NfsTO) dstore;
-                String relativeTemplatePath = new 
File(cmd.getIsoFile()).getParent();
+                String relativeTemplatePath = new 
File(cmd.getIsoFile()).getPath();
                 String nfsMountPoint = getRootDir(nfs.getUrl(), _nfsVersion);
                 File tmpltPath = new File(nfsMountPoint, relativeTemplatePath);
                 try {
-                    FileUtils.deleteDirectory(tmpltPath);
+                    Files.deleteIfExists(tmpltPath.toPath());
                 } catch (IOException e) {
                     return new Answer(cmd, e);
                 }

Reply via email to